From b88a86d59546f105e7b02764d63dd0d9c0eb0107 Mon Sep 17 00:00:00 2001 From: bxb Date: Tue, 9 May 2023 10:48:21 +0800 Subject: [PATCH] =?UTF-8?q?[sweeper-cloud]=20=E4=BA=91=E6=8E=A7=E5=AD=90?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../callback/ISweeperCloudTaskCallback.kt | 15 +++++ .../sweepercloud/fragment/SweeperFragment.kt | 55 ++++++++++++++++--- .../sweepercloud/model/SweeperTaskModel.java | 10 +++- .../presenter/SweeperPresenter.java | 1 + .../ui/dialog/SweeperCloudLoadingDialog.kt | 2 +- .../util/SweeperCloudTaskUtils.kt | 27 +++++++-- .../mogo/och/sweepercloud/view/SubTaskView.kt | 2 +- .../view/SweeperCurrentTaskInfoView.kt | 20 +++---- .../sweepercloud/view/SweeperWorkModeView.kt | 2 +- .../res/layout/sweeper_current_task_info.xml | 2 +- .../main/res/layout/sweeper_subtask_view.xml | 2 +- 11 files changed, 108 insertions(+), 30 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 ea5af72a84..97817eca09 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 @@ -23,14 +23,29 @@ interface ISweeperCloudTaskCallback { */ fun onSweeperCloudTaskConfirm(taskId:String,subTaskId:String) + /** + * 云端下发子任务状态同步 + */ fun onSweeperCloudTaskStatus(taskId:String,subTaskId:String,subTaskStatus: SweeperCommon.TaskStatus) + /** + * 云端下发结束大任务指令 + */ fun onSweeperCloudTaskStop(taskId:String,stopTaskType: StopTaskType) + /** + * 挂起/恢复 + */ fun onSweeperCloudTaskSuspendResume(messageType: SweeperCloudTask.MessageType,taskId:String,subTaskId:String,code:Code) + /** + * pad请求云端进入自驾 + */ fun onSweeperCloudBootable(taskId:String,subTaskId:String,code:Code) + /** + * 云端同步大任务状态 + */ fun onSweeperCloudBigTaskStatus(taskId:String,subTaskStatus: SweeperBigTaskStatus.BigTaskStatus) /** * 设置轨迹坐标点集合 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 f7274ecd6f..8fbc24c524 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 @@ -14,7 +14,7 @@ import com.mogo.och.sweepercloud.presenter.SweeperPresenter import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudLoadingDialog import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createConfirmStartSubTaskDialog import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.createReceivedTaskInfoDialog -import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.sendCloudTaskInfo +import com.mogo.och.sweepercloud.util.SweeperCloudTaskUtils.mockSendCloudTaskInfo import com.mogo.och.sweepercloud.view.SweeperCurrentTaskInfoView import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask import com.zhjt.mogo.adas.data.sweeper.common.SweeperCommon @@ -39,7 +39,8 @@ class SweeperFragment : BaseSweeperTabFragment + for (index in 0 until subTaskList.size) { + if (subTaskList[index].subTaskId == subTaskId) { + val subBuilder = subTaskList[index].toBuilder() + subBuilder.taskStatus = subTaskStatus + if (subTaskStatus == SweeperCommon.TaskStatus.RUNNING) { + mCurrentSubTaskInfo = subBuilder.build() + //更新当前正在执行的任务状态 + updateCurrentSubTaskInfo() + } + val builder = it.toBuilder() + builder.setSubList(index,subBuilder.build()) + mTaskInfo=builder.build() + mSubMutableList=mTaskInfo?.subListList + getCurrentView().setData(mTaskInfo, index) + } + } + + } + } + } + //模拟结束子任务 override fun debugEndSubTask() { //super.debugEndSubTask() // TODO: 模拟云控获取任务 //mPresenter?.getCurrentTask() - sendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask) + mockSendCloudTaskInfo(SweeperCloudTask.MessageType.CloudPushTask) } /** @@ -189,8 +222,8 @@ class SweeperFragment : BaseSweeperTabFragmentPresenter:VR mode等 private ISweeperCloudTaskCallback mSweeperTaskCallback; ArrayList points = new ArrayList<>();//全路径信息 - private int mSubTaskType = 0; //1自动驾驶 2.人工驾驶 + private int mSubTaskType = -1; //1自动驾驶 2.人工驾驶 -1:未知任务类型 private int mCurrentLineId = 0; //当前路线id private int mLineId = 0;//上一次存储的路线id //自动驾驶状态 @@ -457,7 +457,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:" + printMessage(getTaskReq) + " reqNo:" + reqNo); getAutoPilotControlManager().sendSweeperGetTaskReq(reqNo, getTaskReq); // TODO: 2023/5/5 模拟云控获取任务 - SweeperCloudTaskUtils.sendCloudTaskInfo(SweeperCloudTask.MessageType.PadSendGetTaskReq); + SweeperCloudTaskUtils.mockSendCloudTaskInfo(SweeperCloudTask.MessageType.PadSendGetTaskReq); } /** @@ -474,7 +474,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp:" + printMessage(startTaskResp) + " reqNo:" + reqNo); // TODO: 2023/5/5 模拟 当云控收到pad接取任务成功的指令时, 云控下发子任务开始确认指令 if (code == SweeperTask.StartTaskCode.MANUAL_CONFIRM) { - SweeperCloudTaskUtils.sendCloudSubTaskConfirm(); + SweeperCloudTaskUtils.mockSendCloudSubTaskConfirm(); } } @@ -491,6 +491,10 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm.getNumber()); CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp" + printMessage(taskConfirmResp) + " reqNo:" + reqNo); getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp); + // TODO: 2023/5/8 模拟当云控收到pad子任务确认指令后。云控下发子任务状态更新指令 + if (code == SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM) { + SweeperCloudTaskUtils.mockSendCloudUpdateSubTaskStatus(); + } } /** diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/presenter/SweeperPresenter.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/presenter/SweeperPresenter.java index 7e17b8479e..6ad18c5369 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/presenter/SweeperPresenter.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/presenter/SweeperPresenter.java @@ -178,6 +178,7 @@ public class SweeperPresenter extends Presenter @Override public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, @NonNull SweeperCommon.TaskStatus subTaskStatus) { + ThreadUtils.runOnUiThread(()->mView.onSweeperUpdateSubTaskStatus(taskId,subTaskId,subTaskStatus)); } @Override diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt index 0d8de9ea3b..f1cdde806b 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/dialog/SweeperCloudLoadingDialog.kt @@ -35,7 +35,7 @@ class SweeperCloudLoadingDialog : BaseFloatDialog, LifecycleObserver { private fun startRotation() { objectAnimator = ObjectAnimator.ofFloat(mLoadingView, "rotation", 0f, 360f) objectAnimator?.let { - it.duration = 1500 + it.duration = 1000 it.repeatCount = -1 it.interpolator = LinearInterpolator() it.start() 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 69e04cd5d5..d82b6b00e7 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 @@ -13,20 +13,21 @@ import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask.MessageType 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.confirm.SweeperTaskConfirm.TaskConfirm +import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus object SweeperCloudTaskUtils { /** * 模拟云控发送任务给pad */ @JvmStatic - fun sendCloudTaskInfo(messageType: MessageType) { + fun mockSendCloudTaskInfo(messageType: MessageType) { val builder = TaskInfo.newBuilder() builder.sn = getDriverSn() builder.taskId = "10" builder.taskName = "烟台清扫车作业任务" builder.currentTime = System.currentTimeMillis() - builder.taskStartTime = 1682664162000 - builder.taskEndTime = 1682750562000 + builder.taskStartTime = 1683507615000 + builder.taskEndTime = 1683540015000 //第一个子任务 val subBuilder0 = SubTaskInfo.newBuilder() subBuilder0.subTaskId = "1" @@ -104,7 +105,7 @@ object SweeperCloudTaskUtils { * 模拟云控发送子任务开始确认信息 */ @JvmStatic - fun sendCloudSubTaskConfirm() { + fun mockSendCloudSubTaskConfirm() { val builder = TaskConfirm.newBuilder() builder.sn = getDriverSn() builder.taskId = "10" @@ -116,7 +117,23 @@ object SweeperCloudTaskUtils { ) }, 10000) } - + /** + * 模拟下发更新子任务状态指令 + */ + @JvmStatic + fun mockSendCloudUpdateSubTaskStatus() { + val builder = SweeperTaskStatus.TaskStatusPush.newBuilder() + builder.sn = getDriverSn() + builder.taskId = "10" + builder.subTaskId = "3" + builder.taskStatus = SweeperCommon.TaskStatus.RUNNING + ThreadUtils.runOnUiThreadDelayed({ + SweeperTaskModel.getInstance().onSweeperFutianCloudTaskStatus( + MessageType.CloudPushTaskStatus, "${System.currentTimeMillis()}", + System.currentTimeMillis(), builder.build() + ) + }, 10000) + } fun getDriverSn(): String? { return MoGoAiCloudClientConfig.getInstance().sn } diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SubTaskView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SubTaskView.kt index 79077550eb..97c60565bb 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SubTaskView.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SubTaskView.kt @@ -29,7 +29,7 @@ class SubTaskView : ConstraintLayout { /** * 设置子任务信息 */ - fun setData(taskInfo: SubTaskInfo, isLastTask: Boolean = false) { + fun setData(taskInfo: SubTaskInfo,isLastTask: Boolean = false) { tvSubTaskName.text = taskInfo.subTaskName tvSubTaskName.setTextColor(if (taskInfo.taskStatus==SweeperCommon.TaskStatus.RUNNING) Color.parseColor("#3BD2FF") else Color.parseColor("#FFFFFF")) if (taskInfo.taskModel.number == 1) {//人工驾驶子任务 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 69104f5738..0ebb28d761 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 @@ -39,24 +39,24 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { */ fun setData( subTaskBean: TaskInfo?, - currentPosition:Int=-1 + currentPosition: Int = -1 ) { subTaskBean?.apply { this@SweeperCurrentTaskInfoView.listTask = subListList tvTaskName.text = taskName - val calendar = DateTimeUtil.formatLongToCalendar(taskStartTime) - tvTaskTime.text = DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm) + val calendarStart = DateTimeUtil.formatLongToCalendar(taskStartTime) + val calendarEnd = DateTimeUtil.formatLongToCalendar(taskEndTime) + tvTaskTime.text = "${DateTimeUtil.formatCalendarToString(calendarStart, DateTimeUtil.HH_mm)}-${DateTimeUtil.formatCalendarToString(calendarEnd, DateTimeUtil.HH_mm)}" } listTask?.let { //特殊处理当前暂无执行中任务的情况 - var position=currentPosition - if (position==-1){ - position += 1 + if (currentPosition == -1) { setSubTaskState(false) - }else{ - setSubTaskState(it[position].taskStatus==TaskStatus.RUNNING) + setCurrentData(currentPosition + 1) + } else { + setSubTaskState(it[currentPosition].taskStatus == TaskStatus.RUNNING) + setCurrentData(currentPosition) } - setCurrentData(position) } } @@ -76,7 +76,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { /** * 填充数据 */ - private fun setCurrentData(currentPosition:Int) { + private fun setCurrentData(currentPosition: Int) { listTask?.let { if (it.size == 1) { preSubTask.setData(it[currentPosition], isLastTask = true) diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperWorkModeView.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperWorkModeView.kt index 46a46f24a2..04e3095b4c 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperWorkModeView.kt +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/view/SweeperWorkModeView.kt @@ -79,7 +79,7 @@ class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback { d(SceneConstant.M_SWEEPER + TAG, "SystemState operateState:"+operateState.code) } //清扫车暂未选择清扫模式或者任务类型是人工驾驶子任务,则暂无清扫模式 - if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType==1) { + if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType==1||taskType==-1) { setShowOrHideCleanSystemState(OperateStateEnum.NO_STATUS, cleanSystemState) } else { setShowOrHideCleanSystemState(OperateStateEnum.SUCCESS_STATUS, cleanSystemState) diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_current_task_info.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_current_task_info.xml index 16e989383f..9466b14dee 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_current_task_info.xml +++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_current_task_info.xml @@ -77,7 +77,7 @@ android:id="@+id/preSubTask" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/dp_50" + android:layout_marginTop="@dimen/dp_10" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/viewTaskInfoLine" /> diff --git a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_subtask_view.xml b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_subtask_view.xml index f0387cc42e..8b53adcf07 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_subtask_view.xml +++ b/OCH/sweeper/sweeper-cloud/src/main/res/layout/sweeper_subtask_view.xml @@ -43,7 +43,7 @@