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 d65c017f63..e67e44db5a 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 @@ -307,7 +307,8 @@ class TaxiCurrentTaskFragment : BaseFragment(), TaskTypeEnum.VirtualTask.code -> { //演练任务 cancelOrder.visibility = View.GONE - orderPhoneAndNum.visibility = View.GONE + orderPhoneAndNum.visibility = if (order != null && + currentStatus == TaskStatusEnum.CompleteTask.code) View.VISIBLE else View.GONE taskClickBtn.visibility = View.GONE naviToStart.visibility = View.GONE 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 d6547435ec..6d8454a67c 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,5 +1,6 @@ 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 @@ -8,7 +9,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.eagle.core.utilcode.util.UiThreadHandler +import com.mogo.och.common.module.biz.constant.LoginStatusManager.isLogin 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 @@ -18,11 +19,9 @@ 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.ITaxiCarServiceCallback -import com.mogo.och.taxi.callback.ITaxiTaskWithOrderCallback +import com.mogo.och.taxi.callback.ITaxiTaskCallback import com.mogo.och.taxi.constant.TaskStatusEnum -import com.mogo.och.taxi.constant.TaxiOrderStatusEnum -import com.mogo.och.taxi.constant.TaxiUnmannedConst +import com.mogo.och.taxi.constant.TaxiCarServingStatusManager.isCarServingStatus import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager import com.mogo.och.taxi.network.TaxiTaskWithOrderServiceManager.cancelOrder import com.mogo.och.taxi.ui.unmanned.TaskWithOrderUIState @@ -34,14 +33,15 @@ import com.mogo.och.taxi.utils.TaxiTrajectoryManager * @author: wangmingjun * @date: 2023/7/26 */ -class TaxiCurrentTaskViewModel : BaseViewModel(), - ITaxiTaskWithOrderCallback, ITaxiCarServiceCallback { +class TaxiCurrentTaskViewModel : BaseViewModel(), ITaxiTaskCallback { + private var mCurrentTaskAndOrder: QueryCurrentTaskRespBean.Result? = null private val TAG = SceneConstant.M_TAXI + "TaxiUnmannedViewModel" + private var mContext: Context = AbsMogoApplication.getApp().applicationContext + init { - TaxiTaskModel.setTaskWithOrderCallback(this) - TaxiTaskModel.setCarServiceCallback(this) + TaxiTaskModel.setTaskCallback(this) } override fun initUiState(): UnmannedState { @@ -50,16 +50,16 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), override fun handleIntent(intent: IUiIntent) { when (intent) { - is UnmannedIntent.StartTaskWithOrderLooper -> { //开始轮询 + is UnmannedIntent.StartTaskOrOrderLooper -> { //开始轮询 startOrStopCurrentTaskWithOrderLoop(true) } - is UnmannedIntent.StartOrEndTakeOrder -> {//开始、暂停接单 - TaxiTaskModel.updateCarServingStatus() + is UnmannedIntent.StartOrPauseTakeOrder -> {//开始、暂停接单 + updateCarServingStatus() } - is UnmannedIntent.JumpPassengerCheck -> { //手动点击跳过乘客验证 - jumpPassengerCheck() + is UnmannedIntent.JumpPassengerCheckDone -> { //手动点击跳过乘客验证 + jumpPassengerCheckDone() } is UnmannedIntent.JourneyCompleted -> { //点击服务完成 @@ -67,113 +67,161 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } is UnmannedIntent.CloseOrderByDriver -> { - closeOrderByDriver() + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null) { + val site = mCurrentTaskAndOrder!!.order!!.orderEndSite + TaxiTaskModel.submitArriveSite(site!!.siteId, true) + } } is UnmannedIntent.CancelOrder -> {// 取消订单, 暂未加取消类型和原因 - cancelOrder(intent.type) + handleCancelOrder(intent.type) } is UnmannedIntent.StartTask -> { - startTask() + TaxiTaskModel.toStartTask() } } } - 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, + private fun handleCancelOrder(cancelType: Int) { + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null) { + cancelOrder(mContext, + mCurrentTaskAndOrder!!.order!!.orderNo, cancelType, object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { - d(TAG, "handleCancelOrder() = onSuccess") + d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() = onSuccess") } override fun onFail(code: Int, msg: String?) { - d(TAG, "handleCancelOrder() $code $msg") + d(SceneConstant.M_TAXI + TAG, "handleCancelOrder() $code $msg") } }) } } - private fun jumpPassengerCheck() { - val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() - currentTaskWithOrder?.order?.also { - TaxiTaskWithOrderServiceManager.jumpPassengerCheck(AbsMogoApplication.getApp().applicationContext, - it.orderNo, + /** + * 更新接单状态 + */ + private fun updateCarServingStatus() { + if (!isLogin()) { + TaxiTaskModel.loginService!!.queryLoginStatusByNet() + return + } + if (isCarServingStatus()) {//接单状态下,去结束 + TaxiTaskWithOrderServiceManager.endService( + mContext, object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { - d(TAG, "jumpPassengerCheck onSuccess:") + 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) } override fun onFail(code: Int, msg: String?) { - d(TAG, "jumpPassengerCheck onFail: code=$code, msg=$msg") + 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)) + } } }) } } private fun journeyCompleted() { - val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() - currentTaskWithOrder?.order?.also { + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.order != null) { TaxiTaskWithOrderServiceManager.orderCompleted(AbsMogoApplication.getApp().applicationContext, - it.orderNo, + mCurrentTaskAndOrder!!.order!!.orderNo, object : OchCommonServiceCallback { override fun onSuccess(data: BaseData?) { - d(TAG, "journeyCompleted onSuccess") + d(SceneConstant.M_TAXI + TAG, "orderCompleted() = onSuccess") } override fun onFail(code: Int, msg: String?) { - d(TAG, "journeyCompleted onFail: code=$code, msg=$msg") + d(SceneConstant.M_TAXI + TAG, "orderCompleted() $code $msg") } }) } } - private fun closeOrderByDriver() { - val currentTaskWithOrder = TaxiTaskModel.getCurrentTaskWithOrder() - currentTaskWithOrder?.order?.orderEndSite?.also { - TaxiTaskModel.submitArriveSite(it.siteId, true) + 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 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?) { + private fun updateTaskAndOrderUi() { d( - TAG, "updateTaskAndOrderUi: currentTaskWithOrder=${ - GsonUtil.getGson().toJson(currentTaskWithOrder) + TAG, + "updateTaskAndOrderUi: mCurrentTaskAndOrder=${ + GsonUtil.getGson().toJson(mCurrentTaskAndOrder) }" ) sendUiState { copy( taskWithOrderUIState = TaskWithOrderUIState.TaskWithOrder( - currentTaskWithOrder + mCurrentTaskAndOrder ) ) } @@ -201,12 +249,20 @@ 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)) - result?.also { - updateTaskAndOrderUi(result) - } + mCurrentTaskAndOrder = result + updateTaskAndOrderUi() } override fun onTaskCompleted(isOrderArrivedAtStart: Boolean, siteId: Long) { @@ -214,7 +270,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), if (isOrderArrivedAtStart) { TaxiTaskModel.prepareNextTask(siteId) } else { - TaxiTaskModel.startPrepareTaskDelay120S(siteId) + TaxiTaskModel.startPrepareTask120S(siteId) } } @@ -223,8 +279,9 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } override fun onOrderCancel() { - VoiceNotice.showNotice("乘客已经取消") - updateTaskAndOrderUi(null) + VoiceNotice.showNotice("订单已经取消") + mCurrentTaskAndOrder = null + updateTaskAndOrderUi() } override fun onOrderArriveAtEnd(orderNo: String) { @@ -237,76 +294,11 @@ class TaxiCurrentTaskViewModel : BaseViewModel(), } override fun onOrderJourneyCompleted() { - updateTaskAndOrderUi(null) //获取新的任务 - 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("暂停接单啦") - } - 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)) + if (mCurrentTaskAndOrder != null && mCurrentTaskAndOrder!!.endSite != null) { + TaxiTaskModel.startPrepareTask120S(mCurrentTaskAndOrder!!.endSite!!.siteId) } + mCurrentTaskAndOrder = null + updateTaskAndOrderUi() } } \ No newline at end of file