左晓为主开发手持机充值管理机
zuoxiao
2024-03-05 88c82455871cd03e0a0b6f32591f9bee74a2dc34
app/src/main/java/com/dayu/recharge/card/UserCard.java
@@ -2,7 +2,6 @@
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;
@@ -15,7 +14,7 @@
 * 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;//充值次数
@@ -53,92 +52,76 @@
    /**
     * 通过byte转bean
     *
     * @param data
     * @param data 读卡的数据
     */
    public static UserCard getBean(List<byte[]> data) {
        UserCard userCard = new UserCard();
        if (data != null) {
            byte[] zero = data.get(0);
            byte[] one = data.get(1);
            byte[] two = data.get(2);
            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];
            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];
            }
            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];
            }
            userCard.balance = HexUtil.get16to10(HexUtil.bytesToHex(balanceBytes));
        try {
            UserCard userCard = new UserCard();
            if (data != null) {
                byte[] zero = data.get(0);
                byte[] one = data.get(1);
                byte[] two = data.get(2);
                userCard.cardType = HexUtil.byteToHex(zero[0]);
                userCard.rechargeTimes = HexUtil.get16to10(HexUtil.byteToHex(zero[1]));
                byte[] swipeNumberBytes = new byte[2];
                System.arraycopy(zero,2,swipeNumberBytes,0,swipeNumberBytes.length);
                String swipeNumberHex = HexUtil.bytesToHex(swipeNumberBytes);
                userCard.swipeNumber = (short) HexUtil.get16to10(swipeNumberHex);
                byte[] electricityPriceBytes = new byte[4];
                System.arraycopy(zero,4,electricityPriceBytes,0,electricityPriceBytes.length);
            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];
            userCard.addressCode = BcdUtil.bcdToStr(addressCodeBytes);
                userCard.electricityPrice = HexUtil.hexToFloat(HexUtil.bytesToHex(electricityPriceBytes));
                userCard.state = BcdUtil.bcdToStr(zero[8]);
                byte[] balanceBytes = new byte[4];
                System.arraycopy(zero,9,balanceBytes,0,balanceBytes.length);
            int year = 0;
            int month = 0;
            int day = 0;
            int hour = 0;
            int minute = 0;
            int second = 0;
            for (int i = 0; i < 6; i++) {
                byte byteData = one[i + 4];
                switch (i) {
                    case 0:
                        year = getBcdToInt(byteData);
                        break;
                    case 1:
                        month = getBcdToInt(byteData);
                        break;
                    case 2:
                        day = getBcdToInt(byteData);
                        break;
                    case 3:
                        hour = getBcdToInt(byteData);
                        break;
                    case 4:
                        minute = getBcdToInt(byteData);
                        break;
                    case 5:
                        second = getBcdToInt(byteData);
                        break;
                userCard.balance = HexUtil.get16to10LowHigh(HexUtil.bytesToHex(balanceBytes));
                byte[] addressCodeBytes = new byte[6];
                System.arraycopy(zero,13,addressCodeBytes,0,2);
                System.arraycopy(two,11,addressCodeBytes,0,4);
                userCard.addressCode = BcdUtil.bcdToStr(addressCodeBytes);
                int year = 0;
                int month = 0;
                int day = 0;
                int hour = 0;
                int minute = 0;
                int second = 0;
                for (int i = 0; i < 6; i++) {
                    byte byteData = one[i + 4];
                    switch (i) {
                        case 0:
                            year = getBcdToInt(byteData);
                            break;
                        case 1:
                            month = getBcdToInt(byteData);
                            break;
                        case 2:
                            day = getBcdToInt(byteData);
                            break;
                        case 3:
                            hour = getBcdToInt(byteData);
                            break;
                        case 4:
                            minute = getBcdToInt(byteData);
                            break;
                        case 5:
                            second = getBcdToInt(byteData);
                            break;
                    }
                }
                Calendar calendar = Calendar.getInstance();
                calendar.set(2000 + year, month, day, hour, minute, second);
                byte[] initPeasantCodeBytes = new byte[16];
                System.arraycopy(one,10,initPeasantCodeBytes,0,5);
                System.arraycopy(two,0,initPeasantCodeBytes,0,11);
                userCard.initPeasantCode = HexUtil.bytesToHex(initPeasantCodeBytes);
                return userCard;
            }
            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];
            userCard.initPeasantCode = HexUtil.bytesToHex(initPeasantCodeBytes);
            return userCard;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return null;
    }
@@ -152,7 +135,7 @@
    /**
     * 用户卡0块
     */
    public class Zero extends BaseCard {
    public class Zero  {
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
@@ -162,25 +145,22 @@
                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;
        }
@@ -190,14 +170,12 @@
    /**
     * 用户卡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) {
                // 获取年、月、日、时、分、秒
@@ -216,6 +194,7 @@
                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;
@@ -224,9 +203,7 @@
                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;
        }
@@ -237,13 +214,11 @@
    /**
     * 用户卡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];