package com.dayu.general.activity
|
|
import android.content.Intent
|
import android.os.Bundle
|
import android.view.LayoutInflater
|
import android.view.View
|
import android.view.ViewGroup
|
import androidx.fragment.app.Fragment
|
import com.dayu.baselibrary.net.subscribers.SubscriberListener
|
import com.dayu.baselibrary.tools.nfc.NfcReadAdapter
|
import com.dayu.baselibrary.utils.ToastUtil
|
import com.dayu.baselibrary.view.ConfirmDialog
|
import com.dayu.general.bean.net.CardInfoResult
|
import com.dayu.general.databinding.FragmentRechargeBinding
|
import com.dayu.general.net.ApiManager
|
import com.dayu.general.net.BaseResponse
|
import com.dayu.general.tool.NfcReadHelper
|
|
class RechargeFragment : Fragment() {
|
var binding: FragmentRechargeBinding? = null
|
private var cardNumber: String? = null
|
|
override fun onCreateView(
|
inflater: LayoutInflater,
|
container: ViewGroup?,
|
savedInstanceState: Bundle?
|
): View? {
|
binding = FragmentRechargeBinding.inflate(inflater, container, false)
|
return binding?.root
|
}
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
super.onViewCreated(view, savedInstanceState)
|
initView()
|
|
}
|
|
private fun initView() {
|
// 初始化界面显示读卡状态
|
binding?.rechargeReadLL?.visibility = View.VISIBLE
|
}
|
|
|
|
private fun resetView() {
|
// 重置界面显示读卡状态
|
binding?.rechargeReadLL?.visibility = View.VISIBLE
|
}
|
|
/**
|
* 处理NFC刷卡信息
|
* 该方法由MainActivity调用
|
*/
|
fun handleNfcIntent(intent: Intent) {
|
activity?.let { activity ->
|
try {
|
// 检查intent中是否包含NFC Tag
|
if (intent.getParcelableExtra<android.nfc.Tag>(android.nfc.NfcAdapter.EXTRA_TAG) == null) {
|
ToastUtil.show("未检测到NFC卡片,请确保卡片已正确放置")
|
return
|
}
|
|
// 使用NfcReadAdapter读取卡号
|
val nfcAdapter = NfcReadHelper.getInstance(intent, activity)
|
cardNumber = nfcAdapter.getCardNumber()
|
|
if (cardNumber.isNullOrEmpty()) {
|
ToastUtil.show("读卡失败,请重新刷卡")
|
return
|
}
|
|
// 根据卡号获取卡片详细信息
|
getCardInfo(cardNumber!!)
|
} catch (e: Exception) {
|
ToastUtil.show("读卡异常:${e.message}")
|
e.printStackTrace()
|
}
|
}
|
}
|
|
/**
|
* 获取卡片详细信息
|
*/
|
private fun getCardInfo(cardNumber: String) {
|
activity?.let { activity ->
|
val map = mutableMapOf<String, Any>()
|
map["cardAddr"] = cardNumber
|
ApiManager.getInstance().requestGetLoading(
|
activity,
|
"terminal/card/readCard", // 假设API路径
|
CardInfoResult::class.java,
|
map,
|
object : SubscriberListener<BaseResponse<CardInfoResult>>() {
|
override fun onNext(t: BaseResponse<CardInfoResult>) {
|
if (t.success) {
|
// 跳转到充值详情页面
|
RechargeDetailActivity.start(activity, t.content, cardNumber)
|
} else {
|
// 处理获取失败的情况
|
handleCardInfoError(t.code, t.msg)
|
}
|
}
|
|
override fun onError(e: Throwable?) {
|
super.onError(e)
|
ToastUtil.show("获取卡信息失败: ${e?.message ?: "网络异常,请检查网络连接"}")
|
// 重置界面状态
|
resetView()
|
}
|
}
|
)
|
}
|
}
|
|
/**
|
* 处理卡信息获取错误
|
*/
|
private fun handleCardInfoError(code: String?, msg: String?) {
|
val errorTitle: String
|
val errorMessage: String
|
|
when (code) {
|
"1001" -> {
|
// 数据不存在的特殊处理
|
errorTitle = "卡片未注册"
|
errorMessage = "该卡片未在系统中注册,请先进行开卡操作后再充值。"
|
}
|
else -> {
|
// 其他错误的通用处理
|
errorTitle = "获取卡信息失败"
|
errorMessage = when {
|
msg.isNullOrBlank() -> "获取卡信息失败,请重新刷卡重试。"
|
msg.contains("数据不存在") -> "该卡片未在系统中注册,请先进行开卡操作后再充值。"
|
msg.contains("网络") -> "网络连接异常,请检查网络连接后重新刷卡。"
|
msg.contains("超时") -> "网络请求超时,请重新刷卡重试。"
|
else -> "获取卡信息失败:$msg\n\n请重新刷卡重试。"
|
}
|
}
|
}
|
|
// 显示确认对话框
|
activity?.let { activity ->
|
val confirmDialog = ConfirmDialog(activity, errorTitle, errorMessage) {
|
// 点击确认按钮后关闭对话框并重置界面
|
resetView()
|
}
|
confirmDialog.show()
|
}
|
}
|
}
|