diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiRoutingBean.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiRoutingBean.kt index aa5fd325a5..fe4b2a391b 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiRoutingBean.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/bean/TaxiRoutingBean.kt @@ -2,6 +2,9 @@ package com.mogo.och.taxi.bean import com.mogo.eagle.core.data.BaseData +/** + * 灰度路线信息 + */ data class GrayLineBean( var lineId: Long?, //线路id var lineName: String?, //线路名称 @@ -11,18 +14,30 @@ data class GrayLineBean( var lineFailCount: Int?, //线路累计反馈不可用次数 var isChoosed: Boolean = false, //当前是否选中 var startSite: RoutingSite?, - var endSite: RoutingSite? + var endSite: RoutingSite?, + var hdMapDBVersionCode: String?,// Routing 运营平台通过算路引擎算这条路时候使用的对应高精地图版本号 + var hdMapDBVersionName: String?,// Routing 运营平台通过算路引擎算这条路时候使用的对应高精地图版本名 + var routingEnginVersionCode: String?,// Routing 运营平台当前的算路引擎版本号码 + var routingEnginVersionName: String?,// Routing 运营平台当前的算路引擎版本名称 + var wayPoints: MutableList?,// Routing 给算路引擎使用的经停点列表,不是真正的要停车 + var blackPoints: MutableList?// Routing 给算路引擎使用的黑名单点,目的是不参与算路 ) +/** + * 站点信息 + */ data class RoutingSite( - var siteId: Long, - var siteName: String, - var gcjLat: Double, - var gcjLon: Double, - var wgs84Lon: Double, - var wgs84Lat: Double + var siteId: Long,// 站点ID + var siteName: String,// 站点名称 + var gcjLat: Double,// 高德坐标 + var gcjLon: Double,// 高德坐标 + var wgs84Lon: Double,//高精坐标 + var wgs84Lat: Double//高精坐标 ) +/** + * 轨迹信息 + */ data class ContrailBean( var lineId: Long = -1L, var lineName: String = "", @@ -40,29 +55,70 @@ data class ContrailBean( var version: Long = -1L ) +/** + * 查询灰度线路列表 + */ data class QueryGrayContrailListRsp(var data: MutableList?) : BaseData() + +/** + * 通过id查询轨迹详情 + */ data class StartGrayContrailTaskReq(var sn: String, var contrailId: Long) + +/** + * 开始一个路线的灰度任务,对服务端的路线标记 + */ data class StartGrayContrailTaskRsp(var data: Long?) : BaseData() + +/** + * 根据id查询灰度轨迹详情 + */ data class QueryRoutingContrailByIdRsp(var data: ContrailBean?) : BaseData() + +/** + * 上报路线打点 + */ data class SubmitGrayLineIssueLocationReq(var grayId: Long, var gcjLon: Double, var gcjLat: Double) -data class EndGrayContrailTaskReq(var grayId: Long, var feedback: Int,var occurrenceTime:Long) //feedback 1:成功 2:失败 + +/** + * 结束一个路线的灰度任务 + */ +data class EndGrayContrailTaskReq( + var grayId: Long, + var feedback: Int, + var occurrenceTime: Long +) //feedback 1:成功 2:失败 + + +/** + * 灰度任务&查询轨迹详情 + */ data class StartGrayAndQueryContrailRsp( var taskId: Long?, var contrail: ContrailBean?, var grayLineBean: GrayLineBean ) : BaseData() -data class PointError(var code:String,var name:String,var isCheck:Boolean = false) +data class PointError(var code: String, var name: String, var isCheck: Boolean = false) + +/** + * 获取打点问题字典 + */ data class QueryPointErrorReasonsRsp(var data: MutableList?) : BaseData() + +/** + * 结束一个路线的灰度任务,并上报灰度路线测试情况 + */ data class SaveGrayContrailErrorReasons( var grayId: Long, var gcjLon: Double, var gcjLat: Double, var wgs84Lon: Double, var wgs84Lat: Double, - var occurrenceTime:Long, + var occurrenceTime: Long, var noteCodes: MutableList, ) //feedback 1:成功 2:失败 + enum class EndGrayTaskFeedbackType(var type: Int) { USABLE_YES(1), USABLE_NO(2) diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingChooseLineActivity.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingChooseLineActivity.kt index 4514f3b265..b9e8894048 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingChooseLineActivity.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingChooseLineActivity.kt @@ -107,6 +107,9 @@ class TaxiRoutingChooseLineActivity : AppCompatActivity() { } } + /** + * 初始化UI观察者 + */ private fun initViewModelObserver() { lifecycleScope.launchWhenStarted { mViewModel.uiStateFlow.map { it.routingUiState }.collect { routingUiState -> @@ -114,6 +117,7 @@ class TaxiRoutingChooseLineActivity : AppCompatActivity() { TAG, "uiStateFlow-initViewModelObserver: $routingUiState" ) + // 分发处理具体UI更新 when (routingUiState) { is RoutingUIState.Init -> { showEmptyView() @@ -131,6 +135,7 @@ class TaxiRoutingChooseLineActivity : AppCompatActivity() { } } + // 将结果同步更新到UI is RoutingUIState.PostRoutingTaskResult -> { FlowBus.with(TaxiDriverEventConst.RoutingActivityEvent.EVENT_TYPE_GET_CHOSEN_LINE_TASK) .post(this, RoutingUIState.RoutingTask( diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingChooseLineViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingChooseLineViewModel.kt index f6f733248e..f69a3b5f2b 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingChooseLineViewModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingChooseLineViewModel.kt @@ -56,6 +56,9 @@ class TaxiRoutingChooseLineViewModel : BaseViewModel + // 初始化自动驾驶需要的参数 + val parameters = initAutopilotControlParameters( + startGrayAndQueryContrailRsp.grayLineBean, + contrail + ) + + if (parameters!!.autoPilotLine == null) { + CallerLogger.e( + SceneConstant.M_BUS + TAG, + "sendTrajectoryReq(): mAutoPilotLine is null!!!" + ) + return + } + writeChainLog( + "轨迹监控", + "sendTrajectoryReq() 下发轨迹 轨迹id" + parameters.autoPilotLine!!.lineId, + true, + OchChainLogManager.EVENT_KEY_INFE_WITH_TRAJECTORY + ) + CallerAutoPilotControlManager.sendTrajectoryDownloadReq(parameters) + CallerLogger.d( + SceneConstant.M_BUS + TAG, + "sendTrajectoryReq(): " + + GsonUtils.toJson(parameters) + ) + } + } + /** * 更新灰度路线信息 */ @@ -521,7 +558,7 @@ object TaxiRoutingModel { } // 开启自动驾驶 - OchAutoPilotManager.startAutoPilot(parameters); + OchAutoPilotManager.startAutoPilot(parameters) DebugView.printInfoMsg("[启自驾] 调用成功") CallerLogger.d( @@ -531,6 +568,9 @@ object TaxiRoutingModel { mControllerStatusCallback?.startOpenAutopilot() } + /** + * 初始化自动驾驶控制参数 + */ private fun initAutopilotControlParameters( grayLineBean: GrayLineBean, contrailBean: ContrailBean @@ -548,6 +588,36 @@ object TaxiRoutingModel { parameters.startLatLon = AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon) parameters.endLatLon = AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon) + + // Routing 给算路引擎使用的:经停点列表、黑名单 + val wayLatLons: MutableList = ArrayList() + val blackLatLons: MutableList = ArrayList() + + if (!grayLineBean.wayPoints.isNullOrEmpty()) { + for (mogoLatLng in grayLineBean.wayPoints!!) { + wayLatLons.add( + AutopilotControlParameters.AutoPilotLonLat( + mogoLatLng.wgs84Lat, + mogoLatLng.wgs84Lon + ) + ) + } + } + + if (!grayLineBean.blackPoints.isNullOrEmpty()) { + for (mogoLatLng in grayLineBean.blackPoints!!) { + wayLatLons.add( + AutopilotControlParameters.AutoPilotLonLat( + mogoLatLng.wgs84Lat, + mogoLatLng.wgs84Lon + ) + ) + } + } + + parameters.wayLatLons = wayLatLons + parameters.blackLatLons = blackLatLons + if (parameters.autoPilotLine == null) { parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine( contrailBean.lineId, diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingUiState.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingUiState.kt index 9aef55856b..8be6e8e374 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingUiState.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/routing/TaxiRoutingUiState.kt @@ -6,6 +6,9 @@ import com.mogo.och.taxi.bean.GrayLineBean data class TaxiRoutingUiState(val routingUiState: RoutingUIState) : IUiState +/** + * 算路UI状态 + */ sealed class RoutingUIState { object Init : RoutingUIState() diff --git a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotControlParameters.kt b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotControlParameters.kt index 58f9e37cf3..7fcc66a5f9 100644 --- a/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotControlParameters.kt +++ b/core/mogo-core-data/src/main/java/com/mogo/eagle/core/data/autopilot/AutopilotControlParameters.kt @@ -113,7 +113,10 @@ class AutopilotControlParameters { var startLatLon: AutoPilotLonLat? = null @JvmField - var wayLatLons: List? = null + var wayLatLons: List? = null // Routing 给算路引擎使用的经停点列表,不是真正的要停车 + + @JvmField + var blackLatLons: List? = null // Routing 给算路引擎使用的黑名单点,目的是不参与算路 @JvmField var endLatLon: AutoPilotLonLat? = null @@ -222,6 +225,7 @@ class AutopilotControlParameters { "endName='$endName', " + "startLatLon=$startLatLon, " + "wayLatLons=$wayLatLons," + + "blackLatLons=$blackLatLons," + "endLatLon=$endLatLon," + "speedLimit=$speedLimit, " + "vehicleType=$vehicleType, " + diff --git a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt index 627f2e4fad..227630c0c2 100644 --- a/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt +++ b/core/mogo-core-function-call/src/main/java/com/mogo/eagle/core/function/call/autopilot/CallerAutoPilotControlManager.kt @@ -4,6 +4,8 @@ import android.os.SystemClock import chassis.SpecialVehicleTaskCmdOuterClass import com.mogo.commons.voice.AIAssist import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters +import com.mogo.eagle.core.data.autopilot.toAutoPilotLine +import com.mogo.eagle.core.data.autopilot.toRouteInfo import com.mogo.eagle.core.data.deva.badcase.BagManagerEntity import com.mogo.eagle.core.data.config.FunctionBuildConfig import com.mogo.eagle.core.data.constants.MogoServicePaths @@ -177,12 +179,23 @@ object CallerAutoPilotControlManager { } } + /** + * 发送 轨迹下载请求 + */ + fun sendTrajectoryDownloadReq(autopilotControlParameters: AutopilotControlParameters) { + if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { + // Routing 需要传参 routeInfo + providerApi?.sendTrajectoryDownloadReq(autopilotControlParameters.autoPilotLine!!, autopilotControlParameters.toRouteInfo()) + CallerAutoPilotStatusListenerManager.invokeTrajectoryDownloadReq(autopilotControlParameters.autoPilotLine!!, 0) + } + } + /** * 发送 轨迹下载请求 */ fun sendTrajectoryDownloadReq(autoPilotLine: AutopilotControlParameters.AutoPilotLine) { if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - //TODO Routing 需要传参 routeInfo + //TODO Routing 需要传参 routeInfo,这里建议业务侧重新整合到同一个数据实体内传入 providerApi?.sendTrajectoryDownloadReq(autoPilotLine, null) CallerAutoPilotStatusListenerManager.invokeTrajectoryDownloadReq(autoPilotLine, 0) } @@ -194,7 +207,7 @@ object CallerAutoPilotControlManager { */ fun sendTrajectoryDownloadReq(autoPilotLine: AutopilotControlParameters.AutoPilotLine, downloadType: Int) { if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) { - //TODO Routing 需要传参 routeInfo + //TODO Routing 需要传参 routeInfo,这里建议业务侧重新整合到同一个数据实体内传入 providerApi?.sendTrajectoryDownloadReq(autoPilotLine, downloadType, null) CallerAutoPilotStatusListenerManager.invokeTrajectoryDownloadReq(autoPilotLine, downloadType) }