| | |
| | | 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, |
| | |
| | | savedInstanceState: Bundle? |
| | | ): View? { |
| | | binding = FragmentRechargeBinding.inflate(inflater, container, false) |
| | | return binding?.root; |
| | | 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() |
| | | } |
| | | } |
| | | } |