@@ -5,7 +5,6 @@ import android.view.View
import androidx.lifecycle.lifecycleScope
import chassis.ChassisStatesOuterClass
import com.amap.api.maps.model.LatLng
import com.elegant.utils.UiThreadHandler
import com.mogo.eagle.core.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener.Companion.STATUS_AUTOPILOT_ENABLE
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
@@ -21,7 +20,7 @@ import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog
import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudLoadingDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedTaskInfoDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedBig TaskInfoDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskEndDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskExceptionEndDialog
import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskNormalEndDialog
@@ -56,7 +55,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private var mLocation : MogoLocation ? = null
private var mTaskInfo : SweeperTask . TaskInfo ? = null
private var mSubTaskType : TaskModel = TaskModel . DEFAULT _MODEL //1:自动驾驶子任务 2: 人工驾驶子任务 -1:未知任务类型
private var mCurrentSubTaskInfo : SubTaskInfo ? = null //当前正在执行的子任务
private var mCurrentRunning SubTaskInfo : SubTaskInfo ? = null //当前正在执行的子任务
private val mLoadingDialog : SweeperCloudLoadingDialog by lazy { SweeperCloudLoadingDialog ( requireContext ( ) ) }
private var mDialog : SweeperCloudDialog ? = null
@@ -113,9 +112,9 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
* 设置各种监听事件
*/
private fun initListener ( ) {
getCurrentView ( ) . getAutoBtn ( ) . setOnClickListener {
getCurrentTask View ( ) . getAutoBtn ( ) . setOnClickListener {
//前置条件 (1)必须处于人工驾驶状态 ( 2) 必须有正在执行的子任务, 且子任务类型为自动驾驶子任务 才能请求云端进入自驾
mCurrentSubTaskInfo ?. let {
mCurrentRunning SubTaskInfo ?. let {
if ( mPresenter ?. autopilotState == STATUS _AUTOPILOT _ENABLE
&& it . taskModel == TaskModel . AUTO ) {
mLoadingDialog . showLoading ( )
@@ -127,7 +126,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
override fun setAutoState ( state : Int ) {
super . setAutoState ( state )
getCurrentView ( ) . updateStartAutoPilotBtnState ( state )
getCurrentTask View ( ) . updateStartAutoPilotBtnState ( state )
}
fun onSweeperFutianCleanSystemState ( cleanSystemState : ChassisStatesOuterClass . SweeperFuTianTaskSystemStates ) {
@@ -192,21 +191,23 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
//主动拉取云端正在执行的任务,有则直接在任务列表展示
if ( messageType == SweeperCloudTask . MessageType . PadSendGetTaskReq ) {
getCurrentView ( ) . setData ( taskInfo , getCurrentRunningSubTaskPosition ( ) )
getCurrentTask View ( ) . setData ( taskInfo , getCurrentRunningSubTaskPosition ( ) )
setShowCurrentTaskPanelView ( true )
addTaskData ( )
mPresenter ?. isHasTaskInfo ( true )
} else { //云端下发的大任务信息需要弹窗提示( V3.2.0开始不需要安全员确认接取任务,只能默认接收)
//是否需要弹窗确认
getCurrentTaskView ( ) . setData ( taskInfo )
setShowCurrentTaskPanelView ( true )
addTaskData ( )
mPresenter ?. isHasTaskInfo ( true )
} else { //云端下发的任务信息需要弹窗接取
if ( taskInfo . isPop ) { //是否需要弹窗确认
receivedTaskInfoDialog ( )
} else {
mPresenter ?. sendSweeperStartTaskResp ( taskInfo . taskId , SweeperTask . StartTaskCode . RECEIVED )
setShowCurrentTaskPanelView ( true )
getCurrentView ( ) . setData ( taskInfo )
addTaskData ( )
mPresenter ?. isHasTaskInfo ( true )
//延时2秒再上报确认接取任务, 防止时间太短跟收到任务指令冲突
UiThreadHandler . postDelayed ( { mPresenter ?. sendSweeperStartTaskResp ( taskInfo . taskId , SweeperTask . StartTaskCode . MANUAL _CONFIRM ) } , 2000 )
// 默认发送接收到消息的ACK回执
mPresenter ?. sendSweeperStartTaskResp ( taskInfo . taskId , SweeperTask . StartTaskCode . RECEIVED )
if ( taskInfo . isPop ) {
showReceivedBigTaskDialog ( )
}
//设置任务进度
this . mSubMutableList ?. let {
@@ -238,11 +239,11 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
val subBuilder = subTaskList [ index ] . toBuilder ( )
subBuilder . taskStatus = subTaskStatus
if ( subTaskStatus == SweeperCommon . TaskStatus . RUNNING ) {
mCurrentSubTaskInfo = subBuilder . build ( )
mCurrentRunning SubTaskInfo = subBuilder . build ( )
//更新当前正在执行的任务状态
updateCurrentSubTaskInfo ( index + 1 )
} else {
mCurrentSubTaskInfo = null
mCurrentRunning SubTaskInfo = null
}
//判断是否结束子任务
if ( subTaskStatus == SweeperCommon . TaskStatus . FINISHED ) {
@@ -254,7 +255,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
builder . setSubList ( index , subBuilder . build ( ) )
mTaskInfo = builder . build ( )
mSubMutableList = mTaskInfo ?. subListList
getCurrentView ( ) . setData ( mTaskInfo , index )
getCurrentTask View ( ) . setData ( mTaskInfo , index )
}
}
}
@@ -270,10 +271,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if ( taskId != it . taskId ) {
return
}
// 发送接收到信息的ACK回执
mPresenter ?. sendSweeperStopTaskResp ( taskId , SweeperTaskStop . StopTaskCode . RECEIVED )
if ( isPop ) {
sweeperCloudTaskStopDialog ( taskId , stopTaskType , it )
} else {
mPresenter ?. sendSweeperStopTaskResp ( taskId , SweeperTaskStop . StopTaskCode . MANUAL _CONFIRM )
}
}
}
@@ -288,28 +289,31 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if ( mDialog != null && mDialog !! . isShowing ) {
return
}
mPresenter ?. isHasTaskInfo ( false )
resetTaskInfoPanel ( )
ToastUtils . showLong ( " 任务已结束 " )
if ( stopTaskType == SweeperTaskStop . StopTaskType . NORMAL ) {
mPresenter ?. isHasTaskInfo ( false )
mDialog = sweeperCloudTaskNormalEndDialog ( )
showNotice ( " 任务已结束 " )
} else {
mDialog = createSweeperTaskEndDialog ( context , object : SweeperCloudDialogClickListener {
override fun onConfirm ( ) {
mPresenter?. sendSweeperStopTaskResp( taskId, SweeperTaskStop. StopTaskCode. MANUAL _CONFIRM)
mLoadingDialog. showLoading( )
//ToastUtils.showLong("确认")
// mPresenter?. sendSweeperStopTaskResp( taskId, SweeperTaskStop. StopTaskCode. MANUAL_CONFIRM)
// mLoadingDialog. showLoading()
// //ToastUtils.showLong("确认")
}
override fun onRefuseOrEnd ( ) {
mPresenter?. sendSweeperStopTaskResp( taskId, SweeperTaskStop. StopTaskCode. MANUAL _REFUSE)
mLoadingDialog. showLoading( )
//ToastUtils.showLong("拒绝")
// mPresenter?. sendSweeperStopTaskResp( taskId, SweeperTaskStop. StopTaskCode. MANUAL_REFUSE)
// mLoadingDialog. showLoading()
// //ToastUtils.showLong("拒绝")
}
override fun onCountDownStop ( ) {
mPresenter?. sendSweeperStopTaskResp( taskId, SweeperTaskStop. StopTaskCode. OVER _TIME)
mLoadingDialog. showLoading( )
//ToastUtils.showLong("倒计时")
// mPresenter?. sendSweeperStopTaskResp( taskId, SweeperTaskStop. StopTaskCode. OVER_TIME)
// mLoadingDialog. showLoading()
// //ToastUtils.showLong("倒计时")
}
override fun onNext ( ) {
@@ -326,8 +330,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private fun sweeperCloudTaskNormalEndDialog ( ) : SweeperCloudDialog ? {
return createSweeperTaskNormalEndDialog ( context , object : SweeperCloudDialogClickListener {
override fun onConfirm ( ) {
ToastUtils. showLong( " 任务已结束 " )
resetTaskInfoPanel( )
// ToastUtils. showLong("任务已结束")
// resetTaskInfoPanel()
}
override fun onRefuseOrEnd ( ) {
@@ -335,8 +339,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
override fun onCountDownStop ( ) {
ToastUtils. showLong( " 任务已结束 " )
resetTaskInfoPanel( )
// ToastUtils. showLong("任务已结束")
// resetTaskInfoPanel()
}
override fun onNext ( ) {
@@ -374,7 +378,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 云端同步大任务状态
*/
fun onSweeperCloudBigTaskStatus ( taskId : String , sub TaskStatus: SweeperBigTaskStatus . BigTaskStatus ) {
fun onSweeperCloudBigTaskStatus ( taskId : String , big TaskStatus: SweeperBigTaskStatus . BigTaskStatus ) {
//隐藏loading
mLoadingDialog . hideLoading ( )
mTaskInfo ?. let {
@@ -383,19 +387,23 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
return
}
//大任务处于取消状态 异常状态pad端都显示无任务列表
if ( sub TaskStatus == SweeperBigTaskStatus . BigTaskStatus . CANCLE || subTaskStatus == SweeperBigTaskStatus . BigTaskStatus . ABNORMAL || subTaskStatus == SweeperBigTaskStatus . BigTaskStatus . FINISHED ) {
if ( big TaskStatus == SweeperBigTaskStatus . BigTaskStatus . CANCLE
|| bigTaskStatus == SweeperBigTaskStatus . BigTaskStatus . ABNORMAL
|| bigTaskStatus == SweeperBigTaskStatus . BigTaskStatus . FINISHED ) {
mPresenter ?. isHasTaskInfo ( false )
//数据重复导致连续弹窗
if ( mDialog != null && mDialog !! . isShowing ) {
return
}
mDialog = if ( sub TaskStatus == SweeperBigTaskStatus . BigTaskStatus . CANCLE
|| sub TaskStatus == SweeperBigTaskStatus . BigTaskStatus . ABNORMAL )
sweeperCloudTaskExceptionEndDialog ( sub TaskStatus == SweeperBigTaskStatus . BigTaskStatus . CANCLE )
mDialog = if ( big TaskStatus == SweeperBigTaskStatus . BigTaskStatus . CANCLE
|| big TaskStatus == SweeperBigTaskStatus . BigTaskStatus . ABNORMAL )
sweeperCloudTaskExceptionEndDialog ( big TaskStatus == SweeperBigTaskStatus . BigTaskStatus . CANCLE )
else
sweeperCloudTaskNormalEndDialog ( )
mDialog ?. show ( )
showNotice ( " 任务已结束 " )
} else if ( bigTaskStatus == SweeperBigTaskStatus . BigTaskStatus . SUSPENDED ) { // 暂停
}
}
}
@@ -412,8 +420,10 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
if ( isBootableResp . code == SweeperCommon . Code . SUCCEED ) {
ToastUtils . showLong ( " 上报云控成功 " )
showNotice ( " 上报云控成功 " )
} else {
ToastUtils . showLong ( " 上报云控失败 " )
showNotice ( " 上报云控失败 " )
}
}
}
@@ -432,7 +442,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
setShowCurrentTaskPanelView ( false )
mTaskInfo = null
mCurrentSubTaskInfo = null
mCurrentRunning SubTaskInfo = null
mSubMutableList = null
mSubTaskType = TaskModel . DEFAULT _MODEL
setTaskProgress ( " 0 " )
@@ -447,7 +457,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
mSubMutableList ?. apply {
for ( index in 0 until size ) {
if ( get ( index ) . taskStatus == SweeperCommon . TaskStatus . RUNNING ) {
mCurrentSubTaskInfo = get ( index )
mCurrentRunning SubTaskInfo = get ( index )
updateCurrentSubTaskInfo ( index + 1 )
return index
}
@@ -475,7 +485,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
* 更新当前子任务信息
*/
private fun updateCurrentSubTaskInfo ( position : Int ) {
mCurrentSubTaskInfo ?. let {
mCurrentRunning SubTaskInfo ?. let {
mSubTaskType = it . taskModel
mPresenter ?. setSubtask ( it . subTaskId , it . taskModel , it . lineId )
setEndStationMarker ( position )
@@ -493,19 +503,19 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
super . setTaskRouteList ( routeList )
}
private fun getCurrentView ( ) : SweeperCurrentTaskInfoView = sweeper _current _task _view
private fun getCurrentTask View ( ) : SweeperCurrentTaskInfoView = sweeper _current _task _view
fun handleSubTaskInfoDialog ( taskId : String , subTaskId : String , isPop : Boolean ) {
if ( mTaskInfo == null ) return
if ( mTaskInfo ?. taskId != taskId ) return
val subInfo = getSubTaskInfoBySubId ( subTaskId )
subInfo ?. let {
// 发送接收到消息的ACK回执
mPresenter ?. sendSweeperTaskConfirmResp ( taskId , subTaskId , SweeperTaskConfirm . TaskConfirmCode . RECEIVED )
updateSubTaskInfo ( taskId , subTaskId , SweeperCommon . TaskStatus . RUNNING )
if ( isPop ) {
showSubTaskConfirmDialog ( taskId , subTaskId , it )
} else {
mPresenter ?. sendSweeperTaskConfirmResp ( taskId , subTaskId , SweeperTaskConfirm . TaskConfirmCode . MANUAL _CONFIRM )
//mPresenter?.setPreLineId(-1)
updateSubTaskInfo ( taskId , subTaskId , SweeperCommon . TaskStatus . RUNNING )
}
}
}
@@ -523,69 +533,68 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
mDialog = createConfirmStartSubTaskDialog ( context , object : SweeperCloudDialogClickListener {
override fun onConfirm ( ) {
//ToastUtils.showLong("确认")
mPresenter?. sendSweeperTaskConfirmResp( taskId, subTaskId, SweeperTaskConfirm. TaskConfirmCode. MANUAL _CONFIRM)
//mPresenter?.setPreLineId(-1)
updateSubTaskInfo( taskId, subTaskId, SweeperCommon. TaskStatus. RUNNING)
mLoadingDialog. showLoading( )
// //ToastUtils.showLong("确认")
// mPresenter?. sendSweeperTaskConfirmResp( taskId, subTaskId, SweeperTaskConfirm. TaskConfirmCode. MANUAL_CONFIRM)
// //mPresenter?.setPreLineId(-1)
// updateSubTaskInfo( taskId, subTaskId, SweeperCommon. TaskStatus. RUNNING)
// mLoadingDialog. showLoading()
}
override fun onRefuseOrEnd ( ) {
//ToastUtils.showLong("结束")
mPresenter?. sendSweeperTaskConfirmResp( taskId, subTaskId, SweeperTaskConfirm. TaskConfirmCode. MANUAL _REFUSE _ALL)
mLoadingDialog. showLoading( )
// //ToastUtils.showLong("结束")
// mPresenter?. sendSweeperTaskConfirmResp( taskId, subTaskId, SweeperTaskConfirm. TaskConfirmCode. MANUAL_REFUSE_ALL)
// mLoadingDialog. showLoading()
}
override fun onCountDownStop ( ) {
//ToastUtils.showLong("倒计时结束")
mPresenter?. sendSweeperTaskConfirmResp( taskId, subTaskId, SweeperTaskConfirm. TaskConfirmCode. OVER _TIME)
mLoadingDialog. showLoading( )
// //ToastUtils.showLong("倒计时结束")
// mPresenter?. sendSweeperTaskConfirmResp( taskId, subTaskId, SweeperTaskConfirm. TaskConfirmCode. OVER_TIME)
// mLoadingDialog. showLoading()
}
override fun onNext ( ) {
//ToastUtils.showLong("下一个")
mPresenter?. sendSweeperTaskConfirmResp( taskId, subTaskId, SweeperTaskConfirm. TaskConfirmCode. MANUAL _REFUSE _SINGLE)
mLoadingDialog. showLoading( )
// //ToastUtils.showLong("下一个")
// mPresenter?. sendSweeperTaskConfirmResp( taskId, subTaskId, SweeperTaskConfirm. TaskConfirmCode. MANUAL_REFUSE_SINGLE)
// mLoadingDialog. showLoading()
}
} , subTaskInfo )
mDialog ?. show ( )
showNotice ( " 请确认是否 执行任务 " )
showNotice ( " 请确认并 执行子 任务 " )
}
/**
* 接取云端任务弹窗
* 接取云端大 任务弹窗提示
* ( V3.2.0 开始不需要确认/拒绝/下一个 操作了,安全员只能被动接取,弹框只是一个提示)
*/
private fun r eceivedTaskInfo Dialog( ) {
private fun showR eceivedBig TaskDialog( ) {
mTaskInfo ?. let {
mPresenter ?. sendSweeperStartTaskResp ( it . taskId , SweeperTask . StartTaskCode . RECEIVED )
//数据重复导致连续弹窗
if ( mDialog != null && mDialog !! . isShowing ) {
return
}
mDialog = createReceivedTaskInfoDialog ( context , object : SweeperCloudDialogClickListener {
mDialog = createReceivedBig TaskInfoDialog ( context , object : SweeperCloudDialogClickListener {
override fun onConfirm ( ) {
// ToastUtils.showLong("确认")
mPresenter?. sendSweeperStartTaskResp( it . taskId , SweeperTask. StartTaskCode. MANUAL _CONFIRM)
setShowCurrentTaskPanelView( true )
getCurrentView ( ) . setData ( it )
mLoadingDialog. showLoading( )
addTaskData( )
mPresenter?. isHasTaskInfo( true )
// ToastUtils.showLong("确认")
// mPresenter?. sendSweeperStartTaskResp(it.taskId, SweeperTask. StartTaskCode. MANUAL_CONFIRM)
// setShowCurrentTaskPanelView(true)
// getCurrentTaskView().setData(it)
// mLoadingDialog. showLoading()
// addTaskData()
// mPresenter?. isHasTaskInfo(true)
}
override fun onRefuseOrEnd ( ) {
// ToastUtils.showLong("拒绝")
mPresenter?. sendSweeperStartTaskResp( it . taskId , SweeperTask. StartTaskCode. MANUAL _REFUSE)
mLoadingDialog. showLoading( )
resetTaskInfoPanel( )
// ToastUtils.showLong("拒绝")
// mPresenter?. sendSweeperStartTaskResp(it.taskId, SweeperTask. StartTaskCode. MANUAL_REFUSE)
// mLoadingDialog. showLoading()
// resetTaskInfoPanel()
}
override fun onCountDownStop ( ) {
// ToastUtils.showLong("倒计时结束")
resetTaskInfoPanel( )
mPresenter?. sendSweeperStartTaskResp( it . taskId , SweeperTask. StartTaskCode. OVER _TIME)
mLoadingDialog. showLoading( )
// ToastUtils.showLong("倒计时结束")
// resetTaskInfoPanel()
// mPresenter?. sendSweeperStartTaskResp(it.taskId, SweeperTask. StartTaskCode. OVER_TIME)
// mLoadingDialog. showLoading()
}
override fun onNext ( ) {
@@ -593,7 +602,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
}
} , it )
mDialog ?. show ( )
showNotice ( " 请确认是否 接取任务" )
showNotice ( " 已为您 接取任务" )
}
}
}