From dad3cd8ed8afa86b651bb1a053421e7aa2b8c7ac Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期日, 05 五月 2024 16:31:09 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/FlowExecute.java |  164 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 153 insertions(+), 11 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/FlowExecute.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/FlowExecute.java
index f3ad71a..4efdbd0 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/FlowExecute.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/FlowExecute.java
@@ -5,16 +5,27 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.framework.common.Cools;
+import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wcs.asrs.entity.param.FlowLogicCodeParam;
+import com.zy.asrs.wcs.core.domain.dto.MotionDto;
+import com.zy.asrs.wcs.core.entity.Motion;
 import com.zy.asrs.wcs.core.entity.Task;
+import com.zy.asrs.wcs.core.kernel.KernelService;
 import com.zy.asrs.wcs.core.service.TaskService;
 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.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.entity.Device;
+import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
+import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.codec.digest.Md5Crypt;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -27,6 +38,8 @@
     private TaskService taskService;
     @Autowired
     private ShuttleDispatcher shuttleDispatcher;
+    @Autowired
+    private KernelService kernelService;
 
     //鎵ц娴佺▼鍥�
     public boolean execute(List<JSONObject> list) {
@@ -42,6 +55,7 @@
         for (Task task : tasks) {
             String redisKey = DigestUtils.md5Hex(JSON.toJSONString(list));
 
+            redisSet(redisKey, "motionList", new ArrayList<Motion>());
             while (currentId != null) {
                 //鑾峰彇娴佺▼鍥�
                 JSONObject flow = findFLow(list, currentId);
@@ -76,6 +90,8 @@
             result = executeDevpFlow(task, data, redisKey);
         } else if (type.equals("shuttle")) {
             result = executeShuttleFlow(task, data, redisKey);
+        } else if (type.equals("lift")) {
+            result = executeLiftFlow(task, data, redisKey);
         }
         return result;
     }
@@ -99,22 +115,136 @@
 
     private boolean executeShuttleFlow(Task task, JSONObject data, String redisKey) {
         JSONObject shuttleType = data.getJSONObject("shuttleType");
-        JSONArray shuttleOper = shuttleType.getJSONArray("shuttleOper");
-        for (Object object : shuttleOper) {
-            String oper = String.valueOf(object);
-            if (oper.equals("searchIdleShuttle")) {
-                //鎼滅储绌洪棽杞�
-                ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
-                if (shuttleThread == null) {
-                    return false;
-                }
-                //瀛樺叆缂撳瓨
-                redisSet(redisKey, "shuttleDevice", shuttleThread.getDevice());
+        String oper = shuttleType.getString("shuttleOper");
+        if (oper.equals("searchIdleShuttle")) {
+            //鎼滅储绌洪棽杞�
+            ShuttleThread shuttleThread = shuttleDispatcher.searchIdleShuttle(task);
+            if (shuttleThread == null) {
+                throw new CoolException("绌挎杞︿笉瀛樺湪");
+            }
+            //瀛樺叆缂撳瓨
+            redisSet(redisKey, "shuttleDevice", shuttleThread.getDevice());
+            return true;
+        } else if (oper.equals("judgeShuttleCurrentTaskLev")) {
+            //鍒ゆ柇灏忚溅鏄惁鍦ㄤ换鍔℃ゼ灞�
+            //鍙栧嚭缂撳瓨灏忚溅
+            Object shuttleDeviceObj = redisGet(redisKey, "shuttleDevice");
+            if (shuttleDeviceObj == null) {
+                throw new CoolException("绌挎杞︾紦瀛樹负绌�");
+            }
+            Device device = JSON.parseObject(String.valueOf(shuttleDeviceObj), Device.class);
+            if (device == null) {
+                throw new CoolException("绌挎杞﹁澶囦笉瀛樺湪");
+            }
+
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+            if (shuttleThread == null) {
+                throw new CoolException("绌挎杞︿笉瀛樺湪");
+            }
+
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                throw new CoolException("绌挎杞︿笉瀛樺湪");
+            }
+
+            //灏忚溅鍧愭爣
+            String shuttleLocNo = shuttleProtocol.getCurrentLocNo();
+            String taskLocNo = null;
+            if (task.getTaskSts() < 100) {
+                taskLocNo = task.getDestLoc();
+            } else if (task.getTaskSts() > 100 && task.getTaskSts() < 200) {
+                taskLocNo = task.getOriginLoc();
+            }
+
+            // 灏忚溅鍜屼换鍔℃ゼ灞備竴鑷�
+            if (Utils.getLev(shuttleLocNo) == Utils.getLev(taskLocNo)) {
                 return true;
+            }else {
+                return false;
             }
         }
 
         return true;
+    }
+
+    private boolean executeLiftFlow(Task task, JSONObject data, String redisKey) {
+        Object object = redisGet(redisKey, "motionList");
+        List<Motion> motionList = JSON.parseArray(JSON.toJSONString(object), Motion.class);
+
+        Object liftDeviceObj = redisGet(redisKey, "liftDevice");
+        if (liftDeviceObj == null) {
+            throw new CoolException("鎻愬崌鏈虹紦瀛樹负绌�");
+        }
+
+        Device device = JSON.parseObject(String.valueOf(liftDeviceObj), Device.class);
+        if (device == null) {
+            throw new CoolException("鎻愬崌鏈鸿澶囦笉瀛樺湪");
+        }
+
+        LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getId().intValue());
+        if (liftThread == null) {
+            throw new CoolException("鎻愬崌鏈轰笉瀛樺湪");
+        }
+
+        LiftProtocol liftProtocol = liftThread.getStatus();
+        if (liftProtocol == null) {
+            throw new CoolException("鎻愬崌鏈轰笉瀛樺湪");
+        }
+
+        JSONObject liftType = data.getJSONObject("liftType");
+        String opera = liftType.getString("liftOper");
+        if (opera.equals("move")) {
+            //鎻愬崌鏈哄崌闄�
+            String sourceLevStr = liftType.getString("sourceLev");
+            String targetLevStr = liftType.getString("targetLev");
+            Integer sourceLev = getLiftOperaLev(sourceLevStr, task, redisKey);
+            Integer targetLev = getLiftOperaLev(targetLevStr, task, redisKey);
+
+            motionList.addAll(kernelService.liftMove(
+                    MotionDto.build((dto -> {
+                        dto.setLiftNo(device.getId().intValue());
+                        dto.setLev(sourceLev);
+                    }))
+                    , MotionDto.build((dto -> {
+                        dto.setLiftNo(device.getId().intValue());
+                        dto.setLev(targetLev);
+                    }))
+            ));
+        }
+
+        return true;
+    }
+
+    private Integer getLiftOperaLev(String opera, Task task, String redisKey) {
+        if (opera.equals("sourceLev")) {
+            return Utils.getLev(task.getOriginLoc());
+        } else if (opera.equals("targetLev")) {
+            return Utils.getLev(task.getDestLoc());
+        } else if (opera.equals("shuttleLev")) {
+            //鍙栧嚭缂撳瓨灏忚溅
+            Object shuttleDeviceObj = redisGet(redisKey, "shuttleDevice");
+            if (shuttleDeviceObj == null) {
+                throw new CoolException("绌挎杞︾紦瀛樹负绌�");
+            }
+            Device device = JSON.parseObject(String.valueOf(shuttleDeviceObj), Device.class);
+            if (device == null) {
+                throw new CoolException("绌挎杞﹁澶囦笉瀛樺湪");
+            }
+
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+            if (shuttleThread == null) {
+                throw new CoolException("绌挎杞︿笉瀛樺湪");
+            }
+
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                throw new CoolException("绌挎杞︿笉瀛樺湪");
+            }
+
+            return Utils.getLev(shuttleProtocol.getCurrentLocNo());
+        }
+
+        throw new CoolException("绫诲瀷寮傚父");
     }
 
     private boolean redisSet(String redisKey, String key, Object data) {
@@ -131,6 +261,18 @@
         return true;
     }
 
+    private Object redisGet(String redisKey, String key) {
+        if (redisUtil.hasKey(redisKey)) {
+            Object obj = redisUtil.get(redisKey);
+            JSONObject object = JSON.parseObject(String.valueOf(obj));
+            if (!object.containsKey(key)) {
+                return null;
+            }
+            return object.get(key);
+        }
+        return null;
+    }
+
 //    private boolean executeFlow(List<Map<String, Object>> list) {
 //        for (Map<String, Object> map : list) {
 //            JSONObject data = (JSONObject) map.get("data");

--
Gitblit v1.9.1