From 627f9f28c8a19d9deae694c11c10dec1d4593270 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 06 六月 2024 16:58:28 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapData.java |  220 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 158 insertions(+), 62 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapData.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapData.java
index 1868b6b..19641c9 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapData.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapData.java
@@ -1,24 +1,24 @@
 package com.zy.asrs.wcs.core.utils;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.common.wms.entity.BasMap;
-import com.zy.asrs.common.wms.entity.LocMast;
-import com.zy.asrs.common.wms.service.LocMastService;
 import com.zy.asrs.framework.common.SpringUtils;
+import com.zy.asrs.wcs.core.domain.dto.RedisMapDto;
 import com.zy.asrs.wcs.core.entity.Loc;
 import com.zy.asrs.wcs.core.model.MapNode;
-import com.zy.asrs.wcs.core.model.NavigateNode;
 import com.zy.asrs.wcs.core.model.enums.NavigationMapType;
 import com.zy.asrs.wcs.core.service.LocService;
 import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
+import com.zy.asrs.wcs.system.entity.Dict;
+import com.zy.asrs.wcs.system.service.DictService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.*;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * A*绠楁硶鍦板浘鑾峰彇绫�
@@ -28,6 +28,8 @@
 
     @Autowired
     private LocService locService;
+    @Autowired
+    private DictService dictService;
 
     private Integer lev;//鍦板浘妤煎眰
 
@@ -125,6 +127,154 @@
         return map;
     }
 
+    //鑾峰彇JSON鏍煎紡鏁版嵁-鍘熷鍦板浘
+    public List<List<MapNode>> getJsonDataFromDict(Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
+        List<List<MapNode>> arrayList = getMapFromDict(lev);
+        return arrayList;
+    }
+
+    //浠庢暟鎹瓧鍏镐腑瑙f瀽鎸囧畾妤煎眰鍦板浘鏁版嵁
+    public List<List<MapNode>> getMapFromDict(Integer currentLev) {
+        List<Dict> dicts = dictService.list(new LambdaQueryWrapper<Dict>()
+                .like(Dict::getFlag, "map-" + currentLev)
+                .eq(Dict::getStatus, 1));
+
+        TreeMap<Integer, ArrayList<ArrayList<MapNode>>> levData = new TreeMap<>();
+        for (Dict dict : dicts) {
+            String[] split = dict.getFlag().split("-");
+            int lev = Integer.parseInt(split[1]);
+
+            TreeMap<Integer, List<JSONObject>> rows = new TreeMap<>();
+            //鎺掑簭Row
+            JSONArray value = JSON.parseArray(dict.getValue());
+            for (Object o : value) {
+                JSONObject item = JSON.parseObject(o.toString());
+                if (item.getString("type").equals("SHELF")) {
+                    JSONObject property = JSON.parseObject(item.getString("property"));
+                    Integer row1 = property.getInteger("row");
+                    ArrayList<JSONObject> bays = new ArrayList<>();
+                    if (rows.containsKey(row1)) {
+                        bays.addAll(rows.get(row1));
+                    }
+                    bays.add(property);
+                    rows.put(row1, bays);
+                }
+            }
+
+            ArrayList<ArrayList<MapNode>> list = new ArrayList<>();
+            //鎺掑簭Bay
+            for (Map.Entry<Integer, List<JSONObject>> entry : rows.entrySet()) {
+                ArrayList<MapNode> nodes = new ArrayList<>();
+                for (JSONObject object : entry.getValue()) {
+                    MapNode mapNode = new MapNode();
+                    mapNode.setValue(object.getInteger("shelfType"));
+                    mapNode.setTop(object.getInteger("top"));
+                    mapNode.setBottom(object.getInteger("bottom"));
+                    mapNode.setLeft(object.getInteger("left"));
+                    mapNode.setRight(object.getInteger("right"));
+                    mapNode.setRow(object.getInteger("row"));
+                    mapNode.setBay(object.getInteger("bay"));
+                    mapNode.setNo(object.getString("row") + "-" + object.getString("bay"));
+                    mapNode.setXBase(object.getInteger("refx"));
+                    mapNode.setYBase(object.getInteger("refy"));
+                    nodes.add(mapNode);
+                }
+
+                Collections.sort(nodes, new Comparator<MapNode>() {
+                    @Override
+                    public int compare(MapNode o1, MapNode o2) {
+                        return Integer.compare(o1.getBay(), o2.getBay());
+                    }
+                });
+
+                ArrayList<MapNode> sortNodes = new ArrayList<>();
+                int defaultBay = 1;//榛樿浠�1鍒楀紑濮�
+                for (MapNode node : nodes) {
+                    if (node.getBay() == defaultBay) {
+                        defaultBay++;
+                        sortNodes.add(node);
+                        continue;
+                    }
+
+                    //瀛樺湪绌虹己鑺傜偣锛岃嚜鍔ㄨˉ瓒�
+                    for (int i = defaultBay; i < node.getBay(); i++) {
+                        MapNode mapNode = new MapNode();
+                        mapNode.setValue(-1);
+                        mapNode.setTop(1000);
+                        mapNode.setBottom(1000);
+                        mapNode.setLeft(1000);
+                        mapNode.setRight(1000);
+                        mapNode.setRow(node.getRow());
+                        mapNode.setBay(i);
+                        mapNode.setNo(node.getRow() + "-" + i);
+                        mapNode.setXBase(0);
+                        mapNode.setYBase(0);
+                        sortNodes.add(mapNode);
+                    }
+
+                    defaultBay = node.getBay() + 1;
+                    sortNodes.add(node);
+                }
+
+                list.add(sortNodes);
+            }
+
+            levData.put(lev, list);
+        }
+
+        for (Map.Entry<Integer, ArrayList<ArrayList<MapNode>>> entry : levData.entrySet()) {
+            ArrayList<ArrayList<MapNode>> lists = entry.getValue();//鑾峰彇鍦板浘
+
+            MapNode mapNode = new MapNode();
+            mapNode.setValue(-1);
+            mapNode.setTop(1000);
+            mapNode.setBottom(1000);
+            mapNode.setLeft(1000);
+            mapNode.setRight(1000);
+            mapNode.setRow(0);
+            mapNode.setBay(0);
+            mapNode.setNo("0-0");
+            mapNode.setXBase(0);
+            mapNode.setYBase(0);
+
+            //鑾峰彇鏈�闀縭ow
+            int row = 0;
+            //缁欐瘡涓猺ow棣栧熬澧炲姞-1鑺傜偣
+            for (ArrayList<MapNode> list : lists) {
+                if (list.size() > row) {
+                    row = list.size();
+                }
+
+                list.add(0, mapNode.clone());
+                list.add(mapNode.clone());
+            }
+
+            ArrayList<MapNode> headNodes = new ArrayList<>();
+            ArrayList<MapNode> footerNodes = new ArrayList<>();
+            for (int i = 0; i < row+2; i++) {
+                headNodes.add(mapNode.clone());
+                footerNodes.add(mapNode.clone());
+            }
+
+            lists.add(0, headNodes);
+            lists.add(footerNodes);
+
+            Integer lev = entry.getKey();
+            Date now = new Date();
+            RedisMapDto map = new RedisMapDto();
+            map.setData(JSON.toJSONString(lists));
+            map.setCreateTime(now);
+            map.setUpdateTime(now);
+            map.setLev(lev);
+
+            List<List<MapNode>> mapNodeList = new ArrayList<>();
+            mapNodeList.addAll(lists);
+            return mapNodeList;
+        }
+
+        return null;
+    }
+
     //鑾峰彇JSON鏍煎紡鏁版嵁
     public List<List<MapNode>> getJsonData(Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
         RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
@@ -163,7 +313,8 @@
         //杩囨护鏁版嵁
         //鑾峰彇褰撳墠妤煎眰搴撲綅鏁版嵁
         List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>()
-                .eq(Loc::getLev, lev));
+                .eq(Loc::getLev, lev)
+                .orderByAsc(Loc::getRow, Loc::getBay));
         for (Loc loc : locs) {
             Integer row = loc.getRow();
             Integer bay = loc.getBay();
@@ -224,61 +375,6 @@
         }
 
         return lists;
-    }
-
-    /**
-     * 閿�/瑙i攣 璺緞鑺傜偣
-     * 鍐欏叆璺緞鑺傜偣鏁版嵁鍒皉edis鍦板浘涓�
-     * lock涓簍rue 绂佺敤搴撲綅锛宭ock涓篺alse鎭㈠搴撲綅
-     */
-    public synchronized boolean writeNavigateNodeToRedisMap(List<NavigateNode> nodes, boolean lock) {
-        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
-        Object o = redisUtil.get("realtimeBasMap_" + lev);
-        if (o == null) {
-            return false;
-        }
-
-        BasMap basMap = JSON.parseObject(o.toString(), BasMap.class);
-        ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
-        List<List<MapNode>> lists = filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁
-
-        // 闃叉閲嶅閿佽矾寰�
-        if (lock) {
-            for (NavigateNode node : nodes) {
-                List<MapNode> listX = lists.get(node.getX());
-                MapNode mapNode = listX.get(node.getY());
-                if (mapNode.getValue() == -999) {
-                    return false;
-                }
-            }
-        }
-
-        this.setLev(nodes.get(0).getZ());
-        List<List<MapNode>> realMap = this.getJsonData(-1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
-        for (NavigateNode node : nodes) {
-            if (node.getZ() != lev) {
-                continue;
-            }
-
-            List<MapNode> listX = lists.get(node.getX());
-            MapNode mapNode = listX.get(node.getY());
-            if (lock) {
-                mapNode.setValue(-999);//绂佺敤搴撲綅
-            }else {
-                //鑾峰彇鍘熷鑺傜偣鏁版嵁
-                List<MapNode> rows = realMap.get(node.getX());
-                MapNode col = rows.get(node.getY());
-                mapNode.setValue(col.getValue());//鎭㈠搴撲綅
-            }
-
-            listX.set(node.getY(), mapNode);
-            lists.set(node.getX(), listX);
-        }
-        basMap.setData(JSON.toJSONString(lists));
-        basMap.setUpdateTime(new Date());
-        //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
-        redisUtil.set("realtimeBasMap_" + lev, JSON.toJSONString(basMap));
-        return true;
     }
 
 }

--
Gitblit v1.9.1