From 835be703696c44af1e510eca5fe2f6b8553a3b56 Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期一, 24 六月 2024 17:04:57 +0800
Subject: [PATCH] #

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java                  |   34 +++++++++--
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/MotionLog.java                      |    6 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java                 |   26 +-------
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java                   |    2 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java          |    4 
 zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml                                 |    5 +
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java                     |    2 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java     |   32 ++++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java                           |    9 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java                     |   20 ++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java                         |    6 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ConveyorCommandService.java |    6 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/MotionDto.java                  |    3 +
 13 files changed, 121 insertions(+), 34 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
index c66ac21..3aa33ba 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/action/LiftAction.java
@@ -1,8 +1,11 @@
 package com.zy.asrs.wcs.core.action;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zy.asrs.wcs.core.entity.Task;
 import com.zy.asrs.wcs.core.model.command.*;
 import com.zy.asrs.wcs.core.model.enums.LiftCommandModeType;
+import com.zy.asrs.wcs.core.service.TaskService;
 import com.zy.asrs.wcs.core.utils.RedisUtil;
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
@@ -22,6 +25,8 @@
 
     @Autowired
     private RedisUtil redisUtil;
+    @Autowired
+    private TaskService taskService;
 
     public synchronized boolean assignWork(Device device, LiftAssignCommand assignCommand) {
         LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getId().intValue());
@@ -50,6 +55,11 @@
     public synchronized boolean executeWork(Device device, Integer taskNo) {
         Object obj = redisUtil.get(DeviceRedisConstant.LIFT_WORK_FLAG + taskNo);
         if (obj == null) {
+            return false;
+        }
+
+        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, taskNo));
+        if (task == null) {
             return false;
         }
 
@@ -98,6 +108,16 @@
                 if (liftProtocol.getLev() == command.getTargetLev()) {
                     command.setComplete(true);
                 }
+
+                if (task.getTaskSts() < 100) {//鍏ュ簱鍒ゆ柇鎵樼洏鏄惁杩涘叆鎻愬崌鏈�
+                    if (!liftProtocol.getHasTray()) {
+                        return false;
+                    }
+                } else if (task.getTaskSts() >= 100 && task.getTaskSts() < 200) {//鍑哄簱鍒ゆ柇鎵樼洏鏄惁绂诲紑鎻愬崌鏈�
+                    if (liftProtocol.getHasTray()) {
+                        return false;
+                    }
+                }
             } else if (command.getMode() == LiftCommandModeType.RESET.id) {
                 //澶嶄綅
                 command.setComplete(true);
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/MotionDto.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/MotionDto.java
index 66fcff2..763ea91 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/MotionDto.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/domain/dto/MotionDto.java
@@ -32,6 +32,9 @@
     //鍚屾 1: 鏄�  0: 鍚�
     private Integer sync;
 
+    //鎵ц瀹屾垚鍚庢槸鍚﹂噴鏀炬彁鍗囨満锛岄粯璁や笉閲婃斁  1: 閲婃斁  0: 涓嶉噴鏀�
+    private Integer releaseLift;
+
     public static MotionDto build(BuildSupport<MotionDto> support) {
         MotionDto dto = new MotionDto();
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java
index 2145544..0a4cbf2 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/Motion.java
@@ -76,6 +76,12 @@
     private Integer sync;
 
     /**
+     * 鎵ц瀹屾垚鍚庢槸鍚﹂噴鏀炬彁鍗囨満锛岄粯璁や笉閲婃斁  1: 閲婃斁  0: 涓嶉噴鏀�
+     */
+    @ApiModelProperty(value= "鎵ц瀹屾垚鍚庢槸鍚﹂噴鏀炬彁鍗囨満锛岄粯璁や笉閲婃斁  1: 閲婃斁  0: 涓嶉噴鏀�")
+    private Integer releaseLift;
+
+    /**
      * 浠诲姟绫诲瀷
      */
     @ApiModelProperty(value= "浠诲姟绫诲瀷")
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/MotionLog.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/MotionLog.java
index 142dc4e..b7a6c52 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/MotionLog.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/entity/MotionLog.java
@@ -88,6 +88,12 @@
     private Integer sync;
 
     /**
+     * 鎵ц瀹屾垚鍚庢槸鍚﹂噴鏀炬彁鍗囨満锛岄粯璁や笉閲婃斁  1: 閲婃斁  0: 涓嶉噴鏀�
+     */
+    @ApiModelProperty(value= "鎵ц瀹屾垚鍚庢槸鍚﹂噴鏀炬彁鍗囨満锛岄粯璁や笉閲婃斁  1: 閲婃斁  0: 涓嶉噴鏀�")
+    private Integer releaseLift;
+
+    /**
      * 浠诲姟绫诲瀷
      */
     @ApiModelProperty(value= "浠诲姟绫诲瀷")
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
index cb368ee..126fd3d 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -117,13 +117,6 @@
                 return motionList;
             }
 
-            //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
-            boolean liftResult = Utils.checkLiftHasBinding(Integer.parseInt(transferLiftDevice.getDeviceNo()));
-            if (liftResult) {
-                //瀛樺湪浠诲姟锛岀姝㈣В鏋�
-                return motionList;
-            }
-
             //鑾峰彇灏忚溅寰呮満搴撲綅 ==> 杩涙彁鍗囨満
             ShuttleStandby shuttleStandbyTo = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>()
                     .eq(ShuttleStandby::getDeviceId, transferLiftDevice.getId())
@@ -177,7 +170,6 @@
                         })),
                         MotionDto.build((dto -> {
                             dto.setShuttleNo(shuttleDevice.getId().intValue());
-                            dto.setLiftNo(transferLiftDevice.getId().intValue());
                             dto.setLocNo(standbyLocNoTo);
                         })),
                         MotionCtgType.SHUTTLE_MOVE
@@ -233,6 +225,7 @@
                         null
                         , MotionDto.build((dto -> {
                             dto.setLiftNo(transferLiftDevice.getId().intValue());
+                            dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満
                         }))
                 ));
 
@@ -382,6 +375,7 @@
                         null
                         , MotionDto.build((dto -> {
                             dto.setLiftNo(transferLiftDevice.getId().intValue());
+                            dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満
                         }))
                 ));
 
@@ -454,13 +448,6 @@
             //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹�
             boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo());
             if (shuttleResult) {
-                //瀛樺湪浠诲姟锛岀姝㈣В鏋�
-                return motionList;
-            }
-
-            //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
-            boolean liftResult = Utils.checkLiftHasBinding(Integer.parseInt(transferLiftDevice.getDeviceNo()));
-            if (liftResult) {
                 //瀛樺湪浠诲姟锛岀姝㈣В鏋�
                 return motionList;
             }
@@ -636,6 +623,7 @@
                             dto.setLev(5);//绱㈢墝椤圭洰5灞傛槸杈撻�佺嚎灞�
                             dto.setStaNo(1);//鎻愬崌鏈哄乏渚�
                             dto.setSync(0);//寮傛鎵ц
+                            dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満
                         }))
                 ));
 
@@ -781,6 +769,7 @@
                         null
                         , MotionDto.build((dto -> {
                             dto.setLiftNo(transferLiftDevice.getId().intValue());
+                            dto.setReleaseLift(1);//鎵ц瀹屾垚鍚庨噴鏀炬彁鍗囨満
                         }))
                 ));
 
@@ -979,13 +968,6 @@
         //妫�娴嬬┛姊溅鏄惁鏈変换鍔$粦瀹�
         boolean shuttleResult = Utils.checkShuttleHasBinding(shuttleDevice, task.getTaskNo());
         if (shuttleResult) {
-            //瀛樺湪浠诲姟锛岀姝㈣В鏋�
-            return motionList;
-        }
-
-        //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
-        boolean liftResult = Utils.checkLiftHasBinding(Integer.parseInt(transferLiftDevice.getDeviceNo()));
-        if (liftResult) {
             //瀛樺湪浠诲姟锛岀姝㈣В鏋�
             return motionList;
         }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
index ae6aadf..db4c697 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -55,13 +55,15 @@
                 motion.setOrigin(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), origin.getLev())));
             }
             motion.setTarget(String.valueOf(liftDispatcher.getLiftLevOffset(target.getLiftNo(), target.getLev())));
-        }));
 
-//        if (target.getUpdateLiftNo() != null && target.getWrkNo() != null) {
-//            if (target.getUpdateLiftNo()) {
-//
-//            }
-//        }
+            if (target.getSync() != null) {
+                motion.setSync(target.getSync());
+            }
+
+            if (target.getReleaseLift() != null) {
+                motion.setReleaseLift(target.getReleaseLift());
+            }
+        }));
 
         return motionList;
     }
@@ -87,6 +89,10 @@
 
             if (target.getSync() != null) {
                 motion.setSync(target.getSync());
+            }
+
+            if (target.getReleaseLift() != null) {
+                motion.setReleaseLift(target.getReleaseLift());
             }
         }));
 
@@ -166,6 +172,14 @@
             motion.setDeviceCtg(DeviceCtgType.LIFT.val());
             motion.setDevice(String.valueOf(target.getLiftNo()));
             motion.setMotionCtg(MotionCtgType.LIFT_LOCK.val());
+
+            if (target.getSync() != null) {
+                motion.setSync(target.getSync());
+            }
+
+            if (target.getReleaseLift() != null) {
+                motion.setReleaseLift(target.getReleaseLift());
+            }
         }));
 
         return motionList;
@@ -181,6 +195,14 @@
             motion.setDeviceCtg(DeviceCtgType.LIFT.val());
             motion.setDevice(String.valueOf(target.getLiftNo()));
             motion.setMotionCtg(MotionCtgType.LIFT_UNLOCK.val());
+
+            if (target.getSync() != null) {
+                motion.setSync(target.getSync());
+            }
+
+            if (target.getReleaseLift() != null) {
+                motion.setReleaseLift(target.getReleaseLift());
+            }
         }));
 
         return motionList;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ConveyorCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ConveyorCommandService.java
index fa26255..181deb3 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ConveyorCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ConveyorCommandService.java
@@ -5,6 +5,7 @@
 import com.zy.asrs.wcs.core.utils.ConveyorDispatcher;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
+import com.zy.asrs.wcs.rcs.model.protocol.StaProtocol;
 import com.zy.asrs.wcs.rcs.thread.DevpThread;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +37,11 @@
             case CONVEYOR_INBOUND_TO_LIFT://杈撻�佺嚎鍏ュ簱鑷虫彁鍗囨満
                 break;
             case CONVEYOR_OUTBOUND://杈撻�佺嚎鍑哄簱
+                StaProtocol staProtocol = devpThread.getStation().get(Integer.parseInt(motion.getOrigin()));
+                if (!(staProtocol.isAutoing() && staProtocol.isLoading())) {
+                    return false;
+                }
+
                 boolean result = devpThread.writeWorkSta(Integer.parseInt(motion.getOrigin()), motion.getTaskNo().shortValue(), Short.parseShort(motion.getTarget()));
                 if (!result) {
                     return false;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
index 6cace00..7c55f48 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/LiftCommandService.java
@@ -12,6 +12,7 @@
 import com.zy.asrs.wcs.core.model.enums.MotionStsType;
 import com.zy.asrs.wcs.core.service.MotionService;
 import com.zy.asrs.wcs.core.service.TaskService;
+import com.zy.asrs.wcs.core.utils.Utils;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
 import com.zy.asrs.wcs.rcs.model.enums.LiftProtocolStatusType;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
@@ -59,6 +60,14 @@
             return false;
         }
 
+        //妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
+        boolean liftResult = Utils.checkLiftHasBinding(deviceNo, String.valueOf(motion.getTaskNo()));
+        if (liftResult) {
+            //瀛樺湪浠诲姟锛岀姝㈡墽琛�
+            return false;
+        }
+
+        //姣忔鎵ц鎻愬崌鏈烘寚浠ら兘缁戝畾鎻愬崌鏈�
         Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, motion.getTaskNo()));
         if (task == null) {
             return false;
@@ -194,6 +203,14 @@
                     return false;
                 }
 
+                if (motion.getReleaseLift() == 1) {//閲婃斁鎻愬崌鏈�
+                    task.setLiftNo(null);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
+                }
+
                 break;
             case LIFT_WITH_GOODS:
                 // 鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
@@ -215,6 +232,13 @@
                     }
                 }
 
+                if (motion.getReleaseLift() == 1) {//閲婃斁鎻愬崌鏈�
+                    task.setLiftNo(null);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
+                }
 
                 break;
             case LIFT_WITH_SHUTTLE:
@@ -263,6 +287,14 @@
                 if (liftThread.isLock(null)) {
                     return false;
                 }
+
+                if (motion.getReleaseLift() == 1) {//閲婃斁鎻愬崌鏈�
+                    task.setLiftNo(null);
+                    task.setUpdateTime(new Date());
+                    if (!taskService.updateById(task)) {
+                        return false;
+                    }
+                }
                 break;
             case LIFT_SHUTTLE_ARRIVAL:
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
index 4943afc..ec0fd46 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/mapper/TaskMapper.java
@@ -44,7 +44,7 @@
 
     List<Task> selectWorkingByShuttle(Integer shuttleNo, String taskNo);
 
-    List<Task> selectWorkingByLift(Integer liftNo);
+    List<Task> selectWorkingByLift(Integer liftNo, String taskNo);
 
     Task selectChargeWorking(Integer shuttleNo);
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
index 5bc6821..fbdde05 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/TaskService.java
@@ -42,7 +42,7 @@
 
     List<Task> selectWorkingByShuttle(Integer shuttleNo, String taskNo);
 
-    List<Task> selectWorkingByLift(Integer liftNo);
+    List<Task> selectWorkingByLift(Integer liftNo, String taskNo);
 
     Task selectChargeWorking(Integer shuttleNo);
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
index 7aec3bf..89b2b24 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/service/impl/TaskServiceImpl.java
@@ -132,8 +132,8 @@
     }
 
     @Override
-    public List<Task> selectWorkingByLift(Integer liftNo) {
-        return this.baseMapper.selectWorkingByLift(liftNo);
+    public List<Task> selectWorkingByLift(Integer liftNo, String taskNo) {
+        return this.baseMapper.selectWorkingByLift(liftNo, taskNo);
     }
 
     @Override
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
index 7da2faa..a982931 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/Utils.java
@@ -199,8 +199,15 @@
      * 妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
      */
     public static boolean checkLiftHasBinding(Integer liftNo) {
+        return checkLiftHasBinding(liftNo, null);
+    }
+
+    /**
+     * 妫�娴嬫彁鍗囨満鏄惁鏈変换鍔$粦瀹�
+     */
+    public static boolean checkLiftHasBinding(Integer liftNo, String taskNo) {
         TaskService taskService = SpringUtils.getBean(TaskService.class);
-        List<Task> tasks = taskService.selectWorkingByLift(liftNo);
+        List<Task> tasks = taskService.selectWorkingByLift(liftNo, taskNo);
         if (tasks.isEmpty()) {
             return false;//鏃犱换鍔$粦瀹�
         }
diff --git a/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml b/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
index f3550fb..87c82de 100644
--- a/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
+++ b/zy-asrs-wcs/src/main/resources/mapper/core/TaskMapper.xml
@@ -116,7 +116,10 @@
     <select id="selectWorkingByLift" resultType="com.zy.asrs.wcs.core.entity.Task">
         select * from wcs_task
         where task_sts in (1,2,3,101,102,103,301,302,303,401,402,403)
-          and lift_no = #{liftNo}
+        and lift_no = #{liftNo}
+        <if test="taskNo!=null">
+            and task_no != #{taskNo}
+        </if>
         order by priority desc,start_time,task_no asc
     </select>
 

--
Gitblit v1.9.1