diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/BaseResponse.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/BaseResponse.java deleted file mode 100644 index 9e02972ef3..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/BaseResponse.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.mogo.och.sweepercloud.bean; - -import com.mogo.eagle.core.data.BaseData; - -public class BaseResponse extends BaseData { - private T data; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } -} diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SubStartRequest.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SubStartRequest.kt deleted file mode 100644 index 8487c1babe..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SubStartRequest.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.mogo.och.sweepercloud.bean - -import com.mogo.cloud.passport.MoGoAiCloudClientConfig - -data class SubStartRequest( - var carSn:String=MoGoAiCloudClientConfig.getInstance().sn, - var taskId:Int, - var startTime:Long, - var isFirst:Boolean, - var isEnd:Boolean - ) \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperMainTaskBean.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperMainTaskBean.kt deleted file mode 100644 index edc6a83a83..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperMainTaskBean.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.mogo.och.sweepercloud.bean - -/** - * - * 清扫车任务信息 - * - * @author tongchenfei - */ -data class SweeperMainTaskBean( - var mainTaskId:Int = 0, - var mainTaskName: String? = null, - var subTaskTotal:Int = 0, - var mainTaskStartTime: Long = 0 - ) \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperSubTaskBean.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperSubTaskBean.kt deleted file mode 100644 index 5340bd1dfa..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperSubTaskBean.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.mogo.och.sweepercloud.bean - -/** - * 子任务信息 - */ -data class SweeperSubTaskBean( - var taskId: Int = 0, - var taskName: String?, - var taskStartTime: Long = 0, - var sort: Int = 1, - var subList: MutableList? -) - -data class SubInfo( - var taskId: Int = 0, - var taskName: String?, - var mileage: Int = 0, - var taskStatus: Int,// 状态1未执行 2执行中 3结束 4跳过 - var taskType: Int,//1自动驾驶 2人工驾驶 - var timeSpent: String, - var startSiteName: String,//起点名称 - var startWgs84Lon: Double,//起点经度 - var startWgs84Lat: Double,//起点纬度 - var endSiteName: String,//终点名称 - var endWgs84Lon: Double,//终点经度 - var endWgs84Lat: Double,//终点纬度 - var sort: Int = 0, -) \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperSubTaskDetailBean.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperSubTaskDetailBean.java deleted file mode 100644 index 1240ea1eb0..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/bean/SweeperSubTaskDetailBean.java +++ /dev/null @@ -1,314 +0,0 @@ -package com.mogo.och.sweepercloud.bean; - -public class SweeperSubTaskDetailBean { - private int id; //子任务id - private int lineId; //线路id - private String lineName;//线路名称 - private int sort; - private int status; - private int startSiteId; //子任务起点id - private String startSiteName; //子任务起点名称 - private double startSiteLon; //子任务起点高德经度 - private double startSiteLat; //子任务起点高德纬度 - private double startSiteWgs64Lon;//子任务起点高精经度 - private double startSiteWgs64Lat;//子任务起点高精纬度 - private int endSiteId;//子任务终点id - private String endSiteName;//子任务终点名称 - private double endSiteLon; //子任务终点高德经度 - private double endSiteLat;//子任务终点高德纬度 - private double endSiteWgs64Lon;//子任务终点高精经度 - private double endSiteWgs64Lat;//子任务终点高精纬度 - private String brand; //品牌 - private String carModel; //车辆型号 - private String csvFileUrl = ""; //轨迹文件csv文件url地址 - private String csvFileMd5 = ""; //轨迹文件csv md5 - private String csvFileName = "";//轨迹文件cvs名称 - private String txtFileUrl = ""; //轨迹文件txt url地址 - private String txtFileMd5 = ""; //轨迹文件txt md5 - private String txtFileName; //轨迹文件txt名称 - private long publishTime; - private String contrailFileType; //轨迹文件类型 - private String publishStatus;//发布状态 1发布 2未发布 3 发布中 - private String csvFileUrlDPQP = ""; //轨迹文件下载的cos url,默认“” - private String csvFileMd5DPQP = ""; //轨迹文件md5,默认“” - private String txtFileUrlDPQP = ""; //打点文件下载的cos url,默认“” - private String txtFileMd5DPQP = ""; //轨迹文件md5,默认“” - private long publishTimeDPQP; //上传轨迹完成时间戳ms:用于MEC本地手动导入轨迹验证时不会被云端轨迹覆盖 - private long taskCreateTime; - private String brandDPQP; - private String carModelDPQP; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public int getLineId() { - return lineId; - } - - public void setLineId(int lineId) { - this.lineId = lineId; - } - - public String getLineName() { - return lineName; - } - - public void setLineName(String lineName) { - this.lineName = lineName; - } - - public int getSort() { - return sort; - } - - public void setSort(int sort) { - this.sort = sort; - } - - public int getStatus() { - return status; - } - - public void setStatus(int status) { - this.status = status; - } - - public int getStartSiteId() { - return startSiteId; - } - - public void setStartSiteId(int startSiteId) { - this.startSiteId = startSiteId; - } - - public String getStartSiteName() { - return startSiteName; - } - - public void setStartSiteName(String startSiteName) { - this.startSiteName = startSiteName; - } - - public double getStartSiteLon() { - return startSiteLon; - } - - public void setStartSiteLon(double startSiteLon) { - this.startSiteLon = startSiteLon; - } - - public double getStartSiteLat() { - return startSiteLat; - } - - public void setStartSiteLat(double startSiteLat) { - this.startSiteLat = startSiteLat; - } - - public double getStartSiteWgs64Lon() { - return startSiteWgs64Lon; - } - - public void setStartSiteWgs64Lon(double startSiteWgs64Lon) { - this.startSiteWgs64Lon = startSiteWgs64Lon; - } - - public double getStartSiteWgs64Lat() { - return startSiteWgs64Lat; - } - - public void setStartSiteWgs64Lat(double startSiteWgs64Lat) { - this.startSiteWgs64Lat = startSiteWgs64Lat; - } - - public int getEndSiteId() { - return endSiteId; - } - - public void setEndSiteId(int endSiteId) { - this.endSiteId = endSiteId; - } - - public String getEndSiteName() { - return endSiteName; - } - - public void setEndSiteName(String endSiteName) { - this.endSiteName = endSiteName; - } - - public double getEndSiteLon() { - return endSiteLon; - } - - public void setEndSiteLon(double endSiteLon) { - this.endSiteLon = endSiteLon; - } - - public double getEndSiteLat() { - return endSiteLat; - } - - public void setEndSiteLat(double endSiteLat) { - this.endSiteLat = endSiteLat; - } - - public double getEndSiteWgs64Lon() { - return endSiteWgs64Lon; - } - - public void setEndSiteWgs64Lon(double endSiteWgs64Lon) { - this.endSiteWgs64Lon = endSiteWgs64Lon; - } - - public double getEndSiteWgs64Lat() { - return endSiteWgs64Lat; - } - - public void setEndSiteWgs64Lat(double endSiteWgs64Lat) { - this.endSiteWgs64Lat = endSiteWgs64Lat; - } - - public long getTaskCreateTime() { - return taskCreateTime; - } - - public void setTaskCreateTime(long taskCreateTime) { - this.taskCreateTime = taskCreateTime; - } - - public String getBrand() { - return brand; - } - - public void setBrand(String brand) { - this.brand = brand; - } - - public String getCarModel() { - return carModel; - } - - public void setCarModel(String carModel) { - this.carModel = carModel; - } - - public String getCsvFileUrl() { - return csvFileUrl; - } - - public void setCsvFileUrl(String csvFileUrl) { - this.csvFileUrl = csvFileUrl; - } - - public String getCsvFileMd5() { - return csvFileMd5; - } - - public void setCsvFileMd5(String csvFileMd5) { - this.csvFileMd5 = csvFileMd5; - } - - public String getCsvFileName() { - return csvFileName; - } - - public void setCsvFileName(String csvFileName) { - this.csvFileName = csvFileName; - } - - public String getTxtFileUrl() { - return txtFileUrl; - } - - public void setTxtFileUrl(String txtFileUrl) { - this.txtFileUrl = txtFileUrl; - } - - public String getTxtFileMd5() { - return txtFileMd5; - } - - public void setTxtFileMd5(String txtFileMd5) { - this.txtFileMd5 = txtFileMd5; - } - - public String getTxtFileName() { - return txtFileName; - } - - public void setTxtFileName(String txtFileName) { - this.txtFileName = txtFileName; - } - - public long getPublishTime() { - return publishTime; - } - - public void setPublishTime(long publishTime) { - this.publishTime = publishTime; - } - - public String getBrandDPQP() { - return brandDPQP; - } - - public void setBrandDPQP(String brandDPQP) { - this.brandDPQP = brandDPQP; - } - - public String getCarModelDPQP() { - return carModelDPQP; - } - - public void setCarModelDPQP(String carModelDPQP) { - this.carModelDPQP = carModelDPQP; - } - - public String getCsvFileUrlDPQP() { - return csvFileUrlDPQP; - } - - public void setCsvFileUrlDPQP(String csvFileUrlDPQP) { - this.csvFileUrlDPQP = csvFileUrlDPQP; - } - - public String getCsvFileMd5DPQP() { - return csvFileMd5DPQP; - } - - public void setCsvFileMd5DPQP(String csvFileMd5DPQP) { - this.csvFileMd5DPQP = csvFileMd5DPQP; - } - - public String getTxtFileUrlDPQP() { - return txtFileUrlDPQP; - } - - public void setTxtFileUrlDPQP(String txtFileUrlDPQP) { - this.txtFileUrlDPQP = txtFileUrlDPQP; - } - - public String getTxtFileMd5DPQP() { - return txtFileMd5DPQP; - } - - public void setTxtFileMd5DPQP(String txtFileMd5DPQP) { - this.txtFileMd5DPQP = txtFileMd5DPQP; - } - - public long getPublishTimeDPQP() { - return publishTimeDPQP; - } - - public void setPublishTimeDPQP(long publishTimeDPQP) { - this.publishTimeDPQP = publishTimeDPQP; - } - - -} 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 new file mode 100644 index 0000000000..e8e16da350 --- /dev/null +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperCloudTaskCallback.kt @@ -0,0 +1,46 @@ +package com.mogo.och.sweepercloud.callback + +import chassis.ChassisStatesOuterClass +import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean +import com.mogo.och.sweepercloud.database.bean.WeltDataBean +import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask +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.stop.SweeperTaskStop.StopTaskType + +/** + * @author: wangmingjun + * @date: 2021/10/22 + */ +interface ISweeperCloudTaskCallback { + + fun onSweeperCloudTask(messageType: SweeperCloudTask.MessageType,taskInfo: SweeperTask.TaskInfo) + + 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) + + fun onSweeperCloudBootable(taskId:String,subTaskId:String,code:Code) + + fun onSweeperCloudBigTaskStatus(taskId:String,subTaskStatus: SweeperBigTaskStatus.BigTaskStatus) + /** + * 设置轨迹坐标点集合 + */ + fun setRouteList(routeList: java.util.ArrayList) + /** + * 贴边数据回传 + */ + fun setWeltDataToMap(weltDataBeans: ArrayList, isWeltData: Boolean, distance: String) + + /** + * 底盘清扫模式数据回传 + */ + fun onSweeperFutianCleanSystemState(cleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates) + +} \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperTaskCallback.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperTaskCallback.kt deleted file mode 100644 index 63f668fa28..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/callback/ISweeperTaskCallback.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.mogo.och.sweepercloud.callback - -import com.mogo.och.sweepercloud.bean.SweeperMainTaskBean -import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean -import com.mogo.och.sweepercloud.bean.SweeperSubTaskBean -import com.mogo.och.sweepercloud.bean.SweeperSubTaskDetailBean -import com.mogo.och.sweepercloud.constant.SubTaskTypeEnum -import com.mogo.och.sweepercloud.constant.TaskStatusEnum -import java.util.ArrayList - -/** - * @author: wangmingjun - * @date: 2021/10/22 - */ -interface ISweeperTaskCallback { - /** - * 获取主任务列表 - */ - fun setMainTaskList(mainTaskBeanList: MutableList?,refresh:Boolean) - - /** - * 获取子任务列表 - */ - fun setSubTaskBean(subTaskBean: SweeperSubTaskBean,isWorkingSubTask:Boolean) - - /** - * 更新子任务状态 - */ - fun updateSubTaskStatus(typeEnum: TaskStatusEnum, isLastSubTask: Boolean) - - /** - * 主任务重置 - */ - fun setMainTaskReset(isSuccess: Boolean) - - /** - * 获取子任务详情包括轨迹信息 - */ - fun setSubTakDetail(subTaskDetailBean: SweeperSubTaskDetailBean, subTaskTypeEnum: SubTaskTypeEnum) - - /** - * 设置轨迹坐标点集合 - */ - fun setRouteList(routeList: ArrayList) - -} \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/constant/SubTaskTypeEnum.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/constant/SubTaskTypeEnum.kt deleted file mode 100644 index fce396e38c..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/constant/SubTaskTypeEnum.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.mogo.och.sweepercloud.constant - -/** - * 任务类型 - */ -enum class SubTaskTypeEnum(val code: Int) { - AUTOPILOT_SUBTYPE(1),//自动驾驶子任务 - MANUAL_DRIVING_SUBTYPE(2),//人工驾驶 -} \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/constant/TaskStatusEnum.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/constant/TaskStatusEnum.kt deleted file mode 100644 index 9b9db6583a..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/constant/TaskStatusEnum.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.mogo.och.sweepercloud.constant - -/** - * 当前任务操作菜单 - */ -enum class TaskStatusEnum(val code: Int) { - JUMP_OVER_SUBTASK( 1),//跳过子任务 - END_TASK( 2),//结束主任务 - CANCEL_TASK( 3),//取消 - START_SUBTASK(4),//开始子任务 - END_SUBTASK(5),//结束子任务 -} \ No newline at end of file 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 bad47aee4d..e8c4578a19 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 @@ -5,18 +5,13 @@ import android.view.View import androidx.lifecycle.lifecycleScope import chassis.ChassisStatesOuterClass import com.amap.api.maps.model.LatLng -import com.mogo.commons.AbsMogoApplication import com.mogo.eagle.core.data.map.MogoLocation import com.mogo.eagle.core.utilcode.util.ToastUtils -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil import com.mogo.och.sweepercloud.R -import com.mogo.och.sweepercloud.bean.SubInfo -import com.mogo.och.sweepercloud.bean.SweeperMainTaskBean import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean -import com.mogo.och.sweepercloud.bean.SweeperSubTaskBean -import com.mogo.och.sweepercloud.constant.SubTaskTypeEnum import com.mogo.och.sweepercloud.presenter.SweeperPresenter import com.mogo.och.sweepercloud.ui.dialog.SweeperCloudDialog +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo import kotlinx.android.synthetic.main.fragment_och_sweeper.* import kotlinx.android.synthetic.main.sweeper_no_data_common_view.* import kotlinx.coroutines.Dispatchers @@ -31,13 +26,10 @@ class SweeperFragment : BaseSweeperTabFragment? = null - private var mSubTaskBean: SweeperSubTaskBean? = null - private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE //1:自动驾驶子任务 2:人工驾驶子任务 + private var mSubMutableList: MutableList? = null private var mCleanSystemState: ChassisStatesOuterClass.SweeperFuTianTaskSystemStates? = null - private var mMainTask: SweeperMainTaskBean? = null private var mLocation: MogoLocation? = null - private var mSubInfo: SubInfo? = null + private var mSubTaskType:Int=0 //0:自动驾驶子任务 1:人工驾驶子任务 override fun getTagName(): String { return "SweepersFragment" @@ -144,46 +136,33 @@ class SweeperFragment : BaseSweeperTabFragment() for (index in subList.indices) { - val startPoint = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj( - AbsMogoApplication.getApp(), - subList[index].startWgs84Lon, - subList[index].startWgs84Lat - ) - val startLatLng = LatLng(startPoint.latitude, startPoint.longitude) + val startLocation=subList[index].startLocation + val startLatLng = LatLng(startLocation.latitude, startLocation.longitude) dataList.add(index, startLatLng) - val endPoint = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj( - AbsMogoApplication.getApp(), - subList[index].endWgs84Lon, - subList[index].endWgs84Lat - ) - val endLatLng = LatLng(endPoint.latitude, endPoint.longitude) + val endLocation=subList[index].endLocation + val endLatLng = LatLng(endLocation.latitude, endLocation.longitude) dataList.add(index + 1, endLatLng) } setTaskListCoordinatesLatLng(dataList) - setEndStationMarker() + setEndStationMarker(subList) } } } - private fun setEndStationMarker() { - lifecycleScope.launch(Dispatchers.IO) { - mSubInfo?.let { - val endPoint = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj( - AbsMogoApplication.getApp(), - it.endWgs84Lon, - it.endWgs84Lat - ) - super.mCurrentTaskEndStation = endPoint - setCurrentTaskEndMarker(endPoint) - } - } + /** + * 设置当前子任务终点 + */ + private fun setEndStationMarker(subList:MutableList) { + val endPoint= subList[mCurrentSubPosition].endLocation + val endLatLng = LatLng(endPoint.latitude, endPoint.longitude) + super.mCurrentTaskEndStation = endLatLng + setCurrentTaskEndMarker(endLatLng) } //模拟结束子任务 override fun debugEndSubTask() { - mPresenter?.onArriveTaskEnd(null) - //super.debugEndSubTask() + super.debugEndSubTask() } /** diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java index 44f5afacd1..fb3aa1dedb 100644 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java +++ b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/model/SweeperTaskModel.java @@ -1,75 +1,66 @@ package com.mogo.och.sweepercloud.model; -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER; - import android.content.Context; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import com.amap.api.maps.model.LatLng; -import com.elegant.network.utils.GsonUtil; -import com.mogo.aicloud.services.socket.IMogoOnMessageListener; +import com.mogo.cloud.passport.MoGoAiCloudClientConfig; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.module.status.IMogoStatusChangedListener; import com.mogo.commons.module.status.MogoStatusManager; import com.mogo.commons.module.status.StatusDescriptor; -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.eagle.core.data.config.FunctionBuildConfig; +import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; import com.mogo.eagle.core.data.map.MogoLocation; import com.mogo.eagle.core.function.api.autopilot.IMoGoAutopilotStatusListener; import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisLocationGCJ02Listener; import com.mogo.eagle.core.function.api.autopilot.IMoGoPlanningRottingListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCleanSystemListener; +import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCloudTaskListener; 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.CallerChassisLocationGCJ02ListenerManager; import com.mogo.eagle.core.function.call.autopilot.CallerPlanningRottingListenerManager; +import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSystemListenerManager; +import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCloudTaskListenerManager; +import com.mogo.eagle.core.network.utils.GsonUtil; import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.CoordinateUtils; -import com.mogo.eagle.core.utilcode.util.NetworkUtils; -import com.mogo.eagle.core.utilcode.util.ToastUtils; -import com.mogo.och.common.module.biz.common.socketmessage.OCHSocketMessageManager; -import com.mogo.och.common.module.biz.common.socketmessage.data.OCHOperationalMessage; -import com.mogo.och.common.module.biz.network.OchCommonServiceCallback; -import com.mogo.och.common.module.callback.OchAdasStartFailureCallback; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.common.module.utils.NumberFormatUtil; -import com.mogo.och.common.module.utils.PinYinUtil; -import com.mogo.och.common.module.utils.ToastUtilsOch; -import com.mogo.och.common.module.voice.VoiceNotice; -import com.mogo.och.sweepercloud.R; -import com.mogo.och.sweepercloud.bean.BaseResponse; -import com.mogo.och.sweepercloud.bean.SubInfo; -import com.mogo.och.sweepercloud.bean.SweeperMainTaskBean; import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean; -import com.mogo.och.sweepercloud.bean.SweeperSubTaskBean; -import com.mogo.och.sweepercloud.bean.SweeperSubTaskDetailBean; -import com.mogo.och.sweepercloud.callback.ISweeperADASStatusCallback; import com.mogo.och.sweepercloud.callback.ISweeperControllerStatusCallback; -import com.mogo.och.sweepercloud.callback.ISweeperTaskCallback; -import com.mogo.och.sweepercloud.constant.SubTaskTypeEnum; +import com.mogo.och.sweepercloud.callback.ISweeperCloudTaskCallback; import com.mogo.och.sweepercloud.constant.SweeperConst; -import com.mogo.och.sweepercloud.constant.TaskStatusEnum; -import com.mogo.och.sweepercloud.net.SweeperServiceManager; -import com.mogo.och.sweepercloud.util.SweeperAnalyticsManager; -import com.mogo.och.sweepercloud.util.SweeperTrajectoryManager; -import com.mogo.och.sweepercloud.bean.SubInfo; -import com.mogo.och.sweepercloud.bean.SweeperSubTaskBean; -import com.mogo.och.sweepercloud.util.SweeperAnalyticsManager; -import com.mogo.och.sweepercloud.util.SweeperTrajectoryManager; - -import org.jetbrains.annotations.NotNull; +import com.mogo.och.sweepercloud.database.MyDataBase; +import com.mogo.och.sweepercloud.database.bean.WeltDataBean; +import com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil; +import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask; +import com.zhjt.mogo.adas.data.sweeper.bootable.SweeperBootable; +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask; +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTaskSuspendResume; +import com.zhjt.mogo.adas.data.sweeper.task.big.SweeperBigTaskStatus; +import com.zhjt.mogo.adas.data.sweeper.task.confirm.SweeperTaskConfirm; +import com.zhjt.mogo.adas.data.sweeper.task.status.SweeperTaskStatus; +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop; import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import chassis.ChassisStatesOuterClass; import io.reactivex.exceptions.UndeliverableException; import io.reactivex.functions.Consumer; import io.reactivex.plugins.RxJavaPlugins; import mogo.telematics.pad.MessagePad; +import mogo_msg.MogoReportMsg; +import planning.RoboSweeperTaskIndexOuterClass; +import system_master.SystemStatusInfo; + +import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER; /** * @author congtaowang @@ -77,37 +68,37 @@ import mogo.telematics.pad.MessagePad; *

* 清扫车任务管理 */ -public class SweeperTaskModel { +public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IMoGoAutopilotStatusListener, IMoGoSweeperFutianCleanSystemListener { private final String TAG = SweeperTaskModel.class.getSimpleName(); private static volatile SweeperTaskModel sInstance; public double mLongitude = 0; public double mLatitude = 0; private Context mContext; - // 运营类型 - private static final int VEHICLE_TYPE = 10; private ISweeperControllerStatusCallback mControllerStatusCallback; //Model->Presenter:VR mode等 - private ISweeperADASStatusCallback mADASStatusCallback; - private ISweeperTaskCallback mSweeperTaskCallback; + private ISweeperCloudTaskCallback mSweeperTaskCallback; ArrayList points = new ArrayList<>();//全路径信息 - //当前子任务详情信息包括轨迹文件信息 - private SweeperSubTaskDetailBean mCurrentSubTaskDetail; - //子任务是否正在进行中 - private boolean mIsSubTaskWorking = false; - //自动驾驶是否到达子任务终点 - private boolean isAutopilotSubTaskArriveEndSite = false; - //当前子任务id - private int mSubTaskId = 0; - //当前是否最后一个子任务 - private boolean mIsLastSubtask = false; - //当前任务是否是第一个 - private boolean mIsFirstSubtask = false; - //当前任务是否是第一个 private int mSubTaskType = 0; //1自动驾驶 2.人工驾驶 - //0: 代表没有启动过 1代表是启动第一次,当>=1 代表是重试 每次子任务结束/主任务结束清空置为0 - private volatile int firstStartAutopilot = 0; - private int mLineId;//路线id + private int mCurrentLineId = 0; //当前路线id + private int mLineId = 0;//上一次存储的路线id //自动驾驶状态 private int mAutopilotState = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE; + //当前子任务id + private int mSubTaskId = 0; + // 清扫模式回调时间间隔 + private static final long VEHICLE_STATE_INTERVAL_MILLIS = 500L; + // 清扫模式当前时间戳 + private long mVehicleStateCurrentTimeMillis; + // 贴边数据回调时间间隔 + private static final long WELT_DATA_INTERVAL_MILLIS = 1000L; + // 贴边数据当前时间戳 + private long mWeltDataCurrentTimeMillis; + + private String longitude;//经度 + + private String latitude;//纬度 + + //用于对应messageType和reqNo绑定在一起,保证请求的reqNo和响应的reqNo一致 + private HashMap msgTypeAndReqNo = new HashMap<>(); public static SweeperTaskModel getInstance() { if (sInstance == null) { @@ -134,13 +125,12 @@ public class SweeperTaskModel { //自动驾驶路线规划接口 CallerPlanningRottingListenerManager.INSTANCE.addListener(TAG, moGoAutopilotPlanningListener); - //开启自驾后 异常信息返回 - OCHAdasAbilityManager.getInstance().setAdasStartFailureCallback(mAdasStartFailureListener); - - OCHSocketMessageManager.INSTANCE.registerSocketMessageListener( - OCHSocketMessageManager.msgMonitorType, - mMogoOnMessageListener); - + //添加清扫车云控任务回调监听 + CallerSweeperFutianCloudTaskListenerManager.INSTANCE.addListener(TAG, this); + //自动驾驶状态监听 + CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); + //清扫车模式和贴边数据回调监听 + CallerSweeperFutianCleanSystemListenerManager.INSTANCE.addListener(TAG, this); //2022.1.28 // 调用Disposable.dispose() 时候会出现InterruptedException 导致出现崩溃 // The exception could not be delivered to the consumer because it has already canceled/disposed @@ -179,15 +169,12 @@ public class SweeperTaskModel { }); } - public void setAdasStatusCallback(ISweeperADASStatusCallback callback) { - this.mADASStatusCallback = callback; - } public void setControllerStatusCallback(ISweeperControllerStatusCallback callback) { this.mControllerStatusCallback = callback; } - public void setSweeperTaskCallback(ISweeperTaskCallback callback) { + public void setSweeperTaskCallback(ISweeperCloudTaskCallback callback) { this.mSweeperTaskCallback = callback; } @@ -195,9 +182,9 @@ public class SweeperTaskModel { @Override public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) { - if (null != routeList && routeList.getWayPointsList()!=null&&routeList.getWayPointsList().size() > 0) { - if (mCurrentSubTaskDetail.getLineId() != mLineId) {//判断是否同一条路线 - mLineId = mCurrentSubTaskDetail.getLineId(); + if (null != routeList && routeList.getWayPointsList() != null && routeList.getWayPointsList().size() > 0) { + if (mCurrentLineId != mLineId) {//判断是否同一条路线 + mLineId = mCurrentLineId; points.addAll(coordinateConverterWgsToGcjList(mContext, routeList.getWayPointsList())); if (mSweeperTaskCallback != null) { mSweeperTaskCallback.setRouteList(points); @@ -208,11 +195,10 @@ public class SweeperTaskModel { }; - public void setSubtask(boolean isFirstSubtask, boolean isLastSubtask, int subTaskId, int subTaskType) { - this.mIsLastSubtask = isLastSubtask; - this.mIsFirstSubtask = isFirstSubtask; + public void setSubtask(int subTaskId, int subTaskType, int currentLineId) { this.mSubTaskId = subTaskId; this.mSubTaskType = subTaskType; + this.mCurrentLineId = currentLineId; } /** @@ -220,7 +206,7 @@ public class SweeperTaskModel { */ public void clearRouteList() { points.clear(); - mSubTaskType=0; + mSubTaskType = 0; } /** @@ -259,25 +245,6 @@ public class SweeperTaskModel { return sInstance; } - private final IMogoOnMessageListener mMogoOnMessageListener = - new IMogoOnMessageListener() { - @Override - public Class target() { - return OCHOperationalMessage.class; - } - - @Override - public void onMsgReceived(OCHOperationalMessage obj) { - if (obj == null) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onMsgReceived = null"); - return; - } - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onMsgReceived = " + obj.getMessage()); - OCHSocketMessageManager.INSTANCE.pushAppOperationalMsgBox(obj.getPushTimeStamp(), - obj.getMessage(),OCHSocketMessageManager.OPERATION_SYSTEM); - } - }; - private final IMogoStatusChangedListener mMogoStatusChangedListener = new IMogoStatusChangedListener() { // VR mode变更回调 @Override @@ -289,38 +256,18 @@ public class SweeperTaskModel { } } }; - - private final OchAdasStartFailureCallback mAdasStartFailureListener = new OchAdasStartFailureCallback() { - @Override - public void onStartAutopilotFailure(@NotNull String startFailedCode, @NonNull String startFailedMessage) { - SweeperAnalyticsManager.getInstance().triggerStartAutopilotFailureEventByAdas(startFailedCode, startFailedMessage); - if (mADASStatusCallback != null && !FunctionBuildConfig.isDemoMode) { - CallerLogger.INSTANCE.e(M_SWEEPER + TAG, "mAdasStartFailureListener = " + startFailedMessage); - mADASStatusCallback.onStartAdasFailure(); - } - } - }; - // 自车定位 private final IMoGoChassisLocationGCJ02Listener mMapLocationListener = new IMoGoChassisLocationGCJ02Listener() { @Override public void onChassisLocationGCJ02(@Nullable MogoLocation gnssInfo) { if (null == gnssInfo) return; - CallerLogger.INSTANCE.e(M_SWEEPER + TAG, "高德定位到站:mLongitude = " + gnssInfo.getLongitude() - + ", mLatitude=" + gnssInfo.getLatitude() + ", mSubTaskType=" + mSubTaskType +", mIsSubTaskWorking=" + mIsSubTaskWorking - + ", isAutopilotSubTaskArriveEndSite=" + isAutopilotSubTaskArriveEndSite - ); if (mControllerStatusCallback != null) { mControllerStatusCallback.onCarLocationChanged(gnssInfo); } - if (SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.getCode() == mSubTaskType) {//人工驾驶子任务需要手动跳过,不能自动结束 + if (mSubTaskType == 1) {//收集人工驾驶子任务坐标点 addCoordinates(gnssInfo); return; } - //子任务完成的围栏判断 子任务正在执行中,还未到达子任务终点 - if (mIsSubTaskWorking && !isAutopilotSubTaskArriveEndSite) { - judgeArrivedStation(gnssInfo); - } } }; @@ -346,550 +293,339 @@ public class SweeperTaskModel { } } - //根据围栏判断,是否到达子任务终点 - private void judgeArrivedStation(MogoLocation location) { - if (mCurrentSubTaskDetail == null) { - CallerLogger.INSTANCE.d(TAG, "行程日志-judgeArrivedStation() mCurrentSubTaskDetail is null"); + @Override + public void onSweeperFutianCloudTask(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, + @NonNull SweeperTask.TaskInfo taskInfo) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCloudTask:" + GsonUtil.jsonFromObject(taskInfo)); + if (mSweeperTaskCallback != null) { + msgTypeAndReqNo.put(messageType.getNumber(), reqNo); + mSweeperTaskCallback.onSweeperCloudTask(messageType, taskInfo); + } + } + + @Override + public void onSweeperFutianCloudTaskConfirm(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, + @NonNull SweeperTaskConfirm.TaskConfirm taskConfirm) { + + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCloudTaskConfirm:" + GsonUtil.jsonFromObject(taskConfirm)); + if (mSweeperTaskCallback != null) { + msgTypeAndReqNo.put(messageType.getNumber(), reqNo); + mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId()); + } + } + + @Override + public void onSweeperFutianCloudTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, + @NonNull SweeperTaskStatus.TaskStatusPush taskStatusPush) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCloudTaskStatus:" + GsonUtil.jsonFromObject(taskStatusPush)); + if (mSweeperTaskCallback != null) { + msgTypeAndReqNo.put(messageType.getNumber(), reqNo); + mSweeperTaskCallback.onSweeperCloudTaskStatus(taskStatusPush.getTaskId(), taskStatusPush.getSubTaskId(), taskStatusPush.getTaskStatus()); + } + } + + @Override + public void onSweeperFutianCloudTaskStop(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, + @NonNull SweeperTaskStop.StopTaskReq stopTaskReq) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCloudTaskStop:" + GsonUtil.jsonFromObject(stopTaskReq)); + if (mSweeperTaskCallback != null) { + msgTypeAndReqNo.put(messageType.getNumber(), reqNo); + mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType()); + } + } + + @Override + public void onSweeperFutianCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, + @NonNull SweeperTaskSuspendResume.SuspendResumeTaskResp suspendResumeTaskResp) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCloudTaskSuspendResume:" + GsonUtil.jsonFromObject(suspendResumeTaskResp)); + if (mSweeperTaskCallback != null) { + msgTypeAndReqNo.put(messageType.getNumber(), reqNo); + mSweeperTaskCallback.onSweeperCloudTaskSuspendResume(messageType, suspendResumeTaskResp.getTaskId(), + suspendResumeTaskResp.getSubTaskId(), suspendResumeTaskResp.getCode()); + } + } + + @Override + public void onSweeperFutianCloudBootable(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, + @NonNull SweeperBootable.IsBootableResp isBootableResp) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCloudBootable:" + GsonUtil.jsonFromObject(isBootableResp)); + if (mSweeperTaskCallback != null) { + msgTypeAndReqNo.put(messageType.getNumber(), reqNo); + mSweeperTaskCallback.onSweeperCloudBootable(isBootableResp.getTaskId(), isBootableResp.getSubTaskId(), isBootableResp.getCode()); + } + } + + @Override + public void onSweeperFutianCloudBigTaskStatus(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String reqNo, long sysTime, + @NonNull SweeperBigTaskStatus.BigTaskStatusPush bigTaskStatusPush) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCloudBigTaskStatus:" + GsonUtil.jsonFromObject(bigTaskStatusPush)); + if (mSweeperTaskCallback != null) { + msgTypeAndReqNo.put(messageType.getNumber(), reqNo); + mSweeperTaskCallback.onSweeperCloudBigTaskStatus(bigTaskStatusPush.getTaskId(), bigTaskStatusPush.getTaskStatus()); + } + } + + @Override + public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) { + if (cleanSystemState == null) { return; } - double endSiteLon = mCurrentSubTaskDetail.getEndSiteLon(); - double endSiteLat = mCurrentSubTaskDetail.getEndSiteLat(); - double distance = CoordinateUtils.calculateLineDistance( - endSiteLon, endSiteLat, - location.getLongitude(), location.getLatitude()); - if (distance <= SweeperConst.ARRIVE_AT_END_STATION_DISTANCE) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-judgeArrivedStation() distance = " + distance - + " to " + mCurrentSubTaskDetail.getEndSiteName()); - isAutopilotSubTaskArriveEndSite = true; - //到达子任务终点 结束子任务 - subTaskEnd(mIsFirstSubtask, mIsLastSubtask, mSubTaskId); //无自动驾驶到终点信息传null + long current = System.currentTimeMillis(); + if (current - mVehicleStateCurrentTimeMillis <= VEHICLE_STATE_INTERVAL_MILLIS) { return; } + mVehicleStateCurrentTimeMillis = current; + boolean clean_open_requirement = cleanSystemState.getSecuMotWorkSts(); + // 洗扫 + boolean clean_mode_wash_sweep = cleanSystemState.getSecuModWashSweepSts(); + // 纯洗 + boolean clean_mode_pure_wash = cleanSystemState.getSecuModWashSts(); + // 纯吸 + boolean clean_mode_pure_draw = cleanSystemState.getSecuWorkTonSts(); + // 左侧 + boolean clean_direction_left_side = cleanSystemState.getSecuWorkLeftSts(); + // 右侧 + boolean clean_direction_right_side = cleanSystemState.getSecuWorkRightSts(); + // 两侧 + boolean clean_direction_both_side = cleanSystemState.getSecuWorkOnBothsidesSts(); + // 作业强度状态 + boolean clean_intensity_standard = cleanSystemState.getSecuWorkStandSts(); + boolean clean_intensity_strong = cleanSystemState.getSecuWorkStrongSts(); + + // 纯扫 模式判断:不是另外其他3个模式,同时有清扫方向,说明开启了纯扫模式 + boolean clean_mode_pure_sweep = SweeperFutianCmdUtil.checkIfCleanModePureSweep(cleanSystemState); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("开关:") + .append(clean_open_requirement) + .append("\n") + .append("纯扫:") + .append(clean_mode_wash_sweep) + .append("纯洗:") + .append(clean_mode_pure_wash) + .append("纯吸:") + .append(clean_mode_pure_draw) + .append("纯扫:") + .append("\n") + .append(clean_mode_pure_sweep) + .append("左侧:") + .append(clean_direction_left_side) + .append("右侧:") + .append(clean_direction_right_side) + .append("两侧:") + .append("\n") + .append(clean_direction_both_side) + .append("标准:") + .append(clean_intensity_standard) + .append("强力:") + .append(clean_intensity_strong); + + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCleanSystemState:" + stringBuilder); + if (mSweeperTaskCallback != null) { + mSweeperTaskCallback.onSweeperFutianCleanSystemState(cleanSystemState); + } } - /** - * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 - */ - public void startAutopilot() { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-重启自动驾驶===" + mIsSubTaskWorking); - //只去启动自动驾驶 - startAutopilot(firstStartAutopilot >= 1); - } - - /** - * 开启自动驾驶 - * - * @param isRestart - */ - private void startAutopilot(boolean isRestart) { - if (!FunctionBuildConfig.isDemoMode && !OCHAdasAbilityManager.getInstance().getAutopilotAbilityStatus()) { - ToastUtils.showLong(OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason() + - ", 请稍候重试"); - triggerUnableStartAPReasonEvent(); + @Override + public void onSweeperFutianTaskIndexData(@NonNull RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) { + if (roboSweeperTaskIndex == null) { return; } - firstStartAutopilot++; - triggerStartServiceEvent(isRestart, false); - AutopilotControlParameters parameters = initAutopilotControlParameters(); - if (null == parameters) { - CallerLogger.INSTANCE.e(M_SWEEPER + TAG, "行程日志-AutopilotControlParameters is empty."); + long current = System.currentTimeMillis(); + if (current - mWeltDataCurrentTimeMillis <= WELT_DATA_INTERVAL_MILLIS) { return; } - CallerAutoPilotControlManager.INSTANCE.startAutoPilot(parameters); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-开启自动驾驶====" + GsonUtil.jsonFromObject(parameters) - + " startLatLon=" + parameters.startName + ",endLatLon=" + parameters.endName + - "isRestart = " + isRestart); + mWeltDataCurrentTimeMillis = current; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("清扫模式:") + .append(roboSweeperTaskIndex.getCleanMode()) + .append("清扫方向:") + .append(roboSweeperTaskIndex.getCleanDirection()) + .append("清扫强度:") + .append(roboSweeperTaskIndex.getCleanIntensity()) + .append("贴边距离:") + .append(roboSweeperTaskIndex.getDistToRefEdgePoint()) + .append("经度:") + .append(roboSweeperTaskIndex.getLocLon()) + .append("纬度:") + .append(roboSweeperTaskIndex.getLocLat()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianTaskIndexData:" + stringBuilder); + handleWeltData(roboSweeperTaskIndex); - if (mControllerStatusCallback != null) { - mControllerStatusCallback.startOpenAutopilot(); - } } /** - * 获取任务子任务执行状态 + * 贴边数据处理 */ - public boolean getSubWorking() { - return mIsSubTaskWorking; - } - - public void setWorking(Boolean isWorking) { - this.mIsSubTaskWorking = isWorking; - } - - /** - * 关闭美化模式 - */ - public void closeBeautificationMode() { - if (FunctionBuildConfig.isDemoMode) { - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = false; //是否强制绘制引导线 - CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾 - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "美化模式-ignore:置为false"); - } - } - - /** - * 开启美化模式 - */ - public void startBeautificationMode() { - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true;//是否强制绘制引导线 - CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(true);//是否自动启动自驾 - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "美化模式-ignore:置为true"); - } - - /** - * @param data - */ - public void onArriveTaskEnd(MessagePad.ArrivalNotification data) { - //MAP 280 每隔100ms左右返回一次到站, 导致在到达中间站后再次滑动出发后会有时间差,收到一次到站,出现问题 - //此处比对 自驾告诉的子任务终点坐标和本地应到子任务终点坐标, 一致时才表示子任务完成 - if (data != null && data.getEndLocation() != null && mCurrentSubTaskDetail != null) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "MAP到站通知:" + mCurrentSubTaskDetail.getEndSiteName() + " 经度:" - + data.getEndLocation().getLongitude() + " 纬度:" + data.getEndLocation().getLatitude()); - String latitude = NumberFormatUtil.cutOutNumber(data.getEndLocation().getLatitude(), 5); //wgs - String longitude = NumberFormatUtil.cutOutNumber(data.getEndLocation().getLongitude(), 5); - String arriveLat = NumberFormatUtil.cutOutNumber(mCurrentSubTaskDetail.getEndSiteWgs64Lat(), 5); - String arriveLon = NumberFormatUtil.cutOutNumber(mCurrentSubTaskDetail.getEndSiteWgs64Lon(), 5); - if (!latitude.equals(arriveLat) || !longitude.equals(arriveLon)) { - CallerLogger.INSTANCE.e(M_SWEEPER + TAG, "行程日志-子任务终点拦截,自动子任务终点与本地子任务终点不一致"); - return; + private void handleWeltData(RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) { + String tempLongitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLon(), 6); + String tempLatitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLat(), 6); + //用于过滤车是否停在原地,经纬度相同的情况 + if (!tempLongitude.equals(longitude) && !tempLatitude.equals(latitude)) { + latitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLat(), 6); + longitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLon(), 6); + //保存贴边数据到数据库中 + WeltDataBean weltDataBean = new WeltDataBean(); + //把wgs坐标系坐标转换成gcj坐标 + LatLng latLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), roboSweeperTaskIndex.getLocLon(), + roboSweeperTaskIndex.getLocLat()); + weltDataBean.setLocLon(latLng.longitude); + weltDataBean.setLocLat(latLng.latitude); + int edgeCleanState = roboSweeperTaskIndex.getEdgeCleanState(); + if (edgeCleanState == 0) { + weltDataBean.setWeltDistance(SweeperConst.NONWELT); + } else { + weltDataBean.setWeltDistance(roboSweeperTaskIndex.getDistToRefEdgePoint()); + } + weltDataBean.setCleanMode(roboSweeperTaskIndex.getCleanMode()); + weltDataBean.setCleanDirection(roboSweeperTaskIndex.getCleanDirection()); + weltDataBean.setCleanIntensity(roboSweeperTaskIndex.getCleanIntensity()); + weltDataBean.setSubTaskId(mSubTaskId); + MyDataBase.getInstance().getWeltDataDao().insert(weltDataBean); + String distance; + if (roboSweeperTaskIndex.getDistToRefEdgePoint() >= 1.0) {//大于等于1m + distance = format(roboSweeperTaskIndex.getDistToRefEdgePoint()) + "m"; + } else {//小于1m + distance = Math.round(roboSweeperTaskIndex.getDistToRefEdgePoint() * 100) + "cm";//m->cm 四舍五入到整数 + } + if (mSweeperTaskCallback != null) { + mSweeperTaskCallback.setWeltDataToMap((ArrayList) MyDataBase.getInstance().getWeltDataDao().loadAllWeltDataInfo(), + true, distance); } } - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "MAP到站通知:mSubTaskType=" + mSubTaskType + " isAutopilotSubTaskArriveEndSite=" - + isAutopilotSubTaskArriveEndSite + " mSubTaskId=" + mSubTaskId); - if (SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.getCode() == mSubTaskType) {//人工驾驶子任务需要手动跳过,不能自动结束 - return; - } - if (isAutopilotSubTaskArriveEndSite) { - return; - } - isAutopilotSubTaskArriveEndSite = true; - //到达子任务终点 结束子任务 - subTaskEnd(mIsFirstSubtask, mIsLastSubtask, mSubTaskId); } - public void triggerStartServiceEvent(boolean isRestart, boolean send) { - if (mCurrentSubTaskDetail == null) { - return; - } - SweeperAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestart, send, - mCurrentSubTaskDetail.getStartSiteName(), mCurrentSubTaskDetail.getEndSiteName(), mCurrentSubTaskDetail.getLineId()); - } - - public boolean isRestartAutopilot() { - return firstStartAutopilot > 1; - } - - public void triggerUnableStartAPReasonEvent() { - if (mCurrentSubTaskDetail == null) { - return; - } - SweeperAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( - mCurrentSubTaskDetail.getStartSiteName(), mCurrentSubTaskDetail.getEndSiteName(), mCurrentSubTaskDetail.getLineId(), - OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason()); - } - - /** - * 将轨迹文件信息同步到鹰眼 - */ - private void updateAutopilotControlParameters() { - - AutopilotControlParameters parameters = initAutopilotControlParameters(); - if (null == parameters) { - CallerLogger.INSTANCE.e(M_SWEEPER + TAG, "AutopilotControlParameters is empty."); - return; - } - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "AutopilotControlParameters" + GsonUtil.jsonFromObject(parameters)); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "AutopilotControlParameters is update."); - CallerAutoPilotStatusListenerManager.INSTANCE.updateAutopilotControlParameters(parameters); - } - - private void clearAutopilotControlParameters() { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "AutopilotControlParameters is clear."); - CallerAutoPilotStatusListenerManager.INSTANCE.updateAutopilotControlParameters(null); - } - - private AutopilotControlParameters initAutopilotControlParameters() { - AutopilotControlParameters parameters = new AutopilotControlParameters(); - if (mCurrentSubTaskDetail != null) { - parameters.routeID = mCurrentSubTaskDetail.getLineId(); - parameters.routeName = mCurrentSubTaskDetail.getLineName(); - parameters.startName = PinYinUtil.getPinYinHeadChar(mCurrentSubTaskDetail.getStartSiteName()); - parameters.endName = PinYinUtil.getPinYinHeadChar(mCurrentSubTaskDetail.getEndSiteName()); - parameters.startLatLon = new AutopilotControlParameters - .AutoPilotLonLat(mCurrentSubTaskDetail.getStartSiteWgs64Lat(), mCurrentSubTaskDetail.getStartSiteWgs64Lon()); - parameters.endLatLon = new AutopilotControlParameters - .AutoPilotLonLat(mCurrentSubTaskDetail.getEndSiteWgs64Lat(), mCurrentSubTaskDetail.getEndSiteWgs64Lon()); - parameters.vehicleType = VEHICLE_TYPE; - parameters.autoPilotLine = new AutopilotControlParameters.AutoPilotLine( - mCurrentSubTaskDetail.getLineId(), - mCurrentSubTaskDetail.getCsvFileUrl(), mCurrentSubTaskDetail.getCsvFileMd5(), - mCurrentSubTaskDetail.getTxtFileUrl(), mCurrentSubTaskDetail.getTxtFileMd5(), - mCurrentSubTaskDetail.getPublishTime(), mCurrentSubTaskDetail.getCarModel(), - mCurrentSubTaskDetail.getCsvFileUrlDPQP(), mCurrentSubTaskDetail.getCsvFileMd5DPQP(), - mCurrentSubTaskDetail.getTxtFileUrlDPQP(), mCurrentSubTaskDetail.getTxtFileMd5DPQP(), - mCurrentSubTaskDetail.getPublishTimeDPQP()); - } - return parameters; + public static String format(double value) { + BigDecimal bd = new BigDecimal(value); + bd = bd.setScale(2, RoundingMode.HALF_UP); + return bd.toString(); } /** * 获取当前正在执行的任务 */ public void getCurrentTask() { - SweeperServiceManager.getCurrentTask(mContext, new OchCommonServiceCallback>() { - @Override - public void onSuccess(BaseResponse data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:" + GsonUtil.jsonFromObject(data)); - if (mSweeperTaskCallback != null && data != null) { - SweeperSubTaskBean sweeperSubTaskBean = data.getData(); - if (sweeperSubTaskBean != null && sweeperSubTaskBean.getSubList() != null && sweeperSubTaskBean.getSubList().size() > 0) { - mSweeperTaskCallback.setSubTaskBean(sweeperSubTaskBean, true); - } else { - getMainTaskList(false); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - } - - @Override - public void onFail(int code, String msg) { - if (ToastUtilsOch.isCustomFastClick(5000)) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - } else { - ToastUtils.showShort(msg); - } - } - } - }); + SweeperTask.GetTaskReq.Builder builder = SweeperTask.GetTaskReq.newBuilder(); + builder.setSn(getDriverSn()); + getAutoPilotControlManager().sendSweeperGetTaskReq(String.valueOf(System.currentTimeMillis()), builder.build()); } /** - * 获取主任务列表 + * 接取任务响应 */ - public void getMainTaskList(boolean refresh) { - SweeperServiceManager.getMainTaskList(mContext, new OchCommonServiceCallback>>() { - @Override - public void onSuccess(BaseResponse> data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getMainTaskList:" + GsonUtil.jsonFromObject(data)); - if (mSweeperTaskCallback != null && data != null && data.getCode() == 0) { - List list = data.getData(); - mSweeperTaskCallback.setMainTaskList(list, refresh); - } - } - - @Override - public void onFail(int code, String msg) { - if (ToastUtilsOch.isCustomFastClick(5000)) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - } else { - ToastUtils.showShort(msg); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - } - }); + public void sendSweeperStartTaskResp(String taskId, SweeperTask.StartTaskCode code) { + SweeperTask.StartTaskResp.Builder builder = SweeperTask.StartTaskResp.newBuilder(); + builder.setSn(getDriverSn()); + builder.setTaskId(taskId); + builder.setCode(code); + SweeperTask.StartTaskResp startTaskResp = builder.build(); + String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTask); + getAutoPilotControlManager().sendSweeperStartTaskResp(reqNo, startTaskResp); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp:" + GsonUtil.jsonFromObject(startTaskResp) + "reqNo:" + reqNo); } /** - * 获取子任务列表 + * 子任务开始确认 */ - public void getSubTaskList(int taskId, SweeperSubTaskBean sweeperSubTaskBean) { - SweeperServiceManager.getSubTaskList(taskId, mContext, new OchCommonServiceCallback>>() { - @Override - public void onSuccess(BaseResponse> data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getSubTaskList:" + GsonUtil.jsonFromObject(data)); - if (mSweeperTaskCallback != null && data != null && data.getCode() == 0) { - List list = data.getData(); - if (list != null && list.size() > 0) { - sweeperSubTaskBean.setSubList(list); - mSweeperTaskCallback.setSubTaskBean(sweeperSubTaskBean, false); - } else { - getMainTaskList(false); - } - } - } - - @Override - public void onFail(int code, String msg) { - if (ToastUtilsOch.isCustomFastClick(5000)) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - } else { - ToastUtils.showShort(msg); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - } - }); + public void sendSweeperTaskConfirmResp(String taskId, String subTaskId, SweeperTaskConfirm.TaskConfirmCode code) { + SweeperTaskConfirm.TaskConfirmResp.Builder builder = SweeperTaskConfirm.TaskConfirmResp.newBuilder(); + builder.setSn(getDriverSn()); + builder.setTaskId(taskId); + builder.setSubTaskId(subTaskId); + builder.setCode(code); + SweeperTaskConfirm.TaskConfirmResp taskConfirmResp = builder.build(); + String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskConfirm); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp" + GsonUtil.jsonFromObject(taskConfirmResp) + "reqNo:" + reqNo); + getAutoPilotControlManager().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp); } /** - * 获取子任务详情包括轨迹文件信息 + * 大任务结束确认 + * + * @param taskId + * @param code */ - public void getSubTaskDetail(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType, boolean isStartSubtask) { - SweeperServiceManager.getSubTaskDetail(subTaskId, mContext, new OchCommonServiceCallback>() { - @Override - public void onSuccess(BaseResponse data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getSubTaskDetail:" + GsonUtil.jsonFromObject(data)); - if (data != null) { - mCurrentSubTaskDetail = data.getData(); - if (mCurrentSubTaskDetail != null) { - mSweeperTaskCallback.setSubTakDetail(mCurrentSubTaskDetail, subTaskType); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getSubTaskDetail:subTaskType=" + subTaskType - + ", isStartSubtask=" + isStartSubtask + ", mAutopilotState=" + mAutopilotState); - Log.d(M_SWEEPER + TAG, "getSubTaskDetail:subTaskType=" + subTaskType - + ", isStartSubtask=" + isStartSubtask + ", mAutopilotState=" + mAutopilotState); - if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//自动驾驶子任务 - //向自动驾驶发送要下载文件轨迹路径 - SweeperTrajectoryManager.getInstance().syncTrajectoryInfo(mCurrentSubTaskDetail); - updateAutopilotControlParameters(); - // 不在启动驾驶状态也需要先开启子任务 - if (isStartSubtask) {//是否需要自动开始执行任务 - subTaskStart(isFirst, isEnd, subTaskId, subTaskType); - if (mAutopilotState == IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) { - cancelAutoPilot(); - startAutopilot(); - - //提示必须是N档,且拉起手刹 才能进入自动驾驶 - VoiceNotice.showNotice(mContext.getString(R.string.sweeper_arrive_auto_start_next_subtask_tips)); - ToastUtils.showLong(mContext.getString(R.string.sweeper_arrive_auto_start_next_subtask_tips)); - } - } - } - } - } - } - - @Override - public void onFail(int code, String msg) { - if (ToastUtilsOch.isCustomFastClick(5000)) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - } else { - ToastUtils.showShort(msg); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - } - }); + public void sendSweeperStopTaskResp(String taskId, SweeperTaskStop.StopTaskCode code) { + SweeperTaskStop.StopTaskResp.Builder builder = SweeperTaskStop.StopTaskResp.newBuilder(); + builder.setSn(getDriverSn()); + builder.setTaskId(taskId); + builder.setCode(code); + SweeperTaskStop.StopTaskResp stopTaskResp = builder.build(); + String reqNo = msgTypeAndReqNo.get(SweeperCloudTask.MessageType.CloudPushTaskStop); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperStartTaskResp" + GsonUtil.jsonFromObject(stopTaskResp) + "reqNo:" + reqNo); + getAutoPilotControlManager().sendSweeperStopTaskResp(reqNo, stopTaskResp); } /** - * 子任务开始上报 + * pad上报是否可以进自驾 + * @param taskId + * @param subTaskId + * @param lineId */ - public void subTaskStart(boolean isFirst, boolean isEnd, int subTaskId, SubTaskTypeEnum subTaskType) { - SweeperServiceManager.subTaskStart(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback>() { - @Override - public void onSuccess(BaseResponse data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskStart:" + GsonUtil.jsonFromObject(data)); - if (mSweeperTaskCallback != null && data != null) { - if (data.getData()) { - mIsSubTaskWorking = true; - isAutopilotSubTaskArriveEndSite = false; - mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.START_SUBTASK, false); - if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//如果是自动驾驶子任务子开启自驾 - if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 - SweeperTaskModel.getInstance().startBeautificationMode(); - } - //ÏstartAutopilot(false); - } else { - if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true;//是否强制绘制引导线 - CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾 - } - } - } - } - } - - @Override - public void onFail(int code, String msg) { - if (ToastUtilsOch.isCustomFastClick(5000)) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - } else { - ToastUtils.showShort(msg); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - } - }); + public void sendSweeperAutopilotBootable(String taskId, String subTaskId, long lineId) { + SweeperBootable.IsBootable.Builder builder = SweeperBootable.IsBootable.newBuilder(); + builder.setSn(getDriverSn()); + builder.setTaskId(taskId); + builder.setSubTaskId(subTaskId); + builder.setLineId(lineId); + SweeperBootable.IsBootable isBootable=builder.build(); + String reqNo = String.valueOf(System.currentTimeMillis()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendSweeperAutopilotBootable" + GsonUtil.jsonFromObject(isBootable) + "reqNo:" + reqNo); + getAutoPilotControlManager().sendSweeperAutopilotBootable(reqNo,isBootable); } - /** - * 子任务结束上报 - */ - public void subTaskEnd(boolean isFirst, boolean isEnd, int subTaskId) { - SweeperServiceManager.subTaskEnd(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback>() { - @Override - public void onSuccess(BaseResponse data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskEnd:" + - String.format("isFirst=%b; isEnd=%b; ", isFirst, isEnd) + GsonUtil.jsonFromObject(data)); - if (data != null) { - if (data.getData()) { - mIsSubTaskWorking = false; - if (mSweeperTaskCallback != null) { - mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.END_SUBTASK, isEnd); - } - if (isEnd) { - if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 - SweeperTaskModel.getInstance().closeBeautificationMode(); - } - clearAutopilotControlParameters(); - //结束自动驾驶 - cancelAutoPilot(); - } - } - } - } - - @Override - public void onFail(int code, String msg) { - if (ToastUtilsOch.isCustomFastClick(5000)) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - } else { - if (isAutopilotSubTaskArriveEndSite) return; - ToastUtils.showShort(msg); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - - } - }); + public CallerAutoPilotControlManager getAutoPilotControlManager() { + return CallerAutoPilotControlManager.INSTANCE; } - /** - * 子任务跳过上报 - */ - public void subTaskSkip(boolean isFirst, boolean isEnd, int subTaskId) { - SweeperServiceManager.subTaskSkip(isFirst, isEnd, subTaskId, mContext, new OchCommonServiceCallback>() { - @Override - public void onSuccess(BaseResponse data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskSkip:" + - String.format("isFirst=%b; isEnd=%b; ", isFirst, isEnd)+ GsonUtil.jsonFromObject(data)); - if (mSweeperTaskCallback != null && data != null) { - if (data.getData()) { - mIsSubTaskWorking = false; - // 跳过子任务也相当于开始并结束一个子任务,相关变量状态需要重置 - isAutopilotSubTaskArriveEndSite = false; - mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.JUMP_OVER_SUBTASK, isEnd); - } - } - } - - @Override - public void onFail(int code, String msg) { - if (ToastUtilsOch.isCustomFastClick(5000)) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - } else { - ToastUtils.showShort(msg); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - } - }); + public String getDriverSn() { + return MoGoAiCloudClientConfig.getInstance().getSn(); } - /** - * 主任务重置 - */ - public void mainTaskReset(int taskId) { - SweeperServiceManager.mainTaskReset(taskId, mContext, new OchCommonServiceCallback>() { - @Override - public void onSuccess(BaseResponse data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "mainTaskReset:" + GsonUtil.jsonFromObject(data)); - // 主任务重置 当前子任务也需重置 - mIsSubTaskWorking = false; - isAutopilotSubTaskArriveEndSite = false; - if (mSweeperTaskCallback != null && data != null) { - mSweeperTaskCallback.setMainTaskReset(data.getData()); - } - } - - @Override - public void onFail(int code, String msg) { - if (ToastUtilsOch.isCustomFastClick(5000)) { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort("网络异常,请稍后重试"); - } else { - ToastUtils.showShort(msg); - } - } - } - - @Override - public void onError() { - if (!NetworkUtils.isConnected(mContext)) { - ToastUtils.showShort(mContext.getString(R.string.network_error_tip)); - } else { - ToastUtils.showShort(mContext.getString(R.string.request_error_tip)); - } - } - }); + @Override + public void onAutopilotStatusResponse(@NonNull AutopilotStatusInfo autoPilotStatusInfo) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autoPilotStatusInfo.getState()); + switch (autoPilotStatusInfo.getState()) { + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶 + break; + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶 + break; + case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中 + break; + case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶 + break; + default: + break; + } } - //结束自动驾驶 - public void cancelAutoPilot() { - CallerAutoPilotControlManager.INSTANCE.cancelAutoPilot(); + @Override + public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) { + + } + + @Override + public void onAutopilotSNRequest() { + + } + + @Override + public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) { + + } + + @Override + public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotIpcConnectStatusChanged status:" + status + "reason:" + reason); + } + + @Override + public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusRespByQuery status:" + status.getSysState().getNumber()); + } + + @Override + public void onAutopilotRouteLineId(long lineId) { + } } diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/net/ISweeperApiService.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/net/ISweeperApiService.java deleted file mode 100644 index 658c87340b..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/net/ISweeperApiService.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.mogo.och.sweepercloud.net; -import com.mogo.och.sweepercloud.bean.BaseResponse; -import com.mogo.och.sweepercloud.bean.SubInfo; -import com.mogo.och.sweepercloud.bean.SubStartRequest; -import com.mogo.och.sweepercloud.bean.SweeperSubTaskBean; -import com.mogo.och.sweepercloud.bean.SweeperMainTaskBean; -import com.mogo.och.sweepercloud.bean.SweeperSubTaskDetailBean; - -import java.util.List; -import java.util.Map; - -import io.reactivex.Observable; -import retrofit2.http.Body; -import retrofit2.http.GET; -import retrofit2.http.Header; -import retrofit2.http.Headers; -import retrofit2.http.POST; -import retrofit2.http.Query; -import retrofit2.http.QueryMap; - -/** - * 清扫车相关接口 - */ -public interface ISweeperApiService { - /** - * 获取当前正在执行的任务 - * @param appId - * @param ticket - * @param carSn - * @return - */ - @GET("/och-sweep/api/task/v1/currentTask") - Observable> getCurrentTask(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("carSn") String carSn); - /** - * 清扫车任务列表 - * @param appId - * @param ticket - * @param carSn - * @return - */ - @GET("/och-sweep/api/task/v1/mainTaskList") - Observable>> getMainTaskList(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("carSn") String carSn); - /** - * 清扫车子任务列表 - * @param appId - * @param ticket - * @param map - * @return - */ - @GET("/och-sweep/api/task/v1/subTaskList") - Observable>> getSubTaskList(@Header ("appId") String appId, @Header("ticket") String ticket, @QueryMap Map map); - /** - * 子任务详情 包括子任务轨迹信息 - * @param appId - * @param ticket - * @param map - * @return - */ - @GET("/och-sweep/api/task/v1/subTaskInfo") - Observable> getSubTaskDetail(@Header ("appId") String appId, @Header("ticket") String ticket, @QueryMap Map map); - - /** - * 子任务开始 - * @param appId - * @param ticket - * @param subStartRequest - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) - @POST("/och-sweep/api/task/v1/subTaskStart") - Observable> subTaskStart(@Header ("appId") String appId, @Header("ticket") String ticket, @Body SubStartRequest subStartRequest); - - /** - * 子任务结束 - * @param appId - * @param ticket - * @param subStartRequest - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) - @POST("/och-sweep/api/task/v1/subTaskEnd") - Observable> subTaskEnd(@Header ("appId") String appId, @Header("ticket") String ticket, @Body SubStartRequest subStartRequest); - /** - * 子任务跳过 - * @param appId - * @param ticket - * @param subStartRequest - * @return - */ - @Headers({"Content-type:application/json;charset=UTF-8"}) - @POST("/och-sweep/api/task/v1/subTaskSkip") - Observable> subTaskSkip(@Header ("appId") String appId, @Header("ticket") String ticket, @Body SubStartRequest subStartRequest); - - /** - * 主任务重置 - * @param appId - * @param ticket - * @return - */ - @GET("/och-sweep/api/task/v1/mainTaskReset") - Observable> mainTaskReset(@Header ("appId") String appId, @Header("ticket") String ticket,@QueryMap Map map); -} - diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/net/SweeperServiceManager.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/net/SweeperServiceManager.kt deleted file mode 100644 index 0a68179fd2..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/net/SweeperServiceManager.kt +++ /dev/null @@ -1,173 +0,0 @@ -package com.mogo.och.sweepercloud.net - -import android.content.Context -import com.elegant.network.utils.GsonUtil -import com.mogo.cloud.passport.MoGoAiCloudClientConfig -import com.mogo.eagle.core.network.MoGoRetrofitFactory -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger.d -import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant -import com.mogo.och.common.module.biz.constant.OchCommonConst -import com.mogo.och.common.module.biz.network.OchCommonServiceCallback -import com.mogo.och.common.module.biz.network.OchCommonSubscribeImpl -import com.mogo.och.common.module.biz.network.interceptor.transformTry -import com.mogo.och.sweepercloud.bean.* -import com.mogo.och.sweepercloud.model.SweeperTaskModel - -object SweeperServiceManager { - private val TAG = SweeperTaskModel::class.java.simpleName - private val mService: ISweeperApiService = MoGoRetrofitFactory.getInstance(OchCommonConst.getSweeperUrl()).create( - ISweeperApiService::class.java - ) - - /** - * 获取当前正在执行的任务 - */ - @JvmStatic - fun getCurrentTask(context: Context, callback: OchCommonServiceCallback>?) { - val map = hashMapOf() - map["serviceAppId"] = getServiceAppId() - map["token"] = getToken() - map["sn"] = getCarSN() - d(SceneConstant.M_SWEEPER + TAG, "getCurrentTask:" + GsonUtil.jsonFromObject(map)) - mService.getCurrentTask( - getServiceAppId(), - getToken(), - getCarSN() - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "getCurrentTask")) - } - - /** - * 获取主任务列表 - */ - @JvmStatic - fun getMainTaskList(context: Context, callback: OchCommonServiceCallback>>?) { - val map = hashMapOf() - map["serviceAppId"] = getServiceAppId() - map["token"] = getToken() - map["sn"] = getCarSN() - d(SceneConstant.M_SWEEPER + TAG, "getMainTaskList:" + GsonUtil.jsonFromObject(map)) - mService.getMainTaskList( - getServiceAppId(), - getToken(), - getCarSN() - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "getMainTaskList")) - } - - /** - * 获取子任务列表 - */ - @JvmStatic - fun getSubTaskList(taskId: Int, context: Context, callback: OchCommonServiceCallback>>?) { - val map = hashMapOf() - map["carSn"] = getCarSN() - map["taskId"] = taskId.toString() - d(SceneConstant.M_SWEEPER + TAG, "getSubTaskList:" + GsonUtil.jsonFromObject(map)) - mService.getSubTaskList( - getServiceAppId(), - getToken(), - map - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "getSubTaskList")) - } - - /** - * 获取子任务详情包括轨迹文件信息 - */ - @JvmStatic - fun getSubTaskDetail(subTaskId: Int, context: Context, callback: OchCommonServiceCallback>?) { - val map = hashMapOf() - map["carSn"] = getCarSN() - map["taskId"] = subTaskId.toString() - d(SceneConstant.M_SWEEPER + TAG, "getSubTaskDetail:" + GsonUtil.jsonFromObject(map)) - mService.getSubTaskDetail( - getServiceAppId(), - getToken(), - map - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "getSubTaskList")) - } - - /** - * 子任务开始上报 - */ - @JvmStatic - fun subTaskStart(isFirst: Boolean, isEnd: Boolean, subTaskId: Int, context: Context, callback: OchCommonServiceCallback>?) { - val subStartRequest = SubStartRequest(getCarSN(), subTaskId, System.currentTimeMillis(), isFirst, isEnd) - d(SceneConstant.M_SWEEPER + TAG, "subTaskStart:" + GsonUtil.jsonFromObject(subStartRequest)) - mService.subTaskStart( - getServiceAppId(), - getToken(), - subStartRequest - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "subTaskStart")) - } - - /** - * 子任务结束上报 - */ - @JvmStatic - fun subTaskEnd(isFirst: Boolean, isEnd: Boolean, subTaskId: Int, context: Context, callback: OchCommonServiceCallback>?) { - val subStartRequest = SubStartRequest(getCarSN(), subTaskId, System.currentTimeMillis(), isFirst, isEnd) - d(SceneConstant.M_SWEEPER + TAG, "subTaskEnd:" + GsonUtil.jsonFromObject(subStartRequest)) - mService.subTaskEnd( - getServiceAppId(), - getToken(), - subStartRequest - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "subTaskEnd")) - } - - /** - * 子任务跳过上报 - */ - @JvmStatic - fun subTaskSkip(isFirst: Boolean, isEnd: Boolean, subTaskId: Int, context: Context, callback: OchCommonServiceCallback>?) { - val subStartRequest = SubStartRequest(getCarSN(), subTaskId, System.currentTimeMillis(), isFirst, isEnd) - d(SceneConstant.M_SWEEPER + TAG, "subTaskSkip:" + GsonUtil.jsonFromObject(subStartRequest)) - mService.subTaskSkip( - getServiceAppId(), - getToken(), - subStartRequest - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "subTaskSkip")) - } - - /** - * 主任务重置 - */ - @JvmStatic - fun mainTaskReset(taskId: Int, context: Context, callback: OchCommonServiceCallback>?) { - val map = hashMapOf() - map["carSn"] = getCarSN() - map["taskId"] = taskId.toString() - d(SceneConstant.M_SWEEPER + TAG, "mainTaskReset:" + GsonUtil.jsonFromObject(map)) - mService.mainTaskReset( - getServiceAppId(), - getToken(), - map - ) - .transformTry() - .subscribe(OchCommonSubscribeImpl(context, callback, "mainTaskReset")) - } - - private fun getCarSN(): String { - return MoGoAiCloudClientConfig.getInstance().sn - } - - private fun getServiceAppId(): String { - return MoGoAiCloudClientConfig.getInstance().serviceAppId - } - - private fun getToken(): String { - return MoGoAiCloudClientConfig.getInstance().token - } -} \ No newline at end of file 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 0a15b6a108..1d61bb6d11 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 @@ -1,58 +1,32 @@ package com.mogo.och.sweepercloud.presenter; -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.lifecycle.LifecycleOwner; - -import com.amap.api.maps.model.LatLng; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.Presenter; 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; -import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianCleanSystemListener; -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.ThreadUtils; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; -import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; -import com.mogo.och.common.module.utils.NumberFormatUtil; -import com.mogo.och.sweepercloud.bean.SweeperMainTaskBean; import com.mogo.och.sweepercloud.bean.SweeperRoutePlanningUpdateReqBean; -import com.mogo.och.sweepercloud.bean.SweeperSubTaskBean; -import com.mogo.och.sweepercloud.bean.SweeperSubTaskDetailBean; -import com.mogo.och.sweepercloud.callback.ISweeperADASStatusCallback; import com.mogo.och.sweepercloud.callback.ISweeperControllerStatusCallback; -import com.mogo.och.sweepercloud.callback.ISweeperTaskCallback; +import com.mogo.och.sweepercloud.callback.ISweeperCloudTaskCallback; import com.mogo.och.sweepercloud.callback.ISweeperTaskRouteCallback; -import com.mogo.och.sweepercloud.constant.SubTaskTypeEnum; -import com.mogo.och.sweepercloud.constant.SweeperConst; -import com.mogo.och.sweepercloud.constant.TaskStatusEnum; -import com.mogo.och.sweepercloud.database.MyDataBase; import com.mogo.och.sweepercloud.database.bean.WeltDataBean; import com.mogo.och.sweepercloud.fragment.SweeperFragment; import com.mogo.och.sweepercloud.model.SweeperTaskModel; -import com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil; -import com.mogo.och.sweepercloud.util.SweeperTrajectoryManager; +import com.zhjt.mogo.adas.data.sweeper.SweeperCloudTask; +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.big.SweeperBigTaskStatus; +import com.zhjt.mogo.adas.data.sweeper.task.stop.SweeperTaskStop; -import org.jetbrains.annotations.NotNull; -import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.ArrayList; -import java.util.List; +import androidx.annotation.NonNull; +import androidx.lifecycle.LifecycleOwner; import chassis.ChassisStatesOuterClass; -import mogo.telematics.pad.MessagePad; -import mogo_msg.MogoReportMsg; -import planning.RoboSweeperTaskIndexOuterClass; -import system_master.SystemStatusInfo; /** * 网约车小巴 @@ -60,31 +34,13 @@ import system_master.SystemStatusInfo; * @author tongchenfei */ public class SweeperPresenter extends Presenter - implements IMoGoAutopilotStatusListener, ISweeperControllerStatusCallback, ISweeperADASStatusCallback, - IMoGoSweeperFutianCleanSystemListener, ISweeperTaskCallback, ISweeperTaskRouteCallback { + implements ISweeperControllerStatusCallback, + ISweeperCloudTaskCallback, ISweeperTaskRouteCallback { private static final String TAG = "SweeperPresenter"; - //当前子任务id - private int mSubTaskId = 0; - // 清扫模式回调时间间隔 - private static final long VEHICLE_STATE_INTERVAL_MILLIS = 500L; - // 清扫模式当前时间戳 - private long mVehicleStateCurrentTimeMillis; - - // 贴边数据回调时间间隔 - private static final long WELT_DATA_INTERVAL_MILLIS = 1000L; - // 贴边数据当前时间戳 - private long mWeltDataCurrentTimeMillis; - - private String longitude;//经度 - private String latitude;//纬度 public SweeperPresenter(SweeperFragment view) { super(view); - //2021.11.1 鹰眼架构整合,由IMoGoAutopilotStatusListener逐步替代IMogoAdasOCHCallback接口 - CallerAutoPilotStatusListenerManager.INSTANCE.addListener(TAG, this); - //清扫车模式和贴边数据回调监听 - CallerSweeperFutianCleanSystemListenerManager.INSTANCE.addListener(TAG, this); SweeperTaskModel.getInstance().init(); OCHAdasAbilityManager.getInstance().init(AbsMogoApplication.getApp()); } @@ -104,69 +60,15 @@ public class SweeperPresenter extends Presenter public void initModelListener() { SweeperTaskModel.getInstance().setControllerStatusCallback(this); - SweeperTaskModel.getInstance().setAdasStatusCallback(this); SweeperTaskModel.getInstance().setSweeperTaskCallback(this); } public void releaseListener() { SweeperTaskModel.getInstance().setControllerStatusCallback(null); - SweeperTaskModel.getInstance().setAdasStatusCallback(null); SweeperTaskModel.getInstance().setSweeperTaskCallback(null); CallerSweeperFutianCleanSystemListenerManager.INSTANCE.removeListener(TAG); } - @Override - public void onAutopilotRouteLineId(long lineId) { - - } - - @Override - public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { - if (autopilotStatusInfo == null) return; - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autopilotStatusInfo.getState()); - SweeperTaskModel.getInstance().setAutopilotState(autopilotStatusInfo.getState()); - switch (autopilotStatusInfo.getState()) { - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶 - break; - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_ENABLE://人工驾驶 - if (SweeperTaskModel.getInstance().getSubWorking()) { - if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 - SweeperTaskModel.getInstance().startBeautificationMode(); - } - } else { - if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 - //关闭美化模式 - SweeperTaskModel.getInstance().closeBeautificationMode(); - } - } - break; - case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING://自动驾驶中 - SweeperTaskModel.getInstance().triggerStartServiceEvent( - SweeperTaskModel.getInstance().isRestartAutopilot(), true); - if (SweeperTaskModel.getInstance().getSubWorking()) { - if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 - SweeperTaskModel.getInstance().startBeautificationMode(); - } - } - break; - case IMoGoAutopilotStatusListener.STATUS_PARALLEL_DRIVING://平行驾驶 - if (SweeperTaskModel.getInstance().getSubWorking()) { - if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 - FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true;//是否强制绘制引导线 - CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾 - } - } else { - if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 - //关闭美化模式 - SweeperTaskModel.getInstance().closeBeautificationMode(); - } - } - break; - default: - break; - } - } - @Override public void onVRModeChanged(boolean isVRMode) { ThreadUtils.runOnUiThread(() -> mView.onVRModeChanged(isVRMode)); @@ -184,26 +86,21 @@ public class SweeperPresenter extends Presenter public void startOpenAutopilot() { } + /** * 清除路线缓存数据 */ - public void clearRouteList(){ + public void clearRouteList() { SweeperTaskModel.getInstance().clearRouteList(); } - public void startAutopilot() { - SweeperTaskModel.getInstance().startAutopilot(); - } /** * 设置当前子任务信息 */ - public void setSubtask(boolean isFirstSubtask, boolean isLastSubtask, int subTaskId,int subTaskType) { - this.mSubTaskId = subTaskId; - SweeperTaskModel.getInstance().setSubtask(isFirstSubtask, isLastSubtask, subTaskId,subTaskType); - } - public void setWorking(boolean isWorking){ - SweeperTaskModel.getInstance().setWorking(isWorking); + public void setSubtask(int subTaskId, int subTaskType, int currentLineId) { + SweeperTaskModel.getInstance().setSubtask(subTaskId, subTaskType, currentLineId); } + /** * 测试使用 * @@ -212,165 +109,7 @@ public class SweeperPresenter extends Presenter public void debugAutoPilotStatus(int status) { AutopilotStatusInfo info = new AutopilotStatusInfo(); info.setState(status); - onAutopilotStatusResponse(info); } - - @Override - public void onAutopilotGuardian(MogoReportMsg.MogoReportMessage guardianInfo) { - SweeperTrajectoryManager.getInstance().onAutopilotGuardian(guardianInfo); - } - - @Override - public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) { - } - - @Override - public void onAutopilotStatusRespByQuery(@NonNull SystemStatusInfo.StatusInfo status) { - - } - - @Override - public void onAutopilotArriveAtStation(@Nullable MessagePad.ArrivalNotification arrivalNotification) { - SweeperTaskModel.getInstance().onArriveTaskEnd(arrivalNotification); - } - - @Override - public void onAutopilotSNRequest() { - - } - - @Override - public void onStartAdasFailure() { - - } - - public void onArriveTaskEnd(@Nullable MessagePad.ArrivalNotification arrivalNotification) { - SweeperTaskModel.getInstance().onArriveTaskEnd(arrivalNotification); - } - - @Override - public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) { - if (cleanSystemState == null) { - return; - } - long current = System.currentTimeMillis(); - if (current - mVehicleStateCurrentTimeMillis <= VEHICLE_STATE_INTERVAL_MILLIS) { - return; - } - mVehicleStateCurrentTimeMillis = current; - boolean clean_open_requirement = cleanSystemState.getSecuMotWorkSts(); - // 洗扫 - boolean clean_mode_wash_sweep = cleanSystemState.getSecuModWashSweepSts(); - // 纯洗 - boolean clean_mode_pure_wash = cleanSystemState.getSecuModWashSts(); - // 纯吸 - boolean clean_mode_pure_draw = cleanSystemState.getSecuWorkTonSts(); - // 左侧 - boolean clean_direction_left_side = cleanSystemState.getSecuWorkLeftSts(); - // 右侧 - boolean clean_direction_right_side = cleanSystemState.getSecuWorkRightSts(); - // 两侧 - boolean clean_direction_both_side = cleanSystemState.getSecuWorkOnBothsidesSts(); - // 作业强度状态 - boolean clean_intensity_standard = cleanSystemState.getSecuWorkStandSts(); - boolean clean_intensity_strong = cleanSystemState.getSecuWorkStrongSts(); - - // 纯扫 模式判断:不是另外其他3个模式,同时有清扫方向,说明开启了纯扫模式 - boolean clean_mode_pure_sweep = SweeperFutianCmdUtil.checkIfCleanModePureSweep(cleanSystemState); - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("开关:") - .append(clean_open_requirement) - .append("\n") - .append("纯扫:") - .append(clean_mode_wash_sweep) - .append("纯洗:") - .append(clean_mode_pure_wash) - .append("纯吸:") - .append(clean_mode_pure_draw) - .append("纯扫:") - .append("\n") - .append(clean_mode_pure_sweep) - .append("左侧:") - .append(clean_direction_left_side) - .append("右侧:") - .append(clean_direction_right_side) - .append("两侧:") - .append("\n") - .append(clean_direction_both_side) - .append("标准:") - .append(clean_intensity_standard) - .append("强力:") - .append(clean_intensity_strong); - - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCleanSystemState:" + stringBuilder); - mView.onSweeperFutianCleanSystemState(cleanSystemState); - } - - @Override - public void onSweeperFutianTaskIndexData(@NonNull RoboSweeperTaskIndexOuterClass.RoboSweeperTaskIndex roboSweeperTaskIndex) { - if (roboSweeperTaskIndex == null) { - return; - } - long current = System.currentTimeMillis(); - if (current - mWeltDataCurrentTimeMillis <= WELT_DATA_INTERVAL_MILLIS) { - return; - } - mWeltDataCurrentTimeMillis = current; - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("清扫模式:") - .append(roboSweeperTaskIndex.getCleanMode()) - .append("清扫方向:") - .append(roboSweeperTaskIndex.getCleanDirection()) - .append("清扫强度:") - .append(roboSweeperTaskIndex.getCleanIntensity()) - .append("贴边距离:") - .append(roboSweeperTaskIndex.getDistToRefEdgePoint()) - .append("经度:") - .append(roboSweeperTaskIndex.getLocLon()) - .append("纬度:") - .append(roboSweeperTaskIndex.getLocLat()); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianTaskIndexData:" + stringBuilder); - String tempLongitude=NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLon(), 6); - String tempLatitude=NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLat(), 6); - //用于过滤车是否停在原地,经纬度相同的情况 - if (!tempLongitude.equals(longitude)&&!tempLatitude.equals(latitude)){ - latitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLat(), 6); - longitude = NumberFormatUtil.cutOutNumber(roboSweeperTaskIndex.getLocLon(), 6); - //保存贴边数据到数据库中 - WeltDataBean weltDataBean = new WeltDataBean(); - //把wgs坐标系坐标转换成gcj坐标 - LatLng latLng = CoordinateCalculateRouteUtil.coordinateConverterWgsToGcj(AbsMogoApplication.getApp(), roboSweeperTaskIndex.getLocLon(), - roboSweeperTaskIndex.getLocLat()); - weltDataBean.setLocLon(latLng.longitude); - weltDataBean.setLocLat(latLng.latitude); - int edgeCleanState = roboSweeperTaskIndex.getEdgeCleanState(); - if(edgeCleanState==0){ - weltDataBean.setWeltDistance(SweeperConst.NONWELT); - }else { - weltDataBean.setWeltDistance(roboSweeperTaskIndex.getDistToRefEdgePoint()); - } - weltDataBean.setCleanMode(roboSweeperTaskIndex.getCleanMode()); - weltDataBean.setCleanDirection(roboSweeperTaskIndex.getCleanDirection()); - weltDataBean.setCleanIntensity(roboSweeperTaskIndex.getCleanIntensity()); - weltDataBean.setSubTaskId(mSubTaskId); - MyDataBase.getInstance().getWeltDataDao().insert(weltDataBean); - String distance; - if (roboSweeperTaskIndex.getDistToRefEdgePoint() >= 1.0) {//大于等于1m - distance = format(roboSweeperTaskIndex.getDistToRefEdgePoint()) + "m"; - } else {//小于1m - distance = Math.round(roboSweeperTaskIndex.getDistToRefEdgePoint() * 100) + "cm";//m->cm 四舍五入到整数 - } - mView.setWeltDataToMap((ArrayList) MyDataBase.getInstance().getWeltDataDao().loadAllWeltDataInfo(), true, distance); - } - } - - public static String format(double value) { - BigDecimal bd = new BigDecimal(value); - bd = bd.setScale(2, RoundingMode.HALF_UP); - return bd.toString(); - } - /** * 获取当前正在执行的任务 */ @@ -378,32 +117,54 @@ public class SweeperPresenter extends Presenter SweeperTaskModel.getInstance().getCurrentTask(); } - @Override - public void setMainTaskList(List mainTaskBeanList, boolean refresh) { - - } - - @Override - public void setSubTaskBean(SweeperSubTaskBean subTaskBean, boolean isWorkingSubTask) { - - } - - @Override - public void updateSubTaskStatus(TaskStatusEnum typeEnum, boolean isLastSubTask) { - - } - - @Override - public void setMainTaskReset(boolean isSuccess) { - - } - - @Override - public void setSubTakDetail(@NonNull SweeperSubTaskDetailBean subTaskDetailBean, SubTaskTypeEnum subTaskTypeEnum) { - } - @Override public void setRouteList(@NonNull ArrayList routeList) { - mView.setTaskRouteList(routeList); + mView.setTaskRouteList(routeList); + } + + @Override + public void onSweeperCloudTask(@NonNull SweeperCloudTask.MessageType messageType, @NonNull SweeperTask.TaskInfo taskInfo) { + + } + + @Override + public void onSweeperCloudTaskConfirm(@NonNull String taskId, @NonNull String subTaskId) { + + } + + @Override + public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, @NonNull SweeperCommon.TaskStatus subTaskStatus) { + + } + + @Override + public void onSweeperCloudTaskStop(@NonNull String taskId, @NonNull SweeperTaskStop.StopTaskType stopTaskType) { + + } + + @Override + public void onSweeperCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String taskId, + @NonNull String subTaskId, @NonNull SweeperCommon.Code code) { + + } + + @Override + public void onSweeperCloudBootable(@NonNull String taskId, @NonNull String subTaskId, @NonNull SweeperCommon.Code code) { + + } + + @Override + public void onSweeperCloudBigTaskStatus(@NonNull String taskId, @NonNull SweeperBigTaskStatus.BigTaskStatus subTaskStatus) { + + } + + @Override + public void setWeltDataToMap(@NonNull ArrayList weltDataBeans, boolean isWeltData, @NonNull String distance) { + mView.setWeltDataToMap(weltDataBeans,isWeltData,distance); + } + + @Override + public void onSweeperFutianCleanSystemState(@NonNull ChassisStatesOuterClass.SweeperFuTianTaskSystemStates cleanSystemState) { + mView.onSweeperFutianCleanSystemState(cleanSystemState); } } diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/adapter/TaskListAdapter.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/adapter/TaskListAdapter.kt deleted file mode 100644 index e562aeaf32..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/adapter/TaskListAdapter.kt +++ /dev/null @@ -1,79 +0,0 @@ -package com.mogo.och.sweepercloud.ui.adapter - -import android.graphics.Color -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import com.mogo.och.common.module.utils.DateTimeUtil -import com.mogo.och.sweepercloud.R -import com.mogo.och.sweepercloud.bean.SweeperMainTaskBean - -class TaskListAdapter() : RecyclerView.Adapter() { - private var mItemClickListener: TaskItemClickListener? = null - private var mSelectPosition: Int = -1 - private var data:MutableList?=null - fun setOnTaskItemClickListener(itemClickListener: TaskItemClickListener?) { - mItemClickListener = itemClickListener - } - - class TaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { - val selectIv: ImageView - val taskName: TextView//任务名称 - val taskDesc: TextView//任务描述 - val tvTaskTime: TextView//任务时间 - - init { - selectIv = itemView.findViewById(R.id.ivTaskSelect) - taskName = itemView.findViewById(R.id.tvTaskName) - taskDesc = itemView.findViewById(R.id.tvTaskDesc) - tvTaskTime = itemView.findViewById(R.id.tvTaskTime) - } - } - - fun selectPosition(position: Int) { - this.mSelectPosition = position - notifyDataSetChanged() - } - fun setTaskListData(data: MutableList?){ - this.data=data - notifyDataSetChanged() - } - interface TaskItemClickListener { - fun onItemClick(position: Int,mainTask:SweeperMainTaskBean) - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskViewHolder { - val view = LayoutInflater.from(parent.context).inflate( - R.layout.sweeper_item_task_info, parent, false - ) - return TaskViewHolder(view) - } - - override fun onBindViewHolder(holder: TaskViewHolder, position: Int) { - data?.let { mainTask-> - holder.taskName.text= mainTask[position].mainTaskName - holder.taskDesc.text= "全程包含${mainTask[position].subTaskTotal}个子任务" - val calendar = DateTimeUtil.formatLongToCalendar(mainTask[position].mainTaskStartTime) - if (DateTimeUtil.compareDateIsCurrentDay(calendar)){ - holder.tvTaskTime.text="今天${DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm)}" - }else{ - holder.tvTaskTime.text=DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.MM_dd_HH_mm) - } - holder.itemView.setOnClickListener { - mItemClickListener?.onItemClick(position,mainTask[position]) - } - } - if (position == mSelectPosition) { - holder.selectIv.visibility = View.VISIBLE - holder.itemView.setBackgroundColor(Color.parseColor("#FF122B4E")) - } else { - holder.selectIv.visibility = View.GONE - holder.itemView.setBackgroundColor(Color.parseColor("#00000000")) - } - } - - override fun getItemCount(): Int = data?.size ?: 0 -} \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/popwindow/MenuPopWindow.kt b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/popwindow/MenuPopWindow.kt deleted file mode 100644 index d713528736..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/ui/popwindow/MenuPopWindow.kt +++ /dev/null @@ -1,91 +0,0 @@ -package com.mogo.och.sweepercloud.ui.popwindow - -import android.content.Context -import android.graphics.Color -import android.graphics.drawable.ColorDrawable -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup.LayoutParams -import android.widget.PopupWindow -import android.widget.TextView -import com.mogo.och.sweepercloud.R -import com.mogo.och.sweepercloud.constant.TaskStatusEnum - -/** - * 当前任务操作菜单栏 - */ -class MenuPopWindow : PopupWindow, View.OnClickListener{ - - private var mTvJumpOverTask: TextView? = null - - private var mTaskJumpLineView: View? = null - - private var mTvEndTask: TextView? = null - - private var mTvCancelTask: TextView? = null - - private var mMenuItemClickListener:OnMenuItemOnClickListener?=null - - constructor(context: Context,menuItemClickListener:OnMenuItemOnClickListener) : super(context) { - init(context) - this.mMenuItemClickListener=menuItemClickListener - } - - /** - * 初始化布局 - */ - private fun init(context: Context) { - setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) - var view: View = LayoutInflater.from(context).inflate(R.layout.sweeper_task_menu, null) - mTvJumpOverTask = view.findViewById(R.id.tvJumpOverTask) - mTaskJumpLineView = view.findViewById(R.id.taskJumpLineView) - mTvEndTask = view.findViewById(R.id.tvEndTask) - mTvCancelTask = view.findViewById(R.id.tvCancelTask) - mTvJumpOverTask?.setOnClickListener(this) - mTvEndTask?.setOnClickListener(this) - mTvCancelTask?.setOnClickListener(this) - width = context.resources.getDimension(R.dimen.dp_174).toInt() - height = LayoutParams.WRAP_CONTENT - contentView = view - isFocusable = true - isOutsideTouchable = true - } - - /** - * 设置是否是手动任务 - * 1:云端自动驾驶任务 - * 2:云端手动驾驶任务 - * 3: 运营任务 - */ - fun setMenuView(type: Int) { - if (type == 1) { - mTvJumpOverTask?.visibility = View.GONE - mTaskJumpLineView?.visibility = View.GONE - } else { - mTvJumpOverTask?.visibility = View.VISIBLE - mTaskJumpLineView?.visibility = View.VISIBLE - } - } - - interface OnMenuItemOnClickListener { - fun onMenuItemClick(itemType: TaskStatusEnum) - } - - override fun onClick(v: View) { - when(v.id){ - R.id.tvJumpOverTask->{ - mMenuItemClickListener?.onMenuItemClick(TaskStatusEnum.JUMP_OVER_SUBTASK) - dismiss() - } - R.id.tvEndTask->{ - mMenuItemClickListener?.onMenuItemClick(TaskStatusEnum.END_TASK) - dismiss() - } - R.id.tvCancelTask->{ - mMenuItemClickListener?.onMenuItemClick(TaskStatusEnum.CANCEL_TASK) - dismiss() - } - } - } - -} \ No newline at end of file diff --git a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperTrajectoryManager.java b/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperTrajectoryManager.java deleted file mode 100644 index d4ac359602..0000000000 --- a/OCH/sweeper/sweeper-cloud/src/main/java/com/mogo/och/sweepercloud/util/SweeperTrajectoryManager.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.mogo.och.sweepercloud.util; - -import com.mogo.eagle.core.data.autopilot.AutopilotControlParameters; -import com.mogo.eagle.core.function.call.autopilot.CallerAutoPilotControlManager; -import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; -import com.mogo.eagle.core.utilcode.util.GsonUtils; -import com.mogo.och.sweepercloud.bean.SweeperSubTaskDetailBean; -import com.mogo.och.sweepercloud.constant.SweeperConst; - -import java.util.concurrent.TimeUnit; - -import androidx.annotation.Nullable; -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; -import mogo_msg.MogoReportMsg; - -import static com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant.M_SWEEPER; - -/** - * Bus轨迹管理:给MEC下发用于轨迹下载的信息 - * Created on 2022/6/23 - */ -public class SweeperTrajectoryManager { - private static final String TAG = SweeperTrajectoryManager.class.getSimpleName(); - - private static final class SingletonHolder { - private static final SweeperTrajectoryManager INSTANCE = new SweeperTrajectoryManager(); - } - - public static SweeperTrajectoryManager getInstance() { - return SweeperTrajectoryManager.SingletonHolder.INSTANCE; - } - - private AutopilotControlParameters.AutoPilotLine mAutoPilotLine = null; - private Disposable mSendReqDisposable = null; - - public SweeperTrajectoryManager() { - mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(-1, - "", "", "", "", 0, "", - "", "", "", "", 0); - } - - /** - * 同步Bus路线信息 - */ - public void syncTrajectoryInfo(SweeperSubTaskDetailBean sweeperSubTaskDetailBean) { - if (sweeperSubTaskDetailBean != null) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "syncTrajectoryInfo() start."); - startTrajReqLoop(sweeperSubTaskDetailBean); - } else { - // 无路线信息or当前未在始发站 - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "syncTrajectoryInfo() stop."); - stopTrajReqLoop(); - } - } - - /** - * 接口MEC反馈的常规信息(MAP v2.5.0新增轨迹相关信息) - * - * @param guardianInfo - */ - public void onAutopilotGuardian(@Nullable MogoReportMsg.MogoReportMessage guardianInfo) { - if (guardianInfo == null || !guardianInfo.hasCode()) return; - if ("ISYS_INIT_TRAJECTORY_START".equals(guardianInfo.getCode())) { - // 1. 轨迹管理_轨迹开始下载(本地已有对应轨迹也触发) - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotGuardian() 轨迹开始下载"); - // ToastUtils.showShort("轨迹开始下载"); - stopTrajReqLoop(); - } else if ("ISYS_INIT_TRAJECTORY_SUCCESS".equals(guardianInfo.getCode())) { - // 2. 轨迹管理_轨迹下载成功(本地已有对应轨迹也触发) - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotGuardian() 轨迹下载成功"); - // ToastUtils.showShort("轨迹下载成功"); - stopTrajReqLoop(); - } else if ("ISYS_INIT_TRAJECTORY_FAILURE".equals(guardianInfo.getCode())) { - // 3. 轨迹管理_轨迹下载失败,本地无对应轨迹 - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotGuardian() " + - "轨迹下载失败,本地无对应轨迹"); - // ToastUtils.showShort("轨迹下载失败,本地无对应轨迹"); - } else if ("ISYS_INIT_TRAJECTORY_WARNING".equals(guardianInfo.getCode())) { - // 4. 轨迹管理_轨迹下载失败,本地有对应轨迹,认为成功 - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotGuardian() " + - "轨迹下载失败,本地有对应轨迹,认为成功"); - // ToastUtils.showShort("轨迹下载失败,本地有对应轨迹,认为成功"); - } else if ("ISYS_INIT_TRAJECTORY_TIMEOUT".equals(guardianInfo.getCode())) { - // 5. 轨迹管理_轨迹下载超时 - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotGuardian() 轨迹下载超时"); - // ToastUtils.showShort("轨迹下载超时"); - } - } - - private void setupAutoPilotLine(SweeperSubTaskDetailBean subTaskDetail) { - if (subTaskDetail == null) { - CallerLogger.INSTANCE.e(M_SWEEPER + TAG, "setupAutoPilotLine(): routesResult is null."); - return; - } else { - mAutoPilotLine = new AutopilotControlParameters.AutoPilotLine(subTaskDetail.getLineId(), - subTaskDetail.getCsvFileUrl(), subTaskDetail.getCsvFileMd5(), - subTaskDetail.getTxtFileUrl(), subTaskDetail.getTxtFileMd5(), - subTaskDetail.getPublishTime(), subTaskDetail.getCarModel(), - subTaskDetail.getCsvFileUrlDPQP(), subTaskDetail.getCsvFileMd5DPQP(), - subTaskDetail.getTxtFileUrlDPQP(), subTaskDetail.getTxtFileMd5DPQP(), - subTaskDetail.getPublishTimeDPQP()); - } - } - - private void clearAutoPilotLine() { - if (mAutoPilotLine == null) return; - mAutoPilotLine.setLineId(-1); - mAutoPilotLine.setTrajUrl(""); - mAutoPilotLine.setTrajMd5(""); - mAutoPilotLine.setStopUrl(""); - mAutoPilotLine.setStopMd5(""); - mAutoPilotLine.setTimestamp(0); - mAutoPilotLine.setVehicleModel(""); - mAutoPilotLine.setTrajUrl_dpqp(""); - mAutoPilotLine.setTrajMd5_dpqp(""); - mAutoPilotLine.setStopUrl_dpqp(""); - mAutoPilotLine.setStopMd5_dpqp(""); - mAutoPilotLine.setTimestamp_dpqp(0); - } - - private void startTrajReqLoop(SweeperSubTaskDetailBean sweeperSubTaskDetailBean) { - if (mSendReqDisposable != null && !mSendReqDisposable.isDisposed()) { - return; - } - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "startTrajReqLoop()"); - setupAutoPilotLine(sweeperSubTaskDetailBean); - mSendReqDisposable = Observable.interval(SweeperConst.LOOP_DELAY, - SweeperConst.LOOP_PERIOD_10S, TimeUnit.MILLISECONDS) - .map((aLong -> aLong + 1)) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(aLong -> { - if (aLong > SweeperConst.LOOP_SEND_TRAJ_TIMES) { - stopTrajReqLoop(); - return; - } - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "loop sendTrajectoryReq: " + aLong); - sendTrajectoryReq(); - }); - } - - public void stopTrajReqLoop() { - if (mSendReqDisposable != null) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "stopTrajReqLoop()"); - mSendReqDisposable.dispose(); - mSendReqDisposable = null; - clearAutoPilotLine(); - } - } - - private void sendTrajectoryReq() { - if (mAutoPilotLine == null) { - CallerLogger.INSTANCE.e(M_SWEEPER + TAG, "sendTrajectoryReq(): mAutoPilotLine is null!!!"); - return; - } - - // TODO: 2022/6/24 - // test1 -// mAutoPilotLine.setLineId(148); -// mAutoPilotLine.setTrajUrl("http://file-qa.zhidaozhixing.com/fileServer/upload/downloadFileStream?key=fileServer/online_car_hailing/e27c20c2da32481021d934c3ef084536/traj_148.csv"); -// mAutoPilotLine.setTrajMd5("e27c20c2da32481021d934c3ef084536"); -// mAutoPilotLine.setStopUrl("http://file-qa.zhidaozhixing.com/fileServer/upload/downloadFileStream?key=fileServer/online_car_hailing/6224c9dd2c0e2bd990c6482c0464de45/stop_148.txt"); -// mAutoPilotLine.setStopMd5("6224c9dd2c0e2bd990c6482c0464de45"); -// mAutoPilotLine.setTimestamp(1654596000000L); //20220607 18:00 -// mAutoPilotLine.setVehicleModel("红旗H9"); - - // test2 -// mAutoPilotLine.setLineId(148); -// mAutoPilotLine.setTrajUrl("http://file-qa.zhidaozhixing.com/fileServer/upload/downloadFileStream?key=fileServer/online_car_hailing/8654497cf918be461a59c7ad8e22920d/traj_148.csv"); -// mAutoPilotLine.setTrajMd5("8654497cf918be461a59c7ad8e22920d"); -// mAutoPilotLine.setStopUrl("http://file-qa.zhidaozhixing.com/fileServer/upload/downloadFileStream?key=fileServer/online_car_hailing/1bb098b244922649bf3e7bada0d3950f/stop_148.txt"); -// mAutoPilotLine.setStopMd5("1bb098b244922649bf3e7bada0d3950f"); -// mAutoPilotLine.setTimestamp(1654761600000L); //20220609 16:00 -// mAutoPilotLine.setVehicleModel("红旗H9"); - - CallerAutoPilotControlManager.INSTANCE.sendTrajectoryDownloadReq(mAutoPilotLine); - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "sendTrajectoryReq(): " - + GsonUtils.toJson(mAutoPilotLine)); - } -} 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 cef3af8496..bd09b232b8 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 @@ -7,7 +7,7 @@ import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.och.sweepercloud.R -import com.mogo.och.sweepercloud.bean.SubInfo +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo import kotlinx.android.synthetic.main.sweeper_subtask_view.view.* /** @@ -29,8 +29,8 @@ class SubTaskView : ConstraintLayout { /** * 设置子任务信息 */ - fun setData(taskInfo: SubInfo, isSelect: Boolean = false, isLastTask: Boolean = false) { - tvSubTaskName.text = taskInfo.taskName + fun setData(taskInfo: SubTaskInfo, isSelect: Boolean = false, isLastTask: Boolean = false) { + tvSubTaskName.text = taskInfo.subTaskName tvSubTaskName.setTextColor(if (isSelect) Color.parseColor("#3BD2FF") else Color.parseColor("#FFFFFF")) if (isSelect) { ivSubTask.setImageResource(R.drawable.sweeper_icon_select_subtask) 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 301b513e3e..371f83ffed 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 @@ -7,9 +7,8 @@ import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.sweepercloud.R -import com.mogo.och.sweepercloud.bean.SubInfo -import com.mogo.och.sweepercloud.bean.SweeperSubTaskBean -import com.mogo.och.sweepercloud.constant.SubTaskTypeEnum +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.SubTaskInfo +import com.zhjt.mogo.adas.data.sweeper.task.SweeperTask.TaskInfo import kotlinx.android.synthetic.main.sweeper_current_task_info.view.* /** @@ -20,8 +19,8 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { //当前任务操作菜单 private var mCurrentPosition = 0 - private var listTask: List? = null - private var mSubTaskType: SubTaskTypeEnum = SubTaskTypeEnum.AUTOPILOT_SUBTYPE + private var listTask: List? = null + private var mSubTaskType: Int=0 private var mSubTaskStatus: Int = 1 constructor(context: Context) : super(context) {} @@ -41,19 +40,19 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { * 设置当前任务数据 */ fun setData( - subTaskBean: SweeperSubTaskBean?, + subTaskBean: TaskInfo?, currentPosition: Int, ) { this.mCurrentPosition = currentPosition subTaskBean?.apply { - this@SweeperCurrentTaskInfoView.listTask = subList + this@SweeperCurrentTaskInfoView.listTask = subListList tvTaskName.text = taskName val calendar = DateTimeUtil.formatLongToCalendar(taskStartTime) tvTaskTime.text = DateTimeUtil.formatCalendarToString(calendar, DateTimeUtil.HH_mm) } listTask?.let { - mSubTaskStatus = it[currentPosition].taskStatus - setSubTaskState(mSubTaskStatus == 2) + mSubTaskStatus = it[currentPosition].taskStatus.number + setSubTaskState(mSubTaskStatus == 1) } setCurrentData(currentPosition) } @@ -75,8 +74,7 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { */ fun setCurrentData(mCurrentPosition: Int) { listTask?.let { - mSubTaskType = - if (it[mCurrentPosition].taskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE.code) SubTaskTypeEnum.AUTOPILOT_SUBTYPE else SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE + mSubTaskType = it[mCurrentPosition].taskModel.number if (it.size == 1) { preSubTask.setData(it[mCurrentPosition], isSelect = true, isLastTask = true) currentSubTask.visibility = View.INVISIBLE 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 0f9dc6c4de..46a46f24a2 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 @@ -12,7 +12,6 @@ import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.och.sweepercloud.R import com.mogo.och.sweepercloud.callback.ICleaningModeStateCallback import com.mogo.och.sweepercloud.constant.OperateStateEnum -import com.mogo.och.sweepercloud.constant.SubTaskTypeEnum import com.mogo.och.sweepercloud.ui.popwindow.SweeperOperatePanelPopWindow import com.mogo.och.sweepercloud.util.SweeperFutianCmdUtil import kotlinx.android.synthetic.main.sweeper_work_mode.view.* @@ -68,7 +67,7 @@ class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback { /** * 设置清扫模式面板 */ - fun setSweeperFutianCleanSystemState(taskType: SubTaskTypeEnum, cleanSystemState: SweeperFuTianTaskSystemStates?) { + fun setSweeperFutianCleanSystemState(taskType: Int, cleanSystemState: SweeperFuTianTaskSystemStates?) { // TODO:传递清扫车底盘数据给上装面板 //mOperatePanelPopWindow?.setCleanSystemState(cleanSystemState, this@SweeperWorkModeView) if (this.operateState.code==OperateStateEnum.STARTING_STATUS.code){ @@ -80,7 +79,7 @@ class SweeperWorkModeView : ConstraintLayout,ICleaningModeStateCallback { d(SceneConstant.M_SWEEPER + TAG, "SystemState operateState:"+operateState.code) } //清扫车暂未选择清扫模式或者任务类型是人工驾驶子任务,则暂无清扫模式 - if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) { + if (SweeperFutianCmdUtil.checkIfCleanMode(cleanSystemState) || taskType==1) { setShowOrHideCleanSystemState(OperateStateEnum.NO_STATUS, cleanSystemState) } else { setShowOrHideCleanSystemState(OperateStateEnum.SUCCESS_STATUS, cleanSystemState)