From 3c7d672fb7d6c34742fb7da6f66616ccf3be2c9a Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期五, 08 十一月 2024 14:50:11 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java                                   |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java                             |    4 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskHistoryDao.java                         |   15 
 hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json                                                                                           |   17 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java                                            |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml                                     |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml                                       |   42 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql                                               |  172 ++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java                                   |  295 +++++
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java            |   86 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java                                               |  118 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                      |  137 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskServiceImpl.java                |   33 
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml                                                          |    8 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskHistoryMapper.java                    |   15 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml                                                             |   12 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java                                                 |  222 +++
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/service/EdgGlassTaskQueueInfoService.java          |   15 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java           |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java                           |   14 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java                                 |   76 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java       |    3 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelogBase.xml                                             |    1 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/xml/RawGlassStorageTaskMapper.xml                                |    0 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java               |    6 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/mapper/UpPattenUsageMapper.java                                        |    4 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/service/impl/EdgGlassTaskQueueInfoServiceImpl.java |   19 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java                          |   12 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml                                      |   58 +
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskService.java                           |   20 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java                                   |   58 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageMapper.xml                                             |   26 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml                                         |   34 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceOneTaskServiceImpl.java               |   32 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java               |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java                                   |    0 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceTaskHistoryServiceImpl.java           |   19 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java                        |   14 
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml                                                 |    0 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/mapper/EdgGlassTaskQueueInfoDao.java               |   15 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/opccallback/BigStorageStartCallback.java                     |  824 ++++++++++++++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java                                  |    0 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskHistoryServiceImpl.java         |   19 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskHistoryService.java                  |   15 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java                   |    1 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassTestCallback.java                              |   38 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskHistoryService.java                    |   15 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java                             |    0 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java                     |    1 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java                                               |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java                 |    9 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java                           |    0 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java                  |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java                                         |    0 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceController.java                       |    9 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java            |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/RawGlassStorageDetails.java                                   |    0 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTaskHistory.java                          |   63 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskService.java                         |   21 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java        |   27 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java                                                  |    2 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskMapper.java                             |   19 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java                |    4 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java                             |  441 +++++++
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskMapper.java                           |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/RedisUtil.java                                                                 |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/entity/EdgGlassTaskQueueInfo.java                  |   51 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json                                 |   16 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java               |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java                     |   31 
 UI-Project/src/views/ReportWork/reportWork.vue                                                                                                  |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java    |   37 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/RawGlassStorageTaskService.java                                 |    0 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java                                                       |    6 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java                |    2 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTaskHistory.java                            |   66 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/request/RawGlassTaskRequest.java                                 |    2 
 /dev/null                                                                                                                                       |   32 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java                                             |    6 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java                                     |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                                             |   32 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml                                                          |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/RawGlassStorageTaskMapper.java                                   |    4 
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageStationMapper.xml                                                 |    0 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java                  |   23 
 85 files changed, 3,320 insertions(+), 157 deletions(-)

diff --git a/UI-Project/src/views/ReportWork/reportWork.vue b/UI-Project/src/views/ReportWork/reportWork.vue
index c50a0cb..470e33f 100644
--- a/UI-Project/src/views/ReportWork/reportWork.vue
+++ b/UI-Project/src/views/ReportWork/reportWork.vue
@@ -7,8 +7,8 @@
     <el-select v-model="report.type" :placeholder="$t('reportmanage.ctype')" style="margin-left: 10px;" >
       <el-option :label="$t('reportmanage.all')" value="0"></el-option>
       <el-option :label="$t('reportmanage.completed')" value="1"></el-option>
-      <el-option :label="$t('reportmanage.broke')" value="2"></el-option>
-      <el-option :label="$t('reportmanage.takeout')" value="3"></el-option>
+      <el-option :label="$t('reportmanage.broke')" value="8"></el-option>
+      <el-option :label="$t('reportmanage.takeout')" value="9"></el-option>
     </el-select>
     <el-select v-model="report.status" :placeholder="$t('reportmanage.cstate')" style="margin-left: 10px;" >
       <el-option :label="$t('reportmanage.all')" value="0"></el-option>
diff --git a/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json b/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
index a48a6d6..231d119 100644
--- a/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
+++ b/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
@@ -74,7 +74,7 @@
 		},
 		{
 			"codeId": "D05ID2",
-			"addressIndex": "328",
+			"addressIndex": "320",
 			"addressLenght": "32",
 			"ratio": "1",
 			"unit": ""
@@ -372,6 +372,21 @@
 			"addressLenght": "2",
 			"ratio": "1",
 			"unit": ""
+		},
+		{
+			"codeId": "D03Request",
+			"addressIndex": "898",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05Request",
+			"addressIndex": "900",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
 		}
+
 	]
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
index 2a9f2a9..29c8e17 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -57,13 +57,22 @@
     public static final List<Integer> GLASS_STATE_IN_ALL_ZERO = Arrays.asList(0, 100, 102, 103, 104);
 
     /**
-     * 鍗у紡鐞嗙墖绗艰鎯呰〃鐜荤拑鐘舵��
-     * 杩涚墖浠诲姟1
-     * 鍑虹墖浠诲姟2
+     * 鍗х浠诲姟绫诲瀷
+     * 绌轰换鍔� 0
+     * 杩涚墖浠诲姟 1
+     * 鍑虹墖浠诲姟 2
+     * 鐩撮�氫换鍔� 3
+     * 杩涜涓� 4
+     * 缁撴潫 5
+     * 鍏朵粬 6
      */
+    public static final Integer GLASS_CACHE_TYPE_EMPTY = 0;
     public static final Integer GLASS_CACHE_TYPE_IN = 1;
     public static final Integer GLASS_CACHE_TYPE_OUT = 2;
     public static final Integer GLASS_CACHE_TYPE_THROUGH = 3;
+    public static final Integer GLASS_CACHE_TYPE_RUNNING = 4;
+    public static final Integer GLASS_CACHE_TYPE_FINISH = 5;
+    public static final Integer GLASS_CACHE_TYPE_OTHER = 6;
     public static final List<Integer> GLASS_CACHE_TYPE_OUT_ALL = Arrays.asList(2, 3);
 
     /**
@@ -185,6 +194,9 @@
      * 鍘熺墖浠撳偍浠诲姟绫诲瀷
      * 杩涚墖浠诲姟1
      * 鍑虹墖浠诲姟2
+     * 璋冨害浠诲姟3
+     * 杩涚墖璇锋眰4
+     * 鍑虹墖璇锋眰5
      */
     public static final Integer RAW_GLASS_TASK_TYPE_IN = 1;
     public static final Integer RAW_GLASS_TASK_TYPE_OUT = 2;
@@ -193,9 +205,9 @@
     public static final Integer RAW_GLASS_TASK_TYPE_OUT_REQUEST = 5;
 
     /**
-     * 鍘熺墖浠撳偍浠诲姟绫诲瀷
-     * 杩涚墖浠诲姟1
-     * 鍑虹墖浠诲姟2
+     * 鍘熺墖浠撳偍浠诲姟鐘舵��
+     * 鏂板缓0
+     * 宸插畬鎴�1
      */
     public static final Integer ENGINEERING_NEW = 0;
     public static final Integer ENGINEERING_RUNNING = 1;
@@ -224,5 +236,13 @@
      */
     public static final List<Integer> RAW_GLASS_DEVICE = Arrays.asList(1, 2, 3);
 
+    /**
+     * 鍘熺墖涓婄墖鐘舵��
+     * 0 鏂板
+     * 100 宸插畬鎴�
+     */
+    public static final Integer LOAD_RAW_GLASS_NEW = 0;
+    public static final Integer LOAD_RAW_GLASS_SUCCESS = 100;
+
 
 }
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/RawGlassStorageDetails.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/RawGlassStorageDetails.java
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/RawGlassStorageDetails.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/RawGlassStorageDetails.java
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/entity/request/RawGlassRequest.java
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/mapper/RawGlassStorageDetailsMapper.java
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/RawGlassStorageDetailsService.java
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
similarity index 98%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
index a055efd..746269b 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassdetails/service/impl/RawGlassStorageDetailsServiceImpl.java
@@ -177,7 +177,7 @@
 
         List<ReadWriteEntity> list = new ArrayList<>();
         list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 1));
-        list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
+//        list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 1));
         list.add(generateReadWriteEntity("A01-CC.dev.startSlot", startSlot));
         list.add(generateReadWriteEntity("A01-CC.dev.endSlot", endSlot));
         miloService.writeToOpcWord(list);
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/entity/RawGlassStorageStation.java
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java
similarity index 84%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java
index 7195a73..030ca93 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/mapper/RawGlassStorageStationMapper.java
@@ -8,7 +8,7 @@
 
 /**
  * <p>
- *  Mapper 鎺ュ彛
+ * Mapper 鎺ュ彛
  * </p>
  *
  * @author wf
@@ -16,5 +16,5 @@
  */
 public interface RawGlassStorageStationMapper extends BaseMapper<RawGlassStorageStation> {
 
-  List<RawGlassStorageDetails> listRawGlassDetails();
+    List<RawGlassStorageDetails> listRawGlassDetails();
 }
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java
similarity index 75%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java
index 91c2bf7..23fd93d 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/RawGlassStorageStationService.java
@@ -19,12 +19,12 @@
 
     boolean insertRawGlassStorageStation(RawGlassStorageStation rw);
 
-  /**
-   * 鑾峰彇宸ヤ綅鍙婂搴旂殑鍘熺墖淇℃伅
-   *
-   * @return
-   */
-  List<RawGlassStorageDetails> listRawGlassDetails();
+    /**
+     * 鑾峰彇宸ヤ綅鍙婂搴旂殑鍘熺墖淇℃伅
+     *
+     * @return
+     */
+    List<RawGlassStorageDetails> listRawGlassDetails();
 
-  boolean updateSlotState(Integer slot, Integer enableState);
+    boolean updateSlotState(Integer slot, Integer enableState);
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java
similarity index 78%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java
index 9d2b255..7362cad 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglassstation/service/impl/RawGlassStorageStationServiceImpl.java
@@ -24,11 +24,12 @@
     public List<RawGlassStorageStation> selectStations() {
         return list();
     }
+
     @Override
     public boolean updateRawGlassStorageStation(String slot) {
         UpdateWrapper<RawGlassStorageStation> wrapper = new UpdateWrapper<>();  //杩欎釜绫诲瀷瀹氫箟閿欎簡锛屼笉搴旇鏄痶asking
-        wrapper.set("slot","105")
-                .eq( "slot",slot);
+        wrapper.set("slot", "105")
+                .eq("slot", slot);
         return update(wrapper);
     }
 
@@ -44,16 +45,16 @@
         return this.save(rw);
     }
 
-  @Override
-  public List<RawGlassStorageDetails> listRawGlassDetails() {
+    @Override
+    public List<RawGlassStorageDetails> listRawGlassDetails() {
         return baseMapper.listRawGlassDetails();
     }
 
-  @Override
-  public boolean updateSlotState(Integer slot, Integer enableState) {
-    return update(
-        new LambdaUpdateWrapper<RawGlassStorageStation>()
-            .set(RawGlassStorageStation::getEnableState, enableState)
-            .eq(RawGlassStorageStation::getSlot, slot));
-  }
+    @Override
+    public boolean updateSlotState(Integer slot, Integer enableState) {
+        return update(
+                new LambdaUpdateWrapper<RawGlassStorageStation>()
+                        .set(RawGlassStorageStation::getEnableState, enableState)
+                        .eq(RawGlassStorageStation::getSlot, slot));
+    }
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/RawGlassStorageTask.java
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/entity/request/RawGlassTaskRequest.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/request/RawGlassTaskRequest.java
similarity index 95%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/entity/request/RawGlassTaskRequest.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/request/RawGlassTaskRequest.java
index be97a9b..41e9180 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/entity/request/RawGlassTaskRequest.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/entity/request/RawGlassTaskRequest.java
@@ -8,7 +8,7 @@
 import java.util.List;
 
 @Data
-public class RawGlassTaskRequest  {
+public class RawGlassTaskRequest {
 
     /**
      * 浠诲姟绫诲瀷   1 鍏ュ簱    2 鍑哄簱    3 璋冨害
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/mapper/RawGlassStorageTaskMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/RawGlassStorageTaskMapper.java
similarity index 94%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/mapper/RawGlassStorageTaskMapper.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/RawGlassStorageTaskMapper.java
index 10ad9db..6623ed3 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/mapper/RawGlassStorageTaskMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/RawGlassStorageTaskMapper.java
@@ -1,11 +1,11 @@
 package com.mes.rawglasstask.mapper;
 
-import com.mes.rawglasstask.entity.RawGlassStorageTask;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.rawglasstask.entity.RawGlassStorageTask;
 
 /**
  * <p>
- *  Mapper 鎺ュ彛
+ * Mapper 鎺ュ彛
  * </p>
  *
  * @author wf
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/mapper/xml/RawGlassStorageTaskMapper.xml b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/xml/RawGlassStorageTaskMapper.xml
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/mapper/xml/RawGlassStorageTaskMapper.xml
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/mapper/xml/RawGlassStorageTaskMapper.xml
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/service/RawGlassStorageTaskService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/RawGlassStorageTaskService.java
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/service/RawGlassStorageTaskService.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/RawGlassStorageTaskService.java
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java
similarity index 98%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java
index aae2bf7..f5c0ad9 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/rawglasstask/service/impl/RawGlassRawGlassStorageTaskServiceImpl.java
@@ -3,12 +3,12 @@
 import cn.hutool.core.collection.CollectionUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.mes.common.utils.RedisUtil;
 import com.mes.rawglasstask.entity.RawGlassStorageTask;
 import com.mes.rawglasstask.entity.request.RawGlassTaskRequest;
 import com.mes.rawglasstask.mapper.RawGlassStorageTaskMapper;
 import com.mes.rawglasstask.service.RawGlassStorageTaskService;
 import com.mes.tools.DateUtil;
+import com.mes.utils.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/mapper/UpPattenUsageMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/mapper/UpPattenUsageMapper.java
index 42e4308..b3d3233 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/mapper/UpPattenUsageMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/uppattenusage/mapper/UpPattenUsageMapper.java
@@ -9,7 +9,7 @@
 
 /**
  * <p>
- *  Mapper 鎺ュ彛
+ * Mapper 鎺ュ彛
  * </p>
  *
  * @author zhoush
@@ -18,4 +18,6 @@
 public interface UpPattenUsageMapper extends MPJBaseMapper<UpPattenUsage> {
 
     List<UpPattenUsageVO> queryRawGlassByEngineeringId(@Param("engineeringId") String engineerId);
+
+    List<Integer> queryFinishByEngineering(@Param("stationCell") Integer deviceId, @Param("finishCount") int finishCount);
 }
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/RedisUtil.java
similarity index 99%
rename from hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/RedisUtil.java
index d11f2bc..2b0a460 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/utils/RedisUtil.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/utils/RedisUtil.java
@@ -1,4 +1,4 @@
-package com.mes.common.utils;
+package com.mes.utils;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.BoundSetOperations;
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
rename to hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageDetailsMapper.xml
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageStationMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageStationMapper.xml
similarity index 100%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/RawGlassStorageStationMapper.xml
rename to hangzhoumesParent/common/servicebase/src/main/resources/mapper/RawGlassStorageStationMapper.xml
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml
index 951829c..e859f86 100644
--- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/UpPattenUsageMapper.xml
@@ -27,6 +27,14 @@
           and t.state = 0
         ORDER BY t.layout_sequence
     </select>
+    <select id="queryFinishByEngineering" resultType="java.lang.Integer">
+        SELECT id
+        FROM up_patten_usage
+        WHERE engineering_id IN (SELECT engineer_id FROM engineering WHERE station_cell = #{stationCell} AND state = 1)
+          and state = 0
+        order by id
+        LIMIT ${finishCount}
+    </select>
 
 
 </mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java
index 1505d1b..bad55f9 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/common/filter/JwtAuthenticationTokenFilter.java
@@ -1,10 +1,10 @@
 package com.mes.common.filter;
 
 import com.mes.common.utils.JwtUtil;
-import com.mes.common.utils.RedisUtil;
 import com.mes.common.utils.UserInfoUtils;
 import com.mes.userinfo.entity.LoginUser;
 import com.mes.userinfo.service.SysUserService;
+import com.mes.utils.RedisUtil;
 import io.jsonwebtoken.Claims;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
index 73f43df..f6447db 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/service/impl/SysUserServiceImpl.java
@@ -6,7 +6,6 @@
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.mes.common.config.Const;
 import com.mes.common.utils.JwtUtil;
-import com.mes.common.utils.RedisUtil;
 import com.mes.common.utils.UserInfoUtils;
 import com.mes.entity.request.GeneralRequest;
 import com.mes.menu.mapper.SysMenuMapper;
@@ -21,6 +20,7 @@
 import com.mes.userinfo.mapper.SysUserRoleMapper;
 import com.mes.userinfo.service.SysUserRoleService;
 import com.mes.userinfo.service.SysUserService;
+import com.mes.utils.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
index 0934ab6..88390a6 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
@@ -4,12 +4,12 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.mes.common.utils.RedisUtil;
 import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
 import com.mes.edgglasstask.entity.request.EdgGlassInfoRequest;
 import com.mes.edgglasstask.mapper.EdgGlassTaskInfoMapper;
 import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
 import com.mes.tools.DateUtil;
+import com.mes.utils.RedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/entity/EdgGlassTaskQueueInfo.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/entity/EdgGlassTaskQueueInfo.java
new file mode 100644
index 0000000..dbd957c
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/entity/EdgGlassTaskQueueInfo.java
@@ -0,0 +1,51 @@
+package com.mes.edgglasstaskqueueinfo.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * (EdgGlassTaskQueueInfo)琛ㄥ疄浣撶被
+ *
+ * @author makejava
+ * @since 2024-11-03 15:42:12
+ */
+@SuppressWarnings("serial")
+@Data
+public class EdgGlassTaskQueueInfo {
+    /**
+     * 纾ㄨ竟鍓嶇幓鐠僫d
+     */
+    private String glassId;
+    /**
+     * 瀹�
+     */
+    private Integer width;
+    /**
+     * 楂�
+     */
+    private Integer height;
+    /**
+     * 鍘�
+     */
+    private Integer thickness;
+    /**
+     * 鐘舵��
+     */
+    private Integer state;
+    /**
+     * 绾胯矾
+     */
+    private Integer line;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    private Date updateTime;
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/mapper/EdgGlassTaskQueueInfoDao.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/mapper/EdgGlassTaskQueueInfoDao.java
new file mode 100644
index 0000000..19b9833
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/mapper/EdgGlassTaskQueueInfoDao.java
@@ -0,0 +1,15 @@
+package com.mes.edgglasstaskqueueinfo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo;
+
+/**
+ * (EdgGlassTaskQueueInfo)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-11-03 15:42:11
+ */
+public interface EdgGlassTaskQueueInfoDao extends BaseMapper<EdgGlassTaskQueueInfo> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/service/EdgGlassTaskQueueInfoService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/service/EdgGlassTaskQueueInfoService.java
new file mode 100644
index 0000000..6fa89e7
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/service/EdgGlassTaskQueueInfoService.java
@@ -0,0 +1,15 @@
+package com.mes.edgglasstaskqueueinfo.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo;
+
+/**
+ * (EdgGlassTaskQueueInfo)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2024-11-03 15:42:16
+ */
+public interface EdgGlassTaskQueueInfoService extends IService<EdgGlassTaskQueueInfo> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/service/impl/EdgGlassTaskQueueInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/service/impl/EdgGlassTaskQueueInfoServiceImpl.java
new file mode 100644
index 0000000..91e1941
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgglasstaskqueueinfo/service/impl/EdgGlassTaskQueueInfoServiceImpl.java
@@ -0,0 +1,19 @@
+package com.mes.edgglasstaskqueueinfo.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo;
+import com.mes.edgglasstaskqueueinfo.mapper.EdgGlassTaskQueueInfoDao;
+import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * (EdgGlassTaskQueueInfo)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2024-11-03 15:42:19
+ */
+@Service
+public class EdgGlassTaskQueueInfoServiceImpl extends ServiceImpl<EdgGlassTaskQueueInfoDao, EdgGlassTaskQueueInfo> implements EdgGlassTaskQueueInfoService {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
index 5b857ef..c7ddd26 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java
@@ -13,4 +13,5 @@
  */
 public interface EdgStorageCageDetailsMapper extends MPJBaseMapper<EdgStorageCageDetails> {
 
+    EdgStorageCageDetails queryEdgStorageDetailsBySize(double width, double height);
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java
index bfc7ed2..b727e12 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageMapper.java
@@ -1,8 +1,8 @@
 package com.mes.edgstoragecage.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.edgstoragecage.entity.EdgStorageCage;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -14,4 +14,14 @@
  */
 public interface EdgStorageCageMapper extends MPJBaseMapper<EdgStorageCage> {
 
+    /**
+     * 鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛�
+     *
+     * @param deviceId
+     * @param width
+     * @param height
+     * @param slot
+     * @return
+     */
+    EdgStorageCage getEdgStorageCageBySize(@Param("deviceId") int deviceId, @Param("width") double width, @Param("height") double height, @Param("slot") int slot);
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
index afc41fc..d8be128 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java
@@ -78,4 +78,13 @@
      * @return
      */
     boolean inToVerify(String glassId);
+
+    /**
+     * 鎸夌収灏哄
+     *
+     * @param width
+     * @param height
+     * @return
+     */
+    EdgStorageCageDetails queryEdgStorageDetailsBySize(double width, double height);
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
index 73b2bd4..2a998da 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
@@ -26,14 +26,17 @@
     EdgStorageCage selectNearestEmpty(int currentSlot, boolean flag);
 
     List<EdgStorageCage> selectCacheEmpty();
+
     /**
      * 鏌ヨ绗煎唴鍑虹墖椤哄簭璇︽儏
+     *
      * @return
      */
     List<Map<String, Object>> selectCacheOut();
 
     /**
      * 鏌ヨ绗煎唴璇︽儏
+     *
      * @return
      */
     List<Map<String, Object>> selectEdgStorageCages();
@@ -55,4 +58,15 @@
      */
     boolean updateEdgStorageCageDetails(int edgStorageCageId, EdgStorageCageDetails edgStorageCageDetails);
 
+    /**
+     * 鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛�
+     *
+     * @param deviceId
+     * @param width
+     * @param height
+     * @param slot
+     * @return
+     */
+    EdgStorageCage getEdgStorageCageBySize(int deviceId, double width, double height, int slot);
+
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
index 16a8ff2..08b79ea 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -334,22 +334,22 @@
         for (int i = 1; i <= groupBy.keySet().size(); i++) {
             String key = i + "";
             if (key != null) {
-                List<Map<String, Object>> galssInfo=groupBy.get(key);//褰撳墠閽㈠寲鐗堝浘鍐呯幓鐠冨皬鐗囬泦鍚�
-                if(!galssInfo.isEmpty()){
-                    Map<String, Object> item=new HashMap<>();//鏂版牸寮忕紪鎺�
+                List<Map<String, Object>> galssInfo = groupBy.get(key);//褰撳墠閽㈠寲鐗堝浘鍐呯幓鐠冨皬鐗囬泦鍚�
+                if (!galssInfo.isEmpty()) {
+                    Map<String, Object> item = new HashMap<>();//鏂版牸寮忕紪鎺�
                     //浠ヤ笅涓哄悓灞�  {key:"groupBy.get(key)",olLayoutRate:"灏忕墖闆嗗悎"}
                     //          {key:"groupBy.get(key)",olLayoutRate:[{},{},{},{}]}
 
 
-                    item.put("listGlass",groupBy.get(key));
-                    item.put("LayoutId",key);
-                    item.put("olWidth",galssInfo.get(0).get("olWidth").toString());
-                    item.put("olHeight",galssInfo.get(0).get("olHeight").toString());
-                    item.put("olLayoutRate",galssInfo.get(0).get("olLayoutRate").toString());
+                    item.put("listGlass", groupBy.get(key));
+                    item.put("LayoutId", key);
+                    item.put("olWidth", galssInfo.get(0).get("olWidth").toString());
+                    item.put("olHeight", galssInfo.get(0).get("olHeight").toString());
+                    item.put("olLayoutRate", galssInfo.get(0).get("olLayoutRate").toString());
                     result.add(item);
-                }else{
-                    log.info("褰撳墠閽㈠寲鐗堝浘涓嶅瓨鍦ㄥ皬鐗囨暟鎹妫�鏌ワ紝鐗堝浘鍙�:{}"+key);
-                    return null ;
+                } else {
+                    log.info("褰撳墠閽㈠寲鐗堝浘涓嶅瓨鍦ㄥ皬鐗囨暟鎹妫�鏌ワ紝鐗堝浘鍙�:{}" + key);
+                    return null;
                 }
             }
         }
@@ -523,4 +523,9 @@
         }
         return false;
     }
+
+    @Override
+    public EdgStorageCageDetails queryEdgStorageDetailsBySize(double width, double height) {
+        return baseMapper.queryEdgStorageDetailsBySize(width, height);
+    }
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
index c2645ea..55ba683 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
@@ -51,6 +51,7 @@
                         .eq(EdgStorageCageDetails::getSlot, EdgStorageCage::getSlot)
                         .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN))
                 .isNull(EdgStorageCageDetails::getSlot)
+                .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
                 .last("order by abs(t.slot - " + currentSlot + ")  asc limit 2")
         );
         if (flag && CollectionUtil.isNotEmpty(emptyList)) {
@@ -181,5 +182,10 @@
         return true;
     }
 
+    @Override
+    public EdgStorageCage getEdgStorageCageBySize(int deviceId, double width, double height, int slot) {
+        return baseMapper.getEdgStorageCageBySize(deviceId, width, height, slot);
+    }
+
 
 }
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 165ff7f..5d92126 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
@@ -1,11 +1,23 @@
 package com.mes.job;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.kangaroohy.milo.model.ReadWriteEntity;
+import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
+import com.kangaroohy.milo.service.MiloService;
+import com.mes.common.config.Const;
+import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo;
+import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService;
+import com.mes.opctask.entity.EdgStorageDeviceTask;
+import com.mes.opctask.service.EdgStorageDeviceTaskService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.util.Arrays;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @Author : zhoush
@@ -16,14 +28,98 @@
 @Slf4j
 public class OpcCacheGlassTask {
 
-//    @Autowired
-//    MiloService miloService;
-//
-//    @Autowired
-//    SubscriptionCallback cacheGlassSubscriptionCallback;
-//
-//    @Scheduled(fixedDelay = Long.MAX_VALUE)
-//    public void startOpcTask() throws Exception {
-//        miloService.subscriptionFromOpcUa(Arrays.asList("my.device.x1", "my.device.x2"), cacheGlassSubscriptionCallback);
-//    }
+    private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task";
+
+    private static final String EDG_STORAGE_DEVICE_TWO_TASK = "edg_storage_device_two_task";
+
+    @Autowired(required = false)
+    MiloService miloService;
+
+
+    @Resource(name = "cacheGlassStartCallback")
+    SubscriptionCallback cacheGlassStartCallback;
+
+    @Resource(name = "cacheGlassTestCallback")
+    SubscriptionCallback cacheGlassTestCallback;
+
+    @Resource
+    EdgStorageDeviceTaskService edgStorageDeviceTaskService;
+    @Resource
+    EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService;
+    private int sum = 0;
+
+    @Scheduled(fixedDelay = 10)
+    public void startOpcTask() throws Exception {
+//        miloService.subscriptionFromOpcUa(Arrays.asList("C101-WL.S7-1200.plc_task_state", "D101-WL.S7-1200.plc_task_state"), cacheGlassStartCallback);
+//        miloService.subscriptionFromOpcUa(Arrays.asList("mes.dec.edg_storage_device_one_task[1].task_state", "D101-WL.S7-1200.plc_task_state"), cacheGlassTestCallback);
+//        log.info("--------------------s---------------------------");
+        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task");
+        try {
+            if (task == null) {
+                log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
+                return;
+            }
+            if (task.getTaskState() == sum) {
+                return;
+            }
+            sum = task.getTaskState();
+            task.setTaskRunning(sum);
+            log.info("褰撳墠绗瑊}娆℃墽琛�", task.getTaskRunning());
+//            task.setTaskState(task.getTaskRunning());
+            edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task);
+        } catch (Exception e) {
+            log.info("{}", e.getMessage());
+        }
+    }
+
+//    mesControlWord glassId
+//    width height
+//    thickness             filmRemove
+//    deviceControlWord             deviceWarnState
+
+    //    @Scheduled(fixedDelay = 1000)
+    public void edgOpcTask() throws Exception {
+        ReadWriteEntity controlEntity = miloService.readFromOpcUa("A001-MB1.dev.deviceControlWord");
+        String deviceControlWord = (String) controlEntity.getValue();
+        if ("0".equals(deviceControlWord)) {
+            ReadWriteEntity messageEntity = miloService.readFromOpcUa("A001-MB1.dev.mesControlWord");
+            String messageValue = (String) messageEntity.getValue();
+            if ("1".equals(messageValue)) {
+                List<ReadWriteEntity> list = new ArrayList<>();
+                list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 0));
+                miloService.writeToOpcWord(list);
+            }
+            log.info("褰撳墠鏈敹鍒扮(杈规満鐨勮姹備换鍔�");
+            return;
+        }
+        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(EDG_STORAGE_DEVICE_ONE_TASK);
+        String glassId = task.getGlassId();
+        if (StringUtils.isBlank(glassId)) {
+            log.info("纾ㄨ竟鍓嶇殑鏋跺瓙娌℃湁鐜荤拑淇℃伅");
+            return;
+        }
+        //鑾峰彇纾ㄨ竟瀵瑰垪
+        EdgGlassTaskQueueInfo edgInfo = edgGlassTaskQueueInfoService.getOne(new LambdaQueryWrapper<EdgGlassTaskQueueInfo>()
+                .eq(EdgGlassTaskQueueInfo::getGlassId, glassId)
+                .eq(EdgGlassTaskQueueInfo::getState, Const.GLASS_STATE_NEW));
+        if (edgInfo == null) {
+            log.info("瀵瑰垪琛ㄤ腑鐨勭幓鐠僫d閿欒锛岃妫�鏌ユ暟鎹紝鐜荤拑id锛歿}", glassId);
+            return;
+        }
+        List<ReadWriteEntity> list = new ArrayList<>();
+        list.add(generateReadWriteEntity("A001-MB1.dev.mesControlWord", 1));
+        list.add(generateReadWriteEntity("A001-MB1.dev.glassId", glassId));
+        list.add(generateReadWriteEntity("A001-MB1.dev.width", edgInfo.getWidth()));
+        list.add(generateReadWriteEntity("A001-MB1.dev.height", edgInfo.getHeight()));
+        list.add(generateReadWriteEntity("A001-MB1.dev.thickness", edgInfo.getThickness()));
+        list.add(generateReadWriteEntity("A001-MB1.dev.filmRemove", 0));
+        miloService.writeToOpcWord(list);
+    }
+
+    private ReadWriteEntity generateReadWriteEntity(String identifier, Object value) {
+        ReadWriteEntity readWriteEntity = new ReadWriteEntity();
+        readWriteEntity.setIdentifier(identifier);
+        readWriteEntity.setValue(value);
+        return readWriteEntity;
+    }
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java
new file mode 100644
index 0000000..68e550d
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassStartCallback.java
@@ -0,0 +1,441 @@
+package com.mes.job.opccallback;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
+import com.mes.common.config.Const;
+import com.mes.edgglasstaskqueueinfo.entity.EdgGlassTaskQueueInfo;
+import com.mes.edgglasstaskqueueinfo.service.EdgGlassTaskQueueInfoService;
+import com.mes.edgstoragecage.entity.EdgStorageCage;
+import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
+import com.mes.edgstoragecage.service.EdgStorageCageService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.opctask.entity.EdgStorageDeviceTask;
+import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
+import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
+import com.mes.opctask.service.EdgStorageDeviceTaskService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/10 14:13
+ * @Description:
+ */
+@Service
+@Slf4j
+public class CacheGlassStartCallback implements SubscriptionCallback {
+
+    private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task";
+
+    private static final String EDG_STORAGE_DEVICE_TWO_TASK = "edg_storage_device_two_task";
+
+    @Resource
+    EdgStorageDeviceTaskService edgStorageDeviceTaskService;
+    @Resource
+    GlassInfoService glassInfoService;
+    @Resource
+    EdgStorageCageDetailsService edgStorageCageDetailsService;
+    @Resource
+    EdgStorageCageService edgStorageCageService;
+    @Resource
+    EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
+
+    @Resource
+    EdgGlassTaskQueueInfoService edgGlassTaskQueueInfoService;
+
+    @Value("${mes.glassGap}")
+    private int glassGap;
+    @Value("${mes.threshold}")
+    private int threshold;
+    @Value("${mes.cellLength}")
+    private int cellLength;
+
+    @Override
+    public void onSubscribe(String identifier, Object value) {
+        log.info("褰撳墠姝e湪鎵ц鐨勪换鍔′负{}", value);
+        String tableName = identifier.contains("edg_storage_device_one_task") ? EDG_STORAGE_DEVICE_ONE_TASK : EDG_STORAGE_DEVICE_TWO_TASK;
+        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName);
+        try {
+            if (task == null) {
+                log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
+                return;
+            }
+            int request = task.getTaskState();
+            log.info("寮�濮嬫墽琛屼换鍔★紝浠诲姟璇蜂俊鎭负{}", task);
+            if (request == 0) {
+                log.info("鏈敹鍒颁换鍔¤姹傦紝缁撴潫鏈浠诲姟");
+            } else if (request == 1) {
+                //杩涚墖浠诲姟
+                intoTask(task, tableName);
+            } else if (request == 2) {
+                //鍑虹墖浠诲姟
+                outTask(task, tableName);
+            } else if (request == 3) {
+                //鐩撮�氫换鍔�
+                if (!outTask(task, tableName)) {
+                    intoTask(task, tableName);
+                }
+            } else if (request == 4) {
+                log.info("灏嗗惎鍔ㄥ瓙鏀逛负0");
+                task.setTaskRunning(Const.GLASS_CACHE_TYPE_RUNNING);
+                edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+            } else {
+                finishTask(task, tableName);
+            }
+        } catch (Exception e) {
+            log.info("鎵ц浠诲姟杩囩▼涓彂鐢熷紓甯革紝浠诲姟瀛梴}锛寋}", task.getTaskState(), e.getMessage());
+            log.info("灏嗗惎鍔ㄥ瓙鏀逛负0");
+            task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY);
+            edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+        }
+    }
+
+    private boolean intoTask(EdgStorageDeviceTask task, String tableName) {
+        //鑾峰彇鐜荤拑鐨勫熀鏈俊鎭�
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
+        if (null == glassInfo) {
+            log.info("杩涚墖鐜荤拑淇℃伅涓嶅瓨鍦紝鐜荤拑id:{}", task.getGlassIdIn());
+            return Boolean.FALSE;
+        }
+        //鑾峰彇褰撳墠杩涚墖鐜荤拑id鍜岃繘鐗囨牸瀛�  鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛�
+        EdgStorageCage edgStorageCage = edgStorageCageService.getEdgStorageCageBySize(1, glassInfo.getWidth(), glassInfo.getHeight(), task.getCurrentCell());
+        if (edgStorageCage == null) {
+            log.info("鐩稿悓灏哄鍙互鏀句笅鐨勬牸瀛愭湭鎵惧埌锛屾牸瀛恑d:{}", task.getCurrentCell());
+//            SELECT * from edg_storage_cage where device_id = 1 and remain_width > 1000 order by abs(slot - 10)
+            List<EdgStorageCage> storageCageList = edgStorageCageService.list(new LambdaQueryWrapper<EdgStorageCage>().eq(EdgStorageCage::getDeviceId, 1)
+                    .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
+                    .ge(EdgStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight())).last("order by abs(slot - " + task.getCurrentCell() + ")"));
+//            //鐩撮�氫换鍔�
+//            if (flag && CollectionUtil.isNotEmpty(emptyList)) {
+//                return emptyList.get(0);
+//            }
+            if (CollectionUtil.isEmpty(storageCageList) || storageCageList.size() == 1) {
+                log.info("娌℃湁澶氫綑鐨勭┖鏍煎瓙");
+                return Boolean.FALSE;
+            }
+            edgStorageCage = storageCageList.get(0);
+        }
+        log.info("4銆佸皢鐜荤拑淇℃伅鎻掑叆鍗у紡鐞嗙墖绗�,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
+        EdgStorageCageDetails details = new EdgStorageCageDetails();
+        BeanUtils.copyProperties(glassInfo, details);
+        details.setState(Const.GLASS_STATE_IN);
+        details.setSlot(edgStorageCage.getSlot());
+        details.setDeviceId(edgStorageCage.getDeviceId());
+        edgStorageCageDetailsService.save(details);
+
+        //鏇存柊浠诲姟淇℃伅
+        task.setStartCell(edgStorageCage.getSlot());
+        task.setTaskRunning(Const.GLASS_CACHE_TYPE_IN);
+        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+        saveHistoryTask(task);
+        return Boolean.TRUE;
+    }
+
+    private boolean outTask(EdgStorageDeviceTask task, String tableName) {
+        EdgStorageCageDetails edgStorageCageDetails = null;
+        //绗煎唴鏄増鍥剧浉宸槸鍚﹁秴杩囬槇鍊�
+        boolean flag = queryMaxMinDiff(threshold);
+        if (flag) {
+            EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                    .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
+                    .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                    .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId)
+                    .orderBy(Boolean.TRUE, Boolean.TRUE, EdgStorageCageDetails::getTemperingFeedSequence)
+                    .last("limit 1"));
+//            select * from edg_storage_cage_details where width = 551 and height = 1151 and id in (select min(id ) from edg_storage_cage_details where state = 100 group by slot )
+            edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                    .eq(EdgStorageCageDetails::getWidth, minEdgDetails.getWidth())
+                    .eq(EdgStorageCageDetails::getHeight, minEdgDetails.getHeight())
+                    .inSql(EdgStorageCageDetails::getId, "select min(id) from edg_storage_cage_details where state = 100 group by slot ")
+                    .last("order by abs(slot - " + task.getCurrentCell() + ")  asc limit 1")
+            );
+            //缁欑洿閫氫换鍔�
+            if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
+                GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+                        .eq(GlassInfo::getGlassId, task.getGlassIdIn())
+                        .eq(GlassInfo::getWidth, minEdgDetails.getWidth())
+                        .eq(GlassInfo::getHeight, minEdgDetails.getHeight()));
+                if (null != glassInInfo) {
+                    edgStorageCageDetails = new EdgStorageCageDetails();
+                    BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
+                }
+            }
+            if (null == edgStorageCageDetails) {
+                edgStorageCageDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                        .eq(EdgStorageCageDetails::getSlot, minEdgDetails.getSlot())
+                        .orderByAsc(EdgStorageCageDetails::getId)
+                        .last("limit 1")
+                );
+            }
+        }
+        if (null == edgStorageCageDetails) {
+            //        鑾峰彇涓婃浠诲姟
+//        鑾峰彇鍘嗗彶琛ㄤ腑涓婃浠诲姟鏈�鍚庝竴鐗囧昂瀵�
+            EdgStorageDeviceTaskHistory edgeData = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
+                    .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)
+                    .in(EdgStorageDeviceTaskHistory::getTaskType, Const.GLASS_CACHE_TYPE_OUT, Const.GLASS_CACHE_TYPE_THROUGH)
+                    .orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1"));
+            if (null != edgeData) {
+                GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut()));
+                //绗煎唴鐨勭幓鐠冪殑灏哄鏄惁鍜屼笂涓�娆′换鍔′竴鑷�
+                edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(glassOutInfo.getWidth(), glassOutInfo.getHeight());
+                if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
+                    GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+                            .eq(GlassInfo::getGlassId, task.getGlassIdIn())
+                            .eq(GlassInfo::getWidth, glassOutInfo.getWidth())
+                            .eq(GlassInfo::getHeight, glassOutInfo.getHeight()));
+                    if (null != glassInInfo) {
+                        edgStorageCageDetails = new EdgStorageCageDetails();
+                        BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
+                    }
+                }
+            }
+        }
+        if (null == edgStorageCageDetails) {
+            edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(0, 0);
+        }
+        if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) {
+            //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄
+            GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
+            edgStorageCageDetails = new EdgStorageCageDetails();
+            BeanUtils.copyProperties(glassInInfo, edgStorageCageDetails);
+        }
+        if (edgStorageCageDetails == null) {
+            //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄
+            log.info("绗煎唴娌℃湁鐜荤拑浜�");
+            return Boolean.FALSE;
+        }
+        int taskType = Const.GLASS_CACHE_TYPE_OUT;
+        String glassId = edgStorageCageDetails.getGlassId();
+        if (glassId.equals(task.getGlassIdIn())) {
+            log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails);
+            //鐜荤拑淇℃伅鏇挎崲
+            String glassIdChange = queryAndChangeGlass(glassId);
+            if (StringUtils.isNotBlank(glassIdChange)) {
+                edgStorageCageDetails = new EdgStorageCageDetails();
+                GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+                BeanUtils.copyProperties(one, edgStorageCageDetails);
+            }
+            EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>().eq(EdgStorageCage::getDeviceId, 1)
+                    .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
+                    .ge(EdgStorageCage::getRemainWidth, cellLength).last("order by abs(slot - " + task.getCurrentCell() + ")")
+                    .last("limit 1"));
+            Assert.isTrue(null != storageCage, "鏍煎瓙宸叉弧,鏃犳硶鎵ц鐩撮�氫换鍔�");
+            log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", storageCage);
+            edgStorageCageDetails.setSlot(storageCage.getSlot());
+            edgStorageCageDetails.setState(Const.GLASS_STATE_OUT);
+            edgStorageCageDetailsService.save(edgStorageCageDetails);
+            taskType = Const.GLASS_CACHE_TYPE_THROUGH;
+        } else {
+            log.info("5銆侀潪鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails);
+            if (!edgStorageCageDetails.getSlot().equals(task.getCurrentCell())) {
+                EdgStorageCageDetails currentGlass = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                        .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                        .eq(EdgStorageCageDetails::getSlot, task.getCurrentCell()).eq(EdgStorageCageDetails::getWidth, edgStorageCageDetails.getWidth())
+                        .eq(EdgStorageCageDetails::getHeight, edgStorageCageDetails.getHeight()).eq(EdgStorageCageDetails::getThickness, edgStorageCageDetails.getThickness())
+                );
+                if (null != currentGlass) {
+                    edgStorageCageDetails = currentGlass;
+                }
+            }
+            //鐜荤拑淇℃伅鏇挎崲
+            String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId());
+            //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞�
+            queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
+            LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
+            wrapper.eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
+            edgStorageCageDetailsService.update(wrapper);
+            log.info("5銆佹洿鏂板嚭鐗囩幓鐠冪殑鐘舵�佷负{}", Const.GLASS_STATE_OUT);
+        }
+
+        //鐜荤拑淇℃伅鏇挎崲
+//        String glassIdChange = queryAndChangeGlass(edgStorageCageDetails.getGlassId());
+        //澶勭悊鍦ㄥ崸鐞嗗唴鐨勭幓鐠冧俊鎭細绗煎唴鐨勬暟鎹鐞�
+//        queryEdgAndChangeGlass(edgStorageCageDetails.getGlassId(), glassIdChange);
+        //鐢熸垚鍑虹墖浠诲姟
+        task.setGlassIdOut(edgStorageCageDetails.getGlassId());
+        task.setStartCell(edgStorageCageDetails.getSlot());
+        task.setTaskRunning(taskType);
+        task.setWidth((int) edgStorageCageDetails.getWidth() * 10);
+        task.setHeight((int) edgStorageCageDetails.getHeight() * 10);
+        task.setThickness((int) edgStorageCageDetails.getThickness() * 10);
+        task.setFilmRemove(0);
+        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+        saveHistoryTask(task);
+        //鏇存柊璇︽儏琛ㄤ换鍔″嚭鐗囦腑
+        edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
+                .set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT)
+                .eq(EdgStorageCageDetails::getGlassId, edgStorageCageDetails.getGlassId()));
+        //todo:纾ㄨ竟瀵瑰垪琛ㄦ柊澧炰竴鏉℃暟鎹�
+        EdgGlassTaskQueueInfo edgInfo = new EdgGlassTaskQueueInfo();
+        BeanUtils.copyProperties(task, edgInfo);
+        edgInfo.setState(Const.GLASS_STATE_NEW);
+        edgGlassTaskQueueInfoService.save(edgInfo);
+        return Boolean.TRUE;
+    }
+
+    private boolean finishTask(EdgStorageDeviceTask task, String tableName) {
+        log.info("褰撳墠浠诲姟淇℃伅涓猴細{}", task);
+        if (task.getTaskState() <= 4) {
+            log.info("鏈夋鍦ㄦ墽琛岀殑浠诲姟锛岀粨鏉�");
+            return Boolean.FALSE;
+        }
+        Integer cell = task.getStartCell();
+        Integer state = task.getTaskState();
+        task.setTaskRunning(Const.GLASS_CACHE_TYPE_EMPTY);
+//        task.setTaskState(Const.GLASS_CACHE_TYPE_EMPTY);
+        task.setGlassIdOut("");
+        task.setStartCell(0);
+        task.setWidth(0);
+        task.setHeight(0);
+        task.setThickness(0);
+        task.setFilmRemove(0);
+        edgStorageDeviceTaskService.updateTaskMessage(tableName, task);
+        edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
+                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
+                .set(EdgStorageDeviceTaskHistory::getTaskState,
+                        Const.GLASS_CACHE_TYPE_FINISH.equals(state) ? Const.RAW_GLASS_TASK_SUCCESS : Const.RAW_GLASS_TASK_FAILURE)
+        );
+        updateCellRemainWidth(cell);
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 鏌ヨ鐜荤拑骞惰繘琛屼氦鎹�
+     *
+     * @param glassId
+     * @return
+     */
+    public String queryAndChangeGlass(String glassId) {
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+//                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
+        Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");        //鎸夌収鐜荤拑灏哄
+        LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
+                .eq(GlassInfo::getWidth, glassInfo.getWidth())
+                .eq(GlassInfo::getHeight, glassInfo.getHeight())
+                .eq(GlassInfo::getThickness, glassInfo.getThickness())
+                .eq(GlassInfo::getFilmsid, glassInfo.getFilmsid())
+                .eq(GlassInfo::getFlowCardId, glassInfo.getFlowCardId())
+                .eq(GlassInfo::getTotalLayer, glassInfo.getTotalLayer())
+                .eq(GlassInfo::getLayer, glassInfo.getLayer())
+                .eq(GlassInfo::getEngineerId, glassInfo.getEngineerId())
+                .notInSql(GlassInfo::getGlassId, "select distinct glass_id from edg_storage_cage_details " +
+                        "where engineer_id = '" + glassInfo.getEngineerId() + "' and width = " + glassInfo.getWidth() + " and height = " + glassInfo.getHeight()
+                        + " and state != 100")
+                .orderByAsc(GlassInfo::getTemperingLayoutId)
+                .orderBy(Boolean.TRUE, Boolean.TRUE, GlassInfo::getTemperingFeedSequence)
+                .last("Limit 1");
+        GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
+        if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
+            String swapGlassId = swapGlassInfo.getGlassId();
+            log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�,杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo);
+            swapGlassInfo.setGlassId(glassId);
+            glassInfo.setGlassId(swapGlassId);
+            glassInfoService.updateById(swapGlassInfo);
+            glassInfoService.updateById(glassInfo);
+            return swapGlassId;
+        }
+        return "";
+    }
+
+
+    /**
+     * 鏌ヨ鍗у紡鐞嗙墖鐜荤拑骞惰繘琛屼氦鎹�
+     *
+     * @param glassId
+     * @return
+     */
+    public void queryEdgAndChangeGlass(String glassId, String swapGlassId) {
+        if (StringUtils.isBlank(swapGlassId)) {
+            log.info("褰撳墠鍑虹鐜荤拑涓嶅瓨鍦ㄩ渶瑕佹浛鎹㈢殑鐜荤拑");
+            return;
+        }
+        //鑾峰彇寰呭嚭绗肩殑鐜荤拑
+        EdgStorageCageDetails glassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                .eq(EdgStorageCageDetails::getGlassId, glassId).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
+//        鑾峰彇寰呭嚭绗肩殑鐜荤拑闇�瑕佹浛鎹㈢殑鐜荤拑淇℃伅
+        EdgStorageCageDetails swapGlassDetailInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                .eq(EdgStorageCageDetails::getGlassId, swapGlassId).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
+
+//      鐜荤拑灏忕墖琛ㄤ腑鐜荤拑宸茬粡鏇挎崲锛屾洿鏂板崸鐞嗙鍐呯幇鏈夌殑鍑嗗鍑虹鐨勭幓鐠冧俊鎭紝
+        if (null == swapGlassDetailInfo) {
+            GlassInfo glassInfoBase = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+                    .eq(GlassInfo::getGlassId, glassId));
+            //闇�瑕佹浛鎹㈢殑鐜荤拑涓哄瓨杩涘崸鐞嗭紝浠呴渶鏇存柊褰撳墠闇�瑕佸嚭绗肩殑鐜荤拑淇℃伅鍗冲彲
+            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
+                    .eq(EdgStorageCageDetails::getGlassId, glassId)
+                    .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfoBase.getTemperingLayoutId())
+                    .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfoBase.getTemperingFeedSequence()));
+        } else {
+            //闇�瑕佹浛鎹㈢殑鐜荤拑閮藉湪鍗х悊鍐咃紝鎸夌収鐜荤拑id瀵硅皟鐜荤拑淇℃伅锛氬璋冪幓鐠僫d鍗冲彲
+            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
+                    .eq(EdgStorageCageDetails::getId, glassInfo.getId())
+                    .set(EdgStorageCageDetails::getTemperingLayoutId, swapGlassDetailInfo.getTemperingLayoutId())
+                    .set(EdgStorageCageDetails::getTemperingFeedSequence, swapGlassDetailInfo.getTemperingFeedSequence())
+            );
+            edgStorageCageDetailsService.update(new LambdaUpdateWrapper<EdgStorageCageDetails>()
+                    .eq(EdgStorageCageDetails::getId, swapGlassDetailInfo.getId())
+                    .set(EdgStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
+                    .set(EdgStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence())
+            );
+        }
+    }
+
+    /**
+     * 鑾峰彇璇︽儏琛ㄥ唴鏈�澶ф渶灏忕増鍥緄d鐨勫樊鍊硷紝鍒ゆ柇鏄惁鍑烘渶灏忕増鍥剧幓鐠�
+     *
+     * @return
+     */
+    public boolean queryMaxMinDiff(int threshold) {
+        //鑾峰彇绗煎瓙鍐呮渶澶х増鍥緄d鍜屾渶灏忕増鍥緄d鎻掑�硷紝鍒ゆ柇鏄惁澶т簬闃堝�硷紝澶т簬闃堝�肩洿鎺ュ嚭鏈�灏忕増鍥剧幓鐠�
+        QueryWrapper<EdgStorageCageDetails> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("max(tempering_layout_id)-min(tempering_layout_id) as diff")
+                .eq("state", Const.GLASS_STATE_IN)
+                .inSql("slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON);
+        List<Object> list = edgStorageCageDetailsService.listObjs(queryWrapper);
+        //鑾峰彇绗煎唴鐜荤拑鐗堝浘宸�兼槸鍚﹀ぇ浜庨槇鍊�
+        if (CollectionUtil.isNotEmpty(list)) {
+            Long diff = (Long) list.get(0);
+            return diff > threshold;
+        } else {
+            return Boolean.FALSE;
+        }
+    }
+
+    public boolean saveHistoryTask(EdgStorageDeviceTask task) {
+        EdgStorageDeviceTaskHistory taskHistory = new EdgStorageDeviceTaskHistory();
+        BeanUtils.copyProperties(task, taskHistory);
+        taskHistory.setTaskType(task.getTaskRunning());
+        taskHistory.setCreateTime(new Date());
+        taskHistory.setTaskState(Const.RAW_GLASS_TASK_NEW);
+        edgStorageDeviceTaskHistoryService.save(taskHistory);
+        return Boolean.TRUE;
+    }
+
+    private boolean updateCellRemainWidth(int slot) {
+        List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, slot)
+                .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
+        int remainWidth = cellLength;
+        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;
+        }
+        edgStorageCageService.update(new LambdaUpdateWrapper<EdgStorageCage>().
+                set(EdgStorageCage::getRemainWidth, remainWidth).eq(EdgStorageCage::getSlot, slot));
+        return Boolean.TRUE;
+    }
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassTestCallback.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassTestCallback.java
new file mode 100644
index 0000000..b284827
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/opccallback/CacheGlassTestCallback.java
@@ -0,0 +1,38 @@
+package com.mes.job.opccallback;
+
+import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
+import com.mes.opctask.entity.EdgStorageDeviceTask;
+import com.mes.opctask.service.EdgStorageDeviceTaskService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/10 14:13
+ * @Description:
+ */
+@Service
+@Slf4j
+public class CacheGlassTestCallback implements SubscriptionCallback {
+    @Resource
+    EdgStorageDeviceTaskService edgStorageDeviceTaskService;
+
+    @Override
+    public void onSubscribe(String identifier, Object value) {
+        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage("edg_storage_device_one_task");
+        try {
+            if (task == null) {
+                log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
+                return;
+            }
+            task.setTaskRunning(task.getTaskRunning() + 1);
+            log.info("褰撳墠绗瑊}娆℃墽琛�", task.getTaskRunning());
+//            task.setTaskState(task.getTaskRunning());
+            edgStorageDeviceTaskService.updateTaskMessage("edg_storage_device_one_task", task);
+        } catch (Exception e) {
+            log.info("{}", e.getMessage());
+        }
+    }
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opccallback/CacheGlassSubscriptionCallback.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opccallback/CacheGlassSubscriptionCallback.java
deleted file mode 100644
index c736d4b..0000000
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opccallback/CacheGlassSubscriptionCallback.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.mes.opccallback;
-
-import lombok.extern.slf4j.Slf4j;
-import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedDataItem;
-import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * @Author : zhoush
- * @Date: 2024/10/10 14:13
- * @Description:
- */
-@Service
-@Slf4j
-public class CacheGlassSubscriptionCallback  {
-
-//    @Autowired
-//    MiloService miloService;
-//
-//    @Override
-//    public void onSubscribe(ManagedDataItem dataItem, DataValue value) {
-//        try {
-//            log.info("{}___________{}" + dataItem, value);
-//            ReadWriteEntity readWriteEntity = miloService.readFromOpcUa("my.device.x1");
-//            log.info("{}___________{}" + readWriteEntity);
-//        } catch (Exception e) {
-//
-//        }
-//
-//    }
-}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceController.java
new file mode 100644
index 0000000..5021252
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceController.java
@@ -0,0 +1,9 @@
+package com.mes.opctask.controller;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/24 15:35
+ * @Description:
+ */
+public class EdgStorageDeviceController {
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java
new file mode 100644
index 0000000..362b306
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java
@@ -0,0 +1,86 @@
+package com.mes.opctask.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
+import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
+import com.mes.utils.Result;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * (EdgStorageDeviceTaskHistory)琛ㄦ帶鍒跺眰
+ *
+ * @author makejava
+ * @since 2024-10-27 21:04:29
+ */
+@RestController
+@RequestMapping("edgStorageDeviceTaskHistory")
+public class EdgStorageDeviceTaskHistoryController {
+    /**
+     * 鏈嶅姟瀵硅薄
+     */
+    @Resource
+    private EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
+
+    /**
+     * 鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�
+     *
+     * @param page                        鍒嗛〉瀵硅薄
+     * @param edgStorageDeviceTaskHistory 鏌ヨ瀹炰綋
+     * @return 鎵�鏈夋暟鎹�
+     */
+    @GetMapping
+    public Result selectAll(Page<EdgStorageDeviceTaskHistory> page, EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) {
+        return Result.success(this.edgStorageDeviceTaskHistoryService.page(page, new QueryWrapper<>(edgStorageDeviceTaskHistory)));
+    }
+
+    /**
+     * 閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁
+     *
+     * @param id 涓婚敭
+     * @return 鍗曟潯鏁版嵁
+     */
+    @GetMapping("{id}")
+    public Result selectOne(@PathVariable Serializable id) {
+        return Result.success(this.edgStorageDeviceTaskHistoryService.getById(id));
+    }
+
+    /**
+     * 鏂板鏁版嵁
+     *
+     * @param edgStorageDeviceTaskHistory 瀹炰綋瀵硅薄
+     * @return 鏂板缁撴灉
+     */
+    @PostMapping
+    public Result insert(@RequestBody EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) {
+        return Result.success(this.edgStorageDeviceTaskHistoryService.save(edgStorageDeviceTaskHistory));
+    }
+
+    /**
+     * 淇敼鏁版嵁
+     *
+     * @param edgStorageDeviceTaskHistory 瀹炰綋瀵硅薄
+     * @return 淇敼缁撴灉
+     */
+    @PutMapping
+    public Result update(@RequestBody EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) {
+        return Result.success(this.edgStorageDeviceTaskHistoryService.updateById(edgStorageDeviceTaskHistory));
+    }
+
+    /**
+     * 鍒犻櫎鏁版嵁
+     *
+     * @param idList 涓婚敭缁撳悎
+     * @return 鍒犻櫎缁撴灉
+     */
+    @DeleteMapping
+    public Result delete(@RequestParam("idList") List<Long> idList) {
+        return Result.success(this.edgStorageDeviceTaskHistoryService.removeByIds(idList));
+    }
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java
new file mode 100644
index 0000000..dccd5ed
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTask.java
@@ -0,0 +1,76 @@
+package com.mes.opctask.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/24 10:22
+ * @Description:
+ */
+@Data
+public class EdgStorageDeviceTask {
+
+    /**
+     * 浠诲姟璇锋眰 0鏃犱换鍔� 1杩涚墖 2鍑虹墖 3鐩撮��
+     */
+    private Integer taskRunning;
+    /**
+     * 纾ㄨ竟鍓嶇幓鐠僫d
+     */
+    private String glassId;
+    /**
+     * 杩涚墖鐜荤拑id
+     */
+    private String glassIdIn;
+    /**
+     * 鍑虹墖鐜荤拑id
+     */
+    private String glassIdOut;
+    /**
+     * 褰撳墠灞傚彿
+     */
+    private Integer currentCell;
+    /**
+     * 灞傚彿
+     */
+    private Integer startCell;
+    /**
+     * 棰勭暀灞傚彿
+     */
+    private Integer endCell;
+    /**
+     * 浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟
+     */
+    private Integer taskState;
+    /**
+     * 浠诲姟绫诲瀷
+     */
+    private Integer taskType;
+    /**
+     * 瀹�
+     */
+    private Integer width;
+    /**
+     * 楂�
+     */
+    private Integer height;
+    /**
+     * 鍘�
+     */
+    private Integer thickness;
+    /**
+     * 鏄惁闄よ啘
+     */
+    private Integer filmRemove;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    private Date updateTime;
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTaskHistory.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTaskHistory.java
new file mode 100644
index 0000000..9a992c4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/EdgStorageDeviceTaskHistory.java
@@ -0,0 +1,63 @@
+package com.mes.opctask.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * (EdgStorageDeviceTaskHistory)琛ㄥ疄浣撶被
+ *
+ * @author makejava
+ * @since 2024-10-27 21:04:33
+ */
+@SuppressWarnings("serial")
+@Data
+public class EdgStorageDeviceTaskHistory extends Model<EdgStorageDeviceTaskHistory> {
+    /**
+     * 宸ョ▼琛╥d
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+    /**
+     * 杩涚墖鐜荤拑id
+     */
+    private String glassIdIn;
+    /**
+     * 鍑虹墖鐜荤拑id
+     */
+    private String glassIdOut;
+    /**
+     * 褰撳墠灞傚彿
+     */
+    private Integer currentCell;
+    /**
+     * 灞傚彿
+     */
+    private Integer startCell;
+    /**
+     * 棰勭暀灞傚彿
+     */
+    private Integer endCell;
+    /**
+     * 浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1 杩涚墖 2鍑虹墖 3 鐩撮�� 4鎵ц涓� 5缁撴潫浠诲姟 6鍏朵粬
+     */
+    private Integer taskState;
+    /**
+     * 浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1 杩涚墖 2鍑虹墖 3 鐩撮�� 4鎵ц涓� 5缁撴潫浠诲姟 6鍏朵粬
+     */
+    private Integer taskType;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    private Date updateTime;
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskHistoryMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskHistoryMapper.java
new file mode 100644
index 0000000..9499b45
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskHistoryMapper.java
@@ -0,0 +1,15 @@
+package com.mes.opctask.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
+
+/**
+ * (EdgStorageDeviceTaskHistory)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-10-27 21:04:29
+ */
+public interface EdgStorageDeviceTaskHistoryMapper extends BaseMapper<EdgStorageDeviceTaskHistory> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskMapper.java
new file mode 100644
index 0000000..0079ead
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/mapper/EdgStorageDeviceTaskMapper.java
@@ -0,0 +1,16 @@
+package com.mes.opctask.mapper;
+
+import com.mes.opctask.entity.EdgStorageDeviceTask;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/24 15:39
+ * @Description:
+ */
+public interface EdgStorageDeviceTaskMapper {
+
+    EdgStorageDeviceTask queryTaskMessage(String tableName);
+
+    boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") EdgStorageDeviceTask edgStorageDeviceTask);
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskHistoryService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskHistoryService.java
new file mode 100644
index 0000000..3eb12cb
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskHistoryService.java
@@ -0,0 +1,15 @@
+package com.mes.opctask.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
+
+/**
+ * (EdgStorageDeviceTaskHistory)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2024-10-27 21:04:33
+ */
+public interface EdgStorageDeviceTaskHistoryService extends IService<EdgStorageDeviceTaskHistory> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskService.java
new file mode 100644
index 0000000..78b51f2
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/EdgStorageDeviceTaskService.java
@@ -0,0 +1,21 @@
+package com.mes.opctask.service;
+
+import com.mes.opctask.entity.EdgStorageDeviceTask;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/24 15:35
+ * @Description:
+ */
+public interface EdgStorageDeviceTaskService {
+
+    /**
+     * 鏌ヨ浠诲姟淇℃伅
+     *
+     * @return
+     */
+    EdgStorageDeviceTask queryTaskMessage(String tableName);
+
+    boolean updateTaskMessage(String tableName, EdgStorageDeviceTask edgStorageDeviceTask);
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskHistoryServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskHistoryServiceImpl.java
new file mode 100644
index 0000000..2eaa927
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskHistoryServiceImpl.java
@@ -0,0 +1,19 @@
+package com.mes.opctask.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
+import com.mes.opctask.mapper.EdgStorageDeviceTaskHistoryMapper;
+import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
+import org.springframework.stereotype.Service;
+
+/**
+ * (EdgStorageDeviceTaskHistory)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2024-10-27 21:04:33
+ */
+@Service("edgStorageDeviceTaskHistoryService")
+public class EdgStorageDeviceTaskHistoryServiceImpl extends ServiceImpl<EdgStorageDeviceTaskHistoryMapper, EdgStorageDeviceTaskHistory> implements EdgStorageDeviceTaskHistoryService {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskServiceImpl.java
new file mode 100644
index 0000000..46691ce
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/service/impl/EdgStorageDeviceTaskServiceImpl.java
@@ -0,0 +1,33 @@
+package com.mes.opctask.service.impl;
+
+import com.mes.opctask.entity.EdgStorageDeviceTask;
+import com.mes.opctask.mapper.EdgStorageDeviceTaskMapper;
+import com.mes.opctask.service.EdgStorageDeviceTaskService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/24 15:36
+ * @Description:
+ */
+@Service
+public class EdgStorageDeviceTaskServiceImpl implements EdgStorageDeviceTaskService {
+//    @Override
+//    public void updateTaskMessage(Integer slot, Integer taskRunning, String glassIdOut) {
+
+    //    }
+    @Resource
+    EdgStorageDeviceTaskMapper edgStorageDeviceTaskMapper;
+
+    @Override
+    public EdgStorageDeviceTask queryTaskMessage(String tableName) {
+        return edgStorageDeviceTaskMapper.queryTaskMessage(tableName);
+    }
+
+    @Override
+    public boolean updateTaskMessage(String tableName, EdgStorageDeviceTask edgStorageDeviceTask) {
+        return edgStorageDeviceTaskMapper.updateTaskMessage(tableName, edgStorageDeviceTask);
+    }
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
index 5259be3..54b8ece 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -8,6 +8,11 @@
     name: cacheGlass
   liquibase:
     enabled: false
+  task:
+    scheduling:
+      pool:
+        size: 10
+      thread-name-prefix: task-cache
 mybatis-plus:
   mapper-locations: classpath*:mapper/*.xml
 #  configuration:
@@ -28,6 +33,8 @@
     two: #绗簩鏉$(杈圭嚎鐨勬渶灏忓昂瀵镐俊鎭�
       firstLength: 400
       secondLength: 400
+  glassGap: 300
+  cellLength: 2700
   sequence:
     order: false
 kangaroohy:
@@ -36,7 +43,8 @@
     primary: default
     config:
       default:
-        endpoint: opc.tcp://zidonghua:49320
+        endpoint: opc.tcp://192.168.10.241:49320
         security-policy: basic256sha256
-        username: zsh
+        username: liu
         password: 1qaz2wsx3edc4rfv
+
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
new file mode 100644
index 0000000..3ef3805
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper">
+
+    <resultMap id="baseMap" type="com.mes.edgstoragecage.entity.EdgStorageCageDetails">
+        <id column="id" property="id"/>
+        <result column="engineer_id" property="engineerId"/>
+        <result column="device_id" property="deviceId"/>
+        <result column="slot" property="slot"/>
+        <result column="glass_id" property="glassId"/>
+        <result column="sequence" property="sequence"/>
+        <result column="flow_card_id" property="flowCardId"/>
+        <result column="glass_type" property="glassType"/>
+        <result column="width" property="width"/>
+        <result column="height" property="height"/>
+        <result column="thickness" property="thickness"/>
+        <result column="edg_width" property="edgWidth"/>
+        <result column="edg_height" property="edgHeight"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="tempering_feed_sequence" property="temperingFeedSequence"/>
+        <result column="pattern_sequence" property="patternSequence"/>
+        <result column="state" property="state"/>
+        <result column="gap" property="gap"/>
+        <result column="glass_count" property="count"/>
+    </resultMap>
+
+    <select id="queryEdgStorageDetailsBySize" resultMap="baseMap">
+        with min_id_temp as (
+        select slot, min(id) as id, count(*) as glass_count
+        from edg_storage_cage_details
+        where state = 100
+        group by slot
+        ),
+        size_max_temp as (
+        select width, height, count(*) as total_count
+        from edg_storage_cage_details t
+        inner join min_id_temp t1 on t.id = t1.id
+        group by width, height
+        ),
+        slot_temp as (
+        select t.*, t1.glass_count
+        from edg_storage_cage_details t
+        inner join min_id_temp t1 on t.id = t1.id
+        inner join size_max_temp t2 on t.width = t2.width and t.height = t2.height
+        <where>
+            <if test="width != 0">
+                and t.width = #{width}
+            </if>
+            <if test="height != 0">
+                and t.height = #{height}
+            </if>
+        </where>
+        order by total_count desc, glass_count, abs(t.slot - 10)
+        )
+        select *
+        from slot_temp limit 1
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageMapper.xml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageMapper.xml
new file mode 100644
index 0000000..f2cbc0a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.mes.edgstoragecage.mapper.EdgStorageCageMapper">
+
+    <resultMap id="baseMap" type="com.mes.edgstoragecage.entity.EdgStorageCage">
+        <id column="id" property="id" jdbcType="INTEGER"/>
+        <result column="device_id" property="deviceId" jdbcType="INTEGER"/>
+        <result column="slot" property="slot" jdbcType="INTEGER"/>
+        <result column="enable_state" property="enableState" jdbcType="INTEGER"/>
+        <result column="remain_width" property="remainWidth" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <select id="getEdgStorageCageBySize" resultMap="baseMap">
+        select t.*
+        from edg_storage_cage t
+                 left join edg_storage_cage_details t1 on t.slot = t1.slot
+        where t.device_id = #{deviceId}
+          and t1.state = 100
+          and t.remain_width >= #{width}
+          and t1.width = #{width}
+          and t1.height = #{height}
+          and t.enable_state = 1
+        order by abs(t.slot - #{slot})
+        limit 1
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
new file mode 100644
index 0000000..b532cfa
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageDeviceTaskMapper.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.mes.opctask.mapper.EdgStorageDeviceTaskMapper">
+
+    <resultMap id="baseMap" type="com.mes.opctask.entity.EdgStorageDeviceTask">
+        <id column="task_running" property="taskRunning"/>
+        <id column="glass_id_in" property="glassIdIn"/>
+        <id column="glass_id_out" property="glassIdOut"/>
+        <id column="current_cell" property="currentCell"/>
+        <id column="start_cell" property="startCell"/>
+        <id column="enc_cell" property="endCell"/>
+        <id column="task_state" property="taskState"/>
+        <id column="create_time" property="createTime"/>
+        <id column="update_time" property="updateTime"/>
+        <id column="width" property="width"/>
+        <id column="height" property="height"/>
+        <id column="thickness" property="thickness"/>
+        <id column="film_remove" property="filmRemove"/>
+    </resultMap>
+
+    <select id="queryTaskMessage" resultMap="baseMap">
+        select *
+        from ${tableName}
+        limit 1
+    </select>
+
+    <update id="updateTaskMessage">
+        UPDATE ${tableName}
+        SET task_running = #{task.taskRunning},
+        glass_id_out = #{task.glassIdOut},
+        current_cell = #{task.currentCell},
+        start_cell = #{task.startCell},
+        end_cell = #{task.endCell},
+        width = #{task.width},
+        height = #{task.height},
+        thickness = #{task.thickness},
+        film_remove = #{task.filmRemove}
+        <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/bigstorage/controller/BigStorageCageDetailsController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
index b59a5cd..bd2e2de 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -3,12 +3,11 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.common.config.Const;
-import com.mes.common.utils.RedisUtil;
+import com.mes.utils.RedisUtil;
 import com.mes.utils.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
index 3d83139..e142d14 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -2,7 +2,6 @@
 
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.JoinWrappers;
@@ -21,7 +20,6 @@
 import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
 import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper;
 import com.mes.common.config.Const;
-import com.mes.common.utils.RedisUtil;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
 import com.mes.glassinfo.entity.GlassInfo;
@@ -31,13 +29,17 @@
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
+import com.mes.utils.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -310,6 +312,29 @@
 
         //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨 鍥犱负瀛愭煡璇㈡帓搴忓涓籹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)
@@ -381,17 +406,17 @@
                     .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
                     .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
             if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
-                if ("0".equals(temperingFeedSequence)){
+                if ("0".equals(temperingFeedSequence)) {
                     if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
                         plcStorageCageTask.computeOutMoreGlassInfo(temperingGlassInfos, Boolean.FALSE, "");
                     }
-                }else{
+                } else {
                     temperingGlassInfoService.saveBatch(temperingGlassInfos);
                 }
                 return true;
             }
         }
-            return false;
+        return false;
     }
 
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
index b7f6d9b..769d6a4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
@@ -53,6 +53,9 @@
     @Value("${mes.glassGap}")
     private Integer glassGap;
 
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
+
     //杩涚墖閫昏緫
     @Override
     public BigStorageCageDetails feedGlass(GlassInfo glassInfo, BigStorageCageDetails bigStorageCageDetails) {
@@ -226,7 +229,7 @@
         List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsMapper.selectList(bigStorageCageDetailsWrapper);
         for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList
         ) {
-            double widths = Math.max(bigStorageCageDetails.getWidth(),bigStorageCageDetails.getHeight()) ;
+            double widths = Math.max(bigStorageCageDetails.getWidth(), bigStorageCageDetails.getHeight());
             width = width - widths - glassGap;
         }
         //淇敼鏍煎瓙鍓╀綑瀹藉害
@@ -243,9 +246,9 @@
         MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>();
         wrapper.selectAll(BigStorageCage.class).selectCollection(BigStorageCageDetails.class, BigStorageCage::getBigStorageCageDetails)
                 .leftJoin(BigStorageCageDetails.class, on -> on.eq(BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
-                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL,Const.GLASS_STATE_OUT_ING))
-                        .orderByAsc(BigStorageCage::getDeviceId)
-                        .orderByAsc(BigStorageCage::getSlot);
+                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL, Const.GLASS_STATE_OUT_ING))
+                .orderByAsc(BigStorageCage::getDeviceId)
+                .orderByAsc(BigStorageCage::getSlot);
         return bigStorageCageMapper.selectJoinList(BigStorageCage.class, wrapper);
     }
 
@@ -256,7 +259,7 @@
         MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>();
         wrapper.selectAll(BigStorageCage.class).selectCollection(BigStorageCageDetails.class, BigStorageCage::getBigStorageCageDetails)
                 .leftJoin(BigStorageCageDetails.class, on -> on.eq(BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
-                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL,Const.GLASS_STATE_OUT_ING));
+                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL, Const.GLASS_STATE_OUT_ING));
         List<BigStorageCage> bigStorageCages = bigStorageCageMapper.selectJoinList(BigStorageCage.class, wrapper);
         Map<Integer, List<BigStorageCage>> listMap = bigStorageCages.stream().collect(Collectors.groupingBy(item -> item.getDeviceId()));
         return listMap;
@@ -266,8 +269,7 @@
     @Override
     public List<Map<String, Object>> selectBigStorageCageUsage() {
         QueryWrapper<BigStorageCage> wrapper = new QueryWrapper<>();
-        wrapper.select("device_id,ROUND(1 - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) / COUNT(device_id), 2)*100 AS percentage,SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) AS count")
-
+        wrapper.select("device_id,ROUND(1 - SUM(CASE WHEN remain_width = " + slotWidth + " THEN 1 ELSE 0 END) / COUNT(device_id), 2)*100 AS percentage,SUM(CASE WHEN remain_width = " + slotWidth + " THEN 1 ELSE 0 END) AS count")
                 .groupBy("device_id");
         List<Map<String, Object>> bigStorageCageUsages = baseMapper.selectMaps(wrapper);
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
index b8361f4..d7f44af 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
@@ -62,12 +62,14 @@
             log.info("澶х悊鐗囩璇诲彇plc鏁版嵁,寮�濮嬫椂闂达細{}锛岀粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", startDate, endDate, endDate.getTime() - startDate.getTime());
             if (getplcvlues != null) {
                 PlcMesObject.setPlcParameterList(getplcvlues);
-                log.info("澶х悊鐗囧綋鍓嶈繘鍗ц浆绔嬬‘璁ゅ瓧涓篸01:{},d04:{},杩涚閫佺墖浠诲姟纭瀛椾负锛歞03:{},d05:{},鍑虹墖浠诲姟纭瀛椾负{}",
+                log.info("澶х悊鐗囧綋鍓嶈繘鍗ц浆绔嬬‘璁ゅ瓧涓篸01:{},d04:{},杩涚閫佺墖浠诲姟纭瀛椾负锛歞03:{},d05:{},鍑虹墖浠诲姟纭瀛椾负{},D03璇锋眰瀛椾负锛歿}锛孌05璇锋眰瀛椾负锛歿}",
                         PlcMesObject.getPlcParameter("MESToD01").getValue(),
                         PlcMesObject.getPlcParameter("MESToD04").getValue(),
                         PlcMesObject.getPlcParameter("MESToD03").getValue(),
                         PlcMesObject.getPlcParameter("MESToD05").getValue(),
-                        PlcMesObject.getPlcParameter("MESToPLC").getValue());
+                        PlcMesObject.getPlcParameter("MESToPLC").getValue(),
+                        PlcMesObject.getPlcParameter("D03ToMES").getValue(),
+                        PlcMesObject.getPlcParameter("D05ToMES").getValue());
             }
         }
     }
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
new file mode 100644
index 0000000..b51000b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageTask.java
@@ -0,0 +1,295 @@
+package com.mes.job;
+
+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.kangaroohy.milo.runner.subscription.SubscriptionCallback;
+import com.kangaroohy.milo.service.MiloService;
+import com.mes.bigstorage.entity.BigStorageCage;
+import com.mes.bigstorage.entity.BigStorageCageDetails;
+import com.mes.bigstorage.service.BigStorageCageDetailsService;
+import com.mes.bigstorage.service.BigStorageCageService;
+import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
+import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
+import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
+import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
+import com.mes.common.config.Const;
+import com.mes.damage.entity.Damage;
+import com.mes.damage.service.DamageService;
+import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author SNG-015
+ */
+@Component
+@Slf4j
+public class OpcPlcStorageCageTask {
+
+    @Resource
+    private BigStorageCageService bigStorageCageService;
+    @Resource
+    private BigStorageCageDetailsService bigStorageCageDetailsService;
+    @Resource
+    private GlassInfoService glassInfoService;
+    @Resource
+    private BigStorageCageFeedTaskService bigStorageCageFeedTaskService;
+    @Resource
+    private BigStorageCageOutTaskService bigStorageCageOutTaskService;
+    @Resource
+    private EdgGlassTaskInfoService edgGlassTaskInfoService;
+    @Resource
+    private TemperingGlassInfoService temperingGlassInfoService;
+    @Resource
+    private DamageService damageService;
+
+    @Autowired(required = false)
+    MiloService miloService;
+
+    @Resource(name = "bigStorageStartCallback")
+    SubscriptionCallback bigStorageStartCallback;
+
+    @Value("${mes.carWidth}")
+    private Integer carWidth;
+
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
+
+    @Value("${mes.glassGap}")
+    private Integer glassGap;
+
+    @Scheduled(fixedDelay = Long.MAX_VALUE)
+    public void startOpcTask() throws Exception {
+        //璁惧涓�浜岀殑杩涚墖璇锋眰
+        miloService.subscriptionFromOpcUa(Arrays.asList("my.device01.x1", "my.device02.x1"), bigStorageStartCallback);
+    }
+
+    @Scheduled(fixedDelay = Long.MAX_VALUE)
+    public void outOpcTask() throws Exception {
+        //璁惧1鐨勫嚭鐗囪姹�
+        miloService.subscriptionFromOpcUa(Arrays.asList("my.device03.x1"), bigStorageStartCallback);
+    }
+
+
+    @Scheduled(fixedDelay = 300)
+    public void updateInGlassStateTask() {
+        Date startDate = new Date();
+        log.info("1銆佸ぇ鐞嗙墖绗艰繘鐗囧畬鎴愬悗鏇存柊澶х悊鐗囩鏁版嵁浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        //鍥犱负澶х悊鐗囩鍜屽嚭鐗囦换鍔℃槸涓や釜搴撶殑鏁版嵁锛屾墍浠ヨ鍒嗗紑鏌ユ壘
+        List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW));
+        if (CollectionUtils.isNotEmpty(list)) {
+            log.info("2銆佽幏鍙栨墍鏈夋鍦ㄨ繘鐗囩殑鐜荤拑淇℃伅id:{}", list);
+            List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList());
+            List<BigStorageCageFeedTask> inSuccessGlass = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                    .in(BigStorageCageFeedTask::getGlassId, glassIds)
+                    .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT));
+            if (CollectionUtils.isNotEmpty(inSuccessGlass)) {
+                log.info("3銆佽幏鍙栬繘鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", inSuccessGlass);
+                List<Integer> inSuccessGlassSlot = inSuccessGlass.stream().map(BigStorageCageFeedTask::getTargetSlot).collect(Collectors.toList());
+                List<UpdateBigStorageCageDTO> storageCageDTOList = inSuccessGlass.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:{}", inSuccessGlass);
+                //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
+                updateSlotRemainBySlots(inSuccessGlassSlot);
+                log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
+            }
+
+        }
+        Date endDate = new Date();
+        log.info("end:澶х悊鐗囩杩涚墖瀹屾垚鍚庢洿鏂板ぇ鐞嗙墖绗兼暟鎹换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        return;
+
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void updateOutGlassStateTask() {
+        Date startDate = new Date();
+        log.info("1銆佸ぇ鐞嗙墖绗煎嚭鐗囧畬鎴愬悗鏇存柊澶х悊鐗囩鏁版嵁浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        //鍥犱负澶х悊鐗囩鍜屽嚭鐗囦换鍔℃槸涓や釜搴撶殑鏁版嵁锛屾墍浠ヨ鍒嗗紑鏌ユ壘
+        List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING));
+        if (CollectionUtils.isNotEmpty(list)) {
+            log.info("2銆佽幏鍙栨墍鏈夋鍦ㄥ嚭鐗囩殑鐜荤拑淇℃伅id:{}", list);
+            List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList());
+            List<BigStorageCageOutTask> outSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                    .in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL));
+            if (CollectionUtils.isNotEmpty(outSuccessGlass)) {
+                for (BigStorageCageOutTask bigStorageCageOutTask : outSuccessGlass
+                ) {
+                    if (bigStorageCageOutTask.getEndSlot().equals(Const.ARTIFICIAL_OUT_TARGET_POSITION)) {
+                        temperingGlassInfoService.update(
+                                new LambdaUpdateWrapper<TemperingGlassInfo>()
+                                        .set(TemperingGlassInfo::getState, Const.TEMPERING_END)
+                                        .eq(TemperingGlassInfo::getGlassId, bigStorageCageOutTask.getGlassId())
+                        );
+                    }
+                }
+                log.info("3銆佽幏鍙栧嚭鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", outSuccessGlass);
+                List<UpdateBigStorageCageDTO> storageCageDTOList = outSuccessGlass.stream().map(e -> {
+                    UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
+                    storageCageDTO.setGlassId(e.getGlassId());
+                    storageCageDTO.setTargetSlot(e.getStartSlot());
+                    return storageCageDTO;
+                }).collect(Collectors.toList());
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT);
+                List<Integer> outSuccessSlotList = outSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).collect(Collectors.toList());
+                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlass);
+                //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
+                updateSlotRemainBySlots(outSuccessSlotList);
+                log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
+            }
+        }
+        Date endDate = new Date();
+        log.info("end:澶х悊鐗囩鍑虹墖瀹屾垚鍚庢洿鏂板ぇ鐞嗙墖绗兼暟鎹换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        return;
+
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void updateScheduleGlassStateTask() {
+        Date startDate = new Date();
+        log.info("1銆佸ぇ鐞嗙墖绗艰皟搴﹀畬鎴愬悗鏇存柊澶х悊鐗囩鏁版嵁浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        //鍥犱负澶х悊鐗囩鍜岃皟搴︿换鍔℃槸涓や釜搴撶殑鏁版嵁锛屾墍浠ヨ鍒嗗紑鏌ユ壘
+        List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING));
+        if (CollectionUtils.isNotEmpty(list)) {
+            log.info("2銆佽幏鍙栨墍鏈夋鍦ㄥ嚭鐗囩殑鐜荤拑淇℃伅id:{}", list);
+            List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList());
+            List<BigStorageCageOutTask> scheduleSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                    .in(BigStorageCageOutTask::getGlassId, glassIds).eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS)
+                    .notIn(BigStorageCageOutTask::getEndSlot, Const.TEMPERING_OUT_TARGET_POSITION, Const.ARTIFICIAL_OUT_TARGET_POSITION));
+            if (CollectionUtils.isNotEmpty(scheduleSuccessGlass)) {
+                log.info("3銆佽幏鍙栬皟搴﹀凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", scheduleSuccessGlass);
+                List<UpdateBigStorageCageDTO> storageCageDTOList = scheduleSuccessGlass.stream().map(e -> {
+                    UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
+                    storageCageDTO.setGlassId(e.getGlassId());
+                    storageCageDTO.setTargetSlot(e.getEndSlot());
+                    return storageCageDTO;
+                }).collect(Collectors.toList());
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN);
+                List<String> scheduleSuccessGlassIds = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", scheduleSuccessGlassIds);
+                //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
+                List<Integer> slotList = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).distinct().collect(Collectors.toList());
+                slotList.addAll(scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getEndSlot).distinct().collect(Collectors.toList()));
+                updateSlotRemainBySlots(slotList);
+                log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
+            }
+        }
+        Date endDate = new Date();
+        log.info("end:澶х悊鐗囩鍑虹墖瀹屾垚鍚庢洿鏂板ぇ鐞嗙墖绗兼暟鎹换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        return;
+
+    }
+
+    /**
+     * 澶勭悊鐮存崯琛ㄤ换鍔�
+     */
+    @Scheduled(fixedDelay = 300)
+    public void dealDamageTask() {
+        Date startDate = new Date();
+        log.info("澶х悊鐗囩鐮存崯鐜荤拑娓呴櫎浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        //鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
+        List<BigStorageCageFeedTask> inDamageTaskInfoList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                .in(BigStorageCageFeedTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE));
+        if (CollectionUtils.isNotEmpty(inDamageTaskInfoList)) {
+            log.info("鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", inDamageTaskInfoList);
+            bigStorageCageFeedTaskService.remove(new LambdaQueryWrapper<BigStorageCageFeedTask>().in(BigStorageCageFeedTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE));
+            //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佹洿鏂�
+            bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>()
+                    .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList())));
+            //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
+            for (BigStorageCageFeedTask bigStorageCageFeedTask : inDamageTaskInfoList) {
+                Damage damage = new Damage();
+                damage.setGlassId(bigStorageCageFeedTask.getGlassId());
+                damage.setLine(bigStorageCageFeedTask.getLine());
+                damage.setWorkingProcedure("纾ㄨ竟");
+                damage.setRemark("杩涚鍓嶅崸杞珛");
+                damage.setStatus(1);
+                damage.setType(bigStorageCageFeedTask.getTaskState());
+                damageService.insertDamage(damage);
+                slotList.add(bigStorageCageFeedTask.getTargetSlot());
+            }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
+            log.info("杩涚墖浠诲姟鎵ц瀹屾垚");
+        }
+        //鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
+        List<BigStorageCageOutTask> outDamageTaskInfoList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                .in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE));
+        if (CollectionUtils.isNotEmpty(outDamageTaskInfoList)) {
+            log.info("鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", outDamageTaskInfoList);
+            bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().in(BigStorageCageOutTask::getTaskState, Const.GLASS_STATE_DAMAGE_TAKE));
+            List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+            //绉婚櫎閽㈠寲涓嬬墖琛ㄦ暟鎹�
+            temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList));
+            //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佸垹闄�
+            bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList));
+            //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
+            for (BigStorageCageOutTask bigStorageCageOutTask : outDamageTaskInfoList) {
+                Damage damage = new Damage();
+                damage.setGlassId(bigStorageCageOutTask.getGlassId());
+                damage.setLine(bigStorageCageOutTask.getEndSlot());
+                damage.setWorkingProcedure("閽㈠寲");
+                damage.setRemark("鍑虹墖鍚庡崸杞珛");
+                damage.setStatus(1);
+                damage.setType(bigStorageCageOutTask.getTaskState());
+                damageService.insertDamage(damage);
+                slotList.add(bigStorageCageOutTask.getStartSlot());
+            }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
+            log.info("鍑虹墖浠诲姟鎵ц瀹屾垚");
+        }
+        Date endDate = new Date();
+        log.info("澶х悊鐗囩鐮存崯鐜荤拑娓呴櫎浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        return;
+    }
+
+    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));
+        }
+    }
+
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
index 903d7aa..1d89478 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
@@ -6,12 +6,12 @@
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
-import com.mes.common.utils.RedisUtil;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
 import com.mes.tools.WebSocketServer;
+import com.mes.utils.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
index f30b7d0..b80f6d4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -127,21 +127,38 @@
         }
         //鎸夌収绾胯矾鍙婄幓鐠僫d鑾峰彇鐩搁偦涓ゅ潡鐜荤拑 鍗ц浆绔嬩笂鐨勭幓鐠�:  鐘舵�佷负0涓嶆搷浣滐紙D01閫佺墖锛�0涓嶆搷浣滐紝1鍏佽閫佺墖锛夛紝璇锋眰瀛椾负1锛� 锛�02鐜荤拑id涓虹┖鎴栬�呭崸杞珛鏈惎鍔級
         if (!REQUEST_WORD.equals(mesD01Value) && REQUEST_WORD.equals(d01ToMES) && (StringUtils.isBlank(d02State) || !REQUEST_WORD.equals(d03State))) {
-            if (!d01GlassId.equals(d01Id)) {
-                judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION, mesD01Address);
-                edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
-                        .set(EdgGlassTaskInfo::getStatus, Const.EDG_GLASS_SUCCESS).eq(EdgGlassTaskInfo::getGlassId, d01Id));
+            List<BigStorageCageFeedTask> bigStorageCageFeedTasks=bigStorageCageFeedTaskService.list(
+              new LambdaQueryWrapper<BigStorageCageFeedTask>()
+              .gt(BigStorageCageFeedTask::getTargetSlot,0)
+                    .eq(BigStorageCageFeedTask::getLine,Const.A09_OUT_TARGET_POSITION)
+                      .eq(BigStorageCageFeedTask::getTaskState,Const.BIG_STORAGE_IN_UP)
+            );
+            if(CollectionUtils.isEmpty(bigStorageCageFeedTasks)){
+                if (!d01GlassId.equals(d01Id)) {
+                    judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION, mesD01Address);
+                    edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
+                            .set(EdgGlassTaskInfo::getStatus, Const.EDG_GLASS_SUCCESS).eq(EdgGlassTaskInfo::getGlassId, d01Id));
 //                d01GlassId = d01Id;
+                }
             }
         }
 //        鐘舵�佷负0涓嶆搷浣滐紙D01閫佺墖锛�0涓嶆搷浣滐紝1鍏佽閫佺墖锛夛紝璇锋眰瀛椾负1锛� 鍗ц浆绔嬫湭鍚姩
         if (!REQUEST_WORD.equals(mesD04Value) && REQUEST_WORD.equals(d04ToMES) && !REQUEST_WORD.equals(d05State)) {
-            if (!d04GlassId.equals(d04Id)) {
-                judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION, mesD04Address);
-                edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
-                        .set(EdgGlassTaskInfo::getStatus, Const.EDG_GLASS_SUCCESS).eq(EdgGlassTaskInfo::getGlassId, d04Id));
+            List<BigStorageCageFeedTask> bigStorageCageFeedTasks=bigStorageCageFeedTaskService.list(
+                    new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                            .gt(BigStorageCageFeedTask::getTargetSlot,0)
+                            .eq(BigStorageCageFeedTask::getLine,Const.A10_OUT_TARGET_POSITION)
+                            .eq(BigStorageCageFeedTask::getTaskState,Const.BIG_STORAGE_IN_UP)
+            );
+            if(CollectionUtils.isEmpty(bigStorageCageFeedTasks)){
+                if (!d04GlassId.equals(d04Id)) {
+                    judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION, mesD04Address);
+                    edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
+                            .set(EdgGlassTaskInfo::getStatus, Const.EDG_GLASS_SUCCESS).eq(EdgGlassTaskInfo::getGlassId, d04Id));
 //                d04GlassId = d04Id;
+                }
             }
+
         }
         Date endDate = new Date();
         log.info("澶х悊鐗囩鎵爜浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
@@ -180,13 +197,26 @@
         }
         if (!REQUEST_WORD.equals(d03ToMES) && !REQUEST_WORD.equals(d05ToMES)) {
             Date endDate = new Date();
-            log.info("鍗ц浆绔嬫病鏈夐�佺墖璇锋眰锛岀粨鏉熼�佺墖浠诲姟锛屼换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+            log.info("鍗ц浆绔嬬涓�娆℃病鏈夐�佺墖璇锋眰锛岀粨鏉熼�佺墖浠诲姟锛屼换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
             return;
         }
+        if (!REQUEST_WORD.equals(d03ToMES) && !REQUEST_WORD.equals(d05ToMES)) {
+            Date endDate = new Date();
+            log.info("鍗ц浆绔嬬浜屾娌℃湁閫佺墖璇锋眰锛岀粨鏉熼�佺墖浠诲姟锛屼换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+            return;
+        }
+//        List<Integer> lines=new ArrayList<>();
+//        if(REQUEST_WORD.equals(d03ToMES)){
+//            lines.add(Const.A09_OUT_TARGET_POSITION);
+//        }
+//        if(REQUEST_WORD.equals(d05ToMES)){
+//            lines.add(Const.A10_OUT_TARGET_POSITION);
+//        }
         LambdaQueryWrapper<BigStorageCageFeedTask> wrapper = new LambdaQueryWrapper<BigStorageCageFeedTask>()
                 .eq(BigStorageCageFeedTask::getTaskType, Const.BIG_STORAGE_IN_RUN)
                 .and(e -> e.isNull(BigStorageCageFeedTask::getTargetSlot).or().eq(BigStorageCageFeedTask::getTargetSlot, Const.OUT_TARGET_POSITION_ZERO))
                 .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP);
+//                .in(BigStorageCageFeedTask::getLine,lines);
         //鑾峰彇鍙互鍚姩鍗ц浆绔嬬殑浠诲姟绾胯矾
         List<BigStorageCageFeedTask> feedTaskList = bigStorageCageFeedTaskService.list(wrapper);
         if (CollectionUtils.isNotEmpty(feedTaskList)) {
@@ -224,6 +254,8 @@
                 //鑾峰彇鍗ц浆绔嬪墿浣欏搴�
                 if (computeIsRun(lineFirst, lineGlassId)) {
                     computeTargetByLine(lineFirst);
+                }else{
+                    log.info("褰撳墠绾胯矾锛歿}锛屾湁鎵爜鐜荤拑锛歿}",lineFirst,lineGlassId);
                 }
             }
             Date endDate = new Date();
@@ -581,20 +613,26 @@
         String d04ToMES = plcParameterObject.getPlcParameter("D04ToMES").getValue();
         String mesD01Address = plcParameterObject.getPlcParameter("MESToD01").getAddress();
         String mesD04Address = plcParameterObject.getPlcParameter("MESToD04").getAddress();
-        String d03ToMES = plcParameterObject.getPlcParameter("D03ToMES").getValue();
-        String d05ToMES = plcParameterObject.getPlcParameter("D05ToMES").getValue();
+//        String d03ToMES = plcParameterObject.getPlcParameter("D03ToMES").getValue();
+//        String d05ToMES = plcParameterObject.getPlcParameter("D05ToMES").getValue();
+        String d03ToMES = plcParameterObject.getPlcParameter("D03Request").getValue();
+        String d05ToMES = plcParameterObject.getPlcParameter("D05Request").getValue();
         String mesD03Address = plcParameterObject.getPlcParameter("MESToD03").getAddress();
         String mesD05Address = plcParameterObject.getPlcParameter("MESToD05").getAddress();
         if (!REQUEST_WORD.equals(d01ToMES)) {
+            log.info("鍦板潃锛歿}鍐欏叆0",mesD01Address);
             S7object.getinstance().plccontrol.writeWord(mesD01Address, 0);
         }
         if (!REQUEST_WORD.equals(d04ToMES)) {
+            log.info("鍦板潃锛歿}鍐欏叆0",mesD04Address);
             S7object.getinstance().plccontrol.writeWord(mesD04Address, 0);
         }
         if (!REQUEST_WORD.equals(d03ToMES)) {
+            log.info("鍦板潃锛歿}鍐欏叆0",mesD03Address);
             S7object.getinstance().plccontrol.writeWord(mesD03Address, 0);
         }
         if (!REQUEST_WORD.equals(d05ToMES)) {
+            log.info("鍦板潃锛歿}鍐欏叆0",mesD05Address);
             S7object.getinstance().plccontrol.writeWord(mesD05Address, 0);
         }
     }
@@ -605,6 +643,8 @@
     @Scheduled(fixedDelay = 300)
     public void feedStatusUpdate() {
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+        String mesD03Address = plcParameterObject.getPlcParameter("MESToD03").getAddress();
+        String mesD05Address = plcParameterObject.getPlcParameter("MESToD05").getAddress();
         List<String> glassIds1 = new ArrayList<>();
         List<String> glassIds2 = new ArrayList<>();
         for (int i = 1; i <= 6; i++) {
@@ -633,12 +673,15 @@
                     .filter(glassIds1::contains)
                     .distinct()
                     .collect(Collectors.toList());
-            bigStorageCageFeedTaskService.update(
-                    new LambdaUpdateWrapper<BigStorageCageFeedTask>()
-                            .in(BigStorageCageFeedTask::getGlassId, matchingIds1)
-                            .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
-                            .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
-            );
+            log.info("D3id{},鍖归厤id:{}",glassIds1,matchingIds1);
+            if(CollectionUtils.isNotEmpty(matchingIds1)){
+                bigStorageCageFeedTaskService.update(
+                        new LambdaUpdateWrapper<BigStorageCageFeedTask>()
+                                .in(BigStorageCageFeedTask::getGlassId, matchingIds1)
+                                .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+                                .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
+                );
+            }
         }
         if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks2) && CollectionUtils.isNotEmpty(glassIds2)) {
             List<String> matchingIds2 = bigStorageCageFeedTasks2.stream()
@@ -646,14 +689,19 @@
                     .filter(glassIds2::contains)
                     .distinct()
                     .collect(Collectors.toList());
-            bigStorageCageFeedTaskService.update(
-                    new LambdaUpdateWrapper<BigStorageCageFeedTask>()
-                            .in(BigStorageCageFeedTask::getGlassId, matchingIds2)
-                            .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
-                            .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
-            );
+            log.info("D5id{},鍖归厤id:{}",glassIds2,matchingIds2);
+            if(CollectionUtils.isNotEmpty(matchingIds2)){
+                bigStorageCageFeedTaskService.update(
+                        new LambdaUpdateWrapper<BigStorageCageFeedTask>()
+                                .in(BigStorageCageFeedTask::getGlassId, matchingIds2)
+                                .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+                                .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
+                );
+            }
         }
         if (CollectionUtils.isEmpty(glassIds1)) {
+            S7object.getinstance().plccontrol.writeWord(mesD03Address, 0);
+            log.info("{}绾夸慨鏀圭幓鐠冪姸鎬佷负3",Const.A09_OUT_TARGET_POSITION);
             bigStorageCageFeedTaskService.update(
                     new LambdaUpdateWrapper<BigStorageCageFeedTask>()
                             .eq(BigStorageCageFeedTask::getLine, Const.A09_OUT_TARGET_POSITION)
@@ -664,6 +712,8 @@
             );
         }
         if (CollectionUtils.isEmpty(glassIds2)) {
+            S7object.getinstance().plccontrol.writeWord(mesD05Address, 0);
+            log.info("{}绾夸慨鏀圭幓鐠冪姸鎬佷负3",Const.A10_OUT_TARGET_POSITION);
             bigStorageCageFeedTaskService.update(
                     new LambdaUpdateWrapper<BigStorageCageFeedTask>()
                             .eq(BigStorageCageFeedTask::getLine, Const.A10_OUT_TARGET_POSITION)
@@ -903,23 +953,54 @@
         String mesD03Address = plcMesObject.getPlcParameter("MESToD03").getAddress();
         String mesD05Address = plcMesObject.getPlcParameter("MESToD05").getAddress();
         String outLine = line.equals(Const.A09_OUT_TARGET_POSITION) ? mesD03Address : mesD05Address;
+        List<String> returnData = new ArrayList<>();
+
         for (int i = 1; i <= taskList.size(); i++) {
             s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine());
             s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot());
+            returnData.add(taskList.get(i - 1).getGlassId());
             log.info("鍚憄lc鍙戦�佺{}鐗囩幓鐠冨凡瀹屾垚,璧峰浣嶇疆鏄瘂}锛岀洰鏍囦綅缃槸", i, taskList.get(i - 1).getLine(), taskList.get(i - 1).getTargetSlot());
         }
-        int returnData = 1;
+//        int returnData = 1;
         int count = 1;
-        while (returnData != 0) {
+
+
+        while (CollectionUtils.isNotEmpty(returnData)) {
+            List<String> glassIds1 = new ArrayList<>();
+            List<String> glassIds2 = new ArrayList<>();
             s7control.writeWord(outLine, 2);
+            for (int i = 1; i <= 6; i++) {
+                String line1GlassId = plcMesObject.getPlcParameter("D03ID" + i).getValue();
+                if (StringUtils.isNotEmpty(line1GlassId)) {
+                    glassIds1.add(line1GlassId);
+                }
+                String line2GlassId = plcMesObject.getPlcParameter("D05ID" + i).getValue();
+                if (StringUtils.isNotEmpty(line2GlassId)) {
+                    glassIds2.add(line2GlassId);
+                }
+            }
             if (line.equals(Const.A09_OUT_TARGET_POSITION)) {
-                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D03ToMES").getValue());
+//                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D03ToMES").getValue());
+                returnData = glassIds1;
             } else {
-                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D05ToMES").getValue());
+//                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D05ToMES").getValue());
+                returnData = glassIds2;
             }
 //            returnData = s7control.readWord(outLine, 1).get(0);
-            log.info("宸插悜plc绗瑊}娆″彂閫佽繘鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, outLine, 2);
+            log.info("宸插悜plc绗瑊}娆″彂閫佽繘鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{},璇诲埌鐨勮姹備负{}", count++, outLine, 2,returnData);
         }
+//        while (returnData != 0) {
+//            s7control.writeWord(outLine, 2);
+//            if (line.equals(Const.A09_OUT_TARGET_POSITION)) {
+////                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D03ToMES").getValue());
+//                returnData = s7control.readWord(plcMesObject.getPlcParameter("D03Request").getAddress(), 1).get(0);
+//            } else {
+////                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D05ToMES").getValue());
+//                returnData = s7control.readWord(plcMesObject.getPlcParameter("D05Request").getAddress(), 1).get(0);
+//            }
+////            returnData = s7control.readWord(outLine, 1).get(0);
+//            log.info("宸插悜plc绗瑊}娆″彂閫佽繘鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{},璇诲埌鐨勮姹備负{}", count++, outLine, 2,returnData);
+//        }
     }
 
     /**
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/opccallback/BigStorageStartCallback.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/opccallback/BigStorageStartCallback.java
new file mode 100644
index 0000000..9c3c9d4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/opccallback/BigStorageStartCallback.java
@@ -0,0 +1,824 @@
+package com.mes.job.opccallback;
+
+import cn.hutool.core.lang.Assert;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.runner.subscription.SubscriptionCallback;
+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.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
+import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
+import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
+import com.mes.common.S7object;
+import com.mes.common.config.Const;
+import com.mes.damage.entity.Damage;
+import com.mes.damage.service.DamageService;
+import com.mes.device.PlcParameterObject;
+import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
+import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
+import com.mes.tools.S7control;
+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.Value;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/28 21:22
+ * @Description:
+ */
+@Service
+@Slf4j
+public class BigStorageStartCallback implements SubscriptionCallback {
+
+
+    @Resource
+    private BigStorageCageService bigStorageCageService;
+    @Resource
+    private BigStorageCageDetailsService bigStorageCageDetailsService;
+    @Resource
+    private GlassInfoService glassInfoService;
+    @Resource
+    private BigStorageCageFeedTaskService bigStorageCageFeedTaskService;
+    @Resource
+    private BigStorageCageOutTaskService bigStorageCageOutTaskService;
+    @Resource
+    private EdgGlassTaskInfoService edgGlassTaskInfoService;
+    @Resource
+    private TemperingGlassInfoService temperingGlassInfoService;
+    @Resource
+    private DamageService damageService;
+
+    @Resource
+    private RedisUtil redisUtil;
+
+    private static final String REQUEST_WORD = "1";
+
+    @Value("${mes.sequence.order}")
+    private boolean sequenceOrder;
+
+    @Value("${mes.carWidth}")
+    private Integer carWidth;
+
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
+
+    @Value("${mes.inCarMaxSize}")
+    private Integer inCarMaxSize;
+
+    @Value("${mes.outCarMaxSize}")
+    private Integer outCarMaxSize;
+
+    @Value("${mes.glassGap}")
+    private Integer glassGap;
+
+    @Value("${mes.xMaxSize}")
+    private Integer xMaxSize;
+
+
+    private String d01GlassId = "";
+    private String d04GlassId = "";
+
+    @Override
+    public void onSubscribe(String identifier, Object value) {
+        //todo:鑾峰彇浠诲姟鍒楄〃
+        String tableName = "";
+        //todo:鎸夌収琛ㄦ槑鑾峰彇浼嶄俊鎭�
+        List<BigStorageCageFeedTask> tasks = new ArrayList<>();
+        if (CollectionUtils.isEmpty(tasks)) {
+            log.info("鍗ц浆绔嬩笂娌℃湁鐜荤拑");
+            //todo 涓庡崸杞珛浜や簰锛屽皢璇锋眰瀛楀ぇ杞﹁姹傚彉涓�0锛岀‘淇濊闃呬换鍔″彲鍐嶆鎵ц
+            return;
+        }
+        List<String> glassIds = tasks.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList());
+        List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIds));
+        computeIsTemperingTargetByLine(glassInfos, tasks);
+    }
+
+
+    @Scheduled(fixedDelay = 10000)
+    public void plcToHomeEdgOutTask() {
+        String mesToPLCAddress = "";
+        List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW));
+        if (CollectionUtils.isNotEmpty(outingList)) {
+            log.info("鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�");
+            return;
+        }
+        if (redisUtil.getCacheObject("temperingSwitch")) {
+            //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑
+            List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>()
+                    .selectAll(TemperingGlassInfo.class)
+                    .leftJoin(BigStorageCageOutTask.class, BigStorageCageOutTask::getGlassId, TemperingGlassInfo::getGlassId)
+                    .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
+                    .isNull(BigStorageCageOutTask::getGlassId)
+                    .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
+            if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
+                log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
+                computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                return;
+            }
+            //鏄惁鏈変汉宸ヤ笅鐗囦换鍔�   鏈夌洿鎺ュ嚭
+//            List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+//                    .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth));
+            List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                    .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL)
+                    .orderByAsc(BigStorageCageDetails::getSlot)
+                    .orderByDesc(BigStorageCageDetails::getId));
+            if (CollectionUtils.isNotEmpty(artificialList)) {
+                computeOutMoreGlassInfo(artificialList, Boolean.FALSE, mesToPLCAddress);
+                return;
+            }
+            //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+            List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll();
+            if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) {
+                //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑
+                //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
+                for (TemperingLayoutDTO item : temperingLayoutDTOList) {
+                    if (redisUtil.getCacheObject("temperingengineerId").equals(item.getEngineerId())) {
+                        List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.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)) {
+                            temperingGlassInfoService.saveBatch(temperingGlassInfos);
+                            computeOutMoreGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                            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;
+                    if (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)) {
+                            List<BigStorageCageOutTask> outTasks = new ArrayList<>();
+                            int serialNumber = 1;
+                            for (BigStorageCageDetails item : list) {
+                                outTasks.add(new BigStorageCageOutTask(item.getGlassId(), first.getSlot(), second.getSlot(),
+                                        item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW, new Date()));
+                            }
+                            //鏂板璋冨害浠诲姟
+                            bigStorageCageOutTaskService.saveBatch(outTasks);
+                            //鏇存柊鐞嗙墖绗艰鎯呰〃璋冨害鐨勫悗鐨勭幓鐠冧綅缃俊鎭細鐢熸垚浠诲姟鍚庡厛灏嗙幓鐠冩牸瀛愪綅缃繘琛岃皟鏁达紝鐜荤拑鐘舵�佹敼涓鸿皟搴︿腑锛屾柊澧炶皟搴﹀畬鎴愪换鍔★紝澶勭悊璋冨害瀹屾垚鍚庣幓鐠冪姸鎬佹敼涓�100.
+                            List<String> glassList = list.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList());
+                            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING)
+                                    .set(BigStorageCageBaseInfo::getSlot, second.getSlot()).in(BigStorageCageDetails::getGlassId, glassList));
+                            //涓ゆ鏇存柊绗煎瓙鐨勫墿浣欏昂瀵革細绗竴娆¢槻姝㈡湁鐜荤拑缁х画杩涜皟搴﹀悗鐨勭瀛愶紝绗簩娆℃洿鏂帮細璁$畻鏍煎瓙鐨勫疄闄呭昂瀵�
+                            // 浠呮洿鏂拌皟搴﹀悗鐨勬牸瀛愪俊鎭細璧峰鏍煎瓙瀹屾垚鍚庢洿鏂帮細闃叉璋冨害鍑虹墖杩囩▼涓湁鏂扮幓鐠冭繘鍏ワ紝
+//                            todo:涓存椂瑙e喅鎶ラ敊
+//                            updateSlotRemainBySlots(Arrays.asList(second.getSlot()));
+                            break loop;
+                        }
+                    }
+                }
+            }
+//            //鍚憄lc鍐欏叆纭瀛�
+//            int returnData = 0;
+//            int count = 1;
+//            while (returnData == 0) {
+//                log.info("宸插悜plc绗瑊}娆¢�佸崗璁�", count);
+//                S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+//                returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+//                log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+//            }
+            return;
+        }
+    }
+
+
+    /**
+     * 纭瀛楁竻绌�
+     */
+    @Scheduled(fixedDelay = 300)
+    public void confirmClear() {
+        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+        String d01ToMES = plcParameterObject.getPlcParameter("D01ToMES").getValue();
+        String d04ToMES = plcParameterObject.getPlcParameter("D04ToMES").getValue();
+        String mesD01Address = plcParameterObject.getPlcParameter("MESToD01").getAddress();
+        String mesD04Address = plcParameterObject.getPlcParameter("MESToD04").getAddress();
+        String d03ToMES = plcParameterObject.getPlcParameter("D03ToMES").getValue();
+        String d05ToMES = plcParameterObject.getPlcParameter("D05ToMES").getValue();
+        String mesD03Address = plcParameterObject.getPlcParameter("MESToD03").getAddress();
+        String mesD05Address = plcParameterObject.getPlcParameter("MESToD05").getAddress();
+        if (!REQUEST_WORD.equals(d01ToMES)) {
+            S7object.getinstance().plccontrol.writeWord(mesD01Address, 0);
+        }
+        if (!REQUEST_WORD.equals(d04ToMES)) {
+            S7object.getinstance().plccontrol.writeWord(mesD04Address, 0);
+        }
+        if (!REQUEST_WORD.equals(d03ToMES)) {
+            S7object.getinstance().plccontrol.writeWord(mesD03Address, 0);
+        }
+        if (!REQUEST_WORD.equals(d05ToMES)) {
+            S7object.getinstance().plccontrol.writeWord(mesD05Address, 0);
+        }
+    }
+
+    /**
+     * 杩涚墖鐘舵�佷慨鏀�
+     */
+    @Scheduled(fixedDelay = 300)
+    public void feedStatusUpdate() {
+        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+        List<String> glassIds1 = new ArrayList<>();
+        List<String> glassIds2 = new ArrayList<>();
+        for (int i = 1; i <= 6; i++) {
+            String line1GlassId = plcParameterObject.getPlcParameter("D03ID" + i).getValue();
+            if (StringUtils.isNotEmpty(line1GlassId)) {
+                glassIds1.add(line1GlassId);
+            }
+            String line2GlassId = plcParameterObject.getPlcParameter("D05ID" + i).getValue();
+            if (StringUtils.isNotEmpty(line2GlassId)) {
+                glassIds2.add(line2GlassId);
+            }
+        }
+        List<BigStorageCageFeedTask> bigStorageCageFeedTasks1 = bigStorageCageFeedTaskService.list(
+                new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                        .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_NEW)
+                        .eq(BigStorageCageFeedTask::getLine, Const.A09_OUT_TARGET_POSITION)
+        );
+        List<BigStorageCageFeedTask> bigStorageCageFeedTasks2 = bigStorageCageFeedTaskService.list(
+                new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                        .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_NEW)
+                        .eq(BigStorageCageFeedTask::getLine, Const.A10_OUT_TARGET_POSITION)
+        );
+        if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks1) && CollectionUtils.isNotEmpty(glassIds1)) {
+            List<String> matchingIds1 = bigStorageCageFeedTasks1.stream()
+                    .map(BigStorageCageFeedTask::getGlassId)
+                    .filter(glassIds1::contains)
+                    .distinct()
+                    .collect(Collectors.toList());
+            bigStorageCageFeedTaskService.update(
+                    new LambdaUpdateWrapper<BigStorageCageFeedTask>()
+                            .in(BigStorageCageFeedTask::getGlassId, matchingIds1)
+                            .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+                            .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
+            );
+        }
+        if (CollectionUtils.isNotEmpty(bigStorageCageFeedTasks2) && CollectionUtils.isNotEmpty(glassIds2)) {
+            List<String> matchingIds2 = bigStorageCageFeedTasks2.stream()
+                    .map(BigStorageCageFeedTask::getGlassId)
+                    .filter(glassIds2::contains)
+                    .distinct()
+                    .collect(Collectors.toList());
+            bigStorageCageFeedTaskService.update(
+                    new LambdaUpdateWrapper<BigStorageCageFeedTask>()
+                            .in(BigStorageCageFeedTask::getGlassId, matchingIds2)
+                            .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+                            .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
+            );
+        }
+        if (CollectionUtils.isEmpty(glassIds1)) {
+            bigStorageCageFeedTaskService.update(
+                    new LambdaUpdateWrapper<BigStorageCageFeedTask>()
+                            .eq(BigStorageCageFeedTask::getLine, Const.A09_OUT_TARGET_POSITION)
+                            .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
+                            .gt(BigStorageCageFeedTask::getTargetSlot, 0)
+                            .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+                            .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_CAR)
+            );
+        }
+        if (CollectionUtils.isEmpty(glassIds2)) {
+            bigStorageCageFeedTaskService.update(
+                    new LambdaUpdateWrapper<BigStorageCageFeedTask>()
+                            .eq(BigStorageCageFeedTask::getLine, Const.A10_OUT_TARGET_POSITION)
+                            .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP)
+                            .gt(BigStorageCageFeedTask::getTargetSlot, 0)
+                            .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+                            .set(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_CAR)
+            );
+        }
+    }
+
+    /**
+     * 鎸夌収鐜荤拑id鍒ゆ柇鐜荤拑鐘舵�佸強鍗ц浆绔嬫槸鍚﹀彲鐩存帴鍚姩
+     */
+    public Boolean judgeGlassTypeStatus(String glassId, Integer line, String mesAddress) {
+        //鍒ゆ柇姝ょ幓鐠冩槸鍦ㄧ鍐呮垨宸茬敓鎴愯繘鐗囦换鍔�
+        BigStorageCageFeedTask bigStorageCageFeedTask = bigStorageCageFeedTaskService.getOne(
+                new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                        .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+                        .eq(BigStorageCageFeedTask::getGlassId, glassId)
+        );
+        BigStorageCageDetails bigStorageCageDetails = bigStorageCageDetailsService.getOne(
+                new LambdaQueryWrapper<BigStorageCageDetails>()
+                        .eq(BigStorageCageDetails::getGlassId, glassId)
+                        .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+        );
+        if (bigStorageCageFeedTask != null || bigStorageCageDetails != null) {
+            log.info("姝ょ幓鐠冨瓨浠诲姟鎴栧凡鍦ㄧ鍐�");
+            return Boolean.TRUE;
+        }
+        //1銆佽幏鍙栦换鍔¤〃涓浉閭荤幓鐠�
+        List<EdgGlassTaskInfo> edgGlassTaskInfoList;
+        edgGlassTaskInfoList = edgGlassTaskInfoService.list(new LambdaQueryWrapper<EdgGlassTaskInfo>()
+                .eq(EdgGlassTaskInfo::getLine, line)
+                .apply("time >= (select time from edg_glass_task_info where line='" + line + "' and glass_id = '" + glassId + "' and deleted = 0)")
+                .orderByAsc(EdgGlassTaskInfo::getTime));
+        if (edgGlassTaskInfoList.size() == 0) {
+            edgGlassTaskInfoList = edgGlassTaskInfoService.list(new QueryWrapper<EdgGlassTaskInfo>()
+                    .select("Top 1 *")
+                    .eq("glass_id", glassId)
+            );
+            log.info("鍦ㄥ昂瀵歌〃涓幏鍙栫幓鐠冧俊鎭瘂}", edgGlassTaskInfoList);
+            if (edgGlassTaskInfoList.size() == 0) {
+                GlassInfo glassInfo = glassInfoService.getOne(
+                        new LambdaQueryWrapper<GlassInfo>()
+                                .eq(GlassInfo::getGlassId, glassId)
+                );
+                EdgGlassTaskInfo edgGlassTaskInfo = new EdgGlassTaskInfo();
+                BeanUtils.copyProperties(glassInfo, edgGlassTaskInfo);
+                edgGlassTaskInfo.setWidth((int) glassInfo.getWidth());
+                edgGlassTaskInfo.setHeight((int) glassInfo.getHeight());
+                edgGlassTaskInfoList.add(edgGlassTaskInfo);
+                log.info("鍦ㄧ幓鐠冧俊鎭〃涓幏鍙栫幓鐠冧俊鎭瘂}", edgGlassTaskInfoList);
+            }
+        }
+        Assert.isFalse(CollectionUtils.isEmpty(edgGlassTaskInfoList), "璇嗗埆鐜荤拑淇℃伅鏈嚭鐜板湪灏哄琛ㄤ腑,鑾峰彇鐩搁偦涓ゅ潡鐜荤拑澶辫触");
+        //2銆佽幏鍙栧崸杞珛鍓╀綑瀹藉害
+        BigStorageDTO sitToUpRemainWidth = bigStorageCageFeedTaskService.querySitToUpRemainWidth(line);
+        Integer remainWidth;
+        Integer glassCount;
+        if (0 == sitToUpRemainWidth.getGlassCount()) {
+            remainWidth = carWidth;
+            glassCount = 0;
+        } else {
+            remainWidth = sitToUpRemainWidth.getWidth();
+            glassCount = sitToUpRemainWidth.getGlassCount();
+        }
+
+        Boolean flag = Boolean.TRUE;
+        //2銆佽幏鍙栧崸杞珛
+        Integer widthFirst = Math.max(edgGlassTaskInfoList.get(0).getWidth() / 10, edgGlassTaskInfoList.get(0).getHeight() / 10);
+        Integer heightFirst = Math.min(edgGlassTaskInfoList.get(0).getWidth() / 10, edgGlassTaskInfoList.get(0).getHeight() / 10);
+        if (edgGlassTaskInfoList.size() == 1) {
+            if (remainWidth >= widthFirst) {
+                if (glassCount < inCarMaxSize) {
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst, heightFirst);
+                } else {
+                    if (glassCount < inCarMaxSize + 1) {
+                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightFirst);
+                    } else {
+                        return Boolean.FALSE;
+                    }
+                }
+            } else {
+                flag = Boolean.FALSE;
+            }
+        } else {
+            Integer widthSecond = Math.max(edgGlassTaskInfoList.get(1).getWidth() / 10, edgGlassTaskInfoList.get(1).getHeight() / 10);
+            Integer heightSecond = Math.min(edgGlassTaskInfoList.get(1).getWidth() / 10, edgGlassTaskInfoList.get(1).getHeight() / 10);
+            if (remainWidth >= widthFirst) {
+                if (remainWidth - widthFirst - glassGap >= widthSecond) {
+                    if (glassCount < inCarMaxSize) {
+                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst, heightFirst);
+                    } else {
+                        if (glassCount < inCarMaxSize + 1) {
+                            addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightFirst);
+                        } else {
+                            return Boolean.FALSE;
+                        }
+                    }
+                } else {
+                    if (glassCount < inCarMaxSize + 1) {
+                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightFirst);
+                    } else {
+                        return Boolean.FALSE;
+                    }
+                }
+            } else {
+                flag = Boolean.FALSE;
+            }
+        }
+        //鍚憄lc鍙戦�佽繘鐗囩‘璁�
+        if (flag) {
+            //鍚憄lc鍐欏叆纭瀛�
+            PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+            int returnData = 1;
+            int count = 1;
+            while (returnData != 0) {
+                S7object.getinstance().plccontrol.writeWord(mesAddress, 1);
+
+                if (Const.A10_OUT_TARGET_POSITION.equals(line)) {
+                    returnData = Integer.parseInt(plcParameterObject.getPlcParameter("D04ToMES").getValue());
+                } else {
+                    returnData = Integer.parseInt(plcParameterObject.getPlcParameter("D01ToMES").getValue());
+                }
+//                returnData = S7object.getinstance().plccontrol.readWord(mesAddress, 1).get(0);
+                log.info("杩涘崸杞珛绗瑊}娆″彂閫佺‘璁ゅ瓧瀹屾垚锛屽湴鍧�涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesAddress, 1);
+            }
+        }
+        //璁板綍鏃犳硶鏀句笅鐜荤拑锛屽悗缁垽鏂惎鍔�
+        return flag;
+    }
+
+    /**
+     * 娣诲姞浠诲姟淇℃伅
+     */
+    private Boolean addFeedTask(String glassId, Integer line, Integer taskType, Integer width, Integer height) {
+        BigStorageCageFeedTask bigStorageCageFeedTask = new BigStorageCageFeedTask();
+        bigStorageCageFeedTask.setGlassId(glassId);
+        bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_IN_NEW);
+        bigStorageCageFeedTask.setLine(line);
+        bigStorageCageFeedTask.setTaskType(taskType);
+        bigStorageCageFeedTask.setWidth(width);
+        bigStorageCageFeedTask.setHeight(height);
+        bigStorageCageFeedTask.setCreateTime(new Date());
+        //鍒犻櫎鐞嗙墖绗艰〃鎷胯蛋/鐮存崯鏁版嵁鏁版嵁
+        damageService.deleteByGlassId(glassId);
+        Damage damage = new Damage();
+        damage.setGlassId(glassId);
+        damage.setWorkingProcedure("纾ㄨ竟");
+        damage.setLine(line);
+        damage.setType(1);
+        damage.setRemark("杩涘ぇ鐞嗙墖");
+        damageService.insertDamage(damage);
+        return bigStorageCageFeedTaskService.save(bigStorageCageFeedTask);
+    }
+
+    /**
+     * 鑾峰彇闇�瑕佸惎鍔ㄧ殑绾胯矾锛氫袱鏉$嚎閮藉彲鍚姩 鑾峰彇绗竴鐗囩幓鐠冪増鍥緄d鏈�灏� 鐗堝簭鏈�澶х殑绾胯矾
+     *
+     * @return 闇�瑕佸惎鍔ㄧ殑绾胯矾
+     */
+    public Integer getStartLine() {
+        List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                .inSql(BigStorageCageFeedTask::getId, "select min(id) from big_storage_cage_feed_task where task_state = 2" +
+                        "and (target_slot = 0 or target_slot is null) group by line"));
+        Assert.isFalse(CollectionUtils.isEmpty(taskList), "鍗ц浆绔嬩袱鏉$嚎閮芥病鏈夌幓鐠冭繘鐗囦换鍔�");
+        Map<String, Integer> taskMap = taskList.stream().collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId,
+                BigStorageCageFeedTask::getLine));
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
+                .in(GlassInfo::getGlassId, taskMap.keySet())
+                .orderByAsc(GlassInfo::getTemperingLayoutId)
+                .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence)
+                .last("limit 1"));
+        return taskMap.get(glassInfo.getGlassId());
+    }
+
+    /**
+     * 璁$畻浠诲姟琛ㄨ繘鐗囩嚎璺殑鐩爣鏍煎瓙锛屽苟鍚姩浠诲姟
+     */
+    public boolean computeTargetByLine(Integer line) {
+        //1銆佽幏鍙栦换鍔¤〃涓殑鎵�鏈夌幓鐠冿紙鎸囧畾绾胯矾涓斿凡缁忚繘鍗ц浆绔嬪畬鎴愶級
+        List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                .eq(BigStorageCageFeedTask::getLine, line)
+                .and(e -> e.isNull(BigStorageCageFeedTask::getTargetSlot).or().eq(BigStorageCageFeedTask::getTargetSlot, Const.OUT_TARGET_POSITION_ZERO))
+                .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP_ALL)
+                .orderByAsc(BigStorageCageFeedTask::getId));
+        //2銆佸幓绗煎瓙鍐呮煡鎵炬槸鍚﹀彲浠ョ户缁瓨鏀剧殑绗煎瓙
+        List<String> glassIds = taskList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList());
+        List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIds));
+        return computeIsTemperingTargetByLine(glassInfos, taskList);
+    }
+
+    /**
+     * 鏄惁閽㈠寲鐜荤拑杩涚鐩爣浣嶇疆
+     *
+     * @param glassInfos 褰撴潯绾垮崸杞珛鎵�鏈夌幓鐠�
+     * @param taskList   褰撴潯绾垮崸杞珛鎵�鏈変换鍔�
+     */
+    private boolean computeIsTemperingTargetByLine(List<GlassInfo> glassInfos, List<BigStorageCageFeedTask> taskList) {
+        //1銆佸皢鐜荤拑淇℃伅闆嗗悎杞负glassid涓簁ey鐨刴ap
+        Map<String, GlassInfo> glassInfoMap = glassInfos.stream()
+                .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p));
+        for (BigStorageCageFeedTask e : taskList) {
+            GlassInfo info = glassInfoMap.get(e.getGlassId());
+            if (info == null) {
+                continue;
+            }
+            BigStorageCageDetails cageDetails = new BigStorageCageDetails();
+            BeanUtils.copyProperties(info, cageDetails);
+            //todo:2銆佽幏鍙栫洰鏍囨牸瀛愪俊鎭�
+            BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info);
+            //3銆佷复鏃舵洿鏂版牸瀛愮殑鍓╀綑灏哄锛氶槻姝㈢浉閭荤幓鐠冭繘鍚屼竴鏍煎瓙閫犳垚鍓╀綑灏哄涓嶈冻锛岀幓鐠冭秺鐣岀殑鎯呭喌锛屼换鍔″畬鎴愬悗鍐嶆鏇存柊澶х悊鐗囩琛ㄥ墿浣欏搴︼紙鎸夌収绗煎唴鐜荤拑鏁伴噺鏇存柊澶х悊鐗囩鍓╀綑灏哄锛�
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap)
+                    .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
+            //4銆佹洿鏂拌繘鐗囦换鍔¤〃锛岀洰鏍囨牸瀛愬強鐘舵�侊紙鐘舵�佹敼涓�2 鐢垫皵鎵埌鑷澶勭悊锛�  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
+            e.setTargetSlot(bigStorageDTO.getSlot());
+            bigStorageCageFeedTaskService.updateById(e);
+
+            //5銆佸皢杩涚墖淇℃伅瀛樺叆澶х悊鐗囩璇︽儏琛�
+            cageDetails.setSlot(bigStorageDTO.getSlot());
+            cageDetails.setState(Const.GLASS_STATE_NEW);
+            cageDetails.setDeviceId(bigStorageDTO.getDeviceId());
+            cageDetails.setGap(glassGap);
+            bigStorageCageDetailsService.save(cageDetails);
+
+        }
+        return Boolean.TRUE;
+    }
+
+    private void sendTaskListToPLC(List<BigStorageCageFeedTask> taskList, Integer line) {
+        log.info("閫佺墖浠诲姟鍙戦�佽繘鐗囩幓鐠冧俊鎭�");
+        S7control s7control = S7object.getinstance().plccontrol;
+        PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject;
+        String mesD03Address = plcMesObject.getPlcParameter("MESToD03").getAddress();
+        String mesD05Address = plcMesObject.getPlcParameter("MESToD05").getAddress();
+        String outLine = line.equals(Const.A09_OUT_TARGET_POSITION) ? mesD03Address : mesD05Address;
+        for (int i = 1; i <= taskList.size(); i++) {
+            s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine());
+            s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot());
+            log.info("鍚憄lc鍙戦�佺{}鐗囩幓鐠冨凡瀹屾垚,璧峰浣嶇疆鏄瘂}锛岀洰鏍囦綅缃槸", i, taskList.get(i - 1).getLine(), taskList.get(i - 1).getTargetSlot());
+        }
+        int returnData = 1;
+        int count = 1;
+        while (returnData != 0) {
+            s7control.writeWord(outLine, 2);
+            if (line.equals(Const.A09_OUT_TARGET_POSITION)) {
+                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D03ToMES").getValue());
+            } else {
+                returnData = Integer.parseInt(plcMesObject.getPlcParameter("D05ToMES").getValue());
+            }
+//            returnData = s7control.readWord(outLine, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佽繘鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, outLine, 2);
+        }
+    }
+
+    /**
+     * 鍑虹墖涓�娆′粎鐢熸垚涓�杞︾幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
+    private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
+        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+        //鎵撹溅鍓╀綑灏哄
+        Integer remainWidth = carWidth;
+        int maxX = 0;
+        for (T e : list) {
+            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || Math.max((int) e.getWidth(), (int) e.getHeight()) > remainWidth) {
+                break;
+            }
+            remainWidth = remainWidth - Math.max((int) e.getWidth(), (int) e.getHeight()) - glassGap;
+            if (isTempering) {
+                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+                if (maxX + minLength <= xMaxSize) {
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1, new Date()));
+                    maxX = Math.max(maxX, e.getXCoordinate());
+                } else {
+                    break;
+                }
+
+            } else {
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                        e.getWidth() * 10, e.getHeight(), 0, 0, 1, new Date()));
+            }
+        }
+        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
+                .in(BigStorageCageDetails::getGlassId, glassIds));
+        int returnData = 0;
+        int count = 1;
+        while (returnData == 0) {
+            S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+            returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+        }
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 鍑虹墖涓�娆$敓鎴愪竴鐐夌幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
+    public <T extends BigStorageCageBaseInfo> Boolean computeOutMoreGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
+        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+        //鎵撹溅鍓╀綑灏哄
+        Integer remainWidth = carWidth;
+        int trainNumber = 1;
+        int serialNumber = 1;
+        int maxX = 0;
+        for (T e : list) {
+            int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
+            if (serialNumber > outCarMaxSize || maxLength > remainWidth) {
+                remainWidth = carWidth;
+                trainNumber = trainNumber + 1;
+                serialNumber = 1;
+                maxX = 0;
+            }
+            remainWidth = remainWidth - maxLength - glassGap;
+            if (isTempering) {
+                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+                if (maxX + minLength <= xMaxSize) {
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1, new Date()));
+                    maxX = Math.max(maxX, e.getXCoordinate());
+                } else {
+                    remainWidth = carWidth - maxLength - glassGap;
+                    trainNumber = trainNumber + 1;
+                    serialNumber = 1;
+                    maxX = e.getXCoordinate();
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date()));
+                }
+            } else {
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                        e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1, new Date()));
+            }
+        }
+        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+        for (BigStorageCageOutTask bigStorageCageOutTask : bigStorageCageOutTaskList
+        ) {
+            bigStorageCageOutTaskService.save(bigStorageCageOutTask);
+        }
+//        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
+                .in(BigStorageCageDetails::getGlassId, glassIds)
+                .ne(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT));
+
+        return Boolean.TRUE;
+    }
+
+    private BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) {
+
+        MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
+                .selectAll(BigStorageCage.class)
+                .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
+                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)
+                .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);
+        return null;
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void querySizeByEngineerTask() {
+        log.info("鏌ヨ缁撴灉锛歿}", querySizeByEngineer("P24072402", 1, 10, 8));
+        log.info("鏌ヨ缁撴灉锛歿}", querySizeByEngineer("P24072402", 1, 5, 8));
+
+    }
+
+    public BigStorageDTO querySizeByEngineer(String engineerId, int temperingLayoutId, int temperingFeedSequence, double thickness) {
+        BigStorageDTO bigStorageDTO = null;
+        BigStorageCage bigStorageCage = null;
+        //鑾峰彇绗煎唴褰撳墠鐗堝浘姣忎釜鏍煎瓙宸叉湁鐜荤拑鐨勬渶灏忕増搴� 鑾峰彇绗煎唴褰撳墠鐗堝浘鐨勬墍鏈夌幓鐠冧俊鎭�
+        List<BigStorageCageDetails> cageDetailsList = bigStorageCageDetailsService.list(new QueryWrapper<BigStorageCageDetails>()
+                .select("slot", "min(tempering_feed_sequence) as tempering_feed_sequence")
+                .eq("engineer_id", engineerId).eq("tempering_layout_id", temperingLayoutId)
+                .in("state", Const.GLASS_STATE_IN_ALL_ZERO).groupBy("slot").orderByAsc("min(tempering_feed_sequence)"));
+        if (CollectionUtils.isNotEmpty(cageDetailsList)) {
+            Integer minLength = cageDetailsList.stream().filter(e -> e.getTemperingFeedSequence() > temperingFeedSequence)
+                    .mapToInt(BigStorageCageDetails::getTemperingFeedSequence).min().orElse(1000);
+            List<GlassInfo> infoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>()
+                    .notInSql(GlassInfo::getGlassId, "select glass_id from damage where tempering_layout_id = " + temperingLayoutId + " and engineer_id = '" + engineerId + "'")
+                    .eq(GlassInfo::getTemperingLayoutId, temperingLayoutId).eq(GlassInfo::getEngineerId, engineerId).orderByAsc(GlassInfo::getTemperingFeedSequence));
+            int remainWidth = carWidth;
+            int trainNumber = 1;
+            int serialNumber = 0;
+            int min = 0;
+            int temp = infoList.get(0).getTemperingFeedSequence();
+            int slot = 0;
+            int resultTrainNumber = 0;
+            for (GlassInfo e : infoList) {
+                int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
+                if (serialNumber >= outCarMaxSize || maxLength > remainWidth || e.getTemperingFeedSequence() >= minLength) {
+                    if (resultTrainNumber != 0) {
+                        min = temp;
+                        break;
+                    }
+                    temp = e.getTemperingFeedSequence();
+                    remainWidth = carWidth;
+                    trainNumber = trainNumber + 1;
+                    serialNumber = 0;
+                }
+                if (temperingFeedSequence == e.getTemperingFeedSequence()) {
+                    resultTrainNumber = trainNumber;
+                }
+                remainWidth = remainWidth - maxLength - glassGap > 0 ? remainWidth - maxLength - glassGap : 0;
+                serialNumber += 1;
+                log.info("{},{},{}", trainNumber, remainWidth, serialNumber);
+                if (e.getTemperingFeedSequence().equals(infoList.get(infoList.size() - 1).getTemperingFeedSequence())) {
+                    min = temp;
+                }
+            }
+            for (BigStorageCageDetails item : cageDetailsList) {
+                if (min <= item.getTemperingFeedSequence() && item.getTemperingFeedSequence() < minLength) {
+                    slot = item.getSlot();
+                    bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                            .eq(BigStorageCage::getSlot, slot).eq(BigStorageCage::getEnableState, Const.SLOT_ON));
+                    break;
+                }
+            }
+        }
+
+        if (bigStorageCage != null) {
+            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)
+                .inSql(BigStorageCage::getDeviceId,
+                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + engineerId + "' and tempering_layout_id = " + temperingLayoutId)
+                .last("limit 1"));
+        if (null != bigStorageCage) {
+            log.info("鏍规嵁鐗堝浘id鎵惧埌绗煎瓙鍐呯殑鐩爣鏍煎瓙锛歿}", bigStorageCage.getSlot());
+            bigStorageDTO = new BigStorageDTO();
+            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+            return bigStorageDTO;
+
+        }
+
+        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨 鍥犱负瀛愭煡璇㈡帓搴忓涓籹ql鏃犲奖鍝嶏紝鎵�浠ュ厛鎵ц瀛愭煡璇㈣幏鍙栭『搴忥紝鐒跺悗涓�娆″幓鏌ヨ
+        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(thickness);
+        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("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板崰鐢ㄦ渶灏戞柟寮忚幏鍙栦俊鎭牸瀛愪负锛歿}", bigStorageCage.getSlot());
+                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/resources/JsonFile/PlcCacheVerticalGlass.json b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json
index 10e8e33..a8aed05 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/JsonFile/PlcCacheVerticalGlass.json
@@ -74,7 +74,7 @@
 		},
 		{
 			"codeId": "D05ID2",
-			"addressIndex": "328",
+			"addressIndex": "320",
 			"addressLenght": "32",
 			"ratio": "1",
 			"unit": ""
@@ -372,6 +372,20 @@
 			"addressLenght": "2",
 			"ratio": "1",
 			"unit": ""
+		},
+		{
+			"codeId": "D03Request",
+			"addressIndex": "898",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
+		},
+		{
+			"codeId": "D05Request",
+			"addressIndex": "900",
+			"addressLenght": "2",
+			"ratio": "1",
+			"unit": ""
 		}
 	]
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
index 92e73a1..288ac50 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageMapper.xml
@@ -11,7 +11,7 @@
         WHERE T.MAX_THICKNESS >= #{thickness}
           AND T.ENABLE_STATE = 1
         GROUP BY T.DEVICE_ID
-        ORDER BY T.MAX_THICKNESS,
+        ORDER BY min(T.MAX_THICKNESS),
                  COUNT(DISTINCT T1.ENGINEER_ID), COUNT(DISTINCT T1.TEMPERING_LAYOUT_ID),
                  COUNT(DISTINCT T1.SLOT)
     </select>
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
index af6a8b1..bd6e1b0 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -4,8 +4,10 @@
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.mes.bigstorage.entity.BigStorageCage;
+import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
@@ -198,6 +200,35 @@
         damageService.deleteByGlassId("P24081203|2|5");
     }
 
+    @Test
+    public void testttt(){
+        List<Integer> deviceUsedList = bigStorageCageService.queryFreeDeviceByUsed(6);
+        List<Integer> deviceUseds = deviceUsedList;
+        List<BigStorageCageDetails> engineerCount1 = bigStorageCageDetailsService.list(
+                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 = bigStorageCageDetailsService.list(
+                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;
+        }
+        log.info("zhi:{}",deviceUsedList);
+    }
+
 
     @Test
     public void ca(){
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
index 1c93ee7..18032eb 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/RawGlassTask.java
@@ -74,7 +74,7 @@
             if ("1".equals(taskWord.getValue() + "")) {
                 List<ReadWriteEntity> list = new ArrayList<>();
                 list.add(generateReadWriteEntity("A01-CC.dev.taskWord", 0));
-                list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 0));
+//                list.add(generateReadWriteEntity("A01-CC.dev.taskSending", 0));
                 list.add(generateReadWriteEntity("A01-CC.dev.startSlot", 0));
                 list.add(generateReadWriteEntity("A01-CC.dev.endSlot", 0));
                 miloService.writeToOpcWord(list);
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
new file mode 100644
index 0000000..8229684
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/OpcLoadGlassTask.java
@@ -0,0 +1,222 @@
+package com.mes.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.mes.common.config.Const;
+import com.mes.engineering.entity.Engineering;
+import com.mes.engineering.mapper.EngineeringMapper;
+import com.mes.opctask.entity.LoadGlassDeviceTask;
+import com.mes.opctask.entity.LoadGlassDeviceTaskHistory;
+import com.mes.opctask.service.LoadGlassDeviceTaskHistoryService;
+import com.mes.opctask.service.LoadGlassDeviceTaskService;
+import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
+import com.mes.rawglassdetails.service.RawGlassStorageDetailsService;
+import com.mes.uppattenusage.entity.UpPattenUsage;
+import com.mes.uppattenusage.entity.vo.UpPattenUsageVO;
+import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/10/23 14:30
+ * @Description:
+ */
+@Component
+@Slf4j
+public class OpcLoadGlassTask {
+
+    @Resource
+    private EngineeringMapper engineeringMapper;
+
+    @Resource
+    private LoadGlassDeviceTaskService loadGlassDeviceTaskService;
+    @Resource
+    private RawGlassStorageDetailsService rawGlassStorageDetailsService;
+    @Resource
+    private LoadGlassDeviceTaskHistoryService loadGlassDeviceTaskHistoryService;
+    @Resource
+    private UpPattenUsageMapper upPattenUsageMapper;
+
+    private static final List<Integer> LOAD_STATION_01 = Arrays.asList(101, 102);
+    private static final List<Integer> LOAD_STATION_02 = Arrays.asList(103, 104);
+
+
+    private static final Integer LOAD_GLASS_ONE_DEVICE = 5;
+    private static final Integer LOAD_GLASS_TWO_DEVICE = 6;
+    private static final String LOAD_GLASS_DEVICE_ONE_TASK = "load_glass_device_one_task";
+
+    private static final String LOAD_GLASS_DEVICE_TWO_TASK = "load_glass_device_two_task";
+
+
+    //璁惧id   涓婄墖浣嶄俊鎭�   浠诲姟琛ㄤ笉涓�鑷�   鍘嗗彶浠诲姟琛ㄥ叕鐢ㄤ竴寮� 鏂板浠诲姟/浠诲姟缁撴潫锛屽悗浼氬湪鍘嗗彶琛ㄤ腑鏂板涓�鏉¤褰曞苟鍦ㄧ粨鏉熷悗鏇存柊浠诲姟  涓�涓换鍔″嵆鍙�
+    //瀹氭椂浠诲姟鎵弿涓婄墖浣嶆湁娌℃湁鍘熺墖
+    //1銆佹槸鍚︽湁鍦ㄦ墽琛岀殑浠诲姟
+    //2銆�1鍙蜂笂鐗囦綅鏄惁鏈夊師鐗囷紝鍘熺墖灏哄鏄惁鍜屼笂鐗囧緟涓婄墖鐨勫昂瀵镐竴鑷�
+    //3銆�1鍙锋棤鍘熺墖锛屼笖娌℃湁鏋跺瓙锛�2鍙蜂笂鐗囦綅灏哄鏄惁鍜屽甫涓婄墖灏哄涓�鑷�
+    //4銆佷笉涓�鑷村彲鑳藉嚭鐜扮幓鐠冪牬鎹熷鑷寸殑涓婁竴鏋跺師鐗囨暟閲忎笉澶�
+    @Scheduled(fixedDelay = 300)
+    public void opcLoadGlassOne() {
+        opcLoadGlassChild(LOAD_GLASS_DEVICE_ONE_TASK, LOAD_GLASS_ONE_DEVICE);
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void opcLoadGlassTwo() {
+        opcLoadGlassChild(LOAD_GLASS_DEVICE_TWO_TASK, LOAD_GLASS_TWO_DEVICE);
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void opcLoadGlassOneFinish() {
+        opcLoadGlassFinishChid(LOAD_GLASS_DEVICE_ONE_TASK, LOAD_GLASS_ONE_DEVICE);
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void opcLoadGlassTwoFinish() {
+        opcLoadGlassFinishChid(LOAD_GLASS_DEVICE_TWO_TASK, LOAD_GLASS_TWO_DEVICE);
+    }
+
+    private void opcLoadGlassChild(String tableName, Integer deviceId) {
+        Engineering engineering = engineeringMapper.selectOne(new LambdaQueryWrapper<Engineering>()
+                .eq(Engineering::getState, Const.ENGINEERING_RUNNING).eq(Engineering::getStationCell, deviceId));
+        if (null == engineering) {
+            log.info("{}涓婄墖绾匡紝娌℃湁宸ョ▼浠诲姟", deviceId);
+            return;
+        }
+        //浠诲姟鏆傚仠
+        LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
+        if (task.getTaskRunning().equals(Const.ENGINEERING_RUNNING)) {
+            log.info("{}涓婄墖绾匡紝鏈夋鍦ㄦ墽琛岀殑浠诲姟锛岀粨鏉熸湰鍦颁笂鐗囪姹�", deviceId);
+            return;
+        }
+        List<UpPattenUsageVO> pattenUsageList = upPattenUsageMapper.queryRawGlassByEngineeringId(engineering.getEngineerId());
+        log.info("鎸夌収褰撳墠鑾峰彇鍒版鍦ㄩ渶瑕佷笂鐗囩殑鍘熺墖淇℃伅鏈夛細{}", pattenUsageList);
+        if (CollectionUtils.isEmpty(pattenUsageList)) {
+            log.info("褰撳墠宸ョ▼闇�瑕佷笂鐗囩殑鍘熺墖淇℃伅涓虹┖锛屼换鍔″凡缁撴潫");
+            //todo锛氭槸鍚﹀皢宸ョ▼鐘舵�佹敼涓哄凡瀹屾垚
+            return;
+        }
+        Map<String, List<UpPattenUsageVO>> upListMap = pattenUsageList.stream()
+                .collect(Collectors.groupingBy(UpPattenUsageVO::getGroupNumber));
+        log.info("鑾峰彇褰撳墠闇�瑕佷笂鐗囩殑鍘熺墖鏁版嵁");
+        List<UpPattenUsageVO> usageVOS = upListMap.get("1");
+//        鑾峰彇1鍙蜂笂鐗囦綅鏄湁鏋跺瓙涓旀湁鐜荤拑
+        List<Integer> loadStation = LOAD_GLASS_DEVICE_ONE_TASK.equals(tableName) ? LOAD_STATION_01 : LOAD_STATION_02;
+        List<RawGlassStorageDetails> loadStationList = rawGlassStorageDetailsService.list(new LambdaQueryWrapper<RawGlassStorageDetails>()
+                .inSql(RawGlassStorageDetails::getSlot, "select slot from raw_glass_storage_station where enable_state = 1")
+                .eq(RawGlassStorageDetails::getState, Const.RAW_GLASS_STATE_IN)
+                .eq(RawGlassStorageDetails::getDeviceId, deviceId));
+        if (CollectionUtils.isEmpty(loadStationList)) {
+            log.info("褰撳墠涓婄墖绾胯矾涓や釜涓婄墖浣嶉兘娌℃湁鍘熺墖淇℃伅锛岀粨鏉熸湰娆′笂鐗囦换鍔★紝绛夊緟浠撳偍璋冨害浠诲姟");
+            return;
+        }
+        RawGlassStorageDetails oneLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(0))).findFirst().orElse(null);
+        if (null == oneLoadStation) {
+            RawGlassStorageDetails twoLoadStation = loadStationList.stream().filter(e -> e.getSlot().equals(loadStation.get(1))).findFirst().orElse(null);
+            if (!compareRawSize(usageVOS.get(0), twoLoadStation)) {
+                log.info("浜屽彿涓婄墖浣嶆湁鏋跺瓙锛屽師鐗囨暟閲忎负0鎴栬�呭師鐗囦俊鎭笌寰呬笂鐗囧昂瀵镐笉涓�鑷达紝缁撴潫鏈涓婄墖浠诲姟锛岀瓑寰呬粨鍌ㄨ皟搴︿换鍔�");
+                return;
+            }
+            int number = Math.min(twoLoadStation.getRemainQuantity(), usageVOS.size());
+            //鐢熸垚涓婄墖浠诲姟
+            task.setTotalCount(number);
+            task.setTaskRunning(Const.ENGINEERING_RUNNING);
+            task.setRawGlassWidth((int) usageVOS.get(0).getWidth());
+            task.setRawGlassHeight((int) usageVOS.get(0).getHeight());
+            task.setSlot(loadStation.get(1));
+            loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+            saveHistoryTask(task, deviceId);
+            return;
+        }
+        //灏哄涓嶄竴鏍锋垨鑰呭師鐗囨暟閲忓ぇ浜�0
+        if (!compareRawSize(usageVOS.get(0), oneLoadStation)) {
+            log.info("涓�鍙蜂笂鐗囦綅鏈夋灦瀛愶紝鍘熺墖鏁伴噺涓�0鎴栬�呭師鐗囦俊鎭笌寰呬笂鐗囧昂瀵镐笉涓�鑷达紝缁撴潫鏈涓婄墖浠诲姟锛岀瓑寰呬粨鍌ㄨ皟搴︿换鍔�");
+            return;
+        }
+        //鐢熸垚涓婄墖浠诲姟
+        int number = Math.min(oneLoadStation.getRemainQuantity(), usageVOS.size());
+        task.setTotalCount(number);
+        task.setTaskRunning(Const.ENGINEERING_RUNNING);
+        task.setRawGlassWidth((int) usageVOS.get(0).getWidth());
+        task.setRawGlassHeight((int) usageVOS.get(0).getHeight());
+        task.setSlot(loadStation.get(0));
+        loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+        saveHistoryTask(task, deviceId);
+    }
+
+    private void opcLoadGlassFinishChid(String tableName, Integer deviceId) {
+        LoadGlassDeviceTask task = loadGlassDeviceTaskService.queryTaskMessage(tableName);
+        if (task.getTaskRunning().equals(Const.ENGINEERING_NEW)) {
+            log.info("鏃犱换鍔�,缁撴潫");
+            return;
+        }
+        if (task.getTaskState() <= 1) {
+            log.info("浠诲姟姝e湪鎵ц,缁撴潫");
+            return;
+        }
+        //鑾峰彇浠诲姟瀹屾垚鎯呭喌
+//         宸插畬鎴愭暟閲�  鐮存崯鏁伴噺
+        Integer finishCount = task.getFinishCount();
+        Integer damageCount = task.getDamageCount();
+
+        //鏇存柊褰撳墠鏋跺瓙涓婄殑鍘熺墖鍓╀綑鎯呭喌
+        rawGlassStorageDetailsService.update(new UpdateWrapper<RawGlassStorageDetails>()
+                .inSql("slot", "select slot from raw_glass_storage_station where enable_state = 1")
+                .eq("slot", task.getSlot())
+                .eq("state", Const.RAW_GLASS_STATE_IN)
+                .setSql("remain_quantity = remain_quantity - " + (finishCount + damageCount)));
+        //鏇存柊宸ョ▼涓嬬殑鍘熺墖鏁伴噺 todo:sql寰呬紭鍖�
+
+        List<Integer> ids = upPattenUsageMapper.queryFinishByEngineering(deviceId, finishCount);
+        upPattenUsageMapper.update(null, new LambdaUpdateWrapper<UpPattenUsage>()
+                .in(UpPattenUsage::getId, ids)
+                .set(UpPattenUsage::getState, Const.LOAD_RAW_GLASS_SUCCESS));
+
+        //todo:浠诲姟琛ㄦ暟鎹儏鍐�
+        task.setTaskRunning(0);
+        task.setTotalCount(0);
+        task.setRawGlassWidth(0);
+        task.setRawGlassHeight(0);
+        task.setSlot(0);
+        loadGlassDeviceTaskService.updateTaskMessage(tableName, task);
+        loadGlassDeviceTaskHistoryService.update(new LambdaUpdateWrapper<LoadGlassDeviceTaskHistory>()
+                .set(LoadGlassDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_SUCCESS)
+                .eq(LoadGlassDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
+                .eq(LoadGlassDeviceTaskHistory::getStation, deviceId)
+        );
+    }
+
+    private boolean saveHistoryTask(LoadGlassDeviceTask task, Integer deviceId) {
+        LoadGlassDeviceTaskHistory taskHistory = new LoadGlassDeviceTaskHistory();
+        BeanUtils.copyProperties(task, taskHistory);
+        taskHistory.setStation(deviceId);
+        taskHistory.setCreateTime(new Date());
+        taskHistory.setTaskState(Const.RAW_GLASS_TASK_NEW);
+        loadGlassDeviceTaskHistoryService.save(taskHistory);
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 灏哄涓�鏍峰苟涓斿師鐗囨暟閲忓ぇ浜�0
+     *
+     * @param upPattenUsage
+     * @param details
+     * @return
+     */
+    private boolean compareRawSize(UpPattenUsage upPattenUsage, RawGlassStorageDetails details) {
+        boolean flag = upPattenUsage.getWidth() == details.getPatternWidth() && upPattenUsage.getHeight() == details.getPatternHeight() &&
+                upPattenUsage.getThickness() == details.getPatternThickness() && upPattenUsage.getFilmsId().equals(details.getFilmsId());
+        return flag && details.getRemainQuantity() > 0;
+    }
+
+}
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java
new file mode 100644
index 0000000..c4bef17
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTask.java
@@ -0,0 +1,58 @@
+package com.mes.opctask.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * (LoadGlassDeviceOneTask)琛ㄥ疄浣撶被
+ *
+ * @author makejava
+ * @since 2024-11-06 16:00:10
+ */
+@Data
+public class LoadGlassDeviceTask {
+    /**
+     * 浠诲姟璇锋眰 0鏃犱换鍔� 1涓婄墖
+     */
+    private Integer taskRunning;
+    /**
+     * 鍘熺墖瀹�
+     */
+    private Integer rawGlassWidth;
+    /**
+     * 鍘熺墖楂�
+     */
+    private Integer rawGlassHeight;
+    /**
+     * 涓婄墖浣嶇紪鍙�
+     */
+    private Integer slot;
+    /**
+     * 浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟
+     */
+    private Integer taskState;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    private Date updateTime;
+    /**
+     * 涓婄墖鎬绘暟閲�
+     */
+    private Integer totalCount;
+    /**
+     * 宸插畬鎴愭暟閲�
+     */
+    private Integer finishCount;
+    /**
+     * 鐮存崯鏁伴噺
+     */
+    private Integer damageCount;
+
+
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTaskHistory.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTaskHistory.java
new file mode 100644
index 0000000..6ed83af
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/entity/LoadGlassDeviceTaskHistory.java
@@ -0,0 +1,66 @@
+package com.mes.opctask.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * (LoadGlassDeviceTaskHistory)琛ㄥ疄浣撶被
+ *
+ * @author makejava
+ * @since 2024-11-06 22:23:00
+ */
+@SuppressWarnings("serial")
+@Data
+public class LoadGlassDeviceTaskHistory {
+    /**
+     * 鍘嗗彶浠诲姟id
+     */
+    private Long id;
+    /**
+     * 浠诲姟璇锋眰 0鏃犱换鍔� 1涓婄墖
+     */
+    private Integer taskRunning;
+    /**
+     * 鍘熺墖瀹�
+     */
+    private Integer rawGlassWidth;
+    /**
+     * 鍘熺墖楂�
+     */
+    private Integer rawGlassHeight;
+    /**
+     * 涓婄墖璁惧缂栧彿
+     */
+    private Integer station;
+    /**
+     * 涓婄墖浣嶇紪鍙�
+     */
+    private Integer slot;
+    /**
+     * 浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟
+     */
+    private Integer taskState;
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Date createTime;
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    private Date updateTime;
+    /**
+     * 涓婄墖鎬绘暟閲�
+     */
+    private Integer totalCount;
+    /**
+     * 宸插畬鎴愭暟閲�
+     */
+    private Integer finishCount;
+    /**
+     * 鐮存崯鏁伴噺
+     */
+    private Integer damageCount;
+
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskHistoryDao.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskHistoryDao.java
new file mode 100644
index 0000000..3d47020
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskHistoryDao.java
@@ -0,0 +1,15 @@
+package com.mes.opctask.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.opctask.entity.LoadGlassDeviceTaskHistory;
+
+/**
+ * (LoadGlassDeviceTaskHistory)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-11-06 22:22:59
+ */
+public interface LoadGlassDeviceTaskHistoryDao extends BaseMapper<LoadGlassDeviceTaskHistory> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskMapper.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskMapper.java
new file mode 100644
index 0000000..8fe31ac
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/mapper/LoadGlassDeviceTaskMapper.java
@@ -0,0 +1,19 @@
+package com.mes.opctask.mapper;
+
+import com.mes.opctask.entity.LoadGlassDeviceTask;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * (LoadGlassDeviceOneTask)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author makejava
+ * @since 2024-11-06 16:00:09
+ */
+public interface LoadGlassDeviceTaskMapper {
+
+    LoadGlassDeviceTask queryTaskMessage(String tableName);
+
+    boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") LoadGlassDeviceTask loadGlassDeviceTask);
+
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskHistoryService.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskHistoryService.java
new file mode 100644
index 0000000..fa78ca0
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskHistoryService.java
@@ -0,0 +1,15 @@
+package com.mes.opctask.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.opctask.entity.LoadGlassDeviceTaskHistory;
+
+/**
+ * (LoadGlassDeviceTaskHistory)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2024-11-06 22:23:00
+ */
+public interface LoadGlassDeviceTaskHistoryService extends IService<LoadGlassDeviceTaskHistory> {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskService.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskService.java
new file mode 100644
index 0000000..4157107
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/LoadGlassDeviceTaskService.java
@@ -0,0 +1,20 @@
+package com.mes.opctask.service;
+
+import com.mes.opctask.entity.LoadGlassDeviceTask;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * (LoadGlassDeviceOneTask)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author makejava
+ * @since 2024-11-06 16:00:13
+ */
+public interface LoadGlassDeviceTaskService {
+
+
+    LoadGlassDeviceTask queryTaskMessage(String tableName);
+
+    boolean updateTaskMessage(@Param("tableName") String tableName, @Param("task") LoadGlassDeviceTask loadGlassDeviceTask);
+
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceOneTaskServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceOneTaskServiceImpl.java
new file mode 100644
index 0000000..cca5191
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceOneTaskServiceImpl.java
@@ -0,0 +1,32 @@
+package com.mes.opctask.service.impl;
+
+import com.mes.opctask.entity.LoadGlassDeviceTask;
+import com.mes.opctask.mapper.LoadGlassDeviceTaskMapper;
+import com.mes.opctask.service.LoadGlassDeviceTaskService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * (LoadGlassDeviceOneTask)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2024-11-06 16:00:16
+ */
+@Service
+public class LoadGlassDeviceOneTaskServiceImpl implements LoadGlassDeviceTaskService {
+
+    @Resource
+    LoadGlassDeviceTaskMapper loadGlassDeviceTaskMapper;
+
+    @Override
+    public LoadGlassDeviceTask queryTaskMessage(String tableName) {
+        return loadGlassDeviceTaskMapper.queryTaskMessage(tableName);
+    }
+
+    @Override
+    public boolean updateTaskMessage(String tableName, LoadGlassDeviceTask loadGlassDeviceTask) {
+        return loadGlassDeviceTaskMapper.updateTaskMessage(tableName, loadGlassDeviceTask);
+    }
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceTaskHistoryServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceTaskHistoryServiceImpl.java
new file mode 100644
index 0000000..5d6d2c5
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/opctask/service/impl/LoadGlassDeviceTaskHistoryServiceImpl.java
@@ -0,0 +1,19 @@
+package com.mes.opctask.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.opctask.entity.LoadGlassDeviceTaskHistory;
+import com.mes.opctask.mapper.LoadGlassDeviceTaskHistoryDao;
+import com.mes.opctask.service.LoadGlassDeviceTaskHistoryService;
+import org.springframework.stereotype.Service;
+
+/**
+ * (LoadGlassDeviceTaskHistory)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author makejava
+ * @since 2024-11-06 22:23:00
+ */
+@Service
+public class LoadGlassDeviceTaskHistoryServiceImpl extends ServiceImpl<LoadGlassDeviceTaskHistoryDao, LoadGlassDeviceTaskHistory> implements LoadGlassDeviceTaskHistoryService {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
index 3d98ea2..24d88ef 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
@@ -2,7 +2,6 @@
 
 import com.mes.engineering.entity.Engineering;
 import com.mes.engineering.service.EngineeringService;
-import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.pp.service.OptimizeProjectService;
 import com.mes.uppattenusage.entity.UpPattenUsage;
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
index e7d0a13..1e1ef3b 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
@@ -19,6 +19,9 @@
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
+      druid:
+        wall:
+          multi-statement-allow: true
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml
new file mode 100644
index 0000000..4f11622
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/mapper/LoadGlassDeviceTaskMapper.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.opctask.mapper.LoadGlassDeviceTaskMapper">
+
+    <resultMap id="baseMap" type="com.mes.opctask.entity.LoadGlassDeviceTask">
+        <id column="task_running" property="taskRunning"/>
+        <result column="raw_glass_width" property="rawGlassWidth"/>
+        <result column="raw_glass_height" property="rawGlassHeight"/>
+        <result column="slot" property="slot"/>
+        <result column="task_state" property="taskState"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="total_count" property="totalCount"/>
+        <result column="finish_count" property="finishCount"/>
+        <result column="damage_count" property="damageCount"/>
+    </resultMap>
+
+    <select id="queryTaskMessage" resultMap="baseMap">
+        select *
+        from ${tableName}
+        limit 1
+    </select>
+
+    <update id="updateTaskMessage">
+        UPDATE ${tableName}
+        SET task_running     = #{task.taskRunning},
+            raw_glass_width  = #{task.rawGlassWidth},
+            raw_glass_height = #{task.rawGlassHeight},
+            slot             = #{task.slot},
+            total_count      = #{task.totalCount}
+    </update>
+
+
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
index 089ecd4..6330ac4 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
@@ -152,7 +152,7 @@
                 damage.setLine(Const.TEMPERING_OUT_TARGET_POSITION);
                 damage.setWorkingProcedure("閽㈠寲");
                 damage.setRemark("閽㈠寲");
-                damage.setStatus(0);
+                damage.setStatus(1);
                 damage.setType(e.getState());
                 return damage;
             }).collect(Collectors.toList());
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelogBase.xml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelogBase.xml
index a98a47b..8414061 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelogBase.xml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/changelogBase.xml
@@ -6,6 +6,7 @@
 
     <!-- 寮曞叆绗竴涓猄QL閰嶇疆鏂囦欢 -->
     <include file="./changelog/changelog.sql" relativeToChangelogFile="false"/>
+    <include file="./changelog/ywChangelog.sql" relativeToChangelogFile="false"/>
 
     <!-- 鏇村鐨刬nclude鏍囩... -->
 
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql
new file mode 100644
index 0000000..5892857
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/changelog/ywChangelog.sql
@@ -0,0 +1,172 @@
+-- liquibase formatted sql
+
+-- changeset zsh:20241107001
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'edg_storage_device_one_task' and table_schema = 'hangzhoumes';
+CREATE TABLE edg_storage_device_one_task
+(
+    task_running int                DEFAULT NULL COMMENT '浠诲姟璇锋眰 0鏃犱换鍔� 1杩涚墖 2鍑虹墖 3鐩撮��',
+    glass_id_in  varchar(20)        DEFAULT NULL COMMENT '杩涚墖鐜荤拑id',
+    glass_id_out varchar(20)        DEFAULT NULL COMMENT '鍑虹墖鐜荤拑id',
+    glass_id     varchar(20)        DEFAULT NULL COMMENT '纾ㄨ竟鍓嶇幓鐠僫d',
+    current_cell int                DEFAULT '0' COMMENT '褰撳墠灞傚彿',
+    start_cell   int                DEFAULT '0' COMMENT '灞傚彿',
+    end_cell     int                DEFAULT NULL COMMENT '棰勭暀灞傚彿',
+    task_state   int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
+    task_type    int                DEFAULT NULL COMMENT '浠诲姟绫诲瀷',
+    create_time  timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+    width        int                DEFAULT NULL COMMENT '瀹�',
+    height       int                DEFAULT NULL COMMENT '楂�',
+    thickness    int                DEFAULT NULL COMMENT '鍘�',
+    film_remove  int                DEFAULT NULL COMMENT '鏄惁闄よ啘'
+);
+-- rollback DROP TABLE edg_storage_device_one_task;
+
+
+-- changeset zsh:20241107002
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM edg_storage_device_one_task;
+INSERT INTO edg_storage_device_one_task (task_running, glass_id, glass_id_in, glass_id_out, current_cell, start_cell,
+                                         end_cell, task_state, task_type, width, height, thickness, film_remove)
+VALUES (0, NULL, NULL, NULL, 1, 0, NULL, 0, NULL, 0, 0, 0, 0);
+
+
+-- changeset zsh:20241107003
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'edg_storage_device_two_task' and table_schema = 'hangzhoumes';
+CREATE TABLE edg_storage_device_two_task
+(
+    task_running int                DEFAULT NULL COMMENT '浠诲姟璇锋眰 0鏃犱换鍔� 1杩涚墖 2鍑虹墖 3鐩撮��',
+    glass_id_in  varchar(20)        DEFAULT NULL COMMENT '杩涚墖鐜荤拑id',
+    glass_id_out varchar(20)        DEFAULT NULL COMMENT '鍑虹墖鐜荤拑id',
+    glass_id     varchar(20)        DEFAULT NULL COMMENT '纾ㄨ竟鍓嶇幓鐠僫d',
+    current_cell int                DEFAULT '0' COMMENT '褰撳墠灞傚彿',
+    start_cell   int                DEFAULT '0' COMMENT '灞傚彿',
+    end_cell     int                DEFAULT NULL COMMENT '棰勭暀灞傚彿',
+    task_state   int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
+    task_type    int                DEFAULT NULL COMMENT '浠诲姟绫诲瀷',
+    create_time  timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+    width        int                DEFAULT NULL COMMENT '瀹�',
+    height       int                DEFAULT NULL COMMENT '楂�',
+    thickness    int                DEFAULT NULL COMMENT '鍘�',
+    film_remove  int                DEFAULT NULL COMMENT '鏄惁闄よ啘'
+);
+-- rollback DROP TABLE edg_storage_device_two_task;
+
+-- changeset zsh:20241107004
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM edg_storage_device_two_task;
+INSERT INTO edg_storage_device_two_task (task_running, glass_id, glass_id_in, glass_id_out, current_cell, start_cell,
+                                         end_cell, task_state, task_type, width, height, thickness, film_remove)
+VALUES (0, NULL, NULL, NULL, 1, 0, NULL, 0, NULL, 0, 0, 0, 0);
+
+
+
+-- changeset zsh:20241107005
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'edg_storage_device_task_history' and table_schema = 'hangzhoumes';
+CREATE TABLE edg_storage_device_task_history
+(
+    id           bigint    NOT NULL AUTO_INCREMENT COMMENT '宸ョ▼琛╥d',
+    glass_id_in  varchar(20)        DEFAULT NULL COMMENT '杩涚墖鐜荤拑id',
+    glass_id_out varchar(20)        DEFAULT NULL COMMENT '鍑虹墖鐜荤拑id',
+    current_cell int                DEFAULT '0' COMMENT '褰撳墠灞傚彿',
+    start_cell   int                DEFAULT '0' COMMENT '灞傚彿',
+    end_cell     int                DEFAULT NULL COMMENT '棰勭暀灞傚彿',
+    task_state   int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
+    task_type    int                DEFAULT NULL COMMENT '浠诲姟绫诲瀷',
+    create_time  timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+    PRIMARY KEY (id) USING BTREE
+);
+-- rollback DROP TABLE edg_storage_device_task_history;
+
+-- changeset zsh:20241107006
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'edg_glass_task_queue_info' and table_schema = 'hangzhoumes';
+CREATE TABLE edg_glass_task_queue_info
+(
+    glass_id    varchar(20)        DEFAULT NULL COMMENT '纾ㄨ竟鍓嶇幓鐠僫d',
+    width       int                DEFAULT NULL COMMENT '瀹�',
+    height      int                DEFAULT NULL COMMENT '楂�',
+    thickness   int                DEFAULT NULL COMMENT '鍘�',
+    state       int                DEFAULT NULL COMMENT '鐘舵��',
+    line        int                DEFAULT NULL COMMENT '绾胯矾',
+    create_time timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿'
+);
+-- rollback DROP TABLE edg_glass_task_queue_info;
+
+-- changeset zsh:20241107007
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'load_glass_device_one_task' and table_schema = 'hangzhoumes';
+CREATE TABLE load_glass_device_one_task
+(
+    task_running     int                DEFAULT '0' COMMENT '浠诲姟璇锋眰 0鏃犱换鍔� 1涓婄墖',
+    raw_glass_width  int                DEFAULT '0' COMMENT '鍘熺墖瀹�',
+    raw_glass_height int                DEFAULT '0' COMMENT '鍘熺墖楂�',
+    slot             int                DEFAULT '0' COMMENT '涓婄墖浣嶇紪鍙�',
+    task_state       int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
+    create_time      timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time      timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+    total_count      int                DEFAULT '0' COMMENT '涓婄墖鎬绘暟閲�',
+    finish_count     int                DEFAULT '0' COMMENT '宸插畬鎴愭暟閲�',
+    damage_count     int                DEFAULT '0' COMMENT '鐮存崯鏁伴噺'
+);
+-- rollback DROP TABLE load_glass_device_one_task;
+
+-- changeset zsh:20241107008
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM load_glass_device_one_task;
+INSERT INTO load_glass_device_one_task (task_running, raw_glass_width, raw_glass_height, slot, task_state, total_count,
+                                        finish_count, damage_count)
+VALUES (0, 0, 0, 0, 0, 0, 0, 0);
+
+-- changeset zsh:20241107009
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'load_glass_device_two_task' and table_schema = 'hangzhoumes';
+CREATE TABLE load_glass_device_two_task
+(
+    task_running     int                DEFAULT '0' COMMENT '浠诲姟璇锋眰 0鏃犱换鍔� 1涓婄墖',
+    raw_glass_width  int                DEFAULT '0' COMMENT '鍘熺墖瀹�',
+    raw_glass_height int                DEFAULT '0' COMMENT '鍘熺墖楂�',
+    slot             int                DEFAULT '0' COMMENT '涓婄墖浣嶇紪鍙�',
+    task_state       int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
+    create_time      timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time      timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+    total_count      int                DEFAULT '0' COMMENT '涓婄墖鎬绘暟閲�',
+    finish_count     int                DEFAULT '0' COMMENT '宸插畬鎴愭暟閲�',
+    damage_count     int                DEFAULT '0' COMMENT '鐮存崯鏁伴噺'
+);
+-- rollback DROP TABLE load_glass_device_two_task;
+
+-- changeset zsh:20241107010
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM load_glass_device_two_task;
+INSERT INTO load_glass_device_two_task (task_running, raw_glass_width, raw_glass_height, slot, task_state, total_count,
+                                        finish_count, damage_count)
+VALUES (0, 0, 0, 0, 0, 0, 0, 0);
+
+
+-- changeset zsh:20241107011
+-- preconditions onFail:CONTINUE onError:CONTINUE
+-- precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'load_glass_device_task_history' and table_schema = 'hangzhoumes';
+CREATE TABLE load_glass_device_task_history
+(
+    id               bigint    NOT NULL AUTO_INCREMENT COMMENT '鍘嗗彶浠诲姟id',
+    task_running     int                DEFAULT '0' COMMENT '浠诲姟璇锋眰 0鏃犱换鍔� 1涓婄墖',
+    raw_glass_width  int                DEFAULT '0' COMMENT '鍘熺墖瀹�',
+    raw_glass_height int                DEFAULT '0' COMMENT '鍘熺墖楂�',
+    station          int                DEFAULT '0' COMMENT '涓婄墖璁惧缂栧彿',
+    slot             int                DEFAULT '0' COMMENT '涓婄墖浣嶇紪鍙�',
+    task_state       int                DEFAULT NULL COMMENT '浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1鎵ц涓� 2缁撴潫浠诲姟',
+    create_time      timestamp NULL     DEFAULT CURRENT_TIMESTAMP COMMENT '鍒涘缓鏃堕棿',
+    update_time      timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '鏇存柊鏃堕棿',
+    total_count      int                DEFAULT '0' COMMENT '涓婄墖鎬绘暟閲�',
+    finish_count     int                DEFAULT '0' COMMENT '宸插畬鎴愭暟閲�',
+    damage_count     int                DEFAULT '0' COMMENT '鐮存崯鏁伴噺',
+    PRIMARY KEY (id) USING BTREE
+);
+-- rollback DROP TABLE load_glass_device_task_history;
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
index 7fdfb28..f60ea51 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downglassinfo/service/impl/DownGlassInfoServiceImpl.java
@@ -1,6 +1,5 @@
 package com.mes.downglassinfo.service.impl;
 
-import cn.smallbun.screw.core.util.CollectionUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -8,7 +7,6 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.common.config.Const;
-import com.mes.common.utils.RedisUtil;
 import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
 import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
@@ -21,6 +19,7 @@
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.job.DownLoadCacheGlassTask;
 import com.mes.pp.service.FlowCardService;
+import com.mes.utils.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,7 +30,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 @Slf4j
 @Service
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
index 77e07e5..7b9099c 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
@@ -1,11 +1,11 @@
 package com.mes.downworkstation.controller;
 
 
-import com.mes.common.utils.RedisUtil;
 import com.mes.downworkstation.entity.DownWorkstation;
 import com.mes.downworkstation.entity.request.DownWorkRequest;
 import com.mes.downworkstation.service.DownWorkstationService;
 import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.utils.RedisUtil;
 import com.mes.utils.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
index d9c9bab..8c530ad 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
@@ -5,7 +5,6 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.query.MPJQueryWrapper;
 import com.mes.common.S7object;
-import com.mes.common.utils.RedisUtil;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
 import com.mes.device.PlcParameterObject;
@@ -19,6 +18,7 @@
 import com.mes.downworkstation.service.DownWorkstationService;
 import com.mes.downworkstation.service.DownWorkstationTaskService;
 import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.utils.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
index 9096c98..baa53ca 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
@@ -5,7 +5,6 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.mes.common.config.Const;
-import com.mes.common.utils.RedisUtil;
 import com.mes.downglassinfo.entity.DownGlassInfo;
 import com.mes.downglassinfo.entity.DownGlassTask;
 import com.mes.downglassinfo.entity.request.DownGlassInfoRequest;
@@ -18,23 +17,20 @@
 import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.tools.DateUtil;
 import com.mes.tools.WebSocketServer;
+import com.mes.utils.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.TaskScheduler;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
-import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.*;
 import java.util.stream.Collectors;
 
 @Slf4j

--
Gitblit v1.8.0