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