From 87e5604ad04c0b7aaacf3d52bae85e62d308cb6d Mon Sep 17 00:00:00 2001
From: zuoxiao <lf_zuo@163.com>
Date: 星期四, 26 六月 2025 16:41:02 +0800
Subject: [PATCH] refactor(generallibrary):重构开卡成功界面并移除未使用的开卡界面
---
generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt | 365 ++++++++++++++++++++++------------------------------
1 files changed, 154 insertions(+), 211 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..59dfd9b 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
@@ -3,22 +3,17 @@
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.util.TypedValue
-import android.view.View
-import android.widget.RadioButton
-import android.widget.Toast
import com.dayu.baselibrary.net.subscribers.SubscriberListener
import com.dayu.baselibrary.utils.MornyUtil
import com.dayu.baselibrary.utils.ToastUtil
import com.dayu.baselibrary.view.TipDialog
import com.dayu.baselibrary.view.TitleBar
import com.dayu.general.BaseApplication
-import com.dayu.general.R
import com.dayu.general.bean.card.UserCard
+import com.dayu.general.bean.net.CardInfoByClientResult
import com.dayu.general.bean.net.CardInfoResult
import com.dayu.general.bean.net.CardReplaceResult
import com.dayu.general.bean.net.PaymentMethod
-import com.dayu.general.bean.net.PaymentMethodResponse
import com.dayu.general.databinding.ActivityCardReplaceBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
@@ -35,19 +30,23 @@
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 cardNum: String? = null
+ private var newCardNumber: String? = null // 鏂板崱鍗″彿
// 鏀粯鏂瑰紡鐩稿叧灞炴��
private var paymentMethod: String = "鐜伴噾"
- private var paymentId: Long = 0
+ private var paymentId: String = ""
private var paymentMethodList: List<PaymentMethod> = listOf()
companion object {
/**
* 鍚姩琛ュ崱Activity
*/
- fun start(context: Context) {
+ fun start(context: Context, clientNum: String) {
val intent = Intent(context, CardReplaceActivity::class.java)
+ intent.putExtra("cardNum", clientNum)
context.startActivity(intent)
}
}
@@ -57,9 +56,13 @@
binding = ActivityCardReplaceBinding.inflate(layoutInflater)
setContentView(binding.root)
+ // 鑾峰彇浼犻�掔殑clientNum鍙傛暟
+ cardNum = intent.getStringExtra("cardNum")
+
initView()
- // 鑾峰彇鏀粯鏂瑰紡
- getPaymentMethods()
+
+ // 鏃犺鏄惁鏈塩lientNum锛岄兘鍏堟樉绀鸿鍗$晫闈紝绛夊緟鐢ㄦ埛鍒锋柊鍗�
+ resetToReadingState()
}
private fun initView() {
@@ -74,100 +77,8 @@
}
}
- /**
- * 鑾峰彇鏀粯鏂瑰紡鍒楄〃
- */
- private fun getPaymentMethods() {
- ApiManager.getInstance().requestGetLoading(
- this,
- "sell/paymentmethod/get",
- PaymentMethodResponse::class.java,
- null,
- object : SubscriberListener<BaseResponse<PaymentMethodResponse>>() {
- override fun onNext(response: BaseResponse<PaymentMethodResponse>) {
- if (response.success) {
- // 鑾峰彇鏀粯鏂瑰紡鍒楄〃
- val paymentMethods = response.content?.obj ?: listOf()
- if (paymentMethods.isNotEmpty()) {
- paymentMethodList = paymentMethods
- // 鏇存柊鏀粯鏂瑰紡鏄剧ず
- updatePaymentMethodRadioGroup()
- }
- } else {
- Toast.makeText(
- this@CardReplaceActivity,
- "鑾峰彇鏀粯鏂瑰紡澶辫触: ${response.msg}",
- Toast.LENGTH_SHORT
- ).show()
- }
- }
- override fun onError(e: Throwable?) {
- super.onError(e)
- Toast.makeText(
- this@CardReplaceActivity,
- "鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}",
- Toast.LENGTH_SHORT
- ).show()
- }
- }
- )
- }
- /**
- * 鏇存柊鏀粯鏂瑰紡RadioGroup
- */
- private fun updatePaymentMethodRadioGroup() {
- // 娓呯┖鍘熸湁RadioButton
- binding.paymentMethodGroup.removeAllViews()
-
- // 鍔ㄦ�佹坊鍔燫adioButton
- paymentMethodList.forEachIndexed { index, method ->
- val radioButton = RadioButton(this)
- radioButton.id = View.generateViewId() // 鐢熸垚鍞竴ID
- radioButton.layoutParams = android.widget.LinearLayout.LayoutParams(
- 0,
- resources.getDimensionPixelSize(R.dimen.dimen_40),
- 1.0f
- )
-
- // 濡傛灉涓嶆槸鏈�鍚庝竴涓寜閽紝娣诲姞鍙宠竟璺�
- if (index < paymentMethodList.size - 1) {
- (radioButton.layoutParams as android.widget.LinearLayout.LayoutParams).rightMargin =
- resources.getDimensionPixelSize(R.dimen.dimen_15)
- }
-
- radioButton.text = method.name
- radioButton.background = resources.getDrawable(R.drawable.radio_selector)
- radioButton.buttonDrawable = null
- radioButton.gravity = android.view.Gravity.CENTER
- radioButton.setTextColor(resources.getColorStateList(R.color.radio_button_text_color))
- radioButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
-
- // 娣诲姞鍒癛adioGroup
- binding.paymentMethodGroup.addView(radioButton)
-
- // 榛樿閫変腑绗竴涓�
- if (index == 0) {
- radioButton.isChecked = true
- paymentMethod = method.name
- paymentId = method.id
- }
- }
-
- // 璁剧疆鏀粯鏂瑰紡閫夋嫨鐩戝惉
- binding.paymentMethodGroup.setOnCheckedChangeListener { group, checkedId ->
- // 鏍规嵁閫変腑鐨処D鑾峰彇鏀粯鏂瑰紡
- for (i in 0 until group.childCount) {
- val radioButton = group.getChildAt(i) as RadioButton
- if (radioButton.id == checkedId) {
- paymentMethod = radioButton.text.toString()
- paymentId = paymentMethodList[i].id
- break
- }
- }
- }
- }
/**
* 閲嶇疆鍒拌鍗$姸鎬�
@@ -178,8 +89,10 @@
binding.bottomButtonContainer.visibility = android.view.View.GONE
cardNumber = null
cardInfo = null
+ cardInfoByClient = null
+ newCardNumber = null
binding.etCardCost.setText("")
- binding.etReturnAmount.setText("0")
+ binding.etReturnAmount.setText("")
}
/**
@@ -227,30 +140,47 @@
}
return
}
- val cardNumber = parts[0]
+ val readCardNumber = parts[0]
val cardType = parts[1]
- this.cardNumber = cardNumber
- if (cardNumber.isBlank()) {
+
+ if (readCardNumber.isBlank()) {
showConfirmDialog("鍗″彿涓虹┖锛屾棤娉曡繘琛屾搷浣滐紝璇烽噸鏂板埛鍗�") {
}
return
}
- // 鏍规嵁鍗$墖绫诲瀷杩涜涓嶅悓澶勭悊
+ // 淇濆瓨鏂板崱鍗″彿
+ this.newCardNumber = readCardNumber
+
when (cardType) {
+ "00" -> {
+ // 鐧藉崱鎵嶅彲浠ヨˉ鍗�
+ if (cardNum != null) {
+ // 濡傛灉鏈塩lientNum锛屼娇鐢╟lientNum鑾峰彇鍗′俊鎭�
+ getCardInfoByClientNum(cardNum!!)
+ } else {
+ showConfirmDialog("鑾峰彇鏃у崱淇℃伅鏁版嵁澶辫触") {
+ resetToReadingState()
+ }
+ }
+ }
+
CardCommon.USER_CARD_TYPE_1,
CardCommon.USER_CARD_TYPE_2,
CardCommon.USER_CARD_TYPE_3 -> {
// 鐢ㄦ埛鍗★細瑙f瀽鍗″唴鏁版嵁骞惰皟鐢ㄦ帴鍙�
- showConfirmDialog("璇ュ崱鐗囩被鍨嬩笉鏀寔琛ュ崱鎿嶄綔") {
+ showConfirmDialog("鐢ㄦ埛鍗′笉鏀寔琛ュ崱") {
resetToReadingState()
}
}
+
else -> {
- // 绠$悊绫诲崱涓嶆敮鎸佽ˉ鍗�
- handleUserCard(cardNumber, cardType, nfcAdapter)
+ showConfirmDialog("褰撳墠闈炵櫧鍗�") {
+ resetToReadingState()
+ }
}
}
+
} catch (e: Exception) {
showConfirmDialog("璇诲崱寮傚父锛�${e.message}") {
}
@@ -258,101 +188,6 @@
}
}
- /**
- * 澶勭悊鐢ㄦ埛鍗�
- */
- private fun handleUserCard(cardNumber: String, cardType: String, nfcAdapter: NfcReadHelper) {
- // 瑙f瀽鐢ㄦ埛鍗℃暟鎹�
- val userCard = nfcAdapter.getUserCardData()
- if (userCard == null) {
- showConfirmDialog("瑙f瀽鍗$墖鏁版嵁澶辫触锛岃閲嶆柊鍒峰崱") {
- }
- return
- }
-
- // 杈撳嚭鐢ㄦ埛鍗″唴鎵�鏈変俊鎭埌鏃ュ織
- android.util.Log.d("CardReplaceActivity", "=== 鐢ㄦ埛鍗′俊鎭� ===")
- android.util.Log.d("CardReplaceActivity", "鍗″彿: $cardNumber")
- android.util.Log.d("CardReplaceActivity", "鍗$墖绫诲瀷: $cardType")
- android.util.Log.d("CardReplaceActivity", "鍗″唴浣欓: ${userCard.balance}")
- android.util.Log.d("CardReplaceActivity", "==================")
- this.userCard = userCard
- // 鏍规嵁鍗″彿鑾峰彇鍗$墖璇︾粏淇℃伅
- getCardInfo(cardNumber, cardType, userCard)
- }
-
- /**
- * 鑾峰彇鍗$墖璇︾粏淇℃伅锛堢敤鎴峰崱涓撶敤锛�
- */
- private fun getCardInfo(cardNumber: String, cardType: String, userCard: UserCard) {
- val map = mutableMapOf<String, Any>()
- map["cardAddr"] = cardNumber
- ApiManager.getInstance().requestGetLoading(
- this,
- "terminal/card/readCard",
- CardInfoResult::class.java,
- map,
- object : SubscriberListener<BaseResponse<CardInfoResult>>() {
- override fun onNext(t: BaseResponse<CardInfoResult>) {
- if (t.success) {
- // 璇诲崱鎴愬姛锛屾樉绀虹敤鎴峰崱璇︾粏淇℃伅
- showUserCardInfo(t.content, cardNumber, cardType, userCard)
- } else {
- // 澶勭悊鑾峰彇澶辫触鐨勬儏鍐�
- handleCardInfoError(t.code, t.msg)
- }
- }
-
- override fun onError(e: Throwable?) {
- super.onError(e)
- showConfirmDialog("鑾峰彇鍗′俊鎭け璐�: ${e?.message ?: "缃戠粶寮傚父锛岃妫�鏌ョ綉缁滆繛鎺�"}") {
- }
- }
- }
- )
- }
-
- /**
- * 鏄剧ず鐢ㄦ埛鍗$墖淇℃伅锛堝寘鍚崱鍐呮暟鎹拰鎺ュ彛杩斿洖鏁版嵁锛�
- */
- private fun showUserCardInfo(
- cardInfo: CardInfoResult?,
- cardNumber: String,
- cardType: String,
- userCard: UserCard
- ) {
- // 闅愯棌璇诲崱鎻愮ず锛屾樉绀轰俊鎭尯鍩熷拰搴曢儴鎸夐挳
- binding.scrollReadCard.visibility = android.view.View.GONE
- binding.cardInfoContainer.visibility = android.view.View.VISIBLE
- binding.bottomButtonContainer.visibility = android.view.View.VISIBLE
-
- this.cardInfo = cardInfo
-
- // 鏄剧ず褰撳墠鍗″湴鍧�
- binding.tvCurrentCardAddress.text = cardNumber
-
- // 鏄剧ず鏈嶅姟鍣ㄦ暟鎹�
- cardInfo?.let { info ->
- binding.tvUserName.text = info.userName ?: "鏈煡"
- binding.tvPhone.text = info.phone ?: "鏈粦瀹�"
-
- // 鏍规嵁state瀛楁鏄剧ず鐘舵��
- val (statusText, statusColor) = when (info.state) {
- 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)
- }
-
- userCard.let { card ->
- // 浣欓杞崲涓哄厓锛堝師濮嬫暟鎹彲鑳芥槸鍒嗭級
- binding.tvCardBalance.text = MornyUtil.changeF2Y(card.balance) + "鍏�"
- }
- }
/**
* 澶勭悊鍗′俊鎭幏鍙栭敊璇�
@@ -431,14 +266,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 +298,12 @@
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 +319,25 @@
}
}
)
+ }
+
+ /**
+ * 鏍规嵁鐜版湁鏁版嵁鍒涘缓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 +368,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)
@@ -509,8 +376,84 @@
putExtra("paymentMethod", paymentMethod) // 浼犻�掓敮浠樻柟寮�
putExtra("paymentId", paymentId) // 浼犻�掓敮浠樻柟寮廔D
putExtra("userCard", updatedUserCard as java.io.Serializable)
+ putExtra("cardInfo", cardInfo)
}
startActivity(intent)
finish()
}
+
+ /**
+ * 鏍规嵁瀹㈡埛缂栧彿鑾峰彇鍗′俊鎭�
+ */
+ private fun getCardInfoByClientNum(cardNum: String) {
+ val map = mutableMapOf<String, Any>()
+ map["cardNum"] = cardNum
+
+ ApiManager.getInstance().requestGetLoading(
+ this,
+ "terminal/card/getcardbycardnum",
+ 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 ?: ""
+
+ // 鏄剧ず鍗′俊鎭�
+ binding.tvUserName.text = cardInfo.clientName
+ binding.tvPhone.text = cardInfo.phone.toString()
+
+ // 鏄剧ず鍗″彿
+ binding.tvCardNumber.text = cardInfo.cardNum ?: "--"
+
+ // 鏄剧ず瀹㈡埛缂栧彿
+ binding.tvCustomerId.text = cardInfo.clientNum ?: "--"
+
+ // 鏍规嵁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