From 9a2399d1a0003d1f2935720474b325639454178d Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 10 六月 2025 17:25:25 +0800
Subject: [PATCH] feat(general): 新增卡片操作类型并优化写卡逻辑

---
 generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt         |   19 ++-
 generallibrary/src/main/res/layout/activity_new_card_ge.xml                        |    2 
 generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt                |   63 ++++++++----
 generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt       |    5 
 generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt         |  117 ++++++++++++++++-------
 generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt            |    2 
 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java |   27 +++-
 generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt      |    2 
 generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt            |   28 +++++
 9 files changed, 187 insertions(+), 78 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 1d89f03..f03959a 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
@@ -125,14 +125,24 @@
                         mfc.connect();
                         // 楠岃瘉鎵囧尯瀵嗙爜
                         boolean isOpen = false;
-                        for (int i = 0; i < listKeyA.size(); i++) {
-                            if (mfc.authenticateSectorWithKeyA(a, listKeyA.get(i))) {
-                                isOpen = true;
-                                if (listKeyA.get(i).equals(defauleKey)) {
-                                    // 褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮�
-                                    changePasword(a, mfc);
+
+                        if (listKeyA.size() != 0) {
+                            for (int i = 0; i < listKeyA.size(); i++) {
+                                if (mfc.authenticateSectorWithKeyA(a, listKeyA.get(i))) {
+                                    isOpen = true;
+                                    if (listKeyA.get(i).equals(defauleKey)) {
+                                        // 褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮�
+                                        changePasword(a, mfc);
+                                    }
+                                    break;
                                 }
-                                break;
+                            }
+                        } else if (listA_PS.size() != 0 && listA_PS.size() > a) {
+                            if (mfc.authenticateSectorWithKeyA(a, defauleKey)) {
+                                isOpen = true;
+
+                            } else if (mfc.authenticateSectorWithKeyA(a, listA_PS.get(a))) {
+                                isOpen = true;
                             }
                         }
                         if (isOpen) {
@@ -239,7 +249,7 @@
                         boolean isOpen = false;
                         if (listKeyA.size() != 0) {
                             for (int i = 0; i < listKeyA.size(); i++) {
-                                if (mfc.authenticateSectorWithKeyA(0, listKeyA.get(i))) {
+                                if (mfc.authenticateSectorWithKeyA(a, listKeyA.get(i))) {
                                     isOpen = true;
                                     if (listKeyA.get(i).equals(defauleKey)) {
                                         // 褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮�
@@ -326,7 +336,6 @@
     /**
      * 淇敼瀵嗙爜
      *
-     * @param 涔﹀啓鐨勬墖鍖�
      * @param passWord 瀵嗙爜
      * @return
      */
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
index 58644fa..33198ef 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt
@@ -5,6 +5,7 @@
 import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
 import com.dayu.general.databinding.ActivityManageListGeBinding
 import com.dayu.general.tool.CardCommon
+import com.dayu.general.tool.CardOperationType
 
 class ManageListActivity : BaseActivity() {
 
@@ -21,13 +22,15 @@
         binding?.tvCleanCard?.setOnClickListener {
             var intent = Intent(this, ManagerReadActivity::class.java).apply {
                 putExtra("cardType", CardCommon.CLEAN_CARD_TYPE)
+                putExtra("operationTypeCode", CardOperationType.CleanCard.code)
             }
 
             startActivity(intent)
         }
         binding?.tvCheckCard?.setOnClickListener {
             var intent = Intent(this, ManagerReadActivity::class.java).apply {
-                putExtra("cardType", CardCommon.CHECK_CARD)
+                putExtra("operationTypeCode", CardCommon.CHECK_CARD)
+                putExtra("operationTypeCode", CardOperationType.CheckCard.code)
             }
             startActivity(intent)
         }
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 9b7c268..947b440 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -10,6 +10,7 @@
 import android.widget.Toast
 import androidx.lifecycle.lifecycleScope
 import com.dayu.baselibrary.net.subscribers.SubscriberListener
+import com.dayu.baselibrary.utils.MornyUtil
 import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE
 import com.dayu.general.BaseApplication
 import com.dayu.general.R
@@ -24,6 +25,7 @@
 import com.dayu.general.net.ApiManager
 import com.dayu.general.net.BaseResponse
 import com.dayu.general.tool.CardCommon.Companion.USER_CARD_TYPE_1
+import com.dayu.general.tool.CardOperationType
 import com.dayu.general.tool.NfcReadHelper
 import com.dayu.general.tool.NfcWreatHelper
 import com.dayu.general.utils.DateUtils
@@ -308,11 +310,7 @@
 
         // 鑾峰彇宸ユ湰璐�
         val cardFeeStr = binding.newCardCardFee.text.toString()
-        val cardFee = if (cardFeeStr.isEmpty()) 0.0 else cardFeeStr.toDouble()
-
-        // 鏍煎紡鍖栭噾棰濅负涓や綅灏忔暟
-        val formattedRechargeAmount = String.format("%.2f", rechargeAmount)
-        val formattedCardFee = String.format("%.2f", cardFee)
+        val cardFee = if (cardFeeStr.isEmpty()) 0 else cardFeeStr.toInt()
 
         val remark = binding.newCardRemark.text.toString()
 
@@ -369,17 +367,20 @@
                                     putExtra("orderId", orderId)
                                     putExtra("cardAddr", cardPhysicalId)
                                     var userCard = UserCard()
-                                    userCard.areaNumber =clientInfo.districtNum
+                                    userCard.areaNumber = response.content?.cardNum?.substring(0, 12).toString()
                                     userCard.userCode =clientInfo.clientNum
                                     userCard.phoneNumber =clientInfo.phone
-                                    userCard.userCodeNumber = response.content?.cardNum?.toInt()!!
-                                    userCard.projectCode = response.content?.projectNo?.toInt()!!
-                                    userCard.balance = response.content?.balance?.toInt()!!
+                                    userCard.userCodeNumber = response.content?.cardNum?.substring(12)?.toInt()!!
+                                    userCard.projectCode = response.content?.projectNo!!
+                                    userCard.balance = MornyUtil.changeY2F(response.content?.balance)
 //                                    userCard.surplusWater = response.content?.surplusWater?.toInt()!!
                                     userCard.waterPrice = response.content?.waterPrice?.toFloat()!!
 //                                    userCard.electricPrice = response.content?.electricPrice?.toFloat()!!
                                     userCard.rechargeDate = DateUtils.parseStringToCalendar(response.content?.time)
                                     putExtra("userCard", userCard)
+                                    putExtra("operationTypeCode", CardOperationType.OpenCard.code)
+                                    putExtra("orderNumber", response.content?.orderNo)
+                                    putExtra("cardFee", cardFee)
                                     startActivity(this)
                                 }
                             } 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 74bb8e9..3c9910b 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -9,6 +9,7 @@
 import com.dayu.general.bean.card.ClearCard
 import com.dayu.general.bean.card.UserCard
 import com.dayu.general.tool.CardCommon
+import com.dayu.general.tool.CardOperationType
 import com.dayu.general.databinding.ActivityNfcWriteGeBinding
 import com.dayu.general.net.ApiManager
 import com.dayu.general.net.BaseResponse
@@ -17,6 +18,7 @@
 import com.dayu.general.dao.BaseDaoSingleton
 import com.tencent.bugly.crashreport.CrashReport
 import kotlinx.coroutines.launch
+import java.lang.StringBuilder
 
 /**
  * @author: zuo
@@ -28,7 +30,13 @@
     var cardType = ""
     var orderId = ""
     var cardAddr = ""
+    var cardFee = 0
+
+    //璁㈠崟缂栧彿
+    var orderNumber = ""
     private lateinit var userCard: UserCard
+    private var operationTypeCode = -1;
+    private var operationType: CardOperationType? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -44,18 +52,44 @@
         cardType = intent?.getStringExtra("cardType") ?: ""
         orderId = intent?.getStringExtra("orderId") ?: ""
         cardAddr = intent?.getStringExtra("cardAddr") ?: ""
-        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)!!
+        operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1
+        operationType = CardOperationType.fromCode(operationTypeCode)
+        if (intent?.hasExtra("cardFee") == true) {
+            cardFee = intent?.getIntExtra("cardFee", 0) ?: 0
         }
+        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)!!
+            }
 
-        if (cardType.isNotEmpty()) {
-            when (cardType) {
-                CardCommon.CLEAN_CARD_TYPE -> {
+        }
+        if (operationTypeCode != -1) {
+            when (operationType) {
+                CardOperationType.CleanCard -> {
                     binding?.cardData?.text = "娓呴浂鍗″啓鍗�"
                 }
 
+                CardOperationType.OpenCard -> {
+                    var textData = StringBuilder()
+                    textData.append("鐢ㄦ埛寮�鍗n")
+                    if (cardFee != 0) {
+                        textData.append("宸ユ湰璐癸細" + cardFee + "鍏僜n")
+                    }
+                    if (userCard.balance != 0) {
+                        textData.append("鍏呭�奸噾棰濓細" + userCard.balance + "鍏�")
+                    }
+
+                    binding?.cardData?.text = textData.toString()
+                }
+
+                CardOperationType.CancelCard -> TODO()
+                CardOperationType.CheckCard -> TODO()
+                CardOperationType.DeductCard -> TODO()
+                CardOperationType.Recharge -> TODO()
+                CardOperationType.ReplaceCard -> TODO()
+                null -> TODO()
             }
         }
 
@@ -64,41 +98,55 @@
 
     override fun onNfcBack(intent: Intent) {
         val nfcReadHelper = NfcReadHelper.getInstance(intent, this)
-        val cardNumber = nfcReadHelper.getCardNumberNoClose()
+        // 浣跨敤姝e父鐨刧etCardNumber()鏂规硶锛屽畠浼氳嚜鍔ㄥ叧闂繛鎺�
+        val cardNumber = nfcReadHelper.getCardNumber()
+        
         if (cardNumber.isNotEmpty() && cardNumber == cardAddr) {
             val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this)
-            when (cardType) {
-                CardCommon.CLEAN_CARD_TYPE -> {
+            when (operationType) {
+                CardOperationType.CleanCard -> {
                     var clearCard = ClearCard()
                     nfcWreatHelper.writeData(clearCard.getZeroBytes(), 7, 0) { success, message ->
-                        if (success) {
-                            postCardData(cardType, cardAddr, "")
-                            // 鍐欏崱鎴愬姛鍚庢洿鏂版暟鎹簱涓殑isCardWritten鐘舵��
-                            updateCardWrittenStatus(cardAddr)
-                            ToastUtil.show("鍐欏崱鎴愬姛!")
-                            // 澶勭悊鍐欏崱鎴愬姛鐨勬儏鍐�
-                        } else {
-                            // 澶勭悊鍐欏崱澶辫触鐨勬儏鍐�
-                            ToastUtil.show(message)
+                        // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
+                        runOnUiThread {
+                            if (success) {
+                                postCardData(cardType, cardAddr)
+                                // 鍐欏崱鎴愬姛鍚庢洿鏂版暟鎹簱涓殑isCardWritten鐘舵��
+                                updateCardWrittenStatus(cardAddr)
+                                ToastUtil.show("鍐欏崱鎴愬姛!")
+                                // 澶勭悊鍐欏崱鎴愬姛鐨勬儏鍐�
+                            } else {
+                                // 澶勭悊鍐欏崱澶辫触鐨勬儏鍐�
+                                ToastUtil.show(message)
+                            }
                         }
                     }
                 }
 
-                CardCommon.USER_CARD_TYPE_1 -> {
-                    binding?.cardData?.text = "鍐欑敤鎴峰崱"
+                CardOperationType.OpenCard -> {
                     nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack {
                         override fun isSusses(flag: Boolean, msg: String?) {
-                            if (flag) {
-                                // 鍐欏崱鎴愬姛鍚庢洿鏂版暟鎹簱涓殑isCardWritten鐘舵��
-                                updateCardWrittenStatus(cardAddr)
-                                ToastUtil.show("鍐欏崱鎴愬姛!")
-                            } else {
-                                ToastUtil.show("鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}")
+                            // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
+                            runOnUiThread {
+                                if (flag) {
+                                    // 鍐欏崱鎴愬姛鍚庢洿鏂版暟鎹簱涓殑isCardWritten鐘舵��
+                                    updateCardWrittenStatus(cardAddr)
+                                    ToastUtil.show("鍐欏崱鎴愬姛!")
+                                } else {
+                                    ToastUtil.show("鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}")
+                                }
                             }
                         }
                     })
 
                 }
+
+                CardOperationType.CancelCard -> TODO()
+                CardOperationType.CheckCard -> TODO()
+                CardOperationType.DeductCard -> TODO()
+                CardOperationType.Recharge -> TODO()
+                CardOperationType.ReplaceCard -> TODO()
+                null -> TODO()
             }
         } else {
             ToastUtil.show("鍗$墖閿欒锛屽綋鍓嶅埛鐨勫崱涓庡垰鍒氱殑鍗′笉涓�鑷�")
@@ -113,7 +161,7 @@
             try {
                 val cardRegistrationDao = BaseDaoSingleton.getInstance(this@NfcWreatActivity)
                     .cardRegistrationDao()
-                
+
                 // 鏍规嵁鍗″彿鏌ユ壘CardRegistrationBean璁板綍
                 val cardRegistration = cardRegistrationDao.getByCardNumber(cardNumber)
                 if (cardRegistration != null) {
@@ -130,7 +178,7 @@
         }
     }
 
-    fun postCardData(cardType: String, cardAddr: String, remark: String) {
+    fun postCardData(cardType: String, cardAddr: String) {
         when (cardType) {
             CardCommon.CHECK_CARD -> {
                 binding?.cardData?.text = "鍐欑敤鎴峰崱"
@@ -142,17 +190,14 @@
             map["cardAddr"] = cardAddr
         }
 
-        if (cardType.isNotEmpty()) {
-//            map["cardType"] = cardType
-            map["operateType"] = "1"
-        }
-        if (remark.isNotEmpty()) {
-            map["remarks"] = remark
+        map["operateType"] = operationTypeCode
+        if (orderNumber.isNotEmpty()) {
+            map["orderNumber"] = orderNumber
         }
         // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁�
         ApiManager.getInstance().requestPostLoading(
             this,
-            "/sell/card/call_back",
+            "terminal/card/termCallBack",
             String::class.java,
             map,
             object : SubscriberListener<BaseResponse<String>>() {
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 {
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt b/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt
index 9cfdc91..42faeda 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt
@@ -11,7 +11,7 @@
     val userName: String, // 濮撳悕
     val idCard: String, // 韬唤璇佸彿
     val clientId: String, // 鍐滄埛Id
-    val cardFee: Double, // 宸ユ湰璐�
+    val cardFee: Int, // 宸ユ湰璐�
     val remark: String, // 澶囨敞
     val paymentMethod: Int, // 鏀粯鏂瑰紡
     val orderId: String? = null, // 璁㈠崟id锛屽垵濮嬩负null锛屽悗缁洿鏂�
diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt
index 8b36f14..746a635 100644
--- a/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt
+++ b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt
@@ -1,7 +1,7 @@
 package com.dayu.general.bean.net
 
 data class NewCardDataResult(
-    var projectNo: String,
+    var projectNo: Int,
     var cardNum: String,
     var balance: String,
     var waterPrice: String,
diff --git a/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt b/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt
new file mode 100644
index 0000000..aee7aa4
--- /dev/null
+++ b/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt
@@ -0,0 +1,28 @@
+package com.dayu.general.tool
+
+/**
+ * 鍗$墖鎿嶄綔绫诲瀷
+ * 鐢ㄤ簬鍖哄垎涓嶅悓鐨勫崱鐗囨搷浣�
+ */
+sealed class CardOperationType(val code: Int, val description: String) {
+    object OpenCard : CardOperationType(1, "寮�鍗�")
+    object Recharge : CardOperationType(2, "鍏呭��")
+    object CancelCard : CardOperationType(3, "閿�鍗�")
+    object ReplaceCard : CardOperationType(4, "琛ュ崱")
+    object DeductCard : CardOperationType(5, "琛ユ墸")
+    object CleanCard : CardOperationType(6, "娓呴浂鍗�")
+    object CheckCard : CardOperationType(7, "妫�鏌ュ崱")
+
+    companion object {
+        fun fromCode(code: Int): CardOperationType? {
+            return when (code) {
+                1 -> OpenCard
+                2 -> Recharge
+                3 -> CancelCard
+                4 -> ReplaceCard
+                5 -> DeductCard
+                else -> null
+            }
+        }
+    }
+} 
\ No newline at end of file
diff --git a/generallibrary/src/main/res/layout/activity_new_card_ge.xml b/generallibrary/src/main/res/layout/activity_new_card_ge.xml
index c1c2477..b1cb270 100644
--- a/generallibrary/src/main/res/layout/activity_new_card_ge.xml
+++ b/generallibrary/src/main/res/layout/activity_new_card_ge.xml
@@ -303,7 +303,7 @@
                                 android:layout_height="wrap_content"
                                 android:background="@null"
                                 android:hint="璇疯緭鍏ュ伐鏈垂(閫夊~)"
-                                android:inputType="numberDecimal"
+                                android:inputType="number"
                                 android:textColor="#333333"
                                 android:textColorHint="#BBBBBB"
                                 android:textSize="@dimen/new_card_size" />

--
Gitblit v1.8.0