左晓为主开发手持机充值管理机
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package com.dayu.general.view
 
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.Gravity
import android.view.WindowManager
import com.dayu.baselibrary.net.subscribers.SubscriberListener
import com.dayu.baselibrary.utils.ToastUtil
import com.dayu.general.BaseApplication
import com.dayu.general.R
import com.dayu.general.databinding.DialogCardRefundBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
 
/**
 *卡片挂失对话框
 */
class CardRefundDialog(context: Context) : Dialog(context) {
    private var binding: DialogCardRefundBinding? = null
    private var onConfirmListener: ((String, String) -> Unit)? = null
    private var onSuccessListener: (() -> Unit)? = null
    private var username: String? = null
    private var cardNumber: String? = null
    private var balance: String? = null
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DialogCardRefundBinding.inflate(layoutInflater)
        binding?.root?.let { setContentView(it) }
 
        // 设置对话框宽度为屏幕宽度的80%
        val window = window
        val params = window?.attributes
        params?.width = (context.resources.displayMetrics.widthPixels * 0.85).toInt()
        params?.gravity = Gravity.CENTER
 
        // 设置背景透明
        window?.setBackgroundDrawableResource(android.R.color.transparent)
 
        // 设置按钮点击事件
        binding?.btnCancel?.setOnClickListener {
            dismiss()
        }
 
        binding?.btnConfirm?.setOnClickListener {
            val refundAmount = binding?.etRefundAmount?.text.toString()
            val remark = binding?.etRemark?.text.toString()
 
            // 调用挂失接口
            callReportLossApi(refundAmount, remark)
        }
 
        // 如果有预设的用户信息,设置它们
        username?.let { username ->
            cardNumber?.let { cardNumber ->
                balance?.let { balance ->
                    setUserInfo(username, cardNumber, balance)
                }
            }
        }
    }
 
    override fun show() {
        super.show()
        // 清空输入框
        binding?.etRefundAmount?.setText("")
        binding?.etRemark?.setText("")
    }
 
    fun setUserInfo(username: String, cardNumber: String, balance: String) {
        this.username = username
        this.cardNumber = cardNumber
        this.balance = balance
 
        binding?.apply {
            tvUsernameValue.text = username
            tvCardNumberValue.text = cardNumber
            etBalance.setText(balance + "元")
        }
    }
 
    fun setOnConfirmListener(listener: (String, String) -> Unit) {
        onConfirmListener = listener
    }
 
    fun setOnSuccessListener(listener: () -> Unit) {
        onSuccessListener = listener
    }
 
    /**
     * 调用挂失接口
     */
    private fun callReportLossApi(refundAmount: String, remark: String) {
        val params = mutableMapOf<String, Any>()
        params["cardNum"] = cardNumber ?: ""
        
        // 处理余额格式,去除千位分隔符逗号和"元"字符
        val balanceValue = balance?.replace("元", "")?.replace(",", "")?.toFloatOrNull() ?: 0f
        params["money"] = balanceValue
        
        params["refund"] = refundAmount.toFloatOrNull() ?: 0f
        params["remarks"] = remark.ifEmpty { "挂失" }
        params["operator"] = BaseApplication.userId
 
        ApiManager.getInstance().requestPostLoading(
            context,
            "terminal/card/termReportLoss",
            ReportLossResult::class.java,
            params,
            object : SubscriberListener<BaseResponse<ReportLossResult>>() {
                override fun onNext(response: BaseResponse<ReportLossResult>) {
                    if (response.success && response.code == "0001") {
                        ToastUtil.show("挂失成功")
                        onConfirmListener?.invoke(refundAmount, remark)
                        onSuccessListener?.invoke()
                        dismiss()
                    } else {
                        ToastUtil.show(response.msg ?: "挂失失败")
                    }
                }
 
                override fun onError(e: Throwable?) {
                    super.onError(e)
                    ToastUtil.show("挂失失败: ${e?.message ?: "网络错误"}")
                }
            }
        )
    }
 
    /**
     * 挂失接口返回结果
     */
    data class ReportLossResult(
        val content: Boolean? = null
    )