From dcf49806e12b014cf6471910814fdbcb6f494c44 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 27 四月 2026 09:11:01 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/StaServiceImpl.java |   71 ++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 3 deletions(-)

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 276355d..5370b92 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
@@ -2,7 +2,9 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zy.acs.common.utils.News;
 import com.zy.acs.framework.common.Cools;
+import com.zy.acs.manager.core.integrate.conveyor.ConveyorStationService;
 import com.zy.acs.manager.core.domain.TaskPosDto;
 import com.zy.acs.manager.manager.entity.*;
 import com.zy.acs.manager.manager.enums.*;
@@ -11,6 +13,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -29,6 +33,8 @@
     private StaReserveService staReserveService;
     @Autowired
     private TaskService taskService;
+    @Autowired
+    private ConveyorStationService conveyorStationService;
 
     @Override
     public Sta selectByStaNo(String staNo) {
@@ -48,12 +54,22 @@
 
     @Override
     public List<Sta> queryAvailableOutSta(Integer minAvailableQty) {
-        return this.baseMapper.selectAvailableOutSta(minAvailableQty);
+        long rollerStaType = StaTypeType.ROLLER.val();
+        List<Sta> list = new ArrayList<>();
+        list.addAll(this.baseMapper.selectAvailableOutStaRoller(rollerStaType, minAvailableQty));
+        list.addAll(this.baseMapper.selectAvailableOutStaCommon(rollerStaType, minAvailableQty));
+        list.sort(Comparator.comparing(Sta::getStaNo, Comparator.nullsLast(String::compareTo)));
+        return list;
     }
 
     @Override
     public List<Sta> queryAvailableInSta(Integer minAvailableQty) {
-        return this.baseMapper.selectAvailableInSta(minAvailableQty);
+        long rollerStaType = StaTypeType.ROLLER.val();
+        List<Sta> list = new ArrayList<>();
+        list.addAll(this.baseMapper.selectAvailableInStaRoller(rollerStaType, minAvailableQty));
+        list.addAll(this.baseMapper.selectAvailableInStaCommon(rollerStaType, minAvailableQty));
+        list.sort(Comparator.comparing(Sta::getStaNo, Comparator.nullsLast(String::compareTo)));
+        return list;
     }
 
     @Override
@@ -78,10 +94,59 @@
             return false;
         }
         Sta sta = this.getById(staId);
+        return StaTypeType.ROLLER.equals(resolveStaType(sta));
+    }
+
+    @Override
+    public StaTypeType resolveStaType(Sta sta) {
         if (sta == null || Cools.isEmpty(sta.getStaType())) {
+            return null;
+        }
+        for (StaTypeType value : StaTypeType.values()) {
+            if (value.val() == sta.getStaType()) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public boolean allowAgvWorkAtSta(String agvNo, Sta sta, Task task, Segment seg, StaReserveType type) {
+        if (sta == null) {
             return false;
         }
-        return StaTypeType.ROLLER.val() == sta.getStaType();
+        if (!staReserveService.waitingStaReserve(sta, task, seg, 1, type)) {
+            return false;
+        }
+
+        StaTypeType staType = resolveStaType(sta);
+        if (staType == null) {
+            News.warn("AGV [{}] station [{}] has unknown sta type, validation bypassed",
+                    agvNo,
+                    sta.getStaNo());
+            return true;
+        }
+
+        switch (staType) {
+            case ROLLER:
+                if (!conveyorStationService.allowAgvWork(sta, task, seg, type)) {
+                    staReserveService.rollbackWaitingToReserved(sta, task, type);
+                    return false;
+                }
+                News.info("AGV [{}] work permitted at conveyor station [{}], type=[{}]",
+                        agvNo,
+                        sta.getStaNo(),
+                        type);
+                return true;
+            case RACK:
+            case TRANSFER:
+            default:
+                News.info("AGV [{}] work permitted at station [{}], staType=[{}], validation bypassed",
+                        agvNo,
+                        sta.getStaNo(),
+                        staType);
+                return true;
+        }
     }
 
     @Override

--
Gitblit v1.9.1