From 8bc919a3a4ad7f690ad5269628f4405df1a896b8 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期四, 18 十二月 2025 15:03:19 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java     |   74 +++++++++++++++++++++++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaGovernService.java      |   18 +++++-
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java           |    4 
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/LocService.java          |    5 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/LocMapper.java            |    5 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java              |    8 +-
 zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/LocServiceImpl.java |   10 +++
 7 files changed, 108 insertions(+), 16 deletions(-)

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 8f6a78e..43222dc 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
@@ -173,7 +173,7 @@
                     oriLoc = locService.getById(param.getStartLocNo());
                 }
                 if (!Cools.isEmpty(param.getStartLocNoStr())) {
-                    oriLoc = locService.selecatByLocNo(param.getStartLocNoStr());
+                    oriLoc = locService.selectByLocNo(param.getStartLocNoStr());
                 }
                 if (null == oriLoc) {
                     return R.error();
@@ -192,7 +192,7 @@
                     destLoc = locService.getById(param.getEndLocNo());
                 }
                 if (!Cools.isEmpty(param.getEndLocNoStr())) {
-                    destLoc = locService.selecatByLocNo(param.getEndLocNoStr());
+                    destLoc = locService.selectByLocNo(param.getEndLocNoStr());
                 }
                 if (null == destLoc) {
                     return R.error();
@@ -220,7 +220,7 @@
                     oriLoc = locService.getById(param.getStartLocNo());
                 }
                 if (!Cools.isEmpty(param.getStartLocNoStr())) {
-                    oriLoc = locService.selecatByLocNo(param.getStartLocNoStr());
+                    oriLoc = locService.selectByLocNo(param.getStartLocNoStr());
                 }
                 if (null == oriLoc) {
                     return R.error();
@@ -286,7 +286,7 @@
                     destLoc = locService.getById(param.getEndLocNo());
                 }
                 if (!Cools.isEmpty(param.getEndLocNoStr())) {
-                    destLoc = locService.selecatByLocNo(param.getEndLocNoStr());
+                    destLoc = locService.selectByLocNo(param.getEndLocNoStr());
                 }
                 if (null == destLoc) {
                     return R.error();
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
index f1a45ae..0ab5997 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
@@ -6,13 +6,12 @@
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.SnowflakeIdWorker;
 import com.zy.acs.manager.common.domain.TaskDto;
-import com.zy.acs.manager.core.service.MainLockWrapService;
-import com.zy.acs.manager.core.service.MainService;
-import com.zy.acs.manager.core.service.TrafficService;
+import com.zy.acs.manager.core.service.*;
 import com.zy.acs.manager.manager.controller.param.OpenBusSubmitParam;
 import com.zy.acs.manager.manager.entity.*;
 import com.zy.acs.manager.manager.enums.*;
 import com.zy.acs.manager.manager.service.*;
+import com.zy.acs.manager.manager.service.impl.CodeServiceImpl;
 import com.zy.acs.manager.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,8 +52,14 @@
     private AgvModelService agvModelService;
     @Autowired
     private SnowflakeIdWorker snowflakeIdWorker;
+    @Autowired
+    private AgvAreaDispatcher agvAreaDispatcher;
+    @Autowired
+    private AreaGovernService areaGovernService;
+    @Autowired
+    private CodeServiceImpl codeService;
 
-//    @Scheduled(fixedRate = 500) // 鍥哄畾棰戠巼鎵ц锛屼笉鍚屾
+    //    @Scheduled(fixedRate = 500) // 鍥哄畾棰戠巼鎵ц锛屼笉鍚屾
     @Scheduled(fixedDelay = 1000) // 鍥哄畾棰戠巼鎵ц锛屽悓姝�
 //    @Scheduled(cron = "0/1 * * * * ? ")
     private void execute() {
@@ -91,7 +96,7 @@
             return;
         }
 
-        // STOCK
+        // STOCK STA
         LambdaQueryWrapper<Sta> stockWrapper = new LambdaQueryWrapper<Sta>()
                 .eq(Sta::getStaSts, StaStsType.STOCK.val())
                 .eq(Sta::getStatus, StatusType.ENABLE.val)
@@ -127,6 +132,65 @@
         mainService.generateBusAndTask(param, memo);
     }
 
+    private void runStaToLoc0(String memo) {
+        AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString()));
+        if (null == agvModel) { return; }
+
+        // STOCK STA
+        List<Sta> stockList = staService.list(new LambdaQueryWrapper<Sta>()
+                .eq(Sta::getStaSts, StaStsType.STOCK.val())
+                .eq(Sta::getStatus, StatusType.ENABLE.val));
+        if (Cools.isEmpty(stockList)) { return; }
+        Collections.shuffle(stockList);
+
+        OpenBusSubmitParam param = new OpenBusSubmitParam();
+        param.setBatch(String.valueOf(snowflakeIdWorker.nextId()).substring(13, 19));
+        for (int i = 0; i < Math.min(agvModel.getBackpack(), stockList.size()) ; i++) {
+            Sta stockSta = stockList.get(i);
+            String staCode = stockSta.getCode$();
+
+            Loc idleLoc = null;
+
+            // 鎵�鍦ㄥ尯鍩熺殑鏉$爜锛屽鏋滄病鏈塧rea缁戝畾锛屽氨鍏ㄥ湴鍥�
+            List<String> codeList = areaGovernService.queryCodesByOneCode(staCode);
+            if (Cools.isEmpty(codeList)) {
+                idleLoc = locService.selectRandOneByLocSts(LocStsType.IDLE.val());
+            } else {
+                Collections.shuffle(codeList);
+                for (String codeData : codeList) {
+                    Code code = codeService.getCacheByData(codeData);
+                    if (null == code) { break; }
+                    List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>()
+                            .eq(Loc::getCode, code.getId()).eq(Loc::getLocSts, LocStsType.IDLE.val()));
+                    if (Cools.isEmpty(locList)) {
+                        break;
+                    } else if (locList.size() == 1) {
+                        idleLoc = locList.get(0);
+                    } else {
+                        Collections.shuffle(locList);
+                        idleLoc = locList.get(0);
+                    }
+                    if (null != idleLoc) {
+                        break;
+                    }
+                }
+            }
+
+            if (null == idleLoc) { break; }
+
+            TaskDto taskDto = new TaskDto();
+            taskDto.setOriSta(stockSta.getStaNo());
+            taskDto.setDestLoc(idleLoc.getLocNo());
+            taskDto.setPriority(100);
+            taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19));
+
+            param.getTaskList().add(taskDto);
+        }
+        if (Cools.isEmpty(param.getTaskList())) { return; }
+
+        mainService.generateBusAndTask(param, memo);
+    }
+
     // 鍑哄簱
     private void runLocToSta(String memo) {
 //        Integer startRow = Collections.min(locGroupList);
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaGovernService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaGovernService.java
index 875f8b6..177b2be 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaGovernService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaGovernService.java
@@ -15,10 +15,9 @@
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.event.ApplicationReadyEvent;
-import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.PostConstruct;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -40,7 +39,8 @@
     private AreaAgvService areaAgvService;
 
     // launcher -------------------------------------------------------
-    @EventListener(ApplicationReadyEvent.class)
+//    @EventListener(ApplicationReadyEvent.class)
+    @PostConstruct
     public void init() {
         List<Area> areaList = areaService.list(new LambdaQueryWrapper<Area>().eq(Area::getStatus, StatusType.ENABLE.val));
         if (Cools.isEmpty(areaList)) {
@@ -124,6 +124,18 @@
         return areaIds;
     }
 
+    // checkout list of code by code data
+    public List<String> queryCodesByOneCode(String code) {
+        Set<String> codeSet = new HashSet<>();
+        for (Map.Entry<Long, List<String>> entry : AREA_CODE.entrySet()) {
+            List<String> codeList = entry.getValue();
+            if (!Cools.isEmpty(codeList) && codeList.contains(code)) {
+                codeSet.addAll(codeList);
+            }
+        }
+        return new ArrayList<>(codeSet);
+    }
+
     // checkout list of code by area ids
     public List<String> queryCodes(List<Long> areaIds) {
         if (Cools.isEmpty(areaIds)) {
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java
index 1c75b7f..490fddb 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java
@@ -51,7 +51,7 @@
 
             // ori --------------------------
             if (!Cools.isEmpty(taskDto.getOriLoc())) {
-                Loc oriLoc = locService.selecatByLocNo(taskDto.getOriLoc());
+                Loc oriLoc = locService.selectByLocNo(taskDto.getOriLoc());
                 if (null == oriLoc) {
                     throw new BusinessException("oriLoc: " + taskDto.getOriLoc() + " doesn't exist!");
                 }
@@ -68,7 +68,7 @@
             }
             // dest --------------------------
             if (!Cools.isEmpty(taskDto.getDestLoc())) {
-                Loc destLoc = locService.selecatByLocNo(taskDto.getDestLoc());
+                Loc destLoc = locService.selectByLocNo(taskDto.getDestLoc());
                 if (null == destLoc) {
                     throw new BusinessException("destLoc: " + taskDto.getDestLoc() + " doesn't exist!");
                 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/LocMapper.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/LocMapper.java
index 266f5ee..c7384cd 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/LocMapper.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/LocMapper.java
@@ -2,6 +2,8 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.zy.acs.manager.manager.entity.Loc;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 import java.util.Map;
@@ -12,4 +14,7 @@
 
     List<Map<String, Object>> selectDigitalLocWhichNeedShow();
 
+    @Select("SELECT * FROM man_loc WHERE loc_sts = #{locSts} ORDER BY RAND() LIMIT 1")
+    Loc selectRandOneByLocSts(@Param("locSts") Long locSts);
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/LocService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/LocService.java
index 4b1fc72..11efdd7 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/LocService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/LocService.java
@@ -9,11 +9,14 @@
 
 public interface LocService extends IService<Loc> {
 
-    Loc selecatByLocNo(String locNo);
+    Loc selectByLocNo(String locNo);
 
     List<Map<String, Object>> selectCountGroupByLocSts();
 
     List<Map<String, Object>> selectDigitalLocWhichNeedShow();
 
     void taskCallBack(Task task);
+
+    Loc selectRandOneByLocSts(Long locSts);
+    
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/LocServiceImpl.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/LocServiceImpl.java
index d73227f..3c88e08 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/LocServiceImpl.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/LocServiceImpl.java
@@ -29,7 +29,7 @@
     private StaService staService;
 
     @Override
-    public Loc selecatByLocNo(String locNo) {
+    public Loc selectByLocNo(String locNo) {
         return this.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, locNo));
     }
 
@@ -144,4 +144,12 @@
 
     }
 
+    @Override
+    public Loc selectRandOneByLocSts(Long locSts) {
+        if (locSts == null) {
+            return null;
+        }
+        return this.baseMapper.selectRandOneByLocSts(locSts);
+    }
+
 }

--
Gitblit v1.9.1