左晓为主开发手持机充值管理机
zuojincheng
2 天以前 d773ab0295feba24ae4fc14f61e8aa310e40f4ba
refactor(nfc): 优化写卡流程和状态更新

- 修改 NewCard2Activity 中的 isCardWritten 初始值为 false
- 在 NfcWreatActivity 中实现写卡成功后更新数据库状态- 移除 NfcWreatHelper 中的冗余函数
3个文件已修改
70 ■■■■■ 已修改文件
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -347,7 +347,7 @@
                            remark = binding.newCardRemark.text.toString(),
                            paymentMethod = paymentId.toInt(),
                            isReported = true,
                            isCardWritten = true,
                            isCardWritten = false, // 初始设置为false,写卡成功后再更新为true
                            operatorId = orderId,
                            )
generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -2,7 +2,9 @@
import android.content.Intent
import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import com.dayu.baselibrary.net.subscribers.SubscriberListener
import com.dayu.baselibrary.tools.nfc.NFCCallBack
import com.dayu.baselibrary.utils.ToastUtil
import com.dayu.general.bean.card.ClearCard
import com.dayu.general.bean.card.UserCard
@@ -12,6 +14,9 @@
import com.dayu.general.net.BaseResponse
import com.dayu.general.tool.NfcReadHelper
import com.dayu.general.tool.NfcWreatHelper
import com.dayu.general.dao.BaseDaoSingleton
import com.tencent.bugly.crashreport.CrashReport
import kotlinx.coroutines.launch
/**
 * @author: zuo
@@ -68,6 +73,8 @@
                    nfcWreatHelper.writeData(clearCard.getZeroBytes(), 7, 0) { success, message ->
                        if (success) {
                            postCardData(cardType, cardAddr, "")
                            // 写卡成功后更新数据库中的isCardWritten状态
                            updateCardWrittenStatus(cardAddr)
                            ToastUtil.show("写卡成功!")
                            // 处理写卡成功的情况
                        } else {
@@ -79,7 +86,17 @@
                CardCommon.USER_CARD_TYPE_1 -> {
                    binding?.cardData?.text = "写用户卡"
                    nfcWreatHelper.writeUserData(userCard)
                    nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack {
                        override fun isSusses(flag: Boolean, msg: String?) {
                            if (flag) {
                                // 写卡成功后更新数据库中的isCardWritten状态
                                updateCardWrittenStatus(cardAddr)
                                ToastUtil.show("写卡成功!")
                            } else {
                                ToastUtil.show("写卡失败: ${msg ?: "未知错误"}")
                            }
                        }
                    })
                }
            }
@@ -88,6 +105,31 @@
        }
    }
    /**
     * 更新CardRegistrationBean中的isCardWritten状态为true
     */
    private fun updateCardWrittenStatus(cardNumber: String) {
        lifecycleScope.launch {
            try {
                val cardRegistrationDao = BaseDaoSingleton.getInstance(this@NfcWreatActivity)
                    .cardRegistrationDao()
                // 根据卡号查找CardRegistrationBean记录
                val cardRegistration = cardRegistrationDao.getByCardNumber(cardNumber)
                if (cardRegistration != null) {
                    // 创建更新后的CardRegistrationBean对象,将isCardWritten设置为true
                    val updatedCardRegistration = cardRegistration.copy(isCardWritten = true)
                    // 更新数据库记录
                    cardRegistrationDao.update(updatedCardRegistration)
                }
            } catch (e: Exception) {
                CrashReport.postCatchedException(e)
                e.printStackTrace()
                ToastUtil.show("更新写卡状态失败: ${e.message}")
            }
        }
    }
    fun postCardData(cardType: String, cardAddr: String, remark: String) {
        when (cardType) {
            CardCommon.CHECK_CARD -> {
generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt
@@ -119,31 +119,7 @@
        return false
    }
    /**
     * 写卡(异步)
     *
     * @param userCard 用户卡内容
     * @param callback 操作结果回调
     */
    fun writeUserDataAsync(userCard: UserCard, callback: (Boolean) -> Unit): Disposable {
        showLoading()
        val disposable = Observable.fromCallable {
            writeUserData(userCard)
        }
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({ result ->
            hideLoading()
            callback(result)
        }, { error ->
            hideLoading()
            error.printStackTrace()
            callback(false)
        })
        
        compositeDisposable.add(disposable)
        return disposable
    }
    /**
     * 写卡(异步)