From dd2562d8dc2b01bcdfca3152f82f09efbbd09259 Mon Sep 17 00:00:00 2001 From: zuoxiao <lf_zuo@163.com> Date: 星期三, 25 六月 2025 19:49:48 +0800 Subject: [PATCH] fix(generallibrary): 优化卡片处理和支付方式获取逻辑- 修复地区卡处理逻辑,增加对"00"类型卡的特殊处理 - 优化用户卡数据解析和显示逻辑,提高容错性 - 改进支付方式获取方法,增加错误处理和日志记录 -调整充值接口调用参数,确保正确传递当前余额等信息- 修复 AreaCard 中 areaNumber 类型,改为字符串处理 --- generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt | 131 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 131 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..9c52341 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,130 @@ } 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, operationTypeCode) + } else { + // 涓婃姤澶辫触锛岃褰曢敊璇絾涓嶅奖鍝嶇敤鎴锋搷浣� + CrashReport.postCatchedException(Exception("涓婃姤鍐欏崱缁撴灉澶辫触: ${t.msg}")) + } + } + + override fun onError(e: Throwable?) { + super.onError(e) + // 缃戠粶閿欒锛岃褰曢敊璇絾涓嶅奖鍝嶇敤鎴锋搷浣� + CrashReport.postCatchedException(e ?: Exception("涓婃姤鍐欏崱缁撴灉缃戠粶閿欒")) + } + } + ) + } + + /** + * 鏇存柊鏈湴鏁版嵁搴撲腑鐨勪笂鎶ョ姸鎬� + * 鏍规嵁鎿嶄綔绫诲瀷鍒ゆ柇鏄洿鏂癕anagerCardBean杩樻槸CardRegistrationBean鐨刬sReported鐘舵�佷负true + * + * @param cardNumber 鍗″彿 + * @param orderNumber 璁㈠崟鍙� + * @param operationTypeCode 鎿嶄綔绫诲瀷浠g爜 + */ + private fun updateCardReportedStatus(cardNumber: String, orderNumber: String = "", operationTypeCode: Int = -1) { + lifecycleScope.launch { + try { + val baseDaoSingleton = BaseDaoSingleton.getInstance(this@MainActivity) + + // 鏍规嵁鎿嶄綔绫诲瀷鍒ゆ柇鏄鐞嗗崱杩樻槸鐢ㄦ埛鍗℃搷浣� + val isManagerCardOperation = operationTypeCode in 100..108 + + if (isManagerCardOperation) { + // 绠$悊鍗″埗浣滄搷浣滅被鍨嬶紝鏌ヨ鍜屾洿鏂癕anagerCardBean + val managerCardDao = baseDaoSingleton.managerCardDao() + val managerCard = if (orderNumber.isNotEmpty()) { + managerCardDao.getByOrderId(orderNumber) + } else { + managerCardDao.getByCardAddress(cardNumber) + } + + if (managerCard != null) { + val updatedManagerCard = managerCard.copy(isReported = true) + managerCardDao.update(updatedManagerCard) + } + } else { + // 鐢ㄦ埛鍗℃搷浣滅被鍨嬶紝鏌ヨ鍜屾洿鏂癈ardRegistrationBean + val cardRegistrationDao = baseDaoSingleton.cardRegistrationDao() + 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