[6.0.0] 轨迹逻辑加载调整

This commit is contained in:
wangmingjun
2023-08-11 14:59:00 +08:00
parent a3b595703e
commit 782b0f1851
11 changed files with 318 additions and 203 deletions

View File

@@ -20,5 +20,5 @@ data class UnmannedLogoutReqBean(var sn: String, var loc: GcjLatLon?)
data class StartServiceReqBean(var sn: String, var gcjLat: Double, var gcjLon: Double)
data class StartServiceRespBean(var data: Result?): BaseData(){
data class Result(var siteId: Int,var siteName: String,var gcjLat: Double, var gcjLon: Double)
data class Result(var siteId: Long,var siteName: String,var gcjLat: Double, var gcjLon: Double)
}

View File

@@ -12,7 +12,7 @@ data class OrderDetail(
var orderStatus: Int,
var orderStartSite: Site?,
var orderEndSite: Site?,
var planningLines: Array<Int>,
var planningLines: Array<Long>,
var phone: String,
var passengerNum: Int
) {
@@ -41,7 +41,7 @@ data class OrderDetail(
}
}
data class Site(var siteId: Int, var siteName: String, var gcjLat: Double, var gcjLon: Double) {
data class Site(var siteId: Long, var siteName: String, var gcjLat: Double, var gcjLon: Double) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
@@ -58,7 +58,7 @@ data class Site(var siteId: Int, var siteName: String, var gcjLat: Double, var g
data class QueryCurrentTaskRespBean(var data: Result?) : BaseData() {
data class Result(
var sn: String, var lineId: Int, var servingStatus: Int,
var sn: String, var lineId: Long, var servingStatus: Int,
var currentStatus: Int, var taskType: Int,
var startSite: Site?, var endSite: Site?,
var order: OrderDetail?
@@ -85,12 +85,12 @@ data class QueryCurrentTaskRespBean(var data: Result?) : BaseData() {
}
}
data class StartTaskReqBean(var sn: String, var lineId: Int)
data class StartTaskReqBean(var sn: String, var lineId: Long)
data class ArriveSiteReqBean(var sn: String, var siteId: Int)
data class PrepareTaskReqBean(var sn: String, var siteId: Int)
data class ArriveSiteReqBean(var sn: String, var siteId: Long)
data class PrepareTaskReqBean(var sn: String, var siteId: Long)
data class PrepareTaskRespBean(
var lineId: Int, var cityCode: Int, var taskType: Int,
var lineId: Long, var cityCode: Int, var taskType: Int,
var startSite: Site, var endSite: Site
) //taskType 1:虚拟任务 2:接驾任务3:送驾任务
: BaseData()
@@ -98,17 +98,17 @@ data class PrepareTaskRespBean(
data class JumpPassengerCheckReqBean(var sn: String, var orderNo: String)
data class CancelOrderReqBean(var sn: String, var orderNo: String)
data class OrderCompletedReqBean(var sn: String, var orderNo: String)
data class ContrailListReqBean(var lineIds: MutableList<Int>)
data class ContrailListReqBean(var lineIds: Array<Long>)
data class QueryCarOrderByNoReqBean(var sn: String, var orderNo: String)
data class QueryCarOrderByNoRespBean(
var sn: String, var orderNo: String, var orderStatus: Int,
var bookingUserPhone: String, var businessType: String
): BaseData()
data class ContrailListRespBean(var data: MutableList<Result>) //轨迹路线集合
data class ContrailListRespBean(var data: MutableList<Result>?) //轨迹路线集合
: BaseData() {
data class Result(
var lineId: Int, var csvFileUrl: String, var csvFileMd5: String,
var lineId: Long, var csvFileUrl: String, var csvFileMd5: String,
var txtFileUrl: String, var txtFileMd5: String, var contrailSaveTime: Long,
var csvFileUrlDPQP: String, var csvFileMd5DPQP: String, var txtFileUrlDPQP: String,
var txtFileMd5DPQP: String, var contrailSaveTimeDPQP: Long

View File

@@ -12,6 +12,8 @@ class TaxiUnmannedConst {
// 到达起始点围栏
const val ARRIVE_AT_START_STATION_DISTANCE = 15 //围栏由20m改为50m 再次改为15m
const val BUSINESSTYPE = 15 //9 taxi , 10 bus
// 上报心跳轮询ms
const val LOOP_PERIOD_60S = 60 * 1000L
// 开始服务启动自动驾驶等待时间(埋点上传)

View File

@@ -3,6 +3,7 @@ package com.mogo.och.taxi.model
import android.annotation.SuppressLint
import android.content.Context
import android.net.ConnectivityManager
import android.text.TextUtils
import com.alibaba.android.arouter.launcher.ARouter
import com.amap.api.maps.model.LatLng
import com.elegant.network.utils.GsonUtil
@@ -21,6 +22,7 @@ import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener
import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.cancelAutoPilot
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.setIPCDemoMode
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager.setIgnoreConditionDraw
@@ -57,6 +59,7 @@ import com.mogo.och.common.module.manager.distancemamager.ITrajectoryListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addDistanceListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.addTrajectoryListener
import com.mogo.och.common.module.manager.distancemamager.TrajectoryAndDistanceManager.setStationPoint
import com.mogo.och.taxi.bean.ContrailListRespBean
import com.mogo.och.taxi.bean.OrderDetail
import com.mogo.och.taxi.bean.PrepareTaskRespBean
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
@@ -66,10 +69,13 @@ import com.mogo.och.taxi.callback.ITaxiADASStatusCallback
import com.mogo.och.taxi.callback.ITaxiCarOperationalCallback
import com.mogo.och.taxi.callback.ITaxiControllerStatusCallback
import com.mogo.och.taxi.callback.ITaxiOrderStatusCallback
import com.mogo.och.taxi.constant.TaskStatusEnum
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
import com.mogo.och.taxi.constant.TaxiOrderStatusEnum.Companion.valueOf
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.BUSINESSTYPE
import com.mogo.och.taxi.constant.TaxiUnmannedConst.Companion.TIMER_PREPARE_TASK_INTERVAL
import com.mogo.och.taxi.network.CarServiceManager
import com.mogo.och.taxi.network.CarServiceManager.arriveSite
import com.mogo.och.taxi.network.CarServiceManager.prepareTask
import com.mogo.och.taxi.network.CarServiceManager.startTask
@@ -99,7 +105,11 @@ object TaxiModel {
private var mCurrentTaskAndOrder : QueryCurrentTaskRespBean.Result? = null //当前任务和订单
private var mUntruthTask : StartServiceRespBean.Result? = null
private var mUntruthTask : StartServiceRespBean.Result? = null // 前往出车点的伪任务, 后台并不算做真正的任务
private var mOrderContrails : MutableList<ContrailListRespBean.Result>? = null // 运营单(接驾任务和送驾任务的轨迹集合)
private var mCurTaskContrail : ContrailListRespBean.Result? = null //当前在跑的任务的轨迹信息
private var mADASStatusCallback //Model->Presenter自动驾驶状态相关
: ITaxiADASStatusCallback? = null
@@ -116,10 +126,6 @@ object TaxiModel {
private val mRoutePoints: MutableList<MogoLocation>? = ArrayList()
// private var mLongitude = 0.0
// private var mLatitude = 0.0
// private var mLocation: MogoLocation? = null
var loginService: LoginService? = null
fun setMoGoAutopilotPlanningListener(moGoAutopilotPlanningCallback: IOCHTaxiAutopilotPlanningCallback?) {
@@ -270,8 +276,16 @@ object TaxiModel {
return mCurrentTaskAndOrder
}
fun getCurOrderContrails(): MutableList<ContrailListRespBean.Result>?{
return mOrderContrails
}
fun getCurTaskContrail(): ContrailListRespBean.Result?{
return mCurTaskContrail
}
//更新本地currentOrder信息并保存订单到本地避免车机重启丢失数据
fun updateNativeCurrentOrder(data: QueryCurrentTaskRespBean.Result?) {
private fun updateNativeCurrentOrder(data: QueryCurrentTaskRespBean.Result?) {
if (data == null) {
return
}
@@ -331,6 +345,7 @@ object TaxiModel {
fun updateCurrentTaskAndOrder(result: QueryCurrentTaskRespBean.Result?){
mCurrentTaskAndOrder = result
updateNativeCurrentOrder(result)
}
fun updateUntruthTask(untruthTask : StartServiceRespBean.Result?) {
@@ -380,68 +395,71 @@ object TaxiModel {
return
}
// // TODO: 轨迹信息需要另一个接口去查一下
// //根据开关和后台是否发布轨迹启动自驾
// if (FunctionBuildConfig.isPassStartAutopilotCommand && TextUtils.isEmpty(
// mCurrentTaskAndOrder!!.csvFileUrl
// )
// && TextUtils.isEmpty(mCurrentTaskAndOrder!!.csvFileUrlDPQP)
// ) {
// ToastUtils.showLong("无发布轨迹, 请发布后重试")
// e(
// SceneConstant.M_TAXI + TAG, "isPassStartAutopilotCommand = " +
// FunctionBuildConfig.isPassStartAutopilotCommand
// + "busRoutesResult.csvFileUrl = " + mCurrentTaskAndOrder!!.csvFileUrl
// + "busRoutesResult.csvFileUrlDPQP = " + mCurrentTaskAndOrder!!.csvFileUrlDPQP
// )
// return
// }
// e(
// SceneConstant.M_TAXI + TAG, "isPassStartAutopilotCommand = " +
// FunctionBuildConfig.isPassStartAutopilotCommand
// )
// if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().autopilotAbilityStatus) {
// ToastUtils.showLong(
// OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason +
// ", 请稍候重试"
// )
// TaxiAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent(
// mCurrentOrder!!.orderStartSite!!.siteName,
// mCurrentOrder!!.orderEndSite!!.siteName,
// mCurrentOrder!!.orderNo,
// OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason
// )
// return
// }
//
// //点击开始自动驾驶按钮订单状态去流转, 不再与自动驾驶是否启动成功挂钩
// isRestartAutopilot = mCurrentOrder!!.orderStatus != TaxiOrderStatusEnum.UserArriveAtStart.code
//
// val parameters = initAutopilotControlParameters()
// if (null == parameters) {
// e(SceneConstant.M_TAXI + TAG, "AutopilotControlParameters is empty.")
// return
// }
// startAutoPilot(parameters)
// d(
// SceneConstant.M_TAXI + TAG, "start autopilot with parameter: %s",
// GsonUtil.jsonFromObject(parameters)
// + " ,startSiteName=" + mCurrentOrder!!.orderStartSite!!.siteName
// + " ,endSiteName=" + mCurrentOrder!!.orderEndSite!!.siteName
// + "isRestartAutopilot = " + isRestartAutopilot
// )
// TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(
// isRestartAutopilot,
// false,
// mCurrentOrder!!.orderStartSite!!.siteName,
// mCurrentOrder!!.orderEndSite!!.siteName,
// mCurrentOrder!!.lineId,
// mCurrentOrder!!.orderNo
// )
// if (mControllerStatusCallback != null) {
// mControllerStatusCallback!!.startOpenAutopilot()
// }
//
if (mCurTaskContrail == null){
e(SceneConstant.M_TAXI + TAG, "no order or order is empty.")
ToastUtils.showShort("轨迹信息不存在!")
}
//根据开关和后台是否发布轨迹启动自驾
if (FunctionBuildConfig.isPassStartAutopilotCommand && TextUtils.isEmpty(
mCurTaskContrail!!.csvFileUrl
)
&& TextUtils.isEmpty(mCurTaskContrail!!.csvFileUrlDPQP)
) {
ToastUtils.showLong("无发布轨迹, 请发布后重试")
e(
SceneConstant.M_TAXI + TAG, "isPassStartAutopilotCommand = " +
FunctionBuildConfig.isPassStartAutopilotCommand
+ "busRoutesResult.csvFileUrl = " + mCurTaskContrail!!.csvFileUrl
+ "busRoutesResult.csvFileUrlDPQP = " + mCurTaskContrail!!.csvFileUrlDPQP
)
return
}
e(
SceneConstant.M_TAXI + TAG, "isPassStartAutopilotCommand = " +
FunctionBuildConfig.isPassStartAutopilotCommand
)
if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().autopilotAbilityStatus) {
ToastUtils.showLong(
OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason +
", 请稍候重试"
)
TaxiAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent(
mCurrentTaskAndOrder!!.startSite!!.siteName,
mCurrentTaskAndOrder!!.endSite!!.siteName,
mCurrentTaskAndOrder!!.lineId.toString(), // todo 这里原来传的是订单号, 现在是任务没有订单号,传了路线id
OCHAdasAbilityManager.getInstance().autopilotUnAbilityReason
)
return
}
//点击开始自动驾驶按钮订单状态去流转, 不再与自动驾驶是否启动成功挂钩
isRestartAutopilot = mCurrentTaskAndOrder!!.currentStatus != TaskStatusEnum.StartTask.code
val parameters = initAutopilotControlParameters()
if (null == parameters) {
e(SceneConstant.M_TAXI + TAG, "AutopilotControlParameters is empty.")
return
}
CallerAutoPilotControlManager.startAutoPilot(parameters)
d(
SceneConstant.M_TAXI + TAG, "start autopilot with parameter: %s",
GsonUtil.jsonFromObject(parameters)
+ " ,startSiteName=" + mCurrentTaskAndOrder?.startSite?.siteName
+ " ,endSiteName=" + mCurrentTaskAndOrder?.endSite?.siteName
+ "isRestartAutopilot = " + isRestartAutopilot
)
TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(
isRestartAutopilot,
false,
mCurrentTaskAndOrder!!.startSite!!.siteName,
mCurrentTaskAndOrder!!.endSite!!.siteName,
mCurrentTaskAndOrder!!.lineId.toLong(),
"" // todo 这里原来传的是订单号, 现在是任务没有订单号
)
if (mControllerStatusCallback != null) {
mControllerStatusCallback!!.startOpenAutopilot()
}
}
private fun initAutopilotControlParameters(): AutopilotControlParameters? {
@@ -449,32 +467,35 @@ object TaxiModel {
e(SceneConstant.M_TAXI + TAG, "no order or order is empty.")
return null
}
if (mCurTaskContrail == null){
e(SceneConstant.M_TAXI + TAG, "curTaskContrail is empty.")
return null
}
val parameters = AutopilotControlParameters()
// TODO: 重新去构造参数
// val startWgsLon = mCurrentTaskAndOrder!!.startSitePoint[0]
// val startWgsLat = mCurrentTaskAndOrder!!.startSitePoint[1]
// val endWgsLon = mCurrentTaskAndOrder!!.endSitePoint[0]
// val endWgsLat = mCurrentTaskAndOrder!!.endSitePoint[1]
// parameters.vehicleType = mCurrentTaskAndOrder!!.businessType
// parameters.startName =
// PinYinUtil.getPinYinHeadChar(mCurrentTaskAndOrder!!.startSiteAddr) // 起点名称拼音首字母大写科学城B区2号门KXCBQ2HM
// parameters.endName =
// PinYinUtil.getPinYinHeadChar(mCurrentTaskAndOrder!!.endSiteAddr) // 终点名称拼音首字母大写科学城C区三号门KXCCQSHM
// parameters.startLatLon = AutoPilotLonLat(startWgsLat, startWgsLon)
// parameters.endLatLon = AutoPilotLonLat(endWgsLat, endWgsLon)
// if (parameters.autoPilotLine == null) {
// parameters.autoPilotLine = AutoPilotLine(
// mCurrentTaskAndOrder!!.lineId,
// mCurrentTaskAndOrder!!.csvFileUrl, mCurrentTaskAndOrder!!.csvFileMd5,
// mCurrentTaskAndOrder!!.txtFileUrl, mCurrentTaskAndOrder!!.txtFileMd5,
// mCurrentTaskAndOrder!!.contrailSaveTime, mCurrentTaskAndOrder!!.carModel,
// mCurrentTaskAndOrder!!.csvFileUrlDPQP, mCurrentTaskAndOrder!!.csvFileMd5DPQP,
// mCurrentTaskAndOrder!!.txtFileUrlDPQP, mCurrentTaskAndOrder!!.txtFileMd5DPQP,
// mCurrentTaskAndOrder!!.contrailSaveTimeDPQP
// )
// }
val startWgsLon = mCurrentTaskAndOrder!!.startSite!!.gcjLon
val startWgsLat = mCurrentTaskAndOrder!!.startSite!!.gcjLat
val endWgsLon = mCurrentTaskAndOrder!!.endSite!!.gcjLon
val endWgsLat = mCurrentTaskAndOrder!!.endSite!!.gcjLat
parameters.vehicleType = BUSINESSTYPE
parameters.startName = mCurrentTaskAndOrder!!.startSite!!.siteName // 8.10 拼音首字母大写 改为直接传中文
parameters.endName = mCurrentTaskAndOrder!!.endSite!!.siteName // 8.10 拼音首字母大写 改为直接传中文
parameters.startLatLon =
AutopilotControlParameters.AutoPilotLonLat(startWgsLat, startWgsLon)
parameters.endLatLon = AutopilotControlParameters.AutoPilotLonLat(endWgsLat, endWgsLon)
if (parameters.autoPilotLine == null) {
parameters.autoPilotLine = AutopilotControlParameters.AutoPilotLine(
mCurrentTaskAndOrder!!.lineId,
mCurTaskContrail!!.csvFileUrl, mCurTaskContrail!!.csvFileMd5,
mCurTaskContrail!!.txtFileUrl, mCurTaskContrail!!.txtFileMd5,
mCurTaskContrail!!.contrailSaveTime, "", // todo 这里原来传的是carModel, 现在没有这个信息, 是否传businessType
mCurTaskContrail!!.csvFileUrlDPQP, mCurTaskContrail!!.csvFileMd5DPQP,
mCurTaskContrail!!.txtFileUrlDPQP, mCurTaskContrail!!.txtFileMd5DPQP,
mCurTaskContrail!!.contrailSaveTimeDPQP
)
}
return parameters
}
@@ -580,7 +601,7 @@ object TaxiModel {
}
}
private fun arriveSite(siteId: Int, isArriveEndSite: Boolean) {
private fun arriveSite(siteId: Long, isArriveEndSite: Boolean) {
arriveSite(mContext!!,siteId,object : OchCommonServiceCallback<BaseData>{
override fun onSuccess(data: BaseData?) {
if (data == null || data.code != 0) return
@@ -599,7 +620,7 @@ object TaxiModel {
})
}
private fun startTask(lineId: Int) {
private fun startTask(lineId: Long) {
startTask(mContext!!, lineId,object : OchCommonServiceCallback<BaseData>{
override fun onSuccess(data: BaseData?) {
d(SceneConstant.M_TAXI + TAG,GsonUtil.jsonFromObject(data))
@@ -612,11 +633,14 @@ object TaxiModel {
})
}
private fun startPrepareTask(siteId: Int) {
private fun startPrepareTask(siteId: Long) {
UiThreadHandler.postDelayed({
prepareTask(mContext!!,siteId,object : OchCommonServiceCallback<PrepareTaskRespBean>{
override fun onSuccess(data: PrepareTaskRespBean?) {
d(SceneConstant.M_TAXI + TAG,GsonUtil.jsonFromObject(data))
if (data == null || data.code != 0) return
//去下载轨迹, 下发给工控机下载
queryTaskContrail(Array(1) { data.lineId })
}
override fun onFail(code: Int, msg: String?) {
@@ -668,6 +692,26 @@ object TaxiModel {
}
}
/**
* 查询当前任务的轨迹
*/
public fun queryTaskContrail(planningLines: Array<Long>?) {
if (planningLines == null) return
CarServiceManager.contrailList(mContext!!, planningLines,
object : OchCommonServiceCallback<ContrailListRespBean> {
override fun onSuccess(data: ContrailListRespBean?) {
if (data == null || data.code != 0) return
mCurTaskContrail = data.data?.get(0)
}
override fun onFail(code: Int, msg: String?) {
d(SceneConstant.M_TAXI + TAG, "queryOrderContrails code=$code,msg=$msg")
}
})
}
/**
* 订单流转debug START
*/
@@ -720,28 +764,28 @@ object TaxiModel {
if (mADASStatusCallback != null) {
mADASStatusCallback!!.onAutopilotRunning()
}
// if ((mCurrentOrder != null
// && TaxiOrderStatusEnum.OnTheWayToEnd.code == mCurrentOrder!!.orderStatus)
// ) {
// TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(
// isRestartAutopilot,
// true,
// mCurrentOrder!!.orderStartSite!!.siteName,
// mCurrentOrder!!.orderEndSite!!.siteName,
// mCurrentOrder!!.lineId,
// mCurrentOrder!!.orderNo
// )
// if (FunctionBuildConfig.isDemoMode) {
// // 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后置true
// FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true
// setIgnoreConditionDraw(true)
// setIPCDemoMode(true)
// d(
// SceneConstant.M_TAXI + TAG,
// "美化模式-ignore置为true到达出发点且已开启自动驾驶"
// )
// }
// }
if ((mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null
&& TaxiOrderStatusEnum.OnTheWayToEnd.code == mCurrentTaskAndOrder!!.order!!.orderStatus)
) {
TaxiAnalyticsManager.getInstance().triggerStartAutopilotEvent(
isRestartAutopilot,
true,
mCurrentTaskAndOrder!!.order!!.orderStartSite!!.siteName,
mCurrentTaskAndOrder!!.order!!.orderEndSite!!.siteName,
mCurrentTaskAndOrder!!.lineId,
mCurrentTaskAndOrder!!.order!!.orderNo
)
if (FunctionBuildConfig.isDemoMode) {
// 当美化模式(演示模式)开启时: 订单对应自动驾驶开启后置true
FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true
setIgnoreConditionDraw(true)
setIPCDemoMode(true)
d(
SceneConstant.M_TAXI + TAG,
"美化模式-ignore置为true到达出发点且已开启自动驾驶"
)
}
}
} else if (state == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE) {
if ((FunctionBuildConfig.isDemoMode
&& checkCurrentTask()
@@ -1014,4 +1058,8 @@ object TaxiModel {
fun cleanStation() {
setStationPoint(null, null, -1L)
}
fun updateOrderContrails(contrails: MutableList<ContrailListRespBean.Result>?) {
mOrderContrails = contrails
}
}

View File

@@ -5,7 +5,7 @@ import android.content.Context
import com.mogo.commons.AbsMogoApplication
import com.mogo.eagle.core.data.BaseData
import com.mogo.eagle.core.function.call.autopilot.CallerChassisLocationGCJ02ListenerManager
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.CallerLogger.i
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant
import com.mogo.eagle.core.utilcode.util.NetworkUtils
@@ -13,10 +13,11 @@ import com.mogo.eagle.core.utilcode.util.ToastUtils
import com.mogo.och.common.module.biz.constant.LoginStatusManager
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
import com.mogo.och.common.module.utils.ToastUtilsOch
import com.mogo.och.common.module.voice.VoiceNotice
import com.mogo.och.taxi.R
import com.mogo.och.taxi.base.BaseViewModel
import com.mogo.och.taxi.base.IUiIntent
import com.mogo.och.taxi.bean.PrepareTaskRespBean
import com.mogo.och.taxi.bean.ContrailListRespBean
import com.mogo.och.taxi.bean.QueryCarOrderByNoRespBean
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean
import com.mogo.och.taxi.bean.StartServiceRespBean
@@ -24,6 +25,7 @@ import com.mogo.och.taxi.constant.TaxiOrderStatusEnum
import com.mogo.och.taxi.constant.TaxiUnmannedConst
import com.mogo.och.taxi.constant.TaxtServingStatusManager
import com.mogo.och.taxi.network.CarServiceManager
import com.mogo.och.taxi.network.CarServiceManager.contrailList
import com.mogo.och.taxi.network.CarServiceManager.queryCarOrderByOrderNo
import com.mogo.och.taxi.ui.unmanned.TaskAndOrderUiState
import com.mogo.och.taxi.ui.unmanned.UnmannedIntent
@@ -90,6 +92,13 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
TaxiModel.loginService!!.queryLoginStatusByNet()
//需要将虚拟任务停掉, 虚拟任务会再开始接单后获取新的
updateUntruthTask(null)
if (mCurrentTaskAndOrder != null){
VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦")
}else{
VoiceNotice.showNotice("暂停接单啦")
}
}
override fun onError() {
@@ -114,6 +123,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
override fun onSuccess(data: StartServiceRespBean?) {
if (data == null || data.code != 0) return
TaxiModel.loginService!!.queryLoginStatusByNet()
VoiceNotice.showNotice("开始接单啦")
//虚拟任务要开启到站围栏
updateUntruthTask(data.data)
}
@@ -139,11 +149,11 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
CarServiceManager.orderCompleted(AbsMogoApplication.getApp().applicationContext,
mCurrentTaskAndOrder!!.order!!.orderNo,object : OchCommonServiceCallback<BaseData>{
override fun onSuccess(data: BaseData?) {
// TODO("Not yet implemented")
d(SceneConstant.M_TAXI + TAG, "orderCompleted() = onSuccess")
}
override fun onFail(code: Int, msg: String?) {
// TODO("Not yet implemented")
d(SceneConstant.M_TAXI + TAG, "orderCompleted() $code $msg")
}
})
}
@@ -154,11 +164,11 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
CarServiceManager.jumpPassengerCheck(AbsMogoApplication.getApp().applicationContext,
mCurrentTaskAndOrder!!.order!!.orderNo,object : OchCommonServiceCallback<BaseData>{
override fun onSuccess(data: BaseData?) {
// TODO("Not yet implemented")
d(SceneConstant.M_TAXI + TAG, "jumpPassengerCheckDone() = onSuccess")
}
override fun onFail(code: Int, msg: String?) {
// TODO("Not yet implemented")
d(SceneConstant.M_TAXI + TAG, "jumpPassengerCheckDone() $code $msg")
}
})
}
@@ -202,7 +212,7 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
}
private fun startOrStopOrderLoop(start: Boolean) {
CallerLogger.d(SceneConstant.M_TAXI + TAG, "startOrStopOrderLoop() $start")
d(SceneConstant.M_TAXI + TAG, "startOrStopOrderLoop() $start")
if (start) {
startInAndWaitCurrentTaskLoop()
} else {
@@ -223,15 +233,12 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.equals(result)) return
if (result!!.endSite == null && result.order == null){
mCurrentTaskAndOrder = null
updateNoTaskAndOrderUi()
TaxiModel.updateCurrentTaskAndOrder(null)
}
if ((mCurrentTaskAndOrder !== null && mCurrentTaskAndOrder!!.order !== null
&& result!!.order === null)
|| (mCurrentTaskAndOrder !== null && mCurrentTaskAndOrder!!.order !== null
&& result!!.order !== null && mCurrentTaskAndOrder!!.order!!.orderNo !=
result!!.order!!.orderNo)
) {
if (result.order == null && mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order!= null) {
//本地根据订单 orderNo 去查询下(乘客取消订单)
queryCurrentOrderStatusByNo(mCurrentTaskAndOrder!!.order!!.orderNo)
return
@@ -239,15 +246,42 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
mCurrentTaskAndOrder = result
TaxiModel.updateCurrentTaskAndOrder(result)
//根据lineId集合去查轨迹集合
if (result.order != null){
queryOrderContrails(result.order!!.planningLines)
}
TaxiModel.updateNativeCurrentOrder(result)
TaxiModel.updateCurrentTaskAndOrder(result)
updateTaskAndOrderUi()
}
override fun onFail(code: Int, msg: String?) {
CallerLogger.d(TAG, "queryCurrentTaskOnce = $code, $msg")
d(TAG, "queryCurrentTaskOnce = $code, $msg")
}
})
}
/**
* 查询接驾/送驾任务轨迹集合
* 注: 运营单刚来的时候, 有可能还在运行一个演练单, 要先跑完演练单才跑运营单
*/
private fun queryOrderContrails(planningLines: Array<Long>?) {
if (planningLines == null) return
contrailList(mContext,planningLines,
object : OchCommonServiceCallback<ContrailListRespBean>{
override fun onSuccess(data: ContrailListRespBean?) {
if (data == null || data.code != 0) return
val contrails = data.data
if (mCurrentTaskAndOrder != null){
TaxiModel.updateOrderContrails(contrails)
TaxiModel.queryTaskContrail(Array(1) {mCurrentTaskAndOrder!!.lineId})
}
}
override fun onFail(code: Int, msg: String?) {
d(SceneConstant.M_TAXI + TAG, "queryOrderContrails code=$code,msg=$msg")
}
})
@@ -259,12 +293,13 @@ class TaxiUnmannedViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(){
override fun onSuccess(data: QueryCarOrderByNoRespBean?) {
if (data != null && data.code != 0) return
if (data!!.orderStatus == TaxiOrderStatusEnum.Cancel.code){
VoiceNotice.showNotice("乘客已经取消")
updateNoTaskAndOrderCancelUi()
}
}
override fun onFail(code: Int, msg: String?) {
// TODO("Not yet implemented")
d(SceneConstant.M_TAXI + TAG, "queryCurrentOrderStatusByNo() code=$code,msg=$msg")
}
})

View File

@@ -66,7 +66,7 @@ object CarServiceManager {
*/
@JvmStatic
fun startTask(
context: Context, lineId: Int,
context: Context, lineId: Long,
callback: OchCommonServiceCallback<BaseData>?
) {
mOCHTaxiServiceApi.startTask(
@@ -80,7 +80,7 @@ object CarServiceManager {
*/
@JvmStatic
fun arriveSite(
context: Context, siteId: Int,
context: Context, siteId: Long,
callback: OchCommonServiceCallback<BaseData>?
) {
mOCHTaxiServiceApi.arriveSite(
@@ -94,7 +94,7 @@ object CarServiceManager {
*/
@JvmStatic
fun prepareTask(
context: Context, siteId: Int,
context: Context, siteId: Long,
callback: OchCommonServiceCallback<PrepareTaskRespBean>?
) {
mOCHTaxiServiceApi.prepareTask(
@@ -164,7 +164,7 @@ object CarServiceManager {
*/
@JvmStatic
fun contrailList(
context: Context, linIds: MutableList<Int>,
context: Context, linIds: Array<Long>,
callback: OchCommonServiceCallback<ContrailListRespBean>?
) {
mOCHTaxiServiceApi.contrailList(

View File

@@ -189,8 +189,6 @@ public class TaxiPresenter extends Presenter<TaxiFragment> implements ITaxiADASS
public void loginSuccess(DriverStatusQueryRespBean data) {
//设置 接单状态
TaxtServingStatusManager.setOpenOrderStatus(data.data.servingStatus);
//设置 是否启动订单轮训
// TaxiModel.INSTANCE.startOrStopOrderLoop();
// 设置当前用户角色
String role = "";

View File

@@ -132,13 +132,18 @@ class TaxiBeingTaskFragment : BaseFragment(),
}
is TaskAndOrderUiState.ORDERCANCEL -> {
// TODO 任务要跑完, 更新btn: 乘客已取消
updateOrderCancelUi(state.isCancel)
}
}
}
}
}
private fun updateOrderCancelUi(isCancel: Boolean) {
taskTypeTv.text = resources.getString(R.string.passenger_cancel_order)
taskTypeTv.background = resources.getDrawable(R.drawable.task_cancel_type_btn_bg,null)
}
private fun updateUntruthTask(untruthTask: StartServiceRespBean.Result?) {
if (untruthTask == null) return
updateUntruthTaskView()
@@ -614,7 +619,7 @@ class TaxiBeingTaskFragment : BaseFragment(),
startOrEndService()
} else if (v.id == cancelOrder.id) {
if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null){
TaxiOrderCancelDialog(mTaxiFragment, mActivity,
TaxiOrderCancelDialog(mActivity,
mCurrentTaskAndOrder!!.order!!.orderNo,mCurrentTaskAndOrder!!.order!!.orderStatus).show()
}
} else if (v.id == naviToStart.id) {

View File

@@ -47,7 +47,7 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
private String[] mContentArrays;
private String mOrderNo;
protected TaxiOrderCancelDialog(TaxiFragment fragment, Context context, String orderNo, int orderStatus) {
protected TaxiOrderCancelDialog(Context context, String orderNo, int orderStatus) {
super(context,R.style.OrderCancelDialog);
mOrderNo = orderNo;
this.mOrderStatus = orderStatus;
@@ -56,12 +56,6 @@ public class TaxiOrderCancelDialog extends AlertDialog implements View.OnClickLi
}
private void initReasonArray() {
if (1 == mOrderStatus) {
mContentArrays = new String[]{TaxiOrderCancelReasons.BookPassengerCancel.getMsg(), TaxiOrderCancelReasons.CarBroken.getMsg(),
TaxiOrderCancelReasons.BookJourneyConflict.getMsg(), TaxiOrderCancelReasons.BatteryLow.getMsg(),
TaxiOrderCancelReasons.BookOther.getMsg()};
return;
}
TaxiOrderStatusEnum ochStatus = TaxiOrderStatusEnum.valueOf(mOrderStatus);
switch (ochStatus) {
case OnTheWayToStart:

View File

@@ -6,8 +6,15 @@ import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters;
import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.util.GsonUtils;
import com.mogo.och.taxi.bean.ContrailListRespBean;
import com.mogo.och.taxi.bean.OrderDetail;
import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean;
import com.mogo.och.taxi.bean.Site;
import com.mogo.och.taxi.constant.TaskStatusEnum;
import com.mogo.och.taxi.constant.TaxiUnmannedConst;
import com.mogo.och.taxi.model.TaxiModel;
import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
@@ -35,7 +42,7 @@ public class TaxiTrajectoryManager {
private AutopilotControlParameters.AutoPilotLine mAutoPilotLine = null;
private Disposable mSendReqDisposable = null;
private String mPrevOrderNo = "";
private String mPrevTaskLineId = "";
public TaxiTrajectoryManager() {
mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(-1,
@@ -47,19 +54,19 @@ public class TaxiTrajectoryManager {
* 同步订单信息
*/
public void syncTrajectoryInfo() {
// OrderQueryRespBean.Result orderInfo = TaxiModel.INSTANCE.getCurrentOrder();
// if (orderInfo == null || orderInfo.orderStatus >= TaxiOrderStatusEnum.OnTheWayToEnd.getCode()) {
// CallerLogger.INSTANCE.d(M_TAXI + TAG, "syncTrajectoryInfo() stop.");
// stopTrajReqLoop();
// } else {
// if (mPrevOrderNo.equals(orderInfo.orderNo)) {
// CallerLogger.INSTANCE.d(M_TAXI + TAG, "syncTrajectoryInfo() 重复订单.");
// } else {
// mPrevOrderNo = orderInfo.orderNo;
// CallerLogger.INSTANCE.d(M_TAXI + TAG, "syncTrajectoryInfo() start.");
// startTrajReqLoop();
// }
// }
QueryCurrentTaskRespBean.Result taskAndOrder = TaxiModel.INSTANCE.getCurTaskAndOrder();
if (taskAndOrder == null || taskAndOrder.getCurrentStatus() >= TaskStatusEnum.StartTask.getCode()) {
CallerLogger.INSTANCE.d(M_TAXI + TAG, "syncTrajectoryInfo() stop.");
stopTrajReqLoop();
} else {
if (mPrevTaskLineId.equals(String.valueOf(taskAndOrder.getLineId()))) {
CallerLogger.INSTANCE.d(M_TAXI + TAG, "syncTrajectoryInfo() 重复订单.");
} else {
mPrevTaskLineId = String.valueOf(taskAndOrder.getLineId());
CallerLogger.INSTANCE.d(M_TAXI + TAG, "syncTrajectoryInfo() start.");
startTrajReqLoop();
}
}
}
/**
@@ -96,33 +103,59 @@ public class TaxiTrajectoryManager {
}
private void setupAutoPilotLine() {
// OrderQueryRespBean.Result order = TaxiModel.INSTANCE.getCurrentOrder();
// if (order == null) {
// CallerLogger.INSTANCE.e(M_TAXI + TAG,
// "setupAutoPilotLine(): orderInfo is null.");
// return;
// } else {
// if (mAutoPilotLine == null) {
// mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(order.lineId,
// order.csvFileUrl, order.csvFileMd5, order.txtFileUrl, order.txtFileMd5,
// order.contrailSaveTime, order.carModel,
// order.csvFileUrlDPQP, order.csvFileMd5DPQP, order.txtFileUrlDPQP, order.txtFileMd5DPQP,
// order.contrailSaveTimeDPQP);
// } else {
// mAutoPilotLine.setLineId(order.lineId);
// mAutoPilotLine.setTrajUrl(order.csvFileUrl);
// mAutoPilotLine.setTrajMd5(order.csvFileMd5);
// mAutoPilotLine.setStopUrl(order.txtFileUrl);
// mAutoPilotLine.setStopMd5(order.txtFileMd5);
// mAutoPilotLine.setTimestamp(order.contrailSaveTime);
// mAutoPilotLine.setVehicleModel(order.carModel);
// mAutoPilotLine.setTrajUrl_dpqp(order.csvFileUrlDPQP);
// mAutoPilotLine.setTrajMd5_dpqp(order.csvFileMd5DPQP);
// mAutoPilotLine.setStopUrl_dpqp(order.txtFileUrlDPQP);
// mAutoPilotLine.setStopMd5_dpqp(order.txtFileMd5DPQP);
// mAutoPilotLine.setTimestamp_dpqp(order.contrailSaveTimeDPQP);
// }
// }
QueryCurrentTaskRespBean.Result taskAndOrder = TaxiModel.INSTANCE.getCurTaskAndOrder();
if (taskAndOrder == null || taskAndOrder.getEndSite() == null) {
CallerLogger.INSTANCE.e(M_TAXI + TAG,
"setupAutoPilotLine(): taskAndOrder or taskAndOrder.getEndSite() is null.");
} else {
/**
* 主要加载和预加载轨迹方案
* 1、获取当前跑的任务的lineId 2、当前任务lineId是否在运营单的轨迹集合里
* 3、存在, 通知下载加载当前任务的轨迹以及预加载lineId在集合对应的下一个lineId对应的轨迹
* 4、若不存在,说明当前的执行的任务是与订单无关的演练任务,通知下载加载当前任务的轨迹以及预加载订单轨迹集合的第一个
*/
final ContrailListRespBean.Result curTaskContrail = TaxiModel.INSTANCE.getCurTaskContrail();
if (curTaskContrail == null) return;
long curLineId = taskAndOrder.getLineId();
final List<ContrailListRespBean.Result> orderContrails = TaxiModel.INSTANCE.getCurOrderContrails();
final OrderDetail orderDetail = taskAndOrder.getOrder();
ContrailListRespBean.Result preloadContrail = null; //预加载的轨迹
if (orderDetail != null && orderContrails != null && orderContrails.size() != 0 ){
if (orderContrails.contains(curLineId)){ //预加载轨迹是curLineId索引的下一个
int index = orderContrails.indexOf(curLineId);
if (orderContrails.size()-1 >= index){
preloadContrail = orderContrails.get(index);
}
}else {//预加载轨迹直接是集合第一个
preloadContrail = orderContrails.get(0);
}
}
if (mAutoPilotLine == null) {
mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(taskAndOrder.getLineId(),
curTaskContrail.getCsvFileUrl(), curTaskContrail.getCsvFileMd5(), curTaskContrail.getTxtFileUrl(),
curTaskContrail.getTxtFileMd5(), curTaskContrail.getContrailSaveTime(), "",//todo curTaskContrail.getCarModel()
curTaskContrail.getCsvFileUrlDPQP(), curTaskContrail.getCsvFileMd5DPQP(), curTaskContrail.getTxtFileUrlDPQP(),
curTaskContrail.getTxtFileMd5DPQP(), curTaskContrail.getContrailSaveTimeDPQP());
} else {
mAutoPilotLine.setLineId(taskAndOrder.getLineId());
mAutoPilotLine.setTrajUrl(curTaskContrail.getCsvFileUrl());
mAutoPilotLine.setTrajMd5(curTaskContrail.getCsvFileMd5());
mAutoPilotLine.setStopUrl(curTaskContrail.getTxtFileUrl());
mAutoPilotLine.setStopMd5(curTaskContrail.getTxtFileMd5());
mAutoPilotLine.setTimestamp(curTaskContrail.getContrailSaveTime());
mAutoPilotLine.setVehicleModel("");// todo curTaskContrail.getCarModel()
mAutoPilotLine.setTrajUrl_dpqp(curTaskContrail.getCsvFileUrlDPQP());
mAutoPilotLine.setTrajMd5_dpqp(curTaskContrail.getCsvFileMd5DPQP());
mAutoPilotLine.setStopUrl_dpqp(curTaskContrail.getTxtFileUrlDPQP());
mAutoPilotLine.setStopMd5_dpqp(curTaskContrail.getTxtFileMd5DPQP());
mAutoPilotLine.setTimestamp_dpqp(curTaskContrail.getContrailSaveTimeDPQP());
}
}
}
private void clearAutoPilotLine() {
@@ -154,7 +187,7 @@ public class TaxiTrajectoryManager {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> {
if (aLong > TaxiUnmannedConst.LOOP_SEND_TRAJ_TIMES) {
mPrevOrderNo = ""; //重发超时后将mPrevOrderNo置空这样订单进入下个状态时还可以重发
mPrevTaskLineId = ""; //重发超时后将mPrevOrderNo置空这样订单进入下个状态时还可以重发
stopTrajReqLoop();
return;
}

View File

@@ -124,7 +124,7 @@
},
"saas": {
"qa": {
"och_url": "http://10.0.0.182:30560",
"och_url": "https://mogogo-driver-qa.zhidaozhixing.com",
"shuttle_url": "https://mogogo-driver-qa.zhidaozhixing.com",
"passport_url": "https://mogogo-driver-qa.zhidaozhixing.com/arch/passport/",
"socket_base_url": "https://mogogo-driver-qa.zhidaozhixing.com/arch/push/",