From a8751388c9a86ae95714a15279994d8aa426a26d Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期五, 13 六月 2025 14:59:02 +0800 Subject: [PATCH] feat(generallibrary): 优化充值功能并添加水价获取- 在 activity_recharge_detail.xml 中移除了不必要的 bold 样式- 在 EditText 中添加了金额输入限制(数字和小数点)- 在 BaseApplication 中添加了水价信息存储 - 在 MainActivity 中实现了延时获取水价的功能- 优化了 RechargeDetailActivity 中的水价检查和使用逻辑 - 在 README.md 中添加了金额格式化和水价获取的最佳实践指南 --- generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt | 63 +++++++++++++++++++++---------- 1 files changed, 43 insertions(+), 20 deletions(-) diff --git a/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt b/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt index 7d16b06..8e43c3d 100644 --- a/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt +++ b/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt @@ -106,19 +106,26 @@ val data = ByteArray(16) try { // 璁剧疆鍥藉琛屾斂鍖哄煙鍙�(BCD鏍煎紡锛�6瀛楄妭锛�0-5浣�) - val areaCodeBytes = BcdUtil.strToBcd(String.format("%012d", areaNumber)) - System.arraycopy(areaCodeBytes, 0, data, 0, 6) + val areaNumberStr = if (areaNumber.isBlank() || !areaNumber.all { it.isDigit() }) { + "000000000000" + } else { + areaNumber.padStart(12, '0') + } + val areaCodeBytes = BcdUtil.strToBcd(areaNumberStr) + System.arraycopy(areaCodeBytes, 0, data, 0, minOf(areaCodeBytes.size, 6)) - // 璁剧疆鐢ㄦ埛鍗$紪鍙�(HEX鏍煎紡锛�2瀛楄妭锛�6-7浣�) + // 璁剧疆鐢ㄦ埛鍗$紪鍙�(HEX鏍煎紡锛�2瀛楄妭锛�6-7浣�) - 淇锛氱‘淇濇暟缁勯暱搴︽纭� val userCodeBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(userCodeNumber)) - System.arraycopy(userCodeBytes, 0, data, 6, 2) + val userCodePadded = ByteArray(2) + System.arraycopy(userCodeBytes, 0, userCodePadded, 0, minOf(userCodeBytes.size, 2)) + System.arraycopy(userCodePadded, 0, data, 6, 2) // 璁剧疆鍗$被鍨�(8浣�) data[8] = HexUtil.hexToByte(cardType) // 璁剧疆鎵嬫満鍙�(BCD鏍煎紡锛�6瀛楄妭锛�9-14浣�) val phoneBytes = BcdUtil.strToBcd(phoneNumber.padStart(12, '0')) - System.arraycopy(phoneBytes, 0, data, 9, 6) + System.arraycopy(phoneBytes, 0, data, 9, minOf(phoneBytes.size, 6)) // 璁剧疆鏍¢獙鍜�(15浣�) data[15] = getByteSum(data) @@ -135,17 +142,25 @@ try { data[0] = projectCode.toByte() - // 璁剧疆浣欓 - val balanceBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance)) - System.arraycopy(balanceBytes, 0, data, 1, 4) + // 璁剧疆浣欓 - 淇锛氱‘淇濇暟缁勯暱搴︽纭� + val balanceHex = HexUtil.get10To16LowHigh(balance) + val balanceBytes = HexUtil.hexToByteArray(balanceHex) + val balancePadded = ByteArray(4) + System.arraycopy(balanceBytes, 0, balancePadded, 0, minOf(balanceBytes.size, 4)) + System.arraycopy(balancePadded, 0, data, 1, 4) - // 璁剧疆鍓╀綑姘撮噺 - val waterBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater)) - System.arraycopy(waterBytes, 0, data, 5, 4) + // 璁剧疆鍓╀綑姘撮噺 - 淇锛氱‘淇濇暟缁勯暱搴︽纭� + val waterHex = HexUtil.get10To16LowHigh(surplusWater) + val waterBytes = HexUtil.hexToByteArray(waterHex) + val waterPadded = ByteArray(4) + System.arraycopy(waterBytes, 0, waterPadded, 0, minOf(waterBytes.size, 4)) + System.arraycopy(waterPadded, 0, data, 5, 4) - // 璁剧疆鐢典环 + // 璁剧疆鐢典环 - 淇锛氱‘淇濇暟缁勯暱搴︽纭� val priceBytes = HexUtil.hexToByteArray(HexUtil.floatToHexLowHigh(electricPrice)) - System.arraycopy(priceBytes, 0, data, 9, 2) + val pricePadded = ByteArray(2) + System.arraycopy(priceBytes, 0, pricePadded, 0, minOf(priceBytes.size, 2)) + System.arraycopy(pricePadded, 0, data, 9, 2) // 璁剧疆鍏呭�兼椂闂� rechargeDate?.let { @@ -167,16 +182,24 @@ fun toBytes(): ByteArray { val data = ByteArray(16) try { - // 澶囦唤浣欓鍜屾按閲忔暟鎹� - val balanceBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance)) - System.arraycopy(balanceBytes, 0, data, 1, 4) + // 澶囦唤浣欓鍜屾按閲忔暟鎹� - 淇锛氱‘淇濇暟缁勯暱搴︽纭� + val balanceHex = HexUtil.get10To16LowHigh(balance) + val balanceBytes = HexUtil.hexToByteArray(balanceHex) + val balancePadded = ByteArray(4) + System.arraycopy(balanceBytes, 0, balancePadded, 0, minOf(balanceBytes.size, 4)) + System.arraycopy(balancePadded, 0, data, 1, 4) - val waterBytes = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater)) - System.arraycopy(waterBytes, 0, data, 5, 4) + val waterHex = HexUtil.get10To16LowHigh(surplusWater) + val waterBytes = HexUtil.hexToByteArray(waterHex) + val waterPadded = ByteArray(4) + System.arraycopy(waterBytes, 0, waterPadded, 0, minOf(waterBytes.size, 4)) + System.arraycopy(waterPadded, 0, data, 5, 4) - // 璁剧疆姘翠环 + // 璁剧疆姘翠环 - 淇锛氱‘淇濇暟缁勯暱搴︽纭� val priceBytes = HexUtil.hexToByteArray(HexUtil.floatToHexLowHigh(waterPrice)) - System.arraycopy(priceBytes, 0, data, 9, 2) + val pricePadded = ByteArray(2) + System.arraycopy(priceBytes, 0, pricePadded, 0, minOf(priceBytes.size, 2)) + System.arraycopy(pricePadded, 0, data, 9, 2) // 璁剧疆鍏呭�兼椂闂� rechargeDate?.let { -- Gitblit v1.8.0