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