package com.dayu.qiheonlinelibrary.card; import com.dayu.baselibrary.tools.BcdUtil; 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 BaseCard 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 */ public static ManagerToUserCard getBean(List 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; } }