[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确认 * 云端下发子任务请求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 androidx.lifecycle.lifecycleScope
import chassis.ChassisStatesOuterClass import chassis.ChassisStatesOuterClass
import com.amap.api.maps.model.LatLng 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.data.map.MogoLocation
import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener.Companion.STATUS_AUTOPILOT_ENABLE import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener.Companion.STATUS_AUTOPILOT_ENABLE
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger
@@ -161,7 +162,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private fun setEndStationMarker(position: Int) { private fun setEndStationMarker(position: Int) {
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
mSubMutableList?.let { subList -> mSubMutableList?.let { subList ->
val endPoint = subList[position-1].endLocation val endPoint = subList[position - 1].endLocation
val endLatLng = LatLng(endPoint.latitude, endPoint.longitude) val endLatLng = LatLng(endPoint.latitude, endPoint.longitude)
super.mCurrentTaskEndStation = endLatLng super.mCurrentTaskEndStation = endLatLng
setCurrentTaskEndMarker(endLatLng) setCurrentTaskEndMarker(endLatLng)
@@ -186,7 +187,13 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
setShowCurrentTaskPanelView(true) setShowCurrentTaskPanelView(true)
addTaskData() addTaskData()
} else {//云端下发的任务信息需要弹窗接取 } 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 { this.mSubMutableList?.let {
setTaskProgress("0/${it.size}") setTaskProgress("0/${it.size}")
@@ -212,7 +219,7 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
if (subTaskStatus == SweeperCommon.TaskStatus.RUNNING) { if (subTaskStatus == SweeperCommon.TaskStatus.RUNNING) {
mCurrentSubTaskInfo = subBuilder.build() mCurrentSubTaskInfo = subBuilder.build()
//更新当前正在执行的任务状态 //更新当前正在执行的任务状态
updateCurrentSubTaskInfo(index+1) updateCurrentSubTaskInfo(index + 1)
} else { } else {
mCurrentSubTaskInfo = null mCurrentSubTaskInfo = null
} }
@@ -236,51 +243,62 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
/** /**
* 云端请求结束大任务 * 云端请求结束大任务
*/ */
fun onSweeperCloudTaskStop(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType) { fun onSweeperCloudTaskStop(taskId: String, stopTaskType: SweeperTaskStop.StopTaskType, isPop: Boolean) {
mLoadingDialog.hideLoading()
mTaskInfo?.let { mTaskInfo?.let {
//如果云端要更新的任务和本地缓存任务不是同一个,在无法结束任务 //如果云端要更新的任务和本地缓存任务不是同一个,在无法结束任务
if (taskId != it.taskId) { if (taskId != it.taskId) {
return return
} }
val timeout: String = getTimeSpent(it.taskEndTime) if (isPop) {
//数据重复导致连续弹窗 sweeperCloudTaskStopDialog(taskId, stopTaskType, it)
if (mDialog != null && mDialog!!.isShowing) {
return
}
if (stopTaskType == SweeperTaskStop.StopTaskType.NORMAL) {
mDialog = sweeperCloudTaskNormalEndDialog()
showNotice("任务已结束")
} else { } else {
mDialog = createSweeperTaskEndDialog(context, object : SweeperCloudDialogClickListener { mPresenter?.sendSweeperStopTaskResp(taskId, SweeperTaskStop.StopTaskCode.MANUAL_CONFIRM)
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()
} }
} }
/**
* 结束任务弹窗处理
*/
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) { for (index in 0 until size) {
if (get(index).taskStatus == SweeperCommon.TaskStatus.RUNNING) { if (get(index).taskStatus == SweeperCommon.TaskStatus.RUNNING) {
mCurrentSubTaskInfo = get(index) mCurrentSubTaskInfo = get(index)
updateCurrentSubTaskInfo(index+1) updateCurrentSubTaskInfo(index + 1)
return index return index
} }
} }
@@ -427,50 +445,61 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
private fun getCurrentView(): SweeperCurrentTaskInfoView = sweeper_current_task_view private fun getCurrentView(): SweeperCurrentTaskInfoView = sweeper_current_task_view
/**
* 云控下发子任务确认弹窗 fun handleSubTaskInfoDialog(taskId: String, subTaskId: String, isPop: Boolean) {
*/
fun showSubTaskInfoDialog(taskId: String, subTaskId: String) {
mLoadingDialog.hideLoading()
if (mTaskInfo == null) return if (mTaskInfo == null) return
if (mTaskInfo?.taskId != taskId) return if (mTaskInfo?.taskId != taskId) return
val subInfo = bySubTaskIdFindSubTaskInfo(subTaskId) val subInfo = bySubTaskIdFindSubTaskInfo(subTaskId)
subInfo?.let { subInfo?.let {
//数据重复导致连续弹窗 if (isPop) {
if (mDialog != null && mDialog!!.isShowing) { showSubTaskInfoDialog(taskId, subTaskId, it)
return } 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)); "onSweeperFutianCloudTaskConfirm" + printMessage(taskConfirm));
if (mSweeperTaskCallback != null && taskConfirm != null) { if (mSweeperTaskCallback != null && taskConfirm != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo); 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)); "onSweeperFutianCloudTaskStop" + printMessage(stopTaskReq));
if (mSweeperTaskCallback != null && stopTaskReq != null) { if (mSweeperTaskCallback != null && stopTaskReq != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo); 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 @Override
public void onSweeperCloudTaskConfirm(@NonNull String taskId, @NonNull String subTaskId) { public void onSweeperCloudTaskConfirm(@NonNull String taskId, @NonNull String subTaskId, boolean isPop) {
ThreadUtils.runOnUiThread(() -> mView.showSubTaskInfoDialog(taskId, subTaskId)); ThreadUtils.runOnUiThread(() -> mView.handleSubTaskInfoDialog(taskId, subTaskId,isPop));
} }
@Override @Override
public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, SweeperCommon.TaskStatus subTaskStatus) { public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, SweeperCommon.TaskStatus subTaskStatus) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperUpdateSubTaskStatus(taskId, subTaskId, subTaskStatus)); ThreadUtils.runOnUiThread(() -> mView.onSweeperUpdateSubTaskStatus(taskId, subTaskId, subTaskStatus));
} }
@Override @Override
public void onSweeperCloudTaskStop(@NonNull String taskId, SweeperTaskStop.StopTaskType stopTaskType) { public void onSweeperCloudTaskStop(@NonNull String taskId, SweeperTaskStop.StopTaskType stopTaskType,boolean isPop) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTaskStop(taskId, stopTaskType)); ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTaskStop(taskId, stopTaskType,isPop));
} }
@Override @Override