左晓为主开发手持机充值管理机
generallibrary/src/main/java/com/dayu/general/activity/CardReadActivity.kt
@@ -122,6 +122,11 @@
                    handleUserCard(cardNumber, cardType, nfcAdapter)
                }
                "00" -> {
                    // 地区卡:显示卡片类型信息
                    handleUserCard(cardNumber, cardType, nfcAdapter)
                }
                else -> {
                    // 管理类卡:显示卡片类型信息
                    handleManagementCard(cardNumber, cardType)
@@ -138,33 +143,39 @@
     * 处理用户卡
     */
    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)
    }
    /**
@@ -222,7 +233,7 @@
    /**
     * 获取卡片详细信息(用户卡专用)
     */
    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(
@@ -257,7 +268,7 @@
        cardInfo: CardInfoResult?,
        cardNumber: String,
        cardType: String,
        userCard: UserCard
        userCard: UserCard?
    ) {
        // 隐藏读卡提示,显示信息区域
        binding.cardReadLL.visibility = android.view.View.GONE
@@ -266,34 +277,49 @@
        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 ->
            // 余额转换为元(原始数据可能是分)
            binding.tvCardBalance.text = MornyUtil.changeF2Y(card.balance.toInt()) + "元"
            // 使用完整的用户编号
            binding.tvUserNumber.text = cardInfo?.cardNum
        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作为身份证号的替代
@@ -308,6 +334,14 @@
            }
            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"))
        }
    }