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 | 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