From b4f51417997c20dd15e3db19d5055edd55d872cd Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期三, 27 十一月 2024 09:46:12 +0800
Subject: [PATCH] 版本保存 1、磨边队列进入多片已修改完成 2、解决状态清0异常现象

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageTaskServiceImpl.java |    5 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/mapper/BigStorageCageHollowDetailsMapper.java               |   15 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/entity/BigStorageCageTask.java                  |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java                               |  577 ++++++++++++++++++++++++++++++++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageTaskService.java          |    9 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/impl/BigStorageCageHollowDetailsServiceImpl.java    |  136 +++++++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/BigStorageCageHollowService.java                    |   15 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/mapper/BigStorageCageTaskMapper.java            |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/mapper/BigStorageCageHollowMapper.java                      |   15 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml                                         |    3 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java                                     |   30 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/entity/BigStorageCageHollow.java                            |   44 ++
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java                                                 |    9 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/controller/BigStorageCageHollowController.java              |   18 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/controller/BigStorageCageHollowDetailsController.java       |   18 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml                                 |    8 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/entity/BigStorageCageHollowDetails.java                     |   86 ++++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/impl/BigStorageCageHollowServiceImpl.java           |   19 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/BigStorageCageHollowDetailsService.java             |   18 +
 19 files changed, 1,007 insertions(+), 22 deletions(-)

diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
index 68cc6a7..0f4e52a 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java
@@ -32,6 +32,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @Author : zhoush
@@ -526,13 +527,13 @@
     private boolean updateCellRemainWidth(int slot, int device) {
         List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot)
                 .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
-        int remainWidth = cellLength;
+        List<Integer> slotList = new ArrayList<>();
         if (CollectionUtil.isNotEmpty(list)) {
-            int widthTotal = (int) list.stream().map(e -> Math.max(e.getWidth(), e.getHeight()) + glassGap).mapToDouble(Double::intValue).sum();
-            remainWidth = cellLength - widthTotal >= 0 ? cellLength - widthTotal : 0;
+            slotList = list.stream().map(EdgStorageCageDetails::getSlot).distinct().collect(Collectors.toList());
         }
+        list.removeAll(slotList);
         edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>().
-                set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device));
+                set(EdgStorageCage::getRemainWidth, cellLength).eq(EdgStorageCage::getSlot, slot).eq(EdgStorageCage::getDeviceId, device));
         return Boolean.TRUE;
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
index 8c76445..50f680e 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
@@ -29,8 +29,5 @@
         current_cell = #{task.currentCell},
         start_cell = #{task.startCell},
         end_cell = #{task.endCell}
-        <if test="task.taskState == 0">
-            ,task_state = #{task.taskState}
-        </if>
     </update>
 </mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/entity/BigStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/entity/BigStorageCageTask.java
index 9af4e18..467e1f9 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/entity/BigStorageCageTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/entity/BigStorageCageTask.java
@@ -2,6 +2,7 @@
 
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 /**
  * (BigStorageCageInOneTask)琛ㄥ疄浣撶被
@@ -11,6 +12,7 @@
  */
 @Data
 @AllArgsConstructor
+@NoArgsConstructor
 public class BigStorageCageTask {
     /**
      * 鐜荤拑id
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/mapper/BigStorageCageTaskMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/mapper/BigStorageCageTaskMapper.java
index 6681b66..5793a69 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/mapper/BigStorageCageTaskMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/mapper/BigStorageCageTaskMapper.java
@@ -17,6 +17,8 @@
 
     boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") BigStorageCageTask bigStorageCageInTask);
 
+    boolean updateOutTaskMessage(@Param("tableName") String tableName);
+
     int saveTaskMessage(@Param("tableName") String tableName, @Param("list") List<BigStorageCageTask> taskList);
 
     int removeAll(String tableName);
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageTaskService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageTaskService.java
index 0a5b186..a9efe94 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageTaskService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageTaskService.java
@@ -1,7 +1,6 @@
 package com.mes.bigstoragecagetask.service;
 
 import com.mes.bigstoragecagetask.entity.BigStorageCageTask;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -16,10 +15,12 @@
 
     List<BigStorageCageTask> queryTaskMessage(String tableName);
 
-    boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") BigStorageCageTask bigStorageCageInTask);
+    boolean updateTaskMessage(String tableName, BigStorageCageTask bigStorageCageInTask);
 
-    int saveTaskMessage(@Param("tableName") String tableName, List<BigStorageCageTask> taskList);
+    boolean updateOutTaskMessage(String tableName);
 
-    int removeAll(@Param("tableName") String tableName);
+    int saveTaskMessage(String tableName, List<BigStorageCageTask> taskList);
+
+    int removeAll(String tableName);
 }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageTaskServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageTaskServiceImpl.java
index af12d05..e5d984c 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageTaskServiceImpl.java
@@ -31,6 +31,11 @@
     }
 
     @Override
+    public boolean updateOutTaskMessage(String tableName) {
+        return bigStorageCageInTaskMapper.updateOutTaskMessage(tableName);
+    }
+
+    @Override
     public int saveTaskMessage(String tableName, List<BigStorageCageTask> taskList) {
         return bigStorageCageInTaskMapper.saveTaskMessage(tableName, taskList);
     }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/controller/BigStorageCageHollowController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/controller/BigStorageCageHollowController.java
new file mode 100644
index 0000000..66bf760
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/controller/BigStorageCageHollowController.java
@@ -0,0 +1,18 @@
+package com.mes.hollow.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * (BigStorageCageHollow)琛ㄦ帶鍒跺眰
+ *
+ * @author makejava
+ * @since 2024-11-21 09:22:39
+ */
+@RestController
+@RequestMapping("bigStorageCageHollow")
+public class BigStorageCageHollowController {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/controller/BigStorageCageHollowDetailsController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/controller/BigStorageCageHollowDetailsController.java
new file mode 100644
index 0000000..0de5203
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/controller/BigStorageCageHollowDetailsController.java
@@ -0,0 +1,18 @@
+package com.mes.hollow.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * (BigStorageCageHollowDetails)琛ㄦ帶鍒跺眰
+ *
+ * @author makejava
+ * @since 2024-11-21 09:23:12
+ */
+@RestController
+@RequestMapping("bigStorageCageHollowDetails")
+public class BigStorageCageHollowDetailsController {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/entity/BigStorageCageHollow.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/entity/BigStorageCageHollow.java
new file mode 100644
index 0000000..67dde9c
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/entity/BigStorageCageHollow.java
@@ -0,0 +1,44 @@
+package com.mes.hollow.entity;
+
+import lombok.Data;
+
+/**
+ * (BigStorageCageHollow)琛ㄥ疄浣撶被
+ *
+ * @author makejava
+ * @since 2024-11-21 09:22:45
+ */
+@Data
+public class BigStorageCageHollow {
+    /**
+     * /*澶х悊鐗囩琛╥d
+     */
+    private Long id;
+    /**
+     * /*璁惧id
+     */
+    private Integer deviceId;
+    /**
+     * /*鏍呮牸鍙�
+     */
+    private Integer slot;
+    /**
+     * /*鏈�灏忓帤搴�
+     */
+    private Integer minThickness;
+    /**
+     * /*鏈�澶у帤搴�
+     */
+    private Integer maxThickness;
+    /**
+     * /*鍚敤鐘舵��
+     */
+    private Integer enableState;
+    /**
+     * /*鍓╀綑瀹藉害
+     */
+    private Integer remainWidth;
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/entity/BigStorageCageHollowDetails.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/entity/BigStorageCageHollowDetails.java
new file mode 100644
index 0000000..44ec3f9
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/entity/BigStorageCageHollowDetails.java
@@ -0,0 +1,86 @@
+package com.mes.hollow.entity;
+
+import lombok.Data;
+
+/**
+ * (BigStorageCageHollowDetails)琛ㄥ疄浣撶被
+ *
+ * @author makejava
+ * @since 2024-11-21 09:23:12
+ */
+@Data
+public class BigStorageCageHollowDetails {
+    /**
+     * /*澶х悊鐗囩璇︽儏琛╥d
+     */
+    private Long id;
+    /**
+     * 璁惧id
+     */
+    private Integer deviceId;
+    /**
+     * /*鏍呮牸鍙�
+     */
+    private Integer slot;
+    /**
+     * /*鐜荤拑id
+     */
+    private String glassId;
+    /**
+     * /*灏忕墖鍦ㄦ牸鍐呯殑椤哄簭
+     */
+    private Integer sequence;
+    /**
+     * /*娴佺▼鍗″彿
+     */
+    private String flowCardId;
+    /**
+     * /*鐜荤拑绫诲瀷
+     */
+    private Integer glassType;
+    /**
+     * /*瀹�
+     */
+    private Double width;
+    /**
+     * /*楂�
+     */
+    private Double height;
+    /**
+     * /*鍘氬害
+     */
+    private Double thickness;
+    /**
+     * /*閽㈠寲鐗堝浘id
+     */
+    private Integer temperingLayoutId;
+    /**
+     * /*閽㈠寲鐗堝浘鐗囧簭
+     */
+    private Integer temperingFeedSequence;
+    /**
+     * /*x鍧愭爣
+     */
+    private Integer xCoordinate;
+    /**
+     * /*y鍧愭爣
+     */
+    private Integer yCoordinate;
+    /**
+     * /*鐘舵��
+     */
+    private Integer state;
+    /**
+     * /*鐜荤拑闂撮殭
+     */
+    private Integer gap;
+
+    private String engineerId;
+    /**
+     * /*灞傚彿
+     */
+    private Integer layer;
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/mapper/BigStorageCageHollowDetailsMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/mapper/BigStorageCageHollowDetailsMapper.java
new file mode 100644
index 0000000..8ef2772
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/mapper/BigStorageCageHollowDetailsMapper.java
@@ -0,0 +1,15 @@
+package com.mes.hollow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.hollow.entity.BigStorageCageHollowDetails;
+
+/**
+ * (BigStorageCageHollowDetails)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-11-21 09:23:12
+ */
+public interface BigStorageCageHollowDetailsMapper extends BaseMapper<BigStorageCageHollowDetails> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/mapper/BigStorageCageHollowMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/mapper/BigStorageCageHollowMapper.java
new file mode 100644
index 0000000..49458a7
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/mapper/BigStorageCageHollowMapper.java
@@ -0,0 +1,15 @@
+package com.mes.hollow.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.hollow.entity.BigStorageCageHollow;
+
+/**
+ * (BigStorageCageHollow)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-11-21 09:22:40
+ */
+public interface BigStorageCageHollowMapper extends BaseMapper<BigStorageCageHollow> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/BigStorageCageHollowDetailsService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/BigStorageCageHollowDetailsService.java
new file mode 100644
index 0000000..f557404
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/BigStorageCageHollowDetailsService.java
@@ -0,0 +1,18 @@
+//package com.mes.hollow.service;
+//
+//import com.baomidou.mybatisplus.extension.service.IService;
+//import com.mes.bigstorage.entity.BigStorageDTO;
+//import com.mes.glassinfo.entity.GlassInfo;
+//import com.mes.hollow.entity.BigStorageCageHollowDetails;
+//
+///**
+// * (BigStorageCageHollowDetails)琛ㄦ湇鍔℃帴鍙�
+// *
+// * @author makejava
+// * @since 2024-11-21 09:23:12
+// */
+//public interface BigStorageCageHollowDetailsService extends IService<BigStorageCageHollowDetails> {
+//
+//    BigStorageDTO queryTargetSlotByHollow(GlassInfo info);
+//}
+//
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/BigStorageCageHollowService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/BigStorageCageHollowService.java
new file mode 100644
index 0000000..33edec9
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/BigStorageCageHollowService.java
@@ -0,0 +1,15 @@
+package com.mes.hollow.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.hollow.entity.BigStorageCageHollow;
+
+/**
+ * (BigStorageCageHollow)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2024-11-21 09:22:45
+ */
+public interface BigStorageCageHollowService extends IService<BigStorageCageHollow> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/impl/BigStorageCageHollowDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/impl/BigStorageCageHollowDetailsServiceImpl.java
new file mode 100644
index 0000000..6ae14e8
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/impl/BigStorageCageHollowDetailsServiceImpl.java
@@ -0,0 +1,136 @@
+//package com.mes.hollow.service.impl;
+//
+//import cn.hutool.core.lang.Assert;
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.github.yulichang.wrapper.MPJLambdaWrapper;
+//import com.mes.bigstorage.entity.BigStorageCage;
+//import com.mes.bigstorage.entity.BigStorageCageDetails;
+//import com.mes.bigstorage.entity.BigStorageDTO;
+//import com.mes.common.config.Const;
+//import com.mes.glassinfo.entity.GlassInfo;
+//import com.mes.hollow.entity.BigStorageCageHollow;
+//import com.mes.hollow.entity.BigStorageCageHollowDetails;
+//import com.mes.hollow.mapper.BigStorageCageHollowDetailsMapper;
+//import com.mes.hollow.service.BigStorageCageHollowDetailsService;
+//import org.springframework.stereotype.Service;
+//
+//import java.util.List;
+//
+///**
+// * (BigStorageCageHollowDetails)琛ㄦ湇鍔″疄鐜扮被
+// *
+// * @author makejava
+// * @since 2024-11-21 09:23:12
+// */
+//@Service
+//public class BigStorageCageHollowDetailsServiceImpl extends ServiceImpl<BigStorageCageHollowDetailsMapper, BigStorageCageHollowDetails> implements BigStorageCageHollowDetailsService {
+//
+//    @Override
+//    public BigStorageDTO queryTargetSlotByHollow(GlassInfo glassInfo) {
+//        BigStorageDTO bigStorageDTO = null;
+//        MPJLambdaWrapper<BigStorageCageHollow> wrapper = new MPJLambdaWrapper<>(BigStorageCageHollow.class)
+//                .selectAll(BigStorageCageHollow.class)
+//                .leftJoin(BigStorageCageHollowDetails.class, BigStorageCageHollowDetails::getSlot, BigStorageCageHollow::getSlot)
+//                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+//                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW,Const.GLASS_STATE_IN)
+//                .eq(BigStorageCageDetails::getEngineerId, glassInfo.getEngineerId())
+//                .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
+//                .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
+//                .last("limit 1");
+//        if (glassInfo.getTemperingLayoutId() == 0) {
+//            wrapper.eq(BigStorageCageDetails::getFlowCardId, glassInfo.getFlowCardId())
+//                    .eq(BigStorageCageDetails::getLayer, glassInfo.getLayer());
+////            wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight());
+//        } else {
+//            wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() - 1);
+//        }
+//        BigStorageCage bigStorageCage = bigStorageCageService.selectJoinOne(BigStorageCage.class, wrapper);
+//        if (null != bigStorageCage) {
+//            log.info("鏃犻挗鍖栫増鍥緄d鎴栨牴鎹綋鍓嶇幓鐠冪墖搴�+1鎵惧埌鐩爣鏍煎瓙锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
+//            bigStorageDTO = new BigStorageDTO();
+//            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+//            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+//            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+//            return bigStorageDTO;
+//        }
+//        bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+//                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+//                .eq(BigStorageCage::getRemainWidth, slotWidth)
+////                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
+//                .inSql(BigStorageCage::getDeviceId,
+//                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId())
+//                .last("limit 1"));
+//        if (null != bigStorageCage) {
+//            log.info("鏍规嵁鐗堝浘id鎵惧埌绗煎瓙鍐呯殑鐩爣鏍煎瓙锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
+//            bigStorageDTO = new BigStorageDTO();
+//            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+//            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+//            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+//            return bigStorageDTO;
+//        }
+//
+//        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨 鍥犱负瀛愭煡璇㈡帓搴忓涓籹ql鏃犲奖鍝嶏紝鎵�浠ュ厛鎵ц瀛愭煡璇㈣幏鍙栭『搴忥紝鐒跺悗涓�娆″幓鏌ヨ
+//        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness());
+//        List<Integer> deviceUseds = bigStorageCageService.queryFreeDeviceByUsed(glassInfo.getThickness());
+//        List<BigStorageCageDetails> engineerCount1 = baseMapper.selectList(
+//                new LambdaQueryWrapper<BigStorageCageDetails>()
+//                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE)
+//                        .select(BigStorageCageDetails::getEngineerId)
+//                        .groupBy(BigStorageCageDetails::getEngineerId)
+//                        .between(BigStorageCageDetails::getDeviceId, 1, 5)
+//        );
+//        List<BigStorageCageDetails> engineerCount2 = baseMapper.selectList(
+//                new LambdaQueryWrapper<BigStorageCageDetails>()
+//                        .notIn(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT, Const.GLASS_STATE_DAMAGE, Const.GLASS_STATE_TAKE)
+//                        .select(BigStorageCageDetails::getEngineerId)
+//                        .groupBy(BigStorageCageDetails::getEngineerId)
+//                        .between(BigStorageCageDetails::getDeviceId, 6, 8)
+//        );
+//        if (engineerCount1.size() > engineerCount2.size()) {
+//            deviceUsedList.removeIf(device -> device < 6);
+//        } else {
+//            deviceUsedList.removeIf(device -> device > 5);
+//        }
+//        if (CollectionUtils.isEmpty(deviceUsedList)) {
+//            deviceUsedList = deviceUseds;
+//        }
+//        for (Integer item : deviceUsedList) {
+//            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+//                    .eq(BigStorageCage::getRemainWidth, slotWidth)
+//                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+//                    .eq(BigStorageCage::getDeviceId, item)
+//                    .last("limit 1"));
+//            if (null != bigStorageCage) {
+//                log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板崰鐢ㄦ渶灏戞柟寮忚幏鍙栦俊鎭牸瀛愪负锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
+//                bigStorageDTO = new BigStorageDTO();
+//                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+//                bigStorageDTO.setSlot(bigStorageCage.getSlot());
+//                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+//                return bigStorageDTO;
+//            }
+//        }
+//
+//        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨
+////        List<Integer> deviceNotUsedList = bigStorageCageService.queryFreeDeviceByNotUsed(glassInfo.getThickness());
+////        for (Integer item : deviceNotUsedList) {
+////            bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+////                    .eq(BigStorageCage::getRemainWidth, slotWidth)
+////                    .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+////                    .eq(BigStorageCage::getDeviceId, item)
+////                    .last("limit 1"));
+////            if (null != bigStorageCage) {
+////                log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板墿浣欐渶澶氬緱鏂瑰紡鑾峰彇淇℃伅鐗堝浘id:{},鏍煎瓙锛歿},鐜荤拑id锛歿}", glassInfo.getTemperingLayoutId(), bigStorageCage.getSlot(), glassInfo.getGlassId());
+////                bigStorageDTO = new BigStorageDTO();
+////                bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+////                bigStorageDTO.setSlot(bigStorageCage.getSlot());
+////                bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+////                return bigStorageDTO;
+////            }
+////        }
+//        Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�");
+//        return bigStorageDTO;
+//    }
+//}
+//
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/impl/BigStorageCageHollowServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/impl/BigStorageCageHollowServiceImpl.java
new file mode 100644
index 0000000..9a8c1a8
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/hollow/service/impl/BigStorageCageHollowServiceImpl.java
@@ -0,0 +1,19 @@
+package com.mes.hollow.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.hollow.entity.BigStorageCageHollow;
+import com.mes.hollow.mapper.BigStorageCageHollowMapper;
+import com.mes.hollow.service.BigStorageCageHollowService;
+import org.springframework.stereotype.Service;
+
+/**
+ * (BigStorageCageHollow)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2024-11-21 09:22:46
+ */
+@Service
+public class BigStorageCageHollowServiceImpl extends ServiceImpl<BigStorageCageHollowMapper, BigStorageCageHollow> implements BigStorageCageHollowService {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
new file mode 100644
index 0000000..dcb12b5
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
@@ -0,0 +1,577 @@
+package com.mes.job;
+
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.kangaroohy.milo.model.ReadWriteEntity;
+import com.kangaroohy.milo.service.MiloService;
+import com.mes.base.entity.BigStorageCageBaseInfo;
+import com.mes.bigstorage.entity.BigStorageCage;
+import com.mes.bigstorage.entity.BigStorageCageDetails;
+import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
+import com.mes.bigstorage.service.BigStorageCageDetailsService;
+import com.mes.bigstorage.service.BigStorageCageService;
+import com.mes.bigstoragecagetask.entity.BigStorageCageHistoryTask;
+import com.mes.bigstoragecagetask.entity.BigStorageCageTask;
+import com.mes.bigstoragecagetask.service.BigStorageCageHistoryTaskService;
+import com.mes.bigstoragecagetask.service.BigStorageCageTaskService;
+import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
+import com.mes.common.config.Const;
+import com.mes.damage.entity.Damage;
+import com.mes.damage.service.DamageService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.hollow.service.BigStorageCageHollowService;
+import com.mes.temperingglass.entity.TemperingGlass;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.service.TemperingGlassService;
+import com.mes.utils.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author SNG-015
+ */
+@Component
+@Slf4j
+public class OpcPlcStorageCageHollowTask {
+    @Resource
+    private BigStorageCageDetailsService bigStorageCageDetailsService;
+
+    @Resource
+    private BigStorageCageHollowDetailsService bigStorageCageHollowDetailsService;
+    @Resource
+    private TemperingGlassService temperingGlassService;
+    @Resource
+    private DamageService damageService;
+    @Resource
+    private GlassInfoService glassInfoService;
+    @Resource
+    private BigStorageCageService bigStorageCageService;
+    @Resource
+    private BigStorageCageHollowService bigStorageCageHollowService;
+    @Resource
+    private BigStorageCageHistoryTaskService bigStorageCageHistoryTaskService;
+    @Resource
+    private BigStorageCageTaskService bigStorageCageTaskService;
+    @Autowired(required = false)
+    MiloService miloService;
+    @Resource
+    private RedisUtil redisUtil;
+
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
+
+    @Value("${mes.glassGap}")
+    private Integer glassGap;
+
+    @Value("${mes.carWidth}")
+    private Integer carWidth;
+
+    @Value("${mes.outCarMaxSize}")
+    private Integer outCarMaxSize;
+
+    @Value("${mes.sequence.order}")
+    private boolean sequenceOrder;
+
+
+    public void inBigStorageTask() throws Exception {
+        ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2A.DLP2A.mesControl");
+        if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) {
+            log.info("褰撳墠涓洪潪鑱旀満鐘舵�侊紝缁撴潫杩涚墖浠诲姟");
+            return;
+        }
+        ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP2A.DLP2A.RequestMes");
+        if (!"1".equals(requestEntity.getValue() + "")) {
+            log.info("褰撳墠鏈敹鍒拌繘鐗囪姹傦紝缁撴潫杩涚墖浠诲姟");
+            return;
+        }
+        ReadWriteEntity mesReplyEntity = miloService.readFromOpcUa("DLP2A.DLP2A.MesReply");
+        if ("1".equals(mesReplyEntity.getValue() + "")) {
+            log.info("鏈夋鍦ㄦ墽琛岀殑浠诲姟锛岀粨鏉熻繘鐗囦换鍔�");
+            return;
+        }
+        //鑾峰彇杩涚墖浠诲姟琛�
+        List<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_two_task");
+        if (CollectionUtils.isEmpty(inTaskList)) {
+            log.info("褰撳墠澶ц溅鏃犺繘鐗囩幓鐠冿紝缁撴潫杩涚墖浠诲姟");
+        }
+        List<String> glassIdList = inTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList());
+        log.info("鑾峰彇浠诲姟鐨勭幓鐠僫d锛歿}", glassIdList);
+        List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList));
+        Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId));
+
+        //璁$畻鐩爣鏍煎瓙
+        List<BigStorageCageHistoryTask> historyTasks = new ArrayList<>();
+        for (BigStorageCageTask task : inTaskList) {
+            GlassInfo info = glassListMap.get(task.getGlassId()).get(0);
+            //鑾峰彇鐩爣鏍煎瓙淇℃伅
+//            BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info);
+
+            BigStorageDTO bigStorageDTO = bigStorageCageHollowDetailsService.queryTargetSlotByHollow(info);
+//            涓存椂鏇存柊鏍煎瓙鐨勫墿浣欏昂瀵革細闃叉鐩搁偦鐜荤拑杩涘悓涓�鏍煎瓙閫犳垚鍓╀綑灏哄涓嶈冻锛岀幓鐠冭秺鐣岀殑鎯呭喌锛屼换鍔″畬鎴愬悗鍐嶆鏇存柊澶х悊鐗囩琛ㄥ墿浣欏搴︼紙鎸夌収绗煎唴鐜荤拑鏁伴噺鏇存柊澶х悊鐗囩鍓╀綑灏哄锛�
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>()
+                    .set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap)
+                    .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
+            task.setTargetSlot(bigStorageDTO.getSlot());
+            task.setGlassId(info.getGlassId());
+            bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_two_task", task);
+            //瀛樻斁鍘嗗彶浠诲姟
+            BigStorageCageHistoryTask historyTask = new BigStorageCageHistoryTask();
+            BeanUtils.copyProperties(task, historyTask);
+            historyTask.setTaskType(Const.BIG_STORAGE_BEFORE_IN);
+            historyTask.setGlassCount(glassInfoList.size());
+            historyTask.setTaskState(Const.ENGINEERING_NEW);
+            historyTasks.add(historyTask);
+            BigStorageCageDetails cageDetails = new BigStorageCageDetails();
+            BeanUtils.copyProperties(info, cageDetails);
+            cageDetails.setSlot(bigStorageDTO.getSlot());
+            cageDetails.setState(Const.GLASS_STATE_NEW);
+            cageDetails.setDeviceId(bigStorageDTO.getDeviceId());
+            cageDetails.setGap(glassGap);
+            cageDetails.setId(null);
+            bigStorageCageDetailsService.save(cageDetails);
+        }
+        //鍘嗗彶鏁版嵁鍏ュ簱
+        bigStorageCageHistoryTaskService.saveBatch(historyTasks);
+        //鍚憃pc鍙戦�佸惎鍔ㄤ俊鍙�
+        miloService.writeToOpcWord(generateReadWriteEntity("DLP2A.DLP2A.MesReply", 1));
+    }
+
+    //@Scheduled(fixedDelay = 1000)
+    public void outBigStorageTask() throws Exception {
+        Date startDate = new Date();
+        ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2B.DLP2B.mesControl");
+        if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) {
+            log.info("褰撳墠涓洪潪鑱旀満鐘舵�侊紝缁撴潫杩涚墖浠诲姟");
+            return;
+        }
+        ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP2B.DLP2B.RequestMes");
+        if (!"1".equals(requestEntity.getValue() + "")) {
+            log.info("褰撳墠鏈敹鍒板嚭鐗囪姹傦紝缁撴潫鍑虹墖浠诲姟");
+            return;
+        }
+        //鑾峰彇鍑虹墖浠诲姟琛�
+        List<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_two_task");
+        if (CollectionUtils.isNotEmpty(outTaskList)) {
+            log.info("鏈夋鍦ㄦ墽琛岀殑鍑虹墖浠诲姟锛岀粨鏉熸湰娆″嚭鐗囦换鍔�");
+            return;
+        }
+        //todo:鏄惁鍏佽閽㈠寲
+        if (redisUtil.getCacheObject("temperingSwitch")) {
+            //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑:閽㈠寲灏忕墖琛ㄥ叧鑱斿巻鍙蹭换鍔¤〃锛岀瓫閫夋湭鍑虹鐨勭幓鐠冧俊鎭�
+            List<TemperingGlass> temperingGlassList = temperingGlassService.selectJoinList(TemperingGlass.class, new MPJLambdaWrapper<TemperingGlass>()
+                    .selectAll(TemperingGlass.class)
+                    .leftJoin(BigStorageCageHistoryTask.class, BigStorageCageHistoryTask::getGlassId, TemperingGlass::getGlassId)
+                    .eq(TemperingGlass::getState, Const.TEMPERING_NEW)
+                    .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_OUT)
+                    .isNull(BigStorageCageHistoryTask::getGlassId)
+                    .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlass::getTemperingFeedSequence));
+            //todo:鍘嗗彶浠诲姟琛�
+            if (CollectionUtils.isNotEmpty(temperingGlassList)) {
+                log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
+                computeOutGlassInfo(temperingGlassList, "big_storage_cage_out_two_task", Const.TEMPERING_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT);
+                Date endDate = new Date();
+                log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                return;
+            }
+            //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+            List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll();
+            if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) {
+                //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑
+                //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
+                for (TemperingLayoutDTO item : temperingLayoutDTOList) {
+//                    if (item.getEngineerId().equals(redisUtil.getCacheObject("temperingengineerId"))) {
+                    List<TemperingGlass> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlass.class, JoinWrappers.lambda(GlassInfo.class)
+                            .selectAll(GlassInfo.class)
+                            .select("-1 as state")
+                            .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
+                            .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
+                            .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                            .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId())
+                            .eq(GlassInfo::getEngineerId, item.getEngineerId())
+                            .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
+                    if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
+                        temperingGlassService.saveBatch(temperingGlassInfos);
+                        computeOutGlassInfo(temperingGlassInfos, "big_storage_cage_out_two_task", Const.TEMPERING_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT);
+                        Date endDate = new Date();
+                        log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                        return;
+                    }
+//                    }
+                }
+            }
+        }
+        //鏄惁鏈変汉宸ヤ笅鐗囦换鍔�   鏈夌洿鎺ュ嚭
+        List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL)
+                .orderByAsc(BigStorageCageDetails::getSlot)
+                .orderByAsc(BigStorageCageDetails::getId));
+        if (CollectionUtils.isNotEmpty(artificialList)) {
+            computeOutGlassInfo(artificialList, "big_storage_cage_out_two_task", Const.ARTIFICIAL_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT);
+            Date endDate = new Date();
+            log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+            return;
+        }
+        //鏄惁瀛樺湪闇�瑕佸唴閮ㄨ皟搴︾殑鏍煎瓙:鎵ц鍐呴儴璋冨害浠诲姟
+        List<TemperingLayoutDTO> temperingOccupySlotList = bigStorageCageDetailsService.queryTemperingOccupySlot();
+        if (CollectionUtils.isNotEmpty(temperingOccupySlotList)) {
+            loop:
+            for (TemperingLayoutDTO temperingOccupySlot : temperingOccupySlotList) {
+                List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
+                for (int i = 0; i < slotSequenceList.size() - 1; i++) {
+                    SlotSequenceDTO first = slotSequenceList.get(i);
+                    SlotSequenceDTO second = slotSequenceList.get(i + 1);
+                    int slotWidth = carWidth - first.getRemainWidth() - glassGap;
+                    int totalCount = first.getGlassCount() + second.getGlassCount();
+                    if (totalCount <= 6 && first.getMinSequence() == second.getMaxSequence() + 1
+                            && second.getRemainWidth() > slotWidth && slotWidth >= 0) {
+
+                        List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                                .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                                .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence));
+                        if (CollectionUtils.isNotEmpty(list)) {
+                            computeOutGlassInfo(list, "big_storage_cage_out_two_task", second.getSlot(), Const.GLASS_STATE_SCHEDULE_ING, Const.BIG_STORAGE_BEFORE_DISPATCH);
+                        }
+                        updateSlotRemainBySlots(Arrays.asList(second.getSlot()));
+                        break loop;
+                    }
+                }
+            }
+        }
+        Date endDate = new Date();
+        log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        return;
+    }
+
+    //@Scheduled(fixedDelay = 1000)
+    public void finishInBigStorageTask() throws Exception {
+        ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2A.DLP2A.mesControl");
+        if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) {
+            log.info("褰撳墠涓洪潪鑱旀満鐘舵�侊紝缁撴潫瀹屾垚杩涚墖浠诲姟");
+            return;
+        }
+        //鑾峰彇杩涚墖浠诲姟琛�
+        List<BigStorageCageTask> inTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_in_two_task");
+        if (CollectionUtils.isEmpty(inTaskList)) {
+            log.info("褰撳墠澶ц溅鏃犺繘鐗囩幓鐠冿紝缁撴潫瀹屾垚杩涚墖浠诲姟");
+            return;
+        }
+        List<BigStorageCageTask> unFinishTaskList = inTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(unFinishTaskList)) {
+            log.info("瀛樺湪鏈畬鎴愮殑鐜荤拑淇℃伅,鐜荤拑锛歿}", unFinishTaskList);
+            return;
+        }
+        Map<Integer, List<BigStorageCageTask>> taskMap = inTaskList.stream().collect(Collectors.groupingBy(BigStorageCageTask::getTaskState));
+        //鎸夌収浠诲姟鐘舵�佷慨鏀瑰ぇ鐞嗙墖绗煎唴鐨勭幓鐠冩暟鎹�
+//        閲嶆柊璁$畻澶х悊鐗囩鍐呯殑鍓╀綑灏哄
+        taskMap.forEach((e1, v) -> {
+            if (e1 == 2) {
+                //杩涚墖瀹屾垚
+                log.info("3銆佽幏鍙栬繘鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", v);
+                List<Integer> inSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList());
+                List<UpdateBigStorageCageDTO> storageCageDTOList = v.stream().map(e -> {
+                    UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
+                    BeanUtils.copyProperties(e, storageCageDTO);
+                    return storageCageDTO;
+                }).collect(Collectors.toList());
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN);
+                log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", v);
+                updateSlotRemainBySlots(inSuccessGlassSlot);
+            } else if (e1 == 3) {
+                //鐮存崯澶勭悊
+                dealDamageInTask(v);
+            } else {
+                //娓呯┖鐞嗙墖绗肩┖鏁版嵁
+                noDealInTask(v);
+            }
+        });
+        for (BigStorageCageTask item : inTaskList) {
+            //鏇存柊鍘嗗彶浠诲姟琛ㄤ腑鐨勪换鍔$姸鎬�
+            bigStorageCageHistoryTaskService.update(new LambdaUpdateWrapper<BigStorageCageHistoryTask>()
+                    .set(BigStorageCageHistoryTask::getTaskState, item.getTaskState())
+                    .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_IN)
+                    .eq(BigStorageCageHistoryTask::getTargetSlot, item.getTargetSlot())
+                    .eq(BigStorageCageHistoryTask::getGlassId, item.getGlassId()));
+            item.setTargetSlot(0);
+            //娓呯┖浠诲姟琛ㄦ暟鎹�
+            bigStorageCageTaskService.updateTaskMessage("big_storage_cage_in_two_task", item);
+        }
+        //娓呯┖鍚姩鐘舵��
+        //鍚憃pc鍙戦�佸惎鍔ㄤ俊鍙�
+        miloService.writeToOpcWord(generateReadWriteEntity("DLP2A.DLP2A.MesReply", 0));
+    }
+
+    //@Scheduled(fixedDelay = 1000)
+    public void finishOutBigStorageTask() throws Exception {
+        ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2B.DLP2B.mesControl");
+        if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) {
+            log.info("褰撳墠涓洪潪鑱旀満鐘舵�侊紝缁撴潫瀹屾垚鍑虹墖浠诲姟");
+            return;
+        }
+        //鑾峰彇杩涚墖浠诲姟琛�
+        List<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_two_task");
+        if (CollectionUtils.isEmpty(outTaskList)) {
+            log.info("褰撳墠澶ц溅鏃犺繘鐗囩幓鐠冿紝缁撴潫瀹屾垚杩涚墖浠诲姟");
+            return;
+        }
+        List<BigStorageCageTask> unFinishTaskList = outTaskList.stream().filter(e -> e.getTaskState() <= 1 || e.getStartSlot() == 0).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(unFinishTaskList)) {
+            log.info("瀛樺湪鏈畬鎴愮殑鐜荤拑淇℃伅,鐜荤拑锛歿}", unFinishTaskList);
+            return;
+        }
+        Map<Integer, List<BigStorageCageTask>> taskMap = outTaskList.stream().collect(Collectors.groupingBy(BigStorageCageTask::getTaskState));
+        int taskType = 0;
+        if (Const.OUT_TARGET_POSITION_ALL.contains(outTaskList.get(0).getTargetSlot())) {
+            taskType = Const.BIG_STORAGE_BEFORE_OUT;
+        } else {
+            taskType = Const.BIG_STORAGE_BEFORE_DISPATCH;
+        }
+        //鎸夌収浠诲姟鐘舵�佷慨鏀瑰ぇ鐞嗙墖绗煎唴鐨勭幓鐠冩暟鎹�
+//        閲嶆柊璁$畻澶х悊鐗囩鍐呯殑鍓╀綑灏哄
+        Integer finalTaskType = taskType;
+        taskMap.forEach((e1, v) -> {
+            if (e1 == 2) {
+                //杩涚墖瀹屾垚
+                log.info("3銆佽幏鍙栬繘鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", v);
+                List<Integer> outSuccessGlassSlot = new ArrayList<>();
+                if (finalTaskType.equals(Const.BIG_STORAGE_BEFORE_OUT)) {
+                    outSuccessGlassSlot = v.stream().map(BigStorageCageTask::getStartSlot).collect(Collectors.toList());
+                } else {
+                    outSuccessGlassSlot = v.stream().map(BigStorageCageTask::getTargetSlot).collect(Collectors.toList());
+                }
+                List<UpdateBigStorageCageDTO> storageCageDTOList = v.stream().map(e -> {
+                    UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
+                    storageCageDTO.setGlassId(e.getGlassId());
+                    if (finalTaskType.equals(Const.BIG_STORAGE_BEFORE_OUT)) {
+                        storageCageDTO.setTargetSlot(e.getStartSlot());
+                    } else {
+                        storageCageDTO.setTargetSlot(e.getTargetSlot());
+                    }
+                    return storageCageDTO;
+                }).collect(Collectors.toList());
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT);
+                log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", v);
+                updateSlotRemainBySlots(outSuccessGlassSlot);
+            } else if (e1 == 3) {
+                //鐮存崯澶勭悊
+                dealDamageOutTask(v);
+            } else {
+                //娓呯┖鐞嗙墖绗肩┖鏁版嵁
+                noDealOutTask(v);
+            }
+        });
+        for (BigStorageCageTask item : outTaskList) {
+            //鏇存柊鍘嗗彶浠诲姟琛ㄤ腑鐨勪换鍔$姸鎬�
+            bigStorageCageHistoryTaskService.update(new LambdaUpdateWrapper<BigStorageCageHistoryTask>()
+                    .set(BigStorageCageHistoryTask::getTaskState, item.getTaskState())
+                    .eq(BigStorageCageHistoryTask::getTaskType, taskType)
+                    .eq(BigStorageCageHistoryTask::getGlassId, item.getGlassId()));
+        }
+//       閲嶇疆浠诲姟琛ㄦ暟鎹�
+        bigStorageCageTaskService.updateOutTaskMessage("big_storage_cage_out_two_task");
+        //娓呯┖鍚姩鐘舵��
+        //鍚憃pc鍙戦�佸惎鍔ㄤ俊鍙�
+        miloService.writeToOpcWord(generateReadWriteEntity("DLP2B.DLP2B.MesReply", 0));
+    }
+
+    private void dealDamageInTask(List<BigStorageCageTask> damageTaskList) {
+//        鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
+        log.info("鐮存崯鐨勭幓鐠冧俊鎭湁锛歿}", damageTaskList);
+        //绉婚櫎鐞嗙墖绗艰鎯呰〃浠诲姟鎵ц杩囩▼涓牬鎹熺殑鐜荤拑
+        bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW)
+                .in(BigStorageCageDetails::getGlassId, damageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList())));
+        //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+        List<Integer> slotList = new ArrayList<>();
+        for (BigStorageCageTask item : damageTaskList) {
+            Damage damage = new Damage();
+            damage.setGlassId(item.getGlassId());
+            damage.setLine(item.getStartSlot());
+            damage.setWorkingProcedure("纾ㄨ竟");
+            damage.setRemark("杩涚鍓嶅崸杞珛");
+            damage.setStatus(1);
+            damage.setType(item.getTaskState());
+            damageService.insertDamage(damage);
+            slotList.add(item.getTargetSlot());
+        }
+        //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+        updateSlotRemainBySlots(slotList);
+        log.info("杩涚墖浠诲姟-鐮存崯浠诲姟鎵ц瀹屾垚");
+    }
+
+    private void dealDamageOutTask(List<BigStorageCageTask> damageTaskList) {
+//        鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
+        log.info("鐮存崯鐨勭幓鐠冧俊鎭湁锛歿}", damageTaskList);
+        //绉婚櫎鐞嗙墖绗艰鎯呰〃浠诲姟鎵ц杩囩▼涓牬鎹熺殑鐜荤拑
+        bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)
+                .in(BigStorageCageDetails::getGlassId, damageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList())));
+        //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+        List<Integer> slotList = new ArrayList<>();
+        for (BigStorageCageTask item : damageTaskList) {
+            Damage damage = new Damage();
+            damage.setGlassId(item.getGlassId());
+            damage.setLine(item.getStartSlot());
+            damage.setWorkingProcedure("閽㈠寲鍓�");
+            damage.setRemark("杩涚鍚庡崸杞珛");
+            damage.setStatus(1);
+            damage.setType(item.getTaskState());
+            damageService.insertDamage(damage);
+            slotList.add(item.getTargetSlot());
+            slotList.add(item.getStartSlot());
+        }
+        //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+        updateSlotRemainBySlots(slotList);
+        log.info("鍑虹墖浠诲姟-鐮存崯浠诲姟鎵ц瀹屾垚");
+    }
+
+    private void noDealInTask(List<BigStorageCageTask> noDealTaskList) {
+//        鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
+        log.info("鐮存崯鐨勭幓鐠冧俊鎭湁锛歿}", noDealTaskList);
+        //绉婚櫎鐞嗙墖绗艰鎯呰〃鏈墽琛屼换鍔$殑绌鸿褰曚俊鎭�
+        bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW)
+                .in(BigStorageCageDetails::getGlassId, noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList())));
+        //璁板綍鏍煎瓙鍙凤紝鎸夋牸瀛愬彿鏇存柊鍓╀綑灏哄
+        List<Integer> slotList = new ArrayList<>();
+        for (BigStorageCageTask item : noDealTaskList) {
+            slotList.add(item.getTargetSlot());
+            slotList.add(item.getStartSlot());
+        }
+        //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+        updateSlotRemainBySlots(slotList);
+        log.info("杩涚墖浠诲姟-鏃犲姩浣滄墽琛屽畬鎴�");
+    }
+
+    private void noDealOutTask(List<BigStorageCageTask> noDealTaskList) {
+//        鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
+        log.info("鐮存崯鐨勭幓鐠冧俊鎭湁锛歿}", noDealTaskList);
+        if (Const.OUT_TARGET_POSITION_ALL.contains(noDealTaskList.get(0).getTargetSlot())) {
+            //鍑虹墖浠诲姟:灏嗗嚭鐗囦腑鐘舵�佹仮澶嶄负鍦ㄧ鍐�
+            List<String> glassList = noDealTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList());
+            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                    .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                    .in(BigStorageCageDetails::getGlassId, glassList));
+
+        } else {
+            //璋冨害浠诲姟锛氬皢璋冨害涓姸鎬佹敼涓哄湪绗煎唴锛屾牸瀛愬彿鎭㈠涓鸿皟搴﹀墠鐨勬牸瀛�
+            for (BigStorageCageTask item : noDealTaskList) {
+                bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                        .set(BigStorageCageDetails::getSlot, item.getStartSlot())
+                        .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                        .eq(BigStorageCageDetails::getGlassId, item.getGlassId()));
+            }
+        }
+        //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+        List<Integer> slotList = new ArrayList<>();
+        for (BigStorageCageTask item : noDealTaskList) {
+            slotList.add(item.getTargetSlot());
+            slotList.add(item.getStartSlot());
+        }
+        //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+        updateSlotRemainBySlots(slotList);
+        log.info("鍑虹墖浠诲姟-鏃犲姩浣滄墽琛屽畬鎴�");
+    }
+
+    /**
+     * 鍑虹墖涓�娆′粎鐢熸垚涓�杞︾幓鐠�
+     *
+     * @param list
+     * @param <T>
+     * @return
+     */
+    private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, String tableName, int targetSlot, int state, int taskType) {
+        //浠诲姟鏁版嵁:鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�,鐜荤拑闂撮殧
+        List<BigStorageCageTask> bigStorageCageTaskList = new ArrayList<>();
+        //鎵撹溅鍓╀綑灏哄
+        Integer remainWidth = carWidth;
+        for (T e : list) {
+            if (bigStorageCageTaskList.size() >= outCarMaxSize || Math.max((int) e.getWidth(), (int) e.getHeight()) > remainWidth) {
+                break;
+            }
+            //璁$畻褰撳墠鍑虹墖杞﹀墿灏哄
+            remainWidth = remainWidth - Math.max((int) e.getWidth(), (int) e.getHeight()) - glassGap;
+            bigStorageCageTaskList.add(new BigStorageCageTask(e.getGlassId(), e.getSlot(), targetSlot,
+                    0));
+        }
+        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageTaskList.size());
+        List<String> glassIds = bigStorageCageTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList());
+        int glassCount = bigStorageCageTaskList.size();
+        //鐢熸垚鍑虹墖浠诲姟鏉℃暟涓嶈冻6琛ュ叏
+        while (bigStorageCageTaskList.size() < 6) {
+            bigStorageCageTaskList.add(new BigStorageCageTask("", 0, 0, 0));
+        }
+        //娓呯┖浠诲姟琛ㄦ暟鎹�
+        bigStorageCageTaskService.removeAll("big_storage_cage_out_two_task");
+        bigStorageCageTaskService.saveTaskMessage(tableName, bigStorageCageTaskList);
+        List<BigStorageCageHistoryTask> historyList = bigStorageCageTaskList.stream().filter(e -> StringUtils.isNotBlank(e.getGlassId())).map(e -> {
+            BigStorageCageHistoryTask history = new BigStorageCageHistoryTask();
+            BeanUtils.copyProperties(e, history);
+            history.setGlassCount(glassCount);
+            history.setTaskType(taskType);
+            return history;
+        }).collect(Collectors.toList());
+        bigStorageCageHistoryTaskService.saveBatch(historyList);
+
+        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄嚭鐗囦腑", glassIds);
+        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                .set(BigStorageCageDetails::getState, state)
+                .set(Const.GLASS_STATE_SCHEDULE_ING.equals(state), BigStorageCageBaseInfo::getSlot, targetSlot)
+                .in(BigStorageCageDetails::getGlassId, glassIds));
+        try {
+            miloService.writeToOpcWord(generateReadWriteEntity("DLP2B.DLP2B.MesReply", 1));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Boolean.TRUE;
+    }
+
+
+    public void updateSlotRemainBySlots(List<Integer> slotList) {
+        //鑾峰彇鏍煎瓙鍐呮墍鏈夌殑鐜荤拑淇℃伅
+        List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL));
+        Map<Integer, Double> slotRemainMap = new HashMap<>();
+        //鏄惁瀛樺湪鏈夋牸瀛愰潪绌虹殑鐜荤拑
+        if (CollectionUtils.isNotEmpty(inSlotGlassList)) {
+            //瀛樺湪  灏嗘牸瀛愬唴鐨勭幓鐠冨垎鍒繘琛屾洿鏂�
+            slotRemainMap = inSlotGlassList.stream()
+                    .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> Math.max(item.getWidth(), item.getHeight()) + glassGap)));
+            slotRemainMap.forEach((e, v) -> {
+                double remainWidth = slotWidth - v >= 0 ? slotWidth - v : 0;
+                bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, remainWidth)
+                        .eq(BigStorageCage::getSlot, e));
+            });
+        }
+        //杩囨护涓嶅瓨鍦ㄧ幓鐠冪殑鏍煎瓙 灏嗗搴﹂噸缃负鍘熷瀹藉害5000
+        Set<Integer> remainSlotList = slotRemainMap.keySet();
+        slotList.removeAll(remainSlotList);
+        if (CollectionUtils.isNotEmpty(slotList)) {
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth)
+                    .in(BigStorageCage::getSlot, slotList));
+        }
+    }
+
+    private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) {
+        return ReadWriteEntity.builder()
+                .identifier(identifier)
+                //Kep涓槸Long绫诲瀷锛屽嵆锛欼nt32锛孞ava涓殑int绫诲瀷
+                .value(value)
+                .build();
+    }
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java
index 000af98..d4c3372 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java
@@ -110,6 +110,7 @@
         List<String> glassIdList = inTaskList.stream().map(BigStorageCageTask::getGlassId).collect(Collectors.toList());
         log.info("鑾峰彇浠诲姟鐨勭幓鐠僫d锛歿}", glassIdList);
         List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIdList));
+
         Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId));
 
         //璁$畻鐩爣鏍煎瓙
@@ -147,7 +148,7 @@
         miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.MesReply", 1));
     }
 
-    @Scheduled(fixedDelay = 1000)
+//    @Scheduled(fixedDelay = 1000)
     public void outBigStorageTask() throws Exception {
         Date startDate = new Date();
         ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP1B.DLP1B.mesControl");
@@ -215,7 +216,7 @@
         List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
                 .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL)
                 .orderByAsc(BigStorageCageDetails::getSlot)
-                .orderByDesc(BigStorageCageDetails::getId));
+                .orderByAsc(BigStorageCageDetails::getId));
         if (CollectionUtils.isNotEmpty(artificialList)) {
             computeOutGlassInfo(artificialList, "big_storage_cage_out_one_task", Const.ARTIFICIAL_OUT_TARGET_POSITION, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT);
             Date endDate = new Date();
@@ -311,13 +312,13 @@
         miloService.writeToOpcWord(generateReadWriteEntity("DLP1A.DLP1A.MesReply", 0));
     }
 
-    @Scheduled(fixedDelay = 1000)
+    //    @Scheduled(fixedDelay = 1000)
     public void finishOutBigStorageTask() throws Exception {
-//        ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP1B.DLP1B.mesControl");
-//        if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) {
-//            log.info("褰撳墠涓洪潪鑱旀満鐘舵�侊紝缁撴潫瀹屾垚鍑虹墖浠诲姟");
-//            return;
-//        }
+        ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP1B.DLP1B.mesControl");
+        if (true != Boolean.parseBoolean(inkageEntity.getValue() + "")) {
+            log.info("褰撳墠涓洪潪鑱旀満鐘舵�侊紝缁撴潫瀹屾垚鍑虹墖浠诲姟");
+            return;
+        }
         //鑾峰彇杩涚墖浠诲姟琛�
         List<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_one_task");
         if (CollectionUtils.isEmpty(outTaskList)) {
@@ -359,7 +360,7 @@
                     }
                     return storageCageDTO;
                 }).collect(Collectors.toList());
-                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, finalTaskType);
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT);
                 log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", v);
                 updateSlotRemainBySlots(outSuccessGlassSlot);
             } else if (e1 == 3) {
@@ -377,8 +378,8 @@
                     .eq(BigStorageCageHistoryTask::getTaskType, taskType)
                     .eq(BigStorageCageHistoryTask::getGlassId, item.getGlassId()));
         }
-        //娓呯┖浠诲姟琛ㄦ暟鎹�
-        bigStorageCageTaskService.removeAll("big_storage_cage_out_one_task");
+//       閲嶇疆浠诲姟琛ㄦ暟鎹�
+        bigStorageCageTaskService.updateOutTaskMessage("big_storage_cage_out_one_task");
         //娓呯┖鍚姩鐘舵��
         //鍚憃pc鍙戦�佸惎鍔ㄤ俊鍙�
         miloService.writeToOpcWord(generateReadWriteEntity("DLP1B.DLP1B.MesReply", 0));
@@ -512,6 +513,8 @@
         while (bigStorageCageTaskList.size() < 6) {
             bigStorageCageTaskList.add(new BigStorageCageTask("", 0, 0, 0));
         }
+        //娓呯┖浠诲姟琛ㄦ暟鎹�
+        bigStorageCageTaskService.removeAll("big_storage_cage_out_one_task");
         bigStorageCageTaskService.saveTaskMessage(tableName, bigStorageCageTaskList);
         List<BigStorageCageHistoryTask> historyList = bigStorageCageTaskList.stream().filter(e -> StringUtils.isNotBlank(e.getGlassId())).map(e -> {
             BigStorageCageHistoryTask history = new BigStorageCageHistoryTask();
@@ -527,6 +530,11 @@
                 .set(BigStorageCageDetails::getState, state)
                 .set(Const.GLASS_STATE_SCHEDULE_ING.equals(state), BigStorageCageBaseInfo::getSlot, targetSlot)
                 .in(BigStorageCageDetails::getGlassId, glassIds));
+        try {
+            miloService.writeToOpcWord(generateReadWriteEntity("DLP1B.DLP1B.MesReply", 1));
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         return Boolean.TRUE;
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml
index 84a0817..ca5269d 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageInTaskMapper.xml
@@ -34,5 +34,13 @@
         where glass_id = #{task.glassId}
     </update>
 
+    <update id="updateOutTaskMessage">
+        UPDATE ${tableName}
+        SET glass_id    = ''
+          , start_slot  = 0
+          , target_slot = 0
+          , task_state  = 0
+    </update>
+
 
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0