[sweeper-cloud]1.云端下发大任务信息(type: 100001)

2.云端下发子任务,请求pad确认 (type:100002)
               3.云端请求pad结束任务 (type:100004) 数据解析及其逻辑修改
This commit is contained in:
bxb
2023-05-25 08:40:54 +08:00
parent f570f8349a
commit c39e674fec
4 changed files with 111 additions and 83 deletions

View File

@@ -25,7 +25,7 @@ interface ISweeperCloudTaskCallback {
/**
* 云端下发子任务请求pad确认
*/
fun onSweeperCloudTaskConfirm(taskId:String,subTaskId:String)
fun onSweeperCloudTaskConfirm(taskId:String,subTaskId:String,isPop:Boolean)
/**
* 云端下发子任务状态同步
@@ -35,7 +35,7 @@ interface ISweeperCloudTaskCallback {
/**
* 云端下发结束大任务指令
*/
fun onSweeperCloudTaskStop(taskId:String,stopTaskType: StopTaskType)
fun onSweeperCloudTaskStop(taskId:String,stopTaskType: StopTaskType,isPop:Boolean)
/**
* 挂起/恢复

View File

@@ -5,6 +5,7 @@ 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
@@ -161,7 +162,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private fun setEndStationMarker(position: Int) {
lifecycleScope.launch(Dispatchers.IO) {
mSubMutableList?.let { subList ->
val endPoint = subList[position-1].endLocation
val endPoint = subList[position - 1].endLocation
val endLatLng = LatLng(endPoint.latitude, endPoint.longitude)
super.mCurrentTaskEndStation = endLatLng
setCurrentTaskEndMarker(endLatLng)
@@ -186,7 +187,13 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
setShowCurrentTaskPanelView(true)
addTaskData()
} else {//云端下发的任务信息需要弹窗接取
receivedTaskInfoDialog()
if (taskInfo.isPop) {//是否需要弹窗确认
receivedTaskInfoDialog()
} else {
mPresenter?.sendSweeperStartTaskResp(taskInfo.taskId, SweeperTask.StartTaskCode.RECEIVED)
//延时2秒再上报确认接取任务防止时间太短跟收到任务指令冲突
UiThreadHandler.postDelayed({ mPresenter?.sendSweeperStartTaskResp(taskInfo.taskId, SweeperTask.StartTaskCode.MANUAL_CONFIRM) }, 2000)
}
//设置任务进度
this.mSubMutableList?.let {
setTaskProgress("0/${it.size}")
@@ -212,7 +219,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if (subTaskStatus == SweeperCommon.TaskStatus.RUNNING) {
mCurrentSubTaskInfo = subBuilder.build()
//更新当前正在执行的任务状态
updateCurrentSubTaskInfo(index+1)
updateCurrentSubTaskInfo(index + 1)
} else {
mCurrentSubTaskInfo = null
}
@@ -236,51 +243,62 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/**
* 云端请求结束大任务
*/
fun onSweeperCloudTaskStop(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType) {
mLoadingDialog.hideLoading()
fun onSweeperCloudTaskStop(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType, isPop: Boolean) {
mTaskInfo?.let {
//如果云端要更新的任务和本地缓存任务不是同一个,在无法结束任务
if (taskId != it.taskId) {
return
}
val timeout: String = getTimeSpent(it.taskEndTime)
//数据重复导致连续弹窗
if (mDialog != null && mDialog!!.isShowing) {
return
}
if (stopTaskType == SweeperTaskStop.StopTaskType.NORMAL) {
mDialog = sweeperCloudTaskNormalEndDialog()
showNotice("任务已结束")
if (isPop) {
sweeperCloudTaskStopDialog(taskId, stopTaskType, it)
} else {
mDialog = createSweeperTaskEndDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
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("拒绝")
}
override fun onCountDownStop() {
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.OVER_TIME)
mLoadingDialog.showLoading()
//ToastUtils.showLong("倒计时")
}
override fun onNext() {
}
}, stopTaskType, timeout)
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
}
mDialog?.show()
}
}
/**
* 结束任务弹窗处理
*/
private fun sweeperCloudTaskStopDialog(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType, taskInfo: SweeperTask.TaskInfo) {
mLoadingDialog.hideLoading()
val timeout: String = getTimeSpent(taskInfo.taskEndTime)
//数据重复导致连续弹窗
if (mDialog != null && mDialog!!.isShowing) {
return
}
if (stopTaskType == SweeperTaskStop.StopTaskType.NORMAL) {
mDialog = sweeperCloudTaskNormalEndDialog()
showNotice("任务已结束")
} else {
mDialog = createSweeperTaskEndDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
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("拒绝")
}
override fun onCountDownStop() {
mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.OVER_TIME)
mLoadingDialog.showLoading()
//ToastUtils.showLong("倒计时")
}
override fun onNext() {
}
}, stopTaskType, timeout)
}
mDialog?.show()
}
/**
* 大任务/子任务正常结束弹窗
*/
@@ -380,7 +398,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
for (index in 0 until size) {
if (get(index).taskStatus == SweeperCommon.TaskStatus.RUNNING) {
mCurrentSubTaskInfo = get(index)
updateCurrentSubTaskInfo(index+1)
updateCurrentSubTaskInfo(index + 1)
return index
}
}
@@ -427,50 +445,61 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private fun getCurrentView(): SweeperCurrentTaskInfoView = sweeper_current_task_view
/**
* 云控下发子任务确认弹窗
*/
fun showSubTaskInfoDialog(taskId: String, subTaskId: String) {
mLoadingDialog.hideLoading()
fun handleSubTaskInfoDialog(taskId: String, subTaskId: String, isPop: Boolean) {
if (mTaskInfo == null) return
if (mTaskInfo?.taskId != taskId) return
val subInfo = bySubTaskIdFindSubTaskInfo(subTaskId)
subInfo?.let {
//数据重复导致连续弹窗
if (mDialog != null && mDialog!!.isShowing) {
return
if (isPop) {
showSubTaskInfoDialog(taskId, subTaskId, it)
} else {
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
}
mDialog = createConfirmStartSubTaskDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
//ToastUtils.showLong("确认")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
mLoadingDialog.showLoading()
}
override fun onRefuseOrEnd() {
//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()
}
override fun onNext() {
//ToastUtils.showLong("下一个")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_REFUSE_SINGLE)
mLoadingDialog.showLoading()
}
}, it)
mDialog?.show()
showNotice("请确认是否执行任务")
}
}
/**
* 云控下发子任务确认弹窗
*/
private fun showSubTaskInfoDialog(taskId: String, subTaskId: String, subTaskInfo: SubTaskInfo) {
mLoadingDialog.hideLoading()
if (mTaskInfo == null) return
if (mTaskInfo?.taskId != taskId) return
//数据重复导致连续弹窗
if (mDialog != null && mDialog!!.isShowing) {
return
}
mDialog = createConfirmStartSubTaskDialog(context, object : SweeperCloudDialogClickListener {
override fun onConfirm() {
//ToastUtils.showLong("确认")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
mLoadingDialog.showLoading()
}
override fun onRefuseOrEnd() {
//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()
}
override fun onNext() {
//ToastUtils.showLong("下一个")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_REFUSE_SINGLE)
mLoadingDialog.showLoading()
}
}, subTaskInfo)
mDialog?.show()
showNotice("请确认是否执行任务")
}
/**
* 接取云端任务弹窗
*/

View File

@@ -317,7 +317,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
"onSweeperFutianCloudTaskConfirm" + printMessage(taskConfirm));
if (mSweeperTaskCallback != null && taskConfirm != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId());
mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId(),taskConfirm.getIsPop());
}
}
@@ -339,7 +339,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
"onSweeperFutianCloudTaskStop" + printMessage(stopTaskReq));
if (mSweeperTaskCallback != null && stopTaskReq != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType());
mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType(),stopTaskReq.getIsPop());
}
}

View File

@@ -169,18 +169,17 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
}
@Override
public void onSweeperCloudTaskConfirm(@NonNull String taskId, @NonNull String subTaskId) {
ThreadUtils.runOnUiThread(() -> mView.showSubTaskInfoDialog(taskId, subTaskId));
public void onSweeperCloudTaskConfirm(@NonNull String taskId, @NonNull String subTaskId, boolean isPop) {
ThreadUtils.runOnUiThread(() -> mView.handleSubTaskInfoDialog(taskId, subTaskId,isPop));
}
@Override
public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, SweeperCommon.TaskStatus subTaskStatus) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperUpdateSubTaskStatus(taskId, subTaskId, subTaskStatus));
}
@Override
public void onSweeperCloudTaskStop(@NonNull String taskId, SweeperTaskStop.StopTaskType stopTaskType) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTaskStop(taskId, stopTaskType));
public void onSweeperCloudTaskStop(@NonNull String taskId, SweeperTaskStop.StopTaskType stopTaskType,boolean isPop) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTaskStop(taskId, stopTaskType,isPop));
}
@Override