左晓为主开发手持机充值管理机
zuoxiao
2 天以前 87e5604ad04c0b7aaacf3d52bae85e62d308cb6d
generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -13,6 +13,8 @@
import com.dayu.general.bean.card.ClearCard
import com.dayu.general.bean.card.DebugCard
import com.dayu.general.bean.card.UserCard
import com.dayu.general.bean.net.CardInfoResult
import com.dayu.general.bean.net.ClientInfo
import com.dayu.general.dao.BaseDaoSingleton
import com.dayu.general.databinding.ActivityNfcWriteGeBinding
import com.dayu.general.net.ApiManager
@@ -98,6 +100,10 @@
    /** 项目号(1-255) */
    private var projectNumber: String = ""
    private var cardInfo: CardInfoResult? = null
    private var clientInfo: ClientInfo? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityNfcWriteGeBinding.inflate(layoutInflater)
@@ -116,6 +122,8 @@
        operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1
        orderNumber = intent?.getStringExtra("orderNumber") ?: ""
        operationType = CardOperationType.fromCode(operationTypeCode)
        cardInfo = intent?.getSerializableExtra("cardInfo") as? CardInfoResult
        clientInfo = intent?.getSerializableExtra("clientInfo") as? ClientInfo
        // 获取充值相关金额
        rechargeAmount = intent?.getDoubleExtra("rechargeAmount", 0.0) ?: 0.0
@@ -254,8 +262,9 @@
                // 返还操作显示信息
                var textData = StringBuilder()
                textData.append("返还\n")
                textData.append("卡内余额:" + MornyUtil.changeF2Y(userCard.balance) + "元\n")
                textData.append("返还金额:" + returnAmount + "元")
                textData.append("返还金额:" + returnAmount + "元\n")
                textData.append("返还后卡内余额:" + MornyUtil.changeF2Y(userCard.balance) + "元\n")
                binding?.cardData?.text = textData.toString()
            }
@@ -263,8 +272,9 @@
                // 补扣操作显示信息
                var textData = StringBuilder()
                textData.append("补扣\n")
                textData.append("卡内余额:" + MornyUtil.changeF2Y(userCard.balance) + "元\n")
                textData.append("补扣金额:" + deductAmount + "元")
                textData.append("补扣金额:" + deductAmount + "元\n")
                textData.append("补扣后卡内余额:" + MornyUtil.changeF2Y(userCard.balance) + "元\n")
                binding?.cardData?.text = textData.toString()
            }
@@ -499,14 +509,14 @@
                        object : NFCCallBack {
                            override fun isSusses(flag: Boolean, msg: String?) {
                                // 确保Toast在主线程中调用
                                                            runOnUiThread {
                                if (flag) {
                                    // 检查卡写卡成功,更新写卡状态
                                    updateCardWrittenStatus(cardAddr)
                                } else {
                                    ToastUtil.show("检查卡写卡失败: ${msg ?: "未知错误"}")
                                runOnUiThread {
                                    if (flag) {
                                        // 检查卡写卡成功,更新写卡状态
                                        updateCardWrittenStatus(cardAddr)
                                    } else {
                                        ToastUtil.show("检查卡写卡失败: ${msg ?: "未知错误"}")
                                    }
                                }
                            }
                            }
                        })
                }
@@ -514,7 +524,7 @@
                CardOperationType.RegionCardMake -> {
                    // 区域表号卡写卡逻辑(功能卡,无需写入用户数据)
                    var areaCard = AreaCard()
                    areaCard.areaNumber = regionNumber.toInt()
                    areaCard.areaNumber = regionNumber
                    areaCard.projectCode = projectNumber.toInt()
                    nfcWreatHelper.writeDataAsync(
                        areaCard.getZeroBytes(),
@@ -523,14 +533,14 @@
                        object : NFCCallBack {
                            override fun isSusses(flag: Boolean, msg: String?) {
                                // 确保Toast在主线程中调用
                                                            runOnUiThread {
                                if (flag) {
                                    // 区域表号卡写卡成功,更新写卡状态
                                    updateCardWrittenStatus(cardAddr)
                                } else {
                                    ToastUtil.show("区域表号卡写卡失败: ${msg ?: "未知错误"}")
                                runOnUiThread {
                                    if (flag) {
                                        // 区域表号卡写卡成功,更新写卡状态
                                        updateCardWrittenStatus(cardAddr)
                                    } else {
                                        ToastUtil.show("区域表号卡写卡失败: ${msg ?: "未知错误"}")
                                    }
                                }
                            }
                            }
                        })
                }
@@ -546,14 +556,14 @@
                        object : NFCCallBack {
                            override fun isSusses(flag: Boolean, msg: String?) {
                                // 确保Toast在主线程中调用
                                                            runOnUiThread {
                                if (flag) {
                                    // 调试卡写卡成功,更新写卡状态
                                    updateCardWrittenStatus(cardAddr)
                                } else {
                                    ToastUtil.show("调试卡写卡失败: ${msg ?: "未知错误"}")
                                runOnUiThread {
                                    if (flag) {
                                        // 调试卡写卡成功,更新写卡状态
                                        updateCardWrittenStatus(cardAddr)
                                    } else {
                                        ToastUtil.show("调试卡写卡失败: ${msg ?: "未知错误"}")
                                    }
                                }
                            }
                            }
                        })
                }
@@ -594,7 +604,7 @@
    /**
     * 更新本地数据库中的写卡状态
     * 将CardRegistrationBean中的isCardWritten状态设置为true
     * 根据操作类型判断是更新ManagerCardBean还是CardRegistrationBean的isCardWritten状态为true
     * 然后跳转到写卡成功界面,并通知MainActivity调用postCardData
     *
     * @param cardNumber 卡号
@@ -602,37 +612,91 @@
    private fun updateCardWrittenStatus(cardNumber: String) {
        lifecycleScope.launch {
            try {
                val cardRegistrationDao = BaseDaoSingleton.getInstance(this@NfcWreatActivity)
                    .cardRegistrationDao()
                val baseDaoSingleton = BaseDaoSingleton.getInstance(this@NfcWreatActivity)
                // 根据订单号查找CardRegistrationBean记录
                val cardRegistration = cardRegistrationDao.getByOrderId(orderNumber)
                // 根据操作类型判断是管理卡还是用户卡操作
                val isManagerCardOperation = operationTypeCode in 100..108
                if (cardRegistration != null) {
                    // 创建更新后的CardRegistrationBean对象,将isCardWritten设置为true
                    val updatedCardRegistration = cardRegistration.copy(isCardWritten = true)
                    // 更新数据库记录
                    cardRegistrationDao.update(updatedCardRegistration)
                var updateSuccess = false
                    // 在主线程中关闭Activity并跳转到成功页面
                    runOnUiThread {
                        setResult(RESULT_OK)
                        finish()
                        // 跳转到写卡成功界面
                        Intent(this@NfcWreatActivity, CardWriteSuccessActivity::class.java).apply {
                            putExtra("cardNumber", cardNumber)
                            if (::userCard.isInitialized) {
                                putExtra("userCard", userCard)
                            }
                            putExtra("operationTypeCode", operationTypeCode)
                            startActivity(this)
                        }
                        // 通知MainActivity调用postCardData
                        notifyMainActivityToPostCardData(cardNumber)
                if (isManagerCardOperation) {
                    // 管理卡制作操作类型,查询和更新ManagerCardBean
                    val managerCardDao = baseDaoSingleton.managerCardDao()
                    val managerCard = managerCardDao.getByOrderId(orderNumber)
                    if (managerCard != null) {
                        val updatedManagerCard = managerCard.copy(isCardWritten = true)
                        managerCardDao.update(updatedManagerCard)
                        updateSuccess = true
                    }
                } else {
                    // 用户卡操作类型,查询和更新CardRegistrationBean
                    val cardRegistrationDao = baseDaoSingleton.cardRegistrationDao()
                    val cardRegistration = cardRegistrationDao.getByOrderId(orderNumber)
                    if (cardRegistration != null) {
                        val updatedCardRegistration = cardRegistration.copy(isCardWritten = true)
                        cardRegistrationDao.update(updatedCardRegistration)
                        updateSuccess = true
                    }
                }
                // 无论是否找到记录,都跳转到成功界面
                runOnUiThread {
                    setResult(RESULT_OK)
                    finish()
                    // 跳转到写卡成功界面
                    Intent(this@NfcWreatActivity, CardWriteSuccessActivity::class.java).apply {
                        putExtra("cardNumber", cardNumber)
                        putExtra("cardAddr", cardAddr)
                        putExtra("operationTypeCode", operationTypeCode)
                        putExtra("orderNumber", orderNumber)
                        //开卡相关参数
                        putExtra("cardFee", cardFee)
                        // 传递充值相关参数
                        putExtra("rechargeAmount", rechargeAmount)
                        putExtra("bonusAmount", bonusAmount)
                        // 传递销卡相关参数
                        putExtra("refundAmount", refundAmount)
                        putExtra("cardBalance", cardBalance)
                        // 传递返还相关参数
                        putExtra("returnAmount", returnAmount)
                        // 传递补扣相关参数
                        putExtra("deductAmount", deductAmount)
                        // 传递补卡相关参数
                        putExtra("cardCost", cardCost)
                        putExtra("reissueAmount", reissueAmount)
                        // 传递用户卡对象
                        if (::userCard.isInitialized) {
                            putExtra("userCard", userCard)
                        }
                        // 传递卡片信息对象
                        cardInfo?.let {
                            putExtra("cardInfo", it)
                        }
                        // 传递客户信息对象
                        clientInfo?.let {
                            putExtra("clientInfo", it)
                        }
                        startActivity(this)
                    }
                    // 通知MainActivity调用postCardData
                    notifyMainActivityToPostCardData(cardNumber)
                }
            } catch (e: Exception) {
                // 记录异常信息
                CrashReport.postCatchedException(e)