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