From 465c8abaa982fba6868a900d25316c70afc20fb7 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 18 六月 2025 13:59:46 +0800
Subject: [PATCH] feat(card): 优化销卡功能并添加写卡操作

---
 generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt |  173 ++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 121 insertions(+), 52 deletions(-)

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 57e331a..2eb3f4c 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt
@@ -10,18 +10,28 @@
 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
+import com.dayu.general.bean.card.UserCard
 import com.dayu.general.bean.db.CardRegistrationBean
+import com.dayu.general.bean.net.ClientInfo
+import com.dayu.general.bean.net.NewCardDataResult
+import com.dayu.general.bean.net.PaymentMethod
+import com.dayu.general.bean.net.PaymentMethodResponse
 import com.dayu.general.dao.BaseDaoSingleton
 import com.dayu.general.databinding.ActivityNewCardGeBinding
 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
 import com.tencent.bugly.crashreport.CrashReport
 import kotlinx.coroutines.launch
+import java.util.Calendar
 
 /**
  * Description: 鐢ㄦ埛寮�鍗$晫闈�(鍚屾淇敼鐧藉崱瀵嗙爜)
@@ -50,43 +60,18 @@
     // 瀹㈡埛ID
     private var clientId: String = ""
 
+    private lateinit var clientInfo: ClientInfo
+
     // 鏄惁宸茶鍗�
     private var isReadCard: Boolean = false
 
+    private var orderId: String = ""
+
     companion object {
         private const val TAG = "NewCard2Activity"
+        private const val REQUEST_CODE_NFC_WRITE = 1001
     }
 
-    // 鏀粯鏂瑰紡鏁版嵁绫�
-    data class PaymentMethod(
-        val id: Long,
-        val name: String,
-        val remarks: String,
-        val deleted: Int
-    )
-
-    // 鏀粯鏂瑰紡鎺ュ彛杩斿洖鏁版嵁绫�
-    data class PaymentMethodResponse(
-        val itemTotal: Any?,
-        val obj: List<PaymentMethod>,
-        val pageCurr: Any?,
-        val pageSize: Any?,
-        val pageTotal: Any?
-    )
-
-    // 鐢ㄦ埛淇℃伅鏁版嵁绫�
-    data class ClientInfo(
-        val clientId: String,
-        val clientNum: String,
-        val name: String,
-        val districtNum: String,
-        val phone: String,
-        val idCard: String,
-        val villageName: String,
-        val address: String,
-        val cardCount: Int,
-        val operateDt: String
-    )
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -134,7 +119,7 @@
             object : SubscriberListener<BaseResponse<ClientInfo>>() {
                 override fun onNext(response: BaseResponse<ClientInfo>) {
                     if (response.success) {
-                        val clientInfo = response.content
+                        clientInfo = response.content!!
                         if (clientInfo != null) {
                             // 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈�
                             displayClientInfo(clientInfo)
@@ -326,58 +311,134 @@
 
         // 鑾峰彇宸ユ湰璐�
         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()
 
         // 鏋勫缓璇锋眰鍙傛暟
         val params = HashMap<String, Any>()
         params["cardAddr"] = cardPhysicalId // 姘村崱鍦板潃锛堢墿鐞咺D锛�
-        params["clientNum"] = binding.newCardFarmerCode.text.toString() // 鍐滄埛缂栧彿
-        params["cardCost"] = (cardFee * 100).toInt() // 璐崱閲戦锛堝伐鏈垂锛夎浆涓哄垎
-        params["amount"] = (rechargeAmount * 100).toInt() // 鍏呭�奸噾棰濊浆涓哄垎
+        params["clientId"] = clientId // 鍐滄埛ID
+        params["cardCost"] = cardFee  // 璐崱閲戦锛堝伐鏈垂锛�(鍏�)
+        params["amount"] = rechargeAmount  // 鍏呭�奸噾棰�(鍏�)
         params["paymentId"] = paymentId // 鏀粯鏂瑰紡ID
         params["remarks"] = remark // 澶囨敞
+        params["protocol"] = "p206V1_0_1" // 鍗忚
         params["operator"] = BaseApplication.userId // 鎿嶄綔浜篒D
 
         // 鎵ц鍗$墖婵�娲籄PI璇锋眰
         ApiManager.getInstance().requestPostLoading(
             this,
-            "sell/card/active",
-            String::class.java,
+            "terminal/card/termActiveCard",
+            NewCardDataResult::class.java,
             params,
-            object : SubscriberListener<BaseResponse<String>>() {
-                override fun onNext(response: BaseResponse<String>) {
+            object : SubscriberListener<BaseResponse<NewCardDataResult>>() {
+                override fun onNext(response: BaseResponse<NewCardDataResult>) {
                     if (response.success) {
+                        orderId = response.content?.orderNo.toString()
                         // 淇濆瓨寮�鍗′俊鎭埌鏁版嵁搴�
                         val cardRegistration = CardRegistrationBean(
                             cardNumber = cardPhysicalId,
                             userName = binding.newCardUserName.text.toString(),
                             idCard = binding.newCardIdCard.text.toString(),
-                            farmerCode = binding.newCardFarmerCode.text.toString(),
+                            clientId = clientId,
                             cardFee = cardFee,
                             remark = binding.newCardRemark.text.toString(),
                             paymentMethod = paymentId.toInt(),
                             isReported = true,
-                            isCardWritten = true
-                        )
+                            isCardWritten = false, // 鍒濆璁剧疆涓篺alse锛屽啓鍗℃垚鍔熷悗鍐嶆洿鏂颁负true
+                            operatorId = orderId,
+
+                            )
 
                         // 浣跨敤鍗忕▼鍦ㄥ悗鍙扮嚎绋嬩腑淇濆瓨鏁版嵁
                         lifecycleScope.launch {
                             try {
                                 BaseDaoSingleton.getInstance(this@NewCard2Activity)
                                     .cardRegistrationDao().insert(cardRegistration)
-                                Toast.makeText(
-                                    this@NewCard2Activity,
-                                    "寮�鍗℃垚鍔�",
-                                    Toast.LENGTH_SHORT
-                                ).show()
                                 setResult(RESULT_OK)
-                                finish()
+                                Intent(this@NewCard2Activity, NfcWreatActivity::class.java).apply {
+                                    putExtra("cardType", USER_CARD_TYPE_1)
+                                    putExtra("orderNumber", orderId)
+                                    putExtra("cardAddr", cardPhysicalId)
+                                    var userCard = UserCard()
+                                    userCard.areaNumber =
+                                        response.content?.cardNum?.substring(0, 12).toString()
+                                    userCard.userCode = clientInfo.clientNum
+                                    userCard.phoneNumber = clientInfo.phone
+                                    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 =
+                                        MornyUtil.changeY2F(response.content?.waterPrice)
+                                    userCard.electricPrice =
+                                        MornyUtil.changeY2F(response.content?.waterPrice)
+                                    userCard.rechargeDate =
+                                        DateUtils.parseStringToCalendar(response.content?.time)
+
+                                    // 杈撳嚭userCard鐨勬墍鏈変俊鎭埌鏃ュ織
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "=== 寮�鍗serCard淇℃伅 ==="
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鍗$墖绫诲瀷: ${userCard.cardType}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鍥藉琛屾斂鍖哄煙鍙�: ${userCard.areaNumber}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鐢ㄦ埛缂栧彿: ${userCard.userCode}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鐢ㄦ埛鍗$紪鍙�: ${userCard.userCodeNumber}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "瀹屾暣鐢ㄦ埛缂栧彿: ${userCard.getMyUserCode()}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鎵嬫満鍙�: ${userCard.phoneNumber}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "椤圭洰缂栫爜: ${userCard.projectCode}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鍗″唴浣欓: ${userCard.balance}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鍓╀綑姘撮噺: ${userCard.surplusWater}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "姘撮噺鍗曚环: ${userCard.waterPrice}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鐢甸噺鍗曚环: ${userCard.electricPrice}"
+                                    )
+                                    android.util.Log.d(
+                                        "NewCard2Activity",
+                                        "鍏呭�兼椂闂�: ${userCard.rechargeDate}"
+                                    )
+                                    android.util.Log.d("NewCard2Activity", "==================")
+
+                                    putExtra("userCard", userCard)
+                                    putExtra("operationTypeCode", CardOperationType.OpenCard.code)
+                                    putExtra("cardFee", cardFee)
+                                    startActivityForResult(this, REQUEST_CODE_NFC_WRITE)
+                                }
                             } catch (e: Exception) {
                                 CrashReport.postCatchedException(e)
                                 Toast.makeText(
@@ -494,4 +555,12 @@
         }
     }
 
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+        if (requestCode == REQUEST_CODE_NFC_WRITE && resultCode == RESULT_OK) {
+            // 鍐欏崱鎴愬姛锛屽叧闂綋鍓岮ctivity
+            finish()
+        }
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.8.0