[m1]
[1.1.2] [订单轮训、车态轮训、时间校准轮训]
This commit is contained in:
@@ -1,13 +1,12 @@
|
||||
package com.mogo.och.bus.passenger.bean.response
|
||||
|
||||
import com.mogo.eagle.core.data.BaseData
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
data class LocusResponse(val data: Result?) : BaseData(){
|
||||
data class Result(
|
||||
data class LocusResponse(val data: LocusInfo?) : BaseData(){
|
||||
data class LocusInfo(
|
||||
val contrailSaveTime: Long?,//上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖
|
||||
val csvFileUrl: String?,//轨迹文件下载的cos url,默认“”
|
||||
val csvFileMd5: String?,//轨迹文件md5,默认“”
|
||||
|
||||
@@ -5,8 +5,8 @@ import com.mogo.eagle.core.data.BaseData
|
||||
/**
|
||||
*
|
||||
*/
|
||||
data class OrderInfoResponse(val data: Result?) : BaseData() {
|
||||
data class Result(
|
||||
data class OrderInfoResponse(val data: OrderInfo?) : BaseData() {
|
||||
data class OrderInfo(
|
||||
val orderNo: String?,//订单id
|
||||
val sn: String?,//司机sn
|
||||
val productType: Int?,//车辆类型
|
||||
|
||||
@@ -18,19 +18,15 @@ import com.mogo.eagle.core.network.utils.GsonUtil
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
|
||||
import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.Companion.M_BUS_P
|
||||
import com.mogo.eagle.core.utilcode.util.NetworkUtils
|
||||
import com.mogo.eagle.core.utilcode.util.ToastUtils
|
||||
import com.mogo.och.bus.passenger.R
|
||||
import com.mogo.och.bus.passenger.bean.LoopInfo
|
||||
import com.mogo.och.bus.passenger.bean.response.M1DriverLoginStatusResponse
|
||||
import com.mogo.och.bus.passenger.bean.response.*
|
||||
import com.mogo.och.bus.passenger.callback.IBusPassengerADASStatusCallback
|
||||
import com.mogo.och.bus.passenger.callback.IBusPassengerControllerStatusCallback
|
||||
import com.mogo.och.bus.passenger.net.BusPassengerModelLoopManager
|
||||
import com.mogo.och.bus.passenger.net.BusPassengerServiceManager
|
||||
import com.mogo.och.bus.passenger.utils.RxUtils
|
||||
import com.mogo.och.common.module.biz.constant.LoginStatusManager
|
||||
import com.mogo.och.common.module.biz.constant.TaxiLoginStatusEnum
|
||||
import com.mogo.och.common.module.biz.network.OchCommonServiceCallback
|
||||
import io.reactivex.disposables.Disposable
|
||||
import mogo.telematics.pad.MessagePad
|
||||
import mogo_msg.MogoReportMsg
|
||||
import system_master.SystemStatusInfo
|
||||
@@ -44,6 +40,11 @@ object BusPassengerModel {
|
||||
|
||||
private const val TAG = "BusPassengerModel"
|
||||
private const val TAGLOGIN = "BusPassengerModelLogin"
|
||||
private const val TAGORDER = "BusPassengerModelOrder"
|
||||
private const val TAGCARSTATUS = "BusPassengerModelCarStatus"
|
||||
private const val TAGCALIBRATION = "BusPassengerModelCalibration"
|
||||
// 路距计算
|
||||
private const val TAGDISTANCE = "BusPassengerModelDistance"
|
||||
|
||||
private lateinit var mContext: Context
|
||||
|
||||
@@ -56,6 +57,10 @@ object BusPassengerModel {
|
||||
|
||||
// 当前位置坐标
|
||||
private var mLocation: MogoLocation? = null
|
||||
// 订单信息 有订单有线路结束订单
|
||||
private var orderInfo: OrderInfoResponse.OrderInfo? = null
|
||||
// 轨迹信息 用来启动自动驾驶
|
||||
private var locusInfo: LocusResponse.LocusInfo? = null
|
||||
|
||||
fun init() {
|
||||
AbsMogoApplication.getApp().also { this.mContext = it }
|
||||
@@ -63,43 +68,15 @@ object BusPassengerModel {
|
||||
queryDriverOperationStatus()
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动轮询查询司机登录状态
|
||||
*/
|
||||
private fun listenerLoginStatus() {
|
||||
LoginStatusManager.setControllerStatusCallback(TAG,
|
||||
object : LoginStatusManager.ILoginStatusChangeListener {
|
||||
override fun onStatusChange(currentStatus: TaxiLoginStatusEnum) {
|
||||
if (LoginStatusManager.isLogin()) {
|
||||
BusPassengerModelLoopManager.setControllerStatusCallback(TAGLOGIN)
|
||||
} else {
|
||||
BusPassengerModelLoopManager.setControllerStatusCallback(TAGLOGIN, LoopInfo(3,::queryDriverOperationStatus))
|
||||
}
|
||||
}
|
||||
})
|
||||
fun release() {
|
||||
releaseListeners()
|
||||
startOrStopCalculateRouteInfo(false)
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询车辆登录状态、车牌、司机手机号、司机sn
|
||||
*/
|
||||
fun queryDriverOperationStatus() {
|
||||
BusPassengerServiceManager.queryDriverOperationStatus(
|
||||
mContext, object : OchCommonServiceCallback<M1DriverLoginStatusResponse> {
|
||||
override fun onSuccess(data: M1DriverLoginStatusResponse?) {
|
||||
if (data?.data == null) return
|
||||
LoginStatusManager.setLoginStatus(data.data.driverStatus)
|
||||
}
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
})
|
||||
}
|
||||
|
||||
fun setControllerStatusCallback(tag: String, callback: IBusPassengerControllerStatusCallback?) {
|
||||
if (tag.isBlank()) return
|
||||
if (callback == null) {
|
||||
mControllerStatusCallbackMap.remove(tag)
|
||||
return
|
||||
}
|
||||
mControllerStatusCallbackMap[tag] = callback
|
||||
private fun releaseListeners() {
|
||||
CallerAutoPilotStatusListenerManager.removeListener(mGoAutopilotStatusListener)
|
||||
CallerChassisLocationGCJ02ListenerManager.removeListener(TAG)
|
||||
CallerPlanningRottingListenerManager.removeListener(moGoAutopilotPlanningListener)
|
||||
}
|
||||
|
||||
private fun initListeners() {
|
||||
@@ -116,27 +93,44 @@ object BusPassengerModel {
|
||||
listenerLoginStatus()
|
||||
}
|
||||
|
||||
fun release() {
|
||||
releaseListeners()
|
||||
startOrStopCalculateRouteInfo(false)
|
||||
}
|
||||
|
||||
private fun releaseListeners() {
|
||||
CallerAutoPilotStatusListenerManager.removeListener(mGoAutopilotStatusListener)
|
||||
CallerChassisLocationGCJ02ListenerManager.removeListener(TAG)
|
||||
CallerPlanningRottingListenerManager.removeListener(moGoAutopilotPlanningListener)
|
||||
}
|
||||
|
||||
//监听网络变化,避免启动机器时无网导致无法更新订单信息
|
||||
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent ->
|
||||
CallerLogger.d(M_BUS_P + TAG, "onIntentReceived = %s", intentStr)
|
||||
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
queryDriverOperationStatus()
|
||||
}
|
||||
// region 设置业务回调
|
||||
fun setControllerStatusCallback(tag: String, callback: IBusPassengerControllerStatusCallback?) {
|
||||
if (tag.isBlank()) return
|
||||
if (callback == null) {
|
||||
mControllerStatusCallbackMap.remove(tag)
|
||||
return
|
||||
}
|
||||
mControllerStatusCallbackMap[tag] = callback
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动轮询查询司机登录状态
|
||||
*/
|
||||
private fun listenerLoginStatus() {
|
||||
LoginStatusManager.setControllerStatusCallback(TAG,
|
||||
object : LoginStatusManager.ILoginStatusChangeListener {
|
||||
override fun onStatusChange(currentStatus: TaxiLoginStatusEnum) {
|
||||
if (LoginStatusManager.isLogin()) {
|
||||
// todo 关闭轮训在特定时机进行登录状态查下
|
||||
// 1、打开视频播放、
|
||||
// 2 、打开空调暖风机灯设置页面
|
||||
// 3、车控页面、
|
||||
// 4、打开选择线路页面
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGLOGIN)
|
||||
// 启动订单轮
|
||||
startOrderLoop()
|
||||
} else {
|
||||
BusPassengerModelLoopManager.setLoopFunction(
|
||||
TAGLOGIN,
|
||||
LoopInfo(3, ::queryDriverOperationStatus)
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region 设置外部回调
|
||||
// 定位监听
|
||||
private val mMapLocationListener: IMoGoChassisLocationGCJ02Listener =
|
||||
object : IMoGoChassisLocationGCJ02Listener {
|
||||
@@ -189,10 +183,214 @@ object BusPassengerModel {
|
||||
"onAutopilotRotting = ${GsonUtil.jsonFromObject(globalPathResp)}"
|
||||
)
|
||||
globalPathResp?.wayPointsList?.let {
|
||||
|
||||
// todo 启动路距计算
|
||||
startCalculateDistanceLoop()
|
||||
}
|
||||
}
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region 登录状态逻辑
|
||||
/**
|
||||
* 查询车辆登录状态、车牌、司机手机号、司机sn
|
||||
*/
|
||||
fun queryDriverOperationStatus() {
|
||||
BusPassengerServiceManager.queryDriverOperationStatus(
|
||||
mContext, object : OchCommonServiceCallback<M1DriverLoginStatusResponse> {
|
||||
override fun onSuccess(data: M1DriverLoginStatusResponse?) {
|
||||
if (data?.data == null) return
|
||||
LoginStatusManager.setLoginStatus(data.data.driverStatus)
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
})
|
||||
}
|
||||
|
||||
//监听网络变化,避免启动机器时无网导致无法更新订单信息
|
||||
private val mNetWorkIntentListener = IMogoIntentListener { intentStr, intent ->
|
||||
CallerLogger.d(M_BUS_P + TAG, "onIntentReceived = %s", intentStr)
|
||||
if (ConnectivityManager.CONNECTIVITY_ACTION == intentStr) {
|
||||
if (NetworkUtils.isConnected(mContext)) {
|
||||
queryDriverOperationStatus()
|
||||
}
|
||||
}
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region 订单轮训
|
||||
/**
|
||||
* 启动订单轮训
|
||||
*/
|
||||
private fun startOrderLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(
|
||||
TAGORDER,
|
||||
LoopInfo(3, ::queryOrder)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动订单轮训
|
||||
*/
|
||||
private fun endOrderLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGORDER)
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单信息
|
||||
*/
|
||||
private fun queryOrder() {
|
||||
BusPassengerServiceManager.queryOrderInfo(
|
||||
mContext, object : OchCommonServiceCallback<OrderInfoResponse> {
|
||||
override fun onSuccess(data: OrderInfoResponse?) {
|
||||
if (data?.data == null) return
|
||||
// 判断是否有订单
|
||||
ordrLagic(data?.data)
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单逻辑
|
||||
*/
|
||||
fun ordrLagic(orderData: OrderInfoResponse.OrderInfo) {
|
||||
if (orderData.orderNo == null) {
|
||||
return
|
||||
}
|
||||
// 有订单有线路后结束轮训
|
||||
orderData.let { order->
|
||||
if (order.lineId == null || order.lineId == 0L||order.siteId == null || order.siteId == 0L) {
|
||||
// 去选线路和站点
|
||||
}else{
|
||||
this.orderInfo = orderData
|
||||
// 有订单取消轮训
|
||||
endOrderLoop()
|
||||
// 已经选择线路和终点、恢复现场数据
|
||||
// 启动车辆服务状态
|
||||
startCarStatusLoop()
|
||||
// 启动时间校准
|
||||
startCalibrationLoop()
|
||||
// 查询自动驾驶轨迹
|
||||
queryLocusByLineId(order.lineId)
|
||||
}
|
||||
}
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region车辆服务状态轮询
|
||||
/**
|
||||
* 启动订单轮训
|
||||
*/
|
||||
private fun startCarStatusLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(TAGCARSTATUS, LoopInfo(3, ::queryCarStatus))
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动订单轮训
|
||||
*/
|
||||
private fun endCarStatusLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGCARSTATUS)
|
||||
}
|
||||
/**
|
||||
* 查询车辆状态 判断订单是否结束、是否显示结束业务
|
||||
*/
|
||||
private fun queryCarStatus() {
|
||||
BusPassengerServiceManager.queryBusinessStatus(
|
||||
mContext, object : OchCommonServiceCallback<BusinessStatusResponse> {
|
||||
override fun onSuccess(data: BusinessStatusResponse?) {
|
||||
if (data?.data == null) return
|
||||
carStatusLogic(data.data)
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
})
|
||||
}
|
||||
|
||||
private fun carStatusLogic(data: BusinessStatusResponse.Result) {
|
||||
if(data.orderNo!=null){// 订单进行中
|
||||
return
|
||||
}
|
||||
// 结束路距计算
|
||||
endCalculateDistanceLoop()
|
||||
// 停止时间校准
|
||||
endCalibrationLoop()
|
||||
if (data.businessStatus==2) {// 订单结束 没有还车
|
||||
// todo 还车中 需要显示 @com.mogo.och.bus.passenger.ui.view.EndOrderView 页面
|
||||
}else{
|
||||
// 车辆空闲 订单结束已经还车
|
||||
// 结束车态轮训
|
||||
endCarStatusLoop()
|
||||
}
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region时间校准服务轮询
|
||||
/**
|
||||
* 启动时间校准轮训
|
||||
*/
|
||||
private fun startCalibrationLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(TAGCALIBRATION, LoopInfo(120, ::queryBusinessTime))
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止时间校准轮训
|
||||
*/
|
||||
private fun endCalibrationLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGCALIBRATION)
|
||||
}
|
||||
/**
|
||||
* 查询车辆状态 判断订单是否结束、是否显示结束业务
|
||||
*/
|
||||
private fun queryBusinessTime() {
|
||||
BusPassengerServiceManager.queryBusinessTime(
|
||||
mContext, object : OchCommonServiceCallback<BusinessTimeResponse> {
|
||||
override fun onSuccess(data: BusinessTimeResponse?) {
|
||||
if (data?.data == null) return
|
||||
// todo 轮训时间校准
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
})
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region 查询自动驾驶轨迹信息
|
||||
private fun queryLocusByLineId(lineId: Long) {
|
||||
BusPassengerServiceManager.queryLocusByLineId(
|
||||
mContext, lindId = lineId.toString(),object : OchCommonServiceCallback<LocusResponse> {
|
||||
override fun onSuccess(data: LocusResponse?) {
|
||||
if (data?.data == null) return
|
||||
//设置全局轨迹信息
|
||||
locusInfo = data.data
|
||||
}
|
||||
|
||||
override fun onFail(code: Int, msg: String) {}
|
||||
})
|
||||
}
|
||||
// endregion
|
||||
|
||||
// region 路距计算轮训
|
||||
/**
|
||||
* 启动路距计算
|
||||
*/
|
||||
private fun startCalculateDistanceLoop() {
|
||||
BusPassengerModelLoopManager.setLoopFunction(TAGDISTANCE, LoopInfo(1, ::calculateDistance))
|
||||
}
|
||||
|
||||
/**
|
||||
* 结束时间校准轮训
|
||||
*/
|
||||
private fun endCalculateDistanceLoop() {
|
||||
BusPassengerModelLoopManager.removeLoopFunction(TAGDISTANCE)
|
||||
}
|
||||
/**
|
||||
* 查询车辆状态 判断订单是否结束、是否显示结束业务
|
||||
*/
|
||||
private fun calculateDistance() {
|
||||
|
||||
}
|
||||
// endregion
|
||||
|
||||
/**
|
||||
* 开始轮询计算剩余里程和时间
|
||||
|
||||
@@ -23,7 +23,7 @@ object BusPassengerModelLoopManager {
|
||||
private val mControllerStatusCallbackMap = ConcurrentHashMap<String, LoopInfo>()
|
||||
|
||||
|
||||
fun setControllerStatusCallback(tag: String, function: LoopInfo) {
|
||||
fun setLoopFunction(tag: String, function: LoopInfo) {
|
||||
if (tag.isBlank()) return
|
||||
mControllerStatusCallbackMap[tag] = function
|
||||
if (mControllerStatusCallbackMap.size > 0) {
|
||||
@@ -31,7 +31,7 @@ object BusPassengerModelLoopManager {
|
||||
}
|
||||
}
|
||||
|
||||
fun setControllerStatusCallback(tag: String) {
|
||||
fun removeLoopFunction(tag: String) {
|
||||
if (tag.isBlank()) return
|
||||
mControllerStatusCallbackMap.remove(tag)
|
||||
if (mControllerStatusCallbackMap.size == 0) {
|
||||
|
||||
@@ -28,6 +28,15 @@ object BusPassengerServiceManager {
|
||||
.subscribe(OchCommonSubscribeImpl(context, callback, "loginStatus"))
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun queryOrderInfo(
|
||||
context: Context,
|
||||
callback: OchCommonServiceCallback<OrderInfoResponse>?
|
||||
) {
|
||||
mBusPassengerServiceApi.queryOrderInfo().transformTry()
|
||||
.subscribe(OchCommonSubscribeImpl(context, callback, "loginStatus"))
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun queryLineList(context: Context, callback: OchCommonServiceCallback<LineInfoResponse>?) {
|
||||
mBusPassengerServiceApi.queryLineList().transformTry()
|
||||
|
||||
@@ -16,18 +16,7 @@ class BusPassengerConst {
|
||||
const val LOOP_LINE_1S = 1 * 1000L
|
||||
const val LOOP_DELAY = 100L
|
||||
|
||||
// 无状态
|
||||
const val STATION_STATUS_IDLE = 0
|
||||
// 已过站(历史站)
|
||||
const val STATION_STATUS_LEAVING = 1
|
||||
// 到站(当前站)
|
||||
const val STATION_STATUS_STOPPED = 2
|
||||
// 未到站(未到站)
|
||||
const val STATION_STATUS_ARRIVING = 3
|
||||
|
||||
//bus平均速度 bus的平均里程:25km/h
|
||||
const val BUS_AVERAGE_SPEED = 25
|
||||
|
||||
|
||||
// 订单总里程
|
||||
const val BUS_SP_KEY_ORDER_SUM_DIS = "BUS_SP_KEY_ORDER_SUM_DIS"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user