From 9741bd10f294f85fd851e4564b33d107987f90b1 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期三, 07 一月 2026 15:57:40 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java                   |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskServiceImpl.java       |   58 ++++++++++++++++++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/constant/Constants.java                  |    3 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java                     |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java        |   70 ++++++++++++++++++++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TravelServiceImpl.java     |   15 +++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaService.java                 |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/ConveyorController.java |    8 +-
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/TravelService.java              |    3 +
 9 files changed, 153 insertions(+), 10 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/constant/Constants.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/constant/Constants.java
index b07da62..230bd05 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/constant/Constants.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/constant/Constants.java
@@ -5,6 +5,9 @@
  * Created by vincent on 2019-10-29 15:55
  */
 public class Constants {
+
+    public static final String HANDLE = "HANDLE";
+
     /**
      * 榛樿鎴愬姛鐮�
      */
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 3e352d0..0814a51 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
@@ -171,7 +171,7 @@
         task.setPriority(999);
         task.setIoTime(now);
         task.setStartTime(now);
-        task.setMemo("HANDLE");
+        task.setMemo("AUTO");
         if (!taskService.save(task)) {
             throw new BusinessException(task.getSeqNum() + "浠诲姟淇濆瓨澶辫触");
         }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/ConveyorController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/ConveyorController.java
index 303144e..5aae91c 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/ConveyorController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/conveyor/ConveyorController.java
@@ -38,16 +38,18 @@
                     .orderByAsc(Sta::getStaNo)
             );
             for (Sta sta : list) {
-                resultList.add(new ConveyorQueryResult(sta.getStaNo(), Boolean.TRUE));
+                resultList.add(new ConveyorQueryResult(sta.getStaNo()
+                        , staService.hasWorkingAgv(sta.getId())));
             }
         } else {
             for (String staNo : staNos) {
                 Sta sta = staService.selectByStaNo(staNo);
-                if (null == sta) {
+                if (null == sta || !sta.getStatus().equals(StatusType.ENABLE.val)) {
                     resultList.add(new ConveyorQueryResult(staNo, Boolean.FALSE));
                     continue;
                 }
-                resultList.add(new ConveyorQueryResult(staNo, Boolean.TRUE));
+                resultList.add(new ConveyorQueryResult(staNo
+                        , staService.hasWorkingAgv(sta.getId())));
             }
         }
 
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 eee0e94..1263012 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
@@ -670,6 +670,7 @@
 
 
             // generate travel
+            travelService.finishAll(agvId);
             Travel travel = new Travel();
             travel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
             travel.setTravelId(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
@@ -805,6 +806,7 @@
             }
 
             // generate travel
+            travelService.finishAll(agvId);
             Travel travel = new Travel();
             travel.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
             travel.setTravelId(String.valueOf(snowflakeIdWorker.nextId()).substring(3));
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaService.java
index 4a41e17..3908f1b 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/StaService.java
@@ -18,4 +18,6 @@
 
     boolean isRoller(Long staId);
 
+    Boolean hasWorkingAgv(Long staId);
+
 }
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 1da015a..781b975 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
@@ -6,4 +6,7 @@
 public interface TravelService extends IService<Travel> {
 
     void checkFinish(Long travelId);
+
+    void finishAll(Long agvId);
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java
index e0e9afe..c0871c6 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java
@@ -3,17 +3,31 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zy.acs.framework.common.Cools;
-import com.zy.acs.manager.manager.entity.Sta;
+import com.zy.acs.manager.core.domain.TaskPosDto;
+import com.zy.acs.manager.manager.entity.*;
+import com.zy.acs.manager.manager.enums.SegmentStateType;
 import com.zy.acs.manager.manager.enums.StaTypeType;
 import com.zy.acs.manager.manager.enums.StatusType;
+import com.zy.acs.manager.manager.enums.TravelStateType;
 import com.zy.acs.manager.manager.mapper.StaMapper;
-import com.zy.acs.manager.manager.service.StaService;
+import com.zy.acs.manager.manager.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service("staService")
 public class StaServiceImpl extends ServiceImpl<StaMapper, Sta> implements StaService {
+
+    @Autowired
+    private AgvService agvService;
+    @Autowired
+    private AgvDetailService agvDetailService;
+    @Autowired
+    private SegmentService segmentService;
+    @Autowired
+    private TravelService travelService;
 
     @Override
     public Sta selectByStaNo(String staNo) {
@@ -53,4 +67,56 @@
         return StaTypeType.ROLLER.val() == sta.getStaType();
     }
 
+    @Override
+    public Boolean hasWorkingAgv(Long staId) {
+        Sta sta = this.getById(staId);
+        Long codeId = sta.getCode();
+        if (null == codeId) {
+            return false;
+        }
+
+        List<Long> agvIds = agvService.list(new LambdaQueryWrapper<Agv>()
+                        .select(Agv::getId)
+                        .eq(Agv::getStatus, StatusType.ENABLE.val))
+                .stream().map(Agv::getId).collect(Collectors.toList());
+        if (Cools.isEmpty(agvIds)) {
+            return false;
+        }
+        for (Long agvId : agvIds) {
+            Code currentCode = agvDetailService.getCurrentCode(agvId);
+            if (null == currentCode) { continue; }
+
+            if (!currentCode.getId().equals(codeId)) {
+                continue;
+            }
+
+            // if hit  return true
+            Segment lastSeg = segmentService.getOne(new LambdaQueryWrapper<Segment>()
+                    .eq(Segment::getAgvId, agvId).eq(Segment::getEndNode, codeId)
+                    .orderByDesc(Segment::getId).last("LIMIT 1"));
+            if (null == lastSeg) {
+                return false;
+//                continue;
+            }
+            Travel travel = travelService.getById(lastSeg.getTravelId());
+            if (travel.getState().equals(TravelStateType.FINISH.toString())) {
+                return false;
+            }
+            // running travel
+            List<Segment> segments = segmentService.list(new LambdaQueryWrapper<Segment>()
+                    .eq(Segment::getTravelId, travel.getId()));
+            for (Segment segment : segments) {
+                if (segment.getEndNode().equals(codeId)
+                        && segment.getState().equals(SegmentStateType.RUNNING.toString())
+                        && (segment.getPosType().equals(TaskPosDto.PosType.ORI_STA.toString())
+                            || segment.getPosType().equals(TaskPosDto.PosType.DEST_STA.toString()))
+                ) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskServiceImpl.java
index 9666287..0f3a22b 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/TaskServiceImpl.java
@@ -6,6 +6,7 @@
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.SnowflakeIdWorker;
 import com.zy.acs.framework.exception.CoolException;
+import com.zy.acs.manager.common.constant.Constants;
 import com.zy.acs.manager.common.domain.BaseParam;
 import com.zy.acs.manager.common.domain.PageParam;
 import com.zy.acs.manager.common.domain.PageResult;
@@ -43,6 +44,12 @@
     private LaneService laneService;
     @Autowired
     private StaReserveService staReserveService;
+    @Autowired
+    private SegmentService segmentService;
+    @Autowired
+    private ActionService actionService;
+    @Autowired
+    private TravelService travelService;
 
     @Override
     public PageResult<Task> pageRel(PageParam<Task, BaseParam> pageParam) {
@@ -98,15 +105,37 @@
         if (null == task) {
             return Boolean.FALSE;
         }
+        Date now = new Date();
+        // stock
         this.maintainLocAndStaHandler(task, Boolean.TRUE);
-
+        // task
         task.setTaskSts(TaskStsType.COMPLETE.val());
-        task.setUpdateTime(new Date());
+        task.setUpdateTime(now);
         task.setUpdateBy(userId);
+        task.setMemo(Constants.HANDLE + " " + TaskStsType.COMPLETE);
         if (!this.updateById(task)) {
             throw new CoolException(BaseRes.ERROR);
         }
+        // bus
         busService.checkoutComplete(task.getBusId());
+        // segment
+        List<Segment> segments = segmentService.list(new LambdaQueryWrapper<Segment>().eq(Segment::getTaskId, taskId));
+        if (!Cools.isEmpty(segments)) {
+            for (Segment segment : segments) {
+                if (segment.getState().equals(SegmentStateType.FINISH.toString())) {
+                    continue;
+                }
+                segment.setState(SegmentStateType.FINISH.toString());
+                segment.setUpdateTime(now);
+                segment.setUpdateBy(userId);
+                segment.setMemo(Constants.HANDLE);
+                if (!segmentService.updateById(segment)) {
+                    throw new CoolException(BaseRes.ERROR);
+                }
+            }
+            // travel
+            travelService.checkFinish(segments.get(0).getTravelId());
+        }
         return Boolean.TRUE;
     }
 
@@ -117,15 +146,36 @@
         if (null == task) {
             return Boolean.FALSE;
         }
+        Date now = new Date();
+        // stock
         this.maintainLocAndStaHandler(task, Boolean.FALSE);
-
+        // task
         task.setTaskSts(TaskStsType.CANCEL.val());
-        task.setUpdateTime(new Date());
+        task.setUpdateTime(now);
         task.setUpdateBy(userId);
+        task.setMemo(Constants.HANDLE + " " + TaskStsType.CANCEL);
         if (!this.updateById(task)) {
             throw new CoolException(BaseRes.ERROR);
         }
         busService.checkoutComplete(task.getBusId());
+        // segment
+        List<Segment> segments = segmentService.list(new LambdaQueryWrapper<Segment>().eq(Segment::getTaskId, taskId));
+        if (!Cools.isEmpty(segments)) {
+            for (Segment segment : segments) {
+                if (segment.getState().equals(SegmentStateType.FINISH.toString())) {
+                    continue;
+                }
+                segment.setState(SegmentStateType.FINISH.toString());
+                segment.setUpdateTime(now);
+                segment.setUpdateBy(userId);
+                segment.setMemo(Constants.HANDLE);
+                if (!segmentService.updateById(segment)) {
+                    throw new CoolException(BaseRes.ERROR);
+                }
+            }
+            // travel
+            travelService.checkFinish(segments.get(0).getTravelId());
+        }
         return Boolean.TRUE;
     }
 
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 de403bb..7010598 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
@@ -10,12 +10,14 @@
 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;
 
+@Slf4j
 @Service("travelService")
 public class TravelServiceImpl extends ServiceImpl<TravelMapper, Travel> implements TravelService {
 
@@ -45,4 +47,17 @@
         }
     }
 
+    @Override
+    public void finishAll(Long agvId) {
+        List<Travel> travelList = this.list(new LambdaQueryWrapper<Travel>()
+                .eq(Travel::getAgvId, agvId).eq(Travel::getState, TravelStateType.RUNNING.toString()));
+        for (Travel travel : travelList) {
+            travel.setState(TravelStateType.FINISH.toString());
+            travel.setUpdateTime(new Date());
+            if (!this.updateById(travel)) {
+                log.error("failed to finish travel all");
+            }
+        }
+    }
+
 }

--
Gitblit v1.9.1