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.BaseCommon.Companion.protocol
|
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.projectNumberLayout.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)
|
}
|
}
|
})
|
|
// 为项目号输入框添加输入验证(范围1-255)
|
binding.projectNumberEt.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.isNotEmpty()) {
|
try {
|
val number = text.toInt()
|
if (number > 255) {
|
binding.projectNumberEt.setText("255")
|
binding.projectNumberEt.setSelection(3)
|
} else if (number < 1 && text.length > 1) {
|
binding.projectNumberEt.setText("1")
|
binding.projectNumberEt.setSelection(1)
|
}
|
} catch (e: NumberFormatException) {
|
// 如果输入的不是数字,清空
|
binding.projectNumberEt.setText("")
|
}
|
}
|
}
|
})
|
}
|
|
CardCommon.CHECK_CARD,
|
CardCommon.DEBUG_CARD,
|
CardCommon.CLEAN_CARD_TYPE -> {
|
// 检查卡、调试卡、清零卡:隐藏区域号和项目号输入框,只显示卡地址和备注
|
binding.regionNumberLayout.visibility = View.GONE
|
binding.projectNumberLayout.visibility = View.GONE
|
}
|
|
else -> {
|
// 其他卡类型:隐藏区域号和项目号输入框
|
binding.regionNumberLayout.visibility = View.GONE
|
binding.projectNumberLayout.visibility = View.GONE
|
}
|
}
|
|
binding.btnNext.setOnClickListener {
|
if (viewModel.cardNumber.get().isNullOrEmpty()) {
|
ToastUtil.show("请先读取卡号")
|
} else if (cardType == CardCommon.REGION_CARD) {
|
// 区域表号卡需要验证区域号和项目号
|
val regionNumber = viewModel.regionNumber.get()
|
val projectNumber = viewModel.projectNumber.get()
|
|
if (regionNumber.isNullOrEmpty()) {
|
ToastUtil.show("请输入区域号")
|
} else if (regionNumber.length != 12) {
|
ToastUtil.show("区域号必须为12位数字")
|
} else if (projectNumber.isNullOrEmpty()) {
|
ToastUtil.show("请输入项目号")
|
} else {
|
try {
|
val projectNum = projectNumber.toInt()
|
if (projectNum < 1 || projectNum > 255) {
|
ToastUtil.show("项目号必须在1-255范围内")
|
} else {
|
postCardData(
|
cardType,
|
viewModel.cardNumber.get()!!,
|
getRemark(),
|
regionNumber,
|
projectNumber
|
)
|
}
|
} catch (e: NumberFormatException) {
|
ToastUtil.show("项目号必须为数字")
|
}
|
}
|
} else {
|
// 其他卡类型(包括调试卡、检查卡、清零卡)不需要区域号和项目号
|
postCardData(cardType, viewModel.cardNumber.get()!!, getRemark())
|
}
|
}
|
}
|
|
private fun initListener() {
|
binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { finish() }
|
}
|
|
/**
|
* 设置卡号
|
*/
|
fun setCardNumber(cardNumber: String) {
|
viewModel.setCardNumber(cardNumber)
|
}
|
|
/**
|
* 获取备注信息
|
*/
|
fun getRemark(): String = viewModel.remark.get() ?: ""
|
|
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, null)
|
}
|
|
/**
|
* 提交数据 - 带区域号的版本
|
*/
|
fun postCardData(cardType: String, cardAddr: String, remark: String, regionNumber: String?) {
|
postCardData(cardType, cardAddr, remark, regionNumber, null)
|
}
|
|
/**
|
* 提交数据 - 完整版本,支持区域号和项目号
|
*/
|
fun postCardData(
|
cardType: String,
|
cardAddr: String,
|
remark: String,
|
regionNumber: String?,
|
projectNumber: String?
|
) {
|
|
val map = mutableMapOf<String, Any>()
|
|
if (cardAddr.isNotEmpty()) {
|
map["cardAddr"] = cardAddr
|
}
|
|
if (cardType.isNotEmpty()) {
|
// 根据卡类型设置对应的数字编号
|
val cardTypeNumber = when (cardType) {
|
CardCommon.REGION_CARD -> "2" // 设置区域表号卡
|
CardCommon.ELECTRIC_PRICE_CARD -> "3" // 取数卡
|
CardCommon.CHECK_CARD -> "4" // 检查卡
|
CardCommon.DEBUG_CARD -> "5" // 测试卡
|
CardCommon.CLEAN_CARD_TYPE -> "6" // 清零卡
|
CardCommon.IP_CARD -> "7" // IP设置卡
|
CardCommon.AREA_CARD -> "8" // 域名设置卡(区域设置卡)
|
CardCommon.GPS_CARD -> "9" // GPS卡
|
CardCommon.VALVE_TIME_CARD -> "10" // 时间配置卡(配置开关阀时间)
|
else -> "5" // 默认值
|
}
|
map["cardType"] = cardTypeNumber
|
}
|
if (remark.isNotEmpty()) {
|
map["remarks"] = remark
|
}
|
|
// 如果是区域表号卡并且有区域号,添加到请求参数中
|
if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) {
|
map["regionNumber"] = regionNumber
|
}
|
|
// 如果是区域表号卡并且有项目号,添加到请求参数中
|
if (cardType == CardCommon.REGION_CARD && !projectNumber.isNullOrEmpty()) {
|
map["projectNumber"] = projectNumber
|
}
|
map["protocol"] = protocol
|
map["securityCode"]="A0B1C289"
|
|
// 使用正确的类型参数
|
ApiManager.getInstance().requestPostLoading(
|
this,
|
"terminal/card/createManagementCard",
|
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("orderNumber", t.content)
|
putExtra("cardType", cardType)
|
|
// 根据卡类型设置操作类型代码
|
val operationTypeCode = when (cardType) {
|
CardCommon.REGION_CARD -> 100 // 区域表号卡操作类型
|
CardCommon.CHECK_CARD -> 101 // 检查卡操作类型
|
CardCommon.DEBUG_CARD -> 102 // 调试卡操作类型
|
CardCommon.CLEAN_CARD_TYPE -> 103 // 清零卡操作类型
|
CardCommon.IP_CARD -> 104 // IP设置卡操作类型
|
CardCommon.AREA_CARD -> 105 // 域名设置卡操作类型
|
CardCommon.GPS_CARD -> 106 // GPS卡操作类型
|
CardCommon.VALVE_TIME_CARD -> 107 // 时间配置卡操作类型
|
CardCommon.ELECTRIC_PRICE_CARD -> 108 // 取数卡操作类型
|
else -> -1
|
}
|
putExtra("operationTypeCode", operationTypeCode)
|
|
// 传递区域号和项目号(仅当是区域表号卡时)
|
if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) {
|
putExtra("regionNumber", regionNumber)
|
}
|
if (cardType == CardCommon.REGION_CARD && !projectNumber.isNullOrEmpty()) {
|
putExtra("projectNumber", projectNumber)
|
}
|
}
|
this@ManagerReadActivity.finish()
|
startActivity(intent)
|
} else {
|
// 处理搜索失败的情况
|
ToastUtil.show(t.msg)
|
}
|
}
|
|
override fun onError(e: Throwable?) {
|
super.onError(e)
|
ToastUtil.show("接口调取失败: ${e?.message ?: "未知错误"}")
|
}
|
}
|
)
|
|
|
}
|
|
|
}
|