|
|
@ -261,6 +261,47 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
fireEvent(AgvEventType.DIRECTION_CHANGED, this, |
|
|
fireEvent(AgvEventType.DIRECTION_CHANGED, this, |
|
|
oldDirection, direction); |
|
|
oldDirection, direction); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 从 runningDeviceTaskList 里面,找到完成到什么阶段
|
|
|
|
|
|
// 比如 (1,2) -> (2,2) -> (3,2) , 如果 updatePosition=3,2 ,那么前2个任务都要完成
|
|
|
|
|
|
int finishTargetIndex = -1; |
|
|
|
|
|
for (int i = 0; i < runningDeviceTaskList.size(); i++) { |
|
|
|
|
|
PtrAgvDeviceTask task = runningDeviceTaskList.get(i); |
|
|
|
|
|
if (task.checkLogicX == logicX && task.checkLogicY == logicY) { |
|
|
|
|
|
finishTargetIndex = i; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
boolean needCompute = false; |
|
|
|
|
|
|
|
|
|
|
|
if (finishTargetIndex > 0) { |
|
|
|
|
|
needCompute = true; |
|
|
|
|
|
// 标记前面的任务都完成了
|
|
|
|
|
|
for (int i = 0; i < finishTargetIndex; i++) { |
|
|
|
|
|
PtrAgvDeviceTask task = runningDeviceTaskList.get(i); |
|
|
|
|
|
|
|
|
|
|
|
task.taskStatus = 4; // 标记为完成
|
|
|
|
|
|
task.taskGroupStatus = 4; // 标记为任务组完成
|
|
|
|
|
|
fireEvent(AgvEventType.DEVICE_TASK_COMPLETE, this, task); |
|
|
|
|
|
|
|
|
|
|
|
// 更新计划任务
|
|
|
|
|
|
RcsTaskPlan planTask = planTaskSequence.getByPlanTaskId(task.planTaskId); |
|
|
|
|
|
if (planTask != null) { |
|
|
|
|
|
planTask.setPlanTaskStatus(PlanTaskStatus.FINISHED.toString()); |
|
|
|
|
|
planTaskSequence.savePlanTask(planTask); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (planTaskSequence.isAllCompleted()) { |
|
|
|
|
|
fireEvent(AgvEventType.PLAN_COMPLETE, this); |
|
|
|
|
|
planTaskSequence = null; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (needCompute) { |
|
|
|
|
|
LockSupport.unpark(connectorThread); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
@ -277,38 +318,7 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
boolean needCompute = true; |
|
|
// 任务完成逻辑,在地标检查里
|
|
|
for (PtrAgvDeviceTask task : runningDeviceTaskList) { |
|
|
|
|
|
if (task.seqNo == seqNo) { |
|
|
|
|
|
task.taskGroupStatus = messageStatus; |
|
|
|
|
|
if (task.x == x && task.y == y) { |
|
|
|
|
|
// 标记任务已完成, 4=完成
|
|
|
|
|
|
task.taskStatus = 4; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (messageStatus == 4) { |
|
|
|
|
|
fireEvent(AgvEventType.DEVICE_TASK_COMPLETE, this, task); |
|
|
|
|
|
RcsTaskPlan planTask = planTaskSequence.getByPlanTaskId(task.planTaskId); |
|
|
|
|
|
planTask.setPlanTaskStatus(PlanTaskStatus.FINISHED.toString()); |
|
|
|
|
|
planTaskSequence.savePlanTask(planTask); |
|
|
|
|
|
if (planTaskSequence.isAllCompleted()) { |
|
|
|
|
|
fireEvent(AgvEventType.PLAN_COMPLETE, this); |
|
|
|
|
|
planTaskSequence = null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
log.error("messageStatus unkown messageStatus={}", messageStatus); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
// TODO: 3是什么?
|
|
|
|
|
|
if (task.taskGroupStatus < 3 /*|| task.taskStatus < 4*/) { |
|
|
|
|
|
needCompute = false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if (needCompute) { |
|
|
|
|
|
LockSupport.unpark(connectorThread); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -458,6 +468,9 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
deviceTask.endPoint = pointItem; |
|
|
deviceTask.endPoint = pointItem; |
|
|
deviceTask.bizTaskId = plan.getBizTaskId(); |
|
|
deviceTask.bizTaskId = plan.getBizTaskId(); |
|
|
deviceTask.planTaskId = plan.getPlanTaskId(); |
|
|
deviceTask.planTaskId = plan.getPlanTaskId(); |
|
|
|
|
|
// 行走任务完成后,检查用的字段
|
|
|
|
|
|
deviceTask.checkLogicX = pointItem.logicX; |
|
|
|
|
|
deviceTask.checkLogicY = pointItem.logicY; |
|
|
deviceTaskList.add(deviceTask); |
|
|
deviceTaskList.add(deviceTask); |
|
|
// 设置新的起点
|
|
|
// 设置新的起点
|
|
|
startPoint = pointItem; |
|
|
startPoint = pointItem; |
|
|
@ -633,6 +646,16 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
}; |
|
|
}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public short getAmrDirection(LCCDirection lccDirection) { |
|
|
|
|
|
return switch (lccDirection) { |
|
|
|
|
|
case RIGHT -> 0; |
|
|
|
|
|
case DOWN -> 1; |
|
|
|
|
|
case LEFT -> 2; |
|
|
|
|
|
case UP -> 3; |
|
|
|
|
|
default -> -1; // 未知方向
|
|
|
|
|
|
}; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private String getRedisKey(String type) { |
|
|
private String getRedisKey(String type) { |
|
|
return String.format("lcc:%s:%s:rcs:%s_%s", |
|
|
return String.format("lcc:%s:%s:rcs:%s_%s", |
|
|
runtime.projectUUID, runtime.envId, type, this.getId()); |
|
|
runtime.projectUUID, runtime.envId, type, this.getId()); |
|
|
|