From 1c549ae7af5f8d7bdeecb4ad38ab181af4831821 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期四, 29 二月 2024 18:07:41 +0800 Subject: [PATCH] 添加齐河项目的卡结构 --- app/src/main/java/com/dayu/recharge/card/UserCard.java | 474 ++++++++++++++++++++++++++++------------------------------- 1 files changed, 225 insertions(+), 249 deletions(-) diff --git a/app/src/main/java/com/dayu/recharge/card/UserCard.java b/app/src/main/java/com/dayu/recharge/card/UserCard.java index df69beb..90cb38a 100644 --- a/app/src/main/java/com/dayu/recharge/card/UserCard.java +++ b/app/src/main/java/com/dayu/recharge/card/UserCard.java @@ -4,36 +4,222 @@ import com.dayu.recharge.tools.HexUtil; import com.dayu.recharge.utils.MornyUtil; import com.dayu.recharge.utils.MyCommon; +import com.tencent.bugly.crashreport.CrashReport; import java.io.Serializable; import java.util.Calendar; +import java.util.Date; import java.util.List; /** * Copyright (C), 2023, * Author: zuo * Date: 2023-11-07 9:37 - * Description: 鐢ㄦ埛鍗$粨鏋� + * Description: 榻愭渤椤圭洰鐢ㄦ埛鍗$粨鏋� */ public class UserCard implements Serializable { public String cardType = MyCommon.USER_CARD_TYPE_1;//鍐欏崱鏍囧織 A1鍒峰崱寮�娉靛墠 A8鍒峰崱寮�娉靛悗 A2鍙犲姞鍏呭�� - public int rechargeTimes;//鍏呭�兼鏁� + public short arerNumber;//鍖哄煙鍙�(搴曚綅鍦ㄥ墠楂樹綅鍦ㄥ悗) - public short swipeNumber;//鍒峰崱娆℃暟 涓�鑸笉鐢ㄧ簿缁嗙鎺ф墠鐢� + public short deviceNumberl;//璁惧缂栧彿(搴曚綅鍦ㄥ墠楂樹綅鍦ㄥ悗) + public byte rechargeTimes;//鍏呭�兼鏁� - public float electricityPrice;//鐢甸噺鍗曚环 绠$悊鍏冨彲浠ヤ慨鏀� + public int totalWater;//鐢ㄦ埛鎬荤敤姘撮噺 搴曚綅鍦ㄥ墠锛岄珮浣嶅湪鍚�2浣嶅皬鏁扮偣 鍚袱涓皬鏁扮偣鐨勬暣鏁� - public String state = "00";//鍗$姸鎬� 杩斿啓鏌ヨ鍏呭�兼椂鍗$姸鎬佷綅 + public int totalElectric;//鎬荤敤鐢甸噺浣� 搴曚綅鍦ㄥ墠锛岄珮浣嶅湪鍚� 1浣嶅皬鏁扮偣 鍚�1浣嶅皬鏁扮偣鐨勬暣鏁� - public int balance;//浣欓(鍗曚綅涓哄垎) + public int balance;//鍓╀綑閲戦 搴曚綅鍦ㄥ墠 2浣嶅皬鏁扮偣锛屽崟浣嶅厓 - public String addressCode;//琛屾斂鍖哄煙 + public int surplusWater;//鍓╀綑姘撮噺 搴曚綅鍦ㄥ墠 2浣嶅皬鏁扮偣銆�鍗曚綅绔嬫柟绫� - public Calendar rechargeDate;//璐按鏃堕棿 + public Calendar rechargeDate;// 璐按鏃堕棿 BCD - public String initPeasantCode;//鐢ㄦ埛娉ㄥ唽缂栧彿 + /** + * 閫氳繃byte杞琤ean + * + * @param data + */ + public static UserCard getBean(List<byte[]> data) { + try { + UserCard userCard = new UserCard(); + //绗�0鍧楄В鏋� + byte[] zero = data.get(0); + + userCard.cardType = HexUtil.byteToHex(zero[0]); + + byte[] arerNumberByte = new byte[2]; + System.arraycopy(zero, 1, arerNumberByte, 0, arerNumberByte.length); + userCard.arerNumber = (short) HexUtil.get16to10LowHigh(HexUtil.bytesToHex(arerNumberByte)); + + byte[] deviceNumberlByte = new byte[2]; + System.arraycopy(zero, 3, deviceNumberlByte, 0, deviceNumberlByte.length); + userCard.deviceNumberl = (short) HexUtil.get16to10LowHigh(HexUtil.bytesToHex(deviceNumberlByte)); + + userCard.rechargeTimes = HexUtil.hexToByte(HexUtil.byteToHex(zero[5])); + + byte[] totalWaterByte = new byte[4]; + System.arraycopy(zero, 3, totalWaterByte, 0, totalWaterByte.length); + userCard.totalWater = HexUtil.get16to10LowHigh(HexUtil.bytesToHex(totalWaterByte)); + + byte[] totalElectricByte = new byte[4]; + System.arraycopy(zero, 3, totalElectricByte, 0, totalElectricByte.length); + userCard.totalElectric = HexUtil.get16to10LowHigh(HexUtil.bytesToHex(totalElectricByte)); + + //绗�1鍧楄В鏋� + byte[] one = data.get(1); + + byte[] balanceByte = new byte[4]; + System.arraycopy(one, 0, balanceByte, 0, balanceByte.length); + userCard.balance = HexUtil.get16to10LowHigh(HexUtil.bytesToHex(balanceByte)); + + byte[] surplusWaterByte = new byte[4]; + System.arraycopy(one, 4, surplusWaterByte, 0, surplusWaterByte.length); + userCard.surplusWater = HexUtil.get16to10LowHigh(HexUtil.bytesToHex(surplusWaterByte)); + + 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; + + 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 = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(arerNumber)); + if (arerNumberBytes != null) { + System.arraycopy(arerNumberBytes, 0, data, 1, arerNumberBytes.length); + } + byte[] deviceNumberlBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(deviceNumberl)); + if (deviceNumberlBytes != null) { + System.arraycopy(deviceNumberlBytes, 0, data, 3, deviceNumberlBytes.length); + } + byte rechargeTimesByte = HexUtil.hexToByte(HexUtil.get10to16(rechargeTimes)); + data[5] = rechargeTimesByte; + byte[] totalWaterBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalWater)); + if (totalWaterBytes != null) { + System.arraycopy(totalWaterBytes, 0, data, 6, totalWaterBytes.length); + } + byte[] totalElectricBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalElectric)); + if (totalElectricBytes != null) { + System.arraycopy(totalElectricBytes, 0, data, 10, totalElectricBytes.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 = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance)); + if (balanceBytes != null) { + System.arraycopy(balanceBytes, 0, data, 0, balanceBytes.length); + } + + byte[] surplusWaterBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater)); + if (surplusWaterBytes != null) { + System.arraycopy(surplusWaterBytes, 0, data, 0, surplusWaterBytes.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 = (byte) ((year / 10) << 4 | ((year % 10) / 100)); + byte bcdMonth = (byte) ((month / 10) << 4 | (month % 10)); + byte bcdDay = (byte) ((day / 10) << 4 | (day % 10)); + 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 = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance)); + if (balanceBytes != null) { + System.arraycopy(balanceBytes, 0, data, 0, balanceBytes.length); + } + + byte[] surplusWaterBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater)); + if (surplusWaterBytes != null) { + System.arraycopy(surplusWaterBytes, 0, data, 0, surplusWaterBytes.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 = (byte) ((year / 10) << 4 | ((year % 10) / 100)); + byte bcdMonth = (byte) ((month / 10) << 4 | (month % 10)); + byte bcdDay = (byte) ((day / 10) << 4 | (day % 10)); + 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() { Zero zero = new Zero(); @@ -50,215 +236,6 @@ return zero.toBytes(); } - /** - * 閫氳繃byte杞琤ean - * - * @param data - */ - public static UserCard getBean(List<byte[]> data) { - 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]; - 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.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]; - 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]; - 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; - } - - - private static int getBcdToInt(byte data) { - return ((data & 0xF0) >> 4) * 10 + ((data & 0x0F)); - } - - - /** - * 鐢ㄦ埛鍗�0鍧� - */ - public class Zero extends BaseCard { - public byte[] toByte() { - byte[] data = new byte[16]; - data[0] = HexUtil.hexToByte(cardType); - try { - data[1] = HexUtil.hexToByte(HexUtil.get10to16(rechargeTimes)); - } catch (Exception e) { - e.printStackTrace(); - } - byte[] swipeNumbers = HexUtil.hexToByteArray(HexUtil.get10to16(swipeNumber)); - for (int i = 0; i < swipeNumbers.length; i++) { - data[i + 2] = swipeNumbers[i]; - } - byte[] electricityPrices = HexUtil.hexToByteArray(HexUtil.folatToHexString(electricityPrice)); - for (int i = 0; i < electricityPrices.length; i++) { - data[i + 4] = electricityPrices[i]; - } - 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]; - } - byte[] addresscodes = BcdUtil.strToBcd(addressCode); - data[13] = addresscodes[0]; - data[14] = addresscodes[1]; - data[15] = getByteSum(data); - return data; - } - - } - - /** - * 鐢ㄦ埛鍗�1鍧� - */ - public class One extends BaseCard { - - 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]; - } - if (rechargeDate != null) { - // 鑾峰彇骞淬�佹湀銆佹棩銆佹椂銆佸垎銆佺 - -// bcdBytes[0] = (byte) ((year / 1000) << 4) | (byte) (year % 1000 / 100); // 骞翠唤鐨勫崄浣嶅拰涓綅锛堥珮瀛楄妭锛� -// bcdBytes[1] = (byte) ((year / 10 % 10) << 4) | (byte) (year % 10); // 骞翠唤鐨勫崄浣嶅拰涓綅锛堜綆瀛楄妭锛� - int year = (rechargeDate.get(Calendar.YEAR)) % 1000; - int month = rechargeDate.get(Calendar.MONTH) + 1; // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ラ渶瑕佸姞1 - int day = rechargeDate.get(Calendar.DAY_OF_MONTH); - int hour = rechargeDate.get(Calendar.HOUR_OF_DAY); - int minute = rechargeDate.get(Calendar.MINUTE); - int second = rechargeDate.get(Calendar.SECOND); - - byte bcdYear = (byte) ((year / 10) << 4 | ((year % 10) / 100)); - byte bcdMonth = (byte) ((month / 10) << 4 | (month % 10)); - byte bcdDay = (byte) ((day / 10) << 4 | (day % 10)); - 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[7] = bcdHour; - data[8] = bcdMinute; - data[9] = bcdSecond; - } - byte[] initPeasantCodes = HexUtil.hexToByteArray(initPeasantCode); - for (int i = 0; i < 5; i++) { - data[i + 10] = initPeasantCodes[i]; - } - data[15] = getByteSum(data); - return data; - } - - - } - - /** - * 鐢ㄦ埛鍗�2鍧� - */ - public class Two extends BaseCard { - 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]; - } - byte[] addresscodes = BcdUtil.strToBcd(addressCode); - data[11] = addresscodes[2]; - data[12] = addresscodes[3]; - data[13] = addresscodes[4]; - data[14] = addresscodes[5]; - data[15] = getByteSum(data); - return data; - } - } - public String getCardType() { return cardType; @@ -268,37 +245,44 @@ this.cardType = cardType; } - public int getRechargeTimes() { + public short getArerNumber() { + return arerNumber; + } + + public void setArerNumber(short arerNumber) { + this.arerNumber = arerNumber; + } + + public short getDeviceNumberl() { + return deviceNumberl; + } + + public void setDeviceNumberl(short deviceNumberl) { + this.deviceNumberl = deviceNumberl; + } + + public byte getRechargeTimes() { return rechargeTimes; } - public void setRechargeTimes(int rechargeTimes) { + public void setRechargeTimes(byte rechargeTimes) { this.rechargeTimes = rechargeTimes; } - - public short getSwipeNumber() { - return swipeNumber; + public int getTotalWater() { + return totalWater; } - public void setSwipeNumber(short swipeNumber) { - this.swipeNumber = swipeNumber; + public void setTotalWater(int totalWater) { + this.totalWater = totalWater; } - public float getElectricityPrice() { - return electricityPrice; + public int getTotalElectric() { + return totalElectric; } - public void setElectricityPrice(float electricityPrice) { - this.electricityPrice = electricityPrice; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; + public void setTotalElectric(int totalElectric) { + this.totalElectric = totalElectric; } public int getBalance() { @@ -309,12 +293,12 @@ this.balance = balance; } - public String getAddressCode() { - return addressCode; + public int getSurplusWater() { + return surplusWater; } - public void setAddressCode(String addressCode) { - this.addressCode = addressCode; + public void setSurplusWater(int surplusWater) { + this.surplusWater = surplusWater; } public Calendar getRechargeDate() { @@ -323,14 +307,6 @@ public void setRechargeDate(Calendar rechargeDate) { this.rechargeDate = rechargeDate; - } - - public String getInitPeasantCode() { - return initPeasantCode; - } - - public void setInitPeasantCode(String initPeasantCode) { - this.initPeasantCode = initPeasantCode; } -- Gitblit v1.8.0