From d1573513f0eada6a915c2163ce6c84451c8c1070 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期四, 13 六月 2024 15:06:05 +0800
Subject: [PATCH] 1.修复河南版本域名卡结构不同问题 2.修复齐河版本最终购水日期的bug

---
 henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java |  201 +++++++++++++++++++++++++++++++++++++------------
 1 files changed, 151 insertions(+), 50 deletions(-)

diff --git a/henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java b/henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java
index f395263..977ad1b 100644
--- a/henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java
+++ b/henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java
@@ -1,8 +1,10 @@
 package com.dayu.henanlibrary.card;
 
+import android.text.TextUtils;
+
 import com.dayu.baselibrary.tools.BcdUtil;
 import com.dayu.baselibrary.tools.HexUtil;
-import com.dayu.henanlibrary.utils.MyCommon;
+import com.dayu.henanlibrary.utils.CardCommon;
 import com.tencent.bugly.crashreport.CrashReport;
 
 import java.io.Serializable;
@@ -19,13 +21,23 @@
 public class DomainCard implements Serializable {
 
 
-    public String cardType = MyCommon.DOMAIN_CARD_TYPE;//鍗$被鍨�
+    public String cardType = CardCommon.DOMAIN_CARD_TYPE;//鍗$被鍨�
     public String domainNumber;//鍩熷悕搴忓彿 (BCD鏍煎紡)
     public int domainLength;//鍩熷悕闀垮害
 
     //绔彛鍙蜂负5涓瓧鑺傦紝涓嶈冻5浣嶉珮浣嶈ˉ0銆傜鍙e彿涓庡煙鍚嶄箣闂寸敤鈥�,鈥濋殧寮�銆傜鍙e彿鏈�鍚庝互鈥�#鈥濈粨鏉�
     public String domainName;//鍩熷悕
     public int port;//绔彛
+
+    public int type;//鍩熷悕鍗℃柊涔1鍚庢湁01==0锛岄箍閭戞病鏈�01==1
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
 
     public String getDomainName() {
         return domainName;
@@ -71,34 +83,80 @@
 
     public static DomainCard toBean(List<byte[]> data) {
         try {
-            DomainCard domainCard = new DomainCard();
+            DomainCard domainXinXiangCard = new DomainCard();
             String domainNumber = BcdUtil.bcdToStr(data.get(0)[1]);
-            domainCard.domainNumber = domainNumber;
-            int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[2]));
-            byte[] domainData = new byte[domainLength + 7];
-            int index = 0;
-            for (int i = 0; i < 3; i++) {
-                int jIndex;
-                if (i == 0) {
-                    jIndex = 3;
-                } else {
-                    jIndex = 0;
-                }
-                for (int j = jIndex; j < 15; j++) {
-                    if (index < domainData.length) {
-                        domainData[index] = data.get(i)[j];
-                        index++;
+            if ("00".equals(domainNumber)||"01".equals(domainNumber)||"02".equals(domainNumber)){//鍋囧搴忓彿灏忎簬绛変簬2灏辫涓烘槸鏂颁埂鐨�
+                domainXinXiangCard.setType(0);
+                domainXinXiangCard.domainNumber = domainNumber;
+                int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[2]));
+                byte[] domainData = new byte[domainLength + 7];
+                int index = 0;
+                for (int i = 0; i < 3; i++) {
+                    int jIndex;
+                    if (i == 0) {
+                        jIndex = 3;
+                    } else {
+                        jIndex = 0;
                     }
+                    for (int j = jIndex; j < 15; j++) {
+                        if (index < domainData.length) {
+                            domainData[index] = data.get(i)[j];
+                            index++;
+                        }
+                    }
+                }
+                String domainStr = new String(domainData, StandardCharsets.US_ASCII);
+                if (!TextUtils.isEmpty(domainStr)){
+                    try {
+                        String[] parts = domainStr.split("#")[0].split(",");
+                        if (parts.length >= 2) {
+                            String domainName = parts[0];
+                            String port = parts[1].replace("#", "");
+                            domainXinXiangCard.setDomainName(domainName);
+                            domainXinXiangCard.setPort(Integer.valueOf(port));
+                        }
+                    } catch (NumberFormatException e) {
+                        e.printStackTrace();
+                    }
+                }
 
+            }else {
+                domainXinXiangCard.setType(1);
+                int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[1]));
+                byte[] domainData = new byte[domainLength + 7];
+                int index = 0;
+                for (int i = 0; i < 3; i++) {
+                    int jIndex;
+                    if (i == 0) {
+                        jIndex = 2;
+                    } else {
+                        jIndex = 0;
+                    }
+                    for (int j = jIndex; j < 15; j++) {
+                        if (index < domainData.length) {
+                            domainData[index] = data.get(i)[j];
+                            index++;
+                        }
+                    }
+                }
+                String domainStr = new String(domainData, StandardCharsets.US_ASCII);
+
+                if (!TextUtils.isEmpty(domainStr)){
+                    try {
+                        String[] parts = domainStr.split("#")[0].split(",");
+                        if (parts.length >= 2) {
+                            String domainName = parts[0];
+                            String port = parts[1].replace("#", "");
+                            domainXinXiangCard.setDomainName(domainName);
+                            domainXinXiangCard.setPort(Integer.valueOf(port));
+                        }
+                    } catch (NumberFormatException e) {
+                        e.printStackTrace();
+                    }
                 }
             }
-            String domainStr = new String(domainData, StandardCharsets.US_ASCII);
-            String domainName = domainStr.split(",")[0];
-            String port = domainStr.split(",")[1].replace("#", "");
-            domainCard.setDomainName(domainName);
-            domainCard.setPort(Integer.valueOf(port));
 
-            return domainCard;
+            return domainXinXiangCard;
         } catch (Exception e) {
             e.printStackTrace();
             CrashReport.postCatchedException(e);
@@ -114,24 +172,45 @@
         public byte[] toByte() {
             byte[] data = new byte[16];
             data[0] = HexUtil.hexToByte(cardType);
-            if (domainNumber != null) {
-                byte[] domainNumbers = BcdUtil.strToBcd(domainNumber);
-                data[1] = domainNumbers[0];
-            }
-            domainLength = domainName.length();
-            data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength));
-            String portStr = String.valueOf(port);
-            int lenght = portStr.length();
-            for (int i = 0; i < 5 - lenght; i++) {
-                portStr = "0" + portStr;
-            }
-            String ascii = IDN.toASCII(domainName + "," + portStr + "#");
-            asciiByte = ascii.getBytes();
-            if (asciiByte.length < 12) {
-                System.arraycopy(asciiByte, 0, data, 3, asciiByte.length);
+//            鍩熷悕鍗℃柊涔1鍚庢湁01==0锛岄箍閭戞病鏈�01==1
+            if (type == 0) {
+                if (domainNumber != null) {
+                    byte[] domainNumbers = BcdUtil.strToBcd(domainNumber);
+                    data[1] = domainNumbers[0];
+                }
+                domainLength = domainName.length();
+                data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength));
+                String portStr = String.valueOf(port);
+                int lenght = portStr.length();
+                for (int i = 0; i < 5 - lenght; i++) {
+                    portStr = "0" + portStr;
+                }
+                String ascii = IDN.toASCII(domainName + "," + portStr + "#");
+                asciiByte = ascii.getBytes();
+                if (asciiByte.length < 12) {
+                    System.arraycopy(asciiByte, 0, data, 3, asciiByte.length);
+                } else {
+                    System.arraycopy(asciiByte, 0, data, 3, 12);
+                }
             } else {
-                System.arraycopy(asciiByte, 0, data, 3, 12);
+                data[1] = HexUtil.hexToByte(HexUtil.get10to16(domainLength));
+                String portStr = String.valueOf(port);
+                int lenght = portStr.length();
+                for (int i = 0; i < 5 - lenght; i++) {
+                    portStr = "0" + portStr;
+                }
+                String ascii = IDN.toASCII(domainName + "," + portStr + "#");
+                asciiByte = ascii.getBytes();
+                if (asciiByte.length < 13) {
+                    System.arraycopy(asciiByte, 0, data, 1, asciiByte.length);
+                } else {
+                    System.arraycopy(asciiByte, 0, data, 1, 13);
+                }
+
+
+
             }
+
             data[15] = getByteSum(data);
             return data;
         }
@@ -145,13 +224,24 @@
 
         public byte[] toBytes() {
             byte[] data = new byte[16];
-            if (asciiByte.length > 12) {
-                if (asciiByte.length - 12 < 15) {
-                    System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12);
-                } else {
-                    System.arraycopy(asciiByte, 12, data, 0, 15);
+            if (type==0){
+                if (asciiByte.length > 12) {
+                    if (asciiByte.length - 12 < 15) {
+                        System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12);
+                    } else {
+                        System.arraycopy(asciiByte, 12, data, 0, 15);
+                    }
+                }
+            }else {
+                if (asciiByte.length > 13) {
+                    if (asciiByte.length - 13 < 15) {
+                        System.arraycopy(asciiByte, 13, data, 0, asciiByte.length - 12);
+                    } else {
+                        System.arraycopy(asciiByte, 13, data, 0, 15);
+                    }
                 }
             }
+
             data[15] = getByteSum(data);
             return data;
         }
@@ -165,13 +255,24 @@
     public class Two extends BaseCard {
         public byte[] toBytes() {
             byte[] data = new byte[16];
-            if (asciiByte.length > (12 + 15)) {
-                if (asciiByte.length - (12 + 15) < 15) {
-                    System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - (12 + 15));
-                } else {
-                    System.arraycopy(asciiByte, 12, data, 0, 15);
+            if (type==0){
+                if (asciiByte.length > (12 + 15)) {
+                    if (asciiByte.length - (12 + 15) < 15) {
+                        System.arraycopy(asciiByte, 12 + 15, data, 0, asciiByte.length - (12 + 15));
+                    } else {
+                        System.arraycopy(asciiByte, 12 + 15, data, 0, 15);
+                    }
+                }
+            }else {
+                if (asciiByte.length > (13 + 15)) {
+                    if (asciiByte.length - (13 + 15) < 15) {
+                        System.arraycopy(asciiByte, 13 + 15, data, 0, asciiByte.length - (12 + 15));
+                    } else {
+                        System.arraycopy(asciiByte, 13 + 15, data, 0, 15);
+                    }
                 }
             }
+
             data[15] = getByteSum(data);
             return data;
         }

--
Gitblit v1.8.0