|  |  | 
 |  |  | 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 | 
 |  |  | 
 |  |  |     private lateinit var binding: ActivityCardReplaceBinding | 
 |  |  |     private var cardNumber: String? = null | 
 |  |  |     private var cardInfo: CardInfoResult? = null | 
 |  |  |     private var cardInfoByClient: CardInfoByClientResult? = null | 
 |  |  |     private var userCard: UserCard? = null | 
 |  |  |     private var clientNum: String? = null | 
 |  |  |     private var newCardNumber: String? = null // 新卡卡号 | 
 |  |  |  | 
 |  |  |     // 支付方式相关属性 | 
 |  |  |     private var paymentMethod: String = "现金" | 
 |  |  | 
 |  |  |         /** | 
 |  |  |          * 启动补卡Activity | 
 |  |  |          */ | 
 |  |  |         fun start(context: Context) { | 
 |  |  |         fun start(context: Context, clientNum: String? = null) { | 
 |  |  |             val intent = Intent(context, CardReplaceActivity::class.java) | 
 |  |  |             clientNum?.let { | 
 |  |  |                 intent.putExtra("clientNum", it) | 
 |  |  |             } | 
 |  |  |             context.startActivity(intent) | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |         binding = ActivityCardReplaceBinding.inflate(layoutInflater) | 
 |  |  |         setContentView(binding.root) | 
 |  |  |  | 
 |  |  |         // 获取传递的clientNum参数 | 
 |  |  |         clientNum = intent.getStringExtra("clientNum") | 
 |  |  |  | 
 |  |  |         initView() | 
 |  |  |         // 获取支付方式 | 
 |  |  |         getPaymentMethods() | 
 |  |  |          | 
 |  |  |         // 无论是否有clientNum,都先显示读卡界面,等待用户刷新卡 | 
 |  |  |         resetToReadingState() | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private fun initView() { | 
 |  |  | 
 |  |  |         binding.bottomButtonContainer.visibility = android.view.View.GONE | 
 |  |  |         cardNumber = null | 
 |  |  |         cardInfo = null | 
 |  |  |         cardInfoByClient = null | 
 |  |  |         newCardNumber = null | 
 |  |  |         binding.etCardCost.setText("") | 
 |  |  |         binding.etReturnAmount.setText("0") | 
 |  |  |     } | 
 |  |  | 
 |  |  |                 } | 
 |  |  |                 return | 
 |  |  |             } | 
 |  |  |             val cardNumber = parts[0] | 
 |  |  |             val readCardNumber = parts[0] | 
 |  |  |             val cardType = parts[1] | 
 |  |  |             this.cardNumber = cardNumber | 
 |  |  |             if (cardNumber.isBlank()) { | 
 |  |  |              | 
 |  |  |             if (readCardNumber.isBlank()) { | 
 |  |  |                 showConfirmDialog("卡号为空,无法进行操作,请重新刷卡") { | 
 |  |  |                 } | 
 |  |  |                 return | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 根据卡片类型进行不同处理 | 
 |  |  |             when (cardType) { | 
 |  |  |                 CardCommon.USER_CARD_TYPE_1, | 
 |  |  |                 CardCommon.USER_CARD_TYPE_2, | 
 |  |  |                 CardCommon.USER_CARD_TYPE_3 -> { | 
 |  |  |                     // 用户卡:解析卡内数据并调用接口 | 
 |  |  |                     showConfirmDialog("该卡片类型不支持补卡操作") { | 
 |  |  |                         resetToReadingState() | 
 |  |  |             // 保存新卡卡号 | 
 |  |  |             this.newCardNumber = readCardNumber | 
 |  |  |  | 
 |  |  |             // 根据是否有clientNum参数决定获取卡信息的方式 | 
 |  |  |             if (clientNum != null) { | 
 |  |  |                 // 如果有clientNum,使用clientNum获取卡信息 | 
 |  |  |                 getCardInfoByClientNum(clientNum!!) | 
 |  |  |             } else { | 
 |  |  |                 // 如果没有clientNum,根据卡片类型进行处理 | 
 |  |  |                 when (cardType) { | 
 |  |  |                     CardCommon.USER_CARD_TYPE_1, | 
 |  |  |                     CardCommon.USER_CARD_TYPE_2, | 
 |  |  |                     CardCommon.USER_CARD_TYPE_3 -> { | 
 |  |  |                         // 用户卡:解析卡内数据并调用接口 | 
 |  |  |                         showConfirmDialog("该卡片类型不支持补卡操作") { | 
 |  |  |                             resetToReadingState() | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 else -> { | 
 |  |  |                     // 管理类卡不支持补卡 | 
 |  |  |                     handleUserCard(cardNumber, cardType, nfcAdapter) | 
 |  |  |                     else -> { | 
 |  |  |                         // 管理类卡不支持补卡 | 
 |  |  |                         handleUserCard(readCardNumber, cardType, nfcAdapter) | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } catch (e: Exception) { | 
 |  |  | 
 |  |  |         binding.bottomButtonContainer.visibility = android.view.View.VISIBLE | 
 |  |  |  | 
 |  |  |         this.cardInfo = cardInfo | 
 |  |  |         this.cardNumber = cardNumber | 
 |  |  |          | 
 |  |  |         // 显示当前卡地址 | 
 |  |  |         binding.tvCurrentCardAddress.text = cardNumber | 
 |  |  |         // 显示新卡卡号 | 
 |  |  |         binding.tvCurrentCardAddress.text = newCardNumber ?: cardNumber | 
 |  |  |  | 
 |  |  |         // 显示服务器数据 | 
 |  |  |         cardInfo?.let { info -> | 
 |  |  | 
 |  |  |      * 调用补卡API接口 | 
 |  |  |      */ | 
 |  |  |     private fun callReplaceCardApi(cardCost: Double, returnAmount: Double) { | 
 |  |  |         if (cardNumber.isNullOrBlank()) { | 
 |  |  |             ToastUtil.show("卡号信息异常,请重新刷卡") | 
 |  |  |         if (newCardNumber.isNullOrBlank()) { | 
 |  |  |             ToastUtil.show("新卡卡号信息异常,请重新刷卡") | 
 |  |  |             return | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         val map = mutableMapOf<String, Any>() | 
 |  |  |         map["cardAddr"] = cardNumber!! | 
 |  |  |         map["cardNum"] = cardInfo?.cardNum.toString() | 
 |  |  |         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 // 使用选中的支付方式ID | 
 |  |  | 
 |  |  |                 override fun onNext(t: BaseResponse<CardReplaceResult>) { | 
 |  |  |                     if (t.success && t.content != null) { | 
 |  |  |                         // 补卡成功,跳转到写卡界面 | 
 |  |  |                         startWriteCardActivity(t.content!!, cardCost, returnAmount, userCard!!) | 
 |  |  |                         startWriteCardActivity(t.content!!, cardCost, returnAmount, createUserCardFromData()) | 
 |  |  |                     } else { | 
 |  |  |                         // 补卡失败 | 
 |  |  |                         val errorMsg = if (t.msg.isNullOrBlank()) "补卡失败,请重试" else t.msg | 
 |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         ) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据现有数据创建UserCard对象 | 
 |  |  |      */ | 
 |  |  |     private fun createUserCardFromData(): UserCard { | 
 |  |  |         return when { | 
 |  |  |             userCard != null -> userCard!! | 
 |  |  |             cardInfoByClient != null -> { | 
 |  |  |                 // 从接口数据创建UserCard对象 | 
 |  |  |                 UserCard().apply { | 
 |  |  |                     // 这里可能需要根据实际需求设置更多属性 | 
 |  |  |                     balance = MornyUtil.changeY2F(cardInfoByClient!!.money) | 
 |  |  |                     phoneNumber = cardInfoByClient!!.phone.toString() | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             else -> UserCard() // 返回空的UserCard对象 | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         val intent = Intent(this, NfcWreatActivity::class.java).apply { | 
 |  |  |             putExtra("cardAddr", cardNumber) | 
 |  |  |             putExtra("cardAddr", newCardNumber) // 使用新卡卡号 | 
 |  |  |             putExtra("operationTypeCode", CardOperationType.ReplaceCard.code) // 使用补卡类型进行写卡 | 
 |  |  |             putExtra("orderNumber", replaceResult.orderNo) | 
 |  |  |             putExtra("cardCost", cardCost) | 
 |  |  | 
 |  |  |         startActivity(intent) | 
 |  |  |         finish() | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据客户编号获取卡信息 | 
 |  |  |      */ | 
 |  |  |     private fun getCardInfoByClientNum(clientNum: String) { | 
 |  |  |         val map = mutableMapOf<String, Any>() | 
 |  |  |         map["clientNum"] = clientNum | 
 |  |  |  | 
 |  |  |         ApiManager.getInstance().requestGetLoading( | 
 |  |  |             this, | 
 |  |  |             "terminal/card/getcardbyclientnum", | 
 |  |  |             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 ?: "网络异常,请检查网络连接"}") { | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         ) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 显示从客户编号接口获取的卡信息 | 
 |  |  |      */ | 
 |  |  |     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 ?: cardInfo.cardNum | 
 |  |  |          | 
 |  |  |         // 显示卡信息 | 
 |  |  |         binding.tvUserName.text = cardInfo.clientName | 
 |  |  |         binding.tvPhone.text = cardInfo.phone.toString() | 
 |  |  |  | 
 |  |  |         // 根据cardState字段显示状态 | 
 |  |  |         val (statusText, statusColor) = when (cardInfo.cardState) { | 
 |  |  |             1 -> Pair("正常", 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 | 
 |  |  |     } | 
 |  |  | }  |