From 2a7b97eddbe3d24a47389a58dde46fe6175b6971 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期日, 16 六月 2024 10:22:12 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapUtils.java | 246 ++++++++++++++++++++++++++++++------------------ 1 files changed, 153 insertions(+), 93 deletions(-) diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapUtils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapUtils.java index 396260b..b6426ad 100644 --- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapUtils.java +++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapUtils.java @@ -1,93 +1,153 @@ -//package com.zy.asrs.wcs.core.utils; -// -//import com.alibaba.fastjson.JSON; -//import com.zy.asrs.common.wms.entity.BasMap; -//import com.zy.asrs.framework.common.SpringUtils; -//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.rcs.constant.DeviceRedisConstant; -//import org.springframework.stereotype.Component; -// -//import java.util.ArrayList; -//import java.util.Date; -//import java.util.List; -// -//@Component -//public class NavigateMapUtils { -// -// /** -// * 鍐欏叆璺緞鑺傜偣鏁版嵁鍒皉edis鍦板浘涓� -// * lock涓簍rue 绂佺敤搴撲綅锛宭ock涓篺alse鎭㈠搴撲綅 -// */ -// public synchronized boolean writeNavigateNodeToRedisMap(Integer lev, Integer shuttleNo, List<NavigateNode> nodes, boolean lock) { -// RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); -// try { -// if (nodes.isEmpty()) { -// return true; -// } -// -// NavigateMapData navigateMapData = new NavigateMapData(lev); -// -// Object o = redisUtil.get(DeviceRedisConstant.MAP + lev); -// if (o == null) { -// return false; -// } -// -// //鑾峰彇灏忚溅鑺傜偣 -// List<int[]> shuttlePoints = Utils.getShuttlePoints(shuttleNo, lev); -// -// BasMap basMap = JSON.parseObject(o.toString(), BasMap.class); -// ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class); -// //甯﹀皬杞﹀湴鍥� -// List<List<MapNode>> listsHasShuttle = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, shuttlePoints);//鑾峰彇甯﹀皬杞﹀湴鍥炬暟鎹� -// List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁 -// -// //妫�娴嬭矾寰勬槸鍚﹁閿佸畾 -// if (lock) { -// for (NavigateNode node : nodes) { -// List<MapNode> listX = listsHasShuttle.get(node.getX()); -// MapNode mapNode = listX.get(node.getY()); -// if (mapNode.getValue() == -999) { -// return false;//璺緞琚攣瀹氳繃锛岀姝㈠啀娆¢攣瀹� -// } -// if (mapNode.getValue() == 66) { -// return false;//璺緞瀛樺湪灏忚溅锛岀姝㈤攣瀹� -// } -// } -// } -// -// //灏濊瘯閿佸畾/瑙i攣璺緞 -// 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(DeviceRedisConstant.MAP + lev, JSON.toJSONString(basMap)); -// return true; -// } catch (Exception e) { -// e.printStackTrace(); -// } -// return false; -// } -// -//} +package com.zy.asrs.wcs.core.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.zy.asrs.wcs.core.domain.dto.RedisMapDto; +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.rcs.constant.DeviceRedisConstant; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Component +public class NavigateMapUtils { + + @Autowired + private NavigateMapData navigateMapData; + @Autowired + private RedisUtil redisUtil; + @Autowired + private ObjectMapper objectMapper; + + /** + * 鍐欏叆璺緞鑺傜偣鏁版嵁鍒皉edis鍦板浘涓� + * lock涓簍rue 绂佺敤搴撲綅锛宭ock涓篺alse鎭㈠搴撲綅 + */ + public synchronized boolean writeNavigateNodeToRedisMap(Integer lev, Integer shuttleNo, List<NavigateNode> nodes, boolean lock) { + try { + if (nodes.isEmpty()) { + return true; + } + + navigateMapData.setLev(lev); + Object o = redisUtil.get(DeviceRedisConstant.MAP + lev); + if (o == null) { + return false; + } + + //鑾峰彇灏忚溅鑺傜偣 + List<int[]> shuttlePoints = Utils.getShuttlePoints(shuttleNo, lev); + + RedisMapDto redisMap = JSON.parseObject(o.toString(), RedisMapDto.class); + ArrayList arrayList = JSON.parseObject(redisMap.getData(), ArrayList.class); + //甯﹀皬杞﹀湴鍥� + List<List<MapNode>> listsHasShuttle = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, shuttlePoints);//鑾峰彇甯﹀皬杞﹀湴鍥炬暟鎹� + List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁 + + //妫�娴嬭矾寰勬槸鍚﹁閿佸畾 + if (lock) { + for (NavigateNode node : nodes) { + List<MapNode> listX = listsHasShuttle.get(node.getX()); + MapNode mapNode = listX.get(node.getY()); + if (mapNode.getValue() == -999) { + return false;//璺緞琚攣瀹氳繃锛岀姝㈠啀娆¢攣瀹� + } + if (mapNode.getValue() == 66) { + return false;//璺緞瀛樺湪灏忚溅锛岀姝㈤攣瀹� + } + } + } + + //灏濊瘯閿佸畾/瑙i攣璺緞 + navigateMapData.setLev(nodes.get(0).getZ()); + List<List<MapNode>> realMap = navigateMapData.getJsonDataFromDict(-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); + } + redisMap.setData(JSON.toJSONString(lists)); + redisMap.setUpdateTime(new Date()); + //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis + redisUtil.set(DeviceRedisConstant.MAP + lev, JSON.toJSONString(redisMap, SerializerFeature.DisableCircularReferenceDetect)); + + //淇濆瓨璺緞閿佽妭鐐� + saveLockPath(lev, nodes, lock); + return true; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + //淇濆瓨璺緞閿佽妭鐐� + public void saveLockPath(Integer lev, List<NavigateNode> nodes, boolean lock) { + Object o = redisUtil.get(DeviceRedisConstant.LOCK_PATH + lev); + List<NavigateNode> navigateNodes = new ArrayList<>(); + if (o != null) { + navigateNodes = JSON.parseArray(o.toString(), NavigateNode.class); + } + + if (lock) { + navigateNodes.addAll(nodes); + redisUtil.set(DeviceRedisConstant.LOCK_PATH + lev, JSON.toJSONString(navigateNodes, SerializerFeature.DisableCircularReferenceDetect)); + }else { + List<NavigateNode> tmp = new ArrayList<>(); + for (NavigateNode navigateNode : navigateNodes) { + boolean flag = true; + for (NavigateNode node : nodes) { + if (navigateNode.getX() == node.getX() + && navigateNode.getY() == node.getY() + && navigateNode.getZ() == node.getZ()) { + flag = false; + break; + } + } + + if (flag) { + tmp.add(navigateNode); + } + } + + redisUtil.set(DeviceRedisConstant.LOCK_PATH + lev, JSON.toJSONString(tmp, SerializerFeature.DisableCircularReferenceDetect)); + } + } + + //鑾峰彇璺緞閿佽妭鐐� + public List<NavigateNode> getLockPath(Integer lev) { + Object obj = redisUtil.get(DeviceRedisConstant.LOCK_PATH + lev); + List<NavigateNode> navigateNodes = new ArrayList<>(); + if (obj != null) { + try { + navigateNodes = objectMapper.readValue(obj.toString(), new TypeReference<List<NavigateNode>>() {}); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + return navigateNodes; + } + +} -- Gitblit v1.9.1