From 80eb39909e0d5c181dc8d6e282a292146ec51e21 Mon Sep 17 00:00:00 2001 From: zuoxiao <lf_zuo@163.com> Date: 星期三, 25 六月 2025 14:36:04 +0800 Subject: [PATCH] refactor(card): 重构卡片制作流程并添加项目号支持 --- generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt | 634 +++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 432 insertions(+), 202 deletions(-) diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt index b8bd087..8539f83 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt @@ -7,7 +7,11 @@ import com.dayu.baselibrary.tools.nfc.NFCCallBack import com.dayu.baselibrary.utils.MornyUtil import com.dayu.baselibrary.utils.ToastUtil +import com.dayu.general.BaseApplication +import com.dayu.general.bean.card.AreaCard +import com.dayu.general.bean.card.CheckCard import com.dayu.general.bean.card.ClearCard +import com.dayu.general.bean.card.DebugCard import com.dayu.general.bean.card.UserCard import com.dayu.general.dao.BaseDaoSingleton import com.dayu.general.databinding.ActivityNfcWriteGeBinding @@ -20,39 +24,79 @@ import kotlinx.coroutines.launch /** + * NFC鍐欏崱鎿嶄綔鐣岄潰 + * + * 鍔熻兘璇存槑锛� + * 1. 鏀寔澶氱鍗$被鍨嬬殑鍐欏崱鎿嶄綔锛堝紑鍗°�佸厖鍊笺�侀攢鍗°�佽繑杩樸�佽ˉ鎵c�佽ˉ鍗°�佹鏌ュ崱銆佸尯鍩熻〃鍙峰崱銆佽皟璇曞崱绛夛級 + * 2. 閫氳繃NFC鎶�鏈皢鏁版嵁鍐欏叆IC鍗� + * 3. 鍐欏崱鎴愬姛鍚庡悜鏈嶅姟鍣ㄤ笂鎶ユ搷浣滅粨鏋� + * 4. 鏇存柊鏈湴鏁版嵁搴撲腑鐨勫啓鍗$姸鎬� + * * @author: zuo * @date: 2021/3/30 - * @description:鍐欏崱鐣岄潰 + * @description: 鍐欏崱鐣岄潰 */ class NfcWreatActivity : BaseNfcActivity() { + + /** 鏁版嵁缁戝畾瀵硅薄 */ var binding: ActivityNfcWriteGeBinding? = null + + /** 鍗$被鍨嬫爣璇� */ var cardType = "" + + /** 鍗″湴鍧�/鍗″彿 */ var cardAddr = "" + + /** 鍗″伐鏈垂锛堝垎涓哄崟浣嶏級 */ var cardFee = 0 - // 鍏呭�肩浉鍏抽噾棰� + // ==================== 鍏呭�肩浉鍏抽噾棰� ==================== + /** 鍏呭�奸噾棰濓紙鍏冿級 */ private var rechargeAmount = 0.0 + + /** 璧犻�侀噾棰濓紙鍏冿級 */ private var bonusAmount = 0.0 - // 閿�鍗$浉鍏充俊鎭� + // ==================== 閿�鍗$浉鍏充俊鎭� ==================== + /** 閫�娆鹃噾棰濓紙鍏冿級 */ private var refundAmount = 0.0 + + /** 鍗″唴浣欓锛堝厓锛� */ private var cardBalance = 0.0 - // 杩旇繕鐩稿叧淇℃伅 + // ==================== 杩旇繕鐩稿叧淇℃伅 ==================== + /** 杩旇繕閲戦锛堝厓锛� */ private var returnAmount = 0.0 - // 琛ユ墸鐩稿叧淇℃伅 + // ==================== 琛ユ墸鐩稿叧淇℃伅 ==================== + /** 琛ユ墸閲戦锛堝厓锛� */ private var deductAmount = 0.0 - // 琛ュ崱鐩稿叧淇℃伅 + // ==================== 琛ュ崱鐩稿叧淇℃伅 ==================== + /** 琛ュ崱宸ユ湰璐癸紙鍏冿級 */ private var cardCost = 0.0 + + /** 琛ュ崱閲戦锛堝厓锛� */ private var reissueAmount = 0.0 - //璁㈠崟缂栧彿 + /** 璁㈠崟缂栧彿 */ var orderNumber = "" + + /** 鐢ㄦ埛鍗″璞★紝鍖呭惈瑕佸啓鍏ュ崱鍐呯殑鎵�鏈夋暟鎹� */ private lateinit var userCard: UserCard - private var operationTypeCode = -1; + + /** 鎿嶄綔绫诲瀷浠g爜 */ + private var operationTypeCode = -1 + + /** 鎿嶄綔绫诲瀷鏋氫妇 */ private var operationType: CardOperationType? = null + + // ==================== 绠$悊鍗″埗浣滅浉鍏冲弬鏁� ==================== + /** 鍖哄煙鍙凤紙12浣嶆暟瀛楋級 */ + private var regionNumber: String = "" + + /** 椤圭洰鍙凤紙1-255锛� */ + private var projectNumber: String = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -62,9 +106,11 @@ } /** - * 鑾峰彇鏁版嵁 + * 鑾峰彇浼犲叆鐨勫垵濮嬪寲鏁版嵁 + * 浠嶪ntent涓彁鍙栧啓鍗℃墍闇�鐨勫悇绉嶅弬鏁� */ private fun getInitData() { + // 鑾峰彇鍩烘湰鍗′俊鎭� cardType = intent?.getStringExtra("cardType") ?: "" cardAddr = intent?.getStringExtra("cardAddr") ?: "" operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1 @@ -89,185 +135,282 @@ cardCost = intent?.getDoubleExtra("cardCost", 0.0) ?: 0.0 reissueAmount = intent?.getDoubleExtra("reissueAmount", 0.0) ?: 0.0 + // 鑾峰彇鍗″伐鏈垂 if (intent?.hasExtra("cardFee") == true) { cardFee = intent?.getIntExtra("cardFee", 0) ?: 0 } + + // 鑾峰彇鐢ㄦ埛鍗″璞★紙鍏煎涓嶅悓Android鐗堟湰锛� if (intent?.hasExtra("userCard") == true) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) { userCard = intent?.getSerializableExtra("userCard", UserCard::class.java)!! } else { userCard = (intent?.getSerializableExtra("userCard") as? UserCard)!! } - } + + // 鑾峰彇鍖哄煙鍙峰拰椤圭洰鍙� + regionNumber = intent?.getStringExtra("regionNumber") ?: "" + projectNumber = intent?.getStringExtra("projectNumber") ?: "" + + // 楠岃瘉orderNumber涓嶈兘涓虹┖ + if (orderNumber.isEmpty()) { + ToastUtil.show("璁㈠崟鍙蜂笉鑳戒负绌猴紝璇烽噸鏂版搷浣�") + finish() + return + } + + // 鏍规嵁鎿嶄綔绫诲瀷璁剧疆鐣岄潰鏄剧ず鍐呭 if (operationTypeCode != -1) { - when (operationType) { - CardOperationType.CleanCard -> { - val textData = StringBuilder() - - // 鍒ゆ柇鏄惁鏉ヨ嚜閿�鍗℃搷浣滐紙鏈夐��娆鹃噾棰濇垨鍗″唴浣欓淇℃伅锛� - if (refundAmount > 0 || cardBalance > 0) { - textData.append("閿�鍗℃竻闆舵搷浣淺n") - textData.append("鍗″湴鍧�锛�$cardAddr\n") - - if (cardBalance > 0) { - textData.append("鍗″唴浣欓锛�${String.format("%.2f", cardBalance)}鍏僜n") - } - - if (refundAmount > 0) { - textData.append("閫�娆鹃噾棰濓細${String.format("%.2f", refundAmount)}鍏�") - } else { - textData.append("鏃犻��娆鹃噾棰�") - } - } else { - textData.append("娓呴浂鍗″啓鍗�") - } - - binding?.cardData?.text = textData.toString() - } - - CardOperationType.OpenCard -> { - var textData = StringBuilder() - textData.append("鐢ㄦ埛寮�鍗n") - if (cardFee != 0) { - textData.append("宸ユ湰璐癸細" + cardFee + "鍏僜n") - } - if (userCard.balance != 0) { - textData.append("鍏呭�奸噾棰濓細" + MornyUtil.changeF2Y(userCard.balance) + "鍏�") - } - - binding?.cardData?.text = textData.toString() - } - - CardOperationType.Recharge -> { - var textData = StringBuilder() - textData.append("鐢ㄦ埛鍏呭�糪n") - - // 鏄剧ず鍏呭�奸噾棰� - if (rechargeAmount > 0) { - textData.append( - "鍏呭�奸噾棰濓細" + String.format( - "%.2f", - rechargeAmount - ) + "鍏僜n" - ) - } - - // 鏄剧ず璧犻�侀噾棰� - if (bonusAmount > 0) { - textData.append("璧犻�侀噾棰濓細" + String.format("%.2f", bonusAmount) + "鍏僜n") - } - - // 鏄剧ず鎬婚噾棰濓紙鍐欏叆鍗″唴鐨勬�讳綑棰濓級 - if (userCard.balance != 0) { - val totalBalanceInYuan = userCard.balance / 100.0 // 杞崲涓哄厓 - textData.append( - "鍏呭�煎悗浣欓锛�" + MornyUtil.changeF2Y(userCard.balance)+ "鍏�" - ) - } - - binding?.cardData?.text = textData.toString() - } - - CardOperationType.CancelCard -> { - var textData = StringBuilder() - textData.append("閿�鍗n") - textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") - textData.append("閫�娆鹃噾棰濓細" + refundAmount + "鍏�") - binding?.cardData?.text = textData.toString() - } - - CardOperationType.ReturnCard -> { - var textData = StringBuilder() - textData.append("杩旇繕\n") - textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") - textData.append("杩旇繕閲戦锛�" + returnAmount + "鍏�") - binding?.cardData?.text = textData.toString() - } - - CardOperationType.DeductCard -> { - var textData = StringBuilder() - textData.append("琛ユ墸\n") - textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") - textData.append("琛ユ墸閲戦锛�" + deductAmount + "鍏�") - binding?.cardData?.text = textData.toString() - } - - CardOperationType.ReplaceCard -> { - var textData = StringBuilder() - textData.append("琛ュ崱\n") - textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") - if (cardCost > 0) { - textData.append("宸ユ湰璐癸細" + String.format("%.2f", cardCost) + "鍏僜n") - } - if (reissueAmount > 0) { - textData.append("琛ュ崱閲戦锛�" + String.format("%.2f", reissueAmount) + "鍏�") - } - binding?.cardData?.text = textData.toString() - } - - CardOperationType.CheckCard -> { - var textData = StringBuilder() - textData.append("妫�鏌ュ崱鍒朵綔") - binding?.cardData?.text = textData.toString() - } - - CardOperationType.RegionCard -> { - var textData = StringBuilder() - textData.append("鍖哄煙琛ㄥ彿鍗″埗浣�") - binding?.cardData?.text = textData.toString() - } - - CardOperationType.DebugCard -> { - var textData = StringBuilder() - textData.append("璋冭瘯鍗″埗浣�") - binding?.cardData?.text = textData.toString() - } - - null -> TODO() - } + setupUIForOperationType() } - } + /** + * 鏍规嵁鎿嶄綔绫诲瀷璁剧疆鐣岄潰鏄剧ず鍐呭 + * 涓轰笉鍚岀殑鍗℃搷浣滅被鍨嬫樉绀虹浉搴旂殑鎻愮ず淇℃伅 + */ + private fun setupUIForOperationType() { + when (operationType) { + CardOperationType.CleanCardMake -> { + val textData = StringBuilder() + // 鍒ゆ柇鏄惁鏉ヨ嚜閿�鍗℃搷浣滐紙鏈夐��娆鹃噾棰濇垨鍗″唴浣欓淇℃伅锛� + if (refundAmount > 0 || cardBalance > 0) { + textData.append("閿�鍗℃竻闆舵搷浣淺n") + textData.append("鍗″湴鍧�锛�$cardAddr\n") + + if (cardBalance > 0) { + textData.append("鍗″唴浣欓锛�${String.format("%.2f", cardBalance)}鍏僜n") + } + + if (refundAmount > 0) { + textData.append("閫�娆鹃噾棰濓細${String.format("%.2f", refundAmount)}鍏�") + } else { + textData.append("鏃犻��娆鹃噾棰�") + } + } else { + textData.append("娓呴浂鍗″啓鍗�") + } + + binding?.cardData?.text = textData.toString() + } + + CardOperationType.OpenCard -> { + // 寮�鍗℃搷浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("鐢ㄦ埛寮�鍗n") + if (cardFee != 0) { + textData.append("宸ユ湰璐癸細" + cardFee + "鍏僜n") + } + if (userCard.balance != 0) { + textData.append("鍏呭�奸噾棰濓細" + MornyUtil.changeF2Y(userCard.balance) + "鍏�") + } + + binding?.cardData?.text = textData.toString() + } + + CardOperationType.Recharge -> { + // 鍏呭�兼搷浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("鐢ㄦ埛鍏呭�糪n") + + // 鏄剧ず鍏呭�奸噾棰� + if (rechargeAmount > 0) { + textData.append( + "鍏呭�奸噾棰濓細" + String.format( + "%.2f", + rechargeAmount + ) + "鍏僜n" + ) + } + + // 鏄剧ず璧犻�侀噾棰� + if (bonusAmount > 0) { + textData.append("璧犻�侀噾棰濓細" + String.format("%.2f", bonusAmount) + "鍏僜n") + } + + // 鏄剧ず鎬婚噾棰濓紙鍐欏叆鍗″唴鐨勬�讳綑棰濓級 + if (userCard.balance != 0) { + val totalBalanceInYuan = userCard.balance / 100.0 // 杞崲涓哄厓 + textData.append( + "鍏呭�煎悗浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏�" + ) + } + + binding?.cardData?.text = textData.toString() + } + + CardOperationType.CancelCard -> { + // 閿�鍗℃搷浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("閿�鍗n") + textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") + textData.append("閫�娆鹃噾棰濓細" + refundAmount + "鍏�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.SUPPLEMENT -> { + // 杩旇繕鎿嶄綔鏄剧ず淇℃伅 + var textData = StringBuilder() + textData.append("杩旇繕\n") + textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") + textData.append("杩旇繕閲戦锛�" + returnAmount + "鍏�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.DeductCard -> { + // 琛ユ墸鎿嶄綔鏄剧ず淇℃伅 + var textData = StringBuilder() + textData.append("琛ユ墸\n") + textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") + textData.append("琛ユ墸閲戦锛�" + deductAmount + "鍏�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.ReplaceCard -> { + // 琛ュ崱鎿嶄綔鏄剧ず淇℃伅 + var textData = StringBuilder() + textData.append("琛ュ崱\n") + textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") + if (cardCost > 0) { + textData.append("宸ユ湰璐癸細" + String.format("%.2f", cardCost) + "鍏僜n") + } + if (reissueAmount > 0) { + textData.append("琛ュ崱閲戦锛�" + String.format("%.2f", reissueAmount) + "鍏�") + } + binding?.cardData?.text = textData.toString() + } + + CardOperationType.CheckCardMake -> { + // 妫�鏌ュ崱鍒朵綔鏄剧ず淇℃伅 + var textData = StringBuilder() + textData.append("妫�鏌ュ崱鍒朵綔") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.RegionCardMake -> { + // 鍖哄煙琛ㄥ彿鍗″埗浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("鍖哄煙琛ㄥ彿鍗″埗浣淺n") + if (regionNumber.isNotEmpty()) { + textData.append("鍖哄煙鍙凤細$regionNumber\n") + } + if (projectNumber.isNotEmpty()) { + textData.append("椤圭洰鍙凤細$projectNumber") + } + binding?.cardData?.text = textData.toString() + } + + CardOperationType.DebugCardMake -> { + // 璋冭瘯鍗″埗浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("璋冭瘯鍗″埗浣�") + binding?.cardData?.text = textData.toString() + } + + + CardOperationType.CheckCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔妫�鏌ュ崱") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.DebugCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔璋冭瘯鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.CleanCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔娓呴浂鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.IpCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔IP璁剧疆鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.AreaCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔鍩熷悕璁剧疆鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.GpsCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔GPS鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.ValveTimeCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔鏃堕棿閰嶇疆鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.ElectricPriceCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔鍙栨暟鍗�") + binding?.cardData?.text = textData.toString() + } + + null -> TODO() + CardOperationType.MANAGEMENT_CARD_WRITE -> TODO() + } + } + + /** + * NFC鍒峰崱鍥炶皟澶勭悊 + * 褰撶敤鎴峰皢鍗$墖璐磋繎璁惧鏃惰Е鍙戞鏂规硶 + * + * @param intent NFC鎰忓浘锛屽寘鍚崱鐗囦俊鎭� + */ override fun onNfcBack(intent: Intent) { + // 璇诲彇鍗″彿 val nfcReadHelper = NfcReadHelper.getInstance(intent, this) // 浣跨敤姝e父鐨刧etCardNumber()鏂规硶锛屽畠浼氳嚜鍔ㄥ叧闂繛鎺� val cardNumber = nfcReadHelper.getCardNumber() + // 楠岃瘉鍗″彿鏄惁涓庨鏈熶竴鑷� if (cardNumber.isNotEmpty() && cardNumber == cardAddr) { val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this) + + // 鏍规嵁鎿嶄綔绫诲瀷鎵ц鐩稿簲鐨勫啓鍗℃搷浣� when (operationType) { - CardOperationType.CleanCard -> { - - + CardOperationType.CleanCardMake -> { + // 娓呴浂鍗℃搷浣滐紙鏆傛湭瀹炵幇鍏蜂綋閫昏緫锛� } CardOperationType.OpenCard -> { + // 寮�鍗℃搷浣滐細灏嗙敤鎴蜂俊鎭啓鍏ュ崱鐗� nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) - + // 鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") } } } }) - } CardOperationType.Recharge -> { + // 鍏呭�兼搷浣滐細鏇存柊鍗″唴浣欓 nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 鍏呭�煎啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("鍏呭�煎啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") } @@ -277,14 +420,16 @@ } CardOperationType.CancelCard -> { + // 閿�鍗℃搷浣滐細灏嗗崱绫诲瀷璁剧疆涓烘棤鏁� var userCard = UserCard() - userCard.cardType = "00"; + userCard.cardType = "00" // 璁剧疆涓烘棤鏁堝崱绫诲瀷 nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 閿�鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("閿�鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") } @@ -293,13 +438,15 @@ }) } - CardOperationType.ReturnCard -> { + CardOperationType.SUPPLEMENT -> { + // 杩旇繕鎿嶄綔锛氭洿鏂板崱鍐呬綑棰� nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 杩旇繕鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("杩旇繕鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") } @@ -309,12 +456,14 @@ } CardOperationType.DeductCard -> { + // 琛ユ墸鎿嶄綔锛氭洿鏂板崱鍐呬綑棰� nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 琛ユ墸鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("琛ユ墸鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") } @@ -324,12 +473,14 @@ } CardOperationType.ReplaceCard -> { + // 琛ュ崱鎿嶄綔锛氬皢鍘熷崱鏁版嵁鍐欏叆鏂板崱 nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 琛ュ崱鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("琛ュ崱鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") } @@ -338,33 +489,115 @@ }) } - CardOperationType.CheckCard -> { - // 妫�鏌ュ崱鍐欏崱閫昏緫 - ToastUtil.show("妫�鏌ュ崱鍐欏崱鎴愬姛!") - postCardData(cardAddr) + CardOperationType.CheckCardMake -> { + // 妫�鏌ュ崱鍐欏崱閫昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛� + var checkCard = CheckCard() + nfcWreatHelper.writeDataAsync( + checkCard.getZeroBytes(), + 7, + 0, + object : NFCCallBack { + override fun isSusses(flag: Boolean, msg: String?) { + // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� + runOnUiThread { + if (flag) { + // 妫�鏌ュ崱鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("妫�鏌ュ崱鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") + } + } + } + }) } - - CardOperationType.RegionCard -> { - // 鍖哄煙琛ㄥ彿鍗″啓鍗¢�昏緫 - ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔�!") - postCardData(cardAddr) + + CardOperationType.RegionCardMake -> { + // 鍖哄煙琛ㄥ彿鍗″啓鍗¢�昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛� + var areaCard = AreaCard() + areaCard.areaNumber = regionNumber.toInt() + areaCard.projectCode = projectNumber.toInt() + nfcWreatHelper.writeDataAsync( + areaCard.getZeroBytes(), + 7, + 0, + object : NFCCallBack { + override fun isSusses(flag: Boolean, msg: String?) { + // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� + runOnUiThread { + if (flag) { + // 鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") + } + } + } + }) } - - CardOperationType.DebugCard -> { - // 璋冭瘯鍗″啓鍗¢�昏緫 - ToastUtil.show("璋冭瘯鍗″啓鍗℃垚鍔�!") - postCardData(cardAddr) + + + CardOperationType.DebugCardMake -> { + // 璋冭瘯鍗″啓鍗¢�昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛� + var debugCard = DebugCard() + nfcWreatHelper.writeDataAsync( + debugCard.getZeroBytes(), + 7, + 0, + object : NFCCallBack { + override fun isSusses(flag: Boolean, msg: String?) { + // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� + runOnUiThread { + if (flag) { + // 璋冭瘯鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("璋冭瘯鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") + } + } + } + }) } - + // 鏂扮殑绠$悊鍗″埗浣滄搷浣滅被鍨嬪鐞� + CardOperationType.RegionCardMake, + CardOperationType.CheckCardMake, + CardOperationType.CleanCardMake, + CardOperationType.IpCardMake, + CardOperationType.AreaCardMake, + CardOperationType.GpsCardMake, + CardOperationType.ValveTimeCardMake, + CardOperationType.ElectricPriceCardMake -> { + // 绠$悊鍗″啓鍗¢�昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛� + val operationName = when (operationType) { + CardOperationType.RegionCardMake -> "鍖哄煙琛ㄥ彿鍗�" + CardOperationType.CheckCardMake -> "妫�鏌ュ崱" + CardOperationType.DebugCardMake -> "璋冭瘯鍗�" + CardOperationType.CleanCardMake -> "娓呴浂鍗�" + CardOperationType.IpCardMake -> "IP璁剧疆鍗�" + CardOperationType.AreaCardMake -> "鍩熷悕璁剧疆鍗�" + CardOperationType.GpsCardMake -> "GPS鍗�" + CardOperationType.ValveTimeCardMake -> "鏃堕棿閰嶇疆鍗�" + CardOperationType.ElectricPriceCardMake -> "鍙栨暟鍗�" + else -> "绠$悊鍗�" + } + ToastUtil.show("${operationName}鍐欏崱鎴愬姛!") + updateCardWrittenStatus(cardAddr) + } + null -> TODO() + CardOperationType.MANAGEMENT_CARD_WRITE -> TODO() } } else { + // 鍗″彿涓嶅尮閰嶏紝鎻愮ず鐢ㄦ埛 ToastUtil.show("鍗$墖閿欒锛屽綋鍓嶅埛鐨勫崱涓庡垰鍒氱殑鍗′笉涓�鑷�") } } /** - * 鏇存柊CardRegistrationBean涓殑isCardWritten鐘舵�佷负true + * 鏇存柊鏈湴鏁版嵁搴撲腑鐨勫啓鍗$姸鎬� + * 灏咰ardRegistrationBean涓殑isCardWritten鐘舵�佽缃负true + * 鐒跺悗璺宠浆鍒板啓鍗℃垚鍔熺晫闈紝骞堕�氱煡MainActivity璋冪敤postCardData + * + * @param cardNumber 鍗″彿 */ private fun updateCardWrittenStatus(cardNumber: String) { lifecycleScope.launch { @@ -372,27 +605,36 @@ val cardRegistrationDao = BaseDaoSingleton.getInstance(this@NfcWreatActivity) .cardRegistrationDao() - // 鏍规嵁鍗″彿鏌ユ壘CardRegistrationBean璁板綍 - val cardRegistration = cardRegistrationDao.getByCardNumber(cardNumber) + // 鏍规嵁璁㈠崟鍙锋煡鎵綜ardRegistrationBean璁板綍 + val cardRegistration = cardRegistrationDao.getByOrderId(orderNumber) + if (cardRegistration != null) { // 鍒涘缓鏇存柊鍚庣殑CardRegistrationBean瀵硅薄锛屽皢isCardWritten璁剧疆涓簍rue val updatedCardRegistration = cardRegistration.copy(isCardWritten = true) // 鏇存柊鏁版嵁搴撹褰� cardRegistrationDao.update(updatedCardRegistration) - // 鍦ㄤ富绾跨▼涓叧闂瑼ctivity + // 鍦ㄤ富绾跨▼涓叧闂瑼ctivity骞惰烦杞埌鎴愬姛椤甸潰 runOnUiThread { setResult(RESULT_OK) finish() + + // 璺宠浆鍒板啓鍗℃垚鍔熺晫闈� Intent(this@NfcWreatActivity, CardWriteSuccessActivity::class.java).apply { putExtra("cardNumber", cardNumber) - putExtra("userCard", userCard) + if (::userCard.isInitialized) { + putExtra("userCard", userCard) + } putExtra("operationTypeCode", operationTypeCode) startActivity(this) } + + // 閫氱煡MainActivity璋冪敤postCardData + notifyMainActivityToPostCardData(cardNumber) } } } catch (e: Exception) { + // 璁板綍寮傚父淇℃伅 CrashReport.postCatchedException(e) e.printStackTrace() runOnUiThread { @@ -402,40 +644,28 @@ } } - fun postCardData(cardAddr: String) { - - val map = mutableMapOf<String, Any>() - - if (cardAddr.isNotEmpty()) { - map["cardAddr"] = cardAddr - } - - map["operateType"] = operationTypeCode - if (orderNumber.isNotEmpty()) { - map["orderNumber"] = orderNumber - } - // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� - ApiManager.getInstance().requestPostLoading( - this, - "terminal/card/termCallBack", - String::class.java, - map, - object : SubscriberListener<BaseResponse<String>>() { - override fun onNext(t: BaseResponse<String>) { - if (t.success) { - updateCardWrittenStatus(cardAddr) - } else { - // 澶勭悊鎼滅储澶辫触鐨勬儏鍐� - ToastUtil.show(t.msg) - } - } - - override fun onError(e: Throwable?) { - super.onError(e) - ToastUtil.show("涓婃姤澶辫触: ${e?.message ?: "鏈煡閿欒"}") - } + /** + * 閫氱煡MainActivity璋冪敤postCardData涓婃姤鍐欏崱缁撴灉 + * + * @param cardNumber 鍗″彿 + */ + private fun notifyMainActivityToPostCardData(cardNumber: String) { + try { + val mainActivity = BaseApplication.getMainActivity() + if (mainActivity != null) { + // 璋冪敤MainActivity鐨刾ostCardData鏂规硶 + mainActivity.postCardData( + cardAddr = cardNumber, + operationTypeCode = operationTypeCode, + orderNumber = orderNumber, + regionNumber = regionNumber, + projectNumber = projectNumber + ) } - ) + } catch (e: Exception) { + e.printStackTrace() + CrashReport.postCatchedException(e) + } } -- Gitblit v1.8.0