| | |
| | | private var cardInfo: CardInfoResult? = null |
| | | private var cardInfoByClient: CardInfoByClientResult? = null |
| | | private var userCard: UserCard? = null |
| | | private var clientNum: String? = null |
| | | private var cardNum: String? = null |
| | | private var newCardNumber: String? = null // 新卡卡号 |
| | | |
| | | // 支付方式相关属性 |
| | |
| | | /** |
| | | * 启动补卡Activity |
| | | */ |
| | | fun start(context: Context, clientNum: String? = null) { |
| | | fun start(context: Context, clientNum: String) { |
| | | val intent = Intent(context, CardReplaceActivity::class.java) |
| | | clientNum?.let { |
| | | intent.putExtra("clientNum", it) |
| | | } |
| | | intent.putExtra("cardNum", clientNum) |
| | | context.startActivity(intent) |
| | | } |
| | | } |
| | |
| | | setContentView(binding.root) |
| | | |
| | | // 获取传递的clientNum参数 |
| | | clientNum = intent.getStringExtra("clientNum") |
| | | cardNum = intent.getStringExtra("cardNum") |
| | | |
| | | initView() |
| | | // 获取支付方式 |
| | |
| | | cardInfoByClient = null |
| | | newCardNumber = null |
| | | binding.etCardCost.setText("") |
| | | binding.etReturnAmount.setText("0") |
| | | binding.etReturnAmount.setText("") |
| | | } |
| | | |
| | | /** |
| | |
| | | // 保存新卡卡号 |
| | | this.newCardNumber = readCardNumber |
| | | |
| | | // 根据是否有clientNum参数决定获取卡信息的方式 |
| | | if (clientNum != null) { |
| | | // 如果有clientNum,使用clientNum获取卡信息 |
| | | getCardInfoByClientNum(clientNum!!) |
| | | } else { |
| | | // 如果没有clientNum,根据卡片类型进行处理 |
| | | when (cardType) { |
| | | "00" -> { |
| | | // 白卡才可以补卡 |
| | | if (cardNum != null) { |
| | | // 如果有clientNum,使用clientNum获取卡信息 |
| | | getCardInfoByClientNum(cardNum!!) |
| | | } else { |
| | | showConfirmDialog("获取旧卡信息数据失败") { |
| | | resetToReadingState() |
| | | } |
| | | } |
| | | } |
| | | |
| | | CardCommon.USER_CARD_TYPE_1, |
| | | CardCommon.USER_CARD_TYPE_2, |
| | | CardCommon.USER_CARD_TYPE_3 -> { |
| | | // 用户卡:解析卡内数据并调用接口 |
| | | showConfirmDialog("该卡片类型不支持补卡操作") { |
| | | showConfirmDialog("用户卡不支持补卡") { |
| | | resetToReadingState() |
| | | } |
| | | } |
| | | |
| | | else -> { |
| | | // 管理类卡不支持补卡 |
| | | handleUserCard(readCardNumber, cardType, nfcAdapter) |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } catch (e: Exception) { |
| | | showConfirmDialog("读卡异常:${e.message}") { |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 处理用户卡 |
| | | */ |
| | | private fun handleUserCard(cardNumber: String, cardType: String, nfcAdapter: NfcReadHelper) { |
| | | // 解析用户卡数据 |
| | | val userCard = nfcAdapter.getUserCardData() |
| | | if (userCard == null) { |
| | | showConfirmDialog("解析卡片数据失败,请重新刷卡") { |
| | | } |
| | | return |
| | | } |
| | | |
| | | // 输出用户卡内所有信息到日志 |
| | | android.util.Log.d("CardReplaceActivity", "=== 用户卡信息 ===") |
| | | android.util.Log.d("CardReplaceActivity", "卡号: $cardNumber") |
| | | android.util.Log.d("CardReplaceActivity", "卡片类型: $cardType") |
| | | android.util.Log.d("CardReplaceActivity", "卡内余额: ${userCard.balance}") |
| | | android.util.Log.d("CardReplaceActivity", "==================") |
| | | this.userCard = userCard |
| | | // 根据卡号获取卡片详细信息 |
| | | getCardInfo(cardNumber, cardType, userCard) |
| | | } |
| | | |
| | | /** |
| | | * 获取卡片详细信息(用户卡专用) |
| | | */ |
| | | private fun getCardInfo(cardNumber: String, cardType: String, userCard: UserCard) { |
| | | val map = mutableMapOf<String, Any>() |
| | | map["cardAddr"] = cardNumber |
| | | ApiManager.getInstance().requestGetLoading( |
| | | this, |
| | | "terminal/card/readCard", |
| | | CardInfoResult::class.java, |
| | | map, |
| | | object : SubscriberListener<BaseResponse<CardInfoResult>>() { |
| | | override fun onNext(t: BaseResponse<CardInfoResult>) { |
| | | if (t.success) { |
| | | // 读卡成功,显示用户卡详细信息 |
| | | showUserCardInfo(t.content, cardNumber, cardType, userCard) |
| | | } else { |
| | | // 处理获取失败的情况 |
| | | handleCardInfoError(t.code, t.msg) |
| | | } |
| | | } |
| | | |
| | | override fun onError(e: Throwable?) { |
| | | super.onError(e) |
| | | showConfirmDialog("获取卡信息失败: ${e?.message ?: "网络异常,请检查网络连接"}") { |
| | | } |
| | | } |
| | | } |
| | | ) |
| | | } |
| | | |
| | | /** |
| | | * 显示用户卡片信息(包含卡内数据和接口返回数据) |
| | | */ |
| | | private fun showUserCardInfo( |
| | | cardInfo: CardInfoResult?, |
| | | cardNumber: String, |
| | | cardType: String, |
| | | userCard: UserCard |
| | | ) { |
| | | // 隐藏读卡提示,显示信息区域和底部按钮 |
| | | binding.scrollReadCard.visibility = android.view.View.GONE |
| | | binding.cardInfoContainer.visibility = android.view.View.VISIBLE |
| | | binding.bottomButtonContainer.visibility = android.view.View.VISIBLE |
| | | |
| | | this.cardInfo = cardInfo |
| | | this.cardNumber = cardNumber |
| | | |
| | | // 显示新卡卡号 |
| | | binding.tvCurrentCardAddress.text = newCardNumber ?: cardNumber |
| | | |
| | | // 显示服务器数据 |
| | | cardInfo?.let { info -> |
| | | binding.tvUserName.text = info.userName ?: "未知" |
| | | binding.tvPhone.text = info.phone ?: "未绑定" |
| | | |
| | | // 根据state字段显示状态 |
| | | val (statusText, statusColor) = when (info.state) { |
| | | 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) |
| | | } |
| | | |
| | | userCard.let { card -> |
| | | // 余额转换为元(原始数据可能是分) |
| | | binding.tvCardBalance.text = MornyUtil.changeF2Y(card.balance) + "元" |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 处理卡信息获取错误 |
| | |
| | | override fun onNext(t: BaseResponse<CardReplaceResult>) { |
| | | if (t.success && t.content != null) { |
| | | // 补卡成功,跳转到写卡界面 |
| | | startWriteCardActivity(t.content!!, cardCost, returnAmount, createUserCardFromData()) |
| | | startWriteCardActivity( |
| | | t.content!!, |
| | | cardCost, |
| | | returnAmount, |
| | | createUserCardFromData() |
| | | ) |
| | | } else { |
| | | // 补卡失败 |
| | | val errorMsg = if (t.msg.isNullOrBlank()) "补卡失败,请重试" else t.msg |
| | |
| | | phoneNumber = cardInfoByClient!!.phone.toString() |
| | | } |
| | | } |
| | | |
| | | else -> UserCard() // 返回空的UserCard对象 |
| | | } |
| | | } |
| | |
| | | /** |
| | | * 根据客户编号获取卡信息 |
| | | */ |
| | | private fun getCardInfoByClientNum(clientNum: String) { |
| | | private fun getCardInfoByClientNum(cardNum: String) { |
| | | val map = mutableMapOf<String, Any>() |
| | | map["clientNum"] = clientNum |
| | | map["cardNum"] = cardNum |
| | | |
| | | ApiManager.getInstance().requestGetLoading( |
| | | this, |
| | | "terminal/card/getcardbyclientnum", |
| | | "terminal/card/getcardbycardnum", |
| | | CardInfoByClientResult::class.java, |
| | | map, |
| | | object : SubscriberListener<BaseResponse<CardInfoByClientResult>>() { |
| | |
| | | binding.bottomButtonContainer.visibility = android.view.View.VISIBLE |
| | | |
| | | // 显示新卡卡号(如果已读取到新卡) |
| | | binding.tvCurrentCardAddress.text = newCardNumber ?: cardInfo.cardNum |
| | | binding.tvCurrentCardAddress.text = newCardNumber ?: "" |
| | | |
| | | // 显示卡信息 |
| | | binding.tvUserName.text = cardInfo.clientName |
| | | binding.tvPhone.text = cardInfo.phone.toString() |
| | | |
| | | // 显示卡号 |
| | | binding.tvCardNumber.text = cardInfo.cardNum ?: "--" |
| | | |
| | | // 显示客户编号 |
| | | binding.tvCustomerId.text = cardInfo.clientNum ?: "--" |
| | | |
| | | // 根据cardState字段显示状态 |
| | | val (statusText, statusColor) = when (cardInfo.cardState) { |
| | | 1 -> Pair("正常", android.graphics.Color.parseColor("#4CAF50")) // 绿色 |