| 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; | 
|     } | 
| } |