From 1e2d09f0009c16ac36f199e1723bbe31dc335657 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 13 五月 2025 17:54:09 +0800
Subject: [PATCH] feat(generallibrary): 优化开卡流程和界面

---
 generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt       |    3 
 generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt       |   99 +++++++++++++++++--
 generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt |    5 
 generallibrary/src/main/res/layout/activity_new_card_1_ge.xml                    |  119 ++++++++++++-----------
 generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt       |    5 
 generallibrary/src/main/cpp/general-native-lib.cpp                               |   38 +++---
 6 files changed, 172 insertions(+), 97 deletions(-)

diff --git a/generallibrary/src/main/cpp/general-native-lib.cpp b/generallibrary/src/main/cpp/general-native-lib.cpp
index e961a69..b5254cc 100644
--- a/generallibrary/src/main/cpp/general-native-lib.cpp
+++ b/generallibrary/src/main/cpp/general-native-lib.cpp
@@ -96,19 +96,19 @@
         return nullptr;
     }
 
-    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypting sector %d", sector);
-    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Encrypted data: %02X %02X %02X %02X %02X %02X",
-                       encrypted_data[0], encrypted_data[1], encrypted_data[2],
-                       encrypted_data[3], encrypted_data[4], encrypted_data[5]);
-    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Using XOR key: %02X %02X %02X %02X %02X %02X",
-                       XOR_KEYS[sector][0], XOR_KEYS[sector][1], XOR_KEYS[sector][2],
-                       XOR_KEYS[sector][3], XOR_KEYS[sector][4], XOR_KEYS[sector][5]);
+//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypting sector %d", sector);
+//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Encrypted data: %02X %02X %02X %02X %02X %02X",
+//                       encrypted_data[0], encrypted_data[1], encrypted_data[2],
+//                       encrypted_data[3], encrypted_data[4], encrypted_data[5]);
+//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Using XOR key: %02X %02X %02X %02X %02X %02X",
+//                       XOR_KEYS[sector][0], XOR_KEYS[sector][1], XOR_KEYS[sector][2],
+//                       XOR_KEYS[sector][3], XOR_KEYS[sector][4], XOR_KEYS[sector][5]);
 
     unsigned char decrypted[6];
     for (int i = 0; i < 6; i++) {
         decrypted[i] = encrypted_data[i] ^ XOR_KEYS[sector][i];
-        __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Byte %d: %02X ^ %02X = %02X",
-                          i, encrypted_data[i], XOR_KEYS[sector][i], decrypted[i]);
+//        __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Byte %d: %02X ^ %02X = %02X",
+//                          i, encrypted_data[i], XOR_KEYS[sector][i], decrypted[i]);
     }
 
     std::string result;
@@ -119,7 +119,7 @@
         result += hex;
     }
 
-    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypted result: %s", result.c_str());
+//    __android_log_print(ANDROID_LOG_INFO, "GeBaseHelper", "Decrypted result: %s", result.c_str());
     return env->NewStringUTF(result.c_str());
 }
 
@@ -187,7 +187,7 @@
     jobject packageInfoObject = env->CallObjectMethod(packageManagerObject, getPackageInfoId,
                                                     packNameString, 64);
     if (!packageInfoObject) {
-        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get PackageInfo");
+//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get PackageInfo");
         return env->NewStringUTF("");
     }
 
@@ -195,7 +195,7 @@
     jfieldID signaturefieldID = env->GetFieldID(packageInfoClass, "signatures",
                                               "[Landroid/content/pm/Signature;");
     if (!signaturefieldID) {
-        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature field ID");
+//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature field ID");
         return env->NewStringUTF("");
     }
 
@@ -203,28 +203,28 @@
     jobjectArray signatureArray = (jobjectArray) env->GetObjectField(packageInfoObject,
                                                                    signaturefieldID);
     if (!signatureArray || env->GetArrayLength(signatureArray) == 0) {
-        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "No signatures found");
+//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "No signatures found");
         return env->NewStringUTF("");
     }
 
     // 鑾峰彇绗竴涓鍚嶅璞�
     jobject signatureObject = env->GetObjectArrayElement(signatureArray, 0);
     if (!signatureObject) {
-        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature object");
+//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature object");
         return env->NewStringUTF("");
     }
 
     // 鑾峰彇绛惧悕瀛楃涓�
     jstring signatureString = (jstring) env->CallObjectMethod(signatureObject, signToStringId);
     if (!signatureString) {
-        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature string");
+//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature string");
         return env->NewStringUTF("");
     }
 
     // 鑾峰彇绛惧悕瀛楃涓茬殑UTF-8瀛楃
     const char *signStrng = env->GetStringUTFChars(signatureString, 0);
     if (!signStrng) {
-        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature UTF chars");
+//        __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to get signature UTF chars");
         return env->NewStringUTF("");
     }
 
@@ -240,11 +240,11 @@
 
         // 瑙e瘑骞惰浆鎹㈡瘡涓墖鍖哄瘑閽�
         for (size_t i = 0; i < numKeys; i++) {
-           __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "澶勭悊鎵囧尯 %zu 鐨勫瘑閽�", i);
+//           __android_log_print(ANDROID_LOG_DEBUG, "M1Card", "澶勭悊鎵囧尯 %zu 鐨勫瘑閽�", i);
             
             // 纭繚涓嶄細瓒婄晫璁块棶
             if (i * 12 + 6 > sizeof(ENCRYPTED_SECTOR_KEYS)) {
-                __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Index out of bounds");
+//                __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Index out of bounds");
                 break;
             }
             
@@ -252,7 +252,7 @@
             jstring decrypted_str = decrypt_key(env, ENCRYPTED_SECTOR_KEYS + (i * 12), 6);
             
             if (!decrypted_str) {
-               __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to decrypt key for sector %zu", i);
+//               __android_log_print(ANDROID_LOG_ERROR, "M1Card", "Failed to decrypt key for sector %zu", i);
                 continue;
             }
             
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
index 2ebe743..6e574c3 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -47,6 +47,9 @@
 
     // 鐢ㄦ埛ID
     private var userId: String = ""
+    
+    // 瀹㈡埛ID
+    private var clientId: String = ""
 
     companion object {
         private const val TAG = "NewCard2Activity"
@@ -68,18 +71,40 @@
         val pageSize: Any?,
         val pageTotal: Any?
     )
+    
+    // 鐢ㄦ埛淇℃伅鏁版嵁绫�
+    data class ClientInfo(
+        val clientId: String,
+        val clientNum: String,
+        val name: String,
+        val districtNum: String,
+        val phone: String,
+        val idCard: String,
+        val villageName: String,
+        val address: String,
+        val cardCount: Int,
+        val operateDt: String
+    )
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         binding = ActivityNewCard1GeBinding.inflate(layoutInflater)
         setContentView(binding.root)
 
+        // 鑾峰彇浼犻�掔殑clientId鍙傛暟
+        clientId = intent.getStringExtra("clientId") ?: ""
+        
         initView()
+        
+        // 濡傛灉鏈塩lientId锛岃幏鍙栧鎴蜂俊鎭�
+        if (clientId.isNotEmpty()) {
+            getClientInfo(clientId)
+        }
+        
         // 鑾峰彇鏀粯鏂瑰紡
         getPaymentMethods()
         initListener()
     }
-
 
     private fun initView() {
         // 鍒濆鍖栨爣棰樻爮杩斿洖鎸夐挳
@@ -90,21 +115,66 @@
         // 鍒濆鍖朜FC璇诲崱瀹瑰櫒锛屽垵濮嬮殣钘�
         binding.nfcContainer.visibility = View.VISIBLE
 
-        // 浠嶪ntent涓幏鍙栫敤鎴蜂俊鎭紙濡傛灉鏈夛級
-        val userName = intent.getStringExtra("userName") ?: ""
-        val rawIdCard = intent.getStringExtra("idCard")
-        val idCard = if (rawIdCard.isNullOrBlank()) "鏃�" else rawIdCard
-        val farmerCode = intent.getStringExtra("farmerCode") ?: ""
-        userId = intent.getStringExtra("userId") ?: ""
-
-        // 璁剧疆鐢ㄦ埛淇℃伅
-        binding.newCardUserName.text = userName
-        binding.newCardIdCard.text = idCard
-        binding.newCardFarmerCode.text = farmerCode
-
         // 璁剧疆閲戦杈撳叆闄愬埗涓轰袱浣嶅皬鏁�
         binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher())
         binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher())
+    }
+    
+    /**
+     * 鑾峰彇瀹㈡埛璇︾粏淇℃伅
+     */
+    private fun getClientInfo(clientId: String) {
+        ApiManager.getInstance().requestGetLoading(
+            this,
+            "terminal/client/getTermOne/$clientId",
+            ClientInfo::class.java,
+            null,
+            object : SubscriberListener<BaseResponse<ClientInfo>>() {
+                override fun onNext(response: BaseResponse<ClientInfo>) {
+                    if (response.success) {
+                        val clientInfo = response.content
+                        if (clientInfo != null) {
+                            // 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈�
+                            displayClientInfo(clientInfo)
+                        } else {
+                            Toast.makeText(
+                                this@NewCard2Activity,
+                                "鑾峰彇瀹㈡埛淇℃伅澶辫触: 杩斿洖鏁版嵁涓虹┖",
+                                Toast.LENGTH_SHORT
+                            ).show()
+                        }
+                    } else {
+                        Toast.makeText(
+                            this@NewCard2Activity,
+                            "鑾峰彇瀹㈡埛淇℃伅澶辫触: ${response.msg}",
+                            Toast.LENGTH_SHORT
+                        ).show()
+                    }
+                }
+
+                override fun onError(e: Throwable?) {
+                    super.onError(e)
+                    Toast.makeText(
+                        this@NewCard2Activity,
+                        "鑾峰彇瀹㈡埛淇℃伅澶辫触: ${e?.message ?: "缃戠粶寮傚父"}",
+                        Toast.LENGTH_SHORT
+                    ).show()
+                }
+            }
+        )
+    }
+    
+    /**
+     * 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈�
+     */
+    private fun displayClientInfo(clientInfo: ClientInfo) {
+        // 淇濆瓨鐢ㄦ埛ID渚涘悗缁娇鐢�
+        userId = clientInfo.clientId
+        
+        // 鏄剧ず鐢ㄦ埛鍩烘湰淇℃伅
+        binding.newCardUserName.text = clientInfo.name
+        binding.newCardIdCard.text = if (clientInfo.idCard.isBlank()) "鏃�" else clientInfo.idCard
+        binding.newCardFarmerCode.text = clientInfo.clientNum
     }
 
     /**
@@ -244,6 +314,9 @@
         }
     }
 
+    /**
+     * 娉ㄥ唽鏂板崱
+     */
     private fun registerNewCard() {
         // 鑾峰彇鍏呭�奸噾棰�
         val rechargeAmountStr = binding.newCardRechargeAmount.text.toString()
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt
index b66c4df..2b39bc4 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt
@@ -86,10 +86,7 @@
             // 澶勭悊鐢ㄦ埛鐐瑰嚮浜嬩欢
             // 浼犻�掔敤鎴蜂俊鎭埌寮�鍗$晫闈�
             val intent = Intent(this, NewCard2Activity::class.java)
-            intent.putExtra("userName", user.name)
-            intent.putExtra("idCard", user.idCard)
-            intent.putExtra("farmerCode", user.clientNum)
-            intent.putExtra("userId", user.id)
+            intent.putExtra("clientId", user.clientId)
             startActivity(intent)
         }
 
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt
index 8c3bdde..314b237 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchCardResult.kt
@@ -24,6 +24,7 @@
         val idCard: String? = null,        // 韬唤璇佸彿
         val money: String? = null,         // 鍗′綑棰�
         val phone: String? = null,         // 鐢佃瘽鍙风爜
-        val stateName: String? = null      // 鐘舵�佸悕绉�
+        val stateName: String? = null,     // 鐘舵�佸悕绉�
+        val clientId: String? = null       // 瀹㈡埛ID  
     )
 } 
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt
index a3ba94c..21f6186 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/net/SearchUserResult.kt
@@ -17,7 +17,7 @@
     /**
      * 鐢ㄦ埛淇℃伅
      */
-    data class UserInfo (
+    data class UserInfo(
         val address: String? = null,   // 鍦板潃
         val cardCount: Int? = null,    // 鍗℃暟閲�
         val clientNum: String? = null, // 瀹㈡埛缂栧彿
@@ -25,6 +25,7 @@
         val idCard: String? = null,    // 韬唤璇�
         val name: String? = null,      // 濮撳悕
         val operateDt: String? = null, // 鎿嶄綔鏃ユ湡
-        val phone: String? = null      // 鐢佃瘽
+        val phone: String? = null,      // 鐢佃瘽
+        val clientId: String? = null       // 瀹㈡埛ID
     )
 }
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/activity_new_card_1_ge.xml b/generallibrary/src/main/res/layout/activity_new_card_1_ge.xml
index 4567eec..00120ac 100644
--- a/generallibrary/src/main/res/layout/activity_new_card_1_ge.xml
+++ b/generallibrary/src/main/res/layout/activity_new_card_1_ge.xml
@@ -24,7 +24,7 @@
         android:layout_marginTop="24dp"
         android:layout_marginEnd="16dp"
         android:layout_marginBottom="24dp"
-        android:visibility="visible"
+        android:visibility="gone"
         app:cardBackgroundColor="@android:color/white"
         app:cardCornerRadius="12dp"
         app:cardElevation="4dp"
@@ -85,8 +85,8 @@
         android:layout_height="0dp"
         android:fillViewport="true"
         android:scrollbars="none"
-        android:visibility="gone"
-        app:layout_constraintBottom_toBottomOf="parent"
+        android:visibility="visible"
+        app:layout_constraintBottom_toTopOf="@+id/newCard_registBtn"
         app:layout_constraintTop_toBottomOf="@+id/titleBar">
 
         <LinearLayout
@@ -236,7 +236,51 @@
                         android:textColor="#333333"
                         android:textSize="18sp"
                         android:textStyle="bold" />
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginBottom="12dp"
+                        android:gravity="center_vertical"
+                        android:orientation="horizontal">
 
+                        <TextView
+                            android:layout_width="105dp"
+                            android:layout_height="wrap_content"
+                            android:text="宸ユ湰璐癸細"
+                            android:textColor="#666666"
+                            android:textSize="@dimen/new_card_size" />
+
+                        <LinearLayout
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:background="@drawable/edit_text_bg_selector"
+                            android:orientation="horizontal"
+                            android:gravity="center_vertical"
+                            android:paddingStart="10dp"
+                            android:paddingEnd="10dp"
+                            android:paddingTop="8dp"
+                            android:paddingBottom="8dp">
+
+                            <EditText
+                                android:id="@+id/newCard_cardFee"
+                                android:layout_width="0dp"
+                                android:layout_weight="1"
+                                android:layout_height="wrap_content"
+                                android:background="@null"
+                                android:hint="璇疯緭鍏ュ伐鏈垂(閫夊~)"
+                                android:inputType="numberDecimal"
+                                android:textColor="#333333"
+                                android:textColorHint="#BBBBBB"
+                                android:textSize="@dimen/new_card_size" />
+
+                            <TextView
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:text="鍏�"
+                                android:textColor="#666666"
+                                android:textSize="@dimen/new_card_size" />
+                        </LinearLayout>
+                    </LinearLayout>
                     <LinearLayout
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
@@ -283,51 +327,7 @@
                         </LinearLayout>
                     </LinearLayout>
 
-                    <LinearLayout
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_marginBottom="12dp"
-                        android:gravity="center_vertical"
-                        android:orientation="horizontal">
 
-                        <TextView
-                            android:layout_width="105dp"
-                            android:layout_height="wrap_content"
-                            android:text="宸ユ湰璐癸細"
-                            android:textColor="#666666"
-                            android:textSize="@dimen/new_card_size" />
-
-                        <LinearLayout
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content"
-                            android:background="@drawable/edit_text_bg_selector"
-                            android:orientation="horizontal"
-                            android:gravity="center_vertical"
-                            android:paddingStart="10dp"
-                            android:paddingEnd="10dp"
-                            android:paddingTop="8dp"
-                            android:paddingBottom="8dp">
-
-                            <EditText
-                                android:id="@+id/newCard_cardFee"
-                                android:layout_width="0dp"
-                                android:layout_weight="1"
-                                android:layout_height="wrap_content"
-                                android:background="@null"
-                                android:hint="璇疯緭鍏ュ伐鏈垂(閫夊~)"
-                                android:inputType="numberDecimal"
-                                android:textColor="#333333"
-                                android:textColorHint="#BBBBBB"
-                                android:textSize="@dimen/new_card_size" />
-
-                            <TextView
-                                android:layout_width="wrap_content"
-                                android:layout_height="wrap_content"
-                                android:text="鍏�"
-                                android:textColor="#666666"
-                                android:textSize="@dimen/new_card_size" />
-                        </LinearLayout>
-                    </LinearLayout>
 
                     <LinearLayout
                         android:layout_width="match_parent"
@@ -397,18 +397,21 @@
                     </RadioGroup>
                 </LinearLayout>
             </androidx.cardview.widget.CardView>
-            <TextView
-                android:id="@+id/newCard_registBtn"
-                android:layout_width="match_parent"
-                android:layout_height="56dp"
-                android:layout_marginTop="15dp"
-                android:background="@color/bottom_color"
-                android:visibility="visible"
-                android:gravity="center"
-                android:text="纭寮�鍗�"
-                android:textColor="#FFFFFF"
-                android:textSize="16sp" />
         </LinearLayout>
     </ScrollView>
+    
+    <TextView
+        android:id="@+id/newCard_registBtn"
+        android:layout_width="match_parent"
+        android:layout_height="56dp"
+        android:background="@color/bottom_color"
+        android:gravity="center"
+        android:text="纭寮�鍗�"
+        android:textColor="#FFFFFF"
+        android:textSize="16sp"
+        android:visibility="visible"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file

--
Gitblit v1.8.0