左晓为主开发手持机充值管理机
zuoxiao
1 天以前 87e5604ad04c0b7aaacf3d52bae85e62d308cb6d
generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
@@ -1,8 +1,15 @@
package com.dayu.general.activity
import android.content.Intent
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.bean.net.ClientInfo
import com.dayu.general.databinding.ActivityCardWriteSuccessBinding
import com.dayu.general.tool.CardOperationType
/**
 * @author: zuo
@@ -10,44 +17,604 @@
 * @description: 写卡成功页面
 */
class CardWriteSuccessActivity : BaseActivity() {
    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 clientInfo: ClientInfo? = 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)
        binding = ActivityCardWriteSuccessBinding.inflate(layoutInflater)
        setContentView(binding.root)
        // 获取传入的卡号
        // 获取传入的卡号和操作类型
        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
        }
        if (intent.hasExtra("clientInfo")) {
            clientInfo = intent.getSerializableExtra("clientInfo") as ClientInfo
        }
        initView()
    }
    private fun initView() {
        // 设置标题
        binding.titleBar.setCenterText("销卡成功")
        // 设置成功信息
        binding.successTitle.text = "销卡成功"
        // 设置详细信息
        val message = if (cardNumber.isNullOrBlank()) {
            "卡片已成功销卡并清除内容\n该卡片将无法再次使用"
        } else {
            "卡片已成功销卡并清除内容\n卡号:$cardNumber\n该卡片将无法再次使用"
        val operationType = CardOperationType.fromCode(operationTypeCode)
        // 根据操作类型设置不同的标题和信息
        when (operationType) {
            CardOperationType.CancelCard -> {
                // 设置标题
                binding.titleBar.setCenterText("销卡成功")
                // 设置成功信息
                binding.successTitle.text = "销卡成功"
                // 设置详细信息
                val message = if (cardNumber.isNullOrBlank()) {
                    "卡片已成功销卡并清除内容\n该卡片将无法再次使用"
                } else {
                    "卡片已成功销卡并清除内容\n卡号:$cardNumber\n该卡片将无法再次使用"
                }
                binding.successMessage.text = message
                // 销卡成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
                }
            }
            CardOperationType.SUPPLEMENT -> {
                // 设置标题
                binding.titleBar.setCenterText("返还成功")
                // 设置成功信息
                binding.successTitle.text = "返还成功"
                // 设置详细信息
                val message = if (cardNumber.isNullOrBlank()) {
                    "卡片返还操作已成功完成\n卡内余额已更新"
                } else {
                    "卡片返还操作已成功完成\n卡号:$cardNumber\n卡内余额已更新"
                }
                binding.successMessage.text = message
                // 返还成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
                }
            }
            CardOperationType.DeductCard -> {
                // 设置标题
                binding.titleBar.setCenterText("补扣成功")
                // 设置成功信息
                binding.successTitle.text = "补扣成功"
                // 设置详细信息
                val message = if (cardNumber.isNullOrBlank()) {
                    "卡片补扣操作已成功完成\n卡内余额已更新"
                } else {
                    "卡片补扣操作已成功完成\n卡号:$cardNumber\n卡内余额已更新"
                }
                binding.successMessage.text = message
                // 补扣成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
                }
            }
            CardOperationType.ReplaceCard -> {
                // 设置标题
                binding.titleBar.setCenterText("补卡成功")
                // 设置成功信息
                binding.successTitle.text = "补卡成功"
                // 设置详细信息
                val message = if (cardNumber.isNullOrBlank()) {
                    "补卡操作已成功完成\n新卡已写入数据,可正常使用"
                } else {
                    "补卡操作已成功完成\n卡号:$cardNumber\n新卡已写入数据,可正常使用"
                }
                binding.successMessage.text = message
            }
            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()
                messageBuilder.append("开卡操作已成功完成\n")
                // 显示用户姓名
                val userName = getUserName()
                if (!userName.isNullOrEmpty()) {
                    messageBuilder.append("用户姓名:$userName\n")
                }
                // 显示卡地址
                val cardAddress = cardNumber ?: cardAddr
                if (!cardAddress.isNullOrEmpty()) {
                    messageBuilder.append("卡地址:$cardAddress\n")
                }
                // 显示工本费
                if (cardFee > 0) {
                    messageBuilder.append("工本费:${cardFee}元\n")
                }
                // 显示充值金额
                if (rechargeAmount > 0) {
                    messageBuilder.append("充值金额:${String.format("%.2f", rechargeAmount)}元\n")
                }
                // 显示卡内余额
                messageBuilder.append("卡内余额:${MornyUtil.changeF2Y(userCard?.balance ?: 0)}元")
                binding.successMessage.text = messageBuilder.toString()
                // 开卡成功后自动打印
                userCard?.let { card ->
                    doPrint(card)
                }
            }
            else -> {
                // 默认显示写卡成功
                binding.titleBar.setCenterText("写卡成功")
                binding.successTitle.text = "写卡成功"
                val message = if (cardNumber.isNullOrBlank()) {
                    "卡片操作已成功完成"
                } else {
                    "卡片操作已成功完成\n卡号:$cardNumber"
                }
                binding.successMessage.text = message
            }
        }
        binding.successMessage.text = message
        // 设置点击确定按钮后关闭页面
        binding.btnConfirm.setOnClickListener {
            finish()
        }
        // 设置再次打印按钮点击监听器
        binding.btnReprint.setOnClickListener {
            userCard?.let { card ->
                doPrint(card)
            }
        }
        // 设置标题栏返回按钮
        binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) {
            finish()
        }
    }
    /**
     * 获取用户姓名,优先从ClientInfo获取,如果没有再从CardInfo获取
     * @return 用户姓名
     */
    private fun getUserName(): String? {
        return clientInfo?.name ?: cardInfo?.userName
    }
    /**
     * 打印充值成功信息到打印机
     * @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("*****************************")
                    // 添加用户名(优先从ClientInfo中获取,如果没有再从CardInfo中获取)
                    val userName = getUserName()
                    if (!userName.isNullOrEmpty()) {
                        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("*****************************")
                    // 添加用户名(优先从ClientInfo中获取,如果没有再从CardInfo中获取)
                    val userName = getUserName()
                    if (!userName.isNullOrEmpty()) {
                        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("*****************************")
                    // 添加用户名(优先从ClientInfo中获取,如果没有再从CardInfo中获取)
                    val userName = getUserName()
                    if (!userName.isNullOrEmpty()) {
                        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("*****************************")
                    // 添加用户名(优先从ClientInfo中获取,如果没有再从CardInfo中获取)
                    val userName = getUserName()
                    if (!userName.isNullOrEmpty()) {
                        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("*****************************")
                    // 添加用户名(优先从ClientInfo中获取,如果没有再从CardInfo中获取)
                    val userName = getUserName()
                    if (!userName.isNullOrEmpty()) {
                        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("*****************************")
                    // 添加用户名(优先从ClientInfo中获取,如果没有再从CardInfo中获取)
                    val userName = getUserName()
                    if (!userName.isNullOrEmpty()) {
                        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 (cardFee > 0) {
                        data.add("工本费:" + cardFee + "元")
                    }
                    // 添加卡内余额(开卡后的余额)
                    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("*****************************")
                }
                else -> {
                    // 其他操作的通用打印内容
                    data.add("*****************************")
                    data.add("        操作凭证")
                    data.add("*****************************")
                    // 添加用户名(优先从ClientInfo中获取,如果没有再从CardInfo中获取)
                    val userName = getUserName()
                    if (!userName.isNullOrEmpty()) {
                        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}")
            }
        }
    }