左晓为主开发手持机充值管理机
zuojincheng
1 天以前 d773ab0295feba24ae4fc14f61e8aa310e40f4ba
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
package com.dayu.general.activity
 
import android.content.Intent
import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import com.dayu.baselibrary.net.subscribers.SubscriberListener
import com.dayu.baselibrary.tools.nfc.NFCCallBack
import com.dayu.baselibrary.utils.ToastUtil
import com.dayu.general.bean.card.ClearCard
import com.dayu.general.bean.card.UserCard
import com.dayu.general.tool.CardCommon
import com.dayu.general.databinding.ActivityNfcWriteGeBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
import com.dayu.general.tool.NfcReadHelper
import com.dayu.general.tool.NfcWreatHelper
import com.dayu.general.dao.BaseDaoSingleton
import com.tencent.bugly.crashreport.CrashReport
import kotlinx.coroutines.launch
 
/**
 * @author: zuo
 * @date: 2021/3/30
 * @description:写卡界面
 */
class NfcWreatActivity : BaseNfcActivity() {
    var binding: ActivityNfcWriteGeBinding? = null
    var cardType = ""
    var orderId = ""
    var cardAddr = ""
    private lateinit var userCard: UserCard
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityNfcWriteGeBinding.inflate(layoutInflater)
        setContentView(binding?.root)
        getInitData()
    }
 
    /**
     * 获取数据
     */
    private fun getInitData() {
        cardType = intent?.getStringExtra("cardType") ?: ""
        orderId = intent?.getStringExtra("orderId") ?: ""
        cardAddr = intent?.getStringExtra("cardAddr") ?: ""
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) {
            userCard = intent?.getSerializableExtra("userCard", UserCard::class.java)!!
        } else {
            userCard = (intent?.getSerializableExtra("userCard") as? UserCard)!!
        }
 
        if (cardType.isNotEmpty()) {
            when (cardType) {
                CardCommon.CLEAN_CARD_TYPE -> {
                    binding?.cardData?.text = "清零卡写卡"
                }
 
            }
        }
 
    }
 
 
    override fun onNfcBack(intent: Intent) {
        val nfcReadHelper = NfcReadHelper.getInstance(intent, this)
        val cardNumber = nfcReadHelper.getCardNumberNoClose()
        if (cardNumber.isNotEmpty() && cardNumber == cardAddr) {
            val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this)
            when (cardType) {
                CardCommon.CLEAN_CARD_TYPE -> {
                    var clearCard = ClearCard()
                    nfcWreatHelper.writeData(clearCard.getZeroBytes(), 7, 0) { success, message ->
                        if (success) {
                            postCardData(cardType, cardAddr, "")
                            // 写卡成功后更新数据库中的isCardWritten状态
                            updateCardWrittenStatus(cardAddr)
                            ToastUtil.show("写卡成功!")
                            // 处理写卡成功的情况
                        } else {
                            // 处理写卡失败的情况
                            ToastUtil.show(message)
                        }
                    }
                }
 
                CardCommon.USER_CARD_TYPE_1 -> {
                    binding?.cardData?.text = "写用户卡"
                    nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack {
                        override fun isSusses(flag: Boolean, msg: String?) {
                            if (flag) {
                                // 写卡成功后更新数据库中的isCardWritten状态
                                updateCardWrittenStatus(cardAddr)
                                ToastUtil.show("写卡成功!")
                            } else {
                                ToastUtil.show("写卡失败: ${msg ?: "未知错误"}")
                            }
                        }
                    })
 
                }
            }
        } else {
            ToastUtil.show("卡片错误,当前刷的卡与刚刚的卡不一致")
        }
    }
 
    /**
     * 更新CardRegistrationBean中的isCardWritten状态为true
     */
    private fun updateCardWrittenStatus(cardNumber: String) {
        lifecycleScope.launch {
            try {
                val cardRegistrationDao = BaseDaoSingleton.getInstance(this@NfcWreatActivity)
                    .cardRegistrationDao()
                
                // 根据卡号查找CardRegistrationBean记录
                val cardRegistration = cardRegistrationDao.getByCardNumber(cardNumber)
                if (cardRegistration != null) {
                    // 创建更新后的CardRegistrationBean对象,将isCardWritten设置为true
                    val updatedCardRegistration = cardRegistration.copy(isCardWritten = true)
                    // 更新数据库记录
                    cardRegistrationDao.update(updatedCardRegistration)
                }
            } catch (e: Exception) {
                CrashReport.postCatchedException(e)
                e.printStackTrace()
                ToastUtil.show("更新写卡状态失败: ${e.message}")
            }
        }
    }
 
    fun postCardData(cardType: String, cardAddr: String, remark: String) {
        when (cardType) {
            CardCommon.CHECK_CARD -> {
                binding?.cardData?.text = "写用户卡"
            }
        }
        val map = mutableMapOf<String, Any>()
 
        if (cardAddr.isNotEmpty()) {
            map["cardAddr"] = cardAddr
        }
 
        if (cardType.isNotEmpty()) {
//            map["cardType"] = cardType
            map["operateType"] = "1"
        }
        if (remark.isNotEmpty()) {
            map["remarks"] = remark
        }
        // 使用正确的类型参数
        ApiManager.getInstance().requestPostLoading(
            this,
            "/sell/card/call_back",
            String::class.java,
            map,
            object : SubscriberListener<BaseResponse<String>>() {
                override fun onNext(t: BaseResponse<String>) {
                    if (t.success) {
                        ToastUtil.show("写卡成功")
                        this@NfcWreatActivity.finish()
 
                    } else {
                        // 处理搜索失败的情况
                        ToastUtil.show(t.msg)
                    }
                }
 
                override fun onError(e: Throwable?) {
                    super.onError(e)
                    ToastUtil.show("上报失败: ${e?.message ?: "未知错误"}")
                }
            }
        )
    }
 
 
}