From 78ea754a54a279f64092aa0e734475bb63b03736 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 3 Jan 2025 17:38:01 +0800 Subject: [PATCH] =?UTF-8?q?[6.9.0]=20[fea]=20[driver]=20[=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E4=BB=BB=E5=8A=A1=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B?= =?UTF-8?q?1=E5=88=86=E9=92=9F=E6=8F=90=E7=A4=BA1=E6=AC=A1]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mogo/och/biz/time/TimeProvider.kt | 36 ++++++++++++----- .../och/common/module/network/OchCommonNet.kt | 10 +++++ .../module/network/OchCommonSubscribeImpl.kt | 5 +++ .../driver/src/main/AndroidManifest.xml | 1 + .../mogo/och/offline/ShuttleDriverProvider.kt | 2 + .../och/offline/ui/go2login/GoLoginModel.kt | 39 ++++++++++++++++--- 6 files changed, 77 insertions(+), 16 deletions(-) diff --git a/OCH/common/biz/src/main/java/com/mogo/och/biz/time/TimeProvider.kt b/OCH/common/biz/src/main/java/com/mogo/och/biz/time/TimeProvider.kt index 3b240f1b0b..8744695e55 100644 --- a/OCH/common/biz/src/main/java/com/mogo/och/biz/time/TimeProvider.kt +++ b/OCH/common/biz/src/main/java/com/mogo/och/biz/time/TimeProvider.kt @@ -3,6 +3,7 @@ package com.mogo.och.biz.time import android.content.Context import com.alibaba.android.arouter.facade.annotation.Route import com.mogo.commons.env.ProjectUtils +import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OCHCOMMON import com.mogo.och.biz.time.bean.TimeRespBean @@ -12,6 +13,7 @@ import com.mogo.och.common.module.constant.OchCommonConst import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.network.OchCommonServiceCallback import com.mogo.och.common.module.utils.RxUtils +import io.reactivex.disposables.Disposable /** @@ -46,6 +48,8 @@ class TimeProvider : TimeService { private var netTime = Long.MAX_VALUE + private var nextGetTime: Disposable? = null + override fun loadNewTime() { OchChainLogManager.writeChainLogTime("时间同步", "开始时间同步") d(TAG, "时间同步_开始时间同步") @@ -59,12 +63,16 @@ class TimeProvider : TimeService { var delay = 0L data?.data?.let { T3 -> delay = (T4 - T1) / 2 - val currentNetTime = (T4-T1) - if(currentNetTime>netTime){ + val currentNetTime = (T4 - T1) + if (currentNetTime > netTime) { OchChainLogManager.writeChainLogTime( "时间信息", "时间延迟较上次大 放弃此次同步${currentNetTime}___上次同步网络延迟${netTime}" ) + d( + TAG, + "时间信息_时间延迟较上次大 放弃此次同步${currentNetTime}___上次同步网络延迟${netTime}___时间差是:${offset}" + ) return } netTime = currentNetTime @@ -77,14 +85,20 @@ class TimeProvider : TimeService { "时间信息", "请求时间信息成功:${data};时间差是:${offset}" ) - d(TAG, "时间同步_请求时间信息成功:${data};时间差是:${offset}_路上的时间:${delay}") - if(netTime>3_000){ + d( + TAG, + "时间同步_请求时间信息成功:${data};时间差是:${offset}_路上的时间:${delay}" + ) + + if (netTime > 3_000 || FunctionBuildConfig.isOffLine) { // 网络延迟大 10s 同步一次 - RxUtils.createSubscribeOnOwnThread(30_000) { + RxUtils.disposeSubscribe(nextGetTime) + nextGetTime = RxUtils.createSubscribeOnOwnThread(30_000) { loadNewTime() } - }else{ - RxUtils.createSubscribeOnOwnThread(30*60_000) { + } else { + RxUtils.disposeSubscribe(nextGetTime) + nextGetTime = RxUtils.createSubscribeOnOwnThread(30 * 60_000) { loadNewTime() } } @@ -98,7 +112,8 @@ class TimeProvider : TimeService { "请求时间信息网络失败5s后重试" ) d(TAG, "时间同步_请求时间信息网络失败5s后重试") - RxUtils.createSubscribe(5_000) { + RxUtils.disposeSubscribe(nextGetTime) + nextGetTime = RxUtils.createSubscribe(5_000) { loadNewTime() } } @@ -109,7 +124,8 @@ class TimeProvider : TimeService { "请求时间信息网络失败5s后重试" ) d(TAG, "时间同步_请求时间信息网络失败5s后重试") - RxUtils.createSubscribe(5_000) { + RxUtils.disposeSubscribe(nextGetTime) + nextGetTime = RxUtils.createSubscribe(5_000) { loadNewTime() } } @@ -120,7 +136,7 @@ class TimeProvider : TimeService { } override fun getCurrentTimeStamp(): Long { - d(TAG,"获取时间_${System.currentTimeMillis() + offset}") + d(TAG, "获取时间_${System.currentTimeMillis() + offset}") return System.currentTimeMillis() + offset } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/network/OchCommonNet.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/network/OchCommonNet.kt index 4bca11506e..78107c7638 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/network/OchCommonNet.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/network/OchCommonNet.kt @@ -8,12 +8,18 @@ import com.mogo.och.weaknet.repository.db.exception.NetDataException import io.reactivex.Observable import io.reactivex.ObservableSource import io.reactivex.functions.Function +import kotlin.math.max class OchCommonNet(val apiName:String, val writeLog:Boolean) : Function> { companion object { const val TAG = "CommonNet" + var lastSuccessTime = 0L + + fun getLastNetSuccessTime():Long{ + return max(lastSuccessTime,OchCommonSubscribeImpl.lastSuccessTime) + } } private var tag:Long = System.currentTimeMillis() @@ -37,6 +43,7 @@ class OchCommonNet(val apiName:String, val writeLog:Boolean) : Funct } fun onSuccess(o: T) { + lastSuccessTime = System.currentTimeMillis() CallerLogger.d("$flavorTag${TAG}", "$apiName: onSuccess() ${o.msg}") if(writeLog) { OchChainLogManager.writeChainLogNet(false,"接口:${apiName}", "请求成功:${o}_${tag}") @@ -44,6 +51,9 @@ class OchCommonNet(val apiName:String, val writeLog:Boolean) : Funct } fun onError(message: String, code: Int) { + if(code>0) { + lastSuccessTime = System.currentTimeMillis() + } CallerLogger.e("$flavorTag${TAG}", "$apiName: onError() code = $code; message = $message") if(writeLog) { OchChainLogManager.writeChainLogNet( diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/network/OchCommonSubscribeImpl.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/network/OchCommonSubscribeImpl.kt index 37d8e2a0b9..f0970628c1 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/network/OchCommonSubscribeImpl.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/network/OchCommonSubscribeImpl.kt @@ -17,6 +17,7 @@ class OchCommonSubscribeImpl( companion object { const val TAG = "OchCommonSubscribeImpl" + var lastSuccessTime = 0L } private var tag:Long = System.currentTimeMillis() @@ -30,6 +31,7 @@ class OchCommonSubscribeImpl( override fun onSuccess(o: T) { super.onSuccess(o) + lastSuccessTime = System.currentTimeMillis() CallerLogger.d("$flavorTag$TAG", "$apiName: onSuccess() ${o.msg}") if(writeLog) { OchChainLogManager.writeChainLogNet(false,"接口:${apiName}", "请求成功:${o}_${tag}") @@ -49,6 +51,9 @@ class OchCommonSubscribeImpl( override fun onError(message: String, code: Int) { super.onError(message, code) + if(code>0) { + lastSuccessTime = System.currentTimeMillis() + } CallerLogger.e("$flavorTag$TAG", "$apiName: onError() code = $code; message = $message") if(writeLog) { OchChainLogManager.writeChainLogNet( diff --git a/OCH/offline/driver/src/main/AndroidManifest.xml b/OCH/offline/driver/src/main/AndroidManifest.xml index 8f52a01700..7cb51a74ab 100644 --- a/OCH/offline/driver/src/main/AndroidManifest.xml +++ b/OCH/offline/driver/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + diff --git a/OCH/offline/driver/src/main/java/com/mogo/och/offline/ShuttleDriverProvider.kt b/OCH/offline/driver/src/main/java/com/mogo/och/offline/ShuttleDriverProvider.kt index 1691cffb96..d4dfa8a80e 100644 --- a/OCH/offline/driver/src/main/java/com/mogo/och/offline/ShuttleDriverProvider.kt +++ b/OCH/offline/driver/src/main/java/com/mogo/och/offline/ShuttleDriverProvider.kt @@ -11,6 +11,7 @@ import com.mogo.och.common.module.constant.OchCommonConst import com.mogo.och.common.module.biz.provider.CommonServiceImpl import com.mogo.och.bridge.autopilot.autopilot.OchAutopilotAnalytics import com.mogo.och.bridge.ui.autopilot.AutopilotState +import com.mogo.och.common.module.biz.time.TimeManager import com.mogo.och.offline.model.LineModel import com.mogo.och.offline.ui.bizswitch.SwitchBizView import com.mogo.och.offline.ui.fragment.OfflineFragment @@ -39,6 +40,7 @@ class ShuttleDriverProvider : CommonServiceImpl() { OchAutopilotAnalytics.ochEventKey = BusAnalyticsManager.getInstance() OffLineTrajectoryManager.load() LineModel.init() + TimeManager.loadNewTime() return busFragment!! } diff --git a/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginModel.kt b/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginModel.kt index 05f405a660..90515fa4cc 100644 --- a/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginModel.kt +++ b/OCH/offline/driver/src/main/java/com/mogo/och/offline/ui/go2login/GoLoginModel.kt @@ -6,8 +6,9 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_OFFLINE -import com.mogo.och.common.module.biz.time.TimeManager +import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.och.common.module.manager.loop.BizLoopManager +import com.mogo.och.common.module.network.OchCommonNet import com.mogo.och.common.module.utils.RxUtils import com.mogo.och.offline.callback.IBusLinesCallback import com.mogo.och.offline.model.LineModel @@ -30,6 +31,10 @@ class GoLoginModel : ViewModel(), IBusLinesCallback { private var countDownDisposable: Disposable? = null + // 10s后关闭蓝牙 + private var time60_000: Disposable? = null + + override fun onCleared() { d(TAG,"onCleared") LineModel.setBusLinesCallback(TAG,null) @@ -63,15 +68,37 @@ class GoLoginModel : ViewModel(), IBusLinesCallback { override fun onCompleteTask() { super.onCompleteTask() + createTimelater() + } + + override fun onNoRunningTask() { + super.onNoRunningTask() + createTimelater() + } + + fun createTimelater(){ + d(TAG,"开始检查是否展示登录页面") if(FunctionBuildConfig.isOffLine){ - if(System.currentTimeMillis()-TimeManager.getSynServerTime()<60*2*1000 - && TimeManager.getTimeStampDiff()!=0L - ){ - BizLoopManager.runInMainThread{ - this.viewCallback?.showView() + // 2分钟内有网络成功过 + if(System.currentTimeMillis()- OchCommonNet.getLastNetSuccessTime()<60*1000){ + if (NetworkUtils.isConnected()) { + BizLoopManager.runInMainThread{ + this.viewCallback?.showView() + } } } } + RxUtils.disposeSubscribe(time60_000) + time60_000 = RxUtils.createSubscribeOnOwnThread(60_000) { + // 检测是否需要展示 + createTimelater() + } + } + + override fun onRunningTask() { + super.onRunningTask() + // 有订单开始取消 + RxUtils.disposeSubscribe(time60_000) } interface GoLoginViewCallback{