From c036b0582e39b53516d88f26df587b5a61c4b2f2 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期三, 17 四月 2024 10:32:47 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/rcs/thread/FlowExecute.java |  113 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 90 insertions(+), 23 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 f1158fe..f3ad71a 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
@@ -3,10 +3,16 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.wcs.asrs.entity.param.FlowLogicCodeParam;
+import com.zy.asrs.wcs.core.entity.Task;
+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 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.List;
@@ -15,44 +21,63 @@
 @Component
 public class FlowExecute {
 
+    @Autowired
+    private RedisUtil redisUtil;
+    @Autowired
+    private TaskService taskService;
+    @Autowired
+    private ShuttleDispatcher shuttleDispatcher;
+
     //鎵ц娴佺▼鍥�
     public boolean execute(List<JSONObject> list) {
         String currentId = list.get(0).getString("id");
 
-        String listId = DigestUtils.md5Hex(JSON.toJSONString(list));
+        JSONObject devpType = list.get(0).getJSONObject("data").getJSONObject("devpType");
+        String staNo = devpType.getString("staNo");
+        //鎼滅储宸ヤ綔妗�
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
+                .eq(Task::getOriginSite, staNo)
+                .eq(Task::getStatus, 1));
 
-        while (currentId != null) {
-            //鑾峰彇娴佺▼鍥�
-            JSONObject flow = findFLow(list, currentId);
-            if (flow == null) {
-                break;
+        for (Task task : tasks) {
+            String redisKey = DigestUtils.md5Hex(JSON.toJSONString(list));
+
+            while (currentId != null) {
+                //鑾峰彇娴佺▼鍥�
+                JSONObject flow = findFLow(list, currentId);
+                if (flow == null) {
+                    break;
+                }
+
+                //鎵ц
+                boolean result = executeFlow(task, flow, redisKey);
+
+                //鎵ц鍚庣画娴佺▼
+                if (Cools.isEmpty(flow.get("nextTrue")) && Cools.isEmpty(flow.get("nextFalse"))) {
+                    break;//鏃犲悗缁祦绋�
+                }
+
+                //鏇存柊id
+                currentId = result ? flow.getString("nextTrue") : flow.getString("nextFalse");
             }
 
-            //鎵ц
-            boolean result = executeFlow(flow, listId);
-
-            //鎵ц鍚庣画娴佺▼
-            if (Cools.isEmpty(flow.get("nextTrue")) && Cools.isEmpty(flow.get("nextFalse"))) {
-                break;//鏃犲悗缁祦绋�
-            }
-
-            //鏇存柊id
-            currentId = result ? flow.getString("nextTrue") : flow.getString("nextFalse");
+            System.out.println("鎵ц瀹屾垚");
+            redisUtil.del(redisKey);//閲婃斁缂撳瓨
         }
-
-        System.out.println("鎵ц瀹屾垚");
         return true;
     }
 
-    private boolean executeFlow(JSONObject flow, String listId) {
+    private boolean executeFlow(Task task, JSONObject flow, String redisKey) {
         System.out.println(flow.getString("id") + "琚墽琛�");
-        String type = flow.getString("type");
+        JSONObject data = flow.getJSONObject("data");
+        String type = data.getString("type");
+        boolean result = false;
         if (type.equals("devp")) {
-
+            result = executeDevpFlow(task, data, redisKey);
         } else if (type.equals("shuttle")) {
-
+            result = executeShuttleFlow(task, data, redisKey);
         }
-        return true;
+        return result;
     }
 
     private JSONObject findFLow(List<JSONObject> list, String id) {
@@ -64,6 +89,48 @@
         return null;
     }
 
+    private boolean executeDevpFlow(Task task, JSONObject data, String redisKey) {
+        JSONObject devpType = data.getJSONObject("devpType");
+        String staNo = devpType.getString("staNo");
+        //鎼滅储宸ヤ綔
+
+        return true;
+    }
+
+    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());
+                return true;
+            }
+        }
+
+        return true;
+    }
+
+    private boolean redisSet(String redisKey, String key, Object data) {
+        if (redisUtil.hasKey(redisKey)) {
+            Object obj = redisUtil.get(redisKey);
+            JSONObject object = JSON.parseObject(String.valueOf(obj));
+            object.put(key, data);
+            redisUtil.set(redisKey, JSON.toJSONString(object));
+        } else {
+            JSONObject object = new JSONObject();
+            object.put(key, data);
+            redisUtil.set(redisKey, JSON.toJSONString(object));
+        }
+        return true;
+    }
+
 //    private boolean executeFlow(List<Map<String, Object>> list) {
 //        for (Map<String, Object> map : list) {
 //            JSONObject data = (JSONObject) map.get("data");

--
Gitblit v1.9.1