From 5cb698a9ca95f5d91e053e0d2a05d1a23b6d6233 Mon Sep 17 00:00:00 2001 From: bxb Date: Mon, 27 Feb 2023 18:23:11 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=B8=85=E6=89=AB=E8=BD=A6]=E5=AD=90=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E8=AF=A6=E6=83=85=E8=8E=B7=E5=8F=96=E4=B8=8E=E5=AD=90?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=BC=80=E5=A7=8B=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mogo/och/sweeper/constant/SweeperConst.kt | 3 +- .../fragment/BaseSweeperTabFragment.java | 2 +- .../och/sweeper/fragment/SweeperFragment.kt | 21 ++- .../fragment/WeltMapOverViewFragment.kt | 4 +- .../och/sweeper/model/SweeperTaskModel.java | 138 ++++++++++-------- .../och/sweeper/net/ISweeperApiService.java | 14 +- .../och/sweeper/net/SweeperServiceManager.kt | 21 ++- .../sweeper/presenter/SweeperPresenter.java | 15 +- .../view/SweeperCurrentTaskInfoView.kt | 6 +- .../main/res/layout/fragment_och_sweeper.xml | 6 +- .../res/layout/sweeper_welt_map_overview.xml | 3 +- 11 files changed, 135 insertions(+), 98 deletions(-) diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/SweeperConst.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/SweeperConst.kt index b060d6b76a..03d67d5044 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/SweeperConst.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/constant/SweeperConst.kt @@ -9,8 +9,7 @@ class SweeperConst { companion object { private const val BASE_URL_OCH_DEV = "https://och-driver-dev.zhidaozhixing.com" - //private const val BASE_URL_OCH_QA = "https://och-driver-qa.zhidaozhixing.com" - private const val BASE_URL_OCH_QA = "https://och-driver-dev.zhidaozhixing.com" + private const val BASE_URL_OCH_QA = "https://och-driver-qa.zhidaozhixing.com" private const val BASE_URL_OCH_RELEASE = "https://och-driver.zhidaozhixing.com" @JvmStatic diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java index 3b0701fc19..7ea9fa62aa 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/BaseSweeperTabFragment.java @@ -427,8 +427,8 @@ public abstract class BaseSweeperTabFragment weltDataBeans,Boolean isWeltData) { if (mMapWeltView != null) { - mMapWeltView.setWeltData(weltDataBeans,isWeltData); runOnUIThread(() -> { + mMapWeltView.setWeltData(weltDataBeans,isWeltData); mMapWeltView.drawablePolyline(); }); } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt index 77ece57674..b9a41f2154 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/fragment/SweeperFragment.kt @@ -3,6 +3,7 @@ package com.mogo.och.sweeper.fragment import android.os.Bundle import android.view.View import androidx.annotation.UiThread +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import chassis.ChassisStatesOuterClass import com.mogo.commons.AbsMogoApplication @@ -25,6 +26,8 @@ import com.mogo.och.sweeper.ui.dialog.SweeperNoTitleCommonDialog import com.mogo.och.sweeper.ui.popwindow.MenuPopWindow import kotlinx.android.synthetic.main.fragment_och_sweeper.* import kotlinx.android.synthetic.main.sweeper_no_data_common_view.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch /** * 清扫车主界面 @@ -169,7 +172,9 @@ class SweeperFragment : BaseSweeperTabFragment - presenter?.getSubTaskDetail(subInfo.taskId, mSubTaskType)//加载子任务详情包括轨迹信息 + presenter?.getSubTaskDetail(isFirstSubTask(), isLastSubTask(),subInfo.taskId, mSubTaskType,false)//加载子任务详情包括轨迹信息 } } else { manualDriving(mSubInfo) @@ -225,6 +230,7 @@ class SweeperFragment : BaseSweeperTabFragment, - latLngs: ArrayList + weltDataList: ArrayList?, + latLngs: ArrayList? ): WeltMapOverViewFragment { val args = Bundle() args.putSerializable("weltDataList", weltDataList) diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java index bcd0437f44..369e7dfca3 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/model/SweeperTaskModel.java @@ -3,7 +3,6 @@ package com.mogo.och.sweeper.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; @@ -17,6 +16,7 @@ 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.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.call.autopilot.CallerAutoPilotControlManager; @@ -81,9 +81,9 @@ public class SweeperTaskModel { private ISweeperTaskCallback mSweeperTaskCallback; List points = new ArrayList<>();//全路径信息 //当前子任务详情信息包括轨迹文件信息 - private SweeperSubTaskDetailBean currentSubTaskDetail; + private SweeperSubTaskDetailBean mCurrentSubTaskDetail; //子任务是否正在进行中 - private boolean isSubTaskWorking = false; + private boolean mIsSubTaskWorking = false; //自动驾驶是否到达子任务终点 private boolean isArriveSubTaskEndSite = false; //当前子任务id @@ -94,6 +94,8 @@ public class SweeperTaskModel { private boolean mIsFirstSubtask = false; //0: 代表没有启动过 1代表是启动第一次,当>=1 代表是重试 每次子任务结束/主任务结束清空置为0 private volatile int firstStartAutopilot = 0; + //自动驾驶状态 + private int mAutopilotState = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE; public static SweeperTaskModel getInstance() { if (sInstance == null) { @@ -184,12 +186,20 @@ public class SweeperTaskModel { } }; - public void setSubtask(boolean isFirstSubtask,boolean isLastSubtask,int subTaskId) { + + public void setSubtask(boolean isFirstSubtask, boolean isLastSubtask, int subTaskId) { this.mIsLastSubtask = isLastSubtask; - this.mIsFirstSubtask=isFirstSubtask; - this.mSubTaskId=subTaskId; + this.mIsFirstSubtask = isFirstSubtask; + this.mSubTaskId = subTaskId; } + /** + * 保存自动驾驶状态 + * @param autopilotState + */ + public void setAutopilotState(int autopilotState){ + this.mAutopilotState=autopilotState; + } public static List coordinateConverterWgsToGcjList(Context mContext, List mogoLatLngList) { List points = new ArrayList<>(); @@ -251,7 +261,7 @@ public class SweeperTaskModel { mControllerStatusCallback.onCarLocationChanged(gnssInfo); } //子任务完成的围栏判断 子任务正在执行中,还未到达子任务终点 - if (isSubTaskWorking && !isArriveSubTaskEndSite) { + if (mIsSubTaskWorking && !isArriveSubTaskEndSite) { judgeArrivedStation(gnssInfo); } } @@ -259,14 +269,14 @@ public class SweeperTaskModel { //根据围栏判断,是否到达子任务终点 private void judgeArrivedStation(MogoLocation location) { - double endSiteLon = currentSubTaskDetail.getEndSiteLon(); - double endSiteLat = currentSubTaskDetail.getEndSiteLat(); + 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 " + currentSubTaskDetail.getEndSiteName()); + + " to " + mCurrentSubTaskDetail.getEndSiteName()); onArriveTaskEnd(null); //无自动驾驶到终点信息传null return; } @@ -276,9 +286,10 @@ public class SweeperTaskModel { * 在踩刹车、控制方向盘等操作后,会停止自动驾驶,重启自动驾驶的话相当于重新设置自动驾驶目的地 */ public void startAutopilot() { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-重启自动驾驶===" + isSubTaskWorking); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-重启自动驾驶===" + mIsSubTaskWorking); //只去启动自动驾驶 startAutopilot(firstStartAutopilot >= 1); + mIsSubTaskWorking=true; } /** @@ -314,7 +325,7 @@ public class SweeperTaskModel { * 获取任务子任务执行状态 */ public boolean getSubWorking() { - return isSubTaskWorking; + return mIsSubTaskWorking; } /** @@ -342,37 +353,37 @@ public class SweeperTaskModel { public void onArriveTaskEnd(MessagePad.ArrivalNotification data) { //MAP 280 每隔100ms左右返回一次到站, 导致在到达中间站后再次滑动出发后会有时间差,收到一次到站,出现问题 //此处比对 自驾告诉的子任务终点坐标和本地应到子任务终点坐标, 一致时才表示子任务完成 - if (data != null && data.getEndLocation() != null&¤tSubTaskDetail!=null) { + if (data != null && data.getEndLocation() != null && mCurrentSubTaskDetail != null) { String latitude = NumberFormatUtil.cutOutNumber(data.getEndLocation().getLatitude(), 5); //wgs String longitude = NumberFormatUtil.cutOutNumber(data.getEndLocation().getLongitude(), 5); - String arriveLat = NumberFormatUtil.cutOutNumber(currentSubTaskDetail.getEndSiteWgs64Lat(), 5); - String arriveLon = NumberFormatUtil.cutOutNumber(currentSubTaskDetail.getEndSiteWgs64Lon(), 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; } } - if (isArriveSubTaskEndSite)return; + if (isArriveSubTaskEndSite) return; CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "行程日志-当前==subTaskId=" + mSubTaskId); //到达子任务终点 结束子任务 - subTaskEnd(mIsFirstSubtask,mIsLastSubtask,mSubTaskId); + subTaskEnd(mIsFirstSubtask, mIsLastSubtask, mSubTaskId); } public void triggerStartServiceEvent(boolean isRestart, boolean send) { - if (currentSubTaskDetail == null) { + if (mCurrentSubTaskDetail == null) { return; } SweeperAnalyticsManager.getInstance().triggerStartAutopilotEvent(isRestart, send, - currentSubTaskDetail.getStartSiteName(), currentSubTaskDetail.getEndSiteName(), currentSubTaskDetail.getLineId()); + mCurrentSubTaskDetail.getStartSiteName(), mCurrentSubTaskDetail.getEndSiteName(), mCurrentSubTaskDetail.getLineId()); } public void triggerUnableStartAPReasonEvent() { - if (currentSubTaskDetail == null) { + if (mCurrentSubTaskDetail == null) { return; } SweeperAnalyticsManager.getInstance().triggerUnableStartAPReasonEvent( - currentSubTaskDetail.getStartSiteName(), currentSubTaskDetail.getEndSiteName(), currentSubTaskDetail.getLineId(), + mCurrentSubTaskDetail.getStartSiteName(), mCurrentSubTaskDetail.getEndSiteName(), mCurrentSubTaskDetail.getLineId(), OCHAdasAbilityManager.getInstance().getAutopilotUnAbilityReason()); } @@ -397,24 +408,24 @@ public class SweeperTaskModel { private AutopilotControlParameters initAutopilotControlParameters() { AutopilotControlParameters parameters = new AutopilotControlParameters(); - if (currentSubTaskDetail != null) { - parameters.routeID = currentSubTaskDetail.getLineId(); - parameters.routeName = currentSubTaskDetail.getLineName(); - parameters.startName = PinYinUtil.getPinYinHeadChar(currentSubTaskDetail.getStartSiteName()); - parameters.endName = PinYinUtil.getPinYinHeadChar(currentSubTaskDetail.getEndSiteName()); + 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(currentSubTaskDetail.getStartSiteWgs64Lat(), currentSubTaskDetail.getStartSiteWgs64Lon()); + .AutoPilotLonLat(mCurrentSubTaskDetail.getStartSiteWgs64Lat(), mCurrentSubTaskDetail.getStartSiteWgs64Lon()); parameters.endLatLon = new AutopilotControlParameters - .AutoPilotLonLat(currentSubTaskDetail.getEndSiteWgs64Lat(), currentSubTaskDetail.getEndSiteWgs64Lon()); + .AutoPilotLonLat(mCurrentSubTaskDetail.getEndSiteWgs64Lat(), mCurrentSubTaskDetail.getEndSiteWgs64Lon()); parameters.vehicleType = VEHICLE_TYPE; parameters.autoPilotLine = new AutopilotControlParameters.AutoPilotLine( - currentSubTaskDetail.getLineId(), - currentSubTaskDetail.getCsvFileUrl(), currentSubTaskDetail.getCsvFileMd5(), - currentSubTaskDetail.getTxtFileUrl(), currentSubTaskDetail.getTxtFileMd5(), - currentSubTaskDetail.getContrailSaveTime(), currentSubTaskDetail.getCarModel(), - currentSubTaskDetail.getCsvFileUrlDPQP(), currentSubTaskDetail.getCsvFileMd5DPQP(), - currentSubTaskDetail.getTxtFileUrlDPQP(), currentSubTaskDetail.getTxtFileMd5DPQP(), - currentSubTaskDetail.getContrailSaveTimeDPQP()); + mCurrentSubTaskDetail.getLineId(), + mCurrentSubTaskDetail.getCsvFileUrl(), mCurrentSubTaskDetail.getCsvFileMd5(), + mCurrentSubTaskDetail.getTxtFileUrl(), mCurrentSubTaskDetail.getTxtFileMd5(), + mCurrentSubTaskDetail.getContrailSaveTime(), mCurrentSubTaskDetail.getCarModel(), + mCurrentSubTaskDetail.getCsvFileUrlDPQP(), mCurrentSubTaskDetail.getCsvFileMd5DPQP(), + mCurrentSubTaskDetail.getTxtFileUrlDPQP(), mCurrentSubTaskDetail.getTxtFileMd5DPQP(), + mCurrentSubTaskDetail.getContrailSaveTimeDPQP()); } return parameters; } @@ -426,11 +437,11 @@ public class SweeperTaskModel { SweeperServiceManager.getCurrentTask(mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getCurrentTask:"+GsonUtil.jsonFromObject(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); + mSweeperTaskCallback.setSubTaskBean(sweeperSubTaskBean, true); } else { getMainTaskList(); } @@ -466,7 +477,7 @@ public class SweeperTaskModel { SweeperServiceManager.getMainTaskList(mContext, new OchCommonServiceCallback>>() { @Override public void onSuccess(BaseResponse> data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getMainTaskList:"+GsonUtil.jsonFromObject(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); @@ -502,12 +513,12 @@ public class SweeperTaskModel { SweeperServiceManager.getSubTaskList(taskId, mContext, new OchCommonServiceCallback>>() { @Override public void onSuccess(BaseResponse> data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getSubTaskList:"+GsonUtil.jsonFromObject(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); + mSweeperTaskCallback.setSubTaskBean(sweeperSubTaskBean, false); } else { getMainTaskList(); } @@ -539,19 +550,25 @@ public class SweeperTaskModel { /** * 获取子任务详情包括轨迹文件信息 */ - public void getSubTaskDetail(int subTaskId, SubTaskTypeEnum subTaskType) { + 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)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "getSubTaskDetail:" + GsonUtil.jsonFromObject(data)); if (data != null) { - currentSubTaskDetail = data.getData(); - if (currentSubTaskDetail != null) { - mSweeperTaskCallback.setSubTakDetail(currentSubTaskDetail,subTaskType); + mCurrentSubTaskDetail = data.getData(); + if (mCurrentSubTaskDetail != null) { + mSweeperTaskCallback.setSubTakDetail(mCurrentSubTaskDetail, subTaskType); if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//自动驾驶子任务 //向自动驾驶发送要下载文件轨迹路径 - SweeperTrajectoryManager.getInstance().syncTrajectoryInfo(currentSubTaskDetail); + SweeperTrajectoryManager.getInstance().syncTrajectoryInfo(mCurrentSubTaskDetail); updateAutopilotControlParameters(); + /** + * 在自动驾驶状态 + */ + if (isStartSubtask&&mAutopilotState==IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_RUNNING) {//是否需要自动开始执行任务 + subTaskStart(isFirst, isEnd, subTaskId, subTaskType); + } } } } @@ -582,14 +599,14 @@ public class SweeperTaskModel { /** * 子任务开始上报 */ - public void subTaskStart(boolean isFirst,boolean isEnd,int subTaskId, SubTaskTypeEnum subTaskType) { - SweeperServiceManager.subTaskStart(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback>() { + 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)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskStart:" + GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { if (data.getData()) { - isSubTaskWorking = true; + mIsSubTaskWorking = true; isArriveSubTaskEndSite = false; mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.START_SUBTASK, false); if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) {//如果是自动驾驶子任务子开启自驾 @@ -597,7 +614,7 @@ public class SweeperTaskModel { SweeperTaskModel.getInstance().startBeautificationMode(); } startAutopilot(false); - }else{ + } else { if (FunctionBuildConfig.isDemoMode) {//美化模式开启时 FunctionBuildConfig.isIgnoreConditionsDrawAutopilotTrajectoryData = true;//是否强制绘制引导线 CallerAutoPilotControlManager.INSTANCE.setIPCDemoMode(false);//是否自动启动自驾 @@ -632,14 +649,14 @@ public class SweeperTaskModel { /** * 子任务结束上报 */ - public void subTaskEnd(boolean isFirst,boolean isEnd,int subTaskId) { - SweeperServiceManager.subTaskEnd(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback>() { + 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:"+GsonUtil.jsonFromObject(data)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskEnd:" + GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { if (data.getData()) { - isSubTaskWorking = false; + mIsSubTaskWorking = false; isArriveSubTaskEndSite = true; mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.END_SUBTASK, isEnd); if (isEnd) { @@ -680,14 +697,14 @@ public class SweeperTaskModel { /** * 子任务跳过上报 */ - public void subTaskSkip(boolean isFirst,boolean isEnd,int subTaskId) { - SweeperServiceManager.subTaskSkip(isFirst,isEnd,subTaskId, mContext, new OchCommonServiceCallback>() { + 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:"+GsonUtil.jsonFromObject(data)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "subTaskSkip:" + GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { if (data.getData()) { - isSubTaskWorking=false; + mIsSubTaskWorking = false; mSweeperTaskCallback.updateSubTaskStatus(TaskStatusEnum.JUMP_OVER_SUBTASK, isEnd); } } @@ -722,7 +739,7 @@ public class SweeperTaskModel { SweeperServiceManager.mainTaskReset(taskId, mContext, new OchCommonServiceCallback>() { @Override public void onSuccess(BaseResponse data) { - CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "mainTaskReset:"+GsonUtil.jsonFromObject(data)); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "mainTaskReset:" + GsonUtil.jsonFromObject(data)); if (mSweeperTaskCallback != null && data != null) { mSweeperTaskCallback.setMainTaskReset(data.getData()); } @@ -749,6 +766,7 @@ public class SweeperTaskModel { } }); } + //结束自动驾驶 public void cancelAutoPilot() { CallerAutoPilotControlManager.INSTANCE.cancelAutoPilot(); diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java index a5af7dcd89..efb9a3f2be 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/ISweeperApiService.java @@ -7,6 +7,7 @@ import com.mogo.och.sweeper.bean.SweeperMainTaskBean; import com.mogo.och.sweeper.bean.SweeperSubTaskDetailBean; import java.util.List; +import java.util.Map; import io.reactivex.Observable; import retrofit2.http.Body; @@ -16,6 +17,7 @@ import retrofit2.http.Header; import retrofit2.http.Headers; import retrofit2.http.POST; import retrofit2.http.Query; +import retrofit2.http.QueryMap; /** * 清扫车相关接口 @@ -43,21 +45,20 @@ public interface ISweeperApiService { * 清扫车子任务列表 * @param appId * @param ticket - * @param sn - * @param taskId + * @param map * @return */ @GET("/och-sweep/api/task/v1/subTaskList") - Observable>> getSubTaskList(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("carSn") String sn, @Query("taskId") int taskId); + Observable>> getSubTaskList(@Header ("appId") String appId, @Header("ticket") String ticket, @QueryMap Map map); /** * 子任务详情 包括子任务轨迹信息 * @param appId * @param ticket - * @param carSn + * @param map * @return */ @GET("/och-sweep/api/task/v1/subTaskInfo") - Observable> getSubTaskDetail(@Header ("appId") String appId, @Header("ticket") String ticket, @Query("carSn") String carSn ,@Query("taskId") int taskId); + Observable> getSubTaskDetail(@Header ("appId") String appId, @Header("ticket") String ticket, @QueryMap Map map); /** * 子任务开始 @@ -95,10 +96,9 @@ public interface ISweeperApiService { * 主任务重置 * @param appId * @param ticket - * @param taskId * @return */ @GET("/och-sweep/api/task/v1/mainTaskReset") - Observable> mainTaskReset(@Header ("appId") String appId, @Header("ticket") String ticket,@Query("carSn") String carSn, @Query("taskId") int taskId); + Observable> mainTaskReset(@Header ("appId") String appId, @Header("ticket") String ticket,@QueryMap Map map); } diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt index 3731529e7e..07193b5264 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/net/SweeperServiceManager.kt @@ -51,11 +51,14 @@ object SweeperServiceManager { */ @JvmStatic fun getSubTaskList(taskId: Int, context: Context, callback: OchCommonServiceCallback>>?) { + val map= hashMapOf() + map["carSn"] = MoGoAiCloudClientConfig.getInstance().sn + map["taskId"] = taskId.toString() + d(SceneConstant.M_SWEEPER + TAG, "getSubTaskDetail:" + GsonUtil.jsonFromObject(map)) mService.getSubTaskList( MoGoAiCloudClientConfig.getInstance().serviceAppId, MoGoAiCloudClientConfig.getInstance().token, - MoGoAiCloudClientConfig.getInstance().sn, - taskId + map ) .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "getSubTaskList")) @@ -66,11 +69,14 @@ object SweeperServiceManager { */ @JvmStatic fun getSubTaskDetail(subTaskId: Int, context: Context, callback: OchCommonServiceCallback>?) { + val map= hashMapOf() + map["carSn"] = MoGoAiCloudClientConfig.getInstance().sn + map["taskId"] = subTaskId.toString() + d(SceneConstant.M_SWEEPER + TAG, "getSubTaskDetail:" + GsonUtil.jsonFromObject(map)) mService.getSubTaskDetail( MoGoAiCloudClientConfig.getInstance().serviceAppId, MoGoAiCloudClientConfig.getInstance().token, - MoGoAiCloudClientConfig.getInstance().sn, - subTaskId + map ) .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "getSubTaskList")) @@ -129,11 +135,14 @@ object SweeperServiceManager { */ @JvmStatic fun mainTaskReset(taskId: Int,context: Context, callback: OchCommonServiceCallback>?) { + val map= hashMapOf() + map["carSn"] = MoGoAiCloudClientConfig.getInstance().sn + map["taskId"] = taskId.toString() + d(SceneConstant.M_SWEEPER + TAG, "mainTaskReset:" + GsonUtil.jsonFromObject(map)) mService.mainTaskReset( MoGoAiCloudClientConfig.getInstance().serviceAppId, MoGoAiCloudClientConfig.getInstance().token, - MoGoAiCloudClientConfig.getInstance().sn, - taskId + map ) .transformTry() .subscribe(OchCommonSubscribeImpl(context, callback, "mainTaskReset")) diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java index 9a317bfd21..7a056cfb6e 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/presenter/SweeperPresenter.java @@ -3,7 +3,6 @@ package com.mogo.och.sweeper.presenter; import android.os.Looper; import com.amap.api.maps.model.LatLng; -import com.amap.api.navi.model.NaviLatLng; import com.mogo.commons.AbsMogoApplication; import com.mogo.commons.mvp.Presenter; import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo; @@ -17,7 +16,6 @@ import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianCleanSyste import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger; import com.mogo.eagle.core.utilcode.util.UiThreadHandler; import com.mogo.och.common.module.manager.OCHAdasAbilityManager; -import com.mogo.och.common.module.map.AmapNaviToDestinationModel; import com.mogo.och.common.module.utils.CoordinateCalculateRouteUtil; import com.mogo.och.sweeper.bean.SweeperMainTaskBean; import com.mogo.och.sweeper.bean.SweeperSubTaskBean; @@ -62,8 +60,6 @@ public class SweeperPresenter extends Presenter private static final String TAG = "SweeperPresenter"; //当前子任务id private int mSubTaskId = 0; - //当前是否最后一个子任务 - private boolean mIsLastSubtask = false; // 清扫模式回调时间间隔 private static final long VEHICLE_STATE_INTERVAL_MILLIS = 500L; // 清扫模式当前时间戳 @@ -118,7 +114,8 @@ public class SweeperPresenter extends Presenter @Override public void onAutopilotStatusResponse(@NotNull AutopilotStatusInfo autopilotStatusInfo) { if (autopilotStatusInfo == null) return; - CallerLogger.INSTANCE.d(M_SWEEPER + TAG,"onAutopilotStatusResponse sate:"+autopilotStatusInfo.getState()); + CallerLogger.INSTANCE.d(M_SWEEPER + TAG,"onAutopilotStatusResponse state:"+autopilotStatusInfo.getState()); + SweeperTaskModel.getInstance().setAutopilotState(autopilotStatusInfo.getState()); switch (autopilotStatusInfo.getState()) { case IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE://不可自动驾驶 runOnUIThread(() -> mView.readyTaskBtn(false, false)); @@ -362,8 +359,8 @@ public class SweeperPresenter extends Presenter /** * 获取子任务详情包括轨迹文件信息 */ - public void getSubTaskDetail(int subTaskId, SubTaskTypeEnum subTaskType) { - SweeperTaskModel.getInstance().getSubTaskDetail(subTaskId, subTaskType); + public void getSubTaskDetail(boolean isFirst,boolean isEnd,int subTaskId, SubTaskTypeEnum subTaskType,boolean isStartSubtask) { + SweeperTaskModel.getInstance().getSubTaskDetail(isFirst,isEnd,subTaskId, subTaskType,isStartSubtask); } /** * 子任务开始上报 @@ -379,6 +376,10 @@ public class SweeperPresenter extends Presenter } else { if (subTaskStatus==1){//子任务未执行,则开始执行 SweeperTaskModel.getInstance().subTaskStart(isFirst,isEnd,subTaskId, subTaskType); + }else{ + if (subTaskType == SubTaskTypeEnum.AUTOPILOT_SUBTYPE) { + SweeperTaskModel.getInstance().startAutopilot(); + } } } // AutopilotControlParameters parameters = new AutopilotControlParameters(); diff --git a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt index fbc3ef37e2..b847f00758 100644 --- a/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt +++ b/OCH/mogo-och-sweeper/src/main/java/com/mogo/och/sweeper/view/SweeperCurrentTaskInfoView.kt @@ -5,6 +5,8 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import androidx.constraintlayout.widget.ConstraintLayout +import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger +import com.mogo.eagle.core.utilcode.mogo.logger.scene.SceneConstant import com.mogo.och.common.module.utils.DateTimeUtil import com.mogo.och.sweeper.R import com.mogo.och.sweeper.bean.SubInfo @@ -18,6 +20,7 @@ import kotlinx.android.synthetic.main.sweeper_current_task_info.view.* * 清扫车当前任务信息展示 */ class SweeperCurrentTaskInfoView : ConstraintLayout { + private val TAG:String="SweeperCurrentTaskInfoView" //当前任务操作菜单 private var mTaskMenuPopWindow: MenuPopWindow? = null private var presenter: SweeperPresenter? = null @@ -85,7 +88,8 @@ class SweeperCurrentTaskInfoView : ConstraintLayout { * 设置准备就绪按钮时都可以点击 */ fun setEnableClickBtn(isClick: Boolean, isPause: Boolean) { - if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) { + CallerLogger.d(SceneConstant.M_SWEEPER + TAG, "setEnableClickBtn isClick:${isClick} isPause:${isPause}") + if (mSubTaskType.code == SubTaskTypeEnum.MANUAL_DRIVING_SUBTYPE.code) {//人工驾驶子任务 tvTaskState.text = "暂未准备" tvTaskState.setBackgroundResource(R.drawable.bg_shape_task_state_not_ready) readyTaskBtn.text = "准备出发" diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml b/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml index a7fb634bf9..2ffd5d417f 100644 --- a/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml +++ b/OCH/mogo-och-sweeper/src/main/res/layout/fragment_och_sweeper.xml @@ -16,7 +16,7 @@ android:background="@drawable/bg_shape_work_mode" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toBottomOf="@+id/sweeper_arc" - android:visibility="visible"/> + android:visibility="gone"/> + android:visibility="visible"/> \ No newline at end of file diff --git a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_welt_map_overview.xml b/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_welt_map_overview.xml index 4fc5d43f97..e3b2a40fc1 100644 --- a/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_welt_map_overview.xml +++ b/OCH/mogo-och-sweeper/src/main/res/layout/sweeper_welt_map_overview.xml @@ -2,8 +2,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto">