Browse Source

Merge branch 'hotfix/V1.2.04_订单重复支付修复'

Zhenghj 1 year ago
parent
commit
e421772c46

+ 2 - 2
app/build.gradle

@@ -21,8 +21,8 @@ android {
         applicationId "com.doverfuelingsolutions.issp"
         minSdkVersion 22
         targetSdkVersion 26
-        versionCode 16
-        versionName "1.2.03"
+        versionCode 18
+        versionName "1.2.05"
         archivesBaseName = versionName + "." + getTime()
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

+ 10 - 1
app/src/main/java/com/doverfuelingsolutions/issp/api/SystemApi.kt

@@ -34,6 +34,7 @@ object SystemApi {
     private var serviceLogin = makeLoginService()
     private var serviceBase = makeBaseService()
     private var serviceTrx = makeTrxService()
+    private var servicePay = makePayService()
     private var serviceConfig = makeConfigService()
     private var serviceAssets = makeAssetsService()
 
@@ -227,7 +228,7 @@ object SystemApi {
         }
 
         DFSLog.i("支付类型:${posTrxMop.posMopPaymentId}")
-        serviceTrx.pay(posTrx.id, posTrxMop).enqueue(object : Callback<ResultPayment> {
+        servicePay.pay(posTrx.id, posTrxMop).enqueue(object : Callback<ResultPayment> {
             override fun onResponse(call: Call<ResultPayment>, response: Response<ResultPayment>) {
                 val body = response.body()
                 val codeResponse = response.code()
@@ -494,6 +495,7 @@ object SystemApi {
         serviceLogin = makeLoginService()
         serviceBase = makeBaseService()
         serviceTrx = makeTrxService()
+        servicePay = makePayService()
         serviceConfig = makeConfigService()
     }
 
@@ -563,6 +565,13 @@ object SystemApi {
             .create(ServiceTrx::class.java)
     }
 
+    private fun makePayService():ServiceTrx {
+        return RetrofitUtil.getPayBuilder()
+            .baseUrl(WayneApiConfig.HOST_TRX)
+            .build()
+            .create(ServiceTrx::class.java)
+    }
+
     private fun makeConfigService(): ServiceConfig {
         return RetrofitUtil.getAuthBuilder()
             .baseUrl(WayneApiConfig.HOST_CONFIG)

+ 7 - 0
app/src/main/java/com/doverfuelingsolutions/issp/api/WayneApiConfig.kt

@@ -10,6 +10,12 @@ class WayneApiConfig {
         const val timeoutConnect = 120L
         const val timeoutAll = 25L //超时时间由原本的 180 秒改为 20 秒
 
+        //支付的超时时间长一点,有时是等待输入密码导致响应时间比较长
+        //设置不同的时间,后面方便从不同的时间来判断是哪个时间超时
+        const val timeoutPayCall = 70L  //超时时间
+        const val timeoutPayWrite = 60L //写超时
+        const val timeoutPayRead = 65L  //读超时
+
         const val PATH_BASE_TOKEN = "token"
         const val PATH_BASE_DEVICE_SESSION = "api/DeviceManagement/GetCurrentSessionInfo"
         const val PATH_TRX_TRANS = "api/Transactions"
@@ -28,6 +34,7 @@ class WayneApiConfig {
 
         // 默认值 - 云端
         const val DOMAIN_DEFAULT = "http://ipos.biz"
+        const val DOMAIN_DEFAULT_RELEASE = "http://tkhs.net.cn"
         const val PORT_BASE_DEFAULT = "8698"
         const val PORT_TRX_DEFAULT = "8699"
         const val PORT_CONFIG_DEFAULT = "8889"

+ 14 - 0
app/src/main/java/com/doverfuelingsolutions/issp/api/basic/RetrofitUtil.kt

@@ -29,6 +29,14 @@ object RetrofitUtil {
         .connectionPool(connectionPool)
         .addInterceptor(authInterceptor)
         .addInterceptor(loggingInterceptor)
+    private val payHttpBuilder = OkHttpClient.Builder()
+        .connectTimeout(WayneApiConfig.timeoutConnect, TimeUnit.SECONDS)
+        .readTimeout(WayneApiConfig.timeoutPayRead, TimeUnit.SECONDS)
+        .writeTimeout(WayneApiConfig.timeoutPayWrite, TimeUnit.SECONDS)
+        .callTimeout(WayneApiConfig.timeoutPayCall, TimeUnit.SECONDS)
+        .connectionPool(connectionPool)
+        .addInterceptor(authInterceptor)
+        .addInterceptor(loggingInterceptor)
 
     private val mGsonConverterFactory: GsonConverterFactory by lazy { GsonConverterFactory.create() }
 
@@ -43,4 +51,10 @@ object RetrofitUtil {
             .addConverterFactory(mGsonConverterFactory)
             .client(authHttpBuilder.build())
     }
+
+    fun getPayBuilder():Retrofit.Builder {
+        return Retrofit.Builder()
+            .addConverterFactory(mGsonConverterFactory)
+            .client(payHttpBuilder.build())
+    }
 }

+ 7 - 1
app/src/main/java/com/doverfuelingsolutions/issp/fusion/FusionManager.kt

@@ -235,11 +235,17 @@ object FusionManager : LifecycleObserver, OnFdcClientStateChangedListener,
 
                         //将订单页面减去此需消除订单
                         val orders = SPUtil.getOrderListByPump(dc.pumpNo)
-                        orders.remove(orders.find { it.pumpNo == dc.pumpNo && it.releaseTokenElement == dc.releaseTokenElement && it.transactionSeqNo == dc.transactionSeqNo })
+                        val result = orders.remove(orders.find { it.pumpNo == dc.pumpNo && it.releaseTokenElement == dc.releaseTokenElement && it.transactionSeqNo == dc.transactionSeqNo })
                         SPUtil.setOrderListByPump(dc.pumpNo,orders)
                         onRefreshNozzleUi?.onRefreshNozzleUi(dc.pumpNo, orders.isNotEmpty())   //枪页面显示浅色
                         onRefreshOrderUi?.onRefreshOrderUi(dc.pumpNo,orders)
 
+                        if (!result) {
+                            val findOrder = "${dc.pumpNo}-${dc.releaseTokenElement}-${dc.transactionSeqNo}-${dc.releaseTokenAttribute}"
+                            val ordersStr = orders.map { "${it.pumpNo}-${it.releaseTokenElement}-${it.transactionSeqNo}-${it.releaseTokenAttribute}" }
+                            DFSLog.i("查找的订单:${findOrder}","当前订单:${ordersStr}")
+                        }
+
                     }
                     "Locked" -> if (null != dc.pumpNo && null != dc.transactionSeqNo) { // 锁单(被某一设备正在支付),或本机锁,或其他设备锁
 //                        DFSLog.i("订单订单订单",dc.toString())

+ 1 - 1
app/src/main/java/com/doverfuelingsolutions/issp/utils/sp/SPUtil.kt

@@ -110,7 +110,7 @@ object SPUtil {
             putString(SPKeys.SN, DeviceUtil.generateSerialNumber())
 
             //添加升级服务信息
-            putString(SPKeys.UPDATEL_IP, WayneApiConfig.DOMAIN_DEFAULT)
+            putString(SPKeys.UPDATEL_IP, WayneApiConfig.DOMAIN_DEFAULT_RELEASE)
             putString(SPKeys.UPDATE_PORT, WayneApiConfig.PORT_ASSETS_DEFAULT)
             commit()
         }

+ 7 - 0
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentOrderList.kt

@@ -154,6 +154,13 @@ class FragmentOrderList private constructor() : FragmentBasic(),RefreshOrder {
                 FuelInfoApi.accumulationInfo(dc)
             }
             if (resultAccumulationInfo.success && resultAccumulationInfo.data != null) {
+                if (resultAccumulationInfo.data.State == "Paid" || resultAccumulationInfo.data.State == "Cleared") {
+                    dialog.dismiss()
+                    (requireActivity() as MainActivity).fragmentRouter.resumeFragmentToolbarTimer()
+                    DFSToastUtil.info("此订单已支付,请勿重复支付")
+                    return@launchWhenStarted
+                }
+
                 //2022-10-8号,春洲 token:80322,出现在创建订单时枪号传成 1,这里将订单的枪号赋值为订单详情中的枪号
                 dc.nozzleNo = resultAccumulationInfo.data.SiteLevelNozzleId
                 dc.amountTotalizer = BigDecimal(resultAccumulationInfo.data.AmountTotalizer)