| | |
| | | |
| | | import com.dayu.recharge.tools.BcdUtil; |
| | | import com.dayu.recharge.tools.HexUtil; |
| | | import com.dayu.recharge.utils.MornyUtil; |
| | | import com.dayu.recharge.utils.MyCommon; |
| | | |
| | | import java.io.Serializable; |
| | |
| | | * Date: 2023-11-07 9:37 |
| | | * Description: 用户卡结构 |
| | | */ |
| | | public class UserCard implements Serializable { |
| | | public class UserCard extends BaseCard implements Serializable { |
| | | public String cardType = MyCommon.USER_CARD_TYPE_1;//写卡标志 A1刷卡开泵前 A8刷卡开泵后 A2叠加充值 |
| | | |
| | | public int rechargeTimes;//充值次数 |
| | |
| | | /** |
| | | * 通过byte转bean |
| | | * |
| | | * @param data |
| | | * @param data 读卡的数据 |
| | | */ |
| | | public static UserCard getBean(List<byte[]> data) { |
| | | try { |
| | |
| | | userCard.cardType = HexUtil.byteToHex(zero[0]); |
| | | userCard.rechargeTimes = HexUtil.get16to10(HexUtil.byteToHex(zero[1])); |
| | | byte[] swipeNumberBytes = new byte[2]; |
| | | swipeNumberBytes[0] = zero[2]; |
| | | swipeNumberBytes[1] = zero[3]; |
| | | System.arraycopy(zero,2,swipeNumberBytes,0,swipeNumberBytes.length); |
| | | String swipeNumberHex = HexUtil.bytesToHex(swipeNumberBytes); |
| | | userCard.swipeNumber = (short) HexUtil.get16to10(swipeNumberHex); |
| | | byte[] electricityPriceBytes = new byte[4]; |
| | | for (int i = 0; i < 4; i++) { |
| | | electricityPriceBytes[i] = zero[i + 4]; |
| | | } |
| | | System.arraycopy(zero,4,electricityPriceBytes,0,electricityPriceBytes.length); |
| | | |
| | | userCard.electricityPrice = HexUtil.hexToFloat(HexUtil.bytesToHex(electricityPriceBytes)); |
| | | userCard.state = BcdUtil.bcdToStr(zero[8]); |
| | | byte[] balanceBytes = new byte[4]; |
| | | for (int i = 0; i < 4; i++) { |
| | | balanceBytes[i] = zero[i + 9]; |
| | | } |
| | | System.arraycopy(zero,9,balanceBytes,0,balanceBytes.length); |
| | | |
| | | userCard.balance = HexUtil.get16to10LowHigh(HexUtil.bytesToHex(balanceBytes)); |
| | | |
| | | byte[] addressCodeBytes = new byte[6]; |
| | | addressCodeBytes[0] = zero[13]; |
| | | addressCodeBytes[1] = zero[14]; |
| | | addressCodeBytes[2] = two[11]; |
| | | addressCodeBytes[3] = two[12]; |
| | | addressCodeBytes[4] = two[13]; |
| | | addressCodeBytes[5] = two[14]; |
| | | System.arraycopy(zero,13,addressCodeBytes,0,2); |
| | | System.arraycopy(two,11,addressCodeBytes,0,4); |
| | | userCard.addressCode = BcdUtil.bcdToStr(addressCodeBytes); |
| | | |
| | | int year = 0; |
| | |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.set(2000 + year, month, day, hour, minute, second); |
| | | byte[] initPeasantCodeBytes = new byte[16]; |
| | | initPeasantCodeBytes[0] = one[10]; |
| | | initPeasantCodeBytes[1] = one[11]; |
| | | initPeasantCodeBytes[2] = one[12]; |
| | | initPeasantCodeBytes[3] = one[13]; |
| | | initPeasantCodeBytes[4] = one[14]; |
| | | initPeasantCodeBytes[5] = two[0]; |
| | | initPeasantCodeBytes[6] = two[1]; |
| | | initPeasantCodeBytes[7] = two[2]; |
| | | initPeasantCodeBytes[8] = two[3]; |
| | | initPeasantCodeBytes[9] = two[4]; |
| | | initPeasantCodeBytes[10] = two[5]; |
| | | initPeasantCodeBytes[11] = two[6]; |
| | | initPeasantCodeBytes[12] = two[7]; |
| | | initPeasantCodeBytes[13] = two[8]; |
| | | initPeasantCodeBytes[14] = two[9]; |
| | | initPeasantCodeBytes[15] = two[10]; |
| | | System.arraycopy(one,10,initPeasantCodeBytes,0,5); |
| | | System.arraycopy(two,0,initPeasantCodeBytes,0,11); |
| | | userCard.initPeasantCode = HexUtil.bytesToHex(initPeasantCodeBytes); |
| | | return userCard; |
| | | } |
| | |
| | | /** |
| | | * 用户卡0块 |
| | | */ |
| | | public class Zero extends BaseCard { |
| | | public class Zero { |
| | | public byte[] toByte() { |
| | | byte[] data = new byte[16]; |
| | | data[0] = HexUtil.hexToByte(cardType); |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | byte[] swipeNumbers = HexUtil.hexToByteArray(HexUtil.get10to16(swipeNumber)); |
| | | for (int i = 0; i < swipeNumbers.length; i++) { |
| | | data[i + 2] = swipeNumbers[i]; |
| | | } |
| | | |
| | | System.arraycopy(swipeNumbers, 0, data, 2, swipeNumbers.length); |
| | | |
| | | byte[] electricityPrices = HexUtil.hexToByteArray(HexUtil.folatToHexString(electricityPrice)); |
| | | for (int i = 0; i < electricityPrices.length; i++) { |
| | | data[i + 4] = electricityPrices[i]; |
| | | } |
| | | |
| | | System.arraycopy(electricityPrices, 0, data, 4, electricityPrices.length); |
| | | try { |
| | | data[8] = BcdUtil.strToBcd(state)[0]; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | byte[] balances = HexUtil.hexToByteArray(HexUtil.get10to16LowHigh(balance, 8)); |
| | | for (int i = 0; i < balances.length; i++) { |
| | | data[i + 9] = balances[i]; |
| | | } |
| | | |
| | | System.arraycopy(balances, 0, data, 9, balances.length); |
| | | byte[] addresscodes = BcdUtil.strToBcd(addressCode); |
| | | data[13] = addresscodes[0]; |
| | | data[14] = addresscodes[1]; |
| | | System.arraycopy(addresscodes, 0, data, 13, 2); |
| | | data[15] = getByteSum(data); |
| | | return data; |
| | | } |
| | |
| | | /** |
| | | * 用户卡1块 |
| | | */ |
| | | public class One extends BaseCard { |
| | | public class One { |
| | | |
| | | public byte[] toBytes() { |
| | | byte[] data = new byte[16]; |
| | | byte[] balances = HexUtil.hexToByteArray(HexUtil.get10to16LowHigh(balance, 8)); |
| | | for (int i = 0; i < balances.length; i++) { |
| | | data[i] = balances[i]; |
| | | } |
| | | System.arraycopy(balances, 0, data, 0, balances.length); |
| | | if (rechargeDate != null) { |
| | | // 获取年、月、日、时、分、秒 |
| | | |
| | |
| | | byte bcdHour = (byte) ((hour / 10) << 4 | (hour % 10)); |
| | | byte bcdMinute = (byte) ((minute / 10) << 4 | (minute % 10)); |
| | | byte bcdSecond = (byte) ((second / 10) << 4 | (second % 10)); |
| | | |
| | | data[4] = bcdYear; |
| | | data[5] = bcdMonth; |
| | | data[6] = bcdDay; |
| | |
| | | data[9] = bcdSecond; |
| | | } |
| | | byte[] initPeasantCodes = HexUtil.hexToByteArray(initPeasantCode); |
| | | for (int i = 0; i < 5; i++) { |
| | | data[i + 10] = initPeasantCodes[i]; |
| | | } |
| | | System.arraycopy(initPeasantCodes, 5, data, 0, 5); |
| | | data[15] = getByteSum(data); |
| | | return data; |
| | | } |
| | |
| | | /** |
| | | * 用户卡2块 |
| | | */ |
| | | public class Two extends BaseCard { |
| | | public class Two { |
| | | public byte[] toBytes() { |
| | | byte[] data = new byte[16]; |
| | | byte[] initPeasantCodes = HexUtil.hexToByteArray(initPeasantCode); |
| | | for (int i = 5; i < 16; i++) { |
| | | data[i - 5] = initPeasantCodes[i]; |
| | | } |
| | | System.arraycopy(initPeasantCodes, 5, data, 0, 11); |
| | | byte[] addresscodes = BcdUtil.strToBcd(addressCode); |
| | | data[11] = addresscodes[2]; |
| | | data[12] = addresscodes[3]; |