From 4318e903ec4b0be53a53a1b7cfc60a767cd38125 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@gmail.com>
Date: 星期一, 15 十二月 2025 14:47:17 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaBootService.java |  119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 110 insertions(+), 9 deletions(-)

diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaBootService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaBootService.java
index b99ab80..5ffb780 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaBootService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/AreaBootService.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.acs.common.constant.RedisConstant;
 import com.zy.acs.common.utils.RedisSupport;
+import com.zy.acs.framework.common.Cools;
 import com.zy.acs.manager.common.domain.AreaShapeDto;
 import com.zy.acs.manager.common.domain.MapPointDto;
 import com.zy.acs.manager.core.service.astart.CodeNodeType;
@@ -11,18 +12,23 @@
 import com.zy.acs.manager.manager.entity.Area;
 import com.zy.acs.manager.manager.enums.StatusType;
 import com.zy.acs.manager.manager.service.AreaService;
+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 java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
 
 @Slf4j
 @Service
 public class AreaBootService {
+
+//    public static final Map<String, Set<Long>> CODE_AGV = new ConcurrentHashMap<>();
+
+    public static final Map<Long, List<String>> AREA_CODE = new ConcurrentHashMap<>();
 
     private final RedisSupport redis = RedisSupport.defaultRedisSupport;
 
@@ -32,28 +38,104 @@
     private MapDataDispatcher mapDataDispatcher;
 
     // launcher -------------------------------------------------------
-
     @EventListener(ApplicationReadyEvent.class)
     public void init() {
         List<Area> areaList = areaService.list(new LambdaQueryWrapper<Area>().eq(Area::getStatus, StatusType.ENABLE.val));
-        log.info("areaList: {}", JSON.toJSONString(areaList));
+        if (Cools.isEmpty(areaList)) {
+            return;
+        }
 
+        List<AreaNode> areaNodeList = new ArrayList<>();
         for (Area area : areaList) {
             AreaShapeDto shapeDto = JSON.parseObject(area.getShapeData(), AreaShapeDto.class);
             MapPointDto start = shapeDto.getStart();
             MapPointDto end = shapeDto.getEnd();
 
-            List<String> codeList = this.findCodesInArea(start, end);
-            log.info("codeList: {}", JSON.toJSONString(codeList));
+            double minX = Math.min(start.getX(), end.getX());
+            double maxX = Math.max(start.getX(), end.getX());
+            double minY = Math.min(start.getY(), end.getY());
+            double maxY = Math.max(start.getY(), end.getY());
 
-            String redisKey = area.getName() + (area.getZoneId() != null ? "_" + area.getZoneId() : "");
-            String areaDataStr = redis.getValue(RedisConstant.MAP_AREA_DATA_FLAG, redisKey);
-
+            areaNodeList.add(new AreaNode(area.getId(), minX, maxX, minY, maxY));
         }
+
+        String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(MapDataDispatcher.MAP_DEFAULT_LEV);
+        Double[][][] cdaMatrix = mapDataDispatcher.getCdaMatrix(MapDataDispatcher.MAP_DEFAULT_LEV);
+        int rows = cdaMatrix.length;
+        int cols = cdaMatrix[0].length;
+
+        for (int i = 0; i < rows; i++) {
+            for (int j = 0; j < cols; j++) {
+                String code = codeMatrix[i][j];
+                if (CodeNodeType.NONE.val.equals(code)) { continue; }
+
+                Double x = cdaMatrix[i][j][0];
+                Double y = cdaMatrix[i][j][1];
+                if (x == null || y == null) { continue; }
+
+                for (AreaNode areaNode : areaNodeList) {
+                    if (this.inRect(x, y, areaNode.minX, areaNode.maxX, areaNode.minY, areaNode.maxY)) {
+
+                        List<String> codeList = AREA_CODE.computeIfAbsent(areaNode.getId(), k -> new ArrayList<>());
+                        codeList.add(code);
+                    }
+                }
+            }
+        }
+
+//        for (Map.Entry<Long, List<String>> entry : AREA_CODE.entrySet()) {
+//            Long areaId = entry.getKey();
+//            List<String> codeList = entry.getValue();
+//
+//            for (String code : codeList) {
+//                Set<Long> agvList = CODE_AGV.computeIfAbsent(code, k -> new HashSet<>());
+//                // todo AreaAGV( man_area_agv )
+//
+//
+//            }
+//        }
+
+
+//        for (Area area : areaList) {
+//            AreaShapeDto shapeDto = JSON.parseObject(area.getShapeData(), AreaShapeDto.class);
+//            MapPointDto start = shapeDto.getStart();
+//            MapPointDto end = shapeDto.getEnd();
+//
+//            List<String> codeList = this.findCodesInArea(start, end);
+//            log.info("codeList: {}", JSON.toJSONString(codeList));
+//
+//            String redisKey = area.getName() + (area.getZoneId() != null ? "_" + area.getZoneId() : "");
+//            String areaDataStr = redis.getValue(RedisConstant.MAP_AREA_DATA_FLAG, redisKey);
+//
+//        }
 
         System.out.println(1);
     }
 
+    // checkout list of area by code data
+    public List<Long> queryAreas(String code) {
+        List<Long> areaIds = new ArrayList<>();
+        for (Map.Entry<Long, List<String>> entry : AREA_CODE.entrySet()) {
+            List<String> codeList = entry.getValue();
+            if (!Cools.isEmpty(codeList) && codeList.contains(code)) {
+                areaIds.add(entry.getKey());
+            }
+        }
+        return areaIds;
+    }
+
+    // reset and set new area
+    public List<String> reSet(Area area) {
+        AreaShapeDto shapeDto = JSON.parseObject(area.getShapeData(), AreaShapeDto.class);
+        MapPointDto start = shapeDto.getStart();
+        MapPointDto end = shapeDto.getEnd();
+
+        List<String> codeList = this.findCodesInArea(start, end);
+        AREA_CODE.remove(area.getId());
+        AREA_CODE.put(area.getId(), codeList);
+
+        return codeList;
+    }
 
     public List<String> findCodesInArea(MapPointDto start, MapPointDto end) {
         double minX = Math.min(start.getX(), end.getX());
@@ -94,4 +176,23 @@
         return x >= minX && x <= maxX && y >= minY && y <= maxY;
     }
 
+    @Data
+    public static class AreaNode {
+
+        public Long id;
+        public double minX;
+        public double maxX;
+        public double minY;
+        public double maxY;
+
+        public AreaNode(Long id, double minX, double maxX, double minY, double maxY) {
+            this.id = id;
+            this.minX = minX;
+            this.maxX = maxX;
+            this.minY = minY;
+            this.maxY = maxY;
+        }
+
+    }
+
 }

--
Gitblit v1.9.1