[sweeper-cloud]修改同一个轨迹同一个lineId,任务轨迹被过滤掉的问题

This commit is contained in:
bxb
2023-05-30 14:10:05 +08:00
parent c5a149691b
commit 1562ce1e4d
3 changed files with 60 additions and 29 deletions

View File

@@ -211,6 +211,13 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
*/
fun onSweeperUpdateSubTaskStatus(taskId: String, subTaskId: String, subTaskStatus: SweeperCommon.TaskStatus) {
mLoadingDialog.hideLoading()
updateSubTaskInfo(taskId, subTaskId, subTaskStatus)
}
/**
* 子任务确认时,更新子任务信息
*/
private fun updateSubTaskInfo(taskId: String, subTaskId: String, subTaskStatus: SweeperCommon.TaskStatus) {
mTaskInfo?.let {
//如果云端要更新的任务和本地缓存任务不是同一个,在无法更新子任务状态
if (taskId != it.taskId) {
@@ -461,6 +468,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
showSubTaskInfoDialog(taskId, subTaskId, it)
} else {
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
mPresenter?.setPreLineId(-1)
updateSubTaskInfo(taskId, subTaskId, SweeperCommon.TaskStatus.RUNNING)
}
}
}
@@ -480,6 +489,8 @@ class SweeperFragment : BaseSweeperTabFragment<SweeperFragment?, SweeperPresente
override fun onConfirm() {
//ToastUtils.showLong("确认")
mPresenter?.sendSweeperTaskConfirmResp(taskId, subTaskId, SweeperTaskConfirm.TaskConfirmCode.MANUAL_CONFIRM)
mPresenter?.setPreLineId(-1)
updateSubTaskInfo(taskId, subTaskId, SweeperCommon.TaskStatus.RUNNING)
mLoadingDialog.showLoading()
}

View File

@@ -82,7 +82,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
ArrayList<SweeperRoutePlanningUpdateReqBean.Result> points = new ArrayList<>();//全路径信息
private SweeperTask.TaskModel mSubTaskType = SweeperTask.TaskModel.DEFAULT_MODEL; //1自动驾驶 2.人工驾驶 0:无效值
private int mCurrentLineId = 0; //当前路线id
private int mLineId = -1;//上一次存储的路线id
private int mPreLineId = -1;//上一次存储的路线id
//自动驾驶状态
private int mAutopilotState = IMoGoAutopilotStatusListener.STATUS_AUTOPILOT_DISABLE;
//当前子任务id
@@ -105,7 +105,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
private String latitude;//纬度
private boolean isHasTaskInfo=false;//判断是否有任务数据
private boolean isHasTaskInfo = false;//判断是否有任务数据
//用于对应messageType和reqNo绑定在一起保证请求的reqNo和响应的reqNo一致
private HashMap<Integer, String> msgTypeAndReqNo = new HashMap<>();
@@ -196,19 +196,19 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
@Override
public void onAutopilotRotting(MessagePad.GlobalPathResp routeList) {
if (null != routeList && routeList.getWayPointsList() != null && routeList.getWayPointsList().size() > 0) {
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,"onAutopilotRotting: "+printMessage(routeList));
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotRotting: " + printMessage(routeList));
// MAP返回路线信息在1秒内返回了2次这里加上数据过滤
long current = System.currentTimeMillis();
if (current - mRouteDataCurrentTimeMillis <= ROUTE_DATA_INTERVAL_MILLIS) {
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,"onAutopilotRotting: interval <=" + ROUTE_DATA_INTERVAL_MILLIS + " data is abandon");
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotRotting: interval <=" + ROUTE_DATA_INTERVAL_MILLIS + " data is abandon");
return;
}
mRouteDataCurrentTimeMillis = current;
if (mCurrentLineId != mLineId) {//判断是否同一条路线
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,"onAutopilotRotting: mCurrentLineId"+mCurrentLineId+"mLineId"+mLineId);
mLineId = mCurrentLineId;
if (mCurrentLineId != mPreLineId) {//判断是否同一条路线
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotRotting: mCurrentLineId" + mCurrentLineId + "mPreLineId" + mPreLineId);
mPreLineId = mCurrentLineId;
points.addAll(coordinateConverterWgsToGcjList(mContext, routeList.getWayPointsList()));
if (mSweeperTaskCallback != null) {
mSweeperTaskCallback.setRouteList(points);
@@ -231,15 +231,22 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void clearRouteList() {
points.clear();
mSubTaskType = SweeperTask.TaskModel.UNRECOGNIZED;
mCurrentLineId=0;
mLineId=-1;
mCurrentLineId = 0;
mPreLineId = -1;
}
/**
* 重新设置上一次的lineId防止同一个轨迹同一个lineid时不绘制轨迹
*/
public void setPreLineId(int preLineId) {
this.mPreLineId = preLineId;
}
/**
* 判断是否有任务数据
*/
public void isHasTaskInfo(boolean isHasTaskInfo){
this.isHasTaskInfo=isHasTaskInfo;
public void isHasTaskInfo(boolean isHasTaskInfo) {
this.isHasTaskInfo = isHasTaskInfo;
}
/**
@@ -344,7 +351,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
"onSweeperFutianCloudTaskConfirm" + printMessage(taskConfirm));
if (mSweeperTaskCallback != null && taskConfirm != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId(),taskConfirm.getIsPop());
mSweeperTaskCallback.onSweeperCloudTaskConfirm(taskConfirm.getTaskId(), taskConfirm.getSubTaskId(), taskConfirm.getIsPop());
}
}
@@ -366,7 +373,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
"onSweeperFutianCloudTaskStop" + printMessage(stopTaskReq));
if (mSweeperTaskCallback != null && stopTaskReq != null) {
msgTypeAndReqNo.put(messageType.getNumber(), reqNo);
mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType(),stopTaskReq.getIsPop());
mSweeperTaskCallback.onSweeperCloudTaskStop(stopTaskReq.getTaskId(), stopTaskReq.getType(), stopTaskReq.getIsPop());
}
}
@@ -414,7 +421,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
return;
}
mVehicleStateCurrentTimeMillis = current;
// CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCleanSystemState" + printMessage(cleanSystemState));
// CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onSweeperFutianCleanSystemState" + printMessage(cleanSystemState));
if (mSweeperTaskCallback != null) {
mSweeperTaskCallback.onSweeperFutianCleanSystemState(cleanSystemState);
}
@@ -433,11 +440,12 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
mWeltDataCurrentTimeMillis = current;
//没有任务数据时,不处理贴边
if (!isHasTaskInfo){
if (!isHasTaskInfo) {
return;
}
CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "mSubTaskType"+mSubTaskType+"+ onSweeperFutianTaskIndexData" + printMessage(roboSweeperTaskIndex));
CallerLogger.INSTANCE.d(M_SWEEPER + TAG,
"mSubTaskType" + mSubTaskType + "+ onSweeperFutianTaskIndexData" + printMessage(roboSweeperTaskIndex));
handleWeltData(roboSweeperTaskIndex);
}
@@ -587,7 +595,7 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
public void onAutopilotStatusResponse(@NonNull AutopilotStatusInfo autoPilotStatusInfo) {
//CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusResponse state:" + autoPilotStatusInfo.getState());
this.mAutopilotState = autoPilotStatusInfo.getState();
if (mControllerStatusCallback!=null){
if (mControllerStatusCallback != null) {
mControllerStatusCallback.onAutopilotState(autoPilotStatusInfo.getState());
}
switch (autoPilotStatusInfo.getState()) {
@@ -621,17 +629,17 @@ public class SweeperTaskModel implements IMoGoSweeperFutianCloudTaskListener, IM
@Override
public void onAutopilotIpcConnectStatusChanged(int status, @Nullable String reason) {
if (status == 0x00){//判断工控机重连后,获取当前正在执行的子任务,延时10秒防止工控机连接上时SN为空
UiThreadHandler.postDelayed(()->{
if (status == 0x00) {//判断工控机重连后,获取当前正在执行的子任务,延时10秒防止工控机连接上时SN为空
UiThreadHandler.postDelayed(() -> {
getCurrentTask();
},10000);
}, 10000);
}
//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());
// CallerLogger.INSTANCE.d(M_SWEEPER + TAG, "onAutopilotStatusRespByQuery status:" + status.getSysState().getNumber());
}
@Override

View File

@@ -85,16 +85,18 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
@Override
public void onAutopilotState(int state) {
ThreadUtils.runOnUiThread(() ->mView.setAutoState(state));
ThreadUtils.runOnUiThread(() -> mView.setAutoState(state));
}
/**
* 获取自动驾驶状态
*
* @return
*/
public int getAutopilotState() {
return SweeperTaskModel.getInstance().getAutopilotState();
}
/**
* 清除路线缓存数据
*/
@@ -112,9 +114,18 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
/**
* 判断是否有任务数据
*/
public void isHasTaskInfo(boolean isHasTaskInfo){
public void isHasTaskInfo(boolean isHasTaskInfo) {
SweeperTaskModel.getInstance().isHasTaskInfo(isHasTaskInfo);
}
/**
* 设置上一个任务的lineId
* @param preLineId
*/
public void setPreLineId(int preLineId) {
SweeperTaskModel.getInstance().setPreLineId(preLineId);
}
/**
* 获取当前正在执行的任务
*/
@@ -176,32 +187,33 @@ public class SweeperPresenter extends Presenter<SweeperFragment>
@Override
public void onSweeperCloudTaskConfirm(@NonNull String taskId, @NonNull String subTaskId, boolean isPop) {
ThreadUtils.runOnUiThread(() -> mView.handleSubTaskInfoDialog(taskId, subTaskId,isPop));
ThreadUtils.runOnUiThread(() -> mView.handleSubTaskInfoDialog(taskId, subTaskId, isPop));
}
@Override
public void onSweeperCloudTaskStatus(@NonNull String taskId, @NonNull String subTaskId, SweeperCommon.TaskStatus subTaskStatus) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperUpdateSubTaskStatus(taskId, subTaskId, subTaskStatus));
}
@Override
public void onSweeperCloudTaskStop(@NonNull String taskId, SweeperTaskStop.StopTaskType stopTaskType,boolean isPop) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTaskStop(taskId, stopTaskType,isPop));
public void onSweeperCloudTaskStop(@NonNull String taskId, SweeperTaskStop.StopTaskType stopTaskType, boolean isPop) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudTaskStop(taskId, stopTaskType, isPop));
}
@Override
public void onSweeperCloudTaskSuspendResume(@NonNull SweeperCloudTask.MessageType messageType, @NonNull String taskId,
@NonNull String subTaskId,SweeperCommon.Code code) {
@NonNull String subTaskId, SweeperCommon.Code code) {
}
@Override
public void onSweeperCloudBootable(@NonNull String taskId, @NonNull String subTaskId, SweeperBootable.IsBootableResp isBootableResp) {
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudAutopilotBootable(taskId, subTaskId,isBootableResp));
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudAutopilotBootable(taskId, subTaskId, isBootableResp));
}
@Override
public void onSweeperCloudBigTaskStatus(@NonNull String taskId, SweeperBigTaskStatus.BigTaskStatus subTaskStatus) {
ThreadUtils.runOnUiThread(()->mView.onSweeperCloudBigTaskStatus(taskId,subTaskStatus));
ThreadUtils.runOnUiThread(() -> mView.onSweeperCloudBigTaskStatus(taskId, subTaskStatus));
}
@Override