From c271e96695440b11e44ad96bcd93a56d2243ee4f Mon Sep 17 00:00:00 2001 From: bxb Date: Sat, 11 Feb 2023 17:00:13 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=B8=85=E6=89=AB=E8=BD=A6]=E4=BA=BA=E5=B7=A5?= =?UTF-8?q?=E9=A9=BE=E9=A9=B6=E5=AD=90=E4=BB=BB=E5=8A=A1=E5=92=8C=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E4=BB=BB=E5=8A=A1=E5=BC=B9=E7=AA=97=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../och/sweeper/bean/SweeperSubTaskBean.kt | 5 +- .../sweeper/callback/ISweeperTaskCallback.kt | 8 +- .../fragment/BaseSweeperTabFragment.java | 27 +- .../och/sweeper/fragment/SweeperFragment.kt | 376 +++++++++++------- .../och/sweeper/model/SweeperTaskModel.java | 12 +- .../och/sweeper/net/ISweeperApiService.java | 1 - .../sweeper/presenter/SweeperPresenter.java | 129 +++--- .../com/mogo/och/sweeper/view/SubTaskView.kt | 12 +- .../res/layout/sweeper_current_task_info.xml | 4 +- .../main/res/layout/sweeper_subtask_view.xml | 15 +- 10 files changed, 360 insertions(+), 229 deletions(-) diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt index e211fa0edd..e311bcda7b 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/bean/SweeperSubTaskBean.kt @@ -3,9 +3,10 @@ package com.mogo.och.sweeper.bean /** * 子任务信息 */ -data class SweeperSubTaskBean(var taskId:Int?, +data class SweeperSubTaskBean(var taskId:Int=0, var taskName:String?, var taskStartTime:Long?, + var sort:Int=1, var subList:MutableList?) data class SubInfo( var taskId: Int = 0, @@ -13,6 +14,6 @@ data class SubInfo( var mileage: Int = 0, var taskStatus: Int,// 状态1未执行 2执行中 3结束 4跳过 var taskType: Int,//1自动驾驶 2人工驾驶 - var timeSpent: Long = 0, + var timeSpent: String, var sort: Int = 0, ) \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt index fb0976d5e8..ddde01606f 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/callback/ISweeperTaskCallback.kt @@ -2,6 +2,8 @@ package com.mogo.och.sweeper.callback import com.mogo.och.sweeper.bean.SweeperMainTaskBean import com.mogo.och.sweeper.bean.SweeperSubTaskBean +import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean +import com.mogo.och.sweeper.constant.SubTaskTypeEnum import com.mogo.och.sweeper.constant.TaskStatusEnum /** @@ -30,8 +32,8 @@ interface ISweeperTaskCallback { fun setMainTaskReset(isSuccess: Boolean) /** - * 空数据展示 - * @param type + * 获取子任务详情包括轨迹信息 */ - fun emptyDataUI(type: Int) + fun setSubTakDetail(subTaskDetailBean: SweeperSubTaskDetailBean,subTaskTypeEnum: SubTaskTypeEnum) + } \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java index e957b8b535..1837741692 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java @@ -7,10 +7,6 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.Group; -import androidx.fragment.app.FragmentTransaction; - import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.IView; import com.mogo.commons.mvp.MvpFragment; @@ -27,11 +23,16 @@ import com.mogo.map.listener.MogoMapListenerHandler; import com.mogo.map.marker.IMogoMarkerManager; import com.mogo.map.uicontroller.IMogoMapUIController; import com.mogo.map.uicontroller.VisualAngleMode; +import com.mogo.och.common.module.map.AmapNaviToDestinationModel; import com.mogo.och.sweeper.R; import com.mogo.och.sweeper.view.SweeperCurrentTaskInfoView; import com.mogo.och.sweeper.view.SweeperTrafficDataView; import com.mogo.och.sweeper.view.SweeperWorkModeView; +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.Group; +import androidx.fragment.app.FragmentTransaction; + /** * 网约车基础Fragment,主要负责布局通用界面,处理站点面板和通话面板互斥情况 *

@@ -331,32 +332,32 @@ public abstract class BaseSweeperTabFragment(), MenuPopWindow.OnMenuItemOnClickListener{ +class SweeperFragment : BaseSweeperTabFragment(), MenuPopWindow.OnMenuItemOnClickListener { private var mAdapter: TaskListAdapter? = null - private var mCurrentSubPosition: Int =0 //子任务下标 - private var mMainMutableList: MutableList?=null - private var mSubMutableList: MutableList?=null - private var mSubTaskBean: SweeperSubTaskBean?=null - private var mSubTaskType:SubTaskTypeEnum=SubTaskTypeEnum.AUTOPILOT_SUBTYPE //1:自动驾驶子任务 2:人工驾驶子任务 - private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates?=null - private var mIsLastSubTask=false //是否最后一个子任务 - private var mSubTaskId=-1//子任务id - private var mMainTask:SweeperMainTaskBean?=null + private var mCurrentSubPosition: Int = 0 //子任务下标 + private var mMainMutableList: MutableList? = null + private var mSubMutableList: MutableList? = null + private var mSubTaskBean: SweeperSubTaskBean? = null + private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE //1:自动驾驶子任务 2:人工驾驶子任务 + private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates? = null + private var mIsLastSubTask: Boolean = false //是否最后一个子任务 + private var mSubTaskId: Int = -1//子任务id + private var mSubTaskName: String? = null + private var mMainTask: SweeperMainTaskBean? = null + private var mLocation:MogoLocation?=null + private var mSubTaskDetailBean:SweeperSubTaskDetailBean?=null //当前经纬度 override fun getTagName(): String { @@ -41,38 +46,36 @@ class SweeperFragment : BaseSweeperTabFragment - mSubTaskBean= SweeperSubTaskBean(task.mainTaskId,task.mainTaskName,task.mainTaskStartTime,mSubMutableList) + mMainTask?.let { task -> + mCurrentSubPosition=0 + mSubTaskBean = SweeperSubTaskBean(task.mainTaskId, task.mainTaskName, task.mainTaskStartTime, 1, mSubMutableList) //获取当前子任务列表 - presenter?.getSubTaskList(task.mainTaskId,mSubTaskBean) + presenter?.getSubTaskList(task.mainTaskId, mSubTaskBean) } + //mock 数据 - setShowTaskListPanelView(false) - workModePanelView.visibility = View.VISIBLE - setShowCurrentTaskPanelView(true) - currentTaskPanelView.setData(workModePanelView,mSubTaskBean, mCurrentSubPosition,this,presenter) - workModePanelView.setSweeperFutianCleanSystemState(mSubTaskType,if(mCleanSystemState==null) SweeperFutianCmdUtil.buildSweeperFuTionCleanSystemStateMockData() else mCleanSystemState,trafficDataView) + setSubTaskData() + if (mSubTaskType == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE) {//如果是人工驾驶子任务,则弹窗 + manualDriving(null) + } else { + setShowTaskListPanelView(false) + workModePanelView.visibility = View.VISIBLE + setShowCurrentTaskPanelView(true) + currentTaskPanelView.setData(workModePanelView, mSubTaskBean, mCurrentSubPosition, this, presenter) + workModePanelView.setSweeperFutianCleanSystemState( + mSubTaskType, + if (mCleanSystemState == null) SweeperFutianCmdUtil.buildSweeperFuTionCleanSystemStateMockData() else mCleanSystemState, + trafficDataView + ) + } } } private val onTaskItemClickListener = object : TaskListAdapter.TaskItemClickListener { - override fun onItemClick(position: Int,mainTask:SweeperMainTaskBean) { + override fun onItemClick(position: Int, mainTask: SweeperMainTaskBean) { mAdapter?.selectPosition(position) tvTaskConfirm.isSelected = true - this@SweeperFragment.mMainTask=mainTask + this@SweeperFragment.mMainTask = mainTask } } @@ -140,13 +156,141 @@ class SweeperFragment : BaseSweeperTabFragment {//跳过任务 - presenter?.subTaskSkip(mSubTaskId,mIsLastSubTask) + presenter?.subTaskSkip(mSubTaskId, mIsLastSubTask) //mock + if (mSubTaskType == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE){//人工驾驶子任务 + showAmapNaviToStationFragment(false) + } mCurrentSubPosition++ - currentTaskPanelView.setData(workModePanelView,mSubTaskBean, mCurrentSubPosition,this,presenter) - + currentTaskPanelView.setData(workModePanelView, mSubTaskBean, mCurrentSubPosition, this@SweeperFragment, presenter) } TaskStatusEnum.END_TASK -> { + subTaskEnd() + } + } + } + + fun onSweeperFutianCleanSystemState(cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates) { + this.mCleanSystemState = cleanSystemState + workModePanelView.setSweeperFutianCleanSystemState(mSubTaskType, cleanSystemState, trafficDataView) + } + /** + * 设置当前主任务列表数据 + */ + fun setMainTaskList(mainTaskBeanList: MutableList?) { + setShowCurrentTaskPanelView(false) + setShowTaskListPanelView(true) + workModePanelView.visibility = View.GONE + if (mainTaskBeanList != null && mainTaskBeanList.isNotEmpty()) { + noTaskDataView.visibility = View.GONE + sweeperListCl.visibility = View.VISIBLE + mAdapter?.setTaskListData(mainTaskBeanList) + } else { + noTaskDataView.visibility = View.VISIBLE + sweeperListCl.visibility = View.GONE + } + } + + /** + * 设置当前子任务列表数据 + */ + fun setSubTaskBean(subTaskBean: SweeperSubTaskBean?) { + this.mSubTaskBean = subTaskBean + this.mSubTaskBean?.let { + setShowCurrentTaskPanelView(true) + setShowTaskListPanelView(false) + workModePanelView.visibility = View.VISIBLE + mCurrentSubPosition = it.sort - 1 + currentTaskPanelView.setData(workModePanelView, it, mCurrentSubPosition, this, presenter) + setSubTaskData() + presenter?.getSubTaskDetail(mSubTaskId, mSubTaskType)//加载子任务详情包括轨迹信息 + } + } + + /** + * 更新子任务状态 + */ + fun updateSubTaskStatus(typeEnum: TaskStatusEnum, isLastSubTask: Boolean) { + if (isLastSubTask) { + setShowCurrentTaskPanelView(false) + setShowTaskListPanelView(true) + return + } + when (typeEnum) { + TaskStatusEnum.END_SUBTASK -> {//子任务结束 + mCurrentSubPosition++ + setSubTaskData() + presenter?.getSubTaskDetail(mSubTaskId, mSubTaskType) + if (mSubTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//自动驾驶子任务 + presenter?.startTask(mSubTaskId, mSubTaskType) + } + } + TaskStatusEnum.JUMP_OVER_SUBTASK -> { //子任务跳过 + presenter?.subTaskEnd(mSubTaskId, mIsLastSubTask) + if (mSubTaskType == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE){//人工驾驶子任务 + showAmapNaviToStationFragment(false) + } + } + TaskStatusEnum.START_SUBTASK -> { //子任务开始 + if (mSubTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//自动驾驶子任务 + readyTaskBtn("暂停任务", true, true) + } + currentTaskPanelView.setCurrentData(mCurrentSubPosition) + } + } + + } + + /** + * 子任务信息详情,包括轨迹文件 + */ + fun setSubTakDetail(subTaskDetailBean: SweeperSubTaskDetailBean, subTaskTypeEnum: SubTaskTypeEnum) { + if (subTaskTypeEnum == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE) {//人工驾驶子任务 + this.mSubTaskDetailBean=subTaskDetailBean + manualDriving(subTaskDetailBean) + } + } + + /** + * 主任务重置 + */ + fun setMainTaskReset(isSuccess: Boolean) { + if (isSuccess) { + setShowCurrentTaskPanelView(false) + setShowTaskListPanelView(true) + workModePanelView.visibility = View.GONE + } + } + + /** + * 设置当前选中的子任务信息 + */ + private fun setSubTaskData() { + mSubMutableList?.let { + mSubTaskId = it[mCurrentSubPosition].taskId + mSubTaskName=it[mCurrentSubPosition].taskName + mSubTaskType = if (it[mCurrentSubPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) + SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE + //设置当前子任务id + presenter?.setSubTaskId(mSubTaskId) + //设置是否是最后一个子任务 + presenter?.setIsLastSubtask(mCurrentSubPosition==it.size-1) + } + } + + /** + * 跳过子任务 + */ + private fun subTaskEnd() { + //结束任务 + val builder = SweeperNoTitleCommonDialog.Builder() + val endConfirmDialog = builder + .tips("是否结束任务?") + .confirmStr("确认") + .cancelStr("取消") + .build(requireContext()) + endConfirmDialog?.setClickListener(object : SweeperNoTitleCommonDialog.ClickListener { + override fun confirm() { mMainTask?.let { presenter?.mainTaskReset(it.mainTaskId) } @@ -155,99 +299,53 @@ class SweeperFragment : BaseSweeperTabFragment?){ - setShowCurrentTaskPanelView(false) - setShowTaskListPanelView(true) - workModePanelView.visibility = View.GONE - if(mainTaskBeanList!=null&& mainTaskBeanList.isNotEmpty()){ - noTaskDataView.visibility=View.GONE - sweeperListCl.visibility=View.VISIBLE - mAdapter?.setTaskListData(mainTaskBeanList) - }else{ - noTaskDataView.visibility=View.VISIBLE - sweeperListCl.visibility=View.GONE - } - } - /** - * 设置当前子任务列表数据 - */ - fun setSubTaskBean(subTaskBean: SweeperSubTaskBean?){ - this.mSubTaskBean= subTaskBean - setShowCurrentTaskPanelView(true) - setShowTaskListPanelView(false) - workModePanelView.visibility = View.VISIBLE - currentTaskPanelView.setData(workModePanelView,mSubTaskBean, mCurrentSubPosition,this,presenter) - setSubTaskData() - } - /** - * 更新子任务状态 - */ - fun updateSubTaskStatus(typeEnum: TaskStatusEnum, isLastSubTask: Boolean){ - if (isLastSubTask){ - setShowCurrentTaskPanelView(false) - setShowTaskListPanelView(true) - return - } - when(typeEnum){ - TaskStatusEnum.END_SUBTASK->{//子任务结束 - mCurrentSubPosition++ - setSubTaskData() - presenter?.startTask(mSubTaskId,mSubTaskType) + override fun cancel() { + endConfirmDialog?.dismiss() } - TaskStatusEnum.JUMP_OVER_SUBTASK->{ //子任务跳过 - presenter?.subTaskEnd(mSubTaskId,mIsLastSubTask) - } - TaskStatusEnum.START_SUBTASK->{ //子任务开始 - if (mSubTaskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE){//自动驾驶子任务 - readyTaskBtn("暂停任务",true,true) - }else{//手动驾驶的子任务会弹窗 - - } - currentTaskPanelView.setCurrentData(mCurrentSubPosition) - } - } - - } - /** - * 主任务重置 - */ - fun setMainTaskReset(isSuccess: Boolean){ - if (isSuccess){ - setShowCurrentTaskPanelView(false) - setShowTaskListPanelView(true) - workModePanelView.visibility = View.GONE - } + }) + endConfirmDialog?.show() } /** - * 设置子任务数据 + * 人工驾驶子任务 */ - private fun setSubTaskData(){ - mSubMutableList?.let { - mSubTaskId=it[mCurrentSubPosition].taskId - mSubTaskType=if (it[mCurrentSubPosition].taskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) - SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE + private fun manualDriving(subTaskDetailBean: SweeperSubTaskDetailBean?) { + val builder = SweeperManualDrivingDialog.Builder() + val endConfirmDialog = builder + .tips("前方子任务惠新西街南口地铁站公交站手动驾驶至惠新西街南口地铁站公交站") + .confirmStr("确认") + .build(requireContext()) + endConfirmDialog?.setClickListener(object : SweeperManualDrivingDialog.ClickListener { + override fun confirm() { + presenter?.startTask(mSubTaskId, mSubTaskType) + showAmapNaviToStationFragment(true) + presenter?.startNaviToStation(true, 40.199247410363796, 116.73367125257714, 40.20070929640184, 116.73582650844378) + //mock + setShowTaskListPanelView(false) + workModePanelView.visibility = View.VISIBLE + setShowCurrentTaskPanelView(true) + currentTaskPanelView.setData(workModePanelView, mSubTaskBean, mCurrentSubPosition, this@SweeperFragment, presenter) + workModePanelView.setSweeperFutianCleanSystemState( + mSubTaskType, + if (mCleanSystemState == null) SweeperFutianCmdUtil.buildSweeperFuTionCleanSystemStateMockData() else mCleanSystemState, + trafficDataView + ) + } + }) + endConfirmDialog?.show() + } + /** + * 当前位置经纬度 + */ + fun setCurrentLocation(location: MogoLocation){ + this.mLocation=location + } + override fun refreshNavi(){ + mSubTaskDetailBean?.apply { + mLocation?.let { + presenter?.startNaviToStation(true, it.longitude, it.latitude, endSiteLon, endSiteLat) + } } } } \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java index 857c140d36..26c381015b 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java @@ -370,7 +370,7 @@ public class SweeperTaskModel { } /** - * 将业务订单信息保存,鹰眼可取用 + * 将轨迹文件信息同步到鹰眼 */ private void updateAutopilotControlParameters() { @@ -523,16 +523,18 @@ public class SweeperTaskModel { /** * 获取子任务详情包括轨迹文件信息 */ - public void getSubTaskDetail(int subTaskId) { + public void getSubTaskDetail(int subTaskId,SubTaskTypeEnum subTaskType) { SweeperServiceManager.getSubTaskDetail(subTaskId, mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { if (data != null) { currentSubTaskDetail = data.getData(); if (currentSubTaskDetail!=null){ - //向自动驾驶发送要下载文件轨迹路径 - SweeperTrajectoryManager.getInstance().syncTrajectoryInfo(currentSubTaskDetail); - updateAutopilotControlParameters(); + if (subTaskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE){//自动驾驶子任务 + //向自动驾驶发送要下载文件轨迹路径 + SweeperTrajectoryManager.getInstance().syncTrajectoryInfo(currentSubTaskDetail); + updateAutopilotControlParameters(); + } } } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java index 7101b93325..114641913b 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java @@ -49,7 +49,6 @@ public interface ISweeperApiService { */ @GET("/och-sweep/api/task/v1/subTaskList") Observable>> getSubTaskList(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("carSn") String sn, @Query("taskId") int taskId); - /** * 子任务详情 包括子任务轨迹信息 * @param appId diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java index 4800bc3c75..a793d97873 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java @@ -2,12 +2,10 @@ package com.mogo.och.sweeper.presenter; import android.os.Looper; -import com.elegant.network.utils.GsonUtil; +import com.amap.api.navi.model.NaviLatLng; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.Presenter; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; - import com.mogo.eagle.core.data.config.FunctionBuildConfig; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; @@ -15,12 +13,12 @@ import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCleanSystemL import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager; import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotStatusListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; -import com.mogo.och.common.module.utils.PinYinUtil; +import com.mogo.och.common.module.map.AmapNaviToDestinationModel; import com.mogo.och.sweeper.bean.SweeperMainTaskBean; import com.mogo.och.sweeper.bean.SweeperSubTaskBean; +import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean; import com.mogo.och.sweeper.callback.ISweeperADASStatusCallback; import com.mogo.och.sweeper.callback.ISweeperControllerStatusCallback; import com.mogo.och.sweeper.callback.ISweeperTaskCallback; @@ -49,20 +47,21 @@ import system_master.SystemStatusInfo; * @author tongchenfei */ public class SweeperPresenter extends Presenter - implements IMoGoAutopilotStatusListener, ISweeperControllerStatusCallback, ISweeperADASStatusCallback, IMoGoSweeperFutianCleanSystemListener, ISweeperTaskCallback { + implements IMoGoAutopilotStatusListener, ISweeperControllerStatusCallback, ISweeperADASStatusCallback, + IMoGoSweeperFutianCleanSystemListener, ISweeperTaskCallback { - private static final String TAG = "BusPresenter"; + private static final String TAG = "SweeperPresenter"; //当前子任务id - private int mSubTaskId=0; + private int mSubTaskId = 0; //当前是否最后一个子任务 - private boolean mIsLastSubtask=false; + private boolean mIsLastSubtask = false; public SweeperPresenter(SweeperFragment view) { super(view); //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); //清扫车模式和贴边数据回调监听 - CallerSweeperFutianCleanSystemListenerManager.INSTANCE.addListener(TAG,this); + CallerSweeperFutianCleanSystemListenerManager.INSTANCE.addListener(TAG, this); SweeperTaskModel.getInstance().init(); OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()); } @@ -92,48 +91,49 @@ public class SweeperPresenter extends Presenter SweeperTaskModel.getInstance().setSweeperTaskCallback(null); CallerSweeperFutianCleanSystemListenerManager.INSTANCE.removeListener(TAG); } + @Override public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { if (autopilotStatusInfo == null) return; - switch (autopilotStatusInfo.getState()){ + switch (autopilotStatusInfo.getState()) { case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶 - runOnUIThread(() -> mView.readyTaskBtn("准备出发",false,false)); + runOnUIThread(() -> mView.readyTaskBtn("准备出发", false, false)); break; case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶 - if (SweeperTaskModel.getInstance().getSubWorking()){ - if(FunctionBuildConfig.isDemoMode){//美化模式开启时 + if (SweeperTaskModel.getInstance().getSubWorking()) { + if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 SweeperTaskModel.getInstance().startBeautificationMode(); } - }else{ - if (FunctionBuildConfig.isDemoMode){//美化模式开启时 + } else { + if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 //关闭美化模式 SweeperTaskModel.getInstance().closeBeautificationMode(); } } - runOnUIThread(() -> mView.readyTaskBtn("准备出发",true,false)); + runOnUIThread(() -> mView.readyTaskBtn("准备出发", true, false)); break; case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中 - if (SweeperTaskModel.getInstance().getSubWorking()){ - if (FunctionBuildConfig.isDemoMode){//美化模式开启时 + if (SweeperTaskModel.getInstance().getSubWorking()) { + if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 SweeperTaskModel.getInstance().startBeautificationMode(); } - runOnUIThread(() -> mView.readyTaskBtn("暂停任务",true,true)); - }else{ - runOnUIThread(() -> mView.readyTaskBtn("准备出发",true,false)); + runOnUIThread(() -> mView.readyTaskBtn("暂停任务", true, true)); + } else { + runOnUIThread(() -> mView.readyTaskBtn("准备出发", true, false)); } case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶 - if (SweeperTaskModel.getInstance().getSubWorking()){ - if(FunctionBuildConfig.isDemoMode){//美化模式开启时 + if (SweeperTaskModel.getInstance().getSubWorking()) { + if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true;//是否强制绘制引导线 CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾 } - }else{ - if (FunctionBuildConfig.isDemoMode){//美化模式开启时 + } else { + if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 //关闭美化模式 SweeperTaskModel.getInstance().closeBeautificationMode(); } } - runOnUIThread(() -> mView.readyTaskBtn("准备出发",true,false)); + runOnUIThread(() -> mView.readyTaskBtn("准备出发", true, false)); break; default: break; @@ -149,24 +149,30 @@ public class SweeperPresenter extends Presenter public void onCarLocationChanged(MogoLocation location) { if (null != location) { runOnUIThread(() -> mView.updateSpeedView((float) location.getGnssSpeed())); + runOnUIThread(() -> mView.setCurrentLocation(location)); } } - public void cancelAutoPilot(){ + + public void cancelAutoPilot() { //结束自动驾驶 CallerAutoPilotControlManager.INSTANCE.cancelAutoPilot(); } + @Override public void startOpenAutopilot() { } + public void setSubTaskId(int mSubTaskId) { this.mSubTaskId = mSubTaskId; SweeperTaskModel.getInstance().setSubTaskId(mSubTaskId); } + public void setIsLastSubtask(boolean mIsLastSubtask) { this.mIsLastSubtask = mIsLastSubtask; SweeperTaskModel.getInstance().setIsLastSubtask(mIsLastSubtask); } + private void runOnUIThread(Runnable executor) { if (executor == null) { return; @@ -177,6 +183,7 @@ public class SweeperPresenter extends Presenter executor.run(); } } + /** * 测试使用 * @@ -219,29 +226,33 @@ public class SweeperPresenter extends Presenter @Override public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) { - runOnUIThread(() ->mView.onSweeperFutianCleanSystemState(cleanSystemState)); + runOnUIThread(() -> mView.onSweeperFutianCleanSystemState(cleanSystemState)); } + @Override public void onSweeperFutianTaskIndexData(@NonNull RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) { } + /** * 获取当前正在执行的任务 */ - public void getCurrentTask(){ + public void getCurrentTask() { SweeperTaskModel.getInstance().getCurrentTask(); } + /** * 获取子任务列表 */ - public void getSubTaskList(int taskId,SweeperSubTaskBean sweeperSubTaskBean){ - SweeperTaskModel.getInstance().getSubTaskList(taskId,sweeperSubTaskBean); + public void getSubTaskList(int taskId, SweeperSubTaskBean sweeperSubTaskBean) { + SweeperTaskModel.getInstance().getSubTaskList(taskId, sweeperSubTaskBean); } + /** * 获取子任务详情包括轨迹文件信息 */ - public void getSubTaskDetail(int subTaskId){ - SweeperTaskModel.getInstance().getSubTaskDetail(subTaskId); + public void getSubTaskDetail(int subTaskId, SubTaskTypeEnum subTaskType) { + SweeperTaskModel.getInstance().getSubTaskDetail(subTaskId, subTaskType); } /** * 子任务开始上报 @@ -249,11 +260,11 @@ public class SweeperPresenter extends Presenter /** * 开始任务 */ - public void startTask(int subTaskId,SubTaskTypeEnum subTaskType){ - if (SweeperTaskModel.getInstance().getSubWorking()&&subTaskType==SubTaskTypeEnum.AUTOPILOT_SUBTYPE){//如果任务正在执行中,被人工接管后掉出自驾,则只重启自动驾驶 + public void startTask(int subTaskId, SubTaskTypeEnum subTaskType) { + if (SweeperTaskModel.getInstance().getSubWorking() && subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//如果任务正在执行中,被人工接管后掉出自驾,则只重启自动驾驶 SweeperTaskModel.getInstance().startAutopilot(); - }else{ - SweeperTaskModel.getInstance().subTaskStart(subTaskId,subTaskType); + } else { + SweeperTaskModel.getInstance().subTaskStart(subTaskId, subTaskType); } // AutopilotControlParameters parameters = new AutopilotControlParameters(); // parameters.isSpeakVoice = true; @@ -286,22 +297,25 @@ public class SweeperPresenter extends Presenter // CallerLogger.INSTANCE.d( M_BUS + TAG, "开启自动驾驶====" + GsonUtil.jsonFromObject(parameters)); // CallerAutoPilotControlManager.INSTANCE.startAutoPilot(parameters); } + /** * 子任务结束上报 */ - public void subTaskEnd(int subTaskId,boolean isLastSubTask){ - SweeperTaskModel.getInstance().subTaskEnd(subTaskId,isLastSubTask); + public void subTaskEnd(int subTaskId, boolean isLastSubTask) { + SweeperTaskModel.getInstance().subTaskEnd(subTaskId, isLastSubTask); } + /** * 子任务跳过上报 */ - public void subTaskSkip(int subTaskId,boolean isLastSubTask){ - SweeperTaskModel.getInstance().subTaskSkip(subTaskId,isLastSubTask); + public void subTaskSkip(int subTaskId, boolean isLastSubTask) { + SweeperTaskModel.getInstance().subTaskSkip(subTaskId, isLastSubTask); } + /** * 主任务重置 */ - public void mainTaskReset(int taskId){ + public void mainTaskReset(int taskId) { SweeperTaskModel.getInstance().mainTaskReset(taskId); } @@ -316,14 +330,14 @@ public class SweeperPresenter extends Presenter } @Override - public void updateSubTaskStatus(TaskStatusEnum typeEnum,boolean isLastSubTask) { - if (isLastSubTask){ - if(FunctionBuildConfig.isDemoMode){//美化模式开启时 - SweeperTaskModel.getInstance().closeBeautificationMode(); - } - cancelAutoPilot(); - } - mView.updateSubTaskStatus(typeEnum,isLastSubTask); + public void updateSubTaskStatus(TaskStatusEnum typeEnum, boolean isLastSubTask) { + if (isLastSubTask) { + if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 + SweeperTaskModel.getInstance().closeBeautificationMode(); + } + cancelAutoPilot(); + } + mView.updateSubTaskStatus(typeEnum, isLastSubTask); } @Override @@ -332,7 +346,18 @@ public class SweeperPresenter extends Presenter } @Override - public void emptyDataUI(int type) { + public void setSubTakDetail(@NonNull SweeperSubTaskDetailBean subTaskDetailBean, SubTaskTypeEnum subTaskTypeEnum) { + mView.setSubTakDetail(subTaskDetailBean, subTaskTypeEnum); + } + /** + * 导航去目的地 + */ + public void startNaviToStation(Boolean isVoicePlay, double startLat, double startLng, double endLat, double endLng) { + AmapNaviToDestinationModel.getInstance(getContext()).destroyAmaNavi(); + NaviLatLng startNaviLatLng = new NaviLatLng(startLat, startLng); + NaviLatLng endNaviLatLng = new NaviLatLng(endLat, endLng); + AmapNaviToDestinationModel.getInstance(getContext()).initAMapNavi(startNaviLatLng, endNaviLatLng); + AmapNaviToDestinationModel.getInstance(getContext()).setVoiceIsMute(isVoicePlay); } } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt index 1238c6ad23..ac6fce4fbb 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SubTaskView.kt @@ -38,12 +38,12 @@ class SubTaskView : ConstraintLayout { } else { "${taskInfo.mileage / 1000F}千米" } - var timeSpent=if(DateTimeUtil.secondsToHourStr(taskInfo.timeSpent)!=""){ - "${DateTimeUtil.secondsToHourStr(taskInfo.timeSpent/1000)}小时${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟" - }else{ - "${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟" - } - tvSubTaskDesc.text = "全程约${mileage},预计耗时$timeSpent 分钟" +// var timeSpent=if(DateTimeUtil.secondsToHourStr(taskInfo.timeSpent)!=""){ +// "${DateTimeUtil.secondsToHourStr(taskInfo.timeSpent/1000)}小时${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟" +// }else{ +// "${DateTimeUtil.secondsToMinuteStr(taskInfo.timeSpent/1000)}分钟" +// } + tvSubTaskDesc.text = "全程约${mileage},预计耗时${taskInfo.timeSpent}" tvSubTaskName.setTextColor(if (isSelect) Color.parseColor("#3BD2FF") else Color.parseColor("#FFFFFF")) if (isSelect) { ivSubTaskSelect.visibility = View.VISIBLE diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_current_task_info.xml b/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_current_task_info.xml index 16fab11c8b..9a10f4f0d3 100644 --- a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_current_task_info.xml +++ b/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_current_task_info.xml @@ -1,6 +1,6 @@ @@ -13,7 +13,7 @@ android:textSize="@dimen/dp_38" android:textColor="@color/white" android:layout_marginTop="@dimen/dp_21" - android:text="任务AAAAAAA" + android:text="惠新西街南口地铁站公交站" android:layout_marginStart="@dimen/dp_28" />