| | |
| | | import android.content.Intent |
| | | import android.os.Bundle |
| | | import com.dayu.baselibrary.net.subscribers.SubscriberListener |
| | | import com.dayu.baselibrary.utils.ToastUtil |
| | | import com.dayu.baselibrary.utils.MornyUtil |
| | | import com.dayu.baselibrary.view.TipDialog |
| | | import com.dayu.baselibrary.view.TitleBar |
| | | import com.dayu.general.bean.card.UserCard |
| | | import com.dayu.general.bean.net.CardInfoResult |
| | | import com.dayu.general.databinding.ActivityCardReadBinding |
| | | import com.dayu.general.net.ApiManager |
| | | import com.dayu.general.net.BaseResponse |
| | | import com.dayu.general.tool.NfcReadHelper |
| | | import com.dayu.general.bean.card.UserCard |
| | | import com.dayu.general.tool.CardCommon |
| | | import com.dayu.general.tool.NfcReadHelper |
| | | |
| | | /** |
| | | * @author: zuo |
| | |
| | | handleUserCard(cardNumber, cardType, nfcAdapter) |
| | | } |
| | | |
| | | "00" -> { |
| | | // 地区卡:显示卡片类型信息 |
| | | handleUserCard(cardNumber, cardType, nfcAdapter) |
| | | } |
| | | |
| | | else -> { |
| | | // 管理类卡:显示卡片类型信息 |
| | | handleManagementCard(cardNumber, cardType) |
| | |
| | | * 处理用户卡 |
| | | */ |
| | | private fun handleUserCard(cardNumber: String, cardType: String, nfcAdapter: NfcReadHelper) { |
| | | // 解析用户卡数据 |
| | | val userCard = nfcAdapter.getUserCardData() |
| | | if (userCard == null) { |
| | | showConfirmDialog("解析卡片数据失败,请重新刷卡") { |
| | | if (cardType != "00") { |
| | | // 解析用户卡数据 |
| | | val userCard = nfcAdapter.getUserCardData() |
| | | if (userCard == null) { |
| | | showConfirmDialog("解析卡片数据失败,请重新刷卡") { |
| | | } |
| | | return |
| | | } |
| | | return |
| | | |
| | | // 输出用户卡内所有信息到日志 |
| | | android.util.Log.d("CardReadActivity", "=== 用户卡信息 ===") |
| | | android.util.Log.d("CardReadActivity", "卡号: $cardNumber") |
| | | android.util.Log.d("CardReadActivity", "卡片类型: $cardType") |
| | | android.util.Log.d("CardReadActivity", "国家行政区域号: ${userCard.areaNumber}") |
| | | android.util.Log.d("CardReadActivity", "用户编号: ${userCard.userCode}") |
| | | android.util.Log.d("CardReadActivity", "用户卡编号: ${userCard.userCodeNumber}") |
| | | android.util.Log.d("CardReadActivity", "完整用户编号: ${userCard.getMyUserCode()}") |
| | | android.util.Log.d("CardReadActivity", "手机号: ${userCard.phoneNumber}") |
| | | android.util.Log.d("CardReadActivity", "项目编码: ${userCard.projectCode}") |
| | | android.util.Log.d("CardReadActivity", "卡内余额: ${userCard.balance}") |
| | | android.util.Log.d("CardReadActivity", "剩余水量: ${userCard.surplusWater}") |
| | | android.util.Log.d("CardReadActivity", "水量单价: ${userCard.waterPrice}") |
| | | android.util.Log.d("CardReadActivity", "电量单价: ${userCard.electricPrice}") |
| | | android.util.Log.d("CardReadActivity", "充值时间: ${userCard.rechargeDate}") |
| | | android.util.Log.d("CardReadActivity", "==================") |
| | | getCardInfo(cardNumber, cardType, userCard) |
| | | } else { |
| | | getCardInfo(cardNumber, cardType, null) |
| | | } |
| | | binding.tvCardNumber.text = cardNumber |
| | | // 输出用户卡内所有信息到日志 |
| | | android.util.Log.d("CardReadActivity", "=== 用户卡信息 ===") |
| | | android.util.Log.d("CardReadActivity", "卡号: $cardNumber") |
| | | android.util.Log.d("CardReadActivity", "卡片类型: $cardType") |
| | | android.util.Log.d("CardReadActivity", "国家行政区域号: ${userCard.areaNumber}") |
| | | android.util.Log.d("CardReadActivity", "用户编号: ${userCard.userCode}") |
| | | android.util.Log.d("CardReadActivity", "用户卡编号: ${userCard.userCodeNumber}") |
| | | android.util.Log.d("CardReadActivity", "完整用户编号: ${userCard.getMyUserCode()}") |
| | | android.util.Log.d("CardReadActivity", "手机号: ${userCard.phoneNumber}") |
| | | android.util.Log.d("CardReadActivity", "项目编码: ${userCard.projectCode}") |
| | | android.util.Log.d("CardReadActivity", "卡内余额: ${userCard.balance}") |
| | | android.util.Log.d("CardReadActivity", "剩余水量: ${userCard.surplusWater}") |
| | | android.util.Log.d("CardReadActivity", "水量单价: ${userCard.waterPrice}") |
| | | android.util.Log.d("CardReadActivity", "电量单价: ${userCard.electricPrice}") |
| | | android.util.Log.d("CardReadActivity", "充值时间: ${userCard.rechargeDate}") |
| | | android.util.Log.d("CardReadActivity", "==================") |
| | | |
| | | |
| | | // 根据卡号获取卡片详细信息 |
| | | getCardInfo(cardNumber, cardType, userCard) |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | /** |
| | | * 获取卡片详细信息(用户卡专用) |
| | | */ |
| | | private fun getCardInfo(cardNumber: String, cardType: String, userCard: UserCard) { |
| | | private fun getCardInfo(cardNumber: String, cardType: String, userCard: UserCard?) { |
| | | val map = mutableMapOf<String, Any>() |
| | | map["cardAddr"] = cardNumber |
| | | ApiManager.getInstance().requestGetLoading( |
| | |
| | | cardInfo: CardInfoResult?, |
| | | cardNumber: String, |
| | | cardType: String, |
| | | userCard: UserCard |
| | | userCard: UserCard? |
| | | ) { |
| | | // 隐藏读卡提示,显示信息区域 |
| | | binding.cardReadLL.visibility = android.view.View.GONE |
| | |
| | | val cardTypeName = getCardTypeName(cardType) |
| | | |
| | | // 显示卡内数据 |
| | | |
| | | binding.tvCardType.text = cardTypeName |
| | | // 显示用户卡特有字段 |
| | | binding.llCardBalance.visibility = android.view.View.VISIBLE |
| | | binding.llUserNumber.visibility = android.view.View.VISIBLE |
| | | binding.llCardStatus.visibility = android.view.View.VISIBLE |
| | | |
| | | userCard.let { card -> |
| | | // 余额转换为元(原始数据可能是分) |
| | | val balanceInYuan = if (card.balance > 1000) { |
| | | String.format("%.2f", card.balance / 100.0) |
| | | } else { |
| | | card.balance.toString() |
| | | } |
| | | binding.tvCardBalance.text = "${balanceInYuan}元" |
| | | |
| | | // 使用完整的用户编号 |
| | | binding.tvUserNumber.text = cardInfo?.cardNum |
| | | |
| | | // 卡片状态(假设正常状态,因为UserCard中没有状态字段) |
| | | binding.tvCardStatus.text = "正常" |
| | | binding.tvCardStatus.setTextColor(android.graphics.Color.parseColor("#4CAF50")) |
| | | binding.tvCardNumber.text = cardNumber |
| | | // 处理卡内数据 - 优先使用userCard,如果为空则从cardInfo获取 |
| | | if (userCard != null) { |
| | | // 从卡内数据获取信息 |
| | | binding.tvCardBalance.text = MornyUtil.changeF2Y(userCard.balance.toInt()) + "元" |
| | | |
| | | // 充值时间作为最后使用时间 |
| | | if (card.rechargeDate != null) { |
| | | val rechargeDate = userCard.rechargeDate |
| | | if (rechargeDate != null) { |
| | | binding.llLastUseTime.visibility = android.view.View.VISIBLE |
| | | val dateFormat = |
| | | java.text.SimpleDateFormat("yyyy-MM-dd HH:mm", java.util.Locale.getDefault()) |
| | | binding.tvLastUseTime.text = dateFormat.format(card.rechargeDate!!.time) |
| | | binding.tvLastUseTime.text = dateFormat.format(rechargeDate.time) |
| | | } else { |
| | | binding.llLastUseTime.visibility = android.view.View.GONE |
| | | } |
| | | } else { |
| | | // userCard为空时,从cardInfo获取数据 |
| | | cardInfo?.let { info -> |
| | | // 从接口返回的数据中获取余额,转换为正确的类型 |
| | | val balance = info.balance ?: 0.0 |
| | | binding.tvCardBalance.text = MornyUtil.changeF2Y((balance * 100).toInt()) + "元" |
| | | |
| | | // 如果cardInfo中有最后使用时间相关字段,可以在这里设置 |
| | | // 暂时隐藏最后使用时间 |
| | | binding.llLastUseTime.visibility = android.view.View.GONE |
| | | } ?: run { |
| | | // 如果cardInfo也为空,显示默认值 |
| | | binding.tvCardBalance.text = "0.00元" |
| | | binding.llLastUseTime.visibility = android.view.View.GONE |
| | | } |
| | | } |
| | | |
| | | // 显示服务器数据 |
| | | cardInfo?.let { info -> |
| | | // 使用完整的用户编号 |
| | | binding.tvUserNumber.text = info.cardNum ?: cardNumber |
| | | |
| | | binding.tvUserName.text = info.userName ?: "未知" |
| | | binding.tvPhone.text = info.phone ?: "未绑定" |
| | | binding.tvIdCard.text = info.userCode ?: "未录入" // 使用userCode作为身份证号的替代 |
| | | |
| | | // 根据status字段显示状态 |
| | | val statusText = when (info.state) { |
| | | 1 -> "正常" |
| | | 2 -> "挂失" |
| | | 3 -> "锁定" |
| | | else -> "未知" |
| | | // 根据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) |
| | | } ?: run { |
| | | // 如果cardInfo为空,显示默认值 |
| | | binding.tvUserNumber.text = cardNumber |
| | | binding.tvUserName.text = "未知" |
| | | binding.tvPhone.text = "未绑定" |
| | | binding.tvIdCard.text = "未录入" |
| | | binding.tvCardStatus.text = "未知状态" |
| | | binding.tvCardStatus.setTextColor(android.graphics.Color.parseColor("#9E9E9E")) |
| | | } |
| | | } |
| | | |