From e49208f2514ccf950164a2d6d590d85f7cecb46a Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 07 六月 2024 16:26:28 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java |  304 +++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 235 insertions(+), 69 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
index 12beefa..1be358f 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/ShuttleAction.java
@@ -19,10 +19,7 @@
 import com.zy.asrs.wcs.core.model.enums.ShuttleTaskModeType;
 import com.zy.asrs.wcs.core.service.BasShuttleService;
 import com.zy.asrs.wcs.core.service.LocService;
-import com.zy.asrs.wcs.core.utils.NavigateMapUtils;
-import com.zy.asrs.wcs.core.utils.RedisUtil;
-import com.zy.asrs.wcs.core.utils.ShuttleDispatcher;
-import com.zy.asrs.wcs.core.utils.Utils;
+import com.zy.asrs.wcs.core.utils.*;
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
 import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
@@ -31,6 +28,8 @@
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
 import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
 import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
+import com.zy.asrs.wcs.system.entity.Dict;
+import com.zy.asrs.wcs.system.service.DictService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -53,6 +52,10 @@
     private ShuttleDispatcher shuttleDispatcher;
     @Autowired
     private ObjectMapper objectMapper;
+    @Autowired
+    private DictService dictService;
+    @Autowired
+    private ConveyorDispatcher conveyorDispatcher;
 
     public synchronized boolean assignWork(Device device, ShuttleAssignCommand assignCommand) {
         ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
@@ -277,77 +280,240 @@
         }
 
         int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅褰撳墠妤煎眰
-        if (shuttleProtocol.getYCurrent() > shuttleProtocol.getYTarget()) {
-            //璺戝簱缁撴潫
-            shuttleProtocol.setMoveLoc(false);
-            shuttleProtocol.setMoveType(0);
-            shuttleProtocol.setXStart(0);
-            shuttleProtocol.setXTarget(0);
-            shuttleProtocol.setXCurrent(0);
-            shuttleProtocol.setYStart(0);
-            shuttleProtocol.setYTarget(0);
-            shuttleProtocol.setYCurrent(0);
-            return;
-        }
 
         if (shuttleProtocol.getMoveType() == 0) {//璺戣建閬�
-            Integer xCurrent = shuttleProtocol.getXCurrent();
-            if (xCurrent > shuttleProtocol.getXTarget()) {//褰揦鍊煎ぇ浜嶺鐩爣鍊硷紝杩涜褰掗浂涓擸鏂瑰悜+1
-                shuttleProtocol.setXCurrent(shuttleProtocol.getXStart());
-                shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+            //鏍规嵁鍦板浘鏂瑰悜鍐冲畾璺憍鎴杫
+            Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>()
+                    .eq(Dict::getFlag, "direction_map")
+                    .eq(Dict::getStatus, 1));
+            if (dict == null) {
+                //璺戝簱缁撴潫
+                shuttleProtocol.setMoveLoc(false);
+                shuttleProtocol.setMoveType(0);
+                shuttleProtocol.setXStart(0);
+                shuttleProtocol.setXTarget(0);
+                shuttleProtocol.setXCurrent(0);
+                shuttleProtocol.setYStart(0);
+                shuttleProtocol.setYTarget(0);
+                shuttleProtocol.setYCurrent(0);
                 return;
             }
+            String direction = dict.getValue();
 
-            Integer yCurrent = shuttleProtocol.getYCurrent();
-            String locNo = Utils.getLocNo(xCurrent, yCurrent, lev);
-            Loc target = locService.getOne(new LambdaQueryWrapper<Loc>()
-                    .eq(Loc::getLocNo, locNo)
-                    .eq(Loc::getHostId, device.getHostId()));
-            if (target == null) {
-                shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
-                return;
-            }
-
-//            if (!target.getLocSts().equals("O")) {
-//                shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
-//                return;
-//            }
-
-            //璋冨害鍘荤洰鏍囦綅缃�
-            if (shuttleProtocol.getCurrentLocNo().equals(target.getLocNo())) {
-                shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);//灏忚溅鍜岀洰鏍囦綅缃竴鑷达紝璺宠繃
-            } else {
-                shuttleDispatcher.generateMoveTask(device, target.getLocNo());
-                shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
-            }
-        } else if (shuttleProtocol.getMoveType() == 1) {//璺戝簱浣�
-            ArrayList<String> locs = new ArrayList<>();
-            for (int i = shuttleProtocol.getXCurrent(); i <= shuttleProtocol.getXTarget(); i++) {
-                String locNo = Utils.getLocNo(i, shuttleProtocol.getYCurrent(), lev);
-                locs.add(locNo);
-            }
-
-            List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>()
-                    .in(Loc::getLocNo, locs));
-            if (locList.isEmpty()) {
-                //绌哄簱浣�
-                shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
-                return;
-            }
-
-            Loc start = locList.get(0);
-            Loc target = locList.get(locList.size() - 1);
-            //鍒ゆ柇灏忚溅鏄惁鍦ㄨ捣鐐逛綅缃�
-            if (!shuttleProtocol.getCurrentLocNo().equals(start.getLocNo())) {//涓嶅湪璧风偣浣嶇疆锛岃皟搴﹀幓璧风偣浣嶇疆
-                shuttleDispatcher.generateMoveTask(device, start.getLocNo());
-            }else {
-                //鍦ㄨ捣鐐逛綅缃紝璋冨害鍘荤洰鏍囦綅缃�
-                if (shuttleProtocol.getCurrentLocNo().equals(target.getLocNo())) {
-                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);//灏忚溅鍜岀洰鏍囦綅缃竴鑷达紝璺宠繃
-                }else {
-                    shuttleDispatcher.generateMoveTask(device, start.getLocNo());
-                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+            if (direction.equals("y")) {//璺憍杞存柟鍚戯紝璺戝畬x杞村啀鍒囨崲y杞�
+                ArrayList<String> locs = new ArrayList<>();
+                for (int i = shuttleProtocol.getXCurrent(); i <= shuttleProtocol.getXTarget(); i++) {
+                    String locNo = Utils.getLocNo(i, shuttleProtocol.getYCurrent(), lev);
+                    locs.add(locNo);
                 }
+
+                List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>()
+                        .eq(Loc::getLocSts, LocStsType.O.val())
+                        .in(Loc::getLocNo, locs));
+                if (locList.isEmpty()) {
+                    //绌哄簱浣�
+                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+                    return;
+                }
+
+                Loc start = locList.get(0);
+                Loc target = locList.get(locList.size() - 1);
+                //鍒ゆ柇灏忚溅鏄惁鍦ㄨ捣鐐逛綅缃�
+                if (!shuttleProtocol.getCurrentLocNo().equals(start.getLocNo())) {//涓嶅湪璧风偣浣嶇疆锛岃皟搴﹀幓璧风偣浣嶇疆
+                    shuttleDispatcher.generateMoveTask(device, start.getLocNo());
+                }else {
+                    //鍦ㄨ捣鐐逛綅缃紝璋冨害鍘荤洰鏍囦綅缃�
+                    shuttleDispatcher.generateMoveTask(device, target.getLocNo());
+                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);//鍒囨崲y杞�
+
+                    if(shuttleProtocol.getYCurrent() > shuttleProtocol.getYTarget()) {
+                        //y杞翠篃璺戝畬浜嗭紝缁撴潫璺戝簱
+                        shuttleProtocol.setMoveLoc(false);
+                        shuttleProtocol.setMoveType(0);
+                        shuttleProtocol.setXStart(0);
+                        shuttleProtocol.setXTarget(0);
+                        shuttleProtocol.setXCurrent(0);
+                        shuttleProtocol.setYStart(0);
+                        shuttleProtocol.setYTarget(0);
+                        shuttleProtocol.setYCurrent(0);
+                        return;
+                    }
+                }
+            }else {//璺憏杞存柟鍚戯紝璺戝畬y杞村啀鍒囨崲x杞�
+                ArrayList<String> locs = new ArrayList<>();
+                for (int i = shuttleProtocol.getYCurrent(); i <= shuttleProtocol.getYTarget(); i++) {
+                    String locNo = Utils.getLocNo(shuttleProtocol.getXCurrent(), i, lev);
+                    locs.add(locNo);
+                }
+
+                List<Loc> locList = locService.list(new LambdaQueryWrapper<Loc>()
+                        .eq(Loc::getLocSts, LocStsType.O.val())
+                        .in(Loc::getLocNo, locs));
+                if (locList.isEmpty()) {
+                    //绌哄簱浣�
+                    shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
+                    return;
+                }
+
+                Loc start = locList.get(0);
+                Loc target = locList.get(locList.size() - 1);
+                //鍒ゆ柇灏忚溅鏄惁鍦ㄨ捣鐐逛綅缃�
+                if (!shuttleProtocol.getCurrentLocNo().equals(start.getLocNo())) {//涓嶅湪璧风偣浣嶇疆锛岃皟搴﹀幓璧风偣浣嶇疆
+                    shuttleDispatcher.generateMoveTask(device, start.getLocNo());
+                }else {
+                    //鍦ㄨ捣鐐逛綅缃紝璋冨害鍘荤洰鏍囦綅缃�
+                    shuttleDispatcher.generateMoveTask(device, target.getLocNo());
+                    shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);//鍒囨崲x杞�
+
+                    if(shuttleProtocol.getXCurrent() > shuttleProtocol.getXTarget()) {
+                        //y杞翠篃璺戝畬浜嗭紝缁撴潫璺戝簱
+                        shuttleProtocol.setMoveLoc(false);
+                        shuttleProtocol.setMoveType(0);
+                        shuttleProtocol.setXStart(0);
+                        shuttleProtocol.setXTarget(0);
+                        shuttleProtocol.setXCurrent(0);
+                        shuttleProtocol.setYStart(0);
+                        shuttleProtocol.setYTarget(0);
+                        shuttleProtocol.setYCurrent(0);
+                        return;
+                    }
+                }
+            }
+
+        } else if (shuttleProtocol.getMoveType() == 1) {//璺戝簱浣�
+            //鏍规嵁鍦板浘鏂瑰悜鍐冲畾璺憍鎴杫
+            Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>()
+                    .eq(Dict::getFlag, "direction_map")
+                    .eq(Dict::getStatus, 1));
+            if (dict == null) {
+                //璺戝簱缁撴潫
+                shuttleProtocol.setMoveLoc(false);
+                shuttleProtocol.setMoveType(0);
+                shuttleProtocol.setXStart(0);
+                shuttleProtocol.setXTarget(0);
+                shuttleProtocol.setXCurrent(0);
+                shuttleProtocol.setYStart(0);
+                shuttleProtocol.setYTarget(0);
+                shuttleProtocol.setYCurrent(0);
+                return;
+            }
+            String direction = dict.getValue();
+
+            if (direction.equals("y")) {//璺憍杞存柟鍚戯紝璺戝畬x杞村啀鍒囨崲y杞�
+                Integer xCurrent = shuttleProtocol.getXCurrent();
+
+                //鑾峰彇寰呰窇搴撲綅鍙�
+                String locNo = Utils.getLocNo(xCurrent, shuttleProtocol.getYCurrent(), lev);
+                Loc target = locService.getOne(new LambdaQueryWrapper<Loc>()
+                        .eq(Loc::getLocNo, locNo)
+                        .eq(Loc::getLocSts, LocStsType.O.val())
+                        .eq(Loc::getHostId, device.getHostId()));
+                if (target == null || shuttleProtocol.getCurrentLocNo().equals(locNo)) {//搴撲綅涓嶅瓨鍦ㄦ垨灏忚溅宸插湪褰撳墠浣嶇疆
+                    shuttleProtocol.setXCurrent(xCurrent + 1);
+                    if (shuttleProtocol.getXCurrent() > shuttleProtocol.getXTarget()) {
+                        //x杞磋窇瀹岋紝鍒囨崲y杞�
+                        shuttleProtocol.setXCurrent(shuttleProtocol.getXStart());
+                        shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+
+                        if(shuttleProtocol.getYCurrent() > shuttleProtocol.getYTarget()) {
+                            //y杞翠篃璺戝畬浜嗭紝缁撴潫璺戝簱
+                            shuttleProtocol.setMoveLoc(false);
+                            shuttleProtocol.setMoveType(0);
+                            shuttleProtocol.setXStart(0);
+                            shuttleProtocol.setXTarget(0);
+                            shuttleProtocol.setXCurrent(0);
+                            shuttleProtocol.setYStart(0);
+                            shuttleProtocol.setYTarget(0);
+                            shuttleProtocol.setYCurrent(0);
+                            return;
+                        }
+                    }
+                    return;
+                }
+
+                //璋冨害鍘诲簱浣�
+                Task task = shuttleDispatcher.generateMoveTask(device, locNo);
+                if (task == null) {
+                    return;//璋冨害澶辫触
+                }
+
+                shuttleProtocol.setXCurrent(xCurrent + 1);
+                if (shuttleProtocol.getXCurrent() > shuttleProtocol.getXTarget()) {
+                    //x杞磋窇瀹岋紝鍒囨崲y杞�
+                    shuttleProtocol.setXCurrent(shuttleProtocol.getXStart());
+                    shuttleProtocol.setYCurrent(shuttleProtocol.getYCurrent() + 1);
+
+                    if(shuttleProtocol.getYCurrent() > shuttleProtocol.getYTarget()) {
+                        //y杞翠篃璺戝畬浜嗭紝缁撴潫璺戝簱
+                        shuttleProtocol.setMoveLoc(false);
+                        shuttleProtocol.setMoveType(0);
+                        shuttleProtocol.setXStart(0);
+                        shuttleProtocol.setXTarget(0);
+                        shuttleProtocol.setXCurrent(0);
+                        shuttleProtocol.setYStart(0);
+                        shuttleProtocol.setYTarget(0);
+                        shuttleProtocol.setYCurrent(0);
+                        return;
+                    }
+                }
+
+            }else {//璺憏杞存柟鍚戯紝璺戝畬y杞村啀鍒囨崲x杞�
+                Integer yCurrent = shuttleProtocol.getYCurrent();
+
+                //鑾峰彇寰呰窇搴撲綅鍙�
+                String locNo = Utils.getLocNo(shuttleProtocol.getXCurrent(), yCurrent, lev);
+                Loc target = locService.getOne(new LambdaQueryWrapper<Loc>()
+                        .eq(Loc::getLocNo, locNo)
+                        .eq(Loc::getLocSts, LocStsType.O.val())
+                        .eq(Loc::getHostId, device.getHostId()));
+                if (target == null || shuttleProtocol.getCurrentLocNo().equals(locNo)) {//搴撲綅涓嶅瓨鍦ㄦ垨灏忚溅宸插湪褰撳墠浣嶇疆
+                    shuttleProtocol.setYCurrent(yCurrent + 1);
+                    if (shuttleProtocol.getYCurrent() > shuttleProtocol.getYTarget()) {
+                        //y杞磋窇瀹岋紝鍒囨崲x杞�
+                        shuttleProtocol.setYCurrent(shuttleProtocol.getYStart());
+                        shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
+
+                        if(shuttleProtocol.getXCurrent() > shuttleProtocol.getXTarget()) {
+                            //x杞翠篃璺戝畬浜嗭紝缁撴潫璺戝簱
+                            shuttleProtocol.setMoveLoc(false);
+                            shuttleProtocol.setMoveType(0);
+                            shuttleProtocol.setXStart(0);
+                            shuttleProtocol.setXTarget(0);
+                            shuttleProtocol.setXCurrent(0);
+                            shuttleProtocol.setYStart(0);
+                            shuttleProtocol.setYTarget(0);
+                            shuttleProtocol.setYCurrent(0);
+                            return;
+                        }
+                    }
+                }
+
+                //璋冨害鍘诲簱浣�
+                Task task = shuttleDispatcher.generateMoveTask(device, locNo);
+                if (task == null) {
+                    return;//璋冨害澶辫触
+                }
+
+                shuttleProtocol.setYCurrent(yCurrent + 1);
+                if (shuttleProtocol.getYCurrent() > shuttleProtocol.getYTarget()) {
+                    //y杞磋窇瀹岋紝鍒囨崲x杞�
+                    shuttleProtocol.setYCurrent(shuttleProtocol.getYStart());
+                    shuttleProtocol.setXCurrent(shuttleProtocol.getXCurrent() + 1);
+
+                    if(shuttleProtocol.getXCurrent() > shuttleProtocol.getXTarget()) {
+                        //x杞翠篃璺戝畬浜嗭紝缁撴潫璺戝簱
+                        shuttleProtocol.setMoveLoc(false);
+                        shuttleProtocol.setMoveType(0);
+                        shuttleProtocol.setXStart(0);
+                        shuttleProtocol.setXTarget(0);
+                        shuttleProtocol.setXCurrent(0);
+                        shuttleProtocol.setYStart(0);
+                        shuttleProtocol.setYTarget(0);
+                        shuttleProtocol.setYCurrent(0);
+                        return;
+                    }
+                }
+
             }
         } else if (shuttleProtocol.getMoveType() == 2) {//姣嶈建閬撳惊鐜窇
             Integer xCurrent = shuttleProtocol.getXCurrent();

--
Gitblit v1.9.1