From 87f00d0a2de9c22a56de6abd28806261adf38c10 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期一, 27 三月 2023 08:01:59 +0800 Subject: [PATCH] 算法优化等 --- src/main/java/com/zy/core/enums/ShuttleRunDirection.java | 63 +++++++++++++++ src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java | 15 +++ src/main/java/com/zy/common/utils/RedisUtil.java | 13 ++- src/main/java/com/zy/common/model/NavigateNode.java | 2 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 99 +++++++++++++++++++++++- src/main/java/com/zy/common/utils/NavigateUtils.java | 5 + src/main/java/com/zy/asrs/entity/WrkMast.java | 7 + 7 files changed, 192 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/zy/asrs/entity/WrkMast.java b/src/main/java/com/zy/asrs/entity/WrkMast.java index 1f7a1bd..860704d 100644 --- a/src/main/java/com/zy/asrs/entity/WrkMast.java +++ b/src/main/java/com/zy/asrs/entity/WrkMast.java @@ -322,6 +322,13 @@ @TableField("full_plt") private String fullPlt; + /** + * 鍥涘悜绌挎杞﹀彿 + */ + @ApiModelProperty(value= "鍥涘悜绌挎杞﹀彿") + @TableField("shuttle_no") + private Integer shuttleNo; + public String getWrkSts$(){ BasWrkStatusMapper mapper = SpringUtils.getBean(BasWrkStatusMapper.class); BasWrkStatus entity = mapper.selectById(this.wrkSts); diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 4651f27..538cced 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -10,15 +10,11 @@ import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; -import com.zy.common.model.LocTypeDto; -import com.zy.common.model.MatDto; -import com.zy.common.model.SearchLocParam; -import com.zy.common.model.StartupDto; +import com.zy.common.model.*; import com.zy.common.model.enums.WrkChargeType; import com.zy.common.service.CommonService; import com.zy.common.service.erp.ErpService; -import com.zy.common.utils.CollectionUtils; -import com.zy.common.utils.HttpHandler; +import com.zy.common.utils.*; import com.zy.core.CrnThread; import com.zy.core.DevpThread; import com.zy.core.News; @@ -28,6 +24,7 @@ import com.zy.core.model.*; import com.zy.core.model.command.CrnCommand; import com.zy.core.model.command.LedCommand; +import com.zy.core.model.command.ShuttleCommand; import com.zy.core.model.command.SteCommand; import com.zy.core.model.protocol.CrnProtocol; import com.zy.core.model.protocol.ShuttleProtocol; @@ -94,6 +91,8 @@ private OrderMapper orderMapper; @Autowired private OrderDetlMapper orderDetlMapper; + @Autowired + private RedisUtil redisUtil; /** * 缁勬墭 @@ -624,7 +623,93 @@ // 鍙湁褰撳洓鍚戠┛姊溅绌洪棽 骞朵笖鏃犱换鍔℃椂鎵嶇户缁墽琛� if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE && shuttleProtocol.getTaskNo() == 0) { //鍏ュ嚭搴撻�昏緫 - //..... + for (WrkMast wrkSts : wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 2))) { + //鍒嗛厤浠诲姟鍙� + shuttleProtocol.setTaskNo(wrkSts.getWrkNo().shortValue()); + //鍒嗛厤婧愬簱浣� + shuttleProtocol.setSourceLocNo(wrkSts.getSourceLocNo()); + //鍒嗛厤鐩爣搴撲綅 + shuttleProtocol.setLocNo(wrkSts.getLocNo()); + + //璁$畻璺緞 + List<NavigateNode> calc = NavigateUtils.calc(wrkSts.getSourceLocNo(), wrkSts.getLocNo(), "in"); + //鑾峰彇鍒嗘璺緞 + ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc); + //灏嗘map瀛樺叆redis涓� + HashMap<String, Object> map = new HashMap<>(); + //鎵ц姝ュ簭 + map.put("step", 0); + //璺緞鏁版嵁 + map.put("path", data); + //宸ヤ綔鍙� + map.put("wrk_no", wrkSts.getWrkNo()); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("wrk_no_" + wrkSts.getWrkNo().shortValue(), JSON.toJSONString(map)); + } + + } else if (shuttleProtocol.getBusyStatusType() == ShuttleStatusType.IDLE && shuttleProtocol.getTaskNo() != 0) { + //鍥涘悜绌挎杞︾┖闂� 骞朵笖鏈変换鍔� + Object o = redisUtil.get("wrk_no_" + shuttleProtocol.getTaskNo()); + HashMap map = JSON.parseObject(o.toString(), HashMap.class); + //褰撳墠姝ュ簭 + int step = Integer.parseInt(map.get("step").toString()); + //褰撳墠璺緞鏁版嵁 + Object data = map.get("path"); + ArrayList pathList = JSON.parseObject(data.toString(), ArrayList.class); + //鍙栫涓�鏉¤矾寰� + Object o1 = pathList.get(step); + ArrayList path = JSON.parseObject(o1.toString(), ArrayList.class); + + int size = path.size(); + //寮�濮嬭矾寰� + JSONObject startPath = JSON.parseObject(path.get(0).toString()); + System.out.println(startPath); + //鐩爣璺緞 + JSONObject endPath = JSON.parseObject(path.get(size - 1).toString()); + System.out.println(endPath); + + //涓嬪彂鍛戒护 + ShuttleCommand command = new ShuttleCommand(); + command.setCommandWord((short) 1); + command.setStartCodeNum(NavigatePositionConvert.xyToPosition(startPath.getIntValue("x"), startPath.getIntValue("y"))); + command.setMiddleCodeNum((short) 0); + command.setDistCodeNum(NavigatePositionConvert.xyToPosition(endPath.getIntValue("x"), endPath.getIntValue("y"))); + command.setStartToDistDistance(1000); + command.setMiddleToDistDistance(1000); + command.setRunDirection(ShuttleRunDirection.get(startPath.get("direction").toString()).id); + command.setPalletLift((short) 1); + command.setForceMoveDistance(1000); + command.setChargeSwitch((short) 2); + command.setIOControl((short) 0); + command.setRunSpeed((short) 1000); + command.setRadarTmp((short) 0); + command.setCommandEnd((short) 1); + + if (!MessageQueue.offer(SlaveType.Shuttle, shuttleProtocol.getShuttleNo().intValue(), new Task(2, command))) { + News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + } else { + News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(command)); + + //鍒ゆ柇鏁版嵁鏄惁鎵ц瀹屾垚 + if (step < size) { + //鏇存柊redis鏁版嵁 + //姝ュ簭澧炲姞 + step++; + map.put("step", step); + //浠诲姟鏁版嵁淇濆瓨鍒皉edis + redisUtil.set("wrk_no_" + map.get("wrk_no").toString(), JSON.toJSONString(map)); + }else { + //宸叉墽琛屽畬鎴� + //淇濆瓨鏁版嵁鍒版暟鎹簱鍋氭祦姘� + //鍒犻櫎redis + redisUtil.del("wrk_no_" + map.get("wrk_no").toString()); + + //銆傘�傘�� + //1銆佸懡浠や笅鏂归渶瑕佸垽鏂皬杞︾┖闂茬姸鎬� + //2銆� + } + + } } } diff --git a/src/main/java/com/zy/common/model/NavigateNode.java b/src/main/java/com/zy/common/model/NavigateNode.java index d173410..70e56ac 100644 --- a/src/main/java/com/zy/common/model/NavigateNode.java +++ b/src/main/java/com/zy/common/model/NavigateNode.java @@ -15,7 +15,7 @@ private int H;//灏嗚鑺辫垂鐨勬鏁� private NavigateNode Father;//鐖惰妭鐐� private Boolean isInflectionPoint;//鏄惁涓烘嫄鐐� - private String direction;//鎷愮偣鏂瑰悜 + private String direction;//琛岃蛋鏂瑰悜 public NavigateNode(int x, int y) { this.x = x; diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java index 417b0cd..7a592cb 100644 --- a/src/main/java/com/zy/common/utils/NavigateUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateUtils.java @@ -126,6 +126,7 @@ public static ArrayList<ArrayList<NavigateNode>> getSectionPath(List<NavigateNode> mapList) { ArrayList<ArrayList<NavigateNode>> list = new ArrayList<>(); ArrayList<NavigateNode> data = new ArrayList<>(); + String direction = mapList.get(0).getDirection();//琛岃蛋鏂瑰悜 for (NavigateNode mapNode : mapList) { boolean isInflectionPoint = mapNode.getIsInflectionPoint(); data.add(mapNode); @@ -133,7 +134,11 @@ //鎷愮偣 //鍒嗗壊鏁版嵁 list.add(data);//娣诲姞鏌愪竴娈垫暟鎹� + direction = mapNode.getDirection();//鏇存柊琛岃蛋鏂瑰悜 data = new ArrayList<>(); + }else { + //鐩磋绾胯矾 + mapNode.setDirection(direction);//璁剧疆琛岃蛋鏂瑰悜 } } diff --git a/src/main/java/com/zy/common/utils/RedisUtil.java b/src/main/java/com/zy/common/utils/RedisUtil.java index b2df114..85e4a0a 100644 --- a/src/main/java/com/zy/common/utils/RedisUtil.java +++ b/src/main/java/com/zy/common/utils/RedisUtil.java @@ -2,6 +2,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import java.util.List; @@ -13,13 +15,16 @@ * redisTemplate灏佽 * */ -//@Component +@Component public class RedisUtil { - @Autowired - private RedisTemplate<String, Object> redisTemplate; +// @Autowired +// private RedisTemplate<String, Object> redisTemplate; - public RedisUtil(RedisTemplate<String, Object> redisTemplate) { + @Autowired + private RedisTemplate redisTemplate; + + public RedisUtil(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } diff --git a/src/main/java/com/zy/core/enums/ShuttleRunDirection.java b/src/main/java/com/zy/core/enums/ShuttleRunDirection.java new file mode 100644 index 0000000..bf6888a --- /dev/null +++ b/src/main/java/com/zy/core/enums/ShuttleRunDirection.java @@ -0,0 +1,63 @@ +package com.zy.core.enums; + +/** + * 鍥涘悜绌挎杞﹁繍琛屾柟鍚� + */ +public enum ShuttleRunDirection { + + TOP((short)1, "璐х墿鏂瑰悜+"), + BOTTOM((short)2, "璐х墿鏂瑰悜-"), + LEFT((short)3, "杩囬亾鏂瑰悜+"), + RIGHT((short)4, "杩囬亾鏂瑰悜-"), + ; + + public Short id; + public String desc; + + ShuttleRunDirection(Short id,String desc) { + this.id = id; + this.desc = desc; + } + + public static ShuttleRunDirection get(String direction) { + if (null == direction) { + return null; + } + if (direction.equals("top")) { + return TOP; + } else if (direction.equals("bottom")) { + return BOTTOM; + } else if (direction.equals("left")) { + return LEFT; + } else if (direction.equals("right")) { + return RIGHT; + }else { + return null; + } + } + + public static ShuttleRunDirection get(Short id) { + if (null == id) { + return null; + } + for (ShuttleRunDirection type : ShuttleRunDirection.values()) { + if (type.id.equals(id.shortValue())) { + return type; + } + } + return null; + } + + public static ShuttleRunDirection get(ShuttleRunDirection type) { + if (null == type) { + return null; + } + for (ShuttleRunDirection shuttleRunDirection : ShuttleRunDirection.values()) { + if (shuttleRunDirection == type) { + return shuttleRunDirection; + } + } + return null; + } + +} diff --git a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java index 5c1d5d7..5f70de8 100644 --- a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java +++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java @@ -22,6 +22,16 @@ public Short taskNo = 0; /** + * 婧愬簱浣� + */ + public String sourceLocNo; + + /** + * 鐩爣搴撲綅 + */ + public String locNo; + + /** * 鎺� */ public Short row; @@ -220,4 +230,9 @@ this.busyStatusType = type; } + //鑾峰彇鐢垫睜鐢甸噺 + public Short getBatteryPower() { + return (short) (this.batteryPower * 0.1); + } + } -- Gitblit v1.9.1