左晓为主开发手持机充值管理机
zuoxiao
9 小时以前 465c8abaa982fba6868a900d25316c70afc20fb7
generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
@@ -8,13 +8,19 @@
import com.dayu.baselibrary.utils.ToastUtil
import com.dayu.baselibrary.view.TipDialog
import com.dayu.baselibrary.view.TitleBar
import com.dayu.general.BaseApplication
import com.dayu.general.bean.net.CardInfoResult
import com.dayu.general.bean.net.CardCancelResult
import com.dayu.general.databinding.ActivityCardCancelBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
import com.dayu.general.tool.NfcReadHelper
import com.dayu.general.bean.card.UserCard
import com.dayu.general.tool.CardCommon
import com.dayu.general.bean.card.ClearCard
import com.dayu.general.tool.NfcWreatHelper
import com.dayu.baselibrary.tools.nfc.NFCCallBack
import com.dayu.general.tool.CardOperationType
/**
 * @author: zuo
@@ -25,6 +31,7 @@
    private lateinit var binding: ActivityCardCancelBinding
    private var cardNumber: String? = null
    private var cardInfo: CardInfoResult? = null
    private var userCard: UserCard? = null
    companion object {
        /**
@@ -60,8 +67,9 @@
     * 重置到读卡状态
     */
    private fun resetToReadingState() {
        binding.cardReadLL.visibility = android.view.View.VISIBLE
        binding.scrollReadCard.visibility = android.view.View.VISIBLE
        binding.cardInfoContainer.visibility = android.view.View.GONE
        binding.bottomButtonContainer.visibility = android.view.View.GONE
        cardNumber = null
        cardInfo = null
        binding.etRefundAmount.setText("")
@@ -80,6 +88,7 @@
    override fun onNfcBack(intent: Intent?) {
        intent?.let {
            // 处理正常的读卡操作
            handleNfcIntent(it)
        } ?: run {
            showConfirmDialog("NFC数据异常,请重新刷卡") {
@@ -162,7 +171,7 @@
        android.util.Log.d("CardCancelActivity", "卡片类型: $cardType")
        android.util.Log.d("CardCancelActivity", "卡内余额: ${userCard.balance}")
        android.util.Log.d("CardCancelActivity", "==================")
        this.userCard = userCard
        // 根据卡号获取卡片详细信息
        getCardInfo(cardNumber, cardType, userCard)
    }
@@ -207,9 +216,10 @@
        cardType: String,
        userCard: UserCard
    ) {
        // 隐藏读卡提示,显示信息区域
        binding.cardReadLL.visibility = android.view.View.GONE
        // 隐藏读卡提示,显示信息区域和底部按钮
        binding.scrollReadCard.visibility = android.view.View.GONE
        binding.cardInfoContainer.visibility = android.view.View.VISIBLE
        binding.bottomButtonContainer.visibility = android.view.View.VISIBLE
        this.cardInfo = cardInfo
        binding.tvCardNumber.text = cardNumber
@@ -222,9 +232,7 @@
                card.balance.toString()
            }
            binding.tvCardBalance.text = "${balanceInYuan}元"
            // 默认退款金额设置为卡内余额
            binding.etRefundAmount.setText(balanceInYuan)
            // 卡片状态
            binding.tvCardStatus.text = "正常"
@@ -280,64 +288,68 @@
        val refundAmountStr = binding.etRefundAmount.text.toString().trim()
        val remarks = binding.etRemarks.text.toString().trim()
        if (TextUtils.isEmpty(refundAmountStr)) {
            ToastUtil.showToast("请输入退款金额")
            return
        // 退款金额处理(非必填)
        val refundAmount = if (refundAmountStr.isEmpty()) {
            0.0 // 如果未输入退款金额,默认为0
        } else {
            try {
                val amount = refundAmountStr.toDouble()
                if (amount < 0) {
                    ToastUtil.show("退款金额不能为负数")
                    return
                }
                amount
            } catch (e: NumberFormatException) {
                ToastUtil.show("请输入有效的退款金额")
                return
            }
        }
        val refundAmount = try {
            refundAmountStr.toDouble()
        } catch (e: NumberFormatException) {
            ToastUtil.showToast("请输入有效的退款金额")
            return
        }
        if (refundAmount < 0) {
            ToastUtil.showToast("退款金额不能为负数")
            return
        }
        if (TextUtils.isEmpty(remarks)) {
            ToastUtil.showToast("请输入备注信息")
            return
        // 备注处理(非必填)
        val finalRemarks = if (remarks.isEmpty()) {
            "无备注" // 如果未输入备注,使用默认值
        } else {
            remarks
        }
        // 确认销卡
        showConfirmDialog(
            "确认要销卡吗?\n\n卡号:${cardNumber}\n退款金额:${refundAmount}元\n备注:${remarks}\n\n销卡后此卡将无法再次使用!"
        ) {
            callCancelCardApi(refundAmount, remarks)
        val confirmMessage = if (refundAmount > 0) {
            "确认要销卡吗?\n\n卡号:${cardNumber}\n退款金额:${refundAmount}元\n备注:${finalRemarks}\n\n销卡后此卡将无法再次使用!"
        } else {
            "确认要销卡吗?\n\n卡号:${cardNumber}\n无退款金额\n备注:${finalRemarks}\n\n销卡后此卡将无法再次使用!"
        }
        showConfirmDialog(confirmMessage) {
            callCancelCardApi(refundAmount, finalRemarks)
        }
    }
    /**
     * 调用销卡API接口
     */
    private fun callCancelCardApi(refundAmount: Double, remarks: String) {
    private fun callCancelCardApi(refundAmount: Double, finalRemarks: String) {
        if (cardNumber.isNullOrBlank()) {
            ToastUtil.showToast("卡号信息异常,请重新刷卡")
            ToastUtil.show("卡号信息异常,请重新刷卡")
            return
        }
        val map = mutableMapOf<String, Any>()
        map["cardNum"] = cardNumber!!
        map["refund"] = (refundAmount * 100).toInt() // 转换为分
        map["cardNum"] = cardInfo?.cardNum.toString()
        map["refund"] = refundAmount.toString() // 改为String类型,单位为元
        map["refundType"] = 1838466162264350700L
        map["remarks"] = remarks
        map["operator"] = 2024090516595200300L
        map["remarks"] = finalRemarks
        map["operator"] = BaseApplication.userId
        ApiManager.getInstance().requestPostLoading(
            this,
            "terminal/card/termCancel",
            Boolean::class.java,
            CardCancelResult::class.java,
            map,
            object : SubscriberListener<BaseResponse<Boolean>>() {
                override fun onNext(t: BaseResponse<Boolean>) {
                    if (t.success && t.content == true) {
                        // 销卡成功
                        showConfirmDialog("销卡成功!\n\n退款金额:${refundAmount}元已退还") {
                            finish()
                        }
            object : SubscriberListener<BaseResponse<CardCancelResult>>() {
                override fun onNext(t: BaseResponse<CardCancelResult>) {
                    if (t.success && t.content != null) {
                        // 销卡成功,跳转到写卡界面
                        startWriteCardActivity(t.content!!, refundAmount, userCard!!)
                    } else {
                        // 销卡失败
                        val errorMsg = if (t.msg.isNullOrBlank()) "销卡失败,请重试" else t.msg
@@ -354,4 +366,27 @@
            }
        )
    }
    /**
     * 跳转到写卡界面进行卡内容清除
     */
    private fun startWriteCardActivity(
        cancelResult: CardCancelResult,
        refundAmount: Double,
        userCard: UserCard
    ) {
        val intent = Intent(this, NfcWreatActivity::class.java).apply {
            putExtra("cardAddr", cardNumber)
            putExtra("operationTypeCode", CardOperationType.CancelCard.code)
            putExtra("orderNumber", cancelResult.orderNo)
            putExtra("refundAmount", refundAmount)
            putExtra("userCard", userCard)
            // 传递当前卡内余额信息
            cardInfo?.let { info ->
                putExtra("cardBalance", info.balance ?: 0.0)
            }
        }
        startActivity(intent)
        finish()
    }