| | |
| | | |
| | | 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.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 fun initView() { |
| | | binding.titleBar.setCenterText("读卡") |
| | | // 根据卡类型设置标题 |
| | | 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() } |
| | | binding.btnNext.setOnClickListener { |
| | | if (viewModel.cardNumber.value.isNullOrEmpty()) { |
| | | ToastUtil.show("请先读取卡号") |
| | | } else { |
| | | postCardData(cardType, viewModel.cardNumber.value!!, getRemark()) |
| | | |
| | | // 根据卡类型设置输入框可见性 |
| | | 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()) |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | /** |
| | | * 获取备注信息 |
| | | */ |
| | | fun getRemark(): String = viewModel.remark.value ?: "" |
| | | fun getRemark(): String = viewModel.remark.get() ?: "" |
| | | |
| | | override fun onNfcBack(intent: Intent) { |
| | | // 处理NFC读取结果 |
| | |
| | | if (cardNumber.isNotEmpty() && !cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) { |
| | | binding.btnNext.visibility = View.VISIBLE |
| | | binding.dataLayout.visibility = View.VISIBLE |
| | | binding.rechargeReadLL.visibility = View.GONE |
| | | 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) { |
| | | |
| | | val map = mutableMapOf<String, Any>() |
| | | |
| | | if (cardAddr.isNotEmpty()) { |
| | | map["cardAddr"] = cardAddr |
| | | 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() |
| | | } |
| | | |
| | | if (cardType.isNotEmpty()) { |
| | | // map["cardType"] = cardType |
| | | map["cardType"] = "5" |
| | | |
| | | /** |
| | | * 提交数据 - 不带区域号的版本 |
| | | */ |
| | | fun postCardData(cardType: String, cardAddr: String, remark: String) { |
| | | postCardData(cardType, cardAddr, remark, null, null) |
| | | } |
| | | if (remark.isNotEmpty()) { |
| | | map["remarks"] = remark |
| | | |
| | | /** |
| | | * 提交数据 - 带区域号的版本 |
| | | */ |
| | | fun postCardData(cardType: String, cardAddr: String, remark: String, regionNumber: String?) { |
| | | postCardData(cardType, cardAddr, remark, regionNumber, null) |
| | | } |
| | | // 使用正确的类型参数 |
| | | 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) |
| | | |
| | | /** |
| | | * 提交数据 - 完整版本,支持区域号和项目号 |
| | | */ |
| | | 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) |
| | | } |
| | | this@ManagerReadActivity.finish() |
| | | startActivity(intent) |
| | | } else { |
| | | // 处理搜索失败的情况 |
| | | ToastUtil.show(t.msg) |
| | | } |
| | | |
| | | override fun onError(e: Throwable?) { |
| | | super.onError(e) |
| | | ToastUtil.show("接口调取失败: ${e?.message ?: "未知错误"}") |
| | | } |
| | | } |
| | | |
| | | override fun onError(e: Throwable?) { |
| | | super.onError(e) |
| | | ToastUtil.show("搜索失败: ${e?.message ?: "未知错误"}") |
| | | } |
| | | } |
| | | ) |
| | | ) |
| | | |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | } |