From a95c45869b7a8a121f5b6b6072bd92948737b385 Mon Sep 17 00:00:00 2001 From: EmArrow Date: Mon, 4 Nov 2024 11:46:11 +0800 Subject: [PATCH 1/6] =?UTF-8?q?[6.7.4]=20=E4=B8=8A=E6=B5=B7=E6=BC=94?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roadcross/RoadCrossCameraManager.kt | 160 +++++++++++++++--- .../core/function/view/RoadCrossRoamView.kt | 27 +-- .../core/data/deva/chain/ChainConstant.kt | 1 + .../api/map/road/IMoGoMapRoadListener.kt | 3 + .../call/map/CallerMapRoadListenerManager.kt | 24 ++- 5 files changed, 167 insertions(+), 48 deletions(-) diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/RoadCrossCameraManager.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/RoadCrossCameraManager.kt index c72c110fd8..eec14c4f54 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/RoadCrossCameraManager.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/business/roadcross/RoadCrossCameraManager.kt @@ -2,7 +2,6 @@ package com.mogo.eagle.core.function.business.roadcross import android.annotation.SuppressLint import android.content.Context -import android.graphics.BitmapFactory import android.os.Handler import android.os.Looper import android.os.Message @@ -21,7 +20,9 @@ import com.mogo.eagle.core.function.call.map.CallerMapUIServiceManager import com.mogo.eagle.core.function.map.R import com.mogo.eagle.core.utilcode.mogo.AppIdentityModeUtils import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.Logger import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_MAP +import com.mogo.eagle.core.utilcode.util.CoordinateUtils import com.mogo.eagle.core.utilcode.util.ThreadUtils import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.map.overlay.core.Level @@ -38,6 +39,8 @@ class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener { private const val TAG = "RoadCrossCameraManager" private const val REQUEST_CAMERA_MSG = 0 private const val REMOVE_MARKER_MSG = 1 + private const val REQUEST_CAL_ROAD_DISTANCE = 2 + private const val REQUEST_CAL_ROAD_DELAY_TIME = 1000L private const val REQUEST_CAMERA_DELAY_TIME = 20000L private const val REMOVE_MARKER_DELAY_TIME = 10000L @@ -64,6 +67,11 @@ class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener { getAllRoadCross() } + REQUEST_CAL_ROAD_DISTANCE -> { + CallerLogger.d("$M_MAP$TAG", "cal roam road distance") + calRoamRoadDistance() + } + REMOVE_MARKER_MSG -> { CallerLogger.d("$M_MAP$TAG", "remove marker") overlayManager?.removeAllPointsInOwner(TAG) @@ -208,44 +216,60 @@ class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener { } } - fun hasCrossCamera(): Boolean { - if(CallerMapUIServiceManager.getCityCode() == "010"){ + private fun hasCrossCamera(camera: ((Boolean, CameraDeviceInfo?) -> Unit)) { + if (CallerMapUIServiceManager.getCityCode() == "010") { roadCrossTrace( TAG, mapOf("errorMsg" to "cityCode限制 - 北京无路口设备") ) - return false + camera.invoke(false, null) } val roadCrossEnd = CallerMapRoadListenerManager.getCrossEndInfo() - if(roadCrossEnd == null){ + if (roadCrossEnd == null) { roadCrossTrace( TAG, mapOf("errorMsg" to "hasCrossCamera - 未获取到地图crossEnd数据") ) - return false + camera.invoke(false, null) } if (roadCrossCameraList == null) { roadCrossTrace( TAG, mapOf("errorMsg" to "hasCrossCamera - 未获取到全市路口设备信息") ) - return false + camera.invoke(false, null) } - - roadCrossCameraList?.forEach { - val result = (!it.roadUniqueId.isNullOrEmpty() + var result = false + roadCrossCameraList?.forEach { it -> + result = (!it.roadUniqueId.isNullOrEmpty() && it.roadUniqueId == roadCrossEnd) - if(result){ + if (result) { roadCrossTrace( - TAG, mapOf("errorMsg" to "hasCrossCamera - 遍历匹配路口数据命中 - $roadCrossEnd") + TAG, + mapOf("errorMsg" to "hasCrossCamera - 遍历匹配路口数据命中 - $roadCrossEnd") ) - return true + val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() + val cameraInfo = it.deviceInfoList.minByOrNull { info -> + CoordinateUtils.calculateLineDistance( + info.lon, + info.lat, + loc.longitude, + loc.latitude + ) + } + if (cameraInfo != null) { + camera.invoke(true, cameraInfo) + return@forEach + } } } - roadCrossTrace( - TAG, mapOf("errorMsg" to "hasCrossCamera - 均不匹配上述条件") - ) - return false + if(!result){ + roadCrossTrace( + TAG, mapOf("errorMsg" to "hasCrossCamera - 未匹配到路口信息 - $roadCrossEnd") + ) + camera.invoke(false, null) + } + } @SuppressLint("NewApi") @@ -270,20 +294,102 @@ class RoadCrossCameraManager : IMoGoMapRoadListener, IGaoDeMapLocationListener { override fun onRoadChange(cross: Boolean, roadCross: RoadCross?) { super.onRoadChange(cross, roadCross) // 出路口 + if (!cross) { + handleRoadCrossRoam(false) + handleCameraMarker() + CallerLogger.d("$M_MAP$TAG", "经过路口,释放控制") + } else { + handleRoadCrossRoam(true) + } + } + + private var cameraDis: CameraDeviceInfo? = null + private fun handleRoadCrossRoam(isCross: Boolean) { + CallerLogger.d("$M_MAP$TAG", "handleRoadCrossRoam , isCross:$isCross") + if (isCross) { + //停止handler,remove + cameraDis = null + handler.removeMessages(REQUEST_CAL_ROAD_DISTANCE) + CallerMapRoadListenerManager.invokeCrossDevice(false) + CallerLogger.d("$M_MAP$TAG", "emArrow 已过路口,清除判断") + } else { + //开启handler计算,每隔一秒 + handler.sendEmptyMessageDelayed(REQUEST_CAL_ROAD_DISTANCE, REQUEST_CAL_ROAD_DELAY_TIME) + CallerLogger.d("$M_MAP$TAG", "emArrow 路口内,开始计算") + } + } + + private fun calRoamRoadDistance() { + //计算前方路口与marker最小距离 < 200 ,触发业务,回调 + //到达触发距离,可一直发,如果业务方已经展示业务,invoke取消handler + handler.removeMessages(REQUEST_CAL_ROAD_DISTANCE) + if (cameraDis != null) { + calDisInRange { b, dis -> + if(b){ + CallerLogger.d("$M_MAP$TAG", "emArrow 距离内,多次计算,命中") + CallerMapRoadListenerManager.invokeCrossDevice(true) + }else{ + //没有命中距离,继续计算 + handler.sendEmptyMessageDelayed(REQUEST_CAL_ROAD_DISTANCE, REQUEST_CAL_ROAD_DELAY_TIME) + CallerLogger.d("$M_MAP$TAG", "emArrow 继续计算, dis:$dis") + } + } + return + } + + hasCrossCamera { hasCamera, cameraDeviceInfo -> + if (hasCamera && cameraDeviceInfo != null) { + CallerLogger.d("$M_MAP$TAG", "emArrow 首次命中设备") + cameraDis = cameraDeviceInfo + calDisInRange { b, dis -> + if(b){ + CallerLogger.d("$M_MAP$TAG", "emArrow 距离内,首次即命中") + CallerMapRoadListenerManager.invokeCrossDevice(true) + }else{ + //没有命中距离,继续计算 + handler.sendEmptyMessageDelayed(REQUEST_CAL_ROAD_DISTANCE, REQUEST_CAL_ROAD_DELAY_TIME) + CallerLogger.d("$M_MAP$TAG", "emArrow 继续计算, 首次 dis:$dis") + } + } + }else{ + //没有命中设备,继续计算 + handler.sendEmptyMessageDelayed(REQUEST_CAL_ROAD_DISTANCE, REQUEST_CAL_ROAD_DELAY_TIME) + CallerLogger.d("$M_MAP$TAG", "emArrow 没有命中设备${cameraDeviceInfo?:"空"}/路口${CallerMapRoadListenerManager.getCrossEndInfo()},继续计算") + } + } + } + + private fun calDisInRange(range: ((Boolean, Float) -> Unit)) { + if (cameraDis == null) { + range.invoke(false, 0f) + return + } + val loc = CallerChassisLocationWGS84ListenerManager.getChassisLocationWGS84() + val dis = CoordinateUtils.calculateLineDistance( + cameraDis!!.lon, + cameraDis!!.lat, + loc.longitude, + loc.latitude + ) + if (dis < 220 && dis >= 5) { + range.invoke(true, dis) + }else{ + range.invoke(false,dis) + } + } + + private fun handleCameraMarker() { if (!isCameraRequest) { CallerLogger.d("$M_MAP$TAG", "未触发路口获取marker") return } - if (!cross) { - // 停止请求摄像头数据 - ndeRoadCameraNetWorkModel.cancelRequest("roadCross") - // 清除marker - CallerLogger.d("$M_MAP$TAG", "remove marker handler") - handler.sendEmptyMessageDelayed(REMOVE_MARKER_MSG, REMOVE_MARKER_DELAY_TIME) - // 释放控制 - isCameraRequest = false - CallerLogger.d("$M_MAP$TAG", "经过路口,释放控制") - } + // 停止请求摄像头数据 + ndeRoadCameraNetWorkModel.cancelRequest("roadCross") + // 清除marker + CallerLogger.d("$M_MAP$TAG", "handleCameraMarker remove marker handler") + handler.sendEmptyMessageDelayed(REMOVE_MARKER_MSG, REMOVE_MARKER_DELAY_TIME) + // 释放控制 + isCameraRequest = false } private fun traceError(msg: String) { diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamView.kt index 0ab1959506..c8179001ee 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/RoadCrossRoamView.kt @@ -188,18 +188,9 @@ class RoadCrossRoamView @JvmOverloads constructor( } } - override fun onStopLineInfo(info: StopLine) { - super.onStopLineInfo(info) - val cross = CallerMapRoadListenerManager.getCrossEndInfo() - if (info.distance == 0.0 || info.distance > 200) { - if (cross != null && cross != "0") { - CallerLogger.d("$M_MAP$TAG", "未触发,路口ID:$cross , 距离超出:${info.distance}") - } - return - } - CallerLogger.d("$M_MAP$TAG", "命中 before:$showState") - showState = info.distance in 100.0..200.0 - CallerLogger.d("$M_MAP$TAG", "命中 after:$showState,路口ID:$cross , dis:${info.distance}") + override fun onCrossDevice(trigger: Boolean) { + super.onCrossDevice(trigger) + showState = trigger } private fun attachView() { @@ -234,17 +225,17 @@ class RoadCrossRoamView @JvmOverloads constructor( CallerLogger.d("$M_MAP$TAG", "未触发,路口ID:$cross") return } - if (!instance.hasCrossCamera()) { - CallerLogger.d("$M_MAP$TAG", "没有路侧设备,不做处理") - return - } isShow = true //播放语音 val dis = CallerMapRoadListenerManager.getStopLineDistance()?.toInt() ?: 0 if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - var disStr = "前方即将通过路口,${SkinResources.getInstance().getString(R.string.operation_platform_name)}为您提供路口全息影像,助力出行" + var disStr = "前方即将通过路口,${ + SkinResources.getInstance().getString(R.string.operation_platform_name) + }为您提供路口全息影像,助力出行" if (dis >= 80) { - disStr = "前方${dis}米将通过路口,${SkinResources.getInstance().getString(R.string.operation_platform_name)}为您提供路口全息影像,助力出行" + disStr = "前方${dis}米将通过路口,${ + SkinResources.getInstance().getString(R.string.operation_platform_name) + }为您提供路口全息影像,助力出行" } AIAssist.getInstance(context).speakTTSVoice(disStr) } diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt index ceb4614e52..60714df309 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/deva/chain/ChainConstant.kt @@ -116,6 +116,7 @@ class ChainConstant { const val CHAIN_CODE_HD_MAP_CALL = "CHAIN_CODE_HD_MAP_CALL" const val CHAIN_CODE_HD_MAP_ROAD_CROSS = "CHAIN_CODE_HD_MAP_ROAD_CROSS" const val CHAIN_CODE_HD_MAP_ROAD_LIVE = "CHAIN_CODE_HD_MAP_ROAD_LIVE" + const val CHAIN_CODE_HD_MAP_ROAD_DEVICE_TRIGGER = "CHAIN_CODE_HD_MAP_ROAD_DEVICE_TRIGGER" const val CHAIN_CODE_HD_MAP_ICON_SET = "CHAIN_CODE_HD_MAP_ICON_SET" const val CHAIN_CODE_HMI_ACTIONS = "CHAIN_CODE_HMI_ACTIONS" const val CHAIN_CODE_CERT_REQUEST = "CHAIN_CODE_CERT_REQUEST" diff --git a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/road/IMoGoMapRoadListener.kt b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/road/IMoGoMapRoadListener.kt index 43f8394d74..ba0f36b3a5 100644 --- a/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/road/IMoGoMapRoadListener.kt +++ b/core/mogo-core-function-api/src/main/java/com/mogo/eagle/core/function/api/map/road/IMoGoMapRoadListener.kt @@ -19,4 +19,7 @@ interface IMoGoMapRoadListener { fun onRoadCrossClick() {} + fun onCrossDevice(trigger:Boolean){} + + } \ No newline at end of file diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt index 90ef5abbfb..c27ebaa86f 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/map/CallerMapRoadListenerManager.kt @@ -15,11 +15,16 @@ object CallerMapRoadListenerManager : CallerBase() { private var mRoadId: String? = null private var mStopLine: StopLine? = null + @Volatile private var mRoadChange = false + @Volatile private var mRoadCross: RoadCross? = null + @Volatile + private var mTrigger = false + private var mCross: Int by Delegates.observable(-1) { _, oldValue, newValue -> if (oldValue != newValue) { CallerLogger.d("$M_MAP onRoadChange observable", newValue) @@ -40,9 +45,9 @@ object CallerMapRoadListenerManager : CallerBase() { mStopLine?.let { listener.onStopLineInfo(it) } - if (mCross != -1 && mRoadCross != null) { - listener.onRoadChange(mRoadChange, mRoadCross) - } + // 启动默认false + listener.onRoadChange(mRoadChange, mRoadCross) + listener.onCrossDevice(mTrigger) } fun invokeListenersOnRoadIdGet(roadId: String) { @@ -116,4 +121,17 @@ object CallerMapRoadListenerManager : CallerBase() { entry.value.onCrossLiveInfo(info) } } + + @ChainLog( + linkChainLog = ChainConstant.CHAIN_TYPE_STATUS, + linkCode = ChainConstant.CHAIN_SOURCE_MAP, + nodeAliasCode = ChainConstant.CHAIN_CODE_HD_MAP_ROAD_DEVICE_TRIGGER, + paramIndexes = [0] + ) + fun invokeCrossDevice(trigger:Boolean){ + mTrigger = trigger + M_LISTENERS.forEach { entry -> + entry.value.onCrossDevice(trigger) + } + } } \ No newline at end of file From e8e642360cdd833f32a987b839891c5b6197c0d2 Mon Sep 17 00:00:00 2001 From: EmArrow Date: Mon, 4 Nov 2024 14:04:07 +0800 Subject: [PATCH 2/6] [6.7.4] update version --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index f8fad816b6..31fb8cd795 100644 --- a/gradle.properties +++ b/gradle.properties @@ -151,7 +151,7 @@ MATRIX_VERSION=2.0.8 # 公交模式司机端版本号 -DRIVER_VERSION=6.7.2 +DRIVER_VERSION=6.7.4 # 公交模式乘客端端版本号 -PASSENGER_VERSION=5.7.2 +PASSENGER_VERSION=5.7.4 From 4b3db5d6c49cd5835935757adcff20749e77d48d Mon Sep 17 00:00:00 2001 From: zhongchao Date: Tue, 5 Nov 2024 19:22:05 +0800 Subject: [PATCH 3/6] [6.7.4] fix ui bug --- .../src/main/res/layout/view_road_cross_roam.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/function-impl/mogo-core-function-map/src/main/res/layout/view_road_cross_roam.xml b/core/function-impl/mogo-core-function-map/src/main/res/layout/view_road_cross_roam.xml index 1d73bdacd5..2ca27ff1aa 100644 --- a/core/function-impl/mogo-core-function-map/src/main/res/layout/view_road_cross_roam.xml +++ b/core/function-impl/mogo-core-function-map/src/main/res/layout/view_road_cross_roam.xml @@ -41,7 +41,7 @@ Date: Wed, 6 Nov 2024 11:38:56 +0800 Subject: [PATCH 4/6] =?UTF-8?q?[6.7.4]=20[fix]=20[=E8=87=AA=E9=A9=BE?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/common/module/wigets/autopilot/AutopilotStateModel.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt index b0138cb9ed..80a50bbcdc 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/wigets/autopilot/AutopilotStateModel.kt @@ -111,7 +111,7 @@ class AutopilotStateModel : ViewModel(), IOchAutopilotStatusListener, ILineCall this.viewCallback?.autopilotDisable() } IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE-> { - if (CallerAutoPilotControlManager.isCanStartAutopilot(false) || OchAutoPilotStatusListenerManager.canStartAutopilotFromFSM) {// 不可用 + if (CallerAutoPilotControlManager.isCanStartAutopilot(false) && OchAutoPilotStatusListenerManager.canStartAutopilotFromFSM) {// 不可用 this.viewCallback?.canStartAutopilot() } else {// 部分可用 this.viewCallback?.autopilotDisable() From 1791fd28f29c658fc4bb7364262854597cddceaa Mon Sep 17 00:00:00 2001 From: yangyakun Date: Wed, 6 Nov 2024 18:20:24 +0800 Subject: [PATCH 5/6] =?UTF-8?q?[6.7.4]=20[fix]=20[=E6=A0=B8=E9=94=80?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=B1=E8=B4=A5=E5=A4=84=E7=90=86]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxi/callback/ITaxiCarServiceCallback.kt | 1 + .../taxi/ui/task/TaxiCurrentTaskViewModel.kt | 4 ++++ .../och/unmanned/taxi/ui/task/TaxiTaskModel.kt | 2 ++ .../itinerarycurrent/ItineraryCurrentModel.kt | 17 ++++++++++++----- .../itinerarycurrent/ItineraryCurrentView.kt | 7 +++++-- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/callback/ITaxiCarServiceCallback.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/callback/ITaxiCarServiceCallback.kt index 708d9bb030..79b047ac66 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/callback/ITaxiCarServiceCallback.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/callback/ITaxiCarServiceCallback.kt @@ -18,4 +18,5 @@ interface ITaxiCarServiceCallback { fun onCarStartServiceFailed(code: Int, msg: String) fun onCarStartServiceError() + fun onStartTaskFail() } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiCurrentTaskViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiCurrentTaskViewModel.kt index edcfce921e..b01476393a 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiCurrentTaskViewModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiCurrentTaskViewModel.kt @@ -462,6 +462,10 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } } + override fun onStartTaskFail() { + + } + private fun clearDemoModeAndACParameters(){ if (FunctionBuildConfig.isDemoMode) { d(TAG, "setIPCDemoMode:false") diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt index fc0bc0cee0..77f79bbfd9 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/TaxiTaskModel.kt @@ -947,6 +947,7 @@ object TaxiTaskModel { override fun onError() { super.onError() + mTaxiCarServiceCallback?.onStartTaskFail() if (!NetworkUtils.isConnected(mContext)) { // 网络异常,接口重试 ToastUtils.showShort("网络出现异常,请稍后重试") DebugView.printErrorMsg("[开始任务] 网络出现异常,请稍后重试") @@ -957,6 +958,7 @@ object TaxiTaskModel { } override fun onFail(code: Int, msg: String?) { + mTaxiCarServiceCallback?.onStartTaskFail() DebugView.printErrorMsg("[开始任务] 请求fail, code=$code, msg=$msg, lindId=$lineId") d(TAG, "startTask onFail: code=$code, msg=$msg") ToastUtils.showShort("开始任务请求出现异常,请稍后重试,code=$code, msg=$msg, lindId=$lineId") diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/itinerarycurrent/ItineraryCurrentModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/itinerarycurrent/ItineraryCurrentModel.kt index b843c773be..34202a630c 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/itinerarycurrent/ItineraryCurrentModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/itinerarycurrent/ItineraryCurrentModel.kt @@ -1,6 +1,5 @@ -package com.mogo.och.unmanned.taxi.ui.itinerarycurrent +package com.mogo.och.unmanned.taxi.ui.task.itinerarycurrent -import androidx.lifecycle.ViewModel import com.mogo.commons.AbsMogoApplication import com.mogo.commons.module.status.MogoStatusManager import com.mogo.eagle.core.data.BaseData @@ -27,7 +26,6 @@ import com.mogo.och.unmanned.taxi.R import com.mogo.och.unmanned.taxi.base.BaseViewModel import com.mogo.och.unmanned.taxi.base.IUiIntent import com.mogo.och.unmanned.taxi.bean.QueryCurrentTaskRespBean -import com.mogo.och.unmanned.taxi.bean.StartGrayAndQueryContrailRsp import com.mogo.och.unmanned.taxi.bean.StartServiceRespBean import com.mogo.och.unmanned.taxi.bean.TrajectoryListRespBean import com.mogo.och.unmanned.taxi.callback.ITaxiCarServiceCallback @@ -179,9 +177,14 @@ class ItineraryCurrentModel : BaseViewModel(), private fun startTask(isStartAutopilot: Boolean = true) { if (!TaxiTaskModel.checkCurrentTaskCondition()) { ToastUtils.showShort("无任务!") + onStartTaskFail() + return + } + if(TaxiTaskModel.getCurrentTaskWithOrder()==null){ + ToastUtils.showShort("无任务!") + onStartTaskFail() return } - TaxiTaskModel.getCurrentTaskWithOrder()?.let { TaxiTaskModel.startTask( if (it.order != null && it.order!!.orderStatus >= TaxiOrderStatusEnum.ArriveAtStart.code) @@ -480,6 +483,10 @@ class ItineraryCurrentModel : BaseViewModel(), } } + override fun onStartTaskFail() { + viewCallback?.onStartTaskFail() + } + private fun clearDemoModeAndACParameters(){ if (FunctionBuildConfig.isDemoMode) { d(TAG, "setIPCDemoMode:false") @@ -505,7 +512,7 @@ class ItineraryCurrentModel : BaseViewModel(), interface SwtichLineViewCallback { - + fun onStartTaskFail() } } diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/itinerarycurrent/ItineraryCurrentView.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/itinerarycurrent/ItineraryCurrentView.kt index 6a53c25dc4..147d856dc6 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/itinerarycurrent/ItineraryCurrentView.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/unmanned/taxi/ui/task/itinerarycurrent/ItineraryCurrentView.kt @@ -32,7 +32,6 @@ import com.mogo.och.common.module.utils.FlowBus import com.mogo.och.common.module.utils.ResourcesUtils import com.mogo.och.common.module.voice.VoiceNotice import com.mogo.och.common.module.wigets.CommonSlideView -import com.mogo.och.common.module.wigets.OCHCommitDialog import com.mogo.och.common.module.wigets.dialog.CommonDialogStatus import com.mogo.och.unmanned.taxi.R import com.mogo.och.unmanned.taxi.TaxiUnmannedDriverProvider @@ -46,7 +45,6 @@ import com.mogo.och.unmanned.taxi.constant.TaxiUnmannedConst.Companion.TAXI_END_ import com.mogo.och.unmanned.taxi.constant.TaxiUnmannedConst.Companion.TAXI_START_MAP_MAKER import com.mogo.och.unmanned.taxi.constant.TaxiUnmannedConst.Companion.TYPE_MARKER_TAXI_ORDER import com.mogo.och.unmanned.taxi.ui.debug.DebugView -import com.mogo.och.unmanned.taxi.ui.itinerarycurrent.ItineraryCurrentModel import com.mogo.och.unmanned.taxi.ui.task.TaskUiIntent import com.mogo.och.unmanned.taxi.ui.task.TaskWithOrderUIState import com.mogo.och.unmanned.taxi.ui.task.TaxiTaskModel @@ -868,4 +866,9 @@ class ItineraryCurrentView: ConstraintLayout, ItineraryCurrentModel.SwtichLineVi } } + override fun onStartTaskFail() { + commonSlideViewStartServer.reset() + } + + } From 72a01b70c545cd2273b95188f341e6b0576260d1 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Fri, 8 Nov 2024 13:47:21 +0800 Subject: [PATCH 6/6] =?UTF-8?q?[6.7.2]=20[fix]=20[line=20add=E3=80=81delet?= =?UTF-8?q?e=20or=20update]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/db/repository/LineDb.kt | 7 ++++++ .../weaknet/ui/switchline/SwitchLineView.kt | 2 +- .../weaknet/ui/switchline/SwtichLineModel.kt | 3 ++- .../mogo/och/common/module/ExampleUnitTest.kt | 24 +++++++++++++++++++ .../eagle/core/utilcode/kotlin/Extensions.kt | 12 ++++++++++ 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/LineDb.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/LineDb.kt index bfe087e8dd..a3cb252780 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/LineDb.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/repository/db/repository/LineDb.kt @@ -46,6 +46,13 @@ object LineDb: IDbRepository { // TODO: Ui展示需要动态刷新UI去 return } + val tempList = loadData.groupBy { it.lineId }.filter { it.value.size > 1 } + val needDelete = mutableListOf() + tempList.forEach {multData-> + needDelete.add(multData.value.first()) + } + // 删除本地重复的 + lineDao.delete(*needDelete.toTypedArray()) // 后台新增数据 val needAddDatas = serverDatalist-loadData // 后台没有本地数据库有的未分配线路 diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt index 5b623e475d..81f25f01bf 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwitchLineView.kt @@ -86,7 +86,7 @@ class SwitchLineView: WindowRelativeLayout, SwtichLineModel.SwtichLineViewCallba } }) - aciv_refresh_task.onClick { + aciv_refresh_task.onClick(5_000) { if(RepositoryManager.supportDb()) { viewModel?.refreshTask() }else{ diff --git a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt index f9d6c98b0a..8c079a44c1 100644 --- a/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt +++ b/OCH/shuttle/driver_weaknet/src/main/java/com/mogo/och/weaknet/ui/switchline/SwtichLineModel.kt @@ -66,7 +66,8 @@ class SwtichLineModel : ViewModel(), IBusLinesCallback { override fun onNext(data: List) { d(LineModel.TAG, "queryBusLines onNext ${data}") - viewCallback?.onBusLinesChange(data.toMutableList(),loading) + val tempData = data.distinctBy { it.lineId } + viewCallback?.onBusLinesChange(tempData.toMutableList(),loading) if(RepositoryManager.supportDb()) { }else{ diff --git a/OCH/shuttle/driver_weaknet/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt b/OCH/shuttle/driver_weaknet/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt index 0f0d3d5be4..9fd52af8a0 100644 --- a/OCH/shuttle/driver_weaknet/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt +++ b/OCH/shuttle/driver_weaknet/src/test/java/com/mogo/och/common/module/ExampleUnitTest.kt @@ -1,6 +1,7 @@ package com.mogo.och.common.module import com.mogo.eagle.core.network.utils.digest.DigestUtils +import com.mogo.och.weaknet.repository.db.bean.LineDataBean import com.mogo.och.weaknet.repository.db.bean.SiteDataBean import org.junit.Test @@ -10,6 +11,29 @@ import org.junit.Test * See [testing documentation](http://d.android.com/tools/testing). */ class ExampleUnitTest { + + @Test + fun lineTest() { + + + val serverDataList = mutableListOf() + serverDataList.add(LineDataBean(lineId = 12)) + serverDataList.add(LineDataBean(lineId = 12)) + serverDataList.add(LineDataBean(lineId = 13)) + serverDataList.add(LineDataBean(lineId = 13)) + + val tempData = serverDataList.distinctBy { it.lineId } + println(serverDataList) + println(tempData) + + val loaclDataList = mutableListOf() + loaclDataList.add(LineDataBean(lineId = 12)) + loaclDataList.add(LineDataBean(lineId = 12)) + loaclDataList.add(LineDataBean(lineId = 13)) + + + } + @Test fun addition_isCorrect() { diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/kotlin/Extensions.kt b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/kotlin/Extensions.kt index a68d0605eb..cbafd5e7fd 100644 --- a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/kotlin/Extensions.kt +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/kotlin/Extensions.kt @@ -21,6 +21,7 @@ import androidx.lifecycle.Lifecycle.Event.ON_DESTROY import androidx.recyclerview.widget.RecyclerView import com.mogo.eagle.core.utilcode.util.ClickUtils import com.mogo.eagle.core.utilcode.util.R +import com.mogo.eagle.core.utilcode.util.ToastUtils import com.mogo.eagle.core.utilcode.util.Utils import kotlinx.coroutines.* import kotlinx.coroutines.channels.Channel @@ -109,6 +110,17 @@ fun View.onClick(block: (View) -> Unit) { } } +fun View.onClick(during:Int,block: (View) -> Unit) { + this.setOnClickListener { + if (ClickUtils.isClickTooFrequent(this,during)) { + ToastUtils.showShort("不要频繁点击哦~") + return@setOnClickListener + } + block(it) + } +} + + fun View.onClickWidthDuration(duration: Int, block: (View) -> Unit) { this.setOnClickListener { if (ClickUtils.isClickTooFrequent(this, duration)) {