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