From 1a518d788ee36886af92b2adfcbe9e79e83ef08e Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期四, 22 一月 2026 09:44:51 +0800
Subject: [PATCH] #
---
version/db/new.sql | 16 ++
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java | 24 ++--
zy-acs-common/src/main/java/com/zy/acs/common/utils/Base62.java | 17 +++
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Travel.java | 75 +++-----------
zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java | 5
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java | 81 ++++++++++++++++
zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java | 5 +
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java | 10 --
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java | 17 ---
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java | 17 +-
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TravelService.java | 8 +
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java | 8 +
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java | 5
version/db/sqlIndex | 4
zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java | 2
16 files changed, 183 insertions(+), 115 deletions(-)
diff --git a/version/db/new.sql b/version/db/new.sql
index d7a24af..b51e0e9 100644
--- a/version/db/new.sql
+++ b/version/db/new.sql
@@ -1,2 +1,14 @@
-alter table man_code
- add dir_rule varchar(255) null comment '鏂瑰悜瑙勫垯' after corner;
+alter table man_travel
+ add roller_waiting int(1) default 0 null comment '婊氱瓛绾跨瓑寰�' after task_ids;
+
+alter table man_travel
+ add roller_waiting_code bigint null comment '婊氱瓛绾跨瓑寰呭湴鐮�' after roller_waiting;
+
+alter table man_travel_log
+ add roller_waiting int(1) default 0 null comment '婊氱瓛绾跨瓑寰�' after task_ids;
+
+alter table man_travel_log
+ add roller_waiting_code bigint null comment '婊氱瓛绾跨瓑寰呭湴鐮�' after roller_waiting;
+
+CREATE INDEX idx_agv_state_wait
+ ON man_travel (agv_id, state, roller_waiting, deleted);
diff --git a/version/db/sqlIndex b/version/db/sqlIndex
index a1317b0..c3bae29 100644
--- a/version/db/sqlIndex
+++ b/version/db/sqlIndex
@@ -1,3 +1,4 @@
+# todo idx ==> deleted
# man_action
CREATE INDEX idx_agv_action ON man_action(agv_id, action_sts);
CREATE INDEX idx_group_io_time ON man_action(group_id, io_time);
@@ -8,7 +9,8 @@
# man_action_type
CREATE INDEX idx_action_type_uuid ON man_action_type(uuid);
# man_travel
-CREATE INDEX idx_agv_id_state on man_travel(agv_id, state);
+CREATE INDEX idx_agv_id_state ON man_travel(agv_id, state);
+CREATE INDEX idx_agv_state_wait ON man_travel (agv_id, state, roller_waiting, deleted);
# man_agv_model
CREATE INDEX idx_agv_model_type ON man_agv_model(type);
# man_bus_sts
diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/utils/Base62.java b/zy-acs-common/src/main/java/com/zy/acs/common/utils/Base62.java
new file mode 100644
index 0000000..26ddd1f
--- /dev/null
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/utils/Base62.java
@@ -0,0 +1,17 @@
+package com.zy.acs.common.utils;
+
+public class Base62 {
+
+ private static final char[] CHARS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
+
+ public static String encode(long value) {
+ if (value == 0) return "0";
+ StringBuilder sb = new StringBuilder();
+ while (value > 0) {
+ sb.append(CHARS[(int) (value % 62)]);
+ value /= 62;
+ }
+ return sb.reverse().toString();
+ }
+
+}
diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java b/zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java
index a484c83..4829d51 100644
--- a/zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/utils/Utils.java
@@ -1,6 +1,7 @@
package com.zy.acs.common.utils;
import com.zy.acs.framework.common.Cools;
+import com.zy.acs.framework.common.SnowflakeIdWorker;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
@@ -252,6 +253,10 @@
return str;
}
+ public static void main(String[] args) {
+ System.out.println(Base62.encode(new SnowflakeIdWorker().nextId()));
+ }
+
public static String generateSeqNum(String lastSeqNum) {
if (Cools.isEmpty(lastSeqNum)) {
return zeroFill("1", 4);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
index fb5727c..ce8ef78 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
@@ -3,8 +3,8 @@
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.acs.common.constant.RedisConstant;
+import com.zy.acs.common.utils.Base62;
import com.zy.acs.common.utils.RedisSupport;
-import com.zy.acs.common.utils.Utils;
import com.zy.acs.framework.common.Cools;
import com.zy.acs.framework.common.R;
import com.zy.acs.framework.common.SnowflakeIdWorker;
@@ -165,7 +165,8 @@
task.setAgvId(agv.getId());
task.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
List<Task> lastTasks = taskService.list(new LambdaQueryWrapper<Task>().orderByDesc(Task::getId));
- task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum())); // todo
+// task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum()));
+ task.setSeqNum(Base62.encode(snowflakeIdWorker.nextId()));
task.setTaskType(param.getTaskMode().val());
task.setTaskSts(TaskStsType.WAITING.val());
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java
index f66e3ce..ae3b643 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/KernelScheduler.java
@@ -71,7 +71,7 @@
@Autowired
private LocService locService;
@Autowired
- private AgvModelService agvModelService;
+ private TravelService travelService;
@Autowired
private TransferStationHandler transferStationHandler;
@@ -124,6 +124,8 @@
for (Segment segment : segments) {
if (transferStationHandler.hasDelayAtSta(segment)) {
continue;
+ } else {
+ travelService.clearRollerWaiting(segment.getTravelId());
}
try {
txTemplate.executeWithoutResult(status -> {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
index 5f1aa14..8ad50c7 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateService.java
@@ -222,20 +222,19 @@
// if (taskCnt == 0) {
// continue;
// }
- // in TransferStationHandler.hasDelayAtSta todo
- Travel runningTravel = travelService.findRunningTravel(agvId);
- if (null == runningTravel) {
+ // in TransferStationHandler.hasDelayAtSta
+ Travel currTravelInRollerWaiting = travelService.findRollerWaitingTravel(agvId, currentCode.getId());
+ if (null == currTravelInRollerWaiting) {
continue;
}
- segmentService.hasRollerWaitingNow(runningTravel.getId(), agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA)
- Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
- if (null == currSeg) {
- continue;
- }
+// Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
+// if (null == currSeg) {
+// continue;
+// }
// has enough backpack space to load
Integer backpack = agvService.getBackpack(agvId);
- List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(null, agvId);
+ List<Integer> usedBackpacks = segmentService.selectUsedBackpacks(currTravelInRollerWaiting.getId(), agvId);
if (usedBackpacks.size() >= backpack) {
continue;
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
index e7cdbc2..d7754a8 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -11,6 +11,7 @@
import com.zy.acs.common.domain.protocol.*;
import com.zy.acs.common.domain.protocol.action.*;
import com.zy.acs.common.enums.*;
+import com.zy.acs.common.utils.Base62;
import com.zy.acs.common.utils.GsonUtils;
import com.zy.acs.common.utils.RedisSupport;
import com.zy.acs.common.utils.Utils;
@@ -788,7 +789,8 @@
task.setAgvId(agvId);
task.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
List<Task> lastTasks = taskService.list(new LambdaQueryWrapper<Task>().orderByDesc(Task::getId));
- task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum()));
+// task.setSeqNum(Utils.generateSeqNum(Cools.isEmpty(lastTasks)?null:lastTasks.get(0).getSeqNum()));
+ task.setSeqNum(Base62.encode(snowflakeIdWorker.nextId()));
task.setOriCode(agvDetail.getCode());
task.setDestCode(endCode.getId());
// lane
@@ -1868,7 +1870,7 @@
staReserveService.rollbackWaitingToReserved(sta, currTask, StaReserveType.OUT);
break;
}
- log.info("Agv [{}] 鍙栨斁璐ф垚鍔�", protocol.getAgvNo()); // todo
+ log.info("AGV[{}] load permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
success = true;
break;
case DEST_STA:
@@ -1884,7 +1886,7 @@
staReserveService.rollbackWaitingToReserved(sta, currTask, StaReserveType.IN);
break;
}
- log.info("Agv [{}] 鍙栨斁璐ф垚鍔�", protocol.getAgvNo()); // todo
+ log.info("AGV[{}] unload permitted at conveyor station [{}]", protocol.getAgvNo(), sta.getStaNo());
success = true;
break;
default:
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
index 2e6afef..3d96fb0 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -703,9 +703,12 @@
continue;
}
// 褰撳墠vehicle姝e湪杩涜婊氱瓛杈撻�佺嚎绛夊緟
- if (segmentService.isRollerWaiting(agvId)) {
+ if (travelService.hasRollerWaiting(agvId)) {
continue;
}
+// if (segmentService.isRollerWaiting(agvId)) {
+// continue;
+// }
return blockVehicleDto.getVehicle();
}
return null;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
index af6e933..c75c44e 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java
@@ -30,6 +30,8 @@
private CodeService codeService;
@Autowired
private StaService staService;
+ @Autowired
+ private TravelService travelService;
/**
* 鍙栬揣锛堝叆搴擄級锛氬湪鍙栧畬绗竴涓揣鐨勬椂鍊欙紝鎷呭績婊氱瓛杈撻�佺嚎浼氭湁涓嬩竴涓揣鐗╋紝鎵�浠ュ缓璁瓵GV鍦ㄥ師鍦扮瓑寰呬竴娈垫椂闂�
@@ -74,11 +76,12 @@
return false;
}
- // sign waiting
- if (currSeg.getRollerWaiting() == 0) {
- currSeg.setRollerWaiting(1);
- segmentService.updateById(currSeg);
- }
+ // mark roller waiting
+ travelService.markRollerWaiting(currSeg.getTravelId(), currentCode.getId());
+// if (currSeg.getRollerWaiting() == 0) {
+// currSeg.setRollerWaiting(1);
+// segmentService.updateById(currSeg);
+// }
// timeout
return (now - preEndTime) < LOAD_DELAY_MS;
@@ -95,11 +98,12 @@
return false;
}
- // sign waiting
- if (currSeg.getRollerWaiting() == 0) {
- currSeg.setRollerWaiting(1);
- segmentService.updateById(currSeg);
- }
+ // mark roller waiting
+ travelService.markRollerWaiting(currSeg.getTravelId(), currentCode.getId());
+// if (currSeg.getRollerWaiting() == 0) {
+// currSeg.setRollerWaiting(1);
+// segmentService.updateById(currSeg);
+// }
// timeout
return (now - preEndTime) < PLACE_DELAY_MS;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
index a36e304..9f62586 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java
@@ -8,7 +8,6 @@
import com.zy.acs.manager.manager.service.AgvService;
import com.zy.acs.manager.manager.service.CodeService;
import com.zy.acs.manager.manager.service.TaskService;
-import com.zy.acs.manager.manager.service.TravelService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -167,15 +166,6 @@
private String memo;
public Segment() {}
-
- public String getTravelId$(){
- TravelService service = SpringUtils.getBean(TravelService.class);
- Travel travel = service.getById(this.travelId);
- if (!Cools.isEmpty(travel)){
- return String.valueOf(travel.getUuid());
- }
- return null;
- }
public String getTaskId$(){
TaskService service = SpringUtils.getBean(TaskService.class);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Travel.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Travel.java
index c39f2f7..3c333fa 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Travel.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Travel.java
@@ -3,9 +3,6 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
-import com.zy.acs.framework.common.Cools;
-import com.zy.acs.framework.common.SpringUtils;
-import com.zy.acs.manager.manager.service.AgvService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -62,6 +59,18 @@
private String taskIds;
/**
+ * 婊氱瓛绾跨瓑寰� 1: 鏄� 0: 鍚�
+ */
+ @ApiModelProperty(value= "婊氱瓛绾跨瓑寰� 1: 鏄� 0: 鍚� ")
+ private Integer rollerWaiting;
+
+ /**
+ * 婊氱瓛绾跨瓑寰呭湴鐮�
+ */
+ @ApiModelProperty(value= "婊氱瓛绾跨瓑寰呭湴鐮�")
+ private Long rollerWaitingCode;
+
+ /**
* 杩涘害
*/
@ApiModelProperty(value= "杩涘害")
@@ -115,65 +124,17 @@
@ApiModelProperty(value= "澶囨敞")
private String memo;
- public Travel() {}
-
- public Travel(String uuid,String travelId,Long agvId,Long currSeg,String taskContent,String taskIds,String state,Integer status,Integer deleted,Long tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
- this.uuid = uuid;
- this.travelId = travelId;
- this.agvId = agvId;
- this.currSeg = currSeg;
- this.taskContent = taskContent;
- this.taskIds = taskIds;
- this.state = state;
- this.status = status;
- this.deleted = deleted;
- this.tenantId = tenantId;
- this.createBy = createBy;
- this.createTime = createTime;
- this.updateBy = updateBy;
- this.updateTime = updateTime;
- this.memo = memo;
- }
-
-// Travel travel = new Travel(
-// null, // 缂栧彿
-// null, // 缁勭紪鍙�
-// null, // AGV
-// null, // 褰撳墠鑺傜偣
-// null, // 鍐呭
-// null, // 浠诲姟鍒楄〃
-// null, // 杩涘害
-// null, // 鐘舵�乕闈炵┖]
-// null, // 鏄惁鍒犻櫎[闈炵┖]
-// null, // 绉熸埛
-// null, // 娣诲姞浜哄憳
-// null, // 娣诲姞鏃堕棿[闈炵┖]
-// null, // 淇敼浜哄憳
-// null, // 淇敼鏃堕棿
-// null // 澶囨敞
-// );
-
- public String getAgvId$(){
- AgvService service = SpringUtils.getBean(AgvService.class);
- Agv agv = service.getById(this.agvId);
- if (!Cools.isEmpty(agv)){
- return String.valueOf(agv.getUuid());
- }
- return null;
- }
-
- public String getStatus$(){
- if (null == this.status){ return null; }
- switch (this.status){
+ public Boolean rollerWaitingBool(){
+ if (null == this.rollerWaiting){ return null; }
+ switch (this.rollerWaiting){
case 1:
- return "姝e父";
+ return true;
case 0:
- return "鍐荤粨";
+ return false;
default:
- return String.valueOf(this.status);
+ return null;
}
}
-
public Boolean getStatusBool(){
if (null == this.status){ return null; }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
index ac9d8ec..338dde8 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java
@@ -31,8 +31,6 @@
List<Integer> selectUsedBackpacks(Long travelId, Long agvId);
- Segment hasRollerWaitingNow(Long travelId, Long agvId, Long codeId, TaskPosDto.PosType posType);
-
Segment getRollerWaiting(Long agvId, Long codeId, TaskPosDto.PosType posType);
Boolean isRollerWaiting(Long agvId);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TravelService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TravelService.java
index a8e4ea0..b494a46 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TravelService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TravelService.java
@@ -11,4 +11,12 @@
Travel findRunningTravel(Long agvId);
+ Travel findRollerWaitingTravel(Long agvId, Long code);
+
+ Boolean hasRollerWaiting(Long agvId);
+
+ Boolean markRollerWaiting(Long travelId, Long codeId);
+
+ Boolean clearRollerWaiting(Long travelId);
+
}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
index 4eca108..2e21319 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/SegmentServiceImpl.java
@@ -173,21 +173,6 @@
return this.baseMapper.selectUsedBackpacks(agvId, travelId);
}
- @Override // todo
- public Segment hasRollerWaitingNow(Long travelId, Long agvId, Long codeId, TaskPosDto.PosType posType) {
- List<Segment> segments = this.list(new LambdaQueryWrapper<Segment>()
- .eq(Segment::getTravelId, travelId)
- .eq(Segment::getAgvId, agvId)
- .eq(Segment::getState, SegmentStateType.WAITING.toString())
- .eq(Segment::getEndNode, codeId)
- .eq(Segment::getPosType, posType.toString())
- .eq(Segment::getRollerWaiting, 1)
- .orderByDesc(Segment::getId)
- );
-
- return null;
- }
-
@Override //todo
public Segment getRollerWaiting(Long agvId, Long codeId, TaskPosDto.PosType posType) {
List<Segment> segments = this.list(new LambdaQueryWrapper<Segment>()
@@ -204,7 +189,7 @@
return segments.get(0);
}
- @Override // todo
+ @Override
public Boolean isRollerWaiting(Long agvId) {
return 0 < this.count(new LambdaQueryWrapper<Segment>()
.eq(Segment::getAgvId, agvId)
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
index a7b73a9..2006b40 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java
@@ -1,7 +1,10 @@
package com.zy.acs.manager.manager.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zy.acs.framework.common.Cools;
+import com.zy.acs.framework.exception.CoolException;
import com.zy.acs.manager.manager.entity.Segment;
import com.zy.acs.manager.manager.entity.Travel;
import com.zy.acs.manager.manager.enums.SegmentStateType;
@@ -9,13 +12,13 @@
import com.zy.acs.manager.manager.mapper.TravelMapper;
import com.zy.acs.manager.manager.service.SegmentService;
import com.zy.acs.manager.manager.service.TravelService;
-import com.zy.acs.framework.exception.CoolException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
+import java.util.Objects;
@Slf4j
@Service("travelService")
@@ -70,4 +73,80 @@
);
}
+ @Override
+ public Travel findRollerWaitingTravel(Long agvId, Long code) {
+ return this.getOne(new LambdaQueryWrapper<Travel>()
+ .eq(Travel::getAgvId, agvId)
+ .eq(Travel::getState, TravelStateType.RUNNING.toString())
+ .eq(Travel::getRollerWaiting, 1)
+ .eq(Travel::getRollerWaitingCode, code)
+ .orderByDesc(Travel::getCreateTime)
+ .last("limit 1")
+ );
+ }
+
+ @Override
+ public Boolean hasRollerWaiting(Long agvId) {
+ if (null == agvId) {
+ return false;
+ }
+ return 0 < this.count(new LambdaQueryWrapper<Travel>()
+ .eq(Travel::getAgvId, agvId)
+ .eq(Travel::getState, TravelStateType.RUNNING.toString())
+ .eq(Travel::getRollerWaiting, 1)
+ );
+ }
+
+ @Override
+ public Boolean markRollerWaiting(Long travelId, Long codeId) {
+ if (Cools.isEmpty(travelId, codeId)) {
+ return false;
+ }
+ Travel travel = this.getById(travelId);
+ if (travel == null) {
+ return false;
+ }
+ if (!TravelStateType.RUNNING.toString().equals(travel.getState())) {
+ return false;
+ }
+ if (travel.getRollerWaiting() == 1
+ && Objects.equals(travel.getRollerWaitingCode(), codeId)) {
+ return true;
+ }
+ travel.setRollerWaiting(1);
+ travel.setRollerWaitingCode(codeId);
+ if (!this.updateById(travel)) {
+ log.error("travel [{}] failed to mark roller waiting (code={})", travelId, codeId);
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public Boolean clearRollerWaiting(Long travelId) {
+ if (null == travelId) {
+ return false;
+ }
+ Travel travel = this.getById(travelId);
+ if (travel == null) {
+ return false;
+ }
+// if (!TravelStateType.RUNNING.toString().equals(travel.getState())) {
+// return false;
+// }
+ if (travel.getRollerWaiting() == 0 && Cools.isEmpty(travel.getRollerWaitingCode())) {
+ return true;
+ }
+ if (!this.update(
+ new LambdaUpdateWrapper<Travel>()
+ .eq(Travel::getId, travelId)
+ .set(Travel::getRollerWaiting, 0)
+ .set(Travel::getRollerWaitingCode, null)
+ )) {
+ log.error("travel [{}] failed to clear roller waiting", travelId);
+ return false;
+ }
+ return true;
+ }
+
}
--
Gitblit v1.9.1