左晓为主开发手持机充值管理机
generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
@@ -1,7 +1,12 @@
package com.dayu.general.activity
import android.os.Bundle
import com.dayu.baselibrary.tools.print.PrintAdater
import com.dayu.baselibrary.utils.DateUtil
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
@@ -14,8 +19,24 @@
    private lateinit var binding: ActivityCardWriteSuccessBinding
    private var cardNumber: String? = null
    private var cardAddr: String? = null
    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
    private var returnAmount = 0.0
    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)
@@ -24,9 +45,30 @@
        // 获取传入的卡号和操作类型
        cardNumber = intent.getStringExtra("cardNumber")
        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)
        returnAmount = intent.getDoubleExtra("returnAmount", 0.0)
        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()
@@ -51,6 +93,11 @@
                    "卡片已成功销卡并清除内容\n卡号:$cardNumber\n该卡片将无法再次使用"
                }
                binding.successMessage.text = message
                // 销卡成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
                }
            }
            CardOperationType.SUPPLEMENT -> {
@@ -67,6 +114,11 @@
                    "卡片返还操作已成功完成\n卡号:$cardNumber\n卡内余额已更新"
                }
                binding.successMessage.text = message
                // 返还成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
                }
            }
            CardOperationType.DeductCard -> {
@@ -83,6 +135,11 @@
                    "卡片补扣操作已成功完成\n卡号:$cardNumber\n卡内余额已更新"
                }
                binding.successMessage.text = message
                // 补扣成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
                }
            }
            CardOperationType.ReplaceCard -> {
@@ -102,10 +159,42 @@
            }
            CardOperationType.Recharge -> {
                binding.titleBar.setCenterText("写卡成功")
                binding.successTitle.text = "写卡成功"
                binding.successMessage.text =
                    "卡内余额已更新为 ${userCard?.balance}元"
                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)
                }
            }
            else -> {
@@ -127,9 +216,371 @@
            finish()
        }
        // 设置再次打印按钮点击监听器
        binding.btnReprint.setOnClickListener {
            userCard?.let { card ->
                doPrint(card)
            }
        }
        // 设置标题栏返回按钮
        binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) {
            finish()
        }
    }
    /**
     * 打印充值成功信息到打印机
     * @param userCard 用户卡片信息,包含余额等信息
     * 函数会构建打印数据并调用打印适配器进行打印
     */
    private fun doPrint(userCard: UserCard) {
        try {
            // 创建打印数据列表
            val data: MutableList<String> = ArrayList()
            // 根据操作类型设置不同的打印内容
            val operationType = CardOperationType.fromCode(operationTypeCode)
            when (operationType) {
                CardOperationType.Recharge -> {
                    // 充值打印内容
                    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)} 元")
                    }
                    // 添加赠送金额
                    if (bonusAmount > 0) {
                        data.add("赠送金额:${String.format("%.2f", bonusAmount)} 元")
                    }
                    // 添加充值后余额
                    data.add("充值后余额:${MornyUtil.changeF2Y(userCard.balance)} 元")
                    // 添加订单号
                    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)} 元")
                    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)} 元")
                    if (!orderNumber.isNullOrEmpty()) {
                        data.add("订单号:$orderNumber")
                    }
                    data.add("设备操作员:${BaseApplication.userName}")
                    data.add(
                        "日   期:${
                            DateUtil.dateToStamp(
                                System.currentTimeMillis(),
                                DateUtil.type2
                            )
                        }"
                    )
                    data.add("*****************************")
                }
                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)} 元")
                    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)} 元")
                    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("设备操作员:${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()
            // 可以添加Toast提示用户打印失败
            runOnUiThread {
                com.dayu.baselibrary.utils.ToastUtil.show("打印失败:${e.message}")
            }
        }
    }