左晓为主开发手持机充值管理机
zuoxiao
4 天以前 8b566e47b67d74d1915bc9f2c07204dd1a222197
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -34,7 +34,7 @@
    // 支付方式
    private var paymentMethod: String = "现金"
    // 支付方式ID
    private var paymentId: Long = 0
@@ -46,9 +46,12 @@
    // 用户ID
    private var userId: String = ""
    // 客户ID
    private var clientId: String = ""
    // 是否已读卡
    private var isReadCard: Boolean = false
    companion object {
        private const val TAG = "NewCard2Activity"
@@ -70,7 +73,7 @@
        val pageSize: Any?,
        val pageTotal: Any?
    )
    // 用户信息数据类
    data class ClientInfo(
        val clientId: String,
@@ -92,14 +95,14 @@
        // 获取传递的clientId参数
        clientId = intent.getStringExtra("clientId") ?: ""
        initView()
        // 如果有clientId,获取客户信息
        if (clientId.isNotEmpty()) {
            getClientInfo(clientId)
        }
        // 获取支付方式
        getPaymentMethods()
        initListener()
@@ -118,7 +121,7 @@
        binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher())
        binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher())
    }
    /**
     * 获取客户详细信息
     */
@@ -162,14 +165,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 +235,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)
            // 添加到RadioGroup
            binding.newCardPaymentMethod.addView(radioButton)
            // 默认选中第一个
            if (index == 0) {
                radioButton.isChecked = true
@@ -420,48 +423,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) {
                        // 保存卡物理ID
                        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
                            // 保存卡物理ID
                            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() {