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