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/MainActivity.kt |  112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 112 insertions(+), 0 deletions(-)

diff --git a/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt
index 81b20a0..ef6d869 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt
@@ -9,6 +9,7 @@
 import android.widget.Toast
 import androidx.core.content.ContextCompat
 import androidx.fragment.app.Fragment
+import androidx.lifecycle.lifecycleScope
 import com.dayu.baselibrary.net.subscribers.SubscriberListener
 import com.dayu.baselibrary.utils.ToastUtil
 import com.dayu.general.BaseApplication
@@ -16,9 +17,13 @@
 import com.dayu.general.adapter.TabAdapter
 import com.dayu.general.bean.net.UserInfoResult
 import com.dayu.general.bean.net.WaterPriceResult
+import com.dayu.general.dao.BaseDaoSingleton
 import com.dayu.general.databinding.ActivityMainBinding
 import com.dayu.general.net.ApiManager
 import com.dayu.general.net.BaseResponse
+import com.dayu.general.tool.CardOperationType
+import com.tencent.bugly.crashreport.CrashReport
+import kotlinx.coroutines.launch
 
 class MainActivity : BaseNfcActivity() {
 
@@ -232,4 +237,111 @@
         }
         return super.onKeyDown(keyCode, event)
     }
+
+    /**
+     * 鍚戞湇鍔″櫒涓婃姤鍐欏崱鎿嶄綔缁撴灉
+     * 鍐欏崱鎴愬姛鍚庤皟鐢ㄦ鏂规硶閫氱煡鏈嶅姟鍣ㄦ搷浣滃畬鎴愶紝鎴愬姛鍚庢洿鏂版湰鍦版暟鎹簱isReported涓簍rue
+     *
+     * @param cardAddr 鍗″湴鍧�/鍗″彿
+     * @param operationTypeCode 鎿嶄綔绫诲瀷浠g爜
+     * @param orderNumber 璁㈠崟鍙�
+     * @param regionNumber 鍖哄煙鍙�
+     * @param projectNumber 椤圭洰鍙�
+     */
+    fun postCardData(
+        cardAddr: String,
+        operationTypeCode: Int,
+        orderNumber: String = "",
+        regionNumber: String = "",
+        projectNumber: String = ""
+    ) {
+        val map = mutableMapOf<String, Any>()
+
+        // 娣诲姞鍗″湴鍧�鍙傛暟
+        if (cardAddr.isNotEmpty()) {
+            map["cardAddr"] = cardAddr
+        }
+
+        // 娣诲姞鎿嶄綔绫诲瀷鍙傛暟
+        // 鍒ゆ柇鏄惁涓虹鐞嗗崱鍒朵綔鎿嶄綔绫诲瀷锛�100-108锛夛紝濡傛灉鏄垯浼犻�扢ANAGEMENT_CARD_WRITE鐨勫�硷紙7锛�
+        val operateTypeToSend = if (operationTypeCode in 100..108) {
+            CardOperationType.MANAGEMENT_CARD_WRITE.code
+        } else {
+            operationTypeCode
+        }
+        map["operateType"] = operateTypeToSend
+
+        // 娣诲姞璁㈠崟鍙峰弬鏁帮紙濡傛灉瀛樺湪锛�
+        if (orderNumber.isNotEmpty()) {
+            map["orderNumber"] = orderNumber
+        }
+
+        // 娣诲姞鍖哄煙鍙峰拰椤圭洰鍙峰弬鏁�
+        if (regionNumber.isNotEmpty()) {
+            map["regionNumber"] = regionNumber
+        }
+        if (projectNumber.isNotEmpty()) {
+            map["projectNumber"] = projectNumber
+        }
+
+        // 璋冪敤鏈嶅姟鍣ㄦ帴鍙d笂鎶ユ搷浣滅粨鏋�
+        ApiManager.getInstance().requestPostHideLoading(
+            this,
+            "terminal/card/termCallBack", // 缁堢鍐欏崱鍥炶皟鎺ュ彛
+            String::class.java,
+            map,
+            object : SubscriberListener<BaseResponse<String>>() {
+                override fun onNext(t: BaseResponse<String>) {
+                    if (t.success) {
+                        // 涓婃姤鎴愬姛锛屾洿鏂版湰鍦版暟鎹簱isReported涓簍rue
+                        updateCardReportedStatus(cardAddr, orderNumber)
+                    } else {
+                        // 涓婃姤澶辫触锛岃褰曢敊璇絾涓嶅奖鍝嶇敤鎴锋搷浣�
+                        CrashReport.postCatchedException(Exception("涓婃姤鍐欏崱缁撴灉澶辫触: ${t.msg}"))
+                    }
+                }
+
+                override fun onError(e: Throwable?) {
+                    super.onError(e)
+                    // 缃戠粶閿欒锛岃褰曢敊璇絾涓嶅奖鍝嶇敤鎴锋搷浣�
+                    CrashReport.postCatchedException(e ?: Exception("涓婃姤鍐欏崱缁撴灉缃戠粶閿欒"))
+                }
+            }
+        )
+    }
+
+    /**
+     * 鏇存柊鏈湴鏁版嵁搴撲腑鐨勪笂鎶ョ姸鎬�
+     * 灏咰ardRegistrationBean涓殑isReported鐘舵�佽缃负true
+     *
+     * @param cardNumber 鍗″彿
+     * @param orderNumber 璁㈠崟鍙�
+     */
+    private fun updateCardReportedStatus(cardNumber: String, orderNumber: String = "") {
+        lifecycleScope.launch {
+            try {
+                val cardRegistrationDao = BaseDaoSingleton.getInstance(this@MainActivity)
+                    .cardRegistrationDao()
+
+                // 鏍规嵁璁㈠崟鍙锋煡鎵綜ardRegistrationBean璁板綍
+                val cardRegistration = if (orderNumber.isNotEmpty()) {
+                    cardRegistrationDao.getByOrderId(orderNumber)
+                } else {
+                    // 濡傛灉娌℃湁璁㈠崟鍙凤紝鍒欓�氳繃鍗″彿鏌ユ壘
+                    cardRegistrationDao.getByCardNumber(cardNumber)
+                }
+                
+                if (cardRegistration != null) {
+                    // 鍒涘缓鏇存柊鍚庣殑CardRegistrationBean瀵硅薄锛屽皢isReported璁剧疆涓簍rue
+                    val updatedCardRegistration = cardRegistration.copy(isReported = true)
+                    // 鏇存柊鏁版嵁搴撹褰�
+                    cardRegistrationDao.update(updatedCardRegistration)
+                }
+            } catch (e: Exception) {
+                // 璁板綍寮傚父淇℃伅锛屼絾涓嶅奖鍝嶇敤鎴锋搷浣�
+                CrashReport.postCatchedException(e)
+                e.printStackTrace()
+            }
+        }
+    }
 }
\ No newline at end of file

--
Gitblit v1.8.0