From d773ab0295feba24ae4fc14f61e8aa310e40f4ba Mon Sep 17 00:00:00 2001 From: zuojincheng <lf_zuo@163.com> Date: 星期五, 06 六月 2025 16:55:57 +0800 Subject: [PATCH] refactor(nfc): 优化写卡流程和状态更新 --- generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt | 195 +++++++++++++++++++++++++++--------------------- 1 files changed, 108 insertions(+), 87 deletions(-) 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 46c5a42..9b7c268 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt @@ -13,15 +13,23 @@ import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE import com.dayu.general.BaseApplication import com.dayu.general.R +import com.dayu.general.bean.card.UserCard import com.dayu.general.bean.db.CardRegistrationBean +import com.dayu.general.bean.net.ClientInfo +import com.dayu.general.bean.net.NewCardDataResult +import com.dayu.general.bean.net.PaymentMethod +import com.dayu.general.bean.net.PaymentMethodResponse import com.dayu.general.dao.BaseDaoSingleton import com.dayu.general.databinding.ActivityNewCardGeBinding import com.dayu.general.net.ApiManager import com.dayu.general.net.BaseResponse +import com.dayu.general.tool.CardCommon.Companion.USER_CARD_TYPE_1 import com.dayu.general.tool.NfcReadHelper import com.dayu.general.tool.NfcWreatHelper +import com.dayu.general.utils.DateUtils import com.tencent.bugly.crashreport.CrashReport import kotlinx.coroutines.launch +import java.util.Calendar /** * Description: 鐢ㄦ埛寮�鍗$晫闈�(鍚屾淇敼鐧藉崱瀵嗙爜) @@ -34,7 +42,7 @@ // 鏀粯鏂瑰紡 private var paymentMethod: String = "鐜伴噾" - + // 鏀粯鏂瑰紡ID private var paymentId: Long = 0 @@ -46,44 +54,21 @@ // 鐢ㄦ埛ID private var userId: String = "" - + // 瀹㈡埛ID private var clientId: String = "" + + private lateinit var clientInfo : ClientInfo + + // 鏄惁宸茶鍗� + private var isReadCard: Boolean = false + + private var orderId:String="" companion object { private const val TAG = "NewCard2Activity" } - // 鏀粯鏂瑰紡鏁版嵁绫� - data class PaymentMethod( - val id: Long, - val name: String, - val remarks: String, - val deleted: Int - ) - - // 鏀粯鏂瑰紡鎺ュ彛杩斿洖鏁版嵁绫� - data class PaymentMethodResponse( - val itemTotal: Any?, - val obj: List<PaymentMethod>, - val pageCurr: Any?, - val pageSize: Any?, - val pageTotal: Any? - ) - - // 鐢ㄦ埛淇℃伅鏁版嵁绫� - data class ClientInfo( - val clientId: String, - val clientNum: String, - val name: String, - val districtNum: String, - val phone: String, - val idCard: String, - val villageName: String, - val address: String, - val cardCount: Int, - val operateDt: String - ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -92,14 +77,14 @@ // 鑾峰彇浼犻�掔殑clientId鍙傛暟 clientId = intent.getStringExtra("clientId") ?: "" - + initView() - + // 濡傛灉鏈塩lientId锛岃幏鍙栧鎴蜂俊鎭� if (clientId.isNotEmpty()) { getClientInfo(clientId) } - + // 鑾峰彇鏀粯鏂瑰紡 getPaymentMethods() initListener() @@ -118,7 +103,7 @@ binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher()) binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher()) } - + /** * 鑾峰彇瀹㈡埛璇︾粏淇℃伅 */ @@ -131,7 +116,7 @@ object : SubscriberListener<BaseResponse<ClientInfo>>() { override fun onNext(response: BaseResponse<ClientInfo>) { if (response.success) { - val clientInfo = response.content + clientInfo = response.content!! if (clientInfo != null) { // 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� displayClientInfo(clientInfo) @@ -162,14 +147,14 @@ } ) } - + /** * 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� */ private fun displayClientInfo(clientInfo: ClientInfo) { // 淇濆瓨鐢ㄦ埛ID渚涘悗缁娇鐢� userId = clientInfo.clientId - + // 鏄剧ず鐢ㄦ埛鍩烘湰淇℃伅 binding.newCardUserName.text = clientInfo.name binding.newCardIdCard.text = if (clientInfo.idCard.isBlank()) "鏃�" else clientInfo.idCard @@ -232,23 +217,23 @@ resources.getDimensionPixelSize(R.dimen.dimen_40), 1.0f ) - + // 濡傛灉涓嶆槸鏈�鍚庝竴涓寜閽紝娣诲姞鍙宠竟璺� if (index < paymentMethodList.size - 1) { - (radioButton.layoutParams as android.widget.LinearLayout.LayoutParams).rightMargin = + (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.newCardPaymentMethod.addView(radioButton) - + // 榛樿閫変腑绗竴涓� if (index == 0) { radioButton.isChecked = true @@ -334,47 +319,69 @@ // 鏋勫缓璇锋眰鍙傛暟 val params = HashMap<String, Any>() params["cardAddr"] = cardPhysicalId // 姘村崱鍦板潃锛堢墿鐞咺D锛� - params["clientNum"] = binding.newCardFarmerCode.text.toString() // 鍐滄埛缂栧彿 - params["cardCost"] = (cardFee * 100).toInt() // 璐崱閲戦锛堝伐鏈垂锛夎浆涓哄垎 - params["amount"] = (rechargeAmount * 100).toInt() // 鍏呭�奸噾棰濊浆涓哄垎 + params["clientId"] = clientId // 鍐滄埛ID + params["cardCost"] = cardFee // 璐崱閲戦锛堝伐鏈垂锛�(鍏�) + params["amount"] = rechargeAmount // 鍏呭�奸噾棰�(鍏�) params["paymentId"] = paymentId // 鏀粯鏂瑰紡ID params["remarks"] = remark // 澶囨敞 + params["protocol"] = "p206V1_0_1" // 鍗忚 params["operator"] = BaseApplication.userId // 鎿嶄綔浜篒D // 鎵ц鍗$墖婵�娲籄PI璇锋眰 ApiManager.getInstance().requestPostLoading( this, - "sell/card/active", - String::class.java, + "terminal/card/termActiveCard", + NewCardDataResult::class.java, params, - object : SubscriberListener<BaseResponse<String>>() { - override fun onNext(response: BaseResponse<String>) { + object : SubscriberListener<BaseResponse<NewCardDataResult>>() { + override fun onNext(response: BaseResponse<NewCardDataResult>) { if (response.success) { + orderId=response.content?.orderNo.toString() // 淇濆瓨寮�鍗′俊鎭埌鏁版嵁搴� val cardRegistration = CardRegistrationBean( cardNumber = cardPhysicalId, userName = binding.newCardUserName.text.toString(), idCard = binding.newCardIdCard.text.toString(), - farmerCode = binding.newCardFarmerCode.text.toString(), + clientId = clientId, cardFee = cardFee, remark = binding.newCardRemark.text.toString(), paymentMethod = paymentId.toInt(), isReported = true, - isCardWritten = true - ) + isCardWritten = false, // 鍒濆璁剧疆涓篺alse锛屽啓鍗℃垚鍔熷悗鍐嶆洿鏂颁负true + operatorId = orderId, + + ) // 浣跨敤鍗忕▼鍦ㄥ悗鍙扮嚎绋嬩腑淇濆瓨鏁版嵁 lifecycleScope.launch { try { BaseDaoSingleton.getInstance(this@NewCard2Activity) .cardRegistrationDao().insert(cardRegistration) + Toast.makeText( this@NewCard2Activity, "寮�鍗℃垚鍔�", Toast.LENGTH_SHORT ).show() setResult(RESULT_OK) - finish() + Intent(this@NewCard2Activity, NfcWreatActivity::class.java).apply { + putExtra("cardType", USER_CARD_TYPE_1) + putExtra("orderId", orderId) + putExtra("cardAddr", cardPhysicalId) + var userCard = UserCard() + userCard.areaNumber =clientInfo.districtNum + userCard.userCode =clientInfo.clientNum + userCard.phoneNumber =clientInfo.phone + userCard.userCodeNumber = response.content?.cardNum?.toInt()!! + userCard.projectCode = response.content?.projectNo?.toInt()!! + userCard.balance = response.content?.balance?.toInt()!! +// userCard.surplusWater = response.content?.surplusWater?.toInt()!! + userCard.waterPrice = response.content?.waterPrice?.toFloat()!! +// userCard.electricPrice = response.content?.electricPrice?.toFloat()!! + userCard.rechargeDate = DateUtils.parseStringToCalendar(response.content?.time) + putExtra("userCard", userCard) + startActivity(this) + } } catch (e: Exception) { CrashReport.postCatchedException(e) Toast.makeText( @@ -420,48 +427,62 @@ } override fun onNfcBack(intent: Intent) { - val cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose() - if (cardNumber.isNotEmpty()) { - try { - // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException - val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList()) + if (!isReadCard) { + val cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose() + if (cardNumber.isNotEmpty()) { + try { + // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException + val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList()) - // 浣跨敤缇庡寲鐨勫姞杞藉姩鐢绘潵鏄剧ずNFC鎿嶄綔鐨勫姞杞界姸鎬� - val nfcHelper = NfcWreatHelper.getInstance(intent, this) - nfcHelper.setLoadingView(binding.loadingContainer, binding.nfcProgressWheel) - - // 寮傛淇敼瀵嗙爜 - nfcHelper.changePSAsync(keyList, false, true) { success: Boolean, msg: String? -> - if (success) { - // 淇濆瓨鍗$墿鐞咺D - cardPhysicalId = cardNumber - // 鏇存柊UI - binding.newCardArerNumber.text = cardNumber - // 闅愯棌NFC璇诲崱鐣岄潰 - binding.nfcContainer.visibility = View.GONE - binding.centerScroll.visibility = View.VISIBLE - binding.newCardRegistBtn.visibility = View.VISIBLE - } else { - // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐� - Toast.makeText( - this@NewCard2Activity, - "鍗$墖鍒濆鍖栧け璐ワ細$msg", - Toast.LENGTH_LONG - ).show() + // 浣跨敤缇庡寲鐨勫姞杞藉姩鐢绘潵鏄剧ずNFC鎿嶄綔鐨勫姞杞界姸鎬� + val nfcHelper = NfcWreatHelper.getInstance(intent, this) + nfcHelper.setLoadingView(binding.loadingContainer, binding.nfcProgressWheel) + + // 寮傛淇敼瀵嗙爜 + nfcHelper.changePSAsync( + keyList, + false, + true + ) { success: Boolean, msg: String? -> + if (success) { + isReadCard = true + // 淇濆瓨鍗$墿鐞咺D + cardPhysicalId = cardNumber + // 鏇存柊UI + binding.newCardArerNumber.text = cardNumber + // 闅愯棌NFC璇诲崱鐣岄潰 + binding.nfcContainer.visibility = View.GONE + binding.centerScroll.visibility = View.VISIBLE + binding.newCardRegistBtn.visibility = View.VISIBLE + } else { + // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐� + Toast.makeText( + this@NewCard2Activity, + "鍗$墖鍒濆鍖栧け璐ワ細$msg", + Toast.LENGTH_LONG + ).show() + } } + } catch (e: Exception) { + // 澶勭悊寮傚父鎯呭喌 + CrashReport.postCatchedException(e) + e.printStackTrace() } - } catch (e: Exception) { - // 澶勭悊寮傚父鎯呭喌 - CrashReport.postCatchedException(e) - e.printStackTrace() + } else { + Toast.makeText( + this@NewCard2Activity, + "鑾峰彇鍗″彿澶辫触", + Toast.LENGTH_SHORT + ).show() } } else { Toast.makeText( this@NewCard2Activity, - "鑾峰彇鍗″彿澶辫触", + "褰撳墠宸茶鍗★紝涓嶅彲鍐嶆璇诲崱", Toast.LENGTH_SHORT ).show() } + } override fun onDestroy() { -- Gitblit v1.8.0