From 0faae97cd2523f840c426da68464e577e01dfa80 Mon Sep 17 00:00:00 2001 From: zuojincheng <lf_zuo@163.com> Date: 星期一, 23 六月 2025 20:35:08 +0800 Subject: [PATCH] refactor(CardReplaceActivity): 重构补卡流程并优化界面显示- 重新设计卡片信息展示布局,增加新卡卡地址、客户编号等字段 - 优化补卡逻辑,支持通过卡号或客户编号获取卡片信息 -调整工本费和返回金额输入框位置 - 更新API调用路径,使用新的卡片查询接口 --- generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt | 637 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 510 insertions(+), 127 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 fae0023..e20cec0 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt @@ -1,173 +1,556 @@ package com.dayu.general.activity +import android.content.Context +import android.content.Intent import android.os.Bundle -import android.view.LayoutInflater +import android.util.TypedValue import android.view.View -import android.view.inputmethod.EditorInfo -import androidx.recyclerview.widget.LinearLayoutManager +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.general.adapter.CardReplaceAdapter -import com.dayu.general.bean.net.CardReplaceInfo -import com.dayu.general.bean.net.CardReplaceResponse +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.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 import com.dayu.general.databinding.ActivityCardReplaceBinding import com.dayu.general.net.ApiManager import com.dayu.general.net.BaseResponse -import com.scwang.smart.refresh.layout.api.RefreshLayout -import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener +import com.dayu.general.tool.CardCommon +import com.dayu.general.tool.CardOperationType +import com.dayu.general.tool.NfcReadHelper /** - * 鍗$墖琛ュ姙Activity + * @author: zuo + * @desc: 琛ュ崱Activity + * @since: 2025/6/17 */ -class CardReplaceActivity : BaseActivity() { - +class CardReplaceActivity : BaseNfcActivity() { private lateinit var binding: ActivityCardReplaceBinding - private var currentCardInfo: CardReplaceInfo? = null - private lateinit var adapter: CardReplaceAdapter - - // 鍒嗛〉鍙傛暟 - private var pageCurr: Int = 1 - private val pageSize: Int = 20 - private var hasMoreData: Boolean = true - + 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 paymentMethodList: List<PaymentMethod> = listOf() + + companion object { + /** + * 鍚姩琛ュ崱Activity + */ + fun start(context: Context, clientNum: String) { + val intent = Intent(context, CardReplaceActivity::class.java) + intent.putExtra("cardNum", clientNum) + context.startActivity(intent) + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - binding = ActivityCardReplaceBinding.inflate(LayoutInflater.from(this)) + binding = ActivityCardReplaceBinding.inflate(layoutInflater) setContentView(binding.root) - + + // 鑾峰彇浼犻�掔殑clientNum鍙傛暟 + cardNum = intent.getStringExtra("cardNum") + initView() - initRecyclerView() - setupRefreshLayout() - loadCardReplaceList(true) + // 鑾峰彇鏀粯鏂瑰紡 + getPaymentMethods() + + // 鏃犺鏄惁鏈塩lientNum锛岄兘鍏堟樉绀鸿鍗$晫闈紝绛夊緟鐢ㄦ埛鍒锋柊鍗� + resetToReadingState() } - - /** - * 鍒濆鍖栬鍥� - */ + private fun initView() { - // 鍒濆鍖栨爣棰樻爮 - binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) { - finish() + // 璁剧疆TitleBar鐨勮繑鍥炴寜閽偣鍑讳簨浠� + binding.titleBar.setOnItemclickListner(TitleBar.ClickType_LEFT_IMAGE) { + finish() } - } - - /** - * 鍒濆鍖朢ecyclerView - */ - private fun initRecyclerView() { - // 鍒涘缓閫傞厤鍣� - adapter = CardReplaceAdapter(this) - - // 璁剧疆甯冨眬绠$悊鍣ㄥ拰閫傞厤鍣� - binding.recyclerView.apply { - layoutManager = LinearLayoutManager(this@CardReplaceActivity) - adapter = this@CardReplaceActivity.adapter + + // 璁剧疆琛ュ崱鎸夐挳鐐瑰嚮浜嬩欢 + binding.btnReplace.setOnClickListener { + performCardReplace() } - - // 璁剧疆鍗$墖鐐瑰嚮鐩戝惉鍣� - 鐐瑰嚮鍒楄〃椤规椂鎵ц琛ュ姙鎿嶄綔 - adapter.setOnItemClickListener { cardInfo -> - currentCardInfo = cardInfo - // 鐩存帴鎵ц琛ュ姙鎿嶄綔 - performCardReplace(cardInfo) - } - } - - /** - * 璁剧疆鍒锋柊甯冨眬 - */ - private fun setupRefreshLayout() { - binding.refreshLayout.setOnRefreshLoadMoreListener(object : OnRefreshLoadMoreListener { - override fun onRefresh(refreshLayout: RefreshLayout) { - // 涓嬫媺鍒锋柊锛岄噸缃〉鐮佸苟閲嶆柊鍔犺浇鏁版嵁 - pageCurr = 1 - hasMoreData = true - loadCardReplaceList(true) - } - - override fun onLoadMore(refreshLayout: RefreshLayout) { - // 涓婃媺鍔犺浇鏇村 - if (hasMoreData) { - pageCurr++ - loadCardReplaceList(false) - } else { - // 娌℃湁鏇村鏁版嵁鏃讹紝缁撴潫鍔犺浇鏇村 - refreshLayout.finishLoadMoreWithNoMoreData() - } - } - }) } /** - * 鍔犺浇鍙ˉ鍔炲崱鐗囧垪琛� - * - * @param isRefresh 鏄惁涓哄埛鏂版搷浣滐紙true: 鍒锋柊锛宖alse: 鍔犺浇鏇村锛� + * 鑾峰彇鏀粯鏂瑰紡鍒楄〃 */ - private fun loadCardReplaceList(isRefresh: Boolean = true) { - // 鏋勫缓鏌ヨ鍙傛暟 - val params = HashMap<String, Any>().apply { - put("pageCurr", pageCurr) - put("pageSize", pageSize) - } - - // 璋冪敤API鏌ヨ鎸傚け鍗$墖淇℃伅 + private fun getPaymentMethods() { ApiManager.getInstance().requestGetLoading( this, - "sell/clientcard/getUnreplaced", - CardReplaceResponse::class.java, - params, - object : SubscriberListener<BaseResponse<CardReplaceResponse>>() { - override fun onNext(response: BaseResponse<CardReplaceResponse>) { - // 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬� - finishRefreshOrLoadMore(isRefresh) - + "sell/paymentmethod/get", + PaymentMethodResponse::class.java, + null, + object : SubscriberListener<BaseResponse<PaymentMethodResponse>>() { + override fun onNext(response: BaseResponse<PaymentMethodResponse>) { if (response.success) { - val cardResponse = response.content - val cardList = cardResponse?.obj ?: emptyList() - - // 鏇存柊鏁版嵁鍒楄〃 - if (isRefresh) { - adapter.setData(cardList) - } else { - adapter.addData(cardList) - } - - // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁 - hasMoreData = cardList.size >= pageSize - if (!hasMoreData && !isRefresh) { - binding.refreshLayout.finishLoadMoreWithNoMoreData() + // 鑾峰彇鏀粯鏂瑰紡鍒楄〃 + val paymentMethods = response.content?.obj ?: listOf() + if (paymentMethods.isNotEmpty()) { + paymentMethodList = paymentMethods + // 鏇存柊鏀粯鏂瑰紡鏄剧ず + updatePaymentMethodRadioGroup() } } else { - ToastUtil.show(response.msg) + Toast.makeText( + this@CardReplaceActivity, + "鑾峰彇鏀粯鏂瑰紡澶辫触: ${response.msg}", + Toast.LENGTH_SHORT + ).show() } } - + override fun onError(e: Throwable?) { - // 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬� - finishRefreshOrLoadMore(isRefresh) - ToastUtil.show("鏌ヨ澶辫触: ${e?.message ?: "鏈煡閿欒"}") + super.onError(e) + Toast.makeText( + this@CardReplaceActivity, + "鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}", + Toast.LENGTH_SHORT + ).show() } } ) } - + /** - * 缁撴潫鍒锋柊鎴栧姞杞芥洿澶氱姸鎬� + * 鏇存柊鏀粯鏂瑰紡RadioGroup */ - private fun finishRefreshOrLoadMore(isRefresh: Boolean) { - if (isRefresh) { - binding.refreshLayout.finishRefresh() - } else { - binding.refreshLayout.finishLoadMore() + 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 + } + } } } - + /** - * 鎵ц鍗$墖琛ュ姙鎿嶄綔 + * 閲嶇疆鍒拌鍗$姸鎬� */ - private fun performCardReplace(cardInfo: CardReplaceInfo) { - // 杩欓噷瀹炵幇鍗$墖琛ュ姙鐨勪笟鍔¢�昏緫 - ToastUtil.show("閫夋嫨浜嗗崱鐗囪繘琛岃ˉ鍔烇細${cardInfo.cardNum}") + private fun resetToReadingState() { + binding.scrollReadCard.visibility = android.view.View.VISIBLE + binding.cardInfoContainer.visibility = android.view.View.GONE + binding.bottomButtonContainer.visibility = android.view.View.GONE + cardNumber = null + cardInfo = null + cardInfoByClient = null + newCardNumber = null + binding.etCardCost.setText("") + binding.etReturnAmount.setText("") + } + + /** + * 鏄剧ず纭瀵硅瘽妗� + */ + private fun showConfirmDialog(message: String, onConfirm: () -> Unit) { + val confirmDialog = TipDialog(this, message) { + onConfirm() + } + confirmDialog.show() + } + + override fun onNfcBack(intent: Intent?) { + intent?.let { + // 澶勭悊姝e父鐨勮鍗℃搷浣� + handleNfcIntent(it) + } ?: run { + showConfirmDialog("NFC鏁版嵁寮傚父锛岃閲嶆柊鍒峰崱") { + } + } + } + + /** + * 澶勭悊NFC鍒峰崱淇℃伅 + */ + private fun handleNfcIntent(intent: Intent) { + try { + // 妫�鏌ntent涓槸鍚﹀寘鍚玁FC Tag + if (intent.getParcelableExtra<android.nfc.Tag>(android.nfc.NfcAdapter.EXTRA_TAG) == null) { + showConfirmDialog("鏈娴嬪埌NFC鍗$墖锛岃纭繚鍗$墖宸叉纭斁缃�") { + } + return + } + + val nfcAdapter = NfcReadHelper.getInstance(intent, this) + val cardTypeAndCardNumber = nfcAdapter.getCardTypeAndCardNumber() + if (cardTypeAndCardNumber.isNullOrBlank() || !cardTypeAndCardNumber.contains(",")) { + showConfirmDialog("鍗$墖淇℃伅璇诲彇澶辫触锛岃閲嶆柊鍒峰崱") { + } + return + } + val parts = cardTypeAndCardNumber.split(",") + if (parts.size < 2) { + showConfirmDialog("鍗$墖淇℃伅鏍煎紡寮傚父锛岃閲嶆柊鍒峰崱") { + } + return + } + val readCardNumber = parts[0] + val cardType = parts[1] + + 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("鐢ㄦ埛鍗′笉鏀寔琛ュ崱") { + resetToReadingState() + } + } + + else -> { + + } + } + + } catch (e: Exception) { + showConfirmDialog("璇诲崱寮傚父锛�${e.message}") { + } + e.printStackTrace() + } + } + + + /** + * 澶勭悊鍗′俊鎭幏鍙栭敊璇� + */ + private fun handleCardInfoError(code: String?, msg: String?) { + val errorMessage: String = when (code) { + "1001" -> { + "璇ュ崱鐗囨湭鍦ㄧ郴缁熶腑娉ㄥ唽锛屾棤娉曡繘琛岃ˉ鍗℃搷浣溿��" + } + + else -> { + when { + msg.isNullOrBlank() -> "鑾峰彇鍗′俊鎭け璐ワ紝璇烽噸鏂板埛鍗¢噸璇曘��" + msg.contains("鏁版嵁涓嶅瓨鍦�") -> "璇ュ崱鐗囨湭鍦ㄧ郴缁熶腑娉ㄥ唽锛屾棤娉曡繘琛岃ˉ鍗℃搷浣溿��" + msg.contains("缃戠粶") -> "缃戠粶杩炴帴寮傚父锛岃妫�鏌ョ綉缁滆繛鎺ュ悗閲嶆柊鍒峰崱銆�" + msg.contains("瓒呮椂") -> "缃戠粶璇锋眰瓒呮椂锛岃閲嶆柊鍒峰崱閲嶈瘯銆�" + else -> "鑾峰彇鍗′俊鎭け璐ワ細$msg\n\n璇烽噸鏂板埛鍗¢噸璇曘��" + } + } + } + + // 鏄剧ず閿欒淇℃伅鐨勫璇濇 + showConfirmDialog(errorMessage) { + resetToReadingState() + } + } + + /** + * 鎵ц琛ュ崱鎿嶄綔 + */ + private fun performCardReplace() { + // 楠岃瘉杈撳叆 + val cardCostStr = binding.etCardCost.text.toString().trim() + val returnAmountStr = binding.etReturnAmount.text.toString().trim() + + // 宸ユ湰璐归獙璇侊紙蹇呭~锛� + if (cardCostStr.isEmpty()) { + ToastUtil.show("璇疯緭鍏ュ伐鏈垂") + return + } + + val cardCost = try { + val cost = cardCostStr.toDouble() + if (cost < 0) { + ToastUtil.show("宸ユ湰璐逛笉鑳戒负璐熸暟") + return + } + cost + } catch (e: NumberFormatException) { + ToastUtil.show("璇疯緭鍏ユ湁鏁堢殑宸ユ湰璐�") + return + } + + // 杩斿洖閲戦楠岃瘉锛堝繀濉級 + if (returnAmountStr.isEmpty()) { + ToastUtil.show("璇疯緭鍏ヨ繑鍥為噾棰�") + return + } + + val returnAmount = try { + val amount = returnAmountStr.toDouble() + if (amount < 0) { + ToastUtil.show("杩斿洖閲戦涓嶈兘涓鸿礋鏁�") + return + } + amount + } catch (e: NumberFormatException) { + ToastUtil.show("璇疯緭鍏ユ湁鏁堢殑杩斿洖閲戦") + return + } + + callReplaceCardApi(cardCost, returnAmount) + } + + /** + * 璋冪敤琛ュ崱API鎺ュ彛 + */ + private fun callReplaceCardApi(cardCost: Double, returnAmount: Double) { + if (newCardNumber.isNullOrBlank()) { + ToastUtil.show("鏂板崱鍗″彿淇℃伅寮傚父锛岃閲嶆柊鍒峰崱") + return + } + + val map = mutableMapOf<String, Any>() + 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 + map["paymentMethod"] = paymentMethod // 娣诲姞鏀粯鏂瑰紡鍚嶇О + map["remarks"] = "琛ュ崱鎿嶄綔" // 鍥哄畾澶囨敞 + map["operator"] = BaseApplication.userId + + ApiManager.getInstance().requestPostLoading( + this, + "terminal/card/termReissue", + CardReplaceResult::class.java, + map, + object : SubscriberListener<BaseResponse<CardReplaceResult>>() { + override fun onNext(t: BaseResponse<CardReplaceResult>) { + if (t.success && t.content != null) { + // 琛ュ崱鎴愬姛锛岃烦杞埌鍐欏崱鐣岄潰 + startWriteCardActivity( + t.content!!, + cardCost, + returnAmount, + createUserCardFromData() + ) + } else { + // 琛ュ崱澶辫触 + val errorMsg = if (t.msg.isNullOrBlank()) "琛ュ崱澶辫触锛岃閲嶈瘯" else t.msg + showConfirmDialog("琛ュ崱澶辫触锛�$errorMsg") { + } + } + } + + override fun onError(e: Throwable?) { + super.onError(e) + showConfirmDialog("琛ュ崱璇锋眰澶辫触: ${e?.message ?: "缃戠粶寮傚父锛岃妫�鏌ョ綉缁滆繛鎺�"}") { + } + } + } + ) + } + + /** + * 鏍规嵁鐜版湁鏁版嵁鍒涘缓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瀵硅薄 + } + } + + /** + * 璺宠浆鍒板啓鍗$晫闈㈣繘琛屽崱鍐呭鏇存柊 + */ + private fun startWriteCardActivity( + replaceResult: CardReplaceResult, + cardCost: Double, + returnAmount: Double, + userCard: UserCard + ) { + // 鍒涘缓鏇存柊鍚庣殑鐢ㄦ埛鍗℃暟鎹� + val updatedUserCard = UserCard().apply { + // 澶嶅埗鍘熸湁灞炴�� + cardType = userCard.cardType + areaNumber = userCard.areaNumber + userCode = userCard.userCode + userCodeNumber = userCard.userCodeNumber + phoneNumber = userCard.phoneNumber + projectCode = userCard.projectCode + surplusWater = userCard.surplusWater + waterPrice = userCard.waterPrice + electricPrice = userCard.electricPrice + rechargeDate = userCard.rechargeDate + + // 浣跨敤杩斿洖鐨勬柊浣欓 + balance = MornyUtil.changeY2F(replaceResult.balance.toString()) + } + + val intent = Intent(this, NfcWreatActivity::class.java).apply { + putExtra("cardAddr", newCardNumber) // 浣跨敤鏂板崱鍗″彿 + putExtra("operationTypeCode", CardOperationType.ReplaceCard.code) // 浣跨敤琛ュ崱绫诲瀷杩涜鍐欏崱 + putExtra("orderNumber", replaceResult.orderNo) + putExtra("cardCost", cardCost) + putExtra("returnAmount", returnAmount) // 浼犻�掕繑鍥為噾棰� + putExtra("paymentMethod", paymentMethod) // 浼犻�掓敮浠樻柟寮� + putExtra("paymentId", paymentId) // 浼犻�掓敮浠樻柟寮廔D + putExtra("userCard", updatedUserCard as java.io.Serializable) + } + 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() - // TODO: 璋冪敤琛ュ姙鍗$墖API + // 鏄剧ず鍗″彿 + 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