From 0ad1393b93f371b1f326d76e7681baca5fe9b0dd Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 23 六月 2025 11:31:00 +0800
Subject: [PATCH] feat(card): 优化补卡流程并支持客户编号补卡
---
generallibrary/src/main/res/layout/activity_card_replace.xml | 6
generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt | 168 ++++++++++++++++++++++++++++++++++++------
generallibrary/src/main/java/com/dayu/general/activity/CardUnlossActivity.kt | 3
generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt | 17 ++++
4 files changed, 164 insertions(+), 30 deletions(-)
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
index 2e02be0..f7c6dc0 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
@@ -16,6 +16,7 @@
import com.dayu.general.R
import com.dayu.general.bean.card.UserCard
import com.dayu.general.bean.net.CardInfoResult
+import com.dayu.general.bean.net.CardInfoByClientResult
import com.dayu.general.bean.net.CardReplaceResult
import com.dayu.general.bean.net.PaymentMethod
import com.dayu.general.bean.net.PaymentMethodResponse
@@ -35,7 +36,10 @@
private lateinit var binding: ActivityCardReplaceBinding
private var cardNumber: String? = null
private var cardInfo: CardInfoResult? = null
+ private var cardInfoByClient: CardInfoByClientResult? = null
private var userCard: UserCard? = null
+ private var clientNum: String? = null
+ private var newCardNumber: String? = null // 鏂板崱鍗″彿
// 鏀粯鏂瑰紡鐩稿叧灞炴��
private var paymentMethod: String = "鐜伴噾"
@@ -46,8 +50,11 @@
/**
* 鍚姩琛ュ崱Activity
*/
- fun start(context: Context) {
+ fun start(context: Context, clientNum: String? = null) {
val intent = Intent(context, CardReplaceActivity::class.java)
+ clientNum?.let {
+ intent.putExtra("clientNum", it)
+ }
context.startActivity(intent)
}
}
@@ -57,9 +64,15 @@
binding = ActivityCardReplaceBinding.inflate(layoutInflater)
setContentView(binding.root)
+ // 鑾峰彇浼犻�掔殑clientNum鍙傛暟
+ clientNum = intent.getStringExtra("clientNum")
+
initView()
// 鑾峰彇鏀粯鏂瑰紡
getPaymentMethods()
+
+ // 鏃犺鏄惁鏈塩lientNum锛岄兘鍏堟樉绀鸿鍗$晫闈紝绛夊緟鐢ㄦ埛鍒锋柊鍗�
+ resetToReadingState()
}
private fun initView() {
@@ -178,6 +191,8 @@
binding.bottomButtonContainer.visibility = android.view.View.GONE
cardNumber = null
cardInfo = null
+ cardInfoByClient = null
+ newCardNumber = null
binding.etCardCost.setText("")
binding.etReturnAmount.setText("0")
}
@@ -227,28 +242,37 @@
}
return
}
- val cardNumber = parts[0]
+ val readCardNumber = parts[0]
val cardType = parts[1]
- this.cardNumber = cardNumber
- if (cardNumber.isBlank()) {
+
+ if (readCardNumber.isBlank()) {
showConfirmDialog("鍗″彿涓虹┖锛屾棤娉曡繘琛屾搷浣滐紝璇烽噸鏂板埛鍗�") {
}
return
}
- // 鏍规嵁鍗$墖绫诲瀷杩涜涓嶅悓澶勭悊
- when (cardType) {
- CardCommon.USER_CARD_TYPE_1,
- CardCommon.USER_CARD_TYPE_2,
- CardCommon.USER_CARD_TYPE_3 -> {
- // 鐢ㄦ埛鍗★細瑙f瀽鍗″唴鏁版嵁骞惰皟鐢ㄦ帴鍙�
- showConfirmDialog("璇ュ崱鐗囩被鍨嬩笉鏀寔琛ュ崱鎿嶄綔") {
- resetToReadingState()
+ // 淇濆瓨鏂板崱鍗″彿
+ this.newCardNumber = readCardNumber
+
+ // 鏍规嵁鏄惁鏈塩lientNum鍙傛暟鍐冲畾鑾峰彇鍗′俊鎭殑鏂瑰紡
+ if (clientNum != null) {
+ // 濡傛灉鏈塩lientNum锛屼娇鐢╟lientNum鑾峰彇鍗′俊鎭�
+ getCardInfoByClientNum(clientNum!!)
+ } else {
+ // 濡傛灉娌℃湁clientNum锛屾牴鎹崱鐗囩被鍨嬭繘琛屽鐞�
+ when (cardType) {
+ CardCommon.USER_CARD_TYPE_1,
+ CardCommon.USER_CARD_TYPE_2,
+ CardCommon.USER_CARD_TYPE_3 -> {
+ // 鐢ㄦ埛鍗★細瑙f瀽鍗″唴鏁版嵁骞惰皟鐢ㄦ帴鍙�
+ showConfirmDialog("璇ュ崱鐗囩被鍨嬩笉鏀寔琛ュ崱鎿嶄綔") {
+ resetToReadingState()
+ }
}
- }
- else -> {
- // 绠$悊绫诲崱涓嶆敮鎸佽ˉ鍗�
- handleUserCard(cardNumber, cardType, nfcAdapter)
+ else -> {
+ // 绠$悊绫诲崱涓嶆敮鎸佽ˉ鍗�
+ handleUserCard(readCardNumber, cardType, nfcAdapter)
+ }
}
}
} catch (e: Exception) {
@@ -327,9 +351,10 @@
binding.bottomButtonContainer.visibility = android.view.View.VISIBLE
this.cardInfo = cardInfo
+ this.cardNumber = cardNumber
- // 鏄剧ず褰撳墠鍗″湴鍧�
- binding.tvCurrentCardAddress.text = cardNumber
+ // 鏄剧ず鏂板崱鍗″彿
+ binding.tvCurrentCardAddress.text = newCardNumber ?: cardNumber
// 鏄剧ず鏈嶅姟鍣ㄦ暟鎹�
cardInfo?.let { info ->
@@ -431,14 +456,22 @@
* 璋冪敤琛ュ崱API鎺ュ彛
*/
private fun callReplaceCardApi(cardCost: Double, returnAmount: Double) {
- if (cardNumber.isNullOrBlank()) {
- ToastUtil.show("鍗″彿淇℃伅寮傚父锛岃閲嶆柊鍒峰崱")
+ if (newCardNumber.isNullOrBlank()) {
+ ToastUtil.show("鏂板崱鍗″彿淇℃伅寮傚父锛岃閲嶆柊鍒峰崱")
return
}
val map = mutableMapOf<String, Any>()
- map["cardAddr"] = cardNumber!!
- map["cardNum"] = cardInfo?.cardNum.toString()
+ map["cardAddr"] = newCardNumber!! // 浣跨敤鏂板崱鍗″彿
+
+ // 鏍规嵁鏁版嵁婧愰�夋嫨cardNum鍙傛暟
+ val cardNum = when {
+ cardInfo != null -> cardInfo!!.cardNum.toString()
+ cardInfoByClient != null -> cardInfoByClient!!.cardNum
+ else -> cardNumber ?: newCardNumber!!
+ }
+ map["cardNum"] = cardNum
+
map["cardCost"] = cardCost
map["returnAmount"] = returnAmount // 浣跨敤杩斿洖閲戦
map["paymentId"] = paymentId // 浣跨敤閫変腑鐨勬敮浠樻柟寮廔D
@@ -455,7 +488,7 @@
override fun onNext(t: BaseResponse<CardReplaceResult>) {
if (t.success && t.content != null) {
// 琛ュ崱鎴愬姛锛岃烦杞埌鍐欏崱鐣岄潰
- startWriteCardActivity(t.content!!, cardCost, returnAmount, userCard!!)
+ startWriteCardActivity(t.content!!, cardCost, returnAmount, createUserCardFromData())
} else {
// 琛ュ崱澶辫触
val errorMsg = if (t.msg.isNullOrBlank()) "琛ュ崱澶辫触锛岃閲嶈瘯" else t.msg
@@ -471,6 +504,24 @@
}
}
)
+ }
+
+ /**
+ * 鏍规嵁鐜版湁鏁版嵁鍒涘缓UserCard瀵硅薄
+ */
+ private fun createUserCardFromData(): UserCard {
+ return when {
+ userCard != null -> userCard!!
+ cardInfoByClient != null -> {
+ // 浠庢帴鍙f暟鎹垱寤篣serCard瀵硅薄
+ UserCard().apply {
+ // 杩欓噷鍙兘闇�瑕佹牴鎹疄闄呴渶姹傝缃洿澶氬睘鎬�
+ balance = MornyUtil.changeY2F(cardInfoByClient!!.money)
+ phoneNumber = cardInfoByClient!!.phone.toString()
+ }
+ }
+ else -> UserCard() // 杩斿洖绌虹殑UserCard瀵硅薄
+ }
}
/**
@@ -501,7 +552,7 @@
}
val intent = Intent(this, NfcWreatActivity::class.java).apply {
- putExtra("cardAddr", cardNumber)
+ putExtra("cardAddr", newCardNumber) // 浣跨敤鏂板崱鍗″彿
putExtra("operationTypeCode", CardOperationType.ReplaceCard.code) // 浣跨敤琛ュ崱绫诲瀷杩涜鍐欏崱
putExtra("orderNumber", replaceResult.orderNo)
putExtra("cardCost", cardCost)
@@ -513,4 +564,73 @@
startActivity(intent)
finish()
}
+
+ /**
+ * 鏍规嵁瀹㈡埛缂栧彿鑾峰彇鍗′俊鎭�
+ */
+ private fun getCardInfoByClientNum(clientNum: String) {
+ val map = mutableMapOf<String, Any>()
+ map["clientNum"] = clientNum
+
+ ApiManager.getInstance().requestGetLoading(
+ this,
+ "terminal/card/getcardbyclientnum",
+ CardInfoByClientResult::class.java,
+ map,
+ object : SubscriberListener<BaseResponse<CardInfoByClientResult>>() {
+ override fun onNext(t: BaseResponse<CardInfoByClientResult>) {
+ if (t.success) {
+ cardInfoByClient = t.content
+ t.content?.let { cardInfo ->
+ // 鏄剧ず鍗′俊鎭苟鍒囨崲鍒颁俊鎭樉绀虹晫闈�
+ showCardInfoFromClient(cardInfo)
+ }
+ } else {
+ showConfirmDialog("鑾峰彇鍗′俊鎭け璐ワ細${t.msg ?: "鏈煡閿欒"}") {
+ }
+ }
+ }
+
+ override fun onError(e: Throwable?) {
+ super.onError(e)
+ showConfirmDialog("鑾峰彇鍗′俊鎭け璐�: ${e?.message ?: "缃戠粶寮傚父锛岃妫�鏌ョ綉缁滆繛鎺�"}") {
+ }
+ }
+ }
+ )
+ }
+
+ /**
+ * 鏄剧ず浠庡鎴风紪鍙锋帴鍙h幏鍙栫殑鍗′俊鎭�
+ */
+ private fun showCardInfoFromClient(cardInfo: CardInfoByClientResult) {
+ // 闅愯棌璇诲崱鎻愮ず锛屾樉绀轰俊鎭尯鍩熷拰搴曢儴鎸夐挳
+ binding.scrollReadCard.visibility = android.view.View.GONE
+ binding.cardInfoContainer.visibility = android.view.View.VISIBLE
+ binding.bottomButtonContainer.visibility = android.view.View.VISIBLE
+
+ // 鏄剧ず鏂板崱鍗″彿锛堝鏋滃凡璇诲彇鍒版柊鍗★級
+ binding.tvCurrentCardAddress.text = newCardNumber ?: cardInfo.cardNum
+
+ // 鏄剧ず鍗′俊鎭�
+ binding.tvUserName.text = cardInfo.clientName
+ binding.tvPhone.text = cardInfo.phone.toString()
+
+ // 鏍规嵁cardState瀛楁鏄剧ず鐘舵��
+ val (statusText, statusColor) = when (cardInfo.cardState) {
+ 1 -> Pair("姝e父", android.graphics.Color.parseColor("#4CAF50")) // 缁胯壊
+ 2 -> Pair("宸叉敞閿�", android.graphics.Color.parseColor("#FF5722")) // 娣辨鑹�
+ 3 -> Pair("宸叉寕澶�", android.graphics.Color.parseColor("#FF9800")) // 姗欒壊
+ 4 -> Pair("鏃犳晥鍗$墖", android.graphics.Color.parseColor("#F44336")) // 绾㈣壊
+ else -> Pair("鏈煡鐘舵��", android.graphics.Color.parseColor("#9E9E9E")) // 鐏拌壊
+ }
+ binding.tvCardStatus.text = statusText
+ binding.tvCardStatus.setTextColor(statusColor)
+
+ // 鏄剧ず浣欓
+ binding.tvCardBalance.text = "${cardInfo.money}鍏�"
+
+ // 璁剧疆cardNumber鐢ㄤ簬鍚庣画API璋冪敤
+ cardNumber = cardInfo.cardNum
+ }
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardUnlossActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardUnlossActivity.kt
index b0704ac..34effe8 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardUnlossActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardUnlossActivity.kt
@@ -99,8 +99,7 @@
// 璁剧疆琛ュ崱鎸夐挳鐐瑰嚮浜嬩欢
cardAdapter?.setOnReplaceClickListener { card ->
-
- CardReplaceActivity.start(this)
+ CardReplaceActivity.start(this, card.clientNum)
}
}
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt
index ca692a3..bf5dd05 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/net/CardInfoResult.kt
@@ -15,4 +15,19 @@
val state: Int? = 0, // 鍗$姸鎬�: 1-姝e父, 2-鎸傚け, 3-閿佸畾
val createTime: String? = null, // 鍒涘缓鏃堕棿
val updateTime: String? = null // 鏇存柊鏃堕棿
-) : Serializable
\ No newline at end of file
+) : Serializable
+
+/**
+ * 鏍规嵁瀹㈡埛缂栧彿鑾峰彇鍗′俊鎭殑杩斿洖缁撴灉
+ */
+data class CardInfoByClientResult(
+ val cardNum: String = "", // 鍗″彿
+ val cardState: Int = 0, // 鍗$墖鐘舵�佺爜
+ val cardType: String = "", // 鍗$墖绫诲瀷
+ val clientName: String = "", // 瀹㈡埛濮撳悕
+ val clientNum: String = "", // 瀹㈡埛缂栧彿
+ val idCard: Long = 0, // 韬唤璇佸彿
+ val money: String = "", // 鍗″唴浣欓
+ val phone: Long = 0, // 鎵嬫満鍙风爜
+ val stateName: String = "" // 鍗$墖鐘舵�佸悕绉�
+)
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/activity_card_replace.xml b/generallibrary/src/main/res/layout/activity_card_replace.xml
index 8146c65..3d468ed 100644
--- a/generallibrary/src/main/res/layout/activity_card_replace.xml
+++ b/generallibrary/src/main/res/layout/activity_card_replace.xml
@@ -67,7 +67,7 @@
android:layout_below="@+id/tv_title"
android:layout_marginBottom="20dp"
android:gravity="center"
- android:text="璇峰皢闇�瑕佽ˉ鍔炵殑鍗$墖璐村湪璁惧涓婅繘琛岃鍙�"
+ android:text="璇峰皢鏂板崱璐村湪璁惧涓婅繘琛岃鍙�"
android:textColor="#333333"
android:textSize="@dimen/text_size"
android:textStyle="bold" />
@@ -88,7 +88,7 @@
android:layout_height="wrap_content"
android:layout_below="@+id/iv_nfc"
android:gravity="center"
- android:text="璇蜂繚鎸佹墜鎸佹満鍜屽崱鐗囦笉瑕佺Щ鍔�"
+ android:text="璇诲彇鏂板崱鍚庡皢鏄剧ず鍘熷崱淇℃伅杩涜琛ュ崱鎿嶄綔"
android:textColor="#666666"
android:textSize="@dimen/new_card_size" />
@@ -139,7 +139,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
- android:text="褰撳墠鍗″湴鍧�"
+ android:text="鍗″彿"
android:textColor="@color/base_blue_bg"
android:textSize="18sp"
android:textStyle="bold" />
--
Gitblit v1.8.0