From f46e6a76cee1e4f231fab74981a87947bf84677d Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期二, 15 十月 2024 11:02:47 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateMapUtils.java | 84 +++++++++++++++++++++++++++++++++++++++--- 1 files changed, 78 insertions(+), 6 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 26179cc..fb4052f 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,10 +1,14 @@ package com.zy.asrs.wcs.core.utils; import com.alibaba.fastjson.JSON; -import com.zy.asrs.framework.common.SpringUtils; +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.MapNodeType; import com.zy.asrs.wcs.core.model.enums.NavigationMapType; import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant; import org.springframework.beans.factory.annotation.Autowired; @@ -19,13 +23,16 @@ @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) { - RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); try { if (nodes.isEmpty()) { return true; @@ -51,10 +58,10 @@ for (NavigateNode node : nodes) { List<MapNode> listX = listsHasShuttle.get(node.getX()); MapNode mapNode = listX.get(node.getY()); - if (mapNode.getValue() == -999) { + if (mapNode.getValue() == MapNodeType.LOCK.id) { return false;//璺緞琚攣瀹氳繃锛岀姝㈠啀娆¢攣瀹� } - if (mapNode.getValue() == 66) { + if (mapNode.getValue() == MapNodeType.CAR.id) { return false;//璺緞瀛樺湪灏忚溅锛岀姝㈤攣瀹� } } @@ -71,7 +78,7 @@ List<MapNode> listX = lists.get(node.getX()); MapNode mapNode = listX.get(node.getY()); if (lock) { - mapNode.setValue(-999);//绂佺敤搴撲綅 + mapNode.setValue(MapNodeType.LOCK.id);//绂佺敤搴撲綅 } else { //鑾峰彇鍘熷鑺傜偣鏁版嵁 List<MapNode> rows = realMap.get(node.getX()); @@ -85,7 +92,10 @@ redisMap.setData(JSON.toJSONString(lists)); redisMap.setUpdateTime(new Date()); //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis - redisUtil.set(DeviceRedisConstant.MAP + lev, JSON.toJSONString(redisMap)); + redisUtil.set(DeviceRedisConstant.MAP + lev, JSON.toJSONString(redisMap, SerializerFeature.DisableCircularReferenceDetect)); + + //淇濆瓨璺緞閿佽妭鐐� + saveLockPath(lev, nodes, lock); return true; } catch (Exception e) { e.printStackTrace(); @@ -93,4 +103,66 @@ 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) { + try { + navigateNodes = objectMapper.readValue(o.toString(), new TypeReference<List<NavigateNode>>() {}); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + String nodeStr = null; + if (lock) { + navigateNodes.addAll(nodes); + try { + nodeStr = objectMapper.writeValueAsString(navigateNodes); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + redisUtil.set(DeviceRedisConstant.LOCK_PATH + lev, nodeStr); + }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); + } + } + + try { + nodeStr = objectMapper.writeValueAsString(tmp); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + redisUtil.set(DeviceRedisConstant.LOCK_PATH + lev, nodeStr); + } + } + + //鑾峰彇璺緞閿佽妭鐐� + 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