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 android.widget.Toast
|
import androidx.lifecycle.lifecycleScope
|
import com.dayu.baselibrary.net.subscribers.SubscriberListener
|
import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
|
import com.dayu.general.BaseApplication
|
import com.dayu.general.R
|
import com.dayu.general.bean.db.CardRegistrationBean
|
import com.dayu.general.dao.BaseDaoSingleton
|
import com.dayu.general.databinding.ActivityNewCard1GeBinding
|
import com.dayu.general.net.ApiManager
|
import com.dayu.general.net.BaseResponse
|
import com.dayu.general.tool.NfcReadHelper
|
import kotlinx.coroutines.launch
|
|
/**
|
* Description: 用户开卡界面(同步修改白卡密码)
|
* Author: zuo
|
* Date: 2025/4/7
|
*/
|
class NewCard2Activity : BaseNfcActivity() {
|
|
private lateinit var binding: ActivityNewCard1GeBinding
|
|
// 支付方式
|
private var paymentMethod: String = "现金"
|
|
// 卡物理ID
|
private var cardPhysicalId: String = ""
|
|
// 用户ID
|
private var userId: String = ""
|
|
companion object {
|
private const val TAG = "NewCard2Activity"
|
}
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
binding = ActivityNewCard1GeBinding.inflate(layoutInflater)
|
setContentView(binding.root)
|
|
initView()
|
initListener()
|
}
|
|
|
private fun initView() {
|
// 初始化标题栏返回按钮
|
binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) {
|
finish()
|
}
|
|
// 初始化NFC读卡容器,初始隐藏
|
binding.nfcContainer.visibility = View.VISIBLE
|
|
// 从Intent中获取用户信息(如果有)
|
val userName = intent.getStringExtra("userName") ?: ""
|
val rawIdCard = intent.getStringExtra("idCard")
|
val idCard = if (rawIdCard.isNullOrBlank()) "无" else rawIdCard
|
val farmerCode = intent.getStringExtra("farmerCode") ?: ""
|
userId = intent.getStringExtra("userId") ?: ""
|
|
// 设置用户信息
|
binding.newCardUserName.text = userName
|
binding.newCardIdCard.text = idCard
|
binding.newCardFarmerCode.text = farmerCode
|
|
// 设置金额输入限制为两位小数
|
binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher())
|
binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher())
|
}
|
|
/**
|
* 创建限制输入两位小数的TextWatcher
|
*/
|
private fun createDecimalTextWatcher(): TextWatcher {
|
return 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?) {
|
if (s == null || s.isEmpty()) return
|
|
val str = s.toString()
|
// 如果输入的不是有效的小数格式,进行处理
|
if (str.contains(".")) {
|
val decimalIndex = str.indexOf(".")
|
// 如果小数点后超过两位,截取到两位
|
if (decimalIndex >= 0 && str.length - decimalIndex > 3) {
|
s.delete(decimalIndex + 3, str.length)
|
}
|
}
|
}
|
}
|
}
|
|
private fun initListener() {
|
// 设置支付方式选择监听
|
binding.newCardPaymentMethod.setOnCheckedChangeListener { group, checkedId ->
|
paymentMethod = when (checkedId) {
|
R.id.newCard_cashPayment -> "现金"
|
R.id.newCard_posPayment -> "POS机"
|
R.id.newCard_bankTransfer -> "银行转账"
|
else -> "现金"
|
}
|
}
|
|
// 设置开卡按钮点击监听
|
binding.newCardRegistBtn.setOnClickListener {
|
if (cardPhysicalId.isEmpty()) {
|
// 如果尚未读取到卡物理ID,显示NFC读卡界面
|
binding.nfcContainer.visibility = View.VISIBLE
|
} else {
|
// 已读取到卡物理ID,进行开卡操作
|
registerNewCard()
|
}
|
}
|
}
|
|
private fun registerNewCard() {
|
// 获取充值金额
|
val rechargeAmountStr = binding.newCardRechargeAmount.text.toString()
|
val rechargeAmount = if (rechargeAmountStr.isEmpty()) 0.0 else rechargeAmountStr.toDouble()
|
|
// 获取工本费
|
val cardFeeStr = binding.newCardCardFee.text.toString()
|
val cardFee = if (cardFeeStr.isEmpty()) 0.0 else cardFeeStr.toDouble()
|
|
// 格式化金额为两位小数
|
val formattedRechargeAmount = String.format("%.2f", rechargeAmount)
|
val formattedCardFee = String.format("%.2f", cardFee)
|
|
// 获取支付方式ID
|
val paymentId = when (paymentMethod) {
|
"现金" -> 1
|
"POS机" -> 2
|
"银行转账" -> 3
|
else -> 1
|
}
|
|
val remark = binding.newCardRemark.text.toString()
|
|
// 构建请求参数
|
val params = HashMap<String, Any>()
|
params["cardAddr"] = cardPhysicalId // 水卡地址(物理ID)
|
params["clientNum"] = binding.newCardFarmerCode.text.toString() // 农户编号
|
params["cardCost"] = (cardFee * 100).toInt() // 购卡金额(工本费)转为分
|
params["amount"] = (rechargeAmount * 100).toInt() // 充值金额转为分
|
params["paymentId"] = paymentId // 支付方式
|
params["remarks"] = remark // 备注
|
params["operator"] = BaseApplication.userId // 操作人ID
|
|
// 执行卡片激活API请求
|
ApiManager.getInstance().requestPostLoading(
|
this,
|
"sell/card/active",
|
String::class.java,
|
params,
|
object : SubscriberListener<BaseResponse<String>>() {
|
override fun onNext(response: BaseResponse<String>) {
|
if (response.success) {
|
// 保存开卡信息到数据库
|
val cardRegistration = CardRegistrationBean(
|
cardNumber = cardPhysicalId,
|
userName = binding.newCardUserName.text.toString(),
|
idCard = binding.newCardIdCard.text.toString(),
|
farmerCode = binding.newCardFarmerCode.text.toString(),
|
cardFee = cardFee,
|
remark = binding.newCardRemark.text.toString(),
|
paymentMethod = paymentId,
|
isReported = true,
|
isCardWritten = true
|
)
|
|
// 使用协程在后台线程中保存数据
|
lifecycleScope.launch {
|
try {
|
BaseDaoSingleton.getInstance(this@NewCard2Activity).cardRegistrationDao().insert(cardRegistration)
|
Toast.makeText(this@NewCard2Activity, "开卡成功", Toast.LENGTH_SHORT).show()
|
setResult(RESULT_OK)
|
finish()
|
} catch (e: Exception) {
|
Toast.makeText(this@NewCard2Activity, "保存开卡信息失败: ${e.message}", Toast.LENGTH_SHORT).show()
|
}
|
}
|
} else {
|
// 激活失败
|
Toast.makeText(
|
this@NewCard2Activity,
|
"开卡失败: ${response.msg}",
|
Toast.LENGTH_SHORT
|
).show()
|
}
|
}
|
|
override fun onError(e: Throwable?) {
|
super.onError(e)
|
// 请求异常
|
Toast.makeText(
|
this@NewCard2Activity,
|
"开卡失败: ${e?.message ?: "网络异常"}",
|
Toast.LENGTH_SHORT
|
).show()
|
}
|
}
|
)
|
}
|
|
override fun onResume() {
|
super.onResume()
|
// 开启前台调度系统,优先处理NFC标签
|
|
}
|
|
override fun onPause() {
|
super.onPause()
|
// 关闭前台调度系统
|
|
}
|
|
override fun onNfcBack(intent: Intent) {
|
var cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumber()
|
if (!cardNumber.isEmpty()) {
|
// 保存卡物理ID
|
cardPhysicalId = cardNumber
|
// 更新UI
|
binding.newCardArerNumber.text = cardNumber
|
// 隐藏NFC读卡界面
|
binding.nfcContainer.visibility = View.GONE
|
binding.centerScroll.visibility = View.VISIBLE
|
binding.newCardRegistBtn.visibility = View.VISIBLE
|
}
|
}
|
|
|
|
|
|
|
|
}
|