[6.0.0] refactor : 登出页面不刷新

This commit is contained in:
wangmingjun
2023-08-25 20:53:26 +08:00
committed by zhongchao
parent 7e6cca4698
commit d36116733d
3 changed files with 156 additions and 140 deletions

View File

@@ -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)

View File

@@ -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<UnmannedState, UnmannedIntent>(), ITaxiTaskCallback {
class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(),
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<UnmannedState, UnmannedIntent>(),
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<UnmannedState, UnmannedIntent>(),
}
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<BaseData> {
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<BaseData> {
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<StartServiceRespBean> {
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<BaseData> {
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<BaseData> {
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<UnmannedState, UnmannedIntent>(),
}
}
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<UnmannedState, UnmannedIntent>(),
if (isOrderArrivedAtStart) {
TaxiTaskModel.prepareNextTask(siteId)
} else {
TaxiTaskModel.startPrepareTask120S(siteId)
TaxiTaskModel.startPrepareTaskDelay120S(siteId)
}
}
@@ -280,8 +222,7 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(),
override fun onOrderCancel() {
VoiceNotice.showNotice("订单已经取消")
mCurrentTaskAndOrder = null
updateTaskAndOrderUi()
updateTaskAndOrderUi(null)
}
override fun onOrderArriveAtEnd(orderNo: String) {
@@ -294,11 +235,77 @@ class TaxiCurrentTaskViewModel : BaseViewModel<UnmannedState, UnmannedIntent>(),
}
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()
}
}

View File

@@ -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
}
//导航去订单终点目的地