From e9a4418c14ef68fb454300b092c413e8df259ec2 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期六, 13 四月 2024 11:50:56 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java |  133 +++++++++++++++++++++++++-------------------
 1 files changed, 76 insertions(+), 57 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
index cac25e6..0cc5517 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
@@ -7,25 +7,30 @@
 import com.zy.asrs.framework.common.SnowflakeIdWorker;
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wcs.core.entity.BasShuttle;
+import com.zy.asrs.wcs.core.entity.Motion;
 import com.zy.asrs.wcs.core.entity.Task;
+import com.zy.asrs.wcs.core.entity.TaskCtg;
 import com.zy.asrs.wcs.core.kernel.AnalyzeService;
 import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.enums.DeviceCtgType;
 import com.zy.asrs.wcs.core.model.enums.LiftCodeType;
 import com.zy.asrs.wcs.core.model.enums.NavigationMapType;
+import com.zy.asrs.wcs.core.model.enums.TaskStsType;
 import com.zy.asrs.wcs.core.service.BasShuttleService;
+import com.zy.asrs.wcs.core.service.TaskCtgService;
 import com.zy.asrs.wcs.core.service.TaskService;
+import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
 import com.zy.asrs.wcs.rcs.entity.Device;
-import com.zy.asrs.wcs.rcs.entity.DeviceType;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
 import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol;
 import com.zy.asrs.wcs.rcs.service.DeviceService;
-import com.zy.asrs.wcs.rcs.service.DeviceTypeService;
 import com.zy.asrs.wcs.core.service.MotionService;
 import com.zy.asrs.wcs.rcs.thread.ShuttleThread;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -43,8 +48,6 @@
     private LiftDispatcher liftDispatcher;
     @Autowired
     private SnowflakeIdWorker snowflakeIdWorker;
-//    @Autowired
-//    private CommonService commonService;
     @Autowired
     private AnalyzeService analyzeService;
     @Autowired
@@ -52,25 +55,17 @@
     @Autowired
     private DeviceService deviceService;
     @Autowired
-    private DeviceTypeService deviceTypeService;
-    @Autowired
     private BasShuttleService basShuttleService;
+    @Autowired
+    private TaskCtgService taskCtgService;
 
     public ShuttleThread queryShuttleWhichConvenient(Task task, Integer liftNo) {
         String locNo = taskService.judgeInbound(task) ? task.getDestLoc() : task.getOriginLoc();
         ShuttleThread resThread = null;
         Integer finalDistance = ShuttleDispatcher.INF;
 
-        DeviceType deviceType = deviceTypeService.getOne(new LambdaQueryWrapper<DeviceType>()
-                .eq(DeviceType::getHostId, task.getHostId())
-                .eq(DeviceType::getStatus, 1)
-                .eq(DeviceType::getFlag, String.valueOf(SlaveType.Shuttle)));
-        if (deviceType == null) {
-            throw new CoolException("璁惧绫诲瀷涓嶅瓨鍦�");
-        }
-
         List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
-                .eq(Device::getDeviceType, deviceType.getId())
+                .eq(Device::getDeviceType, DeviceCtgType.SHUTTLE.val())
                 .eq(Device::getHostId, task.getHostId())
                 .eq(Device::getStatus, 1));
 
@@ -89,11 +84,11 @@
                 continue;
             }
 
-//            //妫�娴嬫槸鍚﹀瓨鍦ㄥ厖鐢典换鍔�
-//            WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttle.getId());
-//            if (wrkCharge != null) {
-//                continue;
-//            }
+            //妫�娴嬫槸鍚﹀瓨鍦ㄥ厖鐢典换鍔�
+            Task taskCharge = taskService.selectChargeWorking(Integer.valueOf(device.getDeviceNo()));
+            if (taskCharge != null) {
+                continue;
+            }
 
             // 鏈夋病鏈夎鍏朵粬浠诲姟璋冨害
             int currentLev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅褰撳墠灞傞珮
@@ -128,11 +123,11 @@
                 currDistance += WEIGHT;
             }
 
-//            // 鎸傝浇浠诲姟鏉冮噸
-//            List<Task> tasks = taskService.selectWorkingByShuttle(shuttle.getId());
-//            if (!Cools.isEmpty(tasks)) {
-//                currDistance += tasks.size() * WEIGHT;
-//            }
+            // 鎸傝浇浠诲姟鏉冮噸
+            List<Task> tasks = taskService.selectWorkingByShuttle(Integer.valueOf(device.getDeviceNo()));
+            if (!Cools.isEmpty(tasks)) {
+                currDistance += tasks.size() * WEIGHT;
+            }
 
             if (currDistance < finalDistance) {
                 finalDistance = currDistance;
@@ -143,38 +138,62 @@
         return resThread;
     }
 
-//    /**
-//     * 鐢熸垚绌挎杞﹁縼绉讳换鍔�
-//     */
-//    public WrkCharge generateShuttleChargeWrkComplete(Integer shuttleNo, String locNo) {
-//        WrkCharge wrkCharge = new WrkCharge();
-//        wrkCharge.setShuttleNo(shuttleNo);
-//        wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
-//        wrkCharge.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
-//        wrkCharge.setWrkSts(WrkMastStsType.NEW_MOVE.sts);   // 杩佺Щ浠诲姟
-//        wrkCharge.setIoType(WrkIoTypeType.MOVE.sts);
-//        wrkCharge.setIoPri((double) 10);
-//        wrkCharge.setLocNo(locNo);
-//        wrkCharge.setMemo("reset");
-//        wrkCharge.setAppeTime(new Date());
-//
-//        // generate motion list
-//        List<Motion> motionList = analyzeService.generateShuttleChargeWrkComplete(wrkCharge);
-//        if (Cools.isEmpty(motionList)) {
-//            News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", shuttleNo);
-//            return null;
-//        }
-//        motionService.batchInsert(motionList, wrkCharge.getUuid(), wrkCharge.getWrkNo());
-//
-//        wrkCharge.setWrkSts(WrkMastStsType.ANALYZE_MOVE.sts);
-//
-//        if (!wrkChargeService.insert(wrkCharge)) {
-//            News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", shuttleNo);
-//            return null;
-//        }
-//
-//        return wrkCharge;
-//    }
+    //鐢熸垚杩佺Щ浠诲姟
+    public synchronized Task generateMoveTask(Device device, String locNo) {
+        // 宸叉湁杩佺Щ浠诲姟
+        if (taskService.selectMoveWorking(Integer.valueOf(device.getDeviceNo())) != null) {
+            return null;
+        }
+
+        //鑾峰彇杩佺Щ浠诲姟绫诲瀷
+        TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
+                .eq(TaskCtg::getFlag, "MOVE")
+                .eq(TaskCtg::getStatus, 1));
+        if (taskCtg == null) {
+            return null;
+        }
+
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getId().intValue());
+        if (shuttleThread == null) {
+            return null;
+        }
+
+        //鑾峰彇閬胯浣嶇疆
+        String standByLocNo = this.searchStandByLocNo(Integer.valueOf(device.getDeviceNo()), device.getHostId(), shuttleThread.getStatus().getCurrentLocNo());
+
+        Task task = new Task();
+        task.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
+        task.setTaskNo(String.valueOf(Utils.getTaskNo("MOVE")));
+        task.setTaskSts(TaskStsType.NEW_MOVE.sts);
+        task.setTaskCtg(taskCtg.getId());
+        task.setPriority(10);
+        task.setOriginSite(null);
+        task.setOriginLoc(null);
+        task.setDestSite(null);
+        task.setDestLoc(standByLocNo); // 閬胯浣嶇疆
+        task.setIoTime(new Date());
+        task.setStartTime(new Date());
+        task.setHostId(device.getHostId());
+        task.setStatus(1);
+        task.setShuttleNo(Integer.valueOf(device.getDeviceNo()));
+
+        // generate motion list
+        List<Motion> motionList = analyzeService.generateShuttleMoveMotion(task);
+        if (Cools.isEmpty(motionList)) {
+            News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", device.getDeviceNo());
+            return null;
+        }
+        motionService.batchInsert(motionList, task.getUuid(), Integer.valueOf(task.getTaskNo()));
+
+        task.setTaskSts(TaskStsType.ANALYZE_MOVE.sts);
+
+        if (!taskService.save(task)) {
+            News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅杩佺Щ浠诲姟澶辫触!!!", device.getDeviceNo());
+            return null;
+        }
+
+        return task;
+    }
 
     /**
      * 鎼滅储閬胯搴撲綅锛岄�氳繃灏忚溅鍙峰拰鐩爣搴撲綅

--
Gitblit v1.9.1