Browse Source

业务状态问题

master
修宁 6 months ago
parent
commit
88f60b97bd
  1. 43
      servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java
  2. 57
      servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java

43
servo/src/main/java/com/galaxis/rcs/plan/PlanTaskSequence.java

@ -5,8 +5,14 @@ import com.galaxis.rcs.common.entity.RcsTaskBiz;
import com.galaxis.rcs.common.entity.RcsTaskPlan;
import com.galaxis.rcs.common.enums.PlanTaskStatus;
import com.galaxis.rcs.common.enums.PlanTaskType;
import com.galaxis.rcs.ptr.ArmMessageType;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.yvan.logisticsModel.LogisticsRuntime;
import com.yvan.logisticsModel.PtrAgvDeviceTask;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.clever.core.BannerUtils;
import org.clever.core.id.SnowFlake;
import org.clever.core.json.JsonWrapper;
@ -15,6 +21,7 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
@Slf4j
public class PlanTaskSequence {
@JsonIgnore
public static final SnowFlake snowFlake = new SnowFlake();
@ -27,7 +34,6 @@ public class PlanTaskSequence {
public String lastWayPointId;
public Float lastRotationAngle = null;
public boolean isFinished = false;
public String lastLoadLpn = "";
public PlanTaskSequence(String executorId, LogisticsRuntime logisticsRuntime, RcsTaskBiz bizTask, String createBy) {
@ -103,7 +109,6 @@ public class PlanTaskSequence {
// 添加完成动作
public RcsTaskPlan addFinish() {
RcsTaskPlan task = this.createTaskPlanEntity(PlanTaskType.FINISH.toString());
this.isFinished = true;
return task;
}
@ -145,4 +150,38 @@ public class PlanTaskSequence {
jw.set("items", list);
return jw.getInnerMap();
}
/**
* 是不是所有的任务都完成了
*/
public boolean isAllCompleted() {
boolean isAllComplete = true;
for (RcsTaskPlan task : taskList) {
if (!PlanTaskStatus.FINISHED.toString().equals(task.getPlanTaskStatus())) {
isAllComplete = false;
break;
}
}
return isAllComplete;
}
public RcsTaskPlan getByPlanTaskId(Long planTaskId) {
for (RcsTaskPlan task : taskList) {
if (task.getPlanTaskId().equals(planTaskId)) {
return task;
}
}
return null;
}
@SneakyThrows
public void savePlanTask(RcsTaskPlan planTask) {
//TODO: 保存数据库
var jw = new JsonWrapper(planTask);
var list = Splitter.on("\n").splitToList(jw.toString());
String[] ar = new String[list.size()];
list.toArray(ar);
// log.info("3-Received message: " + json);
BannerUtils.printConfig(log, "保存业务任务 planTask", ar);
}
}

57
servo/src/main/java/com/yvan/logisticsModel/PtrAgvItem.java

@ -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");

Loading…
Cancel
Save