diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt index e67e44db5a..19fbb71557 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskFragment.kt @@ -173,9 +173,9 @@ class TaxiCurrentTaskFragment : BaseFragment(), mCurrentTaskWithOrder = taskAndOrderUiState.taskWithOrder //如果在前往标定站点, 显示标定站点 - if (mDriveToNearestStationTask != null){ - return@collect - } +// if (mDriveToNearestStationTask != null){ +// return@collect +// } if (mCurrentTaskWithOrder == null) { initContainerView(false) diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt index 6d8454a67c..8c804727ad 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiCurrentTaskViewModel.kt @@ -1,6 +1,5 @@ package com.mogo.och.taxi.ui.task -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 @@ -9,7 +8,7 @@ import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.eagle.core.utilcode.util.NetworkUtils import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.och.common.module.biz.constant.LoginStatusManager.isLogin +import com.mogo.eagle.core.utilcode.util.UiThreadHandler 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 @@ -19,9 +18,11 @@ import com.mogo.och.taxi.base.IUiIntent import com.mogo.och.taxi.bean.QueryCurrentTaskRespBean import com.mogo.och.taxi.bean.StartServiceRespBean import com.mogo.och.taxi.bean.TrajectoryListRespBean -import com.mogo.och.taxi.callback.ITaxiTaskCallback +import com.mogo.och.taxi.callback.ITaxiCarServiceCallback +import com.mogo.och.taxi.callback.ITaxiTaskWithOrderCallback import com.mogo.och.taxi.constant.TaskStatusEnum -import com.mogo.och.taxi.constant.TaxiCarServingStatusManager.isCarServingStatus +import com.mogo.och.taxi.constant.TaxiOrderStatusEnum +import com.mogo.och.taxi.constant.TaxiUnmannedConst import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager.cancelOrder import com.mogo.och.taxi.ui.unmanned.TaskWithOrderUIState @@ -33,15 +34,14 @@ import com.mogo.och.taxi.utils.TaxiTrajectoryManager * @author: wangmingjun * @date: 2023/7/26 */ -class TaxiCurrentTaskViewModel : BaseViewModel(), ITaxiTaskCallback { +class TaxiCurrentTaskViewModel : BaseViewModel(), + ITaxiTaskWithOrderCallback, ITaxiCarServiceCallback { - private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null private val TAG = SceneConstant.M_TAXI + "TaxiUnmannedViewModel" - private var mContext: Context = AbsMogoApplication.getApp().applicationContext - init { - TaxiTaskModel.setTaskCallback(this) + TaxiTaskModel.setTaskWithOrderCallback(this) + TaxiTaskModel.setCarServiceCallback(this) } override fun initUiState(): UnmannedState { @@ -50,16 +50,16 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), override fun handleIntent(intent: IUiIntent) { when (intent) { - is UnmannedIntent.StartTaskOrOrderLooper -> { //开始轮询 + is UnmannedIntent.StartTaskWithOrderLooper -> { //开始轮询 startOrStopCurrentTaskWithOrderLoop(true) } - is UnmannedIntent.StartOrPauseTakeOrder -> {//开始、暂停接单 - updateCarServingStatus() + is UnmannedIntent.StartOrEndTakeOrder -> {//开始、暂停接单 + TaxiTaskModel.updateCarServingStatus() } - is UnmannedIntent.JumpPassengerCheckDone -> { //手动点击跳过乘客验证 - jumpPassengerCheckDone() + is UnmannedIntent.JumpPassengerCheck -> { //手动点击跳过乘客验证 + jumpPassengerCheck() } is UnmannedIntent.JourneyCompleted -> { //点击服务完成 @@ -67,161 +67,113 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } is UnmannedIntent.CloseOrderByDriver -> { - if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null) { - val site = mCurrentTaskAndOrder!!.order!!.orderEndSite - TaxiTaskModel.submitArriveSite(site!!.siteId, true) - } + closeOrderByDriver() } is UnmannedIntent.CancelOrder -> {// 取消订单, 暂未加取消类型和原因 - handleCancelOrder(intent.type) + cancelOrder(intent.type) } is UnmannedIntent.StartTask -> { - TaxiTaskModel.toStartTask() + startTask() } } } - private fun handleCancelOrder(cancelType: Int) { - if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null) { - cancelOrder(mContext, - mCurrentTaskAndOrder!!.order!!.orderNo, + fun startOrStopCurrentTaskWithOrderLoop(start: Boolean) { + d(TAG, "startOrStopCurrentTaskWithOrderLoop(): isStart=$start") + if (start) { + TaxiTaskModel.startQueryCurrentTaskWithOrderLoop() + } else { + TaxiTaskModel.stopQueryCurrentTaskWithOrderLoop() + } + } + + private fun cancelOrder(cancelType: Int) { + val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() + currentTaskWithOrder?.order?.also { + cancelOrder(AbsMogoApplication.getApp().applicationContext, + it.orderNo, cancelType, object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { - d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() = onSuccess") + d(TAG, "handleCancelOrder() = onSuccess") } override fun onFail(code: Int, msg: String?) { - d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() $code $msg") + d(TAG, "handleCancelOrder() $code $msg") } }) } } - /** - * 更新接单状态 - */ - private fun updateCarServingStatus() { - if (!isLogin()) { - TaxiTaskModel.loginService!!.queryLoginStatusByNet() - return - } - if (isCarServingStatus()) {//接单状态下,去结束 - TaxiTaskWithOrderServiceManager.endService( - mContext, + private fun jumpPassengerCheck() { + val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() + currentTaskWithOrder?.order?.also { + TaxiTaskWithOrderServiceManager.jumpPassengerCheck(AbsMogoApplication.getApp().applicationContext, + it.orderNo, object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { - TaxiTaskModel.loginService!!.queryLoginStatusByNet() - //需要将虚拟任务停掉, 虚拟任务会再开始接单后获取新的 - d(TAG, "set mUntruthSiteTask null") - updateDriveToNearestStationTaskUI(null) - TaxiTaskModel.updateUntruthTask(null) - - if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null && mCurrentTaskAndOrder!!.startSite != null && mCurrentTaskAndOrder!!.currentStatus < TaskStatusEnum.CompleteTask.code) { - VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦") - } else { - VoiceNotice.showNotice("暂停接单啦") - } - } - - override fun onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)) - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)) - } - } - - override fun onFail(code: Int, msg: String) { - ToastUtilsOch.showWithCodeMessage(code, msg) - } - }) - } else {//暂停接单状态下,去接单 - TaxiTaskWithOrderServiceManager.startService(mContext, - CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude, - CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude, - object : OchCommonServiceCallback { - override fun onSuccess(data: StartServiceRespBean?) { - if (data == null || data.code != 0) return - TaxiTaskModel.loginService!!.queryLoginStatusByNet() - VoiceNotice.showNotice("开始接单啦") - d(TAG, "data.data=" + GsonUtil.jsonFromObject(data.data)) - if (mCurrentTaskAndOrder == null) return - if (mCurrentTaskAndOrder!!.endSite != null) { - if (mCurrentTaskAndOrder!!.currentStatus == TaskStatusEnum.CompleteTask.code && mCurrentTaskAndOrder!!.order != null) { //有任务, 状态为3, 且有订单 - return - } else if (mCurrentTaskAndOrder!!.currentStatus < TaskStatusEnum.CompleteTask.code) { - //有任务, 并且未执行完成 - return - } - } - updateDriveToNearestStationTaskUI(data.data) - TaxiTaskModel.updateUntruthTask(data.data) + d(TAG, "jumpPassengerCheck onSuccess:") } override fun onFail(code: Int, msg: String?) { - ToastUtilsOch.showWithCodeMessage( - code, - "$msg curLatitude = ${CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude}" + " curLongitude = ${CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude}" - ) - } - - override fun onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)) - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)) - } + d(TAG, "jumpPassengerCheck onFail: code=$code, msg=$msg") } }) } } private fun journeyCompleted() { - if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null) { + val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() + currentTaskWithOrder?.order?.also { TaxiTaskWithOrderServiceManager.orderCompleted(AbsMogoApplication.getApp().applicationContext, - mCurrentTaskAndOrder!!.order!!.orderNo, + it.orderNo, object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { - d(SceneConstant.M_TAXI + TAG, "orderCompleted() = onSuccess") + d(TAG, "journeyCompleted onSuccess") } override fun onFail(code: Int, msg: String?) { - d(SceneConstant.M_TAXI + TAG, "orderCompleted() $code $msg") + d(TAG, "journeyCompleted onFail: code=$code, msg=$msg") } }) } } - private fun jumpPassengerCheckDone() { - if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null) { - TaxiTaskWithOrderServiceManager.jumpPassengerCheck(AbsMogoApplication.getApp().applicationContext, - mCurrentTaskAndOrder!!.order!!.orderNo, - object : OchCommonServiceCallback { - override fun onSuccess(data: BaseData?) { - d(SceneConstant.M_TAXI + TAG, "jumpPassengerCheckDone() = onSuccess") - } - - override fun onFail(code: Int, msg: String?) { - d(SceneConstant.M_TAXI + TAG, "jumpPassengerCheckDone() $code $msg") - } - }) + private fun closeOrderByDriver() { + val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() + currentTaskWithOrder?.order?.orderEndSite?.also { + TaxiTaskModel.submitArriveSite(it.siteId, true) } } - private fun updateTaskAndOrderUi() { + private fun startTask() { + if (!TaxiTaskModel.checkCurrentTaskCondition()) { + ToastUtils.showShort("无任务!") + return + } + //当前订单状态若为20 , 则使用的lineId为订单信息的 + TaxiTaskModel.getCurrentTaskWithOrder()?.let { + TaxiTaskModel.startTask( + if (it.order != null && it.order!!.orderStatus >= TaxiOrderStatusEnum.ArriveAtStart.code) + it.order!!.orderLine + else + it.lineId + ) + } + } + + private fun updateTaskAndOrderUi(currentTaskWithOrder: QueryCurrentTaskRespBean.Result?) { d( - TAG, - "updateTaskAndOrderUi: mCurrentTaskAndOrder=${ - GsonUtil.getGson().toJson(mCurrentTaskAndOrder) + TAG, "updateTaskAndOrderUi: currentTaskWithOrder=${ + GsonUtil.getGson().toJson(currentTaskWithOrder) }" ) sendUiState { copy( taskWithOrderUIState = TaskWithOrderUIState.TaskWithOrder( - mCurrentTaskAndOrder + currentTaskWithOrder ) ) } @@ -249,20 +201,10 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } } - fun startOrStopCurrentTaskWithOrderLoop(start: Boolean) { - d(TAG, "startOrStopCurrentTaskWithOrderLoop(): isStart=$start") - if (start) { - TaxiTaskModel.startQueryCurrentTaskWithOrderLoop() - } else { - TaxiTaskModel.stopQueryCurrentTaskWithOrderLoop() - } - } override fun onTaskWithOrderDataChanged(result: QueryCurrentTaskRespBean.Result?) { - if (result === null) return d(TAG, "onTaskWithOrderChanged = result = " + GsonUtil.jsonFromObject(result)) - mCurrentTaskAndOrder = result - updateTaskAndOrderUi() + updateTaskAndOrderUi(result) } override fun onTaskCompleted(isOrderArrivedAtStart: Boolean, siteId: Long) { @@ -270,7 +212,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), if (isOrderArrivedAtStart) { TaxiTaskModel.prepareNextTask(siteId) } else { - TaxiTaskModel.startPrepareTask120S(siteId) + TaxiTaskModel.startPrepareTaskDelay120S(siteId) } } @@ -280,8 +222,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), override fun onOrderCancel() { VoiceNotice.showNotice("订单已经取消") - mCurrentTaskAndOrder = null - updateTaskAndOrderUi() + updateTaskAndOrderUi(null) } override fun onOrderArriveAtEnd(orderNo: String) { @@ -294,11 +235,77 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } override fun onOrderJourneyCompleted() { + updateTaskAndOrderUi(null) //获取新的任务 - if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null) { - TaxiTaskModel.startPrepareTask120S(mCurrentTaskAndOrder!!.endSite!!.siteId) + val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() + currentTaskWithOrder?.endSite?.also { + TaxiTaskModel.startPrepareTaskDelay120S(it.siteId) + } + } + + override fun onStartAutopilot() { + UiThreadHandler.postDelayed({ + startTask() //状态流转 + TaxiTaskModel.startAutoPilot() //自驾开启 + VoiceNotice.showNotice("车辆正在自动开启自动驾驶") + }, TaxiUnmannedConst.START_AUTOPILOT_COUNTDOWN_INTERVAL) // 10s后开启自驾, 状态流转 + } + + override fun onCarEndServiceSuccess( + driveToNearestStationTask: StartServiceRespBean.Result?, + currentTaskWithOrder: QueryCurrentTaskRespBean.Result? + ) { + if (currentTaskWithOrder?.endSite != null && currentTaskWithOrder.startSite != null && currentTaskWithOrder.currentStatus < TaskStatusEnum.CompleteTask.code) { + VoiceNotice.showNotice("暂停接单啦!要完成当前订单哦") + } else { + VoiceNotice.showNotice("暂停接单啦") + } + // TODO 如果当前有订单就不要刷新 + updateDriveToNearestStationTaskUI(driveToNearestStationTask) + } + + override fun onCarEndServiceFailed(code: Int, msg: String) { + ToastUtilsOch.showWithCodeMessage(code, msg) + } + + override fun onCarEndServiceError() { + val context = AbsMogoApplication.getApp().applicationContext + if (!NetworkUtils.isConnected(context)) { + ToastUtils.showShort(context.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(context.getString(R.string.request_error_tip)) + } + } + + override fun onCarStartServiceSuccess( + driveToNearestStationTask: StartServiceRespBean.Result?, + currentTaskWithOrder: QueryCurrentTaskRespBean.Result? + ) { + VoiceNotice.showNotice("开始接单啦") + currentTaskWithOrder?.apply { + if (endSite != null) { + when { + currentStatus == TaskStatusEnum.CompleteTask.code && order != null -> return + currentStatus < TaskStatusEnum.CompleteTask.code -> return + } + } + } + updateDriveToNearestStationTaskUI(driveToNearestStationTask) + } + + override fun onCarStartServiceFailed(code: Int, msg: String) { + ToastUtilsOch.showWithCodeMessage( + code, + "$msg curLatitude = ${CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().latitude}" + " curLongitude = ${CallerChassisLocationGCJ02ListenerManager.getChassisLocationGCJ02().longitude}" + ) + } + + override fun onCarStartServiceError() { + val context = AbsMogoApplication.getApp().applicationContext + if (!NetworkUtils.isConnected(context)) { + ToastUtils.showShort(context.getString(R.string.network_error_tip)) + } else { + ToastUtils.showShort(context.getString(R.string.request_error_tip)) } - mCurrentTaskAndOrder = null - updateTaskAndOrderUi() } } \ No newline at end of file diff --git a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt index 2c3d9f59a0..6f4d5e2891 100644 --- a/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt +++ b/OCH/taxi/unmanned-driver/src/main/java/com/mogo/och/taxi/ui/task/TaxiTaskModel.kt @@ -655,13 +655,17 @@ object TaxiTaskModel { //订单或者伪任务更新, 都去刷新下界面 if (mCurrentTaskWithOrder == null - || mCurrentTaskWithOrder!! != result + || !mCurrentTaskWithOrder!!.equals(result) ) { d(TAG, "queryCurrentTaskOnce: 更新本地数据") mCurrentTaskWithOrder = result + // 任务为空 if (result.endSite == null && result.order == null) { + d(TAG, "queryCurrentTaskOnce: 任务为空") mCurrentTaskWithOrder = null + mTaxiTaskWithOrderCallback?.onTaskWithOrderDataChanged(null) + return } //当前任务完成且订单状态到达乘客上车点, 则立马去拉取任务 不再等30s,否则送驾任务要等30s后才能去执行 @@ -703,7 +707,9 @@ object TaxiTaskModel { } } - mTaxiTaskWithOrderCallback?.onTaskWithOrderDataChanged(mCurrentTaskWithOrder) + if (mDriveToNearestStationTask == null) { + mTaxiTaskWithOrderCallback?.onTaskWithOrderDataChanged(mCurrentTaskWithOrder) + } } } @@ -1112,6 +1118,7 @@ object TaxiTaskModel { */ fun clearCurrentOCHOrder() { mCurrentTaskWithOrder = null + mDriveToNearestStationTask = null clearAutopilotControlParameters() TaxiTrajectoryManager.getInstance().syncTrajectoryInfo() SharedPrefsMgr.getInstance(mContext).remove(TaxiUnmannedConst.SP_KEY_OCH_TAXI_ORDER) @@ -1131,6 +1138,8 @@ object TaxiTaskModel { getChassisLocationGCJ02().latitude, getChassisLocationGCJ02().longitude ) + mCurrentTaskWithOrder = null + mDriveToNearestStationTask = null } //导航去订单终点目的地