package com.dayu.qiheonlinelibrary.card; 
 | 
  
 | 
import com.dayu.baselibrary.bean.BaseManagerToUserCard; 
 | 
import com.dayu.baselibrary.tools.HexUtil; 
 | 
import com.dayu.qiheonlinelibrary.utils.CardCommon; 
 | 
import com.tencent.bugly.crashreport.CrashReport; 
 | 
  
 | 
import java.io.Serializable; 
 | 
import java.util.Calendar; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * Created by Android Studio. 
 | 
 * author: zuo 
 | 
 * Date: 2024-07-13 
 | 
 * Time: 15:47 
 | 
 * 备注: 
 | 
 */ 
 | 
public class ManagerToUserCard extends BaseManagerToUserCard implements Serializable { 
 | 
  
 | 
    public String cardType = CardCommon.USER_CARD_TYPE_1;//写卡标志 A1刷卡开泵前 A8刷卡开泵后  A2叠加充值 
 | 
  
 | 
    public int arerNumber;//区域号(底位在前高位在后) 
 | 
  
 | 
    public String oldCardNumber;//旧卡卡号 
 | 
  
 | 
    public int cardWriteState;//管理卡返写机制 00:中心写01:控制器返写 
 | 
  
 | 
    public int cardState;//现场卡状态  00:旧卡 01:新卡 
 | 
  
 | 
    public int balance;//剩余金额 底位在前  2位小数点,单位分 
 | 
  
 | 
    public int surplusElecticity;//剩余电量 底位在前  2位小数点 单位立方米 (跟价格一样先乘以100) 
 | 
  
 | 
    public int totalMorny;//累计充值金额 
 | 
  
 | 
    public Calendar rechargeDate;// 购水时间 BCD 
 | 
  
 | 
    public Float electricPrice;//电单价,保留三位小数 
 | 
  
 | 
    /** 
 | 
     * 通过byte转bean 
 | 
     * 
 | 
     * @param data 
 | 
     */ 
 | 
    @Override 
 | 
    public  ManagerToUserCard getBean(List<byte[]> data) { 
 | 
        try { 
 | 
            ManagerToUserCard userCard = new ManagerToUserCard(); 
 | 
            //第0块解析 
 | 
            byte[] zero = data.get(0); 
 | 
            userCard.cardType = HexUtil.byteToHex(zero[0]); 
 | 
  
 | 
            byte[] arerNumberByte = new byte[4]; 
 | 
            System.arraycopy(zero, 1, arerNumberByte, 0, arerNumberByte.length); 
 | 
            userCard.arerNumber = HexUtil.get16To10LowHightByBytes(arerNumberByte); 
 | 
  
 | 
            byte[] oldCardNumberByte = new byte[4]; 
 | 
            System.arraycopy(zero, 5, oldCardNumberByte, 0, oldCardNumberByte.length); 
 | 
            userCard.oldCardNumber = HexUtil.bytesToHex(oldCardNumberByte); 
 | 
  
 | 
            byte[] cardWriteState = new byte[1]; 
 | 
            System.arraycopy(zero, 13, cardWriteState, 0, cardWriteState.length); 
 | 
            userCard.cardWriteState = HexUtil.get16To10LowHightByBytes(cardWriteState); 
 | 
            byte[] cardState = new byte[1]; 
 | 
            System.arraycopy(zero, 14, cardState, 0, cardState.length); 
 | 
            userCard.cardState = HexUtil.get16To10LowHightByBytes(cardState); 
 | 
            //第1块解析 
 | 
            byte[] one = data.get(1); 
 | 
            byte[] balanceByte = new byte[4]; 
 | 
            System.arraycopy(one, 0, balanceByte, 0, balanceByte.length); 
 | 
            userCard.balance = HexUtil.get16To10LowHightByBytes(balanceByte); 
 | 
            byte[] surplusWaterByte = new byte[4]; 
 | 
            System.arraycopy(one, 4, surplusWaterByte, 0, surplusWaterByte.length); 
 | 
            userCard.surplusElecticity = HexUtil.get16To10LowHightByBytes(surplusWaterByte); 
 | 
  
 | 
            byte[] totalMorny = new byte[4]; 
 | 
            System.arraycopy(one, 8, totalMorny, 0, totalMorny.length); 
 | 
            userCard.totalMorny = HexUtil.get16To10LowHightByBytes(totalMorny); 
 | 
  
 | 
            byte[] rechargeDateByte = new byte[3]; 
 | 
            System.arraycopy(one, 12, rechargeDateByte, 0, rechargeDateByte.length); 
 | 
            int year = HexUtil.getBcdToInt(one[12]); 
 | 
            int month = HexUtil.getBcdToInt(one[13]); 
 | 
            int day = HexUtil.getBcdToInt(one[14]); 
 | 
            Calendar calendar = Calendar.getInstance(); 
 | 
            calendar.set(2000 + year, month, day, 0, 0, 0); 
 | 
            userCard.rechargeDate = calendar; 
 | 
  
 | 
            byte[] two = data.get(2); 
 | 
            byte[] electricPriceByte = new byte[4]; 
 | 
            System.arraycopy(two, 8, electricPriceByte, 0, electricPriceByte.length); 
 | 
            userCard.electricPrice = HexUtil.hexToFloatLowHigh(electricPriceByte); 
 | 
  
 | 
            return userCard; 
 | 
  
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
            return null; 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 用户卡0块 
 | 
     */ 
 | 
    public class Zero extends BaseCard { 
 | 
        public byte[] toByte() { 
 | 
            try { 
 | 
                byte[] data = new byte[16]; 
 | 
                data[0] = HexUtil.hexToByte(cardType); 
 | 
                //区域号 
 | 
                byte[] arerNumberBytes = new byte[4]; 
 | 
                byte[] arerNumberDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(arerNumber)); 
 | 
                System.arraycopy(arerNumberDatas, 0, arerNumberBytes, 0, arerNumberDatas.length); 
 | 
                if (arerNumberBytes != null) { 
 | 
                    System.arraycopy(arerNumberBytes, 0, data, 1, arerNumberBytes.length); 
 | 
                } 
 | 
                //管理卡返写机制 00:中心写01:控制器返写 
 | 
                byte[] cardWriteStateBytes = new byte[1]; 
 | 
                byte[] cardWriteStateDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(cardWriteState)); 
 | 
                System.arraycopy(cardWriteStateDatas, 0, cardWriteStateBytes, 0, cardWriteStateDatas.length); 
 | 
                if (cardWriteStateBytes != null) { 
 | 
                    System.arraycopy(cardWriteStateBytes, 0, data, 13, cardWriteStateBytes.length); 
 | 
                } 
 | 
  
 | 
                //管理卡返写机制 00:中心写01:控制器返写 
 | 
                byte[] cardStateBytes = new byte[1]; 
 | 
                byte[] cardStateDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(cardState)); 
 | 
                System.arraycopy(cardStateDatas, 0, cardStateBytes, 0, cardStateDatas.length); 
 | 
                if (cardStateBytes != null) { 
 | 
                    System.arraycopy(cardStateBytes, 0, data, 14, cardStateBytes.length); 
 | 
                } 
 | 
  
 | 
  
 | 
                data[15] = getByteSum(data); 
 | 
                return data; 
 | 
            } catch (Exception e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
  
 | 
            return null; 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 用户卡1块 
 | 
     */ 
 | 
    public class One extends BaseCard { 
 | 
  
 | 
        public byte[] toBytes() { 
 | 
            byte[] data = new byte[16]; 
 | 
  
 | 
  
 | 
            try { 
 | 
                byte[] balanceBytes = new byte[4]; 
 | 
                byte[] balanceDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance)); 
 | 
                System.arraycopy(balanceDatas, 0, balanceBytes, 0, balanceDatas.length); 
 | 
                if (balanceBytes != null) { 
 | 
                    System.arraycopy(balanceBytes, 0, data, 0, balanceBytes.length); 
 | 
                } 
 | 
  
 | 
                byte[] surplusElecticityBytes = new byte[4]; 
 | 
                byte[] surplusElecticityDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusElecticity)); 
 | 
                System.arraycopy(surplusElecticityDatas, 0, surplusElecticityBytes, 0, surplusElecticityDatas.length); 
 | 
                if (surplusElecticityBytes != null) { 
 | 
                    System.arraycopy(surplusElecticityBytes, 0, data, 4, surplusElecticityBytes.length); 
 | 
                } 
 | 
                byte[] totalMornyBytes = new byte[4]; 
 | 
                byte[] totalMornyDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalMorny)); 
 | 
                System.arraycopy(totalMornyDatas, 0, totalMornyBytes, 0, totalMornyDatas.length); 
 | 
                if (totalMornyBytes != null) { 
 | 
                    System.arraycopy(totalMornyBytes, 0, data, 8, totalMornyBytes.length); 
 | 
                } 
 | 
  
 | 
                if (rechargeDate != null) { 
 | 
                    // 获取年、月、日、时、分、秒 
 | 
                    int year = (rechargeDate.get(Calendar.YEAR)) % 1000; 
 | 
                    int month = rechargeDate.get(Calendar.MONTH) + 1; // 月份从0开始,所以需要加1 
 | 
                    int day = rechargeDate.get(Calendar.DAY_OF_MONTH); 
 | 
                    byte bcdYear = HexUtil.getIntToBCD(year)[0]; 
 | 
                    byte bcdMonth = HexUtil.getIntToBCD(month)[0]; 
 | 
                    byte bcdDay = HexUtil.getIntToBCD(day)[0]; 
 | 
                    data[12] = bcdYear; 
 | 
                    data[13] = bcdMonth; 
 | 
                    data[14] = bcdDay; 
 | 
                } 
 | 
  
 | 
                data[15] = getByteSum(data); 
 | 
            } catch (Exception e) { 
 | 
                e.printStackTrace(); 
 | 
                CrashReport.postCatchedException(e); 
 | 
            } 
 | 
            return data; 
 | 
        } 
 | 
  
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 用户卡2块 
 | 
     */ 
 | 
    public class Two extends BaseCard { 
 | 
        public byte[] toBytes() { 
 | 
            byte[] data = new byte[16]; 
 | 
  
 | 
  
 | 
            try { 
 | 
                byte[] balanceBytes = new byte[4]; 
 | 
                byte[] balanceDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance)); 
 | 
                System.arraycopy(balanceDatas, 0, balanceBytes, 0, balanceDatas.length); 
 | 
                if (balanceBytes != null) { 
 | 
                    System.arraycopy(balanceBytes, 0, data, 0, balanceBytes.length); 
 | 
                } 
 | 
  
 | 
                byte[] surplusElecticityBytes = new byte[4]; 
 | 
                byte[] surplusElecticityDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusElecticity)); 
 | 
                System.arraycopy(surplusElecticityDatas, 0, surplusElecticityBytes, 0, surplusElecticityDatas.length); 
 | 
                if (surplusElecticityBytes != null) { 
 | 
                    System.arraycopy(surplusElecticityBytes, 0, data, 4, surplusElecticityBytes.length); 
 | 
                } 
 | 
  
 | 
                byte[] electricPriceBytes = new byte[4]; 
 | 
                byte[] electricPriceDatas = HexUtil.hexToByteArray(HexUtil.floatToHexLowHigh(electricPrice)); 
 | 
                System.arraycopy(electricPriceDatas, 0, electricPriceBytes, 0, electricPriceDatas.length); 
 | 
                if (electricPriceBytes != null) { 
 | 
                    System.arraycopy(electricPriceBytes, 0, data, 8, electricPriceBytes.length); 
 | 
                } 
 | 
  
 | 
                if (rechargeDate != null) { 
 | 
                    // 获取年、月、日、时、分、秒 
 | 
                    int year = (rechargeDate.get(Calendar.YEAR)) % 1000; 
 | 
                    int month = rechargeDate.get(Calendar.MONTH) + 1; // 月份从0开始,所以需要加1 
 | 
                    int day = rechargeDate.get(Calendar.DAY_OF_MONTH); 
 | 
                    byte bcdYear = HexUtil.getIntToBCD(year)[0]; 
 | 
                    byte bcdMonth = HexUtil.getIntToBCD(month)[0]; 
 | 
                    byte bcdDay = HexUtil.getIntToBCD(day)[0]; 
 | 
                    data[12] = bcdYear; 
 | 
                    data[13] = bcdMonth; 
 | 
                    data[14] = bcdDay; 
 | 
                } 
 | 
  
 | 
  
 | 
                data[15] = getByteSum(data); 
 | 
            } catch (Exception e) { 
 | 
                e.printStackTrace(); 
 | 
                CrashReport.postCatchedException(e); 
 | 
            } 
 | 
            return data; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public byte[] getZeroBytes() { 
 | 
        ManagerToUserCard.Zero zero = new ManagerToUserCard.Zero(); 
 | 
        return zero.toByte(); 
 | 
    } 
 | 
  
 | 
    public byte[] getOneBytes() { 
 | 
        ManagerToUserCard.One zero = new ManagerToUserCard.One(); 
 | 
        return zero.toBytes(); 
 | 
    } 
 | 
  
 | 
    public byte[] getTwoBytes() { 
 | 
        ManagerToUserCard.Two zero = new ManagerToUserCard.Two(); 
 | 
        return zero.toBytes(); 
 | 
    } 
 | 
  
 | 
  
 | 
    public String getCardType() { 
 | 
        return cardType; 
 | 
    } 
 | 
  
 | 
    public void setCardType(String cardType) { 
 | 
        this.cardType = cardType; 
 | 
    } 
 | 
  
 | 
    public int getArerNumber() { 
 | 
        return arerNumber; 
 | 
    } 
 | 
  
 | 
    public void setArerNumber(int arerNumber) { 
 | 
        this.arerNumber = arerNumber; 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    public int getCardWriteState() { 
 | 
        return cardWriteState; 
 | 
    } 
 | 
  
 | 
    public void setCardWriteState(int cardWriteState) { 
 | 
        this.cardWriteState = cardWriteState; 
 | 
    } 
 | 
  
 | 
    public int getCardState() { 
 | 
        return cardState; 
 | 
    } 
 | 
  
 | 
    public void setCardState(int cardState) { 
 | 
        this.cardState = cardState; 
 | 
    } 
 | 
  
 | 
    public int getBalance() { 
 | 
        return balance; 
 | 
    } 
 | 
  
 | 
    public void setBalance(int balance) { 
 | 
        this.balance = balance; 
 | 
    } 
 | 
  
 | 
    public int getSurplusElecticity() { 
 | 
        return surplusElecticity; 
 | 
    } 
 | 
  
 | 
    public void setSurplusElecticity(int surplusElecticity) { 
 | 
        this.surplusElecticity = surplusElecticity; 
 | 
    } 
 | 
  
 | 
    public int getTotalMorny() { 
 | 
        return totalMorny; 
 | 
    } 
 | 
  
 | 
    public void setTotalMorny(int totalMorny) { 
 | 
        this.totalMorny = totalMorny; 
 | 
    } 
 | 
  
 | 
    public Calendar getRechargeDate() { 
 | 
        return rechargeDate; 
 | 
    } 
 | 
  
 | 
    public void setRechargeDate(Calendar rechargeDate) { 
 | 
        this.rechargeDate = rechargeDate; 
 | 
    } 
 | 
  
 | 
    public Float getElectricPrice() { 
 | 
        return electricPrice; 
 | 
    } 
 | 
  
 | 
    public void setElectricPrice(Float electricPrice) { 
 | 
        this.electricPrice = electricPrice; 
 | 
    } 
 | 
  
 | 
    public String getOldCardNumber() { 
 | 
        return oldCardNumber; 
 | 
    } 
 | 
  
 | 
    public void setOldCardNumber(String oldCardNumber) { 
 | 
        this.oldCardNumber = oldCardNumber; 
 | 
    } 
 | 
} 
 |