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