From 5b7abad9f80bb0b4c9d0bb2d85e0368a92888b30 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期三, 31 十二月 2025 14:34:21 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java                |   39 ++++++++++--
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TransferStationHandler.java     |   15 ++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/entity/Segment.java                  |    6 ++
 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            |   41 +++++++------
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/SegmentService.java          |    3 +
 version/doc/RCS输送线逻辑梳理.xmind                                                                 |    0 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java            |    3 
 8 files changed, 96 insertions(+), 28 deletions(-)

diff --git "a/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind" "b/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
index 095e2bd..75f5bbf 100644
--- "a/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
+++ "b/version/doc/RCS\350\276\223\351\200\201\347\272\277\351\200\273\350\276\221\346\242\263\347\220\206.xmind"
Binary files differ
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 f2c6663..0bbbe3d 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
@@ -4,19 +4,17 @@
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.manager.common.utils.CommonUtil;
 import com.zy.acs.manager.core.domain.AgvCntDto;
-import com.zy.acs.manager.core.domain.Lane;
 import com.zy.acs.manager.core.domain.FilterLaneDto;
+import com.zy.acs.manager.core.domain.Lane;
 import com.zy.acs.manager.core.domain.TaskPosDto;
 import com.zy.acs.manager.manager.entity.*;
-import com.zy.acs.manager.manager.enums.StaTypeType;
-import com.zy.acs.manager.manager.enums.StatusType;
-import com.zy.acs.manager.manager.enums.TaskStsType;
-import com.zy.acs.manager.manager.enums.TaskTypeType;
+import com.zy.acs.manager.manager.enums.*;
 import com.zy.acs.manager.manager.service.*;
 import com.zy.acs.manager.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -91,12 +89,13 @@
         return result;
     }
 
+    @Transactional(rollbackFor = Exception.class)
     public synchronized String execute(Task task, AllocateSupport inbound, AllocateSupport normal) {
         // inbound roller station
         Sta rollerOriSta = getInboundRollerSta(task);
         String inboundAgv = tryAllocateForRoller(task, rollerOriSta, true);
         if (!Cools.isEmpty(inboundAgv)) {
-            inbound.success(task, inboundAgv);
+            inbound.success(task, inboundAgv, rollerOriSta);
             return inboundAgv;
         }
 
@@ -104,13 +103,13 @@
         Sta rollerDestSta = getOutboundRollerSta(task);
         String outboundAgv = tryAllocateForRoller(task, rollerDestSta, false);
         if (!Cools.isEmpty(outboundAgv)) {
-            normal.success(task, outboundAgv);
+            normal.success(task, outboundAgv, rollerDestSta);
             return outboundAgv;
         }
 
         String normalAgv = this.normalExecute(task);
         if (!Cools.isEmpty(normalAgv)) {
-            normal.success(task, normalAgv);
+            normal.success(task, normalAgv, null);
             return normalAgv;
         }
 
@@ -206,17 +205,21 @@
             }
 
             // has running task and within oriSta
-//            List<Segment> currSeg = segmentService.getByAgvAndState(agvId, SegmentStateType.WAITING.toString());
-            int taskCnt = taskService.count(new LambdaQueryWrapper<Task>()
-                    .eq(Task::getAgvId, agvId)
-                    .eq(Task::getOriSta, sta.getId())
-                    .and(wrapper -> wrapper
-                            .eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
-                            .or()
-                            .eq(Task::getTaskSts, TaskStsType.PROGRESS.val())
-                    )
-            );
-            if (taskCnt == 0) {
+//            int taskCnt = taskService.count(new LambdaQueryWrapper<Task>()
+//                    .eq(Task::getAgvId, agvId)
+//                    .eq(Task::getOriSta, sta.getId())
+//                    .and(wrapper -> wrapper
+//                            .eq(Task::getTaskSts, TaskStsType.ASSIGN.val())
+//                            .or()
+//                            .eq(Task::getTaskSts, TaskStsType.PROGRESS.val())
+//                    )
+//            );
+//            if (taskCnt == 0) {
+//                continue;
+//            }
+            // in TransferStationHandler.hasDelayAtSta
+            Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
+            if (null == currSeg) {
                 continue;
             }
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java
index 5536983..c923b53 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AllocateSupport.java
@@ -1,9 +1,10 @@
 package com.zy.acs.manager.core.service;
 
+import com.zy.acs.manager.manager.entity.Sta;
 import com.zy.acs.manager.manager.entity.Task;
 
 public interface AllocateSupport {
 
-    void success(Task task, String agvNo);
+    void success(Task task, String agvNo, Sta sta);
 
 }
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 13ef79e..33d4e20 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
@@ -245,19 +245,44 @@
                 return;
             }
 
-            List<Long> taskIds = taskList.stream().map(Task::getId).distinct().collect(Collectors.toList());
+//            List<Long> taskIds = taskList.stream().map(Task::getId).distinct().collect(Collectors.toList());
             for (Task t : taskList) {
                 String resultAgvNo = allocateService.execute(t
                         // inbound
-                        , (task, agvNo) -> {
+                        , (task, agvNo, sta) -> {
+                            Long agvId = agvService.getAgvId(agvNo);
 
+                            List<Travel> travelList = travelService.list(new LambdaQueryWrapper<Travel>()
+                                    .eq(Travel::getAgvId, agvId)
+                                    .eq(Travel::getState, TravelStateType.RUNNING.toString())
+                                    .orderByDesc(Travel::getCreateTime));
+                            if (Cools.isEmpty(travelList)) {
+                                throw new BusinessException("[Agv: " + agvNo + "]allocate inbound failed to find travel");
+                            }
+                            Travel travel = travelList.get(0);
+
+                            List<Segment> currSegments = segmentService.list(new LambdaQueryWrapper<Segment>()
+                                    .eq(Segment::getAgvId, agvId)
+                                    .eq(Segment::getTravelId, travel.getId())
+                            );
+                            // load segment
+                            Segment currSeg = segmentService.getRollerWaiting(agvId, sta.getCode(), TaskPosDto.PosType.ORI_STA);
+
+
+                            // place segment
+
+                            task.setAgvId(agvId);
+                            task.setTaskSts(TaskStsType.ASSIGN.val());
+                            task.setIoTime(now);
+                            task.setUpdateTime(now);
+                            if (!taskService.updateById(task)) {
+                                throw new BusinessException("seqNum: " + task.getSeqNum() + " failed to update");
+                            }
                         }
                         // normal
-                        , (task, agvNo) -> {
-                            if (Cools.isEmpty(agvNo)) {
-                                return;
-                            }
-                            task.setAgvId(agvService.getAgvId(agvNo));
+                        , (task, agvNo, sta) -> {
+                            Long agvId = agvService.getAgvId(agvNo);
+                            task.setAgvId(agvId);
                             task.setTaskSts(TaskStsType.WAITING.val());
                             task.setIoTime(now);
                             task.setUpdateTime(now);
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 d49dbc8..5cf49ab 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
@@ -12,7 +12,8 @@
 
 import java.util.Objects;
 
-// man_segment: start_time, end_time
+// man_segment: start_time, end_time, alter table man_segment
+//    add roller_waiting int(1) default 0 null comment '婊氱瓛绾跨瓑寰�' after end_time;
 /**
  * alter table man_sta
  *     add capacity int null comment '妲戒綅鏁�' after angle;
@@ -87,6 +88,12 @@
                 return false;
             }
 
+            // sign waiting
+            if (currSeg.getRollerWaiting() == 0) {
+                currSeg.setRollerWaiting(1);
+                segmentService.updateById(currSeg);
+            }
+
             // timeout
             return (now - preEndTime) < LOAD_DELAY_MS;
         }
@@ -102,6 +109,12 @@
                 return false;
             }
 
+            // sign waiting
+            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 99795d3..a36e304 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
@@ -107,6 +107,12 @@
     private Date endTime;
 
     /**
+     * 婊氱瓛绾跨瓑寰� 1: 鏄�  0: 鍚�
+     */
+    @ApiModelProperty(value= "婊氱瓛绾跨瓑寰� 1: 鏄�  0: 鍚�  ")
+    private Integer rollerWaiting;
+
+    /**
      * 杩涘害
      */
     @ApiModelProperty(value= "杩涘害")
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 d6177fd..a61122c 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
@@ -1,6 +1,7 @@
 package com.zy.acs.manager.manager.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zy.acs.manager.core.domain.TaskPosDto;
 import com.zy.acs.manager.manager.entity.Segment;
 import com.zy.acs.manager.manager.enums.SegmentStateType;
 
@@ -30,4 +31,6 @@
 
     int countRemainingBackpack(Long travelId, Long agvId);
 
+    Segment getRollerWaiting(Long agvId, Long codeId, TaskPosDto.PosType posType);
+
 }
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 343256d..ee330e1 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
@@ -4,6 +4,7 @@
 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.core.domain.TaskPosDto;
 import com.zy.acs.manager.manager.entity.Segment;
 import com.zy.acs.manager.manager.entity.Task;
 import com.zy.acs.manager.manager.enums.ActionStsType;
@@ -168,4 +169,20 @@
         return this.baseMapper.countRemainingBackpack(agvId, travelId);
     }
 
+    @Override
+    public Segment getRollerWaiting(Long agvId, Long codeId, TaskPosDto.PosType posType) {
+        List<Segment> segments = this.list(new LambdaQueryWrapper<Segment>()
+                .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)
+        );
+        if (Cools.isEmpty(segments)) {
+            return null;
+        }
+        return segments.get(0);
+    }
+
 }

--
Gitblit v1.9.1