左晓为主开发手持机充值管理机
zuoxiao
1 天以前 465c8abaa982fba6868a900d25316c70afc20fb7
generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -5,6 +5,7 @@
import androidx.lifecycle.lifecycleScope
import com.dayu.baselibrary.net.subscribers.SubscriberListener
import com.dayu.baselibrary.tools.nfc.NFCCallBack
import com.dayu.baselibrary.utils.MornyUtil
import com.dayu.baselibrary.utils.ToastUtil
import com.dayu.general.bean.card.ClearCard
import com.dayu.general.bean.card.UserCard
@@ -28,9 +29,16 @@
class NfcWreatActivity : BaseNfcActivity() {
    var binding: ActivityNfcWriteGeBinding? = null
    var cardType = ""
    var orderId = ""
    var cardAddr = ""
    var cardFee = 0
    // 充值相关金额
    private var rechargeAmount = 0.0
    private var bonusAmount = 0.0
    // 销卡相关信息
    private var refundAmount = 0.0
    private var cardBalance = 0.0
    //订单编号
    var orderNumber = ""
@@ -50,10 +58,19 @@
     */
    private fun getInitData() {
        cardType = intent?.getStringExtra("cardType") ?: ""
        orderId = intent?.getStringExtra("orderId") ?: ""
        cardAddr = intent?.getStringExtra("cardAddr") ?: ""
        operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1
        orderNumber = intent?.getStringExtra("orderNumber") ?: ""
        operationType = CardOperationType.fromCode(operationTypeCode)
        // 获取充值相关金额
        rechargeAmount = intent?.getDoubleExtra("rechargeAmount", 0.0) ?: 0.0
        bonusAmount = intent?.getDoubleExtra("bonusAmount", 0.0) ?: 0.0
        // 获取销卡相关信息
        refundAmount = intent?.getDoubleExtra("refundAmount", 0.0) ?: 0.0
        cardBalance = intent?.getDoubleExtra("cardBalance", 0.0) ?: 0.0
        if (intent?.hasExtra("cardFee") == true) {
            cardFee = intent?.getIntExtra("cardFee", 0) ?: 0
        }
@@ -68,7 +85,27 @@
        if (operationTypeCode != -1) {
            when (operationType) {
                CardOperationType.CleanCard -> {
                    binding?.cardData?.text = "清零卡写卡"
                    val textData = StringBuilder()
                    // 判断是否来自销卡操作(有退款金额或卡内余额信息)
                    if (refundAmount > 0 || cardBalance > 0) {
                        textData.append("销卡清零操作\n")
                        textData.append("卡地址:$cardAddr\n")
                        if (cardBalance > 0) {
                            textData.append("卡内余额:${String.format("%.2f", cardBalance)}元\n")
                        }
                        if (refundAmount > 0) {
                            textData.append("退款金额:${String.format("%.2f", refundAmount)}元")
                        } else {
                            textData.append("无退款金额")
                        }
                    } else {
                        textData.append("清零卡写卡")
                    }
                    binding?.cardData?.text = textData.toString()
                }
                CardOperationType.OpenCard -> {
@@ -78,16 +115,55 @@
                        textData.append("工本费:" + cardFee + "元\n")
                    }
                    if (userCard.balance != 0) {
                        textData.append("充值金额:" + userCard.balance + "元")
                        textData.append("充值金额:" + MornyUtil.changeF2Y(userCard.balance) + "元")
                    }
                    binding?.cardData?.text = textData.toString()
                }
                CardOperationType.CancelCard -> TODO()
                CardOperationType.Recharge -> {
                    var textData = StringBuilder()
                    textData.append("用户充值\n")
                    // 显示充值金额
                    if (rechargeAmount > 0) {
                        textData.append(
                            "充值金额:" + String.format(
                                "%.2f",
                                rechargeAmount
                            ) + "元\n"
                        )
                    }
                    // 显示赠送金额
                    if (bonusAmount > 0) {
                        textData.append("赠送金额:" + String.format("%.2f", bonusAmount) + "元\n")
                    }
                    // 显示总金额(写入卡内的总余额)
                    if (userCard.balance != 0) {
                        val totalBalanceInYuan = userCard.balance / 100.0 // 转换为元
                        textData.append(
                            "卡内总余额:" + String.format(
                                "%.2f",
                                totalBalanceInYuan
                            ) + "元"
                        )
                    }
                    binding?.cardData?.text = textData.toString()
                }
                CardOperationType.CancelCard -> {
                    var textData = StringBuilder()
                    textData.append("销卡\n")
                    textData.append("卡内余额:" + MornyUtil.changeF2Y(userCard.balance) + "元\n")
                    textData.append("退款金额:" + refundAmount + "元")
                    binding?.cardData?.text = textData.toString()
                }
                CardOperationType.CheckCard -> TODO()
                CardOperationType.DeductCard -> TODO()
                CardOperationType.Recharge -> TODO()
                CardOperationType.ReplaceCard -> TODO()
                null -> TODO()
            }
@@ -100,7 +176,7 @@
        val nfcReadHelper = NfcReadHelper.getInstance(intent, this)
        // 使用正常的getCardNumber()方法,它会自动关闭连接
        val cardNumber = nfcReadHelper.getCardNumber()
        if (cardNumber.isNotEmpty() && cardNumber == cardAddr) {
            val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this)
            when (operationType) {
@@ -110,11 +186,8 @@
                        // 确保Toast在主线程中调用
                        runOnUiThread {
                            if (success) {
                                postCardData(cardType, cardAddr)
                                // 写卡成功后更新数据库中的isCardWritten状态
                                updateCardWrittenStatus(cardAddr)
                                postCardData(cardAddr)
                                ToastUtil.show("写卡成功!")
                                // 处理写卡成功的情况
                            } else {
                                // 处理写卡失败的情况
                                ToastUtil.show(message)
@@ -129,9 +202,8 @@
                            // 确保Toast在主线程中调用
                            runOnUiThread {
                                if (flag) {
                                    // 写卡成功后更新数据库中的isCardWritten状态
                                    updateCardWrittenStatus(cardAddr)
                                    ToastUtil.show("写卡成功!")
                                    postCardData(cardAddr)
                                } else {
                                    ToastUtil.show("写卡失败: ${msg ?: "未知错误"}")
                                }
@@ -141,10 +213,40 @@
                }
                CardOperationType.CancelCard -> TODO()
                CardOperationType.Recharge -> {
                    nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack {
                        override fun isSusses(flag: Boolean, msg: String?) {
                            // 确保Toast在主线程中调用
                            runOnUiThread {
                                if (flag) {
                                    postCardData(cardAddr)
                                } else {
                                    ToastUtil.show("充值写卡失败: ${msg ?: "未知错误"}")
                                }
                            }
                        }
                    })
                }
                CardOperationType.CancelCard -> {
                    var userCard = UserCard()
                    userCard.cardType = "00";
                    nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack {
                        override fun isSusses(flag: Boolean, msg: String?) {
                            // 确保Toast在主线程中调用
                            runOnUiThread {
                                if (flag) {
                                    postCardData(cardAddr)
                                } else {
                                    ToastUtil.show("销卡写卡失败: ${msg ?: "未知错误"}")
                                }
                            }
                        }
                    })
                }
                CardOperationType.CheckCard -> TODO()
                CardOperationType.DeductCard -> TODO()
                CardOperationType.Recharge -> TODO()
                CardOperationType.ReplaceCard -> TODO()
                null -> TODO()
            }
@@ -169,21 +271,29 @@
                    val updatedCardRegistration = cardRegistration.copy(isCardWritten = true)
                    // 更新数据库记录
                    cardRegistrationDao.update(updatedCardRegistration)
                    // 在主线程中关闭Activity
                    runOnUiThread {
                        setResult(RESULT_OK)
                        finish()
                        Intent(this@NfcWreatActivity, CardWriteSuccessActivity::class.java).apply {
                            putExtra("cardNumber", cardNumber)
                            startActivity(this)
                        }
                    }
                }
            } catch (e: Exception) {
                CrashReport.postCatchedException(e)
                e.printStackTrace()
                ToastUtil.show("更新写卡状态失败: ${e.message}")
                runOnUiThread {
                    ToastUtil.show("更新写卡状态失败: ${e.message}")
                }
            }
        }
    }
    fun postCardData(cardType: String, cardAddr: String) {
        when (cardType) {
            CardCommon.CHECK_CARD -> {
                binding?.cardData?.text = "写用户卡"
            }
        }
    fun postCardData(cardAddr: String) {
        val map = mutableMapOf<String, Any>()
        if (cardAddr.isNotEmpty()) {
@@ -203,9 +313,7 @@
            object : SubscriberListener<BaseResponse<String>>() {
                override fun onNext(t: BaseResponse<String>) {
                    if (t.success) {
                        ToastUtil.show("写卡成功")
                        this@NfcWreatActivity.finish()
                        updateCardWrittenStatus(cardAddr)
                    } else {
                        // 处理搜索失败的情况
                        ToastUtil.show(t.msg)