[Routing dev]

1、灰度列表增加RoutingRequest关键信息,以及透传给MAP
This commit is contained in:
donghongyu
2024-06-12 17:25:38 +08:00
parent 71139f9c9a
commit ade4b8a9a8
7 changed files with 172 additions and 18 deletions

View File

@@ -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<RoutingSite>?,// Routing 给算路引擎使用的经停点列表,不是真正的要停车
var blackPoints: MutableList<RoutingSite>?// 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<GrayLineBean>?) : 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<PointError>?) : 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<String>,
) //feedback 1:成功 2:失败
enum class EndGrayTaskFeedbackType(var type: Int) {
USABLE_YES(1),
USABLE_NO(2)

View File

@@ -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<RoutingUIState.RoutingTask>(TaxiDriverEventConst.RoutingActivityEvent.EVENT_TYPE_GET_CHOSEN_LINE_TASK)
.post(this, RoutingUIState.RoutingTask(

View File

@@ -56,6 +56,9 @@ class TaxiRoutingChooseLineViewModel : BaseViewModel<TaxiRoutingUiState, TaxiRou
}
}
/**
* 查询轨迹详情成功的回调
*/
override fun onStartGrayTaskAndQueryContrailSuccess(data: StartGrayAndQueryContrailRsp) {
if (data.taskId == -1L) {
onStartGrayTaskAndQueryContrailFailed("开始任务失败, 请稍后重试")

View File

@@ -19,12 +19,14 @@ import com.mogo.eagle.core.utilcode.util.DrivingDirectionUtils
import com.mogo.eagle.core.utilcode.util.GsonUtils
import com.mogo.eagle.core.utilcode.util.NetworkUtils
import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.common.module.manager.autopilot.OCHAdasAbilityManager
import com.mogo.och.common.module.manager.autopilot.autopilot.ArrivedStation
import com.mogo.och.common.module.manager.autopilot.autopilot.IOchAutopilotStatusListener
import com.mogo.och.common.module.manager.autopilot.autopilot.OchAutoPilotManager
import com.mogo.och.common.module.manager.autopilot.autopilot.OchAutoPilotStatusListenerManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager
import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager.writeChainLog
import com.mogo.och.common.module.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.OCHThreadPoolManager
import com.mogo.och.taxi.bean.ContrailBean
import com.mogo.och.taxi.bean.EndGrayContrailTaskReq
@@ -285,8 +287,10 @@ object TaxiRoutingModel {
DebugView.printInfoMsg("[开始灰度任务&查询轨迹详情] 请求successtaskId=${data.taskId}, contrailId=${contrailId}, lineId=${grayLineBean.lineId}")
mTaxiRoutingCallbackMap.forEach {
val listener = it.value
//TODO Routing 从这里解析出经停信息,并和订单一样调用下载轨迹接口
listener.onStartGrayTaskAndQueryContrailSuccess(data)
// Routing 从这里解析出经停信息,轨迹信息,并调用下载轨迹接口
sendTrajectoryReq(data)
}
}
@@ -391,9 +395,9 @@ object TaxiRoutingModel {
/**
* 结束灰度任务
*/
fun endGrayTask(grayId: Long, type: EndGrayTaskFeedbackType, occurrenceTime:Long,) {
fun endGrayTask(grayId: Long, type: EndGrayTaskFeedbackType, occurrenceTime: Long) {
DebugView.printInfoMsg("[结束灰度任务] 准备发送请求grayId=$grayId type=${type.type}, typeName=${type.name}")
val submit = EndGrayContrailTaskReq(grayId, type.type,occurrenceTime)
val submit = EndGrayContrailTaskReq(grayId, type.type, occurrenceTime)
TaxiRoutingServiceManager.endGrayTask(
mContext,
submit,
@@ -449,6 +453,39 @@ object TaxiRoutingModel {
})
}
/**
* 下载路线请求
*/
fun sendTrajectoryReq(startGrayAndQueryContrailRsp: StartGrayAndQueryContrailRsp) {
startGrayAndQueryContrailRsp.contrail?.let { contrail ->
// 初始化自动驾驶需要的参数
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<AutopilotControlParameters.AutoPilotLonLat> = ArrayList()
val blackLatLons: MutableList<AutopilotControlParameters.AutoPilotLonLat> = 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,

View File

@@ -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()

View File

@@ -113,7 +113,10 @@ class AutopilotControlParameters {
var startLatLon: AutoPilotLonLat? = null
@JvmField
var wayLatLons: List<AutoPilotLonLat>? = null
var wayLatLons: List<AutoPilotLonLat>? = null // Routing 给算路引擎使用的经停点列表,不是真正的要停车
@JvmField
var blackLatLons: List<AutoPilotLonLat>? = 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, " +

View File

@@ -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)
}