From b5e2ae75af5319fe6c5ad286979faab7f223d470 Mon Sep 17 00:00:00 2001 From: aibingbing Date: Fri, 21 Jul 2023 16:07:52 +0800 Subject: [PATCH] =?UTF-8?q?[Sweeper=20Colud]=20feat:=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=20=E4=BA=91=E7=AB=AF=E4=B8=8B=E5=8F=91=E5=A4=A7=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=20=E6=9A=82=E5=81=9C/=E6=81=A2=E5=A4=8D=20=E7=9A=84?= =?UTF-8?q?=E5=A4=84=E7=90=86/=E5=BC=B9=E6=A1=86/=E5=8F=91=E9=80=81?= =?UTF-8?q?=E6=94=B6=E5=88=B0=E6=B6=88=E6=81=AF=E7=9A=84=E5=9B=9E=E6=89=A7?= =?UTF-8?q?=EF=BC=9B=20refactor:=20=E4=BB=BB=E5=8A=A1=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E7=8A=B6=E6=80=81=20=E4=BB=8E=E5=AD=90=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=8A=B6=E6=80=81=20=E4=BF=AE=E6=94=B9=E4=B8=BA=20?= =?UTF-8?q?=E5=A4=A7=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81=20=EF=BC=88?= =?UTF-8?q?=E6=9A=82=E5=81=9C/=E6=81=A2=E5=A4=8D=20=E5=8A=A8=E4=BD=9C?= =?UTF-8?q?=E5=9C=A8=E5=A4=A7=E4=BB=BB=E5=8A=A1=E4=B8=8A=EF=BC=89=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../callback/ISweeperCloudTaskCallback.kt | 8 ++ .../sweepercloud/fragment/SweeperFragment.kt | 124 +++++++++++++++++- .../sweepercloud/model/SweeperTaskModel.java | 28 +++- .../presenter/SweeperPresenter.java | 24 +++- .../util/SweeperCloudTaskUtils.kt | 44 ++++++- .../view/SweeperCurrentTaskInfoView.kt | 34 +++-- 6 files changed, 236 insertions(+), 26 deletions(-) diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt index b39f3a8923..179b88c41f 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt @@ -10,6 +10,8 @@ import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon.Code import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus +import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume.ActionType +import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume.BigTaskActionPush import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop.StopTaskType /** @@ -51,6 +53,12 @@ interface ISweeperCloudTaskCallback { * 云端同步大任务状态 */ fun onSweeperCloudBigTaskStatus(taskId:String, bigTaskStatus: SweeperCommon.TaskStatus) + + /** + * 云端同步大任务暂停 / 恢复 指令 + */ + fun onSweeperCloudBigTaskSuspendResume(taskId:String, actionType: ActionType, isPop:Boolean) + /** * 设置轨迹坐标点集合 */ diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt index 5724914e47..a1d88cea14 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/fragment/SweeperFragment.kt @@ -24,6 +24,8 @@ import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedBigTas import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskEndDialog import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskExceptionEndDialog import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskNormalEndDialog +import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskResumeDialog +import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createSweeperTaskSuspendDialog import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.printMessage import com.mogo.och.sweepercloud.view.SweeperCurrentTaskInfoView import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask @@ -32,7 +34,7 @@ import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel -import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus +import com.zhjt.mogo.adas.data.sweeper.task.cloud.s_r.SweeperTaskCloudSuspendResume import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop import kotlinx.android.synthetic.main.fragment_och_sweeper.sweeper_cl_work_mode @@ -56,6 +58,7 @@ class SweeperFragment : BaseSweeperTabFragment { + mDialog = sweeperCloudTaskSuspendDialog() + showNotice("云端暂停任务,注意车辆即将停车!") + } + else -> { + mDialog = sweeperCloudTaskResumeDialog() + var ttsString = "云端恢复任务,注意车辆即将启动!" + mCurrentSuspendSubTaskInfo?.also { suspendSub -> + val isAutoPoilotState = mPresenter?.autopilotState == STATUS_AUTOPILOT_ENABLE + when { + suspendSub.taskModel == TaskModel.MANUAL -> { + ttsString = "云端恢复任务,请继续手动驾驶完成任务!" + } + suspendSub.taskModel == TaskModel.AUTO && isAutoPoilotState -> { + ttsString = "云端恢复任务,注意车辆即将启动!" + } + suspendSub.taskModel == TaskModel.AUTO && !isAutoPoilotState -> { + ttsString = "云端恢复任务,请到达合适的位置后开启自动驾驶!" + } + } + } + showNotice(ttsString) + } + } + mDialog?.show() } } } @@ -563,7 +633,11 @@ class SweeperFragment : BaseSweeperTabFragment SweeperTaskModel.getInstance().sendSweeperAutopilotBootable(taskId, subTaskId, lineId); } + /** + * 大任务暂停/恢复 接收到指令到 回复 + * @param taskId + * @param code + */ + public void sendSweeperSuspendResumeTaskResp(String taskId, SweeperTaskCloudSuspendResume.Code code) { + SweeperTaskModel.getInstance().sendSweeperSuspendResumeTaskResp(taskId, code); + } + @Override public void setRouteList(@NonNull ArrayList routeList) { mView.setTaskRouteList(routeList); @@ -216,6 +225,11 @@ public class SweeperPresenter extends Presenter ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudBigTaskStatus(taskId, bigTaskStatus)); } + @Override + public void onSweeperCloudBigTaskSuspendResume(@NonNull String taskId, @NonNull SweeperTaskCloudSuspendResume.ActionType actionType, boolean isPop) { + ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudBigTaskSuspendOrResume(taskId, actionType, isPop)); + } + @Override public void setWeltDataToMap(@NonNull ArrayList weltDataBeans, boolean isWeltData, @NonNull String distance) { ThreadUtils.runOnUiThread(() -> mView.setWeltDataToMap(weltDataBeans, isWeltData, distance)); diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt index 702ac105e2..56bfea2a26 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperCloudTaskUtils.kt @@ -15,13 +15,15 @@ import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon -import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.* +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.Location +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskInfo +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskModel import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus -import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus.BigTaskStatus import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm.TaskConfirm import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop -import java.util.* +import java.util.UUID object SweeperCloudTaskUtils { const val TAG = "SweeperCloudTaskUtils" @@ -204,7 +206,7 @@ object SweeperCloudTaskUtils { val builder = SweeperBigTaskStatus.BigTaskStatusPush.newBuilder() builder.sn = getDriverSn() builder.taskId = "10" - builder.taskStatus = BigTaskStatus.FINISHED + builder.taskStatus = SweeperCommon.TaskStatus.FINISHED builder.systemTime = System.currentTimeMillis() SweeperTaskModel.getInstance().onSweeperFutianCloudBigTaskStatus( MessageType.CloudPushBigTaskStatus, "${System.currentTimeMillis()}", @@ -358,6 +360,40 @@ object SweeperCloudTaskUtils { return context?.let { it1 -> builder.build(it1) } } + @JvmStatic + fun createSweeperTaskSuspendDialog( + context: Context?, + listener: SweeperCloudDialogClickListener? + ): SweeperCloudDialog? { + var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder() + builder.titleStr = "任务暂停" + builder.contentStr = "云端暂停任务,注意车辆即将停车!" + builder.tipStr = "【云端任务恢复前不可启动自动驾驶】" + builder.leftStr = "确认" + builder.middleStr = "" + builder.rightStr = "" + builder.countDownTime = 10 + builder.listener = listener + return context?.let { it1 -> builder.build(it1) } + } + + @JvmStatic + fun createSweeperTaskResumeDialog( + context: Context?, + listener: SweeperCloudDialogClickListener? + ): SweeperCloudDialog? { + var builder: SweeperCloudDialog.Builder = SweeperCloudDialog.Builder() + builder.titleStr = "任务恢复" + builder.contentStr = "云端恢复任务,注意车辆即将启动!" + builder.tipStr = "【注意安全,坐稳扶好】" + builder.leftStr = "确认" + builder.middleStr = "" + builder.rightStr = "" + builder.countDownTime = 10 + builder.listener = listener + return context?.let { it1 -> builder.build(it1) } + } + @JvmStatic fun printMessage(message: MessageOrBuilder): String { return "\n"+TextFormat.printer().escapingNonAscii(false).printToString(message) diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperCurrentTaskInfoView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperCurrentTaskInfoView.kt index 41b06aae2d..3dbca26a5b 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperCurrentTaskInfoView.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperCurrentTaskInfoView.kt @@ -10,6 +10,7 @@ import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.sweepercloud.R +import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon.TaskStatus import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskInfo @@ -46,7 +47,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { private fun initView(context: Context) { LayoutInflater.from(context).inflate(R.layout.sweeper_current_task_info, this) - setSubTaskState(false) + updateTaskStateText(TaskStatus.TO_START) } fun getAutoBtn(): TextView { @@ -85,10 +86,10 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { * 设置当前任务数据 */ fun setData( - subTaskBean: TaskInfo?, + taskInfo: TaskInfo?, currentPosition: Int = -1 ) { - subTaskBean?.apply { + taskInfo?.apply { this@SweeperCurrentTaskInfoView.listTask = subListList tvTaskName.text = taskName val calendarStart = DateTimeUtil.formatLongToCalendar(taskStartTime) @@ -104,25 +105,32 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { listTask?.let { //特殊处理当前暂无执行中任务的情况 if (currentPosition == -1) { - setSubTaskState(false) + updateTaskStateText(TaskStatus.TO_START) setCurrentData(currentPosition + 1) } else { - setSubTaskState(it[currentPosition].taskStatus == TaskStatus.RUNNING) + updateTaskStateText(taskInfo?.taskStatus ?: TaskStatus.RUNNING) setCurrentData(currentPosition) } } } /** - * 设置子任务的状态 + * 设置任务的状态 */ - private fun setSubTaskState(isWorking: Boolean) { - if (isWorking) { - tvTaskState.text = "任务执行中" - tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_working) - } else { - tvTaskState.text = "任务待开始" - tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready) + private fun updateTaskStateText(taskStatus: SweeperCommon.TaskStatus) { + when (taskStatus) { + SweeperCommon.TaskStatus.RUNNING -> { + tvTaskState.text = "任务执行中" + tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_working) + } + SweeperCommon.TaskStatus.SUSPENDED -> { + tvTaskState.text = "任务已暂停" + tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready) + } + else -> { + tvTaskState.text = "任务待开始" + tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready) + } } }