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/BlackCard.java            |   21 +
 app/src/main/java/com/dayu/recharge/card/RegionCard.java           |   65 ++++
 app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java  |   12 
 app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java  |    8 
 app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java    |   18 +
 app/src/main/java/com/dayu/recharge/card/UserCard.java             |  474 ++++++++++++++++-----------------
 app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java |  100 +++---
 app/src/main/java/com/dayu/recharge/activity/RechargeDetail.java   |    8 
 app/src/main/java/com/dayu/recharge/tools/HexUtil.java             |   63 ++++
 app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java |    6 
 app/src/main/java/com/dayu/recharge/utils/MyCommon.java            |   37 ++
 11 files changed, 484 insertions(+), 328 deletions(-)

diff --git a/app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java b/app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
index 7c5a5f4..bfd8072 100644
--- a/app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/NFCWreatActivity.java
@@ -168,7 +168,7 @@
                 userName = this.getIntent().getStringExtra("userName");
                 binding.cardData.setText("鍏呭�奸噾棰濓細" + morny + "鍏�");
                 // 鍏呭�奸�昏緫
-                recharge(userCard.getInitPeasantCode(), userName, "鍚敤");
+//                recharge(userCard.getInitPeasantCode(), userName, "鍚敤");
             }
 
             try {
@@ -373,26 +373,26 @@
                         String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]);
                         //00鍚敤01绂佺敤02闅跺睘淇℃伅涓嶇03鏃犳鍗′俊鎭�04鍏跺畠
                         if ("00".equalsIgnoreCase(state)) {
-                            rechargeIsOk = true;
-                            binding.cardData.setText("鍏呭�奸�氫俊瀹屾垚锛岃甯栧崱鍏呭��");
-                            rechargeBean = new RechargeBean();
-                            rechargeBean.setDate(System.currentTimeMillis());
-                            rechargeBean.setMorny(morny);
-                            rechargeBean.setUserName(name);
-
-                            rechargeBean.setSerial(adminData.getSerial());
-                            userCard.setRechargeDate(Calendar.getInstance());
-                            rechargeBean.setBalance(MornyUtil.changeF2Y(balance));
-                            rechargeBean.setInitPeasantCode(initPeasantCode);
-                            rechargeBean.setOrderID(orderId);
-                            try {
-                                baseDao.rechargeDao().insert(rechargeBean);
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            }
-                            userCard.setRechargeTimes(userCard.getRechargeTimes() + 1);
+//                            rechargeIsOk = true;
+//                            binding.cardData.setText("鍏呭�奸�氫俊瀹屾垚锛岃甯栧崱鍏呭��");
+//                            rechargeBean = new RechargeBean();
+//                            rechargeBean.setDate(System.currentTimeMillis());
+//                            rechargeBean.setMorny(morny);
+//                            rechargeBean.setUserName(name);
+//
+//                            rechargeBean.setSerial(adminData.getSerial());
+//                            userCard.setRechargeDate(Calendar.getInstance());
+//                            rechargeBean.setBalance(MornyUtil.changeF2Y(balance));
+//                            rechargeBean.setInitPeasantCode(initPeasantCode);
+//                            rechargeBean.setOrderID(orderId);
+//                            try {
+//                                baseDao.rechargeDao().insert(rechargeBean);
+//                            } catch (Exception e) {
+//                                e.printStackTrace();
+//                            }
+//                            userCard.setRechargeTimes(userCard.getRechargeTimes() + 1);
                         } else if ("01".equalsIgnoreCase(state)) {
-                            userCard.setState("01");
+//                            userCard.setState("01");
                             userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                             NFCWreatActivity.this.finish();
                             TipUtil.show("鍏呭�兼姤鏂囬敊璇�-绂佺敤");
@@ -432,19 +432,19 @@
         UserCard userCardold = NfcReadHelper.getInstence(intent, this).getUserCardData();
         if (userCardold != null) {
             //鍒ゆ柇鏄惁鍏呭�肩殑鏄竴涓崱
-            if (userCard.getInitPeasantCode().equals(userCardold.getInitPeasantCode())) {
-                userCard.setState("00");
-                userFlag = WriteCardUtils.setUser(intent, userCard, this);
-                //   鎵撳嵃鐩稿叧
-                if (userFlag) {
-                    setPrinterData(rechargeBean);
-                    startDetailActivity(userName, "鍚敤");
-                } else {
-                    TipUtil.show(NFCWreatActivity.this, "鍐欏崱澶辫触锛岃閲嶆柊鍐嶈瘯");
-                }
-            } else {
-                TipUtil.show(NFCWreatActivity.this, "璇诲彇鐨勫崱鍜屽厖鍊肩殑鍗′笉涓�鑷�");
-            }
+//            if (userCard.getInitPeasantCode().equals(userCardold.getInitPeasantCode())) {
+//                userCard.setState("00");
+//                userFlag = WriteCardUtils.setUser(intent, userCard, this);
+//                //   鎵撳嵃鐩稿叧
+//                if (userFlag) {
+//                    setPrinterData(rechargeBean);
+//                    startDetailActivity(userName, "鍚敤");
+//                } else {
+//                    TipUtil.show(NFCWreatActivity.this, "鍐欏崱澶辫触锛岃閲嶆柊鍐嶈瘯");
+//                }
+//            } else {
+//                TipUtil.show(NFCWreatActivity.this, "璇诲彇鐨勫崱鍜屽厖鍊肩殑鍗′笉涓�鑷�");
+//            }
         } else {
 
         }
@@ -570,19 +570,19 @@
                             String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]);  //BCD鐮�00鍚敤 01绂佺敤 02闅跺睘淇℃伅涓嶇 03鏃犳鍗′俊鎭� 04鍏跺畠s
                             if (userCard == null) {
                                 userCard = new UserCard();
-                                userCard.setRechargeTimes(0);
-                                ElectricPriceBean electricPriceBean = baseDao.electricPriceDao().findFirst();
-                                if (electricPriceBean != null) {
-                                    userCard.setElectricityPrice(electricPriceBean.getPrice());
-                                } else {
-                                    //榛樿鏄�1鍏�
-                                    userCard.setElectricityPrice(1.000f);
-                                }
-                                userCard.setSwipeNumber((short) 0);
-                                userCard.setState("00");
-                                userCard.setBalance(0);
-                                userCard.setAddressCode(adminData.getAddressCode());
-                                userCard.setInitPeasantCode(initPeasantCode);
+//                                userCard.setRechargeTimes(0);
+//                                ElectricPriceBean electricPriceBean = baseDao.electricPriceDao().findFirst();
+//                                if (electricPriceBean != null) {
+//                                    userCard.setElectricityPrice(electricPriceBean.getPrice());
+//                                } else {
+//                                    //榛樿鏄�1鍏�
+//                                    userCard.setElectricityPrice(1.000f);
+//                                }
+//                                userCard.setSwipeNumber((short) 0);
+//                                userCard.setState("00");
+//                                userCard.setBalance(0);
+//                                userCard.setAddressCode(adminData.getAddressCode());
+//                                userCard.setInitPeasantCode(initPeasantCode);
                             }
                             //鍙湁鍚姩鐘舵�佹墠鑳藉厖鍊�
                             //閲戦
@@ -593,8 +593,8 @@
                             String name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte));
                             if ("00".equals(state)) {
                                 stateText.append("鍚敤");
-                                userCard.setBalance(balance);
-                                userCard.setState("00");
+//                                userCard.setBalance(balance);
+//                                userCard.setState("00");
                                 //琛ュ崱閫昏緫
                                 userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                                 if (userFlag) {
@@ -608,8 +608,8 @@
                                 return;
                             } else if ("01".equals(state)) {
                                 stateText.append("绂佺敤");
-                                userCard.setState("01");
-                                userCard.setBalance(balance);
+//                                userCard.setState("01");
+//                                userCard.setBalance(balance);
                                 userFlag = WriteCardUtils.setUser(intent, userCard, NFCWreatActivity.this);
                                 startDetailActivity(name, stateText.toString());
 
diff --git a/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java b/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
index 1c3029e..401cccf 100644
--- a/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/NewCardActivity.java
@@ -283,19 +283,7 @@
 
                         String serial = baseDao.adminDao().findFirst().getSerial();
                         UserCard userCard = new UserCard();
-                        userCard.setRechargeTimes(0);
 
-                        ElectricPriceBean electricPriceBean = baseDao.electricPriceDao().findFirst();
-                        if (electricPriceBean != null) {
-                            userCard.setElectricityPrice(electricPriceBean.getPrice());
-                        } else {
-                            //榛樿鏄�1鍏�
-                            userCard.setElectricityPrice(1.000f);
-                        }
-                        userCard.setState("00");
-                        userCard.setBalance(0);
-                        userCard.setAddressCode(adminData.getAddressCode());
-                        userCard.setInitPeasantCode(initPeasantCode);
 
                         userCardBean.setSerial(serial);
                         userCardBean.setInitPeasantCode(initPeasantCode);
diff --git a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
index b537a4d..8d55630 100644
--- a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
+++ b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java
@@ -72,7 +72,7 @@
         redCardBinding.redRemainderBlance.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(blance) + "鍏�");
         redCardBinding.redStatu.setText("鍗$姸鎬侊細" + statu);
         if (userCard != null) {
-            redCardBinding.redInitCode.setText(userCard.getInitPeasantCode());
+
             Calendar calendar = userCard.getRechargeDate();
             if (calendar != null) {
                 int year = calendar.get(Calendar.YEAR);
@@ -119,7 +119,7 @@
                                 case MyCommon.USER_CARD_TYPE_2:
                                 case MyCommon.USER_CARD_TYPE_3:
                                     userCard = UserCard.getBean(data);
-                                    selectBalance(userCard.getInitPeasantCode());
+//                                    selectBalance(userCard.getInitPeasantCode());
                                     break;
                                 case MyCommon.MANAGE_CRAD:
                                     viweGone(false);
@@ -253,13 +253,13 @@
                         String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]);  //BCD鐮�00鍚敤 01绂佺敤 02闅跺睘淇℃伅涓嶇 03鏃犳鍗′俊鎭� 04鍏跺畠s
                         if ("00".equals(state)) {
                             userCard.setBalance(balance);
-                            userCard.setState("00");
+//                            userCard.setState("00");
 
                             WriteCardUtils.setUser(intent, userCard, ReadCardAcitivy.this);
                             stateText.append("鍚敤");
                         } else if ("01".equals(state)) {
                             userCard.setBalance(balance);
-                            userCard.setState("01");
+//                            userCard.setState("01");
                             WriteCardUtils.setUser(intent, userCard, ReadCardAcitivy.this);
                             stateText.append("绂佺敤");
                         } else if ("02".equals(state)) {
diff --git a/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java b/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
index 3c77359..8647a08 100644
--- a/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/RechargeActivity.java
@@ -68,7 +68,7 @@
             userCard = NfcReadHelper.getInstence(intent, this).getUserCardData();
             if (userCard != null) {
                 ProgressDialog.show(this);
-                selectBalance(userCard.getInitPeasantCode());
+//                selectBalance(userCard.getInitPeasantCode());
             } else {
                 TipUtil.show(RechargeActivity.this, "鍗$墖璇诲彇澶辫触");
             }
@@ -201,13 +201,13 @@
                             if ("00".equals(state)) {
                                 binding.rechargeRegistBtn.setVisibility(View.VISIBLE);
                                 stateText.append("鍚敤");
-                                userCard.setState("00");
+//                                userCard.setState("00");
                                 userCard.setBalance(balance);
                                 binding.redStatu.setText(stateText.toString());
                                 return;
                             } else if ("01".equals(state)) {
                                 stateText.append("璇ュ崱宸茶绂佺敤");
-                                userCard.setState("01");
+//                                userCard.setState("01");
                                 userCard.setBalance(balance);
                                 userFlag = WriteCardUtils.setUser(intent, userCard, RechargeActivity.this);
                             } else if ("02".equals(state)) {
diff --git a/app/src/main/java/com/dayu/recharge/activity/RechargeDetail.java b/app/src/main/java/com/dayu/recharge/activity/RechargeDetail.java
index 118d523..8bfa413 100644
--- a/app/src/main/java/com/dayu/recharge/activity/RechargeDetail.java
+++ b/app/src/main/java/com/dayu/recharge/activity/RechargeDetail.java
@@ -63,16 +63,14 @@
         binding.redRemainderBlance.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(balance) + " 鍏�");
         binding.redStatu.setText("鍗$姸鎬侊細" + statu);
         if (userCard != null) {
-            binding.redInitCode.setText("鐢ㄦ埛娉ㄥ唽缂栧彿锛�" + userCard.getInitPeasantCode());
+//            binding.redInitCode.setText("鐢ㄦ埛娉ㄥ唽缂栧彿锛�" + userCard.getInitPeasantCode());
             Calendar calendar = userCard.getRechargeDate();
             if (calendar != null) {
                 int year = calendar.get(Calendar.YEAR);
                 int month = calendar.get(Calendar.MONTH); // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ラ渶瑕佸姞1
                 int day = calendar.get(Calendar.DAY_OF_MONTH);
-                int hour = calendar.get(Calendar.HOUR_OF_DAY);
-                int minute = calendar.get(Calendar.MINUTE);
-                int second = calendar.get(Calendar.SECOND);
-                binding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細" + year + month + day + " " + hour + ":" + minute + ":" + second);
+
+                binding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細" + year + month + day );
             } else {
                 binding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細鏃�");
             }
diff --git a/app/src/main/java/com/dayu/recharge/card/BlackCard.java b/app/src/main/java/com/dayu/recharge/card/BlackCard.java
new file mode 100644
index 0000000..f72a5ac
--- /dev/null
+++ b/app/src/main/java/com/dayu/recharge/card/BlackCard.java
@@ -0,0 +1,21 @@
+package com.dayu.recharge.card;
+
+import com.dayu.recharge.utils.MyCommon;
+
+import java.io.Serializable;
+
+/**
+ * author: zuo
+ * Date: 2024-02-29
+ * Time: 17:17
+ * 澶囨敞锛氶厤缃粦鍗�  褰撶敤鎴蜂涪澶卞崱鏃讹紝闇�瑕佸湪瀵瑰簲鐨勬帶鍒跺櫒鎶婃鐢ㄦ埛閰嶇疆涓洪粦鎴凤紝闃叉闈炴硶鐢ㄦ按
+ */
+public class BlackCard implements Serializable {
+
+    public String cardType = MyCommon.BLACK;
+
+
+
+
+
+}
diff --git a/app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java b/app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java
new file mode 100644
index 0000000..f25ac50
--- /dev/null
+++ b/app/src/main/java/com/dayu/recharge/card/ElectricPriceCard.java
@@ -0,0 +1,18 @@
+package com.dayu.recharge.card;
+
+import com.dayu.recharge.utils.MyCommon;
+
+import java.io.Serializable;
+
+/**
+ * author: zuo
+ * Date: 2024-02-29
+ * Time: 16:59
+ * 澶囨敞锛氱數閲忓崟浠峰崱
+ */
+public class ElectricPriceCard implements Serializable {
+    public String cardType = MyCommon.ELECTRIC_PRICE;
+
+
+
+}
diff --git a/app/src/main/java/com/dayu/recharge/card/RegionCard.java b/app/src/main/java/com/dayu/recharge/card/RegionCard.java
new file mode 100644
index 0000000..0db3780
--- /dev/null
+++ b/app/src/main/java/com/dayu/recharge/card/RegionCard.java
@@ -0,0 +1,65 @@
+package com.dayu.recharge.card;
+
+import com.dayu.recharge.tools.HexUtil;
+import com.dayu.recharge.utils.MyCommon;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * author: zuo
+ * Date: 2024-02-29
+ * Time: 16:29
+ * 澶囨敞锛氬尯鍩熸爣鍙峰崱
+ */
+public class RegionCard implements Serializable {
+
+    public String cardType = MyCommon.REGION;//鍗″懡浠�
+
+    public short region;//鍖哄煙鍦板潃(浣庡墠楂樺悗) 鍙互璇嗗埆鏌愬幙闀囨潙
+
+    public short controllerCodel;// 鎺у埗鍣ㄧ紪鍙�(浣庡墠楂樺悗) 鏈尯鍩熷唴鎺у埗鍣ㄧ紪鍙�
+
+
+
+    public byte[] toByte() {
+        RegionCard.Zero zero = new RegionCard.Zero();
+        return zero.toByte();
+    }
+
+
+
+    public static RegionCard getBean(List<byte[]> data){
+        RegionCard regionCard=new RegionCard();
+        byte[] zero=data.get(0);
+        regionCard.cardType=HexUtil.byteToHex(zero[0]);
+
+        return regionCard;
+    }
+
+
+
+    public class Zero extends BaseCard {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+
+            byte[] regionBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(region));
+            if (regionBytes != null) {
+                System.arraycopy(regionBytes, 0, data, 1, regionBytes.length);
+            }
+
+            byte[] controllerCodelBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(controllerCodel));
+            if (controllerCodelBytes != null) {
+                System.arraycopy(controllerCodelBytes, 0, data, 3, controllerCodelBytes.length);
+            }
+
+
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+
+
+}
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;
     }
 
 
diff --git a/app/src/main/java/com/dayu/recharge/tools/HexUtil.java b/app/src/main/java/com/dayu/recharge/tools/HexUtil.java
index 9e86a6c..a00b073 100644
--- a/app/src/main/java/com/dayu/recharge/tools/HexUtil.java
+++ b/app/src/main/java/com/dayu/recharge/tools/HexUtil.java
@@ -9,7 +9,7 @@
  * Copyright (C), 2022,
  * Author: zuo
  * Date: 2022/3/9 14:55
- * Description:
+ * Description: 杩涘埗杞崲
  */
 public class HexUtil {
 
@@ -40,6 +40,9 @@
         return result;
     }
 
+    public static int getBcdToInt(byte data) {
+        return ((data & 0xF0) >> 4) * 10 + ((data & 0x0F));
+    }
 
     /**
      * Hex瀛楃涓茶浆byte
@@ -161,6 +164,63 @@
         }
     }
 
+
+    /**
+     * short10杩涘埗杞�16杩涘埗 浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗
+     * @param number
+     * @return
+     */
+    public static String get10To16LowHigh(short number) {
+        // 浣跨敤 Integer.toHexString 灏� short 杞崲涓哄崄鍏繘鍒跺瓧绗︿覆
+        int intValue = Short.toUnsignedInt(number);
+        // 浣跨敤 Integer.toHexString 灏� int 杞崲涓哄崄鍏繘鍒跺瓧绗︿覆
+        String hexString = Integer.toHexString(intValue);
+        // 琛�0锛岀‘淇濆瓧绗︿覆闀垮害涓�4
+        while (hexString.length() < 4) {
+            hexString = "0" + hexString;
+        }
+
+        hexString = spaceHex(hexString);
+        hexString = HighLowHex(hexString);
+        return hexString;
+    }
+
+
+
+    /**
+     * short10杩涘埗杞�16杩涘埗 浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗
+     * @param number
+     * @return
+     */
+    public static String get10To16LowHigh(int number) {
+        // 浣跨敤 Integer.toHexString 灏� int 杞崲涓哄崄鍏繘鍒跺瓧绗︿覆
+        String hexString = Integer.toHexString(number);
+
+        hexString = spaceHex(hexString);
+        hexString = HighLowHex(hexString);
+        return hexString;
+    }
+
+
+
+    /**
+     * short16杩涘埗杞�10杩涘埗 浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗
+     * @param hex
+     * @return
+     */
+    public static short  getShort10To16LowHigh(String hex){
+        try {
+            String str = "";
+            str = spaceHex(hex);
+            str = HighLowHex(str);
+            return (short) Integer.parseInt(str, 16);
+        } catch (NumberFormatException e) {
+           e.printStackTrace();
+        }
+        return 0;
+    }
+
+
     /**
      * 鍗佽繘鍒惰浆16杩涘埗浣庝綅鍦ㄥ墠楂樹綅鍦ㄥ悗
      *
@@ -184,6 +244,7 @@
 
     /**
      * 16杩涘埗杞�10杩涘埗楂樹綆浣嶈浆鎹�
+     *
      * @param hex
      * @return
      */
diff --git a/app/src/main/java/com/dayu/recharge/utils/MyCommon.java b/app/src/main/java/com/dayu/recharge/utils/MyCommon.java
index 70aadb6..132a508 100644
--- a/app/src/main/java/com/dayu/recharge/utils/MyCommon.java
+++ b/app/src/main/java/com/dayu/recharge/utils/MyCommon.java
@@ -25,15 +25,48 @@
      */
     public static final String USER_CARD_TYPE_3 = "A2";
 
+
+    /**
+     * 璁剧疆鍖哄煙琛ㄥ彿鍗�
+     */
+    public static final String REGION = "B0";
+
+
+    /**
+     * 璁剧疆鐢ㄦ埛鐢甸噺鍗曚环鍗�
+     */
+    public static final String ELECTRIC_PRICE = "B1";
+
+
     /**
      * 绠$悊鍗�
      */
     public static final String MANAGE_CRAD = "B2";
 
+
     /**
      * 娓呴浂鍗�
      */
     public static final String CLEAN_CARD_TYPE = "C8";
+
+
+    /**
+     * 瀵嗙爜鍗�
+     */
+    public static final String PASS_WORD_CRAD_TYPE = "B3";
+
+
+    /**
+     * 閰嶇疆榛戝崱  褰撶敤鎴蜂涪澶卞崱鏃讹紝闇�瑕佸湪瀵瑰簲鐨勬帶鍒跺櫒鎶婃鐢ㄦ埛閰嶇疆涓洪粦鎴凤紝闃叉闈炴硶鐢ㄦ按
+     */
+    public static final String BLACK = "B4";
+
+
+    /**
+     * 浠ヤ笅鏈敤鍒�
+     * *****************************************************************************************************************************************
+     */
+
 
     /**
      * 閲嶆柊娉ㄥ唽璁惧鍗�
@@ -64,9 +97,5 @@
      */
     public static final String CONFIGURATION_POWER_CARD_TYPE = "BD";
 
-    /**
-     * 瀵嗙爜鍗�
-     */
-    public static final String PASS_WORD_CRAD_TYPE = "B3";
 
 }

--
Gitblit v1.8.0