左晓为主开发手持机充值管理机
feat(general): 优化写卡成功界面并添加开卡功能- 重新设计写卡成功界面布局,增加滚动视图以支持长文本显示
- 添加开卡功能相关的UI和逻辑,包括工本费和充值金额的展示- 增加用户姓名和卡片信息的显示
- 优化打印凭证的内容和格式
-调整NFC连接逻辑,提高连接成功率
11个文件已修改
2个文件已添加
590 ■■■■■ 已修改文件
baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt 307 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/res/drawable/bg_button_outline.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/res/drawable/bg_button_outline_selector.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
generallibrary/src/main/res/layout/activity_card_write_success.xml 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java
@@ -356,33 +356,8 @@
            }
            try {
                // 连接NFC - 确保总是建立连接,增加重试机制
                int retryCount = 3;
                boolean connected = false;
                while (retryCount > 0 && !connected) {
                    try {
                        if (!mfc.isConnected()) {
                            mfc.connect();
                        }
                        connected = mfc.isConnected();
                        if (!connected) {
                            Thread.sleep(100); // 短暂等待后重试
                            retryCount--;
                        }
                    } catch (Exception e) {
                        retryCount--;
                        if (retryCount <= 0) {
                            throw e;
                        }
                        Thread.sleep(100);
                    }
                }
                if (!connected) {
                    if (callBack != null) {
                        callBack.isSusses(false, "NFC连接失败,请重新靠近卡片");
                    }
                    return false;
                if (isConnect) {
                    mfc.connect();
                }
                for (int i = 0; i < passWord.size(); i++) {
generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
@@ -389,6 +389,7 @@
            putExtra("orderNumber", cancelResult.orderNo)
            putExtra("refundAmount", refundAmount)
            putExtra("userCard", userCard)
            putExtra("cardInfo", cardInfo)
            // 传递当前卡内余额信息
            cardInfo?.let { info ->
                putExtra("cardBalance", info.balance ?: 0.0)
generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt
@@ -384,6 +384,7 @@
            putExtra("orderNumber", deductResult.orderNo)
            putExtra("deductAmount", deductAmount)
            putExtra("userCard", updatedUserCard as java.io.Serializable)
            putExtra("cardInfo", cardInfo)
        }
        startActivity(intent)
        finish()
generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt
@@ -376,6 +376,7 @@
            putExtra("paymentMethod", paymentMethod) // 传递支付方式
            putExtra("paymentId", paymentId) // 传递支付方式ID
            putExtra("userCard", updatedUserCard as java.io.Serializable)
            putExtra("cardInfo", cardInfo)
        }
        startActivity(intent)
        finish()
generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt
@@ -385,6 +385,7 @@
            putExtra("orderNumber", returnResult.orderNo)
            putExtra("returnAmount", returnAmount)
            putExtra("userCard", updatedUserCard as java.io.Serializable)
            putExtra("cardInfo", cardInfo)
        }
        startActivity(intent)
        finish()
generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
@@ -6,6 +6,7 @@
import com.dayu.baselibrary.utils.MornyUtil
import com.dayu.general.BaseApplication
import com.dayu.general.bean.card.UserCard
import com.dayu.general.bean.net.CardInfoResult
import com.dayu.general.databinding.ActivityCardWriteSuccessBinding
import com.dayu.general.tool.CardOperationType
@@ -22,11 +23,12 @@
    private var operationTypeCode: Int = -1
    private var userCard: UserCard? = null
    private var orderNumber: String? = null
    private var cardInfo: CardInfoResult? = null
    // 充值相关参数
    private var rechargeAmount = 0.0
    private var bonusAmount = 0.0
    // 其他操作相关参数
    private var refundAmount = 0.0
    private var cardBalance = 0.0
@@ -34,6 +36,7 @@
    private var deductAmount = 0.0
    private var cardCost = 0.0
    private var reissueAmount = 0.0
    private var cardFee = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
@@ -45,11 +48,13 @@
        cardAddr = intent.getStringExtra("cardAddr")
        operationTypeCode = intent.getIntExtra("operationTypeCode", -1)
        orderNumber = intent.getStringExtra("orderNumber")
        cardFee = intent.getIntExtra("cardFee", 0);
        // 获取充值相关参数
        rechargeAmount = intent.getDoubleExtra("rechargeAmount", 0.0)
        bonusAmount = intent.getDoubleExtra("bonusAmount", 0.0)
        // 获取其他操作相关参数
        refundAmount = intent.getDoubleExtra("refundAmount", 0.0)
        cardBalance = intent.getDoubleExtra("cardBalance", 0.0)
@@ -57,9 +62,13 @@
        deductAmount = intent.getDoubleExtra("deductAmount", 0.0)
        cardCost = intent.getDoubleExtra("cardCost", 0.0)
        reissueAmount = intent.getDoubleExtra("reissueAmount", 0.0)
        if (intent.hasExtra("userCard")) {
            userCard = intent.getSerializableExtra("userCard") as UserCard
        }
        if (intent.hasExtra("cardInfo")) {
            cardInfo = intent.getSerializableExtra("cardInfo") as CardInfoResult
        }
        initView()
@@ -84,7 +93,7 @@
                    "卡片已成功销卡并清除内容\n卡号:$cardNumber\n该卡片将无法再次使用"
                }
                binding.successMessage.text = message
                // 销卡成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
@@ -105,7 +114,7 @@
                    "卡片返还操作已成功完成\n卡号:$cardNumber\n卡内余额已更新"
                }
                binding.successMessage.text = message
                // 返还成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
@@ -126,7 +135,7 @@
                    "卡片补扣操作已成功完成\n卡号:$cardNumber\n卡内余额已更新"
                }
                binding.successMessage.text = message
                // 补扣成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
@@ -152,22 +161,36 @@
            CardOperationType.Recharge -> {
                binding.titleBar.setCenterText("充值成功")
                binding.successTitle.text = "充值成功"
                val messageBuilder = StringBuilder()
                messageBuilder.append("充值操作已成功完成\n")
                if (rechargeAmount > 0) {
                    messageBuilder.append("充值金额:${String.format("%.2f", rechargeAmount)}元\n")
                }
                if (bonusAmount > 0) {
                    messageBuilder.append("赠送金额:${String.format("%.2f", bonusAmount)}元\n")
                }
                messageBuilder.append("卡内余额:${MornyUtil.changeF2Y(userCard?.balance ?: 0)}元")
                binding.successMessage.text = messageBuilder.toString()
                // 充值成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
                }
            }
            CardOperationType.OpenCard -> {
                binding.titleBar.setCenterText("开卡成功")
                binding.successTitle.text = "开卡成功"
                val messageBuilder = StringBuilder()
                if (rechargeAmount > 0) {
                    messageBuilder.append("充值金额:${String.format("%.2f", rechargeAmount)}元\n")
                }
                messageBuilder.append("卡内余额:${MornyUtil.changeF2Y(userCard?.balance ?: 0)}元")
                // 充值成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
@@ -193,6 +216,13 @@
            finish()
        }
        // 设置再次打印按钮点击监听器
        binding.btnReprint.setOnClickListener {
            userCard?.let { card ->
                doPrint(card)
            }
        }
        // 设置标题栏返回按钮
        binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) {
            finish()
@@ -208,206 +238,341 @@
        try {
            // 创建打印数据列表
            val data: MutableList<String> = ArrayList()
            // 根据操作类型设置不同的打印内容
            val operationType = CardOperationType.fromCode(operationTypeCode)
            when (operationType) {
                CardOperationType.Recharge -> {
                    // 充值打印内容
                    data.add("*****************************")
                    data.add("        充值凭证")
                    data.add("           充值凭证")
                    data.add("*****************************")
                    // 添加用户编号(从UserCard中获取)
                    if (!userCard.userCode.isNullOrEmpty()) {
                        data.add("用户编号:${userCard.userCode}")
                    // 添加用户名(从CardInfo中获取)
                    cardInfo?.userName?.let { userName ->
                        if (userName.isNotEmpty()) {
                            data.add("用户姓名:$userName")
                        }
                    }
                    // 添加卡地址
                    val cardAddress = cardNumber ?: cardAddr
                    if (!cardAddress.isNullOrEmpty()) {
                        data.add("卡 地 址:$cardAddress")
                    }
                    // 添加用户编号(从UserCard中获取)
                    if (!userCard.userCode.isNullOrEmpty()) {
                        data.add("用户编号:${userCard.getMyUserCode()}")
                    }
                    // 添加充值金额
                    if (rechargeAmount > 0) {
                        data.add("充值金额:${String.format("%.2f", rechargeAmount)} 元")
                    }
                    // 添加赠送金额
                    if (bonusAmount > 0) {
                        data.add("赠送金额:${String.format("%.2f", bonusAmount)} 元")
                    }
                    // 添加充值后余额
                    data.add("充值后余额:${MornyUtil.changeF2Y(userCard.balance)} 元")
                    // 添加日期信息
                    data.add("日   期:${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
                    // 添加订单号
                    if (!orderNumber.isNullOrEmpty()) {
                        data.add("订单号:$orderNumber")
                    }
                    // 添加设备操作员信息
                    data.add("设备操作员:${BaseApplication.userName}")
                    // 添加日期信息
                    data.add(
                        "日   期:${
                            DateUtil.dateToStamp(
                                System.currentTimeMillis(),
                                DateUtil.type2
                            )
                        }"
                    )
                    data.add("*****************************")
                }
                CardOperationType.ReplaceCard -> {
                    // 补卡打印内容
                    data.add("*****************************")
                    data.add("        补卡凭证")
                    data.add("*****************************")
                    // 添加用户名(从CardInfo中获取)
                    cardInfo?.userName?.let { userName ->
                        if (userName.isNotEmpty()) {
                            data.add("用户姓名:$userName")
                        }
                    }
                    val cardAddress = cardNumber ?: cardAddr
                    if (!cardAddress.isNullOrEmpty()) {
                        data.add("卡 地 址:$cardAddress")
                    }
                    if (!userCard.userCode.isNullOrEmpty()) {
                        data.add("用户编号:${userCard.getMyUserCode()}")
                    }
                    if (cardCost > 0) {
                        data.add("工 本 费:${String.format("%.2f", cardCost)} 元")
                    }
                    if (reissueAmount > 0) {
                        data.add("返还金额:${String.format("%.2f", reissueAmount)} 元")
                    }
                    data.add("卡内余额:${MornyUtil.changeF2Y(userCard.balance)} 元")
                    data.add("日   期:${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
                    if (!orderNumber.isNullOrEmpty()) {
                        data.add("订单号:$orderNumber")
                    }
                    data.add("设备操作员:${BaseApplication.userName}")
                    data.add(
                        "日   期:${
                            DateUtil.dateToStamp(
                                System.currentTimeMillis(),
                                DateUtil.type2
                            )
                        }"
                    )
                    data.add("*****************************")
                }
                CardOperationType.CancelCard -> {
                    // 销卡打印内容
                    data.add("*****************************")
                    data.add("        销卡凭证")
                    data.add("*****************************")
                    // 添加用户名(从CardInfo中获取)
                    cardInfo?.userName?.let { userName ->
                        if (userName.isNotEmpty()) {
                            data.add("用户姓名:$userName")
                        }
                    }
                    val cardAddress = cardNumber ?: cardAddr
                    if (!cardAddress.isNullOrEmpty()) {
                        data.add("卡 地 址:$cardAddress")
                    }
                    if (!userCard.userCode.isNullOrEmpty()) {
                        data.add("用户编号:${userCard.getMyUserCode()}")
                    }
                    if (refundAmount > 0) {
                        data.add("退款金额:${String.format("%.2f", refundAmount)} 元")
                    }
                    data.add("原卡余额:${String.format("%.2f", cardBalance)} 元")
                    data.add("日   期:${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
                    if (!orderNumber.isNullOrEmpty()) {
                        data.add("订单号:$orderNumber")
                    }
                    data.add("设备操作员:${BaseApplication.userName}")
                    data.add(
                        "日   期:${
                            DateUtil.dateToStamp(
                                System.currentTimeMillis(),
                                DateUtil.type2
                            )
                        }"
                    )
                    data.add("*****************************")
                }
                 CardOperationType.SUPPLEMENT -> {
                CardOperationType.SUPPLEMENT -> {
                    // 返还打印内容
                    data.add("*****************************")
                    data.add("        返还凭证")
                    data.add("*****************************")
                    // 添加用户名(从CardInfo中获取)
                    cardInfo?.userName?.let { userName ->
                        if (userName.isNotEmpty()) {
                            data.add("用户姓名:$userName")
                        }
                    }
                    val cardAddress = cardNumber ?: cardAddr
                    if (!cardAddress.isNullOrEmpty()) {
                        data.add("卡 地 址:$cardAddress")
                    }
                    if (!userCard.userCode.isNullOrEmpty()) {
                        data.add("用户编号:${userCard.getMyUserCode()}")
                    }
                    if (returnAmount > 0) {
                        data.add("返还金额:${String.format("%.2f", returnAmount)} 元")
                    }
                    data.add("卡内余额:${MornyUtil.changeF2Y(userCard.balance)} 元")
                    data.add("日   期:${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
                    if (!orderNumber.isNullOrEmpty()) {
                        data.add("订单号:$orderNumber")
                    }
                    data.add("设备操作员:${BaseApplication.userName}")
                    data.add(
                        "日   期:${
                            DateUtil.dateToStamp(
                                System.currentTimeMillis(),
                                DateUtil.type2
                            )
                        }"
                    )
                    data.add("*****************************")
                }
                CardOperationType.DeductCard -> {
                    // 补扣打印内容
                    data.add("*****************************")
                    data.add("        补扣凭证")
                    data.add("*****************************")
                    // 添加用户名(从CardInfo中获取)
                    cardInfo?.userName?.let { userName ->
                        if (userName.isNotEmpty()) {
                            data.add("用户姓名:$userName")
                        }
                    }
                    val cardAddress = cardNumber ?: cardAddr
                    if (!cardAddress.isNullOrEmpty()) {
                        data.add("卡 地 址:$cardAddress")
                    }
                    if (!userCard.userCode.isNullOrEmpty()) {
                        data.add("用户编号:${userCard.getMyUserCode()}")
                    }
                    if (deductAmount > 0) {
                        data.add("补扣金额:${String.format("%.2f", deductAmount)} 元")
                    }
                    data.add("卡内余额:${MornyUtil.changeF2Y(userCard.balance)} 元")
                    data.add("日   期:${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
                    if (!orderNumber.isNullOrEmpty()) {
                        data.add("订单号:$orderNumber")
                    }
                    data.add("设备操作员:${BaseApplication.userName}")
                    data.add(
                        "日   期:${
                            DateUtil.dateToStamp(
                                System.currentTimeMillis(),
                                DateUtil.type2
                            )
                        }"
                    )
                    data.add("*****************************")
                }
                CardOperationType.OpenCard -> {
                    data.add("*****************************")
                    data.add("           开卡凭证")
                    data.add("*****************************")
                    // 添加用户名(从CardInfo中获取)
                    cardInfo?.userName?.let { userName ->
                        if (userName.isNotEmpty()) {
                            data.add("用户姓名:$userName")
                        }
                    }
                    // 添加卡地址
                    val cardAddress = cardNumber ?: cardAddr
                    if (!cardAddress.isNullOrEmpty()) {
                        data.add("卡 地 址:$cardAddress")
                    }
                    // 添加用户编号(从UserCard中获取)
                    if (!userCard.userCode.isNullOrEmpty()) {
                        data.add("用户编号:${userCard.getMyUserCode()}")
                    }
                    // 添加充值金额
                    if (rechargeAmount > 0) {
                        data.add("充值金额:${String.format("%.2f", rechargeAmount)} 元")
                        // 添加充值后余额
                        data.add("充值后余额:${MornyUtil.changeF2Y(userCard.balance)} 元")
                    }
                    // 添加赠送金额
                    if (cardFee > 0) {
                        data.add("工本费:" + MornyUtil.changeF2Y(cardFee) + "元")
                    }
                    // 添加订单号
                    if (!orderNumber.isNullOrEmpty()) {
                        data.add("订单号:$orderNumber")
                    }
                    // 添加设备操作员信息
                    data.add("设备操作员:${BaseApplication.userName}")
                    // 添加日期信息
                    data.add(
                        "日   期:${
                            DateUtil.dateToStamp(
                                System.currentTimeMillis(),
                                DateUtil.type2
                            )
                        }"
                    )
                    data.add("*****************************")
                }
                else -> {
                    // 其他操作的通用打印内容
                    data.add("*****************************")
                    data.add("        操作凭证")
                    data.add("*****************************")
                    // 添加用户名(从CardInfo中获取)
                    cardInfo?.userName?.let { userName ->
                        if (userName.isNotEmpty()) {
                            data.add("用户姓名:$userName")
                        }
                    }
                    val cardAddress = cardNumber ?: cardAddr
                    if (!cardAddress.isNullOrEmpty()) {
                        data.add("卡 地 址:$cardAddress")
                    }
                    data.add("操作类型:${operationType?.description ?: "未知操作"}")
                    data.add("日   期:${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}")
                    data.add("设备操作员:${BaseApplication.userName}")
                    data.add(
                        "日   期:${
                            DateUtil.dateToStamp(
                                System.currentTimeMillis(),
                                DateUtil.type2
                            )
                        }"
                    )
                    data.add("*****************************")
                }
            }
            // 设置打印字体大小
            val size = 26f
            // 执行打印操作
            PrintAdater.printText(data, size, true, false)
        } catch (e: Exception) {
            // 打印异常信息
            e.printStackTrace()
generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt
@@ -206,7 +206,7 @@
            // 异步修改密码
            nfcHelper.changePSAsync(
                keyList,
                true,  // 修改为true,确保建立NFC连接
                false,  // 修改为true,确保建立NFC连接
                true
            ) { success: Boolean, msg: String? ->
                if (success) {
@@ -228,12 +228,6 @@
                    ).show()
                }
            }
        }
        // 创建密钥列表的副本,避免ConcurrentModificationException
        // 处理NFC读取结果
        NfcReadHelper.getInstance(intent, this).getCardNumber().let { cardNumber ->
        }
    }
generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -470,6 +470,7 @@
                                    putExtra("userCard", userCard)
                                    putExtra("operationTypeCode", CardOperationType.OpenCard.code)
                                    putExtra("cardFee", cardFee)
                                    startActivityForResult(this, REQUEST_CODE_NFC_WRITE)
                                }
                            } catch (e: Exception) {
generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -13,6 +13,7 @@
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.dao.BaseDaoSingleton
import com.dayu.general.databinding.ActivityNfcWriteGeBinding
import com.dayu.general.net.ApiManager
@@ -98,6 +99,8 @@
    /** 项目号(1-255) */
    private var projectNumber: String = ""
    private var cardInfo: CardInfoResult? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityNfcWriteGeBinding.inflate(layoutInflater)
@@ -116,6 +119,7 @@
        operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1
        orderNumber = intent?.getStringExtra("orderNumber") ?: ""
        operationType = CardOperationType.fromCode(operationTypeCode)
        cardInfo = intent?.getSerializableExtra("cardInfo") as? CardInfoResult
        // 获取充值相关金额
        rechargeAmount = intent?.getDoubleExtra("rechargeAmount", 0.0) ?: 0.0
@@ -501,14 +505,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 ?: "未知错误"}")
                                    }
                                }
                            }
                            }
                        })
                }
@@ -525,14 +529,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 ?: "未知错误"}")
                                    }
                                }
                            }
                            }
                        })
                }
@@ -548,14 +552,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 ?: "未知错误"}")
                                    }
                                }
                            }
                            }
                        })
                }
@@ -605,17 +609,17 @@
        lifecycleScope.launch {
            try {
                val baseDaoSingleton = BaseDaoSingleton.getInstance(this@NfcWreatActivity)
                // 根据操作类型判断是管理卡还是用户卡操作
                val isManagerCardOperation = operationTypeCode in 100..108
                var updateSuccess = false
                if (isManagerCardOperation) {
                    // 管理卡制作操作类型,查询和更新ManagerCardBean
                    val managerCardDao = baseDaoSingleton.managerCardDao()
                    val managerCard = managerCardDao.getByOrderId(orderNumber)
                    if (managerCard != null) {
                        val updatedManagerCard = managerCard.copy(isCardWritten = true)
                        managerCardDao.update(updatedManagerCard)
@@ -625,7 +629,7 @@
                    // 用户卡操作类型,查询和更新CardRegistrationBean
                    val cardRegistrationDao = baseDaoSingleton.cardRegistrationDao()
                    val cardRegistration = cardRegistrationDao.getByOrderId(orderNumber)
                    if (cardRegistration != null) {
                        val updatedCardRegistration = cardRegistration.copy(isCardWritten = true)
                        cardRegistrationDao.update(updatedCardRegistration)
@@ -637,21 +641,54 @@
                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)
                        }
                        putExtra("operationTypeCode", operationTypeCode)
                        // 传递卡片信息对象
                        cardInfo?.let {
                            putExtra("cardInfo", it)
                        }
                        startActivity(this)
                    }
                    // 通知MainActivity调用postCardData
                    notifyMainActivityToPostCardData(cardNumber)
                }
            } catch (e: Exception) {
                // 记录异常信息
                CrashReport.postCatchedException(e)
generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt
@@ -555,6 +555,8 @@
                putExtra("userCard", cardToWrite)
                putExtra("rechargeAmount", rechargeAmount) // 传递充值金额
                putExtra("bonusAmount", bonusAmount) // 传递赠送金额
                putExtra("cardInfo", cardInfo)
                putExtra(EXTRA_CARD_INFO, cardInfo)
            }
            startActivity(intent)
            finish()
generallibrary/src/main/res/drawable/bg_button_outline.xml
New file
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/transparent" />
    <stroke
        android:width="1.5dp"
        android:color="#2196F3" />
    <corners android:radius="8dp" />
</shape>
generallibrary/src/main/res/drawable/bg_button_outline_selector.xml
New file
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="#E3F2FD" />
            <stroke
                android:width="1.5dp"
                android:color="#2196F3" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="1.5dp"
                android:color="#2196F3" />
            <corners android:radius="8dp" />
        </shape>
    </item>
</selector>
generallibrary/src/main/res/layout/activity_card_write_success.xml
@@ -22,67 +22,93 @@
        android:layout_marginStart="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="80dp"
        android:layout_marginBottom="24dp"
        app:cardBackgroundColor="@android:color/white"
        app:cardCornerRadius="12dp"
        app:cardElevation="4dp"
        app:layout_constraintBottom_toTopOf="@id/btnConfirm"
        app:layout_constraintBottom_toTopOf="@id/buttonContainer"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/titleBar">
        <LinearLayout
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="vertical"
            android:padding="32dp">
            android:fillViewport="true">
            <ImageView
                android:id="@+id/successIcon"
                android:layout_width="150dp"
                android:layout_height="150dp"
                android:scaleType="fitCenter"
                android:src="@drawable/icon_success" />
            <TextView
                android:id="@+id/successTitle"
                android:layout_width="wrap_content"
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:text="写卡成功"
                android:textColor="#4CAF50"
                android:textSize="24sp"
                android:textStyle="bold" />
            <TextView
                android:id="@+id/successMessage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:gravity="center"
                android:text="卡片信息已成功写入\n请妥善保管您的卡片"
                android:textColor="#666666"
                android:textSize="16sp"
                android:lineSpacingExtra="4dp" />
                android:orientation="vertical"
                android:padding="24dp"
                android:minHeight="300dp">
        </LinearLayout>
                <ImageView
                    android:id="@+id/successIcon"
                    android:layout_width="120dp"
                    android:layout_height="120dp"
                    android:scaleType="fitCenter"
                    android:src="@drawable/icon_success" />
                <TextView
                    android:id="@+id/successTitle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="20dp"
                    android:text="写卡成功"
                    android:textColor="#4CAF50"
                    android:textSize="22sp"
                    android:textStyle="bold" />
                <TextView
                    android:id="@+id/successMessage"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="12dp"
                    android:gravity="center"
                    android:text="卡片信息已成功写入\n请妥善保管您的卡片"
                    android:textColor="#666666"
                    android:textSize="15sp"
                    android:lineSpacingExtra="4dp" />
            </LinearLayout>
        </ScrollView>
    </androidx.cardview.widget.CardView>
    <Button
        android:id="@+id/btnConfirm"
    <LinearLayout
        android:id="@+id/buttonContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginEnd="32dp"
        android:layout_marginBottom="24dp"
        android:background="@drawable/bg_button_primary"
        android:text="确定"
        android:textColor="@android:color/white"
        android:textSize="18sp"
        android:textStyle="bold"
        android:orientation="vertical"
        android:paddingStart="32dp"
        android:paddingEnd="32dp"
        android:paddingBottom="24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
        app:layout_constraintStart_toStartOf="parent">
        <Button
            android:id="@+id/btnReprint"
            android:layout_width="match_parent"
            android:layout_height="44dp"
            android:layout_marginBottom="12dp"
            android:background="@drawable/bg_button_outline_selector"
            android:text="再次打印"
            android:textColor="#2196F3"
            android:textSize="16sp"
            android:textStyle="bold" />
        <Button
            android:id="@+id/btnConfirm"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:background="@drawable/bg_button_primary"
            android:text="确定"
            android:textColor="@android:color/white"
            android:textSize="18sp"
            android:textStyle="bold" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>