From 0eacf47294055d7c292999b3167cbaf6938e50cc Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 12 六月 2024 16:56:26 +0800
Subject: [PATCH] #
---
zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapData.java | 280 ++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 181 insertions(+), 99 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 6244431..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,27 +1,35 @@
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*绠楁硶鍦板浘鑾峰彇绫�
*/
@Component
public class NavigateMapData {
+
+ @Autowired
+ private LocService locService;
+ @Autowired
+ private DictService dictService;
private Integer lev;//鍦板浘妤煎眰
@@ -119,35 +127,166 @@
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) {
- try {
- String mapFilename = "map_" + lev + ".json";
-
- String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//鑾峰彇鏂囦欢璺緞
- File file = new File(fileName);
- StringBuffer stringBuffer = new StringBuffer();
- if (file.isFile() && file.exists()) {
- InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK");
- BufferedReader br = new BufferedReader(isr);
- String lineTxt = null;
- while ((lineTxt = br.readLine()) != null) {
- stringBuffer.append(lineTxt);
- }
- br.close();
-
- //瑙f瀽json鍦板浘鏁版嵁
- ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
- List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//杩囨护鍦板浘鏁版嵁
-
- return lists;
- } else {
- System.out.println("鏂囦欢涓嶅瓨鍦�!");
- }
- } catch (IOException ioException) {
- ioException.printStackTrace();
+ RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
+ Object o = redisUtil.get(DeviceRedisConstant.MAP + lev);
+ if (o == null) {
+ return null;
}
- return null;
+
+ BasMap basMap = JSON.parseObject(o.toString(), BasMap.class);
+ ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
+ List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//杩囨护鍦板浘鏁版嵁
+ return lists;
}
/**
@@ -172,13 +311,13 @@
}
//杩囨护鏁版嵁
- LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
//鑾峰彇褰撳墠妤煎眰搴撲綅鏁版嵁
- List<LocMast> locMasts = locMastService.list(new LambdaQueryWrapper<LocMast>()
- .eq(LocMast::getLev1, lev));
- for (LocMast locMast : locMasts) {
- Integer row = locMast.getRow1();
- Integer bay = locMast.getBay1();
+ List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>()
+ .eq(Loc::getLev, lev)
+ .orderByAsc(Loc::getRow, Loc::getBay));
+ for (Loc loc : locs) {
+ Integer row = loc.getRow();
+ Integer bay = loc.getBay();
boolean whiteFlag = false;//榛樿涓嶅瓨鍦ㄧ櫧鍚嶅崟
if (whitePoints != null) {
@@ -203,17 +342,15 @@
} else if (mapType == NavigationMapType.DFX.id) {
//杞﹁締鏈夎揣
//璇诲彇瀵瑰簲搴撲綅鏁版嵁锛屽皢DFX搴撲綅鐘舵�佺殑鑺傜偣缃负-1(闅滅鐗�)
- if (locMast.getLocSts().equals("F")
- || locMast.getLocSts().equals("D")
- || locMast.getLocSts().equals("X")
- || locMast.getLocSts().equals("R")
- || locMast.getLocSts().equals("P")
+ if (loc.getLocSts$().equals("F")
+ || loc.getLocSts$().equals("D")
+ || loc.getLocSts$().equals("X")
) {
mapNode.setValue(-1);//绂佺敤鑺傜偣
}
} else if (mapType == NavigationMapType.NORMAL.id) {
//杩囨护搴撲綅鐘舵�乆
- if (locMast.getLocSts().equals("X")) {
+ if (loc.getLocSts$().equals("X")) {
mapNode.setValue(-1);//绂佺敤鑺傜偣
}
}
@@ -238,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;
- }
- }
- }
-
- NavigateMapData mapData = new NavigateMapData(nodes.get(0).getZ());
- List<List<MapNode>> realMap = mapData.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