package com.dayu.general.activity
|
|
import android.content.Intent
|
import android.os.Bundle
|
import android.text.Editable
|
import android.text.TextWatcher
|
import android.view.View
|
import androidx.databinding.DataBindingUtil
|
import com.dayu.baselibrary.net.subscribers.SubscriberListener
|
import com.dayu.baselibrary.utils.BaseCommon
|
import com.dayu.baselibrary.utils.ToastUtil
|
import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
|
import com.dayu.general.R
|
import com.dayu.general.databinding.ActivityManagerReadBinding
|
import com.dayu.general.model.CardInfoModel
|
import com.dayu.general.net.ApiManager
|
import com.dayu.general.net.BaseResponse
|
import com.dayu.general.tool.CardCommon
|
import com.dayu.general.tool.NfcReadHelper
|
|
class ManagerReadActivity : BaseNfcActivity() {
|
|
private lateinit var binding: ActivityManagerReadBinding
|
private val viewModel: CardInfoModel = CardInfoModel()
|
var cardType = ""
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
|
// 初始化数据绑定
|
binding = DataBindingUtil.setContentView(this, R.layout.activity_manager_read)
|
binding.lifecycleOwner = this
|
binding.viewModel = viewModel
|
if (intent.hasExtra("cardType")) {
|
cardType = intent.getStringExtra("cardType").toString()
|
}
|
|
initView()
|
initListener()
|
}
|
|
private fun initView() {
|
// 根据卡类型设置标题
|
when (cardType) {
|
CardCommon.REGION_CARD -> binding.titleBar.setCenterText("制作区域表号卡")
|
CardCommon.CHECK_CARD -> binding.titleBar.setCenterText("制作检查卡")
|
CardCommon.DEBUG_CARD -> binding.titleBar.setCenterText("制作调试卡")
|
CardCommon.CLEAN_CARD_TYPE -> binding.titleBar.setCenterText("制作清零卡")
|
else -> binding.titleBar.setCenterText("读卡")
|
}
|
|
binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() }
|
|
// 根据卡类型设置输入框可见性
|
when (cardType) {
|
CardCommon.REGION_CARD -> {
|
// 区域表号卡:显示区域号输入框
|
binding.regionNumberLayout.visibility = View.VISIBLE
|
// 为区域号输入框添加输入验证
|
binding.regionNumberEt.addTextChangedListener(object : TextWatcher {
|
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
|
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
|
override fun afterTextChanged(s: Editable?) {
|
val text = s.toString()
|
if (text.length > 12) {
|
binding.regionNumberEt.setText(text.substring(0, 12))
|
binding.regionNumberEt.setSelection(12)
|
}
|
}
|
})
|
}
|
CardCommon.CHECK_CARD,
|
CardCommon.DEBUG_CARD,
|
CardCommon.CLEAN_CARD_TYPE -> {
|
// 检查卡、调试卡、清零卡:隐藏区域号输入框,只显示卡地址和备注
|
binding.regionNumberLayout.visibility = View.GONE
|
}
|
else -> {
|
// 其他卡类型:隐藏区域号输入框
|
binding.regionNumberLayout.visibility = View.GONE
|
}
|
}
|
|
binding.btnNext.setOnClickListener {
|
if (viewModel.cardNumber.value.isNullOrEmpty()) {
|
ToastUtil.show("请先读取卡号")
|
} else if (cardType == CardCommon.REGION_CARD) {
|
// 区域表号卡需要验证区域号
|
val regionNumber = viewModel.regionNumber.value
|
if (regionNumber.isNullOrEmpty()) {
|
ToastUtil.show("请输入区域号")
|
} else if (regionNumber.length != 12) {
|
ToastUtil.show("区域号必须为12位数字")
|
} else {
|
postCardData(cardType, viewModel.cardNumber.value!!, getRemark(), regionNumber)
|
}
|
} else {
|
// 其他卡类型(包括调试卡、检查卡、清零卡)不需要区域号
|
postCardData(cardType, viewModel.cardNumber.value!!, getRemark())
|
}
|
}
|
}
|
|
private fun initListener() {
|
binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { finish() }
|
}
|
|
/**
|
* 设置卡号
|
*/
|
fun setCardNumber(cardNumber: String) {
|
viewModel.setCardNumber(cardNumber)
|
}
|
|
/**
|
* 获取备注信息
|
*/
|
fun getRemark(): String = viewModel.remark.value ?: ""
|
|
override fun onNfcBack(intent: Intent) {
|
// 处理NFC读取结果
|
NfcReadHelper.getInstance(intent, this).getCardNumber().let { cardNumber ->
|
if (cardNumber.isNotEmpty() && !cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
|
binding.btnNext.visibility = View.VISIBLE
|
binding.dataLayout.visibility = View.VISIBLE
|
binding.scrollReadCard.visibility = View.GONE
|
setCardNumber(cardNumber)
|
} else if (cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) {
|
ToastUtil.show("当前卡密码错误,不是本公司卡")
|
}
|
}
|
}
|
|
|
private fun bytesToHexString(bytes: ByteArray?): String? {
|
if (bytes == null || bytes.isEmpty()) return null
|
val sb = StringBuilder()
|
for (b in bytes) {
|
sb.append(String.format("%02X", b))
|
}
|
return sb.toString()
|
}
|
|
|
/**
|
* 提交数据 - 不带区域号的版本
|
*/
|
fun postCardData(cardType: String, cardAddr: String, remark: String) {
|
postCardData(cardType, cardAddr, remark, null)
|
}
|
|
/**
|
* 提交数据 - 带区域号的版本
|
*/
|
fun postCardData(cardType: String, cardAddr: String, remark: String, regionNumber: String?) {
|
|
val map = mutableMapOf<String, Any>()
|
|
if (cardAddr.isNotEmpty()) {
|
map["cardAddr"] = cardAddr
|
}
|
|
if (cardType.isNotEmpty()) {
|
// map["cardType"] = cardType
|
map["cardType"] = "5"
|
}
|
if (remark.isNotEmpty()) {
|
map["remarks"] = remark
|
}
|
|
// 如果是区域表号卡并且有区域号,添加到请求参数中
|
if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) {
|
map["regionNumber"] = regionNumber
|
}
|
|
// 使用正确的类型参数
|
ApiManager.getInstance().requestPostLoading(
|
this,
|
"/sell/card/create_manager_card",
|
String::class.java,
|
map,
|
object : SubscriberListener<BaseResponse<String>>() {
|
override fun onNext(t: BaseResponse<String>) {
|
if (t.success) {
|
var intent = Intent(this@ManagerReadActivity, NfcWreatActivity::class.java).apply {
|
putExtra("cardAddr", cardAddr)
|
putExtra("orderId", t.content)
|
putExtra("cardType", cardType)
|
if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) {
|
putExtra("regionNumber", regionNumber)
|
}
|
}
|
this@ManagerReadActivity.finish()
|
startActivity(intent)
|
} else {
|
// 处理搜索失败的情况
|
ToastUtil.show(t.msg)
|
}
|
}
|
|
override fun onError(e: Throwable?) {
|
super.onError(e)
|
ToastUtil.show("搜索失败: ${e?.message ?: "未知错误"}")
|
}
|
}
|
)
|
|
|
}
|
|
|
}
|