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/ManagerReadActivity.kt | 315 ++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 257 insertions(+), 58 deletions(-) diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt index 1c218d7..a58bf9a 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt @@ -2,6 +2,8 @@ import android.content.Intent import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher import android.view.View import androidx.databinding.DataBindingUtil import com.dayu.baselibrary.net.subscribers.SubscriberListener @@ -13,6 +15,8 @@ import com.dayu.general.model.CardInfoModel import com.dayu.general.net.ApiManager import com.dayu.general.net.BaseResponse +import com.dayu.general.tool.BaseCommon.Companion.protocol +import com.dayu.general.tool.CardCommon import com.dayu.general.tool.NfcReadHelper class ManagerReadActivity : BaseNfcActivity() { @@ -37,15 +41,141 @@ } private fun initView() { - binding.titleBar.setCenterText("璇诲崱") + // 鏍规嵁鍗$被鍨嬭缃爣棰� + when (cardType) { + CardCommon.REGION_CARD -> binding.titleBar.setCenterText("鍒朵綔鍖哄煙琛ㄥ彿鍗�") + CardCommon.CHECK_CARD -> binding.titleBar.setCenterText("鍒朵綔妫�鏌ュ崱") + CardCommon.DEBUG_CARD -> binding.titleBar.setCenterText("鍒朵綔璋冭瘯鍗�") + CardCommon.CLEAN_CARD_TYPE -> binding.titleBar.setCenterText("鍒朵綔娓呴浂鍗�") + else -> binding.titleBar.setCenterText("璇诲崱") + } + binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() } - binding.btnNext.setOnClickListener { - if (viewModel.cardNumber.value.isNullOrEmpty()) { - ToastUtil.show("璇峰厛璇诲彇鍗″彿") - } else { - postCardData(cardType, viewModel.cardNumber.value!!, getRemark()) + + // 鏍规嵁鍗$被鍨嬭缃緭鍏ユ鍙鎬� + when (cardType) { + CardCommon.REGION_CARD -> { + // 鍖哄煙琛ㄥ彿鍗★細鏄剧ず鍖哄煙鍙峰拰椤圭洰鍙疯緭鍏ユ + binding.regionNumberLayout.visibility = View.VISIBLE + binding.projectNumberLayout.visibility = View.VISIBLE + + // 涓哄尯鍩熷彿杈撳叆妗嗘坊鍔犺緭鍏ラ獙璇� + binding.regionNumberEt.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged( + s: CharSequence?, + start: Int, + count: Int, + after: Int + ) { + } + + override fun onTextChanged( + s: CharSequence?, + start: Int, + before: Int, + count: Int + ) { + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString() + if (text.length > 12) { + binding.regionNumberEt.setText(text.substring(0, 12)) + binding.regionNumberEt.setSelection(12) + } + } + }) + + // 涓洪」鐩彿杈撳叆妗嗘坊鍔犺緭鍏ラ獙璇侊紙鑼冨洿1-255锛� + binding.projectNumberEt.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged( + s: CharSequence?, + start: Int, + count: Int, + after: Int + ) { + } + + override fun onTextChanged( + s: CharSequence?, + start: Int, + before: Int, + count: Int + ) { + } + + override fun afterTextChanged(s: Editable?) { + val text = s.toString() + if (text.isNotEmpty()) { + try { + val number = text.toInt() + if (number > 255) { + binding.projectNumberEt.setText("255") + binding.projectNumberEt.setSelection(3) + } else if (number < 1 && text.length > 1) { + binding.projectNumberEt.setText("1") + binding.projectNumberEt.setSelection(1) + } + } catch (e: NumberFormatException) { + // 濡傛灉杈撳叆鐨勪笉鏄暟瀛楋紝娓呯┖ + binding.projectNumberEt.setText("") + } + } + } + }) } + CardCommon.CHECK_CARD, + CardCommon.DEBUG_CARD, + CardCommon.CLEAN_CARD_TYPE -> { + // 妫�鏌ュ崱銆佽皟璇曞崱銆佹竻闆跺崱锛氶殣钘忓尯鍩熷彿鍜岄」鐩彿杈撳叆妗嗭紝鍙樉绀哄崱鍦板潃鍜屽娉� + binding.regionNumberLayout.visibility = View.GONE + binding.projectNumberLayout.visibility = View.GONE + } + + else -> { + // 鍏朵粬鍗$被鍨嬶細闅愯棌鍖哄煙鍙峰拰椤圭洰鍙疯緭鍏ユ + binding.regionNumberLayout.visibility = View.GONE + binding.projectNumberLayout.visibility = View.GONE + } + } + + binding.btnNext.setOnClickListener { + if (viewModel.cardNumber.get().isNullOrEmpty()) { + ToastUtil.show("璇峰厛璇诲彇鍗″彿") + } else if (cardType == CardCommon.REGION_CARD) { + // 鍖哄煙琛ㄥ彿鍗¢渶瑕侀獙璇佸尯鍩熷彿鍜岄」鐩彿 + val regionNumber = viewModel.regionNumber.get() + val projectNumber = viewModel.projectNumber.get() + + if (regionNumber.isNullOrEmpty()) { + ToastUtil.show("璇疯緭鍏ュ尯鍩熷彿") + } else if (regionNumber.length != 12) { + ToastUtil.show("鍖哄煙鍙峰繀椤讳负12浣嶆暟瀛�") + } else if (projectNumber.isNullOrEmpty()) { + ToastUtil.show("璇疯緭鍏ラ」鐩彿") + } else { + try { + val projectNum = projectNumber.toInt() + if (projectNum < 1 || projectNum > 255) { + ToastUtil.show("椤圭洰鍙峰繀椤诲湪1-255鑼冨洿鍐�") + } else { + postCardData( + cardType, + viewModel.cardNumber.get()!!, + getRemark(), + regionNumber, + projectNumber + ) + } + } catch (e: NumberFormatException) { + ToastUtil.show("椤圭洰鍙峰繀椤讳负鏁板瓧") + } + } + } else { + // 鍏朵粬鍗$被鍨嬶紙鍖呮嫭璋冭瘯鍗°�佹鏌ュ崱銆佹竻闆跺崱锛変笉闇�瑕佸尯鍩熷彿鍜岄」鐩彿 + postCardData(cardType, viewModel.cardNumber.get()!!, getRemark()) + } } } @@ -63,7 +193,7 @@ /** * 鑾峰彇澶囨敞淇℃伅 */ - fun getRemark(): String = viewModel.remark.value ?: "" + fun getRemark(): String = viewModel.remark.get() ?: "" override fun onNfcBack(intent: Intent) { // 澶勭悊NFC璇诲彇缁撴灉 @@ -71,7 +201,7 @@ if (cardNumber.isNotEmpty() && !cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) { binding.btnNext.visibility = View.VISIBLE binding.dataLayout.visibility = View.VISIBLE - binding.rechargeReadLL.visibility = View.GONE + binding.scrollReadCard.visibility = View.GONE setCardNumber(cardNumber) } else if (cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) { ToastUtil.show("褰撳墠鍗″瘑鐮侀敊璇紝涓嶆槸鏈叕鍙稿崱") @@ -80,65 +210,134 @@ } -private fun bytesToHexString(bytes: ByteArray?): String? { - if (bytes == null || bytes.isEmpty()) return null - val sb = StringBuilder() - for (b in bytes) { - sb.append(String.format("%02X", b)) - } - return sb.toString() -} - - -/** - * 鎻愪氦鏁版嵁 - */ -fun postCardData(cardType: String, cardAddr: String, remark: String) { - - val map = mutableMapOf<String, Any>() - - if (cardAddr.isNotEmpty()) { - map["cardAddr"] = cardAddr + private fun bytesToHexString(bytes: ByteArray?): String? { + if (bytes == null || bytes.isEmpty()) return null + val sb = StringBuilder() + for (b in bytes) { + sb.append(String.format("%02X", b)) + } + return sb.toString() } - if (cardType.isNotEmpty()) { -// map["cardType"] = cardType - map["cardType"] = "5" + + /** + * 鎻愪氦鏁版嵁 - 涓嶅甫鍖哄煙鍙风殑鐗堟湰 + */ + fun postCardData(cardType: String, cardAddr: String, remark: String) { + postCardData(cardType, cardAddr, remark, null, null) } - if (remark.isNotEmpty()) { - map["remarks"] = remark + + /** + * 鎻愪氦鏁版嵁 - 甯﹀尯鍩熷彿鐨勭増鏈� + */ + fun postCardData(cardType: String, cardAddr: String, remark: String, regionNumber: String?) { + postCardData(cardType, cardAddr, remark, regionNumber, null) } - // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� - ApiManager.getInstance().requestPostLoading( - this, - "/sell/card/create_manager_card", - String::class.java, - map, - object : SubscriberListener<BaseResponse<String>>() { - override fun onNext(t: BaseResponse<String>) { - if (t.success) { - var intent = Intent(this@ManagerReadActivity, NfcWreatActivity::class.java).apply { - putExtra("cardAddr", cardAddr) - putExtra("orderId", t.content) - putExtra("cardType", cardType) + + /** + * 鎻愪氦鏁版嵁 - 瀹屾暣鐗堟湰锛屾敮鎸佸尯鍩熷彿鍜岄」鐩彿 + */ + fun postCardData( + cardType: String, + cardAddr: String, + remark: String, + regionNumber: String?, + projectNumber: String? + ) { + + val map = mutableMapOf<String, Any>() + + if (cardAddr.isNotEmpty()) { + map["cardAddr"] = cardAddr + } + + if (cardType.isNotEmpty()) { + // 鏍规嵁鍗$被鍨嬭缃搴旂殑鏁板瓧缂栧彿 + val cardTypeNumber = when (cardType) { + CardCommon.REGION_CARD -> "2" // 璁剧疆鍖哄煙琛ㄥ彿鍗� + CardCommon.ELECTRIC_PRICE_CARD -> "3" // 鍙栨暟鍗� + CardCommon.CHECK_CARD -> "4" // 妫�鏌ュ崱 + CardCommon.DEBUG_CARD -> "5" // 娴嬭瘯鍗� + CardCommon.CLEAN_CARD_TYPE -> "6" // 娓呴浂鍗� + CardCommon.IP_CARD -> "7" // IP璁剧疆鍗� + CardCommon.AREA_CARD -> "8" // 鍩熷悕璁剧疆鍗★紙鍖哄煙璁剧疆鍗★級 + CardCommon.GPS_CARD -> "9" // GPS鍗� + CardCommon.VALVE_TIME_CARD -> "10" // 鏃堕棿閰嶇疆鍗★紙閰嶇疆寮�鍏抽榾鏃堕棿锛� + else -> "5" // 榛樿鍊� + } + map["cardType"] = cardTypeNumber + } + if (remark.isNotEmpty()) { + map["remarks"] = remark + } + + // 濡傛灉鏄尯鍩熻〃鍙峰崱骞朵笖鏈夊尯鍩熷彿锛屾坊鍔犲埌璇锋眰鍙傛暟涓� + if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) { + map["regionNumber"] = regionNumber + } + + // 濡傛灉鏄尯鍩熻〃鍙峰崱骞朵笖鏈夐」鐩彿锛屾坊鍔犲埌璇锋眰鍙傛暟涓� + if (cardType == CardCommon.REGION_CARD && !projectNumber.isNullOrEmpty()) { + map["projectNumber"] = projectNumber + } + map["protocol"] = protocol + map["securityCode"]="A0B1C289" + + // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� + ApiManager.getInstance().requestPostLoading( + this, + "terminal/card/createManagementCard", + String::class.java, + map, + object : SubscriberListener<BaseResponse<String>>() { + override fun onNext(t: BaseResponse<String>) { + if (t.success) { + var intent = + Intent(this@ManagerReadActivity, NfcWreatActivity::class.java).apply { + putExtra("cardAddr", cardAddr) + putExtra("orderNumber", t.content) + putExtra("cardType", cardType) + + // 鏍规嵁鍗$被鍨嬭缃搷浣滅被鍨嬩唬鐮� + val operationTypeCode = when (cardType) { + CardCommon.REGION_CARD -> 100 // 鍖哄煙琛ㄥ彿鍗℃搷浣滅被鍨� + CardCommon.CHECK_CARD -> 101 // 妫�鏌ュ崱鎿嶄綔绫诲瀷 + CardCommon.DEBUG_CARD -> 102 // 璋冭瘯鍗℃搷浣滅被鍨� + CardCommon.CLEAN_CARD_TYPE -> 103 // 娓呴浂鍗℃搷浣滅被鍨� + CardCommon.IP_CARD -> 104 // IP璁剧疆鍗℃搷浣滅被鍨� + CardCommon.AREA_CARD -> 105 // 鍩熷悕璁剧疆鍗℃搷浣滅被鍨� + CardCommon.GPS_CARD -> 106 // GPS鍗℃搷浣滅被鍨� + CardCommon.VALVE_TIME_CARD -> 107 // 鏃堕棿閰嶇疆鍗℃搷浣滅被鍨� + CardCommon.ELECTRIC_PRICE_CARD -> 108 // 鍙栨暟鍗℃搷浣滅被鍨� + else -> -1 + } + putExtra("operationTypeCode", operationTypeCode) + + // 浼犻�掑尯鍩熷彿鍜岄」鐩彿锛堜粎褰撴槸鍖哄煙琛ㄥ彿鍗℃椂锛� + if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) { + putExtra("regionNumber", regionNumber) + } + if (cardType == CardCommon.REGION_CARD && !projectNumber.isNullOrEmpty()) { + putExtra("projectNumber", projectNumber) + } + } + this@ManagerReadActivity.finish() + startActivity(intent) + } else { + // 澶勭悊鎼滅储澶辫触鐨勬儏鍐� + ToastUtil.show(t.msg) } - this@ManagerReadActivity.finish() - startActivity(intent) - } else { - // 澶勭悊鎼滅储澶辫触鐨勬儏鍐� - ToastUtil.show(t.msg) + } + + override fun onError(e: Throwable?) { + super.onError(e) + ToastUtil.show("鎺ュ彛璋冨彇澶辫触: ${e?.message ?: "鏈煡閿欒"}") } } - - override fun onError(e: Throwable?) { - super.onError(e) - ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}") - } - } - ) + ) -} + } } \ No newline at end of file -- Gitblit v1.8.0