|
|
|
@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; |
|
|
|
import com.galaxis.rcs.common.entity.RcsTaskPlan; |
|
|
|
import com.galaxis.rcs.common.enums.AgvEventType; |
|
|
|
import com.galaxis.rcs.common.enums.LCCDirection; |
|
|
|
import com.galaxis.rcs.common.enums.PlanTaskStatus; |
|
|
|
import com.galaxis.rcs.common.enums.PlanTaskType; |
|
|
|
import com.galaxis.rcs.connector.cl2.Cl2DeviceConnector; |
|
|
|
import com.galaxis.rcs.plan.PlanTaskSequence; |
|
|
|
@ -17,6 +18,7 @@ import com.galaxis.rcs.ptr.sendEntity.RcsConfigMessage; |
|
|
|
import com.galaxis.rcs.ptr.sendEntity.RcsSRMessage; |
|
|
|
import com.galaxis.rcs.ptr.sendEntity.RcsSetLocationMessage; |
|
|
|
import com.google.common.collect.Queues; |
|
|
|
import com.yvan.logisticsMonitor.task.PlanTask; |
|
|
|
import lombok.SneakyThrows; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.clever.core.json.JsonWrapper; |
|
|
|
@ -221,7 +223,19 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
|
|
|
|
public boolean isFree() { |
|
|
|
// return (this.logisticsRuntime.isRunning() && this.deviceTaskQueue.isEmpty() && this.connectorThread.isRunning());
|
|
|
|
return this.runtime.isRunning() && planTaskSequence == null && deviceTaskQueue.isEmpty() && !isPaused; |
|
|
|
if (!this.runtime.isRunning()) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (planTaskSequence != null && !planTaskSequence.isAllCompleted()) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (!deviceTaskQueue.isEmpty()) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
if (this.isPaused) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
public void updatePosition(int logicX, int logicY, short direction) { |
|
|
|
@ -268,9 +282,26 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
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; |
|
|
|
} |
|
|
|
@ -278,32 +309,8 @@ public abstract class PtrAgvItem extends ExecutorItem { |
|
|
|
if (needCompute) { |
|
|
|
LockSupport.unpark(connectorThread); |
|
|
|
} |
|
|
|
|
|
|
|
// 如果是任务完成事件
|
|
|
|
if (messageStatus == 4) { |
|
|
|
fireEvent(AgvEventType.DEVICE_TASK_COMPLETE, this, this.connectorThread.__currentTask); |
|
|
|
|
|
|
|
if (isTaskSequenceComplete()) { |
|
|
|
fireEvent(AgvEventType.PLAN_COMPLETE, this); |
|
|
|
planTaskSequence = null; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 检查当前任务序列是否完成 |
|
|
|
*/ |
|
|
|
public boolean isTaskSequenceComplete() { |
|
|
|
if (planTaskSequence == null) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
for (PtrAgvDeviceTask task : runningDeviceTaskList) { |
|
|
|
if (task.taskGroupStatus < 3 /*|| task.taskStatus < 4*/) { |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
public void updateRedisStatus() { |
|
|
|
String statusKey = getRedisKey("status"); |
|
|
|
|