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/java/com/dayu/general/activity/CardReplaceActivity.kt | 168 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 144 insertions(+), 24 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 -- Gitblit v1.8.0