From 32d1501e6fe6338eb6dc51c26df7fe0808caac0d Mon Sep 17 00:00:00 2001 From: zuoxiao <lf_zuo@163.com> Date: 星期四, 26 六月 2025 15:05:28 +0800 Subject: [PATCH] feat(general): 优化写卡成功界面并添加开卡功能- 重新设计写卡成功界面布局,增加滚动视图以支持长文本显示 - 添加开卡功能相关的UI和逻辑,包括工本费和充值金额的展示- 增加用户姓名和卡片信息的显示 - 优化打印凭证的内容和格式 -调整NFC连接逻辑,提高连接成功率 --- generallibrary/src/main/res/drawable/bg_button_outline.xml | 9 generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt | 1 generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt | 307 +++++++++++++++++++++++------- generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt | 8 generallibrary/src/main/res/drawable/bg_button_outline_selector.xml | 21 ++ generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt | 1 generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt | 97 ++++++--- baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java | 29 -- generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt | 1 generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt | 1 generallibrary/src/main/res/layout/activity_card_write_success.xml | 112 ++++++---- generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt | 2 generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt | 1 13 files changed, 412 insertions(+), 178 deletions(-) diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java index 30068ec..f58e809 100644 --- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java +++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java @@ -356,33 +356,8 @@ } try { - // 杩炴帴NFC - 纭繚鎬绘槸寤虹珛杩炴帴锛屽鍔犻噸璇曟満鍒� - int retryCount = 3; - boolean connected = false; - while (retryCount > 0 && !connected) { - try { - if (!mfc.isConnected()) { - mfc.connect(); - } - connected = mfc.isConnected(); - if (!connected) { - Thread.sleep(100); // 鐭殏绛夊緟鍚庨噸璇� - retryCount--; - } - } catch (Exception e) { - retryCount--; - if (retryCount <= 0) { - throw e; - } - Thread.sleep(100); - } - } - - if (!connected) { - if (callBack != null) { - callBack.isSusses(false, "NFC杩炴帴澶辫触锛岃閲嶆柊闈犺繎鍗$墖"); - } - return false; + if (isConnect) { + mfc.connect(); } for (int i = 0; i < passWord.size(); i++) { diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt index 06c3b3f..e6256ba 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt @@ -389,6 +389,7 @@ putExtra("orderNumber", cancelResult.orderNo) putExtra("refundAmount", refundAmount) putExtra("userCard", userCard) + putExtra("cardInfo", cardInfo) // 浼犻�掑綋鍓嶅崱鍐呬綑棰濅俊鎭� cardInfo?.let { info -> putExtra("cardBalance", info.balance ?: 0.0) diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt index 4351298..ad28f9c 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardDeductActivity.kt @@ -384,6 +384,7 @@ putExtra("orderNumber", deductResult.orderNo) putExtra("deductAmount", deductAmount) putExtra("userCard", updatedUserCard as java.io.Serializable) + putExtra("cardInfo", cardInfo) } startActivity(intent) finish() diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt index fd354f1..59dfd9b 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt @@ -376,6 +376,7 @@ putExtra("paymentMethod", paymentMethod) // 浼犻�掓敮浠樻柟寮� putExtra("paymentId", paymentId) // 浼犻�掓敮浠樻柟寮廔D putExtra("userCard", updatedUserCard as java.io.Serializable) + putExtra("cardInfo", cardInfo) } startActivity(intent) finish() diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt index 2da04cd..56ff22c 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt @@ -385,6 +385,7 @@ putExtra("orderNumber", returnResult.orderNo) putExtra("returnAmount", returnAmount) putExtra("userCard", updatedUserCard as java.io.Serializable) + putExtra("cardInfo", cardInfo) } startActivity(intent) finish() diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt index 6452333..6872853 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt @@ -6,6 +6,7 @@ import com.dayu.baselibrary.utils.MornyUtil import com.dayu.general.BaseApplication import com.dayu.general.bean.card.UserCard +import com.dayu.general.bean.net.CardInfoResult import com.dayu.general.databinding.ActivityCardWriteSuccessBinding import com.dayu.general.tool.CardOperationType @@ -22,11 +23,12 @@ private var operationTypeCode: Int = -1 private var userCard: UserCard? = null private var orderNumber: String? = null - + private var cardInfo: CardInfoResult? = null + // 鍏呭�肩浉鍏冲弬鏁� private var rechargeAmount = 0.0 private var bonusAmount = 0.0 - + // 鍏朵粬鎿嶄綔鐩稿叧鍙傛暟 private var refundAmount = 0.0 private var cardBalance = 0.0 @@ -34,6 +36,7 @@ private var deductAmount = 0.0 private var cardCost = 0.0 private var reissueAmount = 0.0 + private var cardFee = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -45,11 +48,13 @@ cardAddr = intent.getStringExtra("cardAddr") operationTypeCode = intent.getIntExtra("operationTypeCode", -1) orderNumber = intent.getStringExtra("orderNumber") - + + cardFee = intent.getIntExtra("cardFee", 0); + // 鑾峰彇鍏呭�肩浉鍏冲弬鏁� rechargeAmount = intent.getDoubleExtra("rechargeAmount", 0.0) bonusAmount = intent.getDoubleExtra("bonusAmount", 0.0) - + // 鑾峰彇鍏朵粬鎿嶄綔鐩稿叧鍙傛暟 refundAmount = intent.getDoubleExtra("refundAmount", 0.0) cardBalance = intent.getDoubleExtra("cardBalance", 0.0) @@ -57,9 +62,13 @@ deductAmount = intent.getDoubleExtra("deductAmount", 0.0) cardCost = intent.getDoubleExtra("cardCost", 0.0) reissueAmount = intent.getDoubleExtra("reissueAmount", 0.0) - + if (intent.hasExtra("userCard")) { userCard = intent.getSerializableExtra("userCard") as UserCard + } + + if (intent.hasExtra("cardInfo")) { + cardInfo = intent.getSerializableExtra("cardInfo") as CardInfoResult } initView() @@ -84,7 +93,7 @@ "鍗$墖宸叉垚鍔熼攢鍗″苟娓呴櫎鍐呭\n鍗″彿锛�$cardNumber\n璇ュ崱鐗囧皢鏃犳硶鍐嶆浣跨敤" } binding.successMessage.text = message - + // 閿�鍗℃垚鍔熷悗鑷姩鎵撳嵃 userCard?.let { card -> doPrint(card) @@ -105,7 +114,7 @@ "鍗$墖杩旇繕鎿嶄綔宸叉垚鍔熷畬鎴怽n鍗″彿锛�$cardNumber\n鍗″唴浣欓宸叉洿鏂�" } binding.successMessage.text = message - + // 杩旇繕鎴愬姛鍚庤嚜鍔ㄦ墦鍗� userCard?.let { card -> doPrint(card) @@ -126,7 +135,7 @@ "鍗$墖琛ユ墸鎿嶄綔宸叉垚鍔熷畬鎴怽n鍗″彿锛�$cardNumber\n鍗″唴浣欓宸叉洿鏂�" } binding.successMessage.text = message - + // 琛ユ墸鎴愬姛鍚庤嚜鍔ㄦ墦鍗� userCard?.let { card -> doPrint(card) @@ -152,22 +161,36 @@ CardOperationType.Recharge -> { binding.titleBar.setCenterText("鍏呭�兼垚鍔�") binding.successTitle.text = "鍏呭�兼垚鍔�" - + val messageBuilder = StringBuilder() messageBuilder.append("鍏呭�兼搷浣滃凡鎴愬姛瀹屾垚\n") - + if (rechargeAmount > 0) { messageBuilder.append("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)}鍏僜n") } - + if (bonusAmount > 0) { messageBuilder.append("璧犻�侀噾棰濓細${String.format("%.2f", bonusAmount)}鍏僜n") } - + messageBuilder.append("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard?.balance ?: 0)}鍏�") - + binding.successMessage.text = messageBuilder.toString() - + + // 鍏呭�兼垚鍔熷悗鑷姩鎵撳嵃 + userCard?.let { card -> + doPrint(card) + } + } + + CardOperationType.OpenCard -> { + binding.titleBar.setCenterText("寮�鍗℃垚鍔�") + binding.successTitle.text = "寮�鍗℃垚鍔�" + val messageBuilder = StringBuilder() + if (rechargeAmount > 0) { + messageBuilder.append("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)}鍏僜n") + } + messageBuilder.append("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard?.balance ?: 0)}鍏�") // 鍏呭�兼垚鍔熷悗鑷姩鎵撳嵃 userCard?.let { card -> doPrint(card) @@ -193,6 +216,13 @@ finish() } + // 璁剧疆鍐嶆鎵撳嵃鎸夐挳鐐瑰嚮鐩戝惉鍣� + binding.btnReprint.setOnClickListener { + userCard?.let { card -> + doPrint(card) + } + } + // 璁剧疆鏍囬鏍忚繑鍥炴寜閽� binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) { finish() @@ -208,206 +238,341 @@ try { // 鍒涘缓鎵撳嵃鏁版嵁鍒楄〃 val data: MutableList<String> = ArrayList() - + // 鏍规嵁鎿嶄綔绫诲瀷璁剧疆涓嶅悓鐨勬墦鍗板唴瀹� val operationType = CardOperationType.fromCode(operationTypeCode) - + when (operationType) { CardOperationType.Recharge -> { // 鍏呭�兼墦鍗板唴瀹� data.add("*****************************") - data.add(" 鍏呭�煎嚟璇�") + data.add(" 鍏呭�煎嚟璇�") data.add("*****************************") - - // 娣诲姞鐢ㄦ埛缂栧彿锛堜粠UserCard涓幏鍙栵級 - if (!userCard.userCode.isNullOrEmpty()) { - data.add("鐢ㄦ埛缂栧彿锛�${userCard.userCode}") + + // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 + cardInfo?.userName?.let { userName -> + if (userName.isNotEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") + } } - + // 娣诲姞鍗″湴鍧� val cardAddress = cardNumber ?: cardAddr if (!cardAddress.isNullOrEmpty()) { data.add("鍗� 鍦� 鍧�锛�$cardAddress") } - + // 娣诲姞鐢ㄦ埛缂栧彿锛堜粠UserCard涓幏鍙栵級 if (!userCard.userCode.isNullOrEmpty()) { data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}") } - + // 娣诲姞鍏呭�奸噾棰� if (rechargeAmount > 0) { data.add("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)} 鍏�") } - + // 娣诲姞璧犻�侀噾棰� if (bonusAmount > 0) { data.add("璧犻�侀噾棰濓細${String.format("%.2f", bonusAmount)} 鍏�") } - + // 娣诲姞鍏呭�煎悗浣欓 data.add("鍏呭�煎悗浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�") - - // 娣诲姞鏃ユ湡淇℃伅 - data.add("鏃� 鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}") - + // 娣诲姞璁㈠崟鍙� if (!orderNumber.isNullOrEmpty()) { data.add("璁㈠崟鍙凤細$orderNumber") } - + // 娣诲姞璁惧鎿嶄綔鍛樹俊鎭� data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}") + // 娣诲姞鏃ユ湡淇℃伅 + data.add( + "鏃� 鏈燂細${ + DateUtil.dateToStamp( + System.currentTimeMillis(), + DateUtil.type2 + ) + }" + ) data.add("*****************************") } - + CardOperationType.ReplaceCard -> { // 琛ュ崱鎵撳嵃鍐呭 data.add("*****************************") data.add(" 琛ュ崱鍑瘉") data.add("*****************************") - + + // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 + cardInfo?.userName?.let { userName -> + if (userName.isNotEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") + } + } + val cardAddress = cardNumber ?: cardAddr if (!cardAddress.isNullOrEmpty()) { data.add("鍗� 鍦� 鍧�锛�$cardAddress") } - + if (!userCard.userCode.isNullOrEmpty()) { data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}") } - + if (cardCost > 0) { data.add("宸� 鏈� 璐癸細${String.format("%.2f", cardCost)} 鍏�") } - + if (reissueAmount > 0) { data.add("杩旇繕閲戦锛�${String.format("%.2f", reissueAmount)} 鍏�") } - + data.add("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�") - data.add("鏃� 鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}") - if (!orderNumber.isNullOrEmpty()) { data.add("璁㈠崟鍙凤細$orderNumber") } - + data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}") + data.add( + "鏃� 鏈燂細${ + DateUtil.dateToStamp( + System.currentTimeMillis(), + DateUtil.type2 + ) + }" + ) data.add("*****************************") } - + CardOperationType.CancelCard -> { // 閿�鍗℃墦鍗板唴瀹� data.add("*****************************") data.add(" 閿�鍗″嚟璇�") data.add("*****************************") - + + // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 + cardInfo?.userName?.let { userName -> + if (userName.isNotEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") + } + } + val cardAddress = cardNumber ?: cardAddr if (!cardAddress.isNullOrEmpty()) { data.add("鍗� 鍦� 鍧�锛�$cardAddress") } - + if (!userCard.userCode.isNullOrEmpty()) { data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}") } - + if (refundAmount > 0) { data.add("閫�娆鹃噾棰濓細${String.format("%.2f", refundAmount)} 鍏�") } - + data.add("鍘熷崱浣欓锛�${String.format("%.2f", cardBalance)} 鍏�") - data.add("鏃� 鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}") - + + if (!orderNumber.isNullOrEmpty()) { data.add("璁㈠崟鍙凤細$orderNumber") } - + data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}") + data.add( + "鏃� 鏈燂細${ + DateUtil.dateToStamp( + System.currentTimeMillis(), + DateUtil.type2 + ) + }" + ) data.add("*****************************") } - - CardOperationType.SUPPLEMENT -> { + + CardOperationType.SUPPLEMENT -> { // 杩旇繕鎵撳嵃鍐呭 data.add("*****************************") data.add(" 杩旇繕鍑瘉") data.add("*****************************") - + + // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 + cardInfo?.userName?.let { userName -> + if (userName.isNotEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") + } + } + val cardAddress = cardNumber ?: cardAddr if (!cardAddress.isNullOrEmpty()) { data.add("鍗� 鍦� 鍧�锛�$cardAddress") } - + if (!userCard.userCode.isNullOrEmpty()) { data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}") } - + if (returnAmount > 0) { data.add("杩旇繕閲戦锛�${String.format("%.2f", returnAmount)} 鍏�") } - + data.add("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�") - data.add("鏃� 鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}") - + + if (!orderNumber.isNullOrEmpty()) { data.add("璁㈠崟鍙凤細$orderNumber") } - + data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}") + data.add( + "鏃� 鏈燂細${ + DateUtil.dateToStamp( + System.currentTimeMillis(), + DateUtil.type2 + ) + }" + ) data.add("*****************************") } - + CardOperationType.DeductCard -> { // 琛ユ墸鎵撳嵃鍐呭 data.add("*****************************") data.add(" 琛ユ墸鍑瘉") data.add("*****************************") - + + // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 + cardInfo?.userName?.let { userName -> + if (userName.isNotEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") + } + } + val cardAddress = cardNumber ?: cardAddr if (!cardAddress.isNullOrEmpty()) { data.add("鍗� 鍦� 鍧�锛�$cardAddress") } - + if (!userCard.userCode.isNullOrEmpty()) { data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}") } - + if (deductAmount > 0) { data.add("琛ユ墸閲戦锛�${String.format("%.2f", deductAmount)} 鍏�") } - + data.add("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�") - data.add("鏃� 鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}") - + + if (!orderNumber.isNullOrEmpty()) { data.add("璁㈠崟鍙凤細$orderNumber") } - + data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}") + data.add( + "鏃� 鏈燂細${ + DateUtil.dateToStamp( + System.currentTimeMillis(), + DateUtil.type2 + ) + }" + ) data.add("*****************************") } - + + CardOperationType.OpenCard -> { + data.add("*****************************") + data.add(" 寮�鍗″嚟璇�") + data.add("*****************************") + + // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 + cardInfo?.userName?.let { userName -> + if (userName.isNotEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") + } + } + + // 娣诲姞鍗″湴鍧� + val cardAddress = cardNumber ?: cardAddr + if (!cardAddress.isNullOrEmpty()) { + data.add("鍗� 鍦� 鍧�锛�$cardAddress") + } + + // 娣诲姞鐢ㄦ埛缂栧彿锛堜粠UserCard涓幏鍙栵級 + if (!userCard.userCode.isNullOrEmpty()) { + data.add("鐢ㄦ埛缂栧彿锛�${userCard.getMyUserCode()}") + } + + // 娣诲姞鍏呭�奸噾棰� + if (rechargeAmount > 0) { + data.add("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)} 鍏�") + // 娣诲姞鍏呭�煎悗浣欓 + data.add("鍏呭�煎悗浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�") + } + + // 娣诲姞璧犻�侀噾棰� + if (cardFee > 0) { + data.add("宸ユ湰璐癸細" + MornyUtil.changeF2Y(cardFee) + "鍏�") + } + + // 娣诲姞璁㈠崟鍙� + if (!orderNumber.isNullOrEmpty()) { + data.add("璁㈠崟鍙凤細$orderNumber") + } + + // 娣诲姞璁惧鎿嶄綔鍛樹俊鎭� + data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}") + // 娣诲姞鏃ユ湡淇℃伅 + data.add( + "鏃� 鏈燂細${ + DateUtil.dateToStamp( + System.currentTimeMillis(), + DateUtil.type2 + ) + }" + ) + data.add("*****************************") + } + else -> { // 鍏朵粬鎿嶄綔鐨勯�氱敤鎵撳嵃鍐呭 data.add("*****************************") data.add(" 鎿嶄綔鍑瘉") data.add("*****************************") - + + // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 + cardInfo?.userName?.let { userName -> + if (userName.isNotEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") + } + } + val cardAddress = cardNumber ?: cardAddr if (!cardAddress.isNullOrEmpty()) { data.add("鍗� 鍦� 鍧�锛�$cardAddress") } - + data.add("鎿嶄綔绫诲瀷锛�${operationType?.description ?: "鏈煡鎿嶄綔"}") - data.add("鏃� 鏈燂細${DateUtil.dateToStamp(System.currentTimeMillis(), DateUtil.type2)}") + data.add("璁惧鎿嶄綔鍛橈細${BaseApplication.userName}") + data.add( + "鏃� 鏈燂細${ + DateUtil.dateToStamp( + System.currentTimeMillis(), + DateUtil.type2 + ) + }" + ) data.add("*****************************") } } - + // 璁剧疆鎵撳嵃瀛椾綋澶у皬 val size = 26f // 鎵ц鎵撳嵃鎿嶄綔 PrintAdater.printText(data, size, true, false) - + } catch (e: Exception) { // 鎵撳嵃寮傚父淇℃伅 e.printStackTrace() diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt index 4a7def0..b5a79ff 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt @@ -206,7 +206,7 @@ // 寮傛淇敼瀵嗙爜 nfcHelper.changePSAsync( keyList, - true, // 淇敼涓簍rue锛岀‘淇濆缓绔婲FC杩炴帴 + false, // 淇敼涓簍rue锛岀‘淇濆缓绔婲FC杩炴帴 true ) { success: Boolean, msg: String? -> if (success) { @@ -228,12 +228,6 @@ ).show() } } - } - // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException - - // 澶勭悊NFC璇诲彇缁撴灉 - NfcReadHelper.getInstance(intent, this).getCardNumber().let { cardNumber -> - } } diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt index 3f6fcb8..1be8768 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt @@ -470,6 +470,7 @@ putExtra("userCard", userCard) putExtra("operationTypeCode", CardOperationType.OpenCard.code) putExtra("cardFee", cardFee) + startActivityForResult(this, REQUEST_CODE_NFC_WRITE) } } catch (e: Exception) { 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 94a11b3..fbe415c 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt @@ -13,6 +13,7 @@ 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.bean.net.CardInfoResult import com.dayu.general.dao.BaseDaoSingleton import com.dayu.general.databinding.ActivityNfcWriteGeBinding import com.dayu.general.net.ApiManager @@ -98,6 +99,8 @@ /** 椤圭洰鍙凤紙1-255锛� */ private var projectNumber: String = "" + private var cardInfo: CardInfoResult? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityNfcWriteGeBinding.inflate(layoutInflater) @@ -116,6 +119,7 @@ operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1 orderNumber = intent?.getStringExtra("orderNumber") ?: "" operationType = CardOperationType.fromCode(operationTypeCode) + cardInfo = intent?.getSerializableExtra("cardInfo") as? CardInfoResult // 鑾峰彇鍏呭�肩浉鍏抽噾棰� rechargeAmount = intent?.getDoubleExtra("rechargeAmount", 0.0) ?: 0.0 @@ -501,14 +505,14 @@ object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� - runOnUiThread { - if (flag) { - // 妫�鏌ュ崱鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� - updateCardWrittenStatus(cardAddr) - } else { - ToastUtil.show("妫�鏌ュ崱鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") + runOnUiThread { + if (flag) { + // 妫�鏌ュ崱鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("妫�鏌ュ崱鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") + } } - } } }) } @@ -525,14 +529,14 @@ object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� - runOnUiThread { - if (flag) { - // 鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� - updateCardWrittenStatus(cardAddr) - } else { - ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") + runOnUiThread { + if (flag) { + // 鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") + } } - } } }) } @@ -548,14 +552,14 @@ object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� - runOnUiThread { - if (flag) { - // 璋冭瘯鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� - updateCardWrittenStatus(cardAddr) - } else { - ToastUtil.show("璋冭瘯鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") + runOnUiThread { + if (flag) { + // 璋冭瘯鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("璋冭瘯鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") + } } - } } }) } @@ -605,17 +609,17 @@ lifecycleScope.launch { try { val baseDaoSingleton = BaseDaoSingleton.getInstance(this@NfcWreatActivity) - + // 鏍规嵁鎿嶄綔绫诲瀷鍒ゆ柇鏄鐞嗗崱杩樻槸鐢ㄦ埛鍗℃搷浣� val isManagerCardOperation = operationTypeCode in 100..108 - + var updateSuccess = false - + if (isManagerCardOperation) { // 绠$悊鍗″埗浣滄搷浣滅被鍨嬶紝鏌ヨ鍜屾洿鏂癕anagerCardBean val managerCardDao = baseDaoSingleton.managerCardDao() val managerCard = managerCardDao.getByOrderId(orderNumber) - + if (managerCard != null) { val updatedManagerCard = managerCard.copy(isCardWritten = true) managerCardDao.update(updatedManagerCard) @@ -625,7 +629,7 @@ // 鐢ㄦ埛鍗℃搷浣滅被鍨嬶紝鏌ヨ鍜屾洿鏂癈ardRegistrationBean val cardRegistrationDao = baseDaoSingleton.cardRegistrationDao() val cardRegistration = cardRegistrationDao.getByOrderId(orderNumber) - + if (cardRegistration != null) { val updatedCardRegistration = cardRegistration.copy(isCardWritten = true) cardRegistrationDao.update(updatedCardRegistration) @@ -637,21 +641,54 @@ runOnUiThread { setResult(RESULT_OK) finish() - + // 璺宠浆鍒板啓鍗℃垚鍔熺晫闈� Intent(this@NfcWreatActivity, CardWriteSuccessActivity::class.java).apply { + + putExtra("cardNumber", cardNumber) + putExtra("cardAddr", cardAddr) + putExtra("operationTypeCode", operationTypeCode) + putExtra("orderNumber", orderNumber) + //寮�鍗$浉鍏冲弬鏁� + putExtra("cardFee", cardFee) + + // 浼犻�掑厖鍊肩浉鍏冲弬鏁� + putExtra("rechargeAmount", rechargeAmount) + putExtra("bonusAmount", bonusAmount) + + // 浼犻�掗攢鍗$浉鍏冲弬鏁� + putExtra("refundAmount", refundAmount) + putExtra("cardBalance", cardBalance) + + // 浼犻�掕繑杩樼浉鍏冲弬鏁� + putExtra("returnAmount", returnAmount) + + // 浼犻�掕ˉ鎵g浉鍏冲弬鏁� + putExtra("deductAmount", deductAmount) + + // 浼犻�掕ˉ鍗$浉鍏冲弬鏁� + putExtra("cardCost", cardCost) + putExtra("reissueAmount", reissueAmount) + + // 浼犻�掔敤鎴峰崱瀵硅薄 if (::userCard.isInitialized) { putExtra("userCard", userCard) } - putExtra("operationTypeCode", operationTypeCode) + + // 浼犻�掑崱鐗囦俊鎭璞� + cardInfo?.let { + putExtra("cardInfo", it) + } + + startActivity(this) } - + // 閫氱煡MainActivity璋冪敤postCardData notifyMainActivityToPostCardData(cardNumber) } - + } catch (e: Exception) { // 璁板綍寮傚父淇℃伅 CrashReport.postCatchedException(e) diff --git a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt index 80ee7a7..ec3c4d3 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt @@ -555,6 +555,8 @@ putExtra("userCard", cardToWrite) putExtra("rechargeAmount", rechargeAmount) // 浼犻�掑厖鍊奸噾棰� putExtra("bonusAmount", bonusAmount) // 浼犻�掕禒閫侀噾棰� + putExtra("cardInfo", cardInfo) + putExtra(EXTRA_CARD_INFO, cardInfo) } startActivity(intent) finish() diff --git a/generallibrary/src/main/res/drawable/bg_button_outline.xml b/generallibrary/src/main/res/drawable/bg_button_outline.xml new file mode 100644 index 0000000..6a82441 --- /dev/null +++ b/generallibrary/src/main/res/drawable/bg_button_outline.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@android:color/transparent" /> + <stroke + android:width="1.5dp" + android:color="#2196F3" /> + <corners android:radius="8dp" /> +</shape> \ No newline at end of file diff --git a/generallibrary/src/main/res/drawable/bg_button_outline_selector.xml b/generallibrary/src/main/res/drawable/bg_button_outline_selector.xml new file mode 100644 index 0000000..a05bde1 --- /dev/null +++ b/generallibrary/src/main/res/drawable/bg_button_outline_selector.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_pressed="true"> + <shape android:shape="rectangle"> + <solid android:color="#E3F2FD" /> + <stroke + android:width="1.5dp" + android:color="#2196F3" /> + <corners android:radius="8dp" /> + </shape> + </item> + <item> + <shape android:shape="rectangle"> + <solid android:color="@android:color/transparent" /> + <stroke + android:width="1.5dp" + android:color="#2196F3" /> + <corners android:radius="8dp" /> + </shape> + </item> +</selector> \ No newline at end of file diff --git a/generallibrary/src/main/res/layout/activity_card_write_success.xml b/generallibrary/src/main/res/layout/activity_card_write_success.xml index 2fa9734..c2ca3d0 100644 --- a/generallibrary/src/main/res/layout/activity_card_write_success.xml +++ b/generallibrary/src/main/res/layout/activity_card_write_success.xml @@ -22,67 +22,93 @@ android:layout_marginStart="16dp" android:layout_marginTop="24dp" android:layout_marginEnd="16dp" - android:layout_marginBottom="80dp" + android:layout_marginBottom="24dp" app:cardBackgroundColor="@android:color/white" app:cardCornerRadius="12dp" app:cardElevation="4dp" - app:layout_constraintBottom_toTopOf="@id/btnConfirm" + app:layout_constraintBottom_toTopOf="@id/buttonContainer" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/titleBar"> - <LinearLayout + <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" - android:gravity="center" - android:orientation="vertical" - android:padding="32dp"> + android:fillViewport="true"> - <ImageView - android:id="@+id/successIcon" - android:layout_width="150dp" - android:layout_height="150dp" - android:scaleType="fitCenter" - android:src="@drawable/icon_success" /> - - <TextView - android:id="@+id/successTitle" - android:layout_width="wrap_content" + <LinearLayout + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="24dp" - android:text="鍐欏崱鎴愬姛" - android:textColor="#4CAF50" - android:textSize="24sp" - android:textStyle="bold" /> - - <TextView - android:id="@+id/successMessage" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="16dp" android:gravity="center" - android:text="鍗$墖淇℃伅宸叉垚鍔熷啓鍏n璇峰Ε鍠勪繚绠℃偍鐨勫崱鐗�" - android:textColor="#666666" - android:textSize="16sp" - android:lineSpacingExtra="4dp" /> + android:orientation="vertical" + android:padding="24dp" + android:minHeight="300dp"> - </LinearLayout> + <ImageView + android:id="@+id/successIcon" + android:layout_width="120dp" + android:layout_height="120dp" + android:scaleType="fitCenter" + android:src="@drawable/icon_success" /> + + <TextView + android:id="@+id/successTitle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:text="鍐欏崱鎴愬姛" + android:textColor="#4CAF50" + android:textSize="22sp" + android:textStyle="bold" /> + + <TextView + android:id="@+id/successMessage" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:gravity="center" + android:text="鍗$墖淇℃伅宸叉垚鍔熷啓鍏n璇峰Ε鍠勪繚绠℃偍鐨勫崱鐗�" + android:textColor="#666666" + android:textSize="15sp" + android:lineSpacingExtra="4dp" /> + + </LinearLayout> + </ScrollView> </androidx.cardview.widget.CardView> - <Button - android:id="@+id/btnConfirm" + <LinearLayout + android:id="@+id/buttonContainer" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="32dp" - android:layout_marginEnd="32dp" - android:layout_marginBottom="24dp" - android:background="@drawable/bg_button_primary" - android:text="纭畾" - android:textColor="@android:color/white" - android:textSize="18sp" - android:textStyle="bold" + android:orientation="vertical" + android:paddingStart="32dp" + android:paddingEnd="32dp" + android:paddingBottom="24dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintStart_toStartOf="parent"> + + <Button + android:id="@+id/btnReprint" + android:layout_width="match_parent" + android:layout_height="44dp" + android:layout_marginBottom="12dp" + android:background="@drawable/bg_button_outline_selector" + android:text="鍐嶆鎵撳嵃" + android:textColor="#2196F3" + android:textSize="16sp" + android:textStyle="bold" /> + + <Button + android:id="@+id/btnConfirm" + android:layout_width="match_parent" + android:layout_height="48dp" + android:background="@drawable/bg_button_primary" + android:text="纭畾" + android:textColor="@android:color/white" + android:textSize="18sp" + android:textStyle="bold" /> + + </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file -- Gitblit v1.8.0