diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/LocusResponse.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/LocusResponse.kt index 6250b365e1..3068118b1b 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/LocusResponse.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/LocusResponse.kt @@ -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,默认“” diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/OrderInfoResponse.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/OrderInfoResponse.kt index 3d76eb061f..5017f43550 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/OrderInfoResponse.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/bean/response/OrderInfoResponse.kt @@ -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?,//车辆类型 diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt index 9d3ad359a6..fa5860c937 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/model/BusPassengerModel.kt @@ -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 { - 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 { + 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 { + 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 { + 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 { + 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 { + 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 /** * 开始轮询计算剩余里程和时间 diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.kt index bff9e31a93..7d99bba9f5 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerModelLoopManager.kt @@ -23,7 +23,7 @@ object BusPassengerModelLoopManager { private val mControllerStatusCallbackMap = ConcurrentHashMap() - 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) { diff --git a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerServiceManager.kt b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerServiceManager.kt index 8054bb543a..1e91f016d9 100644 --- a/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerServiceManager.kt +++ b/OCH/mogo-och-charter-passenger/src/m1/java/com/mogo/och/bus/passenger/net/BusPassengerServiceManager.kt @@ -28,6 +28,15 @@ object BusPassengerServiceManager { .subscribe(OchCommonSubscribeImpl(context, callback, "loginStatus")) } + @JvmStatic + fun queryOrderInfo( + context: Context, + callback: OchCommonServiceCallback? + ) { + mBusPassengerServiceApi.queryOrderInfo().transformTry() + .subscribe(OchCommonSubscribeImpl(context, callback, "loginStatus")) + } + @JvmStatic fun queryLineList(context: Context, callback: OchCommonServiceCallback?) { mBusPassengerServiceApi.queryLineList().transformTry() diff --git a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt index 783bfbbc87..c4439d9d33 100644 --- a/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt +++ b/OCH/mogo-och-charter-passenger/src/main/java/com/mogo/och/bus/passenger/constant/BusPassengerConst.kt @@ -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"