From dd2562d8dc2b01bcdfca3152f82f09efbbd09259 Mon Sep 17 00:00:00 2001
From: zuoxiao <lf_zuo@163.com>
Date: 星期三, 25 六月 2025 19:49:48 +0800
Subject: [PATCH] fix(generallibrary): 优化卡片处理和支付方式获取逻辑- 修复地区卡处理逻辑,增加对"00"类型卡的特殊处理 - 优化用户卡数据解析和显示逻辑,提高容错性 - 改进支付方式获取方法,增加错误处理和日志记录 -调整充值接口调用参数,确保正确传递当前余额等信息- 修复 AreaCard 中 areaNumber 类型,改为字符串处理
---
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt | 50 +++++-
generallibrary/src/main/java/com/dayu/general/activity/CardReadActivity.kt | 106 ++++++++++-----
generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt | 143 ++++++++++++++++++--
generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt | 16 ++
generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt | 3
generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt | 12 +
generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt | 30 +++
generallibrary/src/main/java/com/dayu/general/bean/card/AreaCard.kt | 31 ++--
8 files changed, 302 insertions(+), 89 deletions(-)
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReadActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReadActivity.kt
index 986451b..5ca214d 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardReadActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReadActivity.kt
@@ -122,6 +122,11 @@
handleUserCard(cardNumber, cardType, nfcAdapter)
}
+ "00" -> {
+ // 鍦板尯鍗★細鏄剧ず鍗$墖绫诲瀷淇℃伅
+ handleUserCard(cardNumber, cardType, nfcAdapter)
+ }
+
else -> {
// 绠$悊绫诲崱锛氭樉绀哄崱鐗囩被鍨嬩俊鎭�
handleManagementCard(cardNumber, cardType)
@@ -138,33 +143,39 @@
* 澶勭悊鐢ㄦ埛鍗�
*/
private fun handleUserCard(cardNumber: String, cardType: String, nfcAdapter: NfcReadHelper) {
- // 瑙f瀽鐢ㄦ埛鍗℃暟鎹�
- val userCard = nfcAdapter.getUserCardData()
- if (userCard == null) {
- showConfirmDialog("瑙f瀽鍗$墖鏁版嵁澶辫触锛岃閲嶆柊鍒峰崱") {
+ if (cardType != "00") {
+ // 瑙f瀽鐢ㄦ埛鍗℃暟鎹�
+ val userCard = nfcAdapter.getUserCardData()
+ if (userCard == null) {
+ showConfirmDialog("瑙f瀽鍗$墖鏁版嵁澶辫触锛岃閲嶆柊鍒峰崱") {
+ }
+ return
}
- return
+
+ // 杈撳嚭鐢ㄦ埛鍗″唴鎵�鏈変俊鎭埌鏃ュ織
+ android.util.Log.d("CardReadActivity", "=== 鐢ㄦ埛鍗′俊鎭� ===")
+ android.util.Log.d("CardReadActivity", "鍗″彿: $cardNumber")
+ android.util.Log.d("CardReadActivity", "鍗$墖绫诲瀷: $cardType")
+ android.util.Log.d("CardReadActivity", "鍥藉琛屾斂鍖哄煙鍙�: ${userCard.areaNumber}")
+ android.util.Log.d("CardReadActivity", "鐢ㄦ埛缂栧彿: ${userCard.userCode}")
+ android.util.Log.d("CardReadActivity", "鐢ㄦ埛鍗$紪鍙�: ${userCard.userCodeNumber}")
+ android.util.Log.d("CardReadActivity", "瀹屾暣鐢ㄦ埛缂栧彿: ${userCard.getMyUserCode()}")
+ android.util.Log.d("CardReadActivity", "鎵嬫満鍙�: ${userCard.phoneNumber}")
+ android.util.Log.d("CardReadActivity", "椤圭洰缂栫爜: ${userCard.projectCode}")
+ android.util.Log.d("CardReadActivity", "鍗″唴浣欓: ${userCard.balance}")
+ android.util.Log.d("CardReadActivity", "鍓╀綑姘撮噺: ${userCard.surplusWater}")
+ android.util.Log.d("CardReadActivity", "姘撮噺鍗曚环: ${userCard.waterPrice}")
+ android.util.Log.d("CardReadActivity", "鐢甸噺鍗曚环: ${userCard.electricPrice}")
+ android.util.Log.d("CardReadActivity", "鍏呭�兼椂闂�: ${userCard.rechargeDate}")
+ android.util.Log.d("CardReadActivity", "==================")
+ getCardInfo(cardNumber, cardType, userCard)
+ } else {
+ getCardInfo(cardNumber, cardType, null)
}
- binding.tvCardNumber.text = cardNumber
- // 杈撳嚭鐢ㄦ埛鍗″唴鎵�鏈変俊鎭埌鏃ュ織
- android.util.Log.d("CardReadActivity", "=== 鐢ㄦ埛鍗′俊鎭� ===")
- android.util.Log.d("CardReadActivity", "鍗″彿: $cardNumber")
- android.util.Log.d("CardReadActivity", "鍗$墖绫诲瀷: $cardType")
- android.util.Log.d("CardReadActivity", "鍥藉琛屾斂鍖哄煙鍙�: ${userCard.areaNumber}")
- android.util.Log.d("CardReadActivity", "鐢ㄦ埛缂栧彿: ${userCard.userCode}")
- android.util.Log.d("CardReadActivity", "鐢ㄦ埛鍗$紪鍙�: ${userCard.userCodeNumber}")
- android.util.Log.d("CardReadActivity", "瀹屾暣鐢ㄦ埛缂栧彿: ${userCard.getMyUserCode()}")
- android.util.Log.d("CardReadActivity", "鎵嬫満鍙�: ${userCard.phoneNumber}")
- android.util.Log.d("CardReadActivity", "椤圭洰缂栫爜: ${userCard.projectCode}")
- android.util.Log.d("CardReadActivity", "鍗″唴浣欓: ${userCard.balance}")
- android.util.Log.d("CardReadActivity", "鍓╀綑姘撮噺: ${userCard.surplusWater}")
- android.util.Log.d("CardReadActivity", "姘撮噺鍗曚环: ${userCard.waterPrice}")
- android.util.Log.d("CardReadActivity", "鐢甸噺鍗曚环: ${userCard.electricPrice}")
- android.util.Log.d("CardReadActivity", "鍏呭�兼椂闂�: ${userCard.rechargeDate}")
- android.util.Log.d("CardReadActivity", "==================")
+
// 鏍规嵁鍗″彿鑾峰彇鍗$墖璇︾粏淇℃伅
- getCardInfo(cardNumber, cardType, userCard)
+
}
/**
@@ -222,7 +233,7 @@
/**
* 鑾峰彇鍗$墖璇︾粏淇℃伅锛堢敤鎴峰崱涓撶敤锛�
*/
- private fun getCardInfo(cardNumber: String, cardType: String, userCard: UserCard) {
+ private fun getCardInfo(cardNumber: String, cardType: String, userCard: UserCard?) {
val map = mutableMapOf<String, Any>()
map["cardAddr"] = cardNumber
ApiManager.getInstance().requestGetLoading(
@@ -257,7 +268,7 @@
cardInfo: CardInfoResult?,
cardNumber: String,
cardType: String,
- userCard: UserCard
+ userCard: UserCard?
) {
// 闅愯棌璇诲崱鎻愮ず锛屾樉绀轰俊鎭尯鍩�
binding.cardReadLL.visibility = android.view.View.GONE
@@ -266,34 +277,49 @@
val cardTypeName = getCardTypeName(cardType)
// 鏄剧ず鍗″唴鏁版嵁
-
binding.tvCardType.text = cardTypeName
// 鏄剧ず鐢ㄦ埛鍗$壒鏈夊瓧娈�
binding.llCardBalance.visibility = android.view.View.VISIBLE
binding.llUserNumber.visibility = android.view.View.VISIBLE
binding.llCardStatus.visibility = android.view.View.VISIBLE
-
- userCard.let { card ->
- // 浣欓杞崲涓哄厓锛堝師濮嬫暟鎹彲鑳芥槸鍒嗭級
-
- binding.tvCardBalance.text = MornyUtil.changeF2Y(card.balance.toInt()) + "鍏�"
-
- // 浣跨敤瀹屾暣鐨勭敤鎴风紪鍙�
- binding.tvUserNumber.text = cardInfo?.cardNum
+ binding.tvCardNumber.text = cardNumber
+ // 澶勭悊鍗″唴鏁版嵁 - 浼樺厛浣跨敤userCard锛屽鏋滀负绌哄垯浠巆ardInfo鑾峰彇
+ if (userCard != null) {
+ // 浠庡崱鍐呮暟鎹幏鍙栦俊鎭�
+ binding.tvCardBalance.text = MornyUtil.changeF2Y(userCard.balance.toInt()) + "鍏�"
// 鍏呭�兼椂闂翠綔涓烘渶鍚庝娇鐢ㄦ椂闂�
- if (card.rechargeDate != null) {
+ val rechargeDate = userCard.rechargeDate
+ if (rechargeDate != null) {
binding.llLastUseTime.visibility = android.view.View.VISIBLE
val dateFormat =
java.text.SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.getDefault())
- binding.tvLastUseTime.text = dateFormat.format(card.rechargeDate!!.time)
+ binding.tvLastUseTime.text = dateFormat.format(rechargeDate.time)
} else {
+ binding.llLastUseTime.visibility = android.view.View.GONE
+ }
+ } else {
+ // userCard涓虹┖鏃讹紝浠巆ardInfo鑾峰彇鏁版嵁
+ cardInfo?.let { info ->
+ // 浠庢帴鍙h繑鍥炵殑鏁版嵁涓幏鍙栦綑棰濓紝杞崲涓烘纭殑绫诲瀷
+ val balance = info.balance ?: 0.0
+ binding.tvCardBalance.text = MornyUtil.changeF2Y((balance * 100).toInt()) + "鍏�"
+
+ // 濡傛灉cardInfo涓湁鏈�鍚庝娇鐢ㄦ椂闂寸浉鍏冲瓧娈碉紝鍙互鍦ㄨ繖閲岃缃�
+ // 鏆傛椂闅愯棌鏈�鍚庝娇鐢ㄦ椂闂�
+ binding.llLastUseTime.visibility = android.view.View.GONE
+ } ?: run {
+ // 濡傛灉cardInfo涔熶负绌猴紝鏄剧ず榛樿鍊�
+ binding.tvCardBalance.text = "0.00鍏�"
binding.llLastUseTime.visibility = android.view.View.GONE
}
}
// 鏄剧ず鏈嶅姟鍣ㄦ暟鎹�
cardInfo?.let { info ->
+ // 浣跨敤瀹屾暣鐨勭敤鎴风紪鍙�
+ binding.tvUserNumber.text = info.cardNum ?: cardNumber
+
binding.tvUserName.text = info.userName ?: "鏈煡"
binding.tvPhone.text = info.phone ?: "鏈粦瀹�"
binding.tvIdCard.text = info.userCode ?: "鏈綍鍏�" // 浣跨敤userCode浣滀负韬唤璇佸彿鐨勬浛浠�
@@ -308,6 +334,14 @@
}
binding.tvCardStatus.text = statusText
binding.tvCardStatus.setTextColor(statusColor)
+ } ?: run {
+ // 濡傛灉cardInfo涓虹┖锛屾樉绀洪粯璁ゅ��
+ binding.tvUserNumber.text = cardNumber
+ binding.tvUserName.text = "鏈煡"
+ binding.tvPhone.text = "鏈粦瀹�"
+ binding.tvIdCard.text = "鏈綍鍏�"
+ binding.tvCardStatus.text = "鏈煡鐘舵��"
+ binding.tvCardStatus.setTextColor(android.graphics.Color.parseColor("#9E9E9E"))
}
}
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
index c191a4e..9e08bf7 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
@@ -1,6 +1,7 @@
package com.dayu.general.activity
import android.os.Bundle
+import com.dayu.baselibrary.utils.MornyUtil
import com.dayu.general.bean.card.UserCard
import com.dayu.general.databinding.ActivityCardWriteSuccessBinding
import com.dayu.general.tool.CardOperationType
@@ -105,7 +106,7 @@
binding.titleBar.setCenterText("鍐欏崱鎴愬姛")
binding.successTitle.text = "鍐欏崱鎴愬姛"
binding.successMessage.text =
- "鍗″唴浣欓宸叉洿鏂颁负 ${userCard?.balance}鍏�"
+ "鍗″唴浣欓宸叉洿鏂颁负"+MornyUtil.changeF2Y(userCard?.balance?:0.toInt()) +"鍏�"
}
else -> {
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 c2dca73..3f6fcb8 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -172,17 +172,48 @@
ApiManager.getInstance().requestGetLoading(
this,
"terminal/paymentmethod/get",
- Array<PaymentMethod>::class.java,
+ Any::class.java,
null,
- object : SubscriberListener<BaseResponse<Array<PaymentMethod>>>() {
- override fun onNext(response: BaseResponse<Array<PaymentMethod>>) {
+ object : SubscriberListener<BaseResponse<Any>>() {
+ override fun onNext(response: BaseResponse<Any>) {
if (response.success) {
- // 鑾峰彇鏀粯鏂瑰紡鍒楄〃锛岀幇鍦╟ontent鐩存帴鏄疨aymentMethod鏁扮粍
- val paymentMethods = response.content?.toList() ?: listOf()
- if (paymentMethods.isNotEmpty()) {
- paymentMethodList = paymentMethods
- // 鏇存柊鏀粯鏂瑰紡鏄剧ず
- updatePaymentMethodRadioGroup()
+ try {
+ // 瀹夊叏鍦板鐞嗚繑鍥炵殑content锛屾湇鍔″櫒杩斿洖鐨勬槸ArrayList<LinkedHashMap>
+ val paymentMethods = mutableListOf<PaymentMethod>()
+ val content = response.content
+
+ if (content is List<*>) {
+ content.forEach { item ->
+ if (item is Map<*, *>) {
+ val id = item["id"]?.toString() ?: ""
+ val name = item["name"]?.toString() ?: ""
+ if (id.isNotEmpty() && name.isNotEmpty()) {
+ paymentMethods.add(PaymentMethod(id, name))
+ }
+ }
+ }
+ }
+
+ if (paymentMethods.isNotEmpty()) {
+ paymentMethodList = paymentMethods
+ // 鏇存柊鏀粯鏂瑰紡鏄剧ず
+ updatePaymentMethodRadioGroup()
+ } else {
+ Toast.makeText(
+ this@NewCard2Activity,
+ "鑾峰彇鏀粯鏂瑰紡澶辫触锛氳繑鍥炴暟鎹负绌�",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ } catch (e: Exception) {
+ android.util.Log.e("NewCard2Activity", "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触", e)
+ android.util.Log.e("NewCard2Activity", "鍘熷鏁版嵁绫诲瀷: ${response.content?.javaClass?.name}")
+ android.util.Log.e("NewCard2Activity", "鍘熷鏁版嵁鍐呭: ${response.content}")
+ Toast.makeText(
+ this@NewCard2Activity,
+ "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触: ${e.message}",
+ Toast.LENGTH_SHORT
+ ).show()
}
} else {
Toast.makeText(
@@ -195,6 +226,7 @@
override fun onError(e: Throwable?) {
super.onError(e)
+ android.util.Log.e("NewCard2Activity", "缃戠粶璇锋眰澶辫触", e)
Toast.makeText(
this@NewCard2Activity,
"鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}",
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
index af95df2..94a11b3 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -254,8 +254,9 @@
// 杩旇繕鎿嶄綔鏄剧ず淇℃伅
var textData = StringBuilder()
textData.append("杩旇繕\n")
- textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n")
- textData.append("杩旇繕閲戦锛�" + returnAmount + "鍏�")
+ textData.append("杩旇繕閲戦锛�" + returnAmount + "鍏僜n")
+ textData.append("杩旇繕鍚庡崱鍐呬綑棰濓細" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n")
+
binding?.cardData?.text = textData.toString()
}
@@ -263,8 +264,9 @@
// 琛ユ墸鎿嶄綔鏄剧ず淇℃伅
var textData = StringBuilder()
textData.append("琛ユ墸\n")
- textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n")
- textData.append("琛ユ墸閲戦锛�" + deductAmount + "鍏�")
+ textData.append("琛ユ墸閲戦锛�" + deductAmount + "鍏僜n")
+ textData.append("琛ユ墸鍚庡崱鍐呬綑棰濓細" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n")
+
binding?.cardData?.text = textData.toString()
}
@@ -514,7 +516,7 @@
CardOperationType.RegionCardMake -> {
// 鍖哄煙琛ㄥ彿鍗″啓鍗¢�昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛�
var areaCard = AreaCard()
- areaCard.areaNumber = regionNumber.toInt()
+ areaCard.areaNumber = regionNumber
areaCard.projectCode = projectNumber.toInt()
nfcWreatHelper.writeDataAsync(
areaCard.getZeroBytes(),
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
index 3ec2878..7658e5b 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
@@ -23,6 +23,7 @@
import com.dayu.general.bean.net.RechargeRequest
import com.dayu.general.bean.net.RechargeResult
import com.dayu.general.bean.card.UserCard
+import com.dayu.general.bean.net.PaymentMethodListResponse
import com.dayu.general.databinding.ActivityRechargeDetailBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
@@ -149,23 +150,60 @@
}
/**
- * 鑾峰彇鏀粯鏂瑰紡鍒楄〃
+ * 鑾峰彇鏀粯鏂瑰紡鍒楄〃 - 浣跨敤Object绫诲瀷瀹夊叏澶勭悊JSON鏁扮粍
*/
private fun getPaymentMethods() {
ApiManager.getInstance().requestGetLoading(
this,
"terminal/paymentmethod/get",
- Array<PaymentMethod>::class.java,
+ Any::class.java,
null,
- object : SubscriberListener<BaseResponse<Array<PaymentMethod>>>() {
- override fun onNext(response: BaseResponse<Array<PaymentMethod>>) {
+ object : SubscriberListener<BaseResponse<Any>>() {
+ override fun onNext(response: BaseResponse<Any>) {
if (response.success) {
- // 鑾峰彇鏀粯鏂瑰紡鍒楄〃锛岀幇鍦╟ontent鐩存帴鏄疨aymentMethod鏁扮粍
- val paymentMethods = response.content?.toList() ?: listOf()
- if (paymentMethods.isNotEmpty()) {
- paymentMethodList = paymentMethods
- // 鏇存柊鏀粯鏂瑰紡鏄剧ず
- updatePaymentMethodRadioGroup()
+ try {
+ // 瀹夊叏鍦板鐞嗚繑鍥炵殑content锛屾湇鍔″櫒杩斿洖鐨勬槸ArrayList<LinkedHashMap>
+ val paymentMethods = mutableListOf<PaymentMethod>()
+ val content = response.content
+
+ if (content is List<*>) {
+ content.forEach { item ->
+ if (item is Map<*, *>) {
+ val id = item["id"]?.toString() ?: ""
+ val name = item["name"]?.toString() ?: ""
+ if (id.isNotEmpty() && name.isNotEmpty()) {
+ paymentMethods.add(PaymentMethod(id, name))
+ }
+ }
+ }
+ }
+
+ if (paymentMethods.isNotEmpty()) {
+ paymentMethodList = paymentMethods
+ // 鏇存柊鏀粯鏂瑰紡鏄剧ず
+ updatePaymentMethodRadioGroup()
+
+ // 璋冭瘯鏃ュ織
+ android.util.Log.d("RechargeDetail", "鎴愬姛鑾峰彇${paymentMethods.size}涓敮浠樻柟寮�:")
+ paymentMethods.forEach { method ->
+ android.util.Log.d("RechargeDetail", "- ID: ${method.id}, Name: ${method.name}")
+ }
+ } else {
+ Toast.makeText(
+ this@RechargeDetailActivity,
+ "鑾峰彇鏀粯鏂瑰紡澶辫触锛氳繑鍥炴暟鎹负绌�",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ } catch (e: Exception) {
+ android.util.Log.e("RechargeDetail", "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触", e)
+ android.util.Log.e("RechargeDetail", "鍘熷鏁版嵁绫诲瀷: ${response.content?.javaClass?.name}")
+ android.util.Log.e("RechargeDetail", "鍘熷鏁版嵁鍐呭: $response.content")
+ Toast.makeText(
+ this@RechargeDetailActivity,
+ "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触: ${e.message}",
+ Toast.LENGTH_SHORT
+ ).show()
}
} else {
Toast.makeText(
@@ -178,6 +216,7 @@
override fun onError(e: Throwable?) {
super.onError(e)
+ android.util.Log.e("RechargeDetail", "缃戠粶璇锋眰澶辫触", e)
Toast.makeText(
this@RechargeDetailActivity,
"鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}",
@@ -341,30 +380,42 @@
return
}
- // 璋冪敤鍏呭�兼帴鍙�
- callRechargeApi(rechargeAmount, bonusAmount)
+ // 璋冪敤鍏呭�兼帴鍙o紝浼犻�掑綋鍓嶄綑棰�
+ callRechargeApi(currentBalance, rechargeAmount, bonusAmount)
}
/**
* 璋冪敤鍏呭�兼帴鍙�
*/
- private fun callRechargeApi(rechargeAmount: Double, bonusAmount: Double) {
+ private fun callRechargeApi(currentBalance: Double, rechargeAmount: Double, bonusAmount: Double) {
val cardNum = cardInfo?.cardNum ?: cardAddress ?: ""
if (cardNum.isEmpty()) {
ToastUtil.show("鍗″彿淇℃伅缂哄け")
return
}
+ // 楠岃瘉鏀粯鏂瑰紡鏄惁宸查�夋嫨锛屽鏋滀负绌哄垯閲嶆柊鑾峰彇鏀粯鏂瑰紡
+ if (paymentId.isEmpty()) {
+ ToastUtil.show("鏀粯鏂瑰紡鏈姞杞斤紝姝e湪閲嶆柊鑾峰彇...")
+ // 閲嶆柊鑾峰彇鏀粯鏂瑰紡锛屾垚鍔熷悗鑷姩閲嶈瘯鍏呭��
+ getPaymentMethodsAndRetryRecharge(currentBalance, rechargeAmount, bonusAmount)
+ return
+ }
+
// 鑾峰彇姘翠环锛堝鏋滀负绌轰細鑷姩瑙﹀彂MainActivity鑾峰彇锛�
val currentWaterPrice = BaseApplication.requestWaterPrice()
- // 鏋勫缓鍏呭�艰姹傚弬鏁�
+ // 鎵撳嵃璋冭瘯淇℃伅
+ android.util.Log.d("RechargeDetail", "鍏呭�煎弬鏁� - paymentMethod: $paymentMethod, paymentId: $paymentId")
+ android.util.Log.d("RechargeDetail", "瀛楁鍚箟 - money(褰撳墠浣欓): ${String.format("%.2f", currentBalance)}鍏�, amount(鍏呭�奸噾棰�): ${String.format("%.2f", rechargeAmount)}鍏�, gift(璧犻�侀噾棰�): ${String.format("%.2f", bonusAmount)}鍏�")
+
+ // 鏋勫缓鍏呭�艰姹傚弬鏁� - 淇瀛楁鍚箟
val rechargeRequest = RechargeRequest(
rechargeType = 2,
cardNum = cardNum,
- money = String.format("%.0f", rechargeAmount),
- amount = String.format("%.0f", bonusAmount),
- gift = String.format("%.0f", bonusAmount),
+ money = String.format("%.2f", currentBalance), // money涓哄綋鍓嶅崱浣欓
+ amount = String.format("%.2f", rechargeAmount), // amount涓哄厖鍊奸噾棰�
+ gift = String.format("%.2f", bonusAmount), // gift涓鸿禒閫侀噾棰�
paymentId = paymentId,
price = String.format("%.2f", currentWaterPrice), // 浣跨敤缁熶竴鑾峰彇鐨勬按浠�
remarks = "鍏呭��",
@@ -412,6 +463,64 @@
}
/**
+ * 閲嶆柊鑾峰彇鏀粯鏂瑰紡骞堕噸璇曞厖鍊�
+ */
+ private fun getPaymentMethodsAndRetryRecharge(currentBalance: Double, rechargeAmount: Double, bonusAmount: Double) {
+ ApiManager.getInstance().requestGetLoading(
+ this,
+ "terminal/paymentmethod/get",
+ Any::class.java,
+ null,
+ object : SubscriberListener<BaseResponse<Any>>() {
+ override fun onNext(response: BaseResponse<Any>) {
+ if (response.success) {
+ try {
+ // 瀹夊叏鍦板鐞嗚繑鍥炵殑content锛屾湇鍔″櫒杩斿洖鐨勬槸ArrayList<LinkedHashMap>
+ val paymentMethods = mutableListOf<PaymentMethod>()
+ val content = response.content
+
+ if (content is List<*>) {
+ content.forEach { item ->
+ if (item is Map<*, *>) {
+ val id = item["id"]?.toString() ?: ""
+ val name = item["name"]?.toString() ?: ""
+ if (id.isNotEmpty() && name.isNotEmpty()) {
+ paymentMethods.add(PaymentMethod(id, name))
+ }
+ }
+ }
+ }
+
+ if (paymentMethods.isNotEmpty()) {
+ paymentMethodList = paymentMethods
+ // 鏇存柊鏀粯鏂瑰紡鏄剧ず
+ updatePaymentMethodRadioGroup()
+ // 鏀粯鏂瑰紡鍔犺浇鎴愬姛鍚庯紝鑷姩閲嶈瘯鍏呭��
+ ToastUtil.show("鏀粯鏂瑰紡鍔犺浇鎴愬姛锛屾鍦ㄩ噸璇曞厖鍊�...")
+ callRechargeApi(currentBalance, rechargeAmount, bonusAmount)
+ } else {
+ ToastUtil.show("鑾峰彇鏀粯鏂瑰紡澶辫触锛氳繑鍥炴暟鎹负绌�")
+ }
+ } catch (e: Exception) {
+ android.util.Log.e("RechargeDetail", "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触", e)
+ android.util.Log.e("RechargeDetail", "鍘熷鏁版嵁绫诲瀷: ${response.content?.javaClass?.name}")
+ android.util.Log.e("RechargeDetail", "鍘熷鏁版嵁鍐呭: ${response.content}")
+ ToastUtil.show("瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触: ${e.message}")
+ }
+ } else {
+ ToastUtil.show("鑾峰彇鏀粯鏂瑰紡澶辫触: ${response.msg}")
+ }
+ }
+
+ override fun onError(e: Throwable?) {
+ super.onError(e)
+ ToastUtil.show("鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}")
+ }
+ }
+ )
+ }
+
+ /**
* 鍚姩鍐欏崱鐣岄潰
*/
private fun startWriteCardActivity(
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/card/AreaCard.kt b/generallibrary/src/main/java/com/dayu/general/bean/card/AreaCard.kt
index 6d3cfd3..5da0906 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/card/AreaCard.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/card/AreaCard.kt
@@ -14,7 +14,7 @@
const val CARD_TYPE = CardCommon.REGION_CARD // 鍗$被鍨嬪浐瀹氫负0xB0
}
- var areaNumber: Int = 0 // 鍥藉琛屾斂鍖哄煙鍙�(12浣岯CD,绮剧‘鍒版潙)
+ var areaNumber: String = "" // 鍥藉琛屾斂鍖哄煙鍙�(12浣岯CD,绮剧‘鍒版潙)
var projectCode: Int = 0 // 椤圭洰缂栫爜(HEX 1-255)
/**
@@ -35,20 +35,21 @@
val areaCard = AreaCard()
// 瑙f瀽绗�0鍧�
val zero = data[0]
-
+
// 瑙f瀽鍥藉琛屾斂鍖哄煙鍙�(0-5浣�)
val areaCodeBytes = zero.copyOfRange(0, 6)
- areaCard.areaNumber = BcdUtil.bcdToStr(areaCodeBytes).toInt()
-
+ areaCard.areaNumber = BcdUtil.bcdToStr(areaCodeBytes)
+
// 瑙f瀽椤圭洰缂栫爜(6浣�)
- areaCard.projectCode = HexUtil.get16To10LowHightByBytes(byteArrayOf(zero[6]))
-
+ areaCard.projectCode = HexUtil.get16to10(HexUtil.byteToHex(zero[6]))
+
// 楠岃瘉鍗$被鍨嬪拰璇嗗埆鐮�
if (HexUtil.byteToHex(zero[8]) != CARD_TYPE ||
zero[9] != IDENTIFY_CODE_A0 ||
zero[10] != IDENTIFY_CODE_B1 ||
zero[11] != IDENTIFY_CODE_C2 ||
- zero[12] != IDENTIFY_CODE_89) {
+ zero[12] != IDENTIFY_CODE_89
+ ) {
return null
}
@@ -67,28 +68,28 @@
val data = ByteArray(16)
try {
// 璁剧疆鍥藉琛屾斂鍖哄煙鍙�(BCD鏍煎紡锛�6瀛楄妭锛�0-5浣�)
- val areaCodeBytes = BcdUtil.strToBcd(String.format("%012d", areaNumber))
+ val areaCodeBytes = BcdUtil.strToBcd(areaNumber)
System.arraycopy(areaCodeBytes, 0, data, 0, 6)
-
+
// 璁剧疆椤圭洰缂栫爜(6浣�)
- data[6] = projectCode.toByte()
-
+ data[6] = HexUtil.hexToByte(HexUtil.get10to16(projectCode))
+
// 璁剧疆澶囩敤浣�(7浣�)
data[7] = 0x00
-
+
// 璁剧疆鍗$被鍨�(8浣�)
data[8] = HexUtil.hexToByte(CARD_TYPE)
-
+
// 璁剧疆璇嗗埆鐮�(9-12浣�)
data[9] = IDENTIFY_CODE_A0
data[10] = IDENTIFY_CODE_B1
data[11] = IDENTIFY_CODE_C2
data[12] = IDENTIFY_CODE_89
-
+
// 璁剧疆澶囩敤浣�(13-14浣�)
data[13] = 0x00
data[14] = 0x00
-
+
// 璁剧疆鏍¢獙鍜�(15浣�)
data[15] = getByteSum(data)
} catch (e: Exception) {
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt
index fabf9a7..6ceaf69 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt
@@ -6,7 +6,7 @@
val name: String
)
-// 鏀粯鏂瑰紡鎺ュ彛杩斿洖鏁版嵁绫�
+// 鏀粯鏂瑰紡鎺ュ彛杩斿洖鏁版嵁绫伙紙鏃х増鏈紝淇濈暀鍏煎鎬э級
data class PaymentMethodResponse(
val itemTotal: Any?,
val obj: List<PaymentMethod>,
@@ -15,6 +15,20 @@
val pageTotal: Any?
)
+// 鏀粯鏂瑰紡鍒楄〃鍖呰绫伙紝鐢ㄤ簬澶勭悊鐩存帴杩斿洖PaymentMethod鏁扮粍鐨勬帴鍙�
+// 杩欎釜绫诲疄闄呬笂鍙槸涓�涓畝鍗曠殑鍖呰鍣紝璁〨son鑳藉姝g‘瑙f瀽JSON鏁扮粍
+class PaymentMethodListResponse : ArrayList<PaymentMethod>() {
+
+ companion object {
+ // 闈欐�佹柟娉曪紝浠嶭ist<PaymentMethod>鍒涘缓瀹炰緥
+ fun from(list: List<PaymentMethod>): PaymentMethodListResponse {
+ val response = PaymentMethodListResponse()
+ response.addAll(list)
+ return response
+ }
+ }
+}
+
// 鐢ㄦ埛淇℃伅鏁版嵁绫�
data class ClientInfo(
val clientId: String,
diff --git a/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt b/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt
index 79e1dae..4e4827c 100644
--- a/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt
+++ b/generallibrary/src/main/java/com/dayu/general/net/ApiManager.kt
@@ -159,13 +159,33 @@
}
is List<*> -> {
try {
- @Suppress("UNCHECKED_CAST")
- response.content = MyJsonParser.getListByJson(
- MyJsonParser.getJsonbyList(content),
- tClass
- ) as T
+ // 鐩存帴澶勭悊List绫诲瀷鐨刢ontent锛屼笉闇�瑕侀噸鏂拌В鏋�
+ when {
+ // 濡傛灉鐩爣绫诲瀷鏄疞ist鐨勫瓙绫伙紙濡侾aymentMethodListResponse锛夛紝鐩存帴杞崲
+ List::class.java.isAssignableFrom(tClass) -> {
+ @Suppress("UNCHECKED_CAST")
+ response.content = content as T
+ }
+ // 濡傛灉content鏄疢ap鍒楄〃锛屽皾璇曡浆鎹负鐩爣瀵硅薄鍒楄〃
+ content.isNotEmpty() && content[0] is Map<*, *> -> {
+ val jsonData = MyJsonParser.getJsonbyList(content)
+ @Suppress("UNCHECKED_CAST")
+ response.content = MyJsonParser.getListByJson(jsonData, tClass) as T
+ }
+ else -> {
+ @Suppress("UNCHECKED_CAST")
+ response.content = content as T
+ }
+ }
} catch (e: Exception) {
Log.e(TAG, "Error parsing list content", e)
+ // 濡傛灉瑙f瀽澶辫触锛屽皾璇曠洿鎺ヨ浆鎹�
+ try {
+ @Suppress("UNCHECKED_CAST")
+ response.content = content as T
+ } catch (e2: Exception) {
+ Log.e(TAG, "Failed to cast content directly", e2)
+ }
}
}
is Int, is String, is Boolean -> {
--
Gitblit v1.8.0