From b9b44b51b201e2f5a9a1f3665c7fb76b5690f9af Mon Sep 17 00:00:00 2001
From: wu <731351411@qq.com>
Date: 星期一, 23 十二月 2024 16:13:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java                                  |   31 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageMapper.java                       |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java          |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java                                      |   68 -
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageService.java                     |   10 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java                                |   49 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/controller/EdgStorageDeviceTaskHistoryController.java         |   64 -
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java                                           |   14 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassTask.java                                            |   40 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java                                         |  124 ++
 UI-Project/package.json                                                                                                                      |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml                                                          |    4 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java                                           |   21 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java        |    4 
 UI-Project/src/lang/py.js                                                                                                                    |   14 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java    |   23 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java                                                 |    8 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/application.yml                                                        |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml                                   |   17 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/request/TaskHistoryRequest.java                        |   35 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java                                     |    6 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCage.java                             |    8 
 UI-Project/src/router/index.js                                                                                                               |   10 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageAndDetailsDTO.java            |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java                             |   19 
 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               |    4 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageServiceImpl.java            |   46 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/mapper/EdgStorageCageDetailsMapper.java                |    7 
 UI-Project/src/views/Caching/cachingbefore.vue                                                                                               |  247 +++-
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java                      |    4 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageDetailsService.java              |   16 
 UI-Project/src/views/Caching/cachingun.vue                                                                                                   |  390 ++++---
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java                                                   |    9 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java         |    4 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java     |  268 ----
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageController.java               |   17 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java                |   25 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                           |    2 
 UI-Project/src/lang/en.js                                                                                                                    |   14 
 UI-Project/src/lang/zh.js                                                                                                                    |   14 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |   26 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml                                                  |    1 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/dto/HollowBigStorageAndDetailsDTO.java                |   18 
 /dev/null                                                                                                                                    |  958 -------------------
 UI-Project/src/views/Slicecage/slicecage.vue                                                                                                 |   85 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/CutDrawingVO.java                            |   19 
 hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java                        |    4 
 UI-Project/package-lock.json                                                                                                                 |  117 +-
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                                          |    1 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java                         |   28 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java               |   11 
 52 files changed, 1,199 insertions(+), 1,736 deletions(-)

diff --git a/UI-Project/package-lock.json b/UI-Project/package-lock.json
index a357011..300ee38 100644
--- a/UI-Project/package-lock.json
+++ b/UI-Project/package-lock.json
@@ -24,7 +24,7 @@
         "vue": "^3.3.4",
         "vue-draggable-plus": "^0.5.0",
         "vue-echarts": "^6.7.3",
-        "vue-i18n": "^9.10.1",
+        "vue-i18n": "^11.0.0-rc.1",
         "vue-print-nb": "^1.7.5",
         "vue-router": "^4.0.13",
         "vue3-print-nb": "^0.1.4",
@@ -148,35 +148,44 @@
       "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
     },
     "node_modules/@intlify/core-base": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.13.1.tgz",
-      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+      "version": "11.0.0-rc.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.0.0-rc.1.tgz",
+      "integrity": "sha512-fnfZoa9pb1dKM3L1UkDUGLLrPFQ2BK98x4/fMqwS/fktUor34vQR/itPtfv652ZTplenXXLCEYjUYTGfDZgMTQ==",
       "dependencies": {
-        "@intlify/message-compiler": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@intlify/message-compiler": "11.0.0-rc.1",
+        "@intlify/shared": "11.0.0-rc.1"
       },
       "engines": {
         "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
     "node_modules/@intlify/message-compiler": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
-      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
+      "version": "11.0.0-rc.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.0.0-rc.1.tgz",
+      "integrity": "sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==",
       "dependencies": {
-        "@intlify/shared": "9.13.1",
+        "@intlify/shared": "11.0.0-rc.1",
         "source-map-js": "^1.0.2"
       },
       "engines": {
         "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
     "node_modules/@intlify/shared": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.13.1.tgz",
-      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
+      "version": "11.0.0-rc.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.0.0-rc.1.tgz",
+      "integrity": "sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==",
       "engines": {
         "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
     "node_modules/@jridgewell/sourcemap-codec": {
@@ -2028,12 +2037,12 @@
       }
     },
     "node_modules/vue-i18n": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.13.1.tgz",
-      "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
+      "version": "11.0.0-rc.1",
+      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.0.0-rc.1.tgz",
+      "integrity": "sha512-qbdCbA537HEdr2yXQ4ec/OMDsoHjod1DwnWbrf+l4Cu/O7CYTCKsOyITUm3RmrCJgRnoVycuR6i/JWdNTJvD5g==",
       "dependencies": {
-        "@intlify/core-base": "9.13.1",
-        "@intlify/shared": "9.13.1",
+        "@intlify/core-base": "11.0.0-rc.1",
+        "@intlify/shared": "11.0.0-rc.1",
         "@vue/devtools-api": "^6.5.0"
       },
       "engines": {
@@ -2307,27 +2316,27 @@
       "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
     },
     "@intlify/core-base": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.13.1.tgz",
-      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+      "version": "11.0.0-rc.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.0.0-rc.1.tgz",
+      "integrity": "sha512-fnfZoa9pb1dKM3L1UkDUGLLrPFQ2BK98x4/fMqwS/fktUor34vQR/itPtfv652ZTplenXXLCEYjUYTGfDZgMTQ==",
       "requires": {
-        "@intlify/message-compiler": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@intlify/message-compiler": "11.0.0-rc.1",
+        "@intlify/shared": "11.0.0-rc.1"
       }
     },
     "@intlify/message-compiler": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
-      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
+      "version": "11.0.0-rc.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.0.0-rc.1.tgz",
+      "integrity": "sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==",
       "requires": {
-        "@intlify/shared": "9.13.1",
+        "@intlify/shared": "11.0.0-rc.1",
         "source-map-js": "^1.0.2"
       }
     },
     "@intlify/shared": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.13.1.tgz",
-      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ=="
+      "version": "11.0.0-rc.1",
+      "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.0.0-rc.1.tgz",
+      "integrity": "sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg=="
     },
     "@jridgewell/sourcemap-codec": {
       "version": "1.4.15",
@@ -3213,7 +3222,7 @@
         "@vitejs/plugin-vue": "^4.6.2",
         "@vue-macros/reactivity-transform": "^0.3.23",
         "axios": "^1.6.8",
-        "babel-polyfill": "*",
+        "babel-polyfill": "^6.26.0",
         "chart.js": "^4.4.3",
         "echarts": "^5.5.1",
         "element-plus": "^2.4.0",
@@ -3230,7 +3239,7 @@
         "vue": "^3.3.4",
         "vue-draggable-plus": "^0.5.0",
         "vue-echarts": "^6.7.3",
-        "vue-i18n": "^9.10.1",
+        "vue-i18n": "11.0.0-rc.1",
         "vue-print-nb": "^1.7.5",
         "vue-router": "^4.0.13",
         "vue3-print-nb": "^0.1.4",
@@ -3314,27 +3323,27 @@
           "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
         },
         "@intlify/core-base": {
-          "version": "9.13.1",
-          "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.13.1.tgz",
-          "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+          "version": "11.0.0-rc.1",
+          "resolved": "https://registry.npmmirror.com/@intlify/core-base/-/core-base-11.0.0-rc.1.tgz",
+          "integrity": "sha512-fnfZoa9pb1dKM3L1UkDUGLLrPFQ2BK98x4/fMqwS/fktUor34vQR/itPtfv652ZTplenXXLCEYjUYTGfDZgMTQ==",
           "requires": {
-            "@intlify/message-compiler": "9.13.1",
-            "@intlify/shared": "9.13.1"
+            "@intlify/message-compiler": "11.0.0-rc.1",
+            "@intlify/shared": "11.0.0-rc.1"
           }
         },
         "@intlify/message-compiler": {
-          "version": "9.13.1",
-          "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
-          "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
+          "version": "11.0.0-rc.1",
+          "resolved": "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-11.0.0-rc.1.tgz",
+          "integrity": "sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==",
           "requires": {
-            "@intlify/shared": "9.13.1",
+            "@intlify/shared": "11.0.0-rc.1",
             "source-map-js": "^1.0.2"
           }
         },
         "@intlify/shared": {
-          "version": "9.13.1",
-          "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-9.13.1.tgz",
-          "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ=="
+          "version": "11.0.0-rc.1",
+          "resolved": "https://registry.npmmirror.com/@intlify/shared/-/shared-11.0.0-rc.1.tgz",
+          "integrity": "sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg=="
         },
         "@jridgewell/sourcemap-codec": {
           "version": "1.4.15",
@@ -4615,12 +4624,12 @@
           }
         },
         "vue-i18n": {
-          "version": "9.13.1",
-          "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.13.1.tgz",
-          "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
+          "version": "11.0.0-rc.1",
+          "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.0.0-rc.1.tgz",
+          "integrity": "sha512-qbdCbA537HEdr2yXQ4ec/OMDsoHjod1DwnWbrf+l4Cu/O7CYTCKsOyITUm3RmrCJgRnoVycuR6i/JWdNTJvD5g==",
           "requires": {
-            "@intlify/core-base": "9.13.1",
-            "@intlify/shared": "9.13.1",
+            "@intlify/core-base": "11.0.0-rc.1",
+            "@intlify/shared": "11.0.0-rc.1",
             "@vue/devtools-api": "^6.5.0"
           }
         },
@@ -5178,12 +5187,12 @@
       }
     },
     "vue-i18n": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.13.1.tgz",
-      "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
+      "version": "11.0.0-rc.1",
+      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-11.0.0-rc.1.tgz",
+      "integrity": "sha512-qbdCbA537HEdr2yXQ4ec/OMDsoHjod1DwnWbrf+l4Cu/O7CYTCKsOyITUm3RmrCJgRnoVycuR6i/JWdNTJvD5g==",
       "requires": {
-        "@intlify/core-base": "9.13.1",
-        "@intlify/shared": "9.13.1",
+        "@intlify/core-base": "11.0.0-rc.1",
+        "@intlify/shared": "11.0.0-rc.1",
         "@vue/devtools-api": "^6.5.0"
       }
     },
diff --git a/UI-Project/package.json b/UI-Project/package.json
index acb0d7e..916c2c4 100644
--- a/UI-Project/package.json
+++ b/UI-Project/package.json
@@ -24,7 +24,7 @@
     "vue": "^3.3.4",
     "vue-draggable-plus": "^0.5.0",
     "vue-echarts": "^6.7.3",
-    "vue-i18n": "^9.10.1",
+    "vue-i18n": "^11.0.0-rc.1",
     "vue-print-nb": "^1.7.5",
     "vue-router": "^4.0.13",
     "vue3-print-nb": "^0.1.4",
diff --git a/UI-Project/src/lang/en.js b/UI-Project/src/lang/en.js
index a661505..e81910d 100644
--- a/UI-Project/src/lang/en.js
+++ b/UI-Project/src/lang/en.js
@@ -87,6 +87,20 @@
           layoutSequence:'Serial Number',
       },
       sorter:{
+          inPlace:'鍒颁綅',
+          ninPlace:'鏈埌浣�',
+          emptymissions:'绌轰换鍔�',
+          advancetask:'杩涚墖浠诲姟',
+          outputtasks:'鍑虹墖浠诲姟',
+          straighttasks:'鐩撮�氫换鍔�',
+          endingtask:'缁撴潫',
+          another:'鍏朵粬',
+          taskRunning:'浠诲姟璇锋眰',
+          updateTime:'鏇存柊鏃堕棿',
+          id:'纾ㄨ竟鍓嶇悊鐗囩琛↖D',
+          remainWidth:'鍓╀綑',
+          place:'鏄惁鍒颁綅',
+          layernow:'褰撳墠灞傚彿',
           gridnumber:'Grid number',
           glassnumber:'Glass number',
           width:'Width',
diff --git a/UI-Project/src/lang/py.js b/UI-Project/src/lang/py.js
index 84f4a6d..f1ae786 100644
--- a/UI-Project/src/lang/py.js
+++ b/UI-Project/src/lang/py.js
@@ -87,6 +87,20 @@
         layoutSequence:'小械褉懈泄薪 薪芯屑械褉',
     },
     sorter: {
+        inPlace:'鍒颁綅',
+        ninPlace:'鏈埌浣�',
+        emptymissions:'绌轰换鍔�',
+        advancetask:'杩涚墖浠诲姟',
+        outputtasks:'鍑虹墖浠诲姟',
+        straighttasks:'鐩撮�氫换鍔�',
+        endingtask:'缁撴潫',
+        another:'鍏朵粬',
+        taskRunning:'浠诲姟璇锋眰',
+        remainWidth:'鍓╀綑',
+        id:'纾ㄨ竟鍓嶇悊鐗囩琛↖D',
+        updateTime:'鏇存柊鏃堕棿',
+        place:'鏄惁鍒颁綅',
+        layernow:'褰撳墠灞傚彿',
         gridnumber: '携褔械械泻 褋械褌泻谢邪',
         glassnumber: '袧芯屑械褉 褋褌邪泻谢邪',
         width: '楔懈褉懈薪邪',
diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
index f22fe3c..7bb85de 100644
--- a/UI-Project/src/lang/zh.js
+++ b/UI-Project/src/lang/zh.js
@@ -87,6 +87,20 @@
           layoutSequence:'搴忓彿',
       },
       sorter:{
+          inPlace:'鍒颁綅',
+          ninPlace:'鏈埌浣�',
+          emptymissions:'绌轰换鍔�',
+          advancetask:'杩涚墖浠诲姟',
+          outputtasks:'鍑虹墖浠诲姟',
+          straighttasks:'鐩撮�氫换鍔�',
+          endingtask:'缁撴潫',
+          another:'鍏朵粬',
+          id:'纾ㄨ竟鍓嶇悊鐗囩琛↖D',
+          remainWidth:'鍓╀綑',
+          taskRunning:'浠诲姟璇锋眰',
+          updateTime:'鏇存柊鏃堕棿',
+          place:'鏄惁鍒颁綅',
+          layernow:'褰撳墠灞傚彿',
           gridnumber:'鏍呮牸鍙�',
           glassnumber:'鐜荤拑缂栧彿',
           width:'瀹�',
diff --git a/UI-Project/src/router/index.js b/UI-Project/src/router/index.js
index 9643500..d750e60 100644
--- a/UI-Project/src/router/index.js
+++ b/UI-Project/src/router/index.js
@@ -46,11 +46,6 @@
         component: () => import('../views/Returns/return.vue'),
         children:[
           {
-            path: '/Returns/returns',
-            name: 'returns',
-            component: () => import('../views/Returns/returns.vue')
-          },
-          {
             path: '/Returns/upreturns',
             name: 'upreturns',
             component: () => import('../views/Returns/upreturns.vue')
@@ -95,11 +90,6 @@
         path: '/Caching/cachingun',
         name: 'cachingun',
         component: () => import('../views/Caching/cachingun.vue')
-      },
-      {
-        path: '/Caching/cachingyiwu',
-        name: 'cachingyiwu',
-        component: () => import('../views/Caching/cachingyiwu.vue')
       },
     ]
   },
diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue
index f97f343..19d921e 100644
--- a/UI-Project/src/views/Caching/cachingbefore.vue
+++ b/UI-Project/src/views/Caching/cachingbefore.vue
@@ -8,77 +8,115 @@
 import {useI18n} from 'vue-i18n'
 const {t} = useI18n()
 let language = ref(localStorage.getItem('lang') || 'zh')
-const tableData = ref([])
-const slot = ref('')
+const tableDataa = ref([])
+const tableDatab = ref([])
 const adjustedRects = ref([]);
-onMounted(async () => {
-  try {
-    const response = await request.post('/cacheGlass/edgStorageCage/selectEdgStorageCage');
-    if (response.code === 200) {
-      const rawRects = response.data;
-      tableData.value = response.data
-      adjustedRects.value = rawRects.map(rect => ({
-        ...rect,
-        width: rect.width * 0.5 ,
-        id: rect.id * 10,
-      }));
-    } else {  
-      ElMessage.warning(res.msg)
-    }  
-  } catch (error) {  
-    // console.error('Error fetching rects :', error);  
-  }  
-}); 
-const toggleEnableState = async (row) => {  
-  const newState = row.enable_state === 1 ? 0 : 1;
-  const response = await request.post('/cacheGlass/edgStorageCage/updateEdgStorageCage', { id: row.id, enableState: newState });  
-  if (response.code === 200) {
-      ElMessage.success(response.message);
-      } else {  
-      ElMessage.error(response.message);
-      }  
-  row.enable_state = newState;   
-}; 
-const open = async(row) => {
-  try {
-    const confirmResult = await ElMessageBox.confirm(  
-      t('sorter.information'), 
-      t('sorter.prompt'),  
-      {  
-        confirmButtonText: t('sorter.yes'), 
-        cancelButtonText: t('sorter.cancel'),
-        type: 'warning',  
-      } 
-    );  
-    if (confirmResult === 'confirm') {  
-      var url="/cacheGlass/edgStorageCage/edgStorageCageGlass?edgStorageCageId="+row.id;
-      const response = await request.post(url, {
-        glassId:row.glass_id
-    })
-    if (response.code === 200) {
-      ElMessage.success(response.message);
-      } else {  
-      ElMessage.error(response.msg);
-      }  
-    }  
-  } catch (error) {  
-    console.error('鍙戠敓閿欒:', error);  
-  }  
-};   
 let socket = null;
-const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
+const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassOne`;
 const handleMessage = (data) => {
-  tableData.value = data.EdgStorageCageinfos[0]
-  adjustedRects.value = data.EdgStorageCageinfos[0].map(rect => ({  
-      ...rect,
-      width: rect.width * 0.5 ,
-      id: rect.id * 10,
-    })); 
+  const cageInfo = data.taskMessage[0];
+  if (cageInfo && cageInfo.createTime) {
+    cageInfo.formattedCreateTime = formatTimestamp(cageInfo.createTime);
+  }
+  if (cageInfo && cageInfo.updateTime) {
+    cageInfo.formattedupdateTime = formatTimestamp(cageInfo.updateTime);
+  }
+  tableDataa.value = data.EdgStorageCageinfos[0]
+  tableDatab.value = data.taskMessage
+  // adjustedRects.value = data.EdgStorageCageinfos[0].map(rect => ({  
+  //     ...rect,
+  //     width: rect.width * 0.5 ,
+  //     id: rect.id * 10,
+  //   })); 
 };
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
   socket = initializeWebSocket(socketUrl, handleMessage);
 });
+function getStatusTypea(taskRunning) {
+  switch (taskRunning) {
+    case 0:
+      return 'info';
+    case 1:
+      return 'success';
+    case 2:
+      return 'success';
+    case 3:
+      return 'success';
+    case 4:
+      return 'success';
+    case 5:
+      return 'danger';
+    case 6:
+      return 'info';
+  }
+}
+function getStatusTexta(taskRunning) {
+  switch (taskRunning) {
+    case 0:
+      return t('sorter.emptymissions');
+    case 1:
+      return t('sorter.advancetask');
+    case 2:
+      return t('sorter.outputtasks');
+    case 3:
+      return t('sorter.straighttasks');
+    case 4:
+      return t('searchOrder.infilm');
+    case 5:
+      return t('sorter.endingtask');
+    case 6:
+      return t('sorter.another');
+  }
+}
+function getStatusTypeb(taskState) {
+  switch (taskState) {
+    case 0:
+      return 'info';
+    case 1:
+      return 'success';
+    case 2:
+      return 'success';
+    case 3:
+      return 'success';
+    case 4:
+      return 'success';
+    case 5:
+      return 'danger';
+    case 6:
+      return 'info';
+  }
+}
+function getStatusTextb(taskState) {
+  switch (taskState) {
+    case 0:
+      return t('sorter.emptymissions');
+    case 1:
+      return t('sorter.advancetask');
+    case 2:
+      return t('sorter.outputtasks');
+    case 3:
+      return t('sorter.straighttasks');
+    case 4:
+      return t('searchOrder.infilm');
+    case 5:
+      return t('sorter.endingtask');
+    case 6:
+      return t('sorter.another');
+  }
+}
+// 鏍煎紡鍖栨椂闂存埑涓哄勾鏈堟棩鏃堕棿瀛楃涓茬殑鍑芥暟
+function formatTimestamp(timestamp) {
+  const date = new Date(timestamp);
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮嬶紝闇�瑕佸姞1锛屽苟琛ラ浂
+  const day = String(date.getDate()).padStart(2, '0'); // 琛ラ浂
+  const hours = String(date.getHours()).padStart(2, '0'); // 琛ラ浂锛堝鏋滈渶瑕佹樉绀烘椂闂达級
+  const minutes = String(date.getMinutes()).padStart(2, '0'); // 琛ラ浂锛堝鏋滈渶瑕佹樉绀烘椂闂达級
+  const seconds = String(date.getSeconds()).padStart(2, '0'); // 琛ラ浂锛堝鏋滈渶瑕佹樉绀烘椂闂达級
+  // 鍙樉绀哄勾鏈堟棩锛屽鏋滈渶瑕佹樉绀烘椂闂达紝鍒欐嫾鎺� hours + ':' + minutes + ':' + seconds
+  return `${year}-${month}-${day}`;
+}
   onUnmounted(() => {
     if (socket) {
     closeWebSocket(socket);
@@ -93,41 +131,84 @@
   <div style="height: 500px;">
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="340" ref="table" 
+        <el-table height="300" ref="table" 
         @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+        :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="id" align="center" :label="$t('sorter.id')" min-width="80" />
+          <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="80" />
           <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
-          <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" />
-          <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" />
-          <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" />
           <el-table-column
             align="center"
             :label="$t('sorter.startstatus')"
             min-width="80"
-            prop="enable_state"
+            prop="enableState"
+          >
+          <template #default="scope">
+            <el-tag
+              :type="scope.row.enableState === 1 ? 'success' : 'warning'"
+            >
+              {{ scope.row.enableState === 1 ? $t('sorter.start') : $t('sorter.disable') }}
+            </el-tag>
+          </template>
+      </el-table-column>
+          <el-table-column prop="remainWidth" align="center" :label="$t('sorter.remainWidth')" min-width="80" />
+        </el-table>
+      </div>
+      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;margin-top: 15px;">
+        <el-table height="90" ref="table" 
+        @selection-change="handleSelectionChange"
+        :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" />
+          <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" />
+          <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" />
+          <el-table-column
+            align="center"
+            :label="$t('sorter.place')"
+            min-width="80"
+            prop="inPlace"
+          >
+          <template #default="scope">
+            <el-tag
+              :type="scope.row.inPlace === 1 ? 'success' : 'warning'"
+            >
+              {{ scope.row.inPlace === 1 ? $t('sorter.inPlace') : $t('sorter.ninPlace') }}
+            </el-tag>
+          </template>
+      </el-table-column>
+          <el-table-column
+            align="center"
+            :label="$t('sorter.taskRunning')"
+            min-width="80"
+            prop="taskRunning"
           >
           <template #default="scope">  
-          <el-tag  
-            :type="scope.row.enable_state === 1 ? 'success' : 'danger'"  
-            @click="toggleEnableState(scope.row)"  
-          >  
-            {{ scope.row.enable_state === 1 ?  $t('sorter.start') : $t('sorter.disable') }}
-          </el-tag>  
-        </template>
+        <el-tag :type="getStatusTypea(scope.row.taskRunning)">  
+          {{ getStatusTexta(scope.row.taskRunning) }}  
+        </el-tag>  
+      </template> 
           </el-table-column>
-          <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200">
-            <template #default="scope">
-              <el-button size="mini" type="text" plain  @click="open(scope.row)">{{ $t('sorter.deficiencieste') }}</el-button>
-            </template>
-        </el-table-column>
+          <el-table-column
+            align="center"
+            :label="$t('film.taskstatus')"
+            min-width="80"
+            prop="taskState"
+          >
+          <template #default="scope">  
+        <el-tag :type="getStatusTypeb(scope.row.taskState)">  
+          {{ getStatusTextb(scope.row.taskState) }}  
+        </el-tag>  
+      </template> 
+          </el-table-column>
+          <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="120" />
+          <el-table-column prop="formattedupdateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" />
         </el-table>
       </div>
     </el-card>
   <div class="awatch">
-    <img src="../../assets/woshihuancun.png" alt="" style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;"> 
+    <img src="../../assets/woshihuancun.png" alt="" style="width: 50%;height: 70%;margin-left: 30%;margin-top: 20px;position: relative;"> 
     <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
     <div  
-      v-for="(rect, index) in adjustedRects"  
+      v-for="(rect, index) in adjustedRects"
       :key="rect"  
       :style="{ position: 'absolute', 
        top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue
index e6ac037..334ccf1 100644
--- a/UI-Project/src/views/Caching/cachingun.vue
+++ b/UI-Project/src/views/Caching/cachingun.vue
@@ -1,200 +1,244 @@
-<template>
-  <div style="height: 500px;">
-    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
-      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="340" ref="table" @selection-change="handleSelectionChange" :data="tableData"
-          :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
-          <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
-          <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80" />
-          <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120" />
-          <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120" />
-          <el-table-column align="center" :label="$t('sorter.startstatus')" min-width="80" prop="enable_state">
-            <template #default="scope">
-              <el-tag :type="scope.row.enable_state === 1 ? 'success' : 'danger'" @click="toggleEnableState(scope.row)">
-                {{ scope.row.enable_state === 1 ? $t('sorter.start') : $t('sorter.disable') }}
-              </el-tag>
-            </template>
-          </el-table-column>
-          <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200">
-            <template #default="scope">
-              <el-button size="mini" type="text" plain @click="open(scope.row)">{{ $t('sorter.deficiencieste')
-                }}</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">{{ $t('sorter.updown') }}</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-    </el-card>
-    <div class="awatch">
-      <img src="../../assets/woshihuancun.png" alt=""
-        style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;">
-      <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
-        <div v-for="(rect, index) in adjustedRects" :key="rect" :style="{
-      position: 'absolute',
-      top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
-      backgroundColor: '#409EFF'
-    }">
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
 <script setup>
-import { Search, Lock, Avatar } from "@element-plus/icons-vue";
-import { reactive } from "vue";
-import { useRouter } from "vue-router"
-const router = useRouter()
-import { WebSocketHost, host } from '@/utils/constants'
+import {onBeforeUnmount, onMounted, onUnmounted, ref} from "vue";
+import {useRouter} from "vue-router"
+import {host, WebSocketHost} from '@/utils/constants'
 import request from "@/utils/request"
-import { ref, onMounted, onBeforeUnmount, onUnmounted } from "vue";
-import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
-import { ElMessage, ElMessageBox } from 'element-plus'
-import { useI18n } from 'vue-i18n'
-const { t } = useI18n()
-const tableData = reactive([]);
-const slot = ref('')
+import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
+import {ElMessage, ElMessageBox} from 'element-plus'
+import {useI18n} from 'vue-i18n'
+const {t} = useI18n()
+let language = ref(localStorage.getItem('lang') || 'zh')
+const tableDataa = ref([])
+const tableDatab = ref([])
 const adjustedRects = ref([]);
-onMounted(async () => {
-  try {
-    const response = await request.get('/unLoadGlass/downStorage/selectStorageCage');
-    if (response.code === 200) {
-      const rawRects = response.data;
-      tableData.value = response.data
-      console.log(response.data);
-      adjustedRects.value = rawRects.map(rect => ({
-        ...rect,
-        width: rect.width * 0.5,
-        id: rect.id * 10,
-      }));
-      console.log(adjustedRects.value);
-    } else {
-      ElMessage.warning(res.msg)
-    }
-  } catch (error) {
-    // console.error('Error fetching rects :', error);  
-  }
-});
-const open = async (row) => {
-  try {
-    const confirmResult = await ElMessageBox.confirm(
-      t('sorter.information'),
-      t('sorter.prompt'),
-      {
-        confirmButtonText: t('sorter.yes'),
-        cancelButtonText: t('sorter.cancel'),
-        type: 'warning',
-      }
-    );
-    if (confirmResult === 'confirm') {
-      var url = "/unLoadGlass/downStorage/deleteDownStorageCage";
-      console.log(url);
-      const response = await request.post(url, {
-        glassId: row.glass_id,
-        state: 9,
-        line: 1001,
-        workingProcedure: '纾ㄨ竟',
-    })
-    if (response.code === 200) {
-      ElMessage.success(response.message);
-    } else {
-      ElMessage.error(response.message);
-    }
-  }  
-  } 
-  catch (error) {
-  console.error('鍙戠敓閿欒:', error);
-}  
-};
-// 浜哄伐涓嬬墖
-const opena = async (row) => {
-  try {
-    const confirmResult = await ElMessageBox.confirm(
-      t('sorter.infor'),
-      t('sorter.prompt'),
-      {
-        confirmButtonText: t('sorter.yes'),
-        cancelButtonText: t('sorter.cancel'),
-        type: 'warning',
-      }
-    );
-    if (confirmResult === 'confirm') {
-      const response = await request.post("/unLoadGlass/downGlassTask/generateOutGlassTask", {
-        glassId: row.glass_id
-      })
-      if (response.code === 200) {
-        ElMessage.success(response.message);
-      } else {
-        ElMessage.error(response.message);
-      }
-    }
-  }
-  catch (error) {
-    console.error('鍙戠敓閿欒:', error);
-  }
-};
-const toggleEnableState = async (row) => {
-  const newState = row.enable_state === 1 ? 0 : 1;
-  const response = await request.post('/unLoadGlass/downStorage/updateDownStorageCage', { id: row.id, enableState: newState });
-  if (response.code === 200) {
-    ElMessage.success(response.message);
-  } else {
-    ElMessage.error(response.message);
-  }
-  row.enable_state = newState;
-};
 let socket = null;
-const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/downcache`;
+const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlassTwo`;
 const handleMessage = (data) => {
-  tableData.splice(0, tableData.length, ...data.params2[0]);
-  adjustedRects.value = data.params2[0].map(rect => ({
-    ...rect,
-    width: rect.width * 0.5,
-    id: rect.id * 10,
-  }));
+  const cageInfo = data.taskMessage[0];
+  if (cageInfo && cageInfo.createTime) {
+    cageInfo.formattedCreateTime = formatTimestamp(cageInfo.createTime);
+  }
+  if (cageInfo && cageInfo.updateTime) {
+    cageInfo.formattedupdateTime = formatTimestamp(cageInfo.updateTime);
+  }
+  tableDataa.value = data.EdgStorageCageinfos[0]
+  tableDatab.value = data.taskMessage
+  // adjustedRects.value = data.EdgStorageCageinfos[0].map(rect => ({  
+  //     ...rect,
+  //     width: rect.width * 0.5 ,
+  //     id: rect.id * 10,
+  //   })); 
 };
+// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
   socket = initializeWebSocket(socketUrl, handleMessage);
 });
-onUnmounted(() => {
-  if (socket) {
-    closeWebSocket(socket);
+function getStatusTypea(taskRunning) {
+  switch (taskRunning) {
+    case 0:
+      return 'info';
+    case 1:
+      return 'success';
+    case 2:
+      return 'success';
+    case 3:
+      return 'success';
+    case 4:
+      return 'success';
+    case 5:
+      return 'danger';
+    case 6:
+      return 'info';
   }
-});
+}
+function getStatusTexta(taskRunning) {
+  switch (taskRunning) {
+    case 0:
+      return t('sorter.emptymissions');
+    case 1:
+      return t('sorter.advancetask');
+    case 2:
+      return t('sorter.outputtasks');
+    case 3:
+      return t('sorter.straighttasks');
+    case 4:
+      return t('searchOrder.infilm');
+    case 5:
+      return t('sorter.endingtask');
+    case 6:
+      return t('sorter.another');
+  }
+}
+function getStatusTypeb(taskState) {
+  switch (taskState) {
+    case 0:
+      return 'info';
+    case 1:
+      return 'success';
+    case 2:
+      return 'success';
+    case 3:
+      return 'success';
+    case 4:
+      return 'success';
+    case 5:
+      return 'danger';
+    case 6:
+      return 'info';
+  }
+}
+function getStatusTextb(taskState) {
+  switch (taskState) {
+    case 0:
+      return t('sorter.emptymissions');
+    case 1:
+      return t('sorter.advancetask');
+    case 2:
+      return t('sorter.outputtasks');
+    case 3:
+      return t('sorter.straighttasks');
+    case 4:
+      return t('searchOrder.infilm');
+    case 5:
+      return t('sorter.endingtask');
+    case 6:
+      return t('sorter.another');
+  }
+}
+// 鏍煎紡鍖栨椂闂存埑涓哄勾鏈堟棩鏃堕棿瀛楃涓茬殑鍑芥暟
+function formatTimestamp(timestamp) {
+  const date = new Date(timestamp);
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮嬶紝闇�瑕佸姞1锛屽苟琛ラ浂
+  const day = String(date.getDate()).padStart(2, '0'); // 琛ラ浂
+  const hours = String(date.getHours()).padStart(2, '0'); // 琛ラ浂锛堝鏋滈渶瑕佹樉绀烘椂闂达級
+  const minutes = String(date.getMinutes()).padStart(2, '0'); // 琛ラ浂锛堝鏋滈渶瑕佹樉绀烘椂闂达級
+  const seconds = String(date.getSeconds()).padStart(2, '0'); // 琛ラ浂锛堝鏋滈渶瑕佹樉绀烘椂闂达級
+  // 鍙樉绀哄勾鏈堟棩锛屽鏋滈渶瑕佹樉绀烘椂闂达紝鍒欐嫾鎺� hours + ':' + minutes + ':' + seconds
+  return `${year}-${month}-${day}`;
+}
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 </script>
+<template>
+  <div style="height: 500px;">
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
+      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
+        <el-table height="300" ref="table" 
+        @selection-change="handleSelectionChange"
+        :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="id" align="center" :label="$t('sorter.id')" min-width="80" />
+          <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.tid')" min-width="80" />
+          <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80" />
+          <el-table-column
+            align="center"
+            :label="$t('sorter.startstatus')"
+            min-width="80"
+            prop="enableState"
+          >
+          <template #default="scope">
+            <el-tag
+              :type="scope.row.enableState === 1 ? 'success' : 'warning'"
+            >
+              {{ scope.row.enableState === 1 ? $t('sorter.start') : $t('sorter.disable') }}
+            </el-tag>
+          </template>
+      </el-table-column>
+          <el-table-column prop="remainWidth" align="center" :label="$t('sorter.remainWidth')" min-width="80" />
+        </el-table>
+      </div>
+      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;margin-top: 15px;">
+        <el-table height="90" ref="table" 
+        @selection-change="handleSelectionChange"
+        :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="glassIdOut" align="center" :label="$t('searchOrder.outputglassID')" min-width="80" />
+          <el-table-column prop="currentCell" align="center" :label="$t('sorter.layernow')" min-width="80" />
+          <el-table-column prop="startCell" align="center" :label="$t('processCard.layer')" min-width="120" />
+          <el-table-column
+            align="center"
+            :label="$t('sorter.place')"
+            min-width="80"
+            prop="inPlace"
+          >
+          <template #default="scope">
+            <el-tag
+              :type="scope.row.inPlace === 1 ? 'success' : 'warning'"
+            >
+              {{ scope.row.inPlace === 1 ? $t('sorter.inPlace') : $t('sorter.ninPlace') }}
+            </el-tag>
+          </template>
+      </el-table-column>
+          <el-table-column
+            align="center"
+            :label="$t('sorter.taskRunning')"
+            min-width="80"
+            prop="taskRunning"
+          >
+          <template #default="scope">  
+        <el-tag :type="getStatusTypea(scope.row.taskRunning)">  
+          {{ getStatusTexta(scope.row.taskRunning) }}  
+        </el-tag>  
+      </template> 
+          </el-table-column>
+          <el-table-column
+            align="center"
+            :label="$t('film.taskstatus')"
+            min-width="80"
+            prop="taskState"
+          >
+          <template #default="scope">  
+        <el-tag :type="getStatusTypeb(scope.row.taskState)">  
+          {{ getStatusTextb(scope.row.taskState) }}  
+        </el-tag>  
+      </template> 
+          </el-table-column>
+          <el-table-column prop="formattedCreateTime" align="center" :label="$t('film.createtime')" min-width="120" />
+          <el-table-column prop="formattedupdateTime" align="center" :label="$t('sorter.updateTime')" min-width="120" />
+        </el-table>
+      </div>
+    </el-card>
+  <div class="awatch">
+    <img src="../../assets/woshihuancun.png" alt="" style="width: 50%;height: 70%;margin-left: 30%;margin-top: 20px;position: relative;"> 
+    <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
+    <div  
+      v-for="(rect, index) in adjustedRects"
+      :key="rect"  
+      :style="{ position: 'absolute', 
+       top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
+      backgroundColor: '#409EFF'
+       }"  
+    >
+  </div>
+  </div>
+</div>
+</div>
+</template>
 <style scoped>
-#dt {
-  display: block;
-  float: left;
-  line-height: 20px;
-  margin-left: 100px;
-}
-#dta {
-  display: block;
-  float: left;
-  line-height: 20px;
-  margin-left: 80%;
-}
-#dialog-footer {
+#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
+#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
+#dialog-footer{
   text-align: center;
   margin-top: -15px;
 }
-#message {
+#message{
   text-align: center;
   align-items: center;
   color: black;
-  width: 200px;
-  height: 100px;
-  background-color: #337ecc;
-  margin-left: 28%;
+   width: 200px;
+   height: 100px;
+   background-color: #337ecc;
+   margin-left: 28%;
 }
-.awatch {
+.awatch{
   height: 460px;
   width: 1500px;
   max-width: 100%;
-  /* margin-top: -60px; */
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/UI-Project/src/views/Caching/cachingyiwu.vue b/UI-Project/src/views/Caching/cachingyiwu.vue
deleted file mode 100644
index 8391db9..0000000
--- a/UI-Project/src/views/Caching/cachingyiwu.vue
+++ /dev/null
@@ -1,184 +0,0 @@
-<script setup>
-import {onBeforeUnmount, onMounted, onUnmounted, ref} from "vue";
-import {useRouter} from "vue-router"
-import {host, WebSocketHost} from '@/utils/constants'
-
-import request from "@/utils/request"
-import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
-import {ElMessage, ElMessageBox} from 'element-plus'
-import {useI18n} from 'vue-i18n'
-const router = useRouter()
-const {t} = useI18n()
-let language = ref(localStorage.getItem('lang') || 'zh')
-const tableData = ref([])
-const slot = ref('')
-const adjustedRects = ref([]);
-onMounted(async () => {
-  try {
-    const response = await request.post('/cacheGlass/edgStorageCage/selectEdgStorageCage');
-    if (response.code === 200) {
-      const rawRects = response.data;
-      tableData.value = response.data
-      console.log(response.data);
-      adjustedRects.value = rawRects.map(rect => ({
-        ...rect,
-        width: rect.width * 0.5,
-        id: rect.id * 10,
-      }));
-      console.log(adjustedRects.value);
-    } else {
-      ElMessage.warning(res.msg)
-    }
-  } catch (error) {
-    // console.error('Error fetching rects :', error);  
-  }
-});
-const toggleEnableState = async (row) => {
-  const newState = row.enable_state === 1 ? 0 : 1;
-  const response = await request.post('/cacheGlass/edgStorageCage/updateEdgStorageCage', {
-    id: row.id,
-    enableState: newState
-  });
-  if (response.code === 200) {
-    ElMessage.success(response.message);
-  } else {
-    ElMessage.error(response.message);
-  }
-  row.enable_state = newState;
-};
-const open = async (row) => {
-  try {
-    const confirmResult = await ElMessageBox.confirm(
-        t('sorter.information'),
-        t('sorter.prompt'),
-        {
-          confirmButtonText: t('sorter.yes'),
-          cancelButtonText: t('sorter.cancel'),
-          type: 'warning',
-        }
-    );
-    if (confirmResult === 'confirm') {
-      var url = "/cacheGlass/edgStorageCage/edgStorageCageGlass?edgStorageCageId=" + row.id;
-      console.log(row);
-      const response = await request.post(url, {
-        glassId: row.glass_id
-      })
-      if (response.code === 200) {
-        ElMessage.success(response.message);
-      } else {
-        ElMessage.error(response.msg);
-      }
-    }
-  } catch (error) {
-    console.error('鍙戠敓閿欒:', error);
-  }
-};
-let socket = null;
-const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
-const handleMessage = (data) => {
-  tableData.value = data.EdgStorageCageinfos[0]
-  adjustedRects.value = data.EdgStorageCageinfos[0].map(rect => ({
-    ...rect,
-    width: rect.width * 0.5,
-    id: rect.id * 10,
-  }));
-};
-onMounted(() => {
-  socket = initializeWebSocket(socketUrl, handleMessage);
-});
-onUnmounted(() => {
-  if (socket) {
-    closeWebSocket(socket);
-  }
-});
-onBeforeUnmount(() => {
-  console.log("鍏抽棴浜�")
-  closeWebSocket();
-});
-</script>
-<template>
-  <div style="height: 500px;">
-    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
-      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-        <el-table height="340" ref="table"
-           @selection-change="handleSelectionChange"
-           :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="slot" align="center" :label="$t('sorter.gridnumber')" min-width="80"/>
-          <el-table-column prop="glass_id" align="center" :label="$t('sorter.glassnumber')" min-width="80"/>
-          <el-table-column prop="width" align="center" :label="$t('sorter.width')" min-width="120"/>
-          <el-table-column prop="height" align="center" :label="$t('sorter.height')" min-width="120"/>
-          <el-table-column
-              align="center"
-              :label="$t('sorter.startstatus')"
-              min-width="80"
-              prop="enable_state"
-          >
-            <template #default="scope">
-              <el-tag
-                  :type="scope.row.enable_state === 1 ? 'success' : 'danger'"
-                  @click="toggleEnableState(scope.row)"
-              >
-                {{ scope.row.enable_state === 1 ? $t('sorter.start') : $t('sorter.disable') }}
-              </el-tag>
-            </template>
-          </el-table-column>
-          <el-table-column fixed="right" :label="$t('sorter.operate')" align="center" width="200">
-            <template #default="scope">
-              <el-button size="mini" type="text" plain @click="open(scope.row)">{{
-                  $t('sorter.deficiencieste')
-                }}
-              </el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-    </el-card>
-    <div class="awatch">
-      <img src="../../assets/woshihuancun.png" alt=""
-           style="width: 70%;height: 90%;margin-left: 200px;margin-top: 20px;position: relative;">
-      <div style="position: relative; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
-        <div
-            v-for="(rect, index) in adjustedRects"
-            :key="rect"
-            :style="{ position: 'absolute',
-       top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
-      backgroundColor: '#409EFF'
-       }"
-        >
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-<style scoped>
-#dt {
-  display: block;
-  float: left;
-  line-height: 20px;
-  margin-left: 100px;
-}
-#dta {
-  display: block;
-  float: left;
-  line-height: 20px;
-  margin-left: 80%;
-}
-#dialog-footer {
-  text-align: center;
-  margin-top: -15px;
-}
-#message {
-  text-align: center;
-  align-items: center;
-  color: black;
-  width: 200px;
-  height: 100px;
-  background-color: #337ecc;
-  margin-left: 28%;
-}
-.awatch {
-  height: 460px;
-  width: 1500px;
-  max-width: 100%;
-}
-</style>
diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue
deleted file mode 100644
index 3ac8c56..0000000
--- a/UI-Project/src/views/Returns/returns.vue
+++ /dev/null
@@ -1,958 +0,0 @@
-<script lang="ts" setup>
-import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from "vue";
-import {useRouter} from "vue-router"
-import {ElMessage} from 'element-plus'
-import {useI18n} from 'vue-i18n'
-import {host, WebSocketHost} from '@/utils/constants'
-import request from "@/utils/request"
-import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
-const router = useRouter()
-const {t} = useI18n()
-const dialogFormVisible = ref(false)
-const blind = ref(false)
-const blinda = ref(false)
-const blindb = ref(false)
-const add = ref(false)
-const adda = ref(false)
-const flake = ref(false)
-const flakea = ref(false)
-const flakeb = ref(false)
-const flakec = ref(false)
-const dialoglea = ref(false)
-const tableDatax = ref([])
-const user = ref('');
-const projectNo = ref('');
-const workstationId = ref('');
-const id = ref('');
-const patternHeight = ref('');
-const patternWidth = ref('');
-const filmsId = ref('');
-const patternThickness = ref('');
-const number = ref('');
-const canSelectProject = ref(true);
-const canStartLoading = ref(false);
-const ida = ref(null);
-const selectedProjectNo = ref('');
-const selectedProjectNoa = ref('');
-const selectedValue = ref('');
-const selectedValuea = ref('');
-const selectedValueb = ref('');
-const selectedValuec = ref('');
-const upstatus = ref(t('basicData.machineaa'));
-const cuttingMachine = ref('');
-const cuttingMachineStatusColor = ref('#911005'); // 鐢ㄤ簬鍔ㄦ�佽缃甶鏍囩鐨勮儗鏅壊 
-const inKageWord = ref(0); // 鐢ㄤ簬瀛樺偍瑕佷紶閫掔粰鎺ュ彛鐨刬nKageWord鍊� 
-const options = ref<any[]>([]);
-const selectOptions = ref<Array<any>>([]);
-const selectOptionsa = ref<Array<any>>([]);
-const selectOptionsb = ref<Array<any>>([]);
-const selectOptionsc = ref<Array<any>>([]);
-const tableDataa = ref([])
-const tableData = reactive([]);
-const fetchTableData = async () => {
-  try {
-    const response = await request.get("/loadGlass/up-patten-usage/prioritylist");
-    if (response.code === 200) {
-      console.log('鎴愬姛鑾峰彇琛ㄦ牸鏁版嵁:', response.data);
-      tableData.splice(0, tableData.length, ...response.data);
-      const uniqueWidths = new Set(response.data.map(item => item.width));
-      const uniqueHeights = new Set(response.data.map(item => item.height));
-      const uniqueFilmsIds = new Set(response.data.map(item => item.filmsId));
-      const uniqueThicknesses = new Set(response.data.map(item => item.thickness));  
-      selectOptions.value = Array.from(uniqueWidths).map(width => ({
-        value: width,
-        label: width,
-      }));
-      selectOptionsa.value = Array.from(uniqueHeights).map(height => ({ 
-      value: height, 
-      label: height, 
-    })); 
-    selectOptionsb.value = Array.from(uniqueFilmsIds).map(filmsId => ({
-      value: filmsId,
-      label: filmsId, 
-    })); 
-    selectOptionsc.value = Array.from(uniqueThicknesses).map(thickness => ({
-      value: thickness,
-      label: thickness,  
-    })); 
-    } else {
-      ElMessage.error(response.message);
-    }
-  } catch (error) {
-    // ElMessage.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触锛岃閲嶈瘯');
-  }
-};
-const handlezhiban = () => {
-  dialoglea.value = true;
-  fetchFlowCardId(); 
-};
-const selectproject = () => {
-  dialogFormVisible.value = true;
-  selectgong();
-};
-// 鍒犻櫎
-const handledelete = (row) => {
-  blindb.value = true;
-};
-// 鍊肩彮淇℃伅
-const fetchFlowCardId = async () => {
-  try  {
-    const response = await request.post('/loadGlass/work_assignment/selectWorkAssignment',{
-      line: 2001,
-      workingProcedure : '鍐峰姞宸�'
-    })
-    if (response.code == 200) {
-      ElMessage.success(response.message);
-      tableDatax.value = response.data;
-    } else {
-      ElMessage.error(response.message);
-    }
-}
-catch (error) {
-    console.error(error);
-  }
-}
-// 鍒犻櫎
-const deleteTask = async () => {
-  try {
-    let engineeringId = window.localStorage.getItem('engineeringId')
-    console.log(engineeringId);
-    if (engineeringId !== '') {
-      const response = await request.post('/loadGlass/engineering/engineering/deleteTask', {
-        engineerId: engineeringId,
-      })
-      if (response.code == 200) {
-        ElMessage.success(response.message);
-        blindb.value = false;
-      } else {
-        ElMessage.error(response.message);
-    }
-  }
-    else  {
-      ElMessage({
-        type: 'info',
-        message: t('basicData.infonull'),
-      })
-    }
-}
-catch (error) {
-    console.error(error);
-  }
-}
-const handleConfirmb = async () => {
-  const response = await request.post("/loadGlass/work_assignment/updateWorkAssignment", tableDatax.value)
-  if (response.code === 200) {
-    ElMessage.success(response.message);
-    dialoglea.value = false;
-  } else {
-    ElMessage.error(response.message);
-  }
-};
-onMounted(() => {
-  list('');
-  fetchOptions('');
-  socket = initializeWebSocket(socketUrl, handleMessage);
-});
-onUnmounted(() => {
-  if (socket) {
-    closeWebSocket(socket);
-  }
-});
-const list = async () => {  
-  try {  
-    const response = await request.get('/loadGlass/LoadGlass/list');  
-    if (response.code == 200) {  
-      tableDataa.value = response.data
-          if (tableDataa.value.length === 4) {
-          if (tableDataa.value[0].patternHeight > 0 && tableDataa.value[0].patternWidth > 0 && tableDataa.value[0].number > 0) {
-          flake.value = true;
-          }
-         if (tableDataa.value[1].patternHeight > 0 && tableDataa.value[1].patternWidth > 0 && tableDataa.value[1].number > 0) {
-          flakea.value = true;
-          } 
-         if (tableDataa.value[2].patternHeight > 0 && tableDataa.value[2].patternWidth > 0 && tableDataa.value[2].number > 0) {
-          flakeb.value = true;
-          } 
-         if (tableDataa.value[3].patternHeight > 0 && tableDataa.value[3].patternWidth > 0 && tableDataa.value[3].number > 0) {
-          flakec.value = true;
-          } 
-           }
-    } else {  
-      ElMessage.warning(response.data);  
-    }  
-  } catch (error) {  
-    console.error('Error fetching options:', error);  
-  }  
-}; 
-const titleSelectJson = ref({
-  processType: [],
-})
-const titleSelectJsona = ref({
-  processTypea: [],
-})
-let socket = null;
-const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
-const handleMessage = (data) => {
-  if(data.prioritylist!=null){
-  tableData.splice(0, tableData.length, ...data.prioritylist[0]);
-  }
-  if(data.list!=null){
-  tableDataa.value = data.list[0]
-  }
-  if(data.engineering ){
-    if ( Array.isArray(data.engineering) && data.engineering.length !== 0) {  
-    canSelectProject.value = false;
-    canStartLoading.value = true;
-  }else{
-      canSelectProject.value = true;
-      canStartLoading.value = false;
-  }
-}
-if (data.InkageStatus) {
-if(data.InkageStatus!=null){
-      const status = data.InkageStatus[0]; 
-      cuttingMachine.value = status; 
-      upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa');
-      cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005';  
-      inKageWord.value = status === '1' ? 0 : 1;  
-}
-}
-};
-const requestData = {  
-  state: 100  
-};  
-const selectgong = async (queryString: string) => {
-  try  {
-    const response = await request.post('/loadGlass/optimizeProject/listByState',{
-      ...requestData,
-      projectNo: queryString
-    })
-    if (response.code == 200) {
-      titleSelectJson.value.processType = response.data;
-    } else {
-      ElMessage.error(response.message);
-    }
-}
-catch (error) {
-    console.error(error);
-  }
-}
-const fetchOptions = async (queryString: string) => {
-  try {
-    const response = await request.post('/loadGlass/optimizeProject/listByState', {
-      ...requestData,
-      query: queryString
-    });
-    if (response.code == 200) {
-      // titleSelectJson.value.processType = response.data;
-      console.log(response.data);
-    } else {
-      ElMessage.warning(response.data);
-    }  
-  } catch (error) {  
-    console.error('Error fetching options:', error);  
-  }  
-};
-// 澶勭悊鐢ㄦ埛杈撳叆鍙樺寲鐨勬柟娉�  
-const handleInputChange = async (value: string) => {  
-  if (value) {  
-    await fetchOptions(value);  
-  } else {
-    options.value = [];
-  }  
-};
-const handleInputChangea = async (value: string) => {  
-  if (value) {  
-    await fetchOptionsa(value);  
-  } else {  
-    options.value = [];
-  }  
-};  
-onBeforeUnmount(() => {
-  closeWebSocket();
-});
-// 娣诲姞
-const handleBindRack = (row) => {
-  workstationId.value = row.workstationId;
-  ida.value = row.id;
-  add.value = true;
-};
-// 娣诲姞
-const handleConfirm = async () => {
-  if ((ida.value === 2 || ida.value === 4) && (parseInt(selectedValuea.value, 10) >= 2700)) {
-    try {
-      const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
-        id: workstationId.value,
-        workstationId: workstationId.value,
-        patternHeight: selectedValuea.value,
-        patternWidth: selectedValue.value,
-        filmsId: selectedValueb.value,
-        patternThickness: selectedValuec.value,
-        number: number.value
-      });
-    if (response.code == 200) {
-      ElMessage.success(response.message);
-      add.value = false;
-     tableDataa.value = response.data;
-      if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '1') {
-      flake.value = true
-    } else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '2'){
-      flakea.value = true
-    }else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '3'){
-      flakeb.value = true
-    }else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '4'){
-      flakec.value = true
-    }
-      selectedValuea.value = '';
-      selectedValue.value = '';
-      selectedValueb.value = '';
-      selectedValuec.value = '';
-      number.value = '';
-      list()
-    } else {
-      ElMessage.error(response.message);
-    }
-  } catch (error) {
-    }  
-  }  
-  else if( ida.value === 1 || ida.value === 3){
-      try {
-    const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
-      id: workstationId.value,
-      workstationId: workstationId.value,
-      patternHeight: selectedValuea.value,
-      patternWidth: selectedValue.value,
-      filmsId: selectedValueb.value,
-      patternThickness: selectedValuec.value,
-      number: number.value
-    }); 
-    if (response.code == 200) {
-      ElMessage.success(response.message);
-      add.value = false;
-     tableDataa.value = response.data;
-      if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '1') {
-      flake.value = true
-    } else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '2'){
-      flakea.value = true
-    }else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '3'){
-      flakeb.value = true
-    }else if (selectedValuea.value !== '0' && selectedValue.value !== '0' && number.value !== '0' && workstationId.value === '4'){
-      flakec.value = true
-    }
-      selectedValuea.value = '';
-      selectedValue.value = '';
-      selectedValueb.value = '';
-      selectedValuec.value = '';
-      number.value = '';
-      list()
-    } else {
-      ElMessage.error(response.message);
-    }
-  } catch (error) {
-    } 
-    }
-  else  {
-      ElMessage({
-        type: 'info',
-        message: t('basicData.pause'),
-      })
-    }
-};  
-// 鍒犻櫎
-const handleConfirma = async () => {
-  try {
-    const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
-      workstationId: workstationId.value,
-      patternHeight: 0,
-      patternWidth: 0,
-      filmsId: "",
-      patternThickness: 0,
-      number: 0
-    });
-    if (response.code == 200) {
-      ElMessage.success(response.message);
-      adda.value = false;
-      tableDataa.value = response.data;
-      if (workstationId.value == '1') {
-        flake.value = false
-      } else if (workstationId.value == '2') {
-        flakea.value = false
-      } else if (workstationId.value == '3') {
-        flakeb.value = false
-      } else if (workstationId.value == '4') {
-        flakec.value = false
-      }
-      list()
-    } else {
-      ElMessage.error(response.message);
-    }
-  } catch (error) {
-    console.error(error);
-  }
-};
-// 閫夋嫨宸ョ▼纭
-const handleup = async () => {
-  try  {
-  const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', {
-    engineerId: selectedProjectNo.value,
-    })
-      window.localStorage.setItem('engineeringId', selectedProjectNo.value)
-    if (response.code == 200) {
-      ElMessage.success(response.message);
-      dialogFormVisible.value = false;
-      tableData.splice(0, tableData.length, ...response.data);
-      selectedProjectNo.value = ''
-      markingMachineStatus.value = '#911005';  
-      cuttingMachineStatus.value = '#911005';  
-      const uniqueWidths = new Set(response.data.map(item => item.width));  
-      const uniqueHeights = new Set(response.data.map(item => item.height));  
-      const uniqueFilmsIds = new Set(response.data.map(item => item.filmsId));  
-      const uniqueThicknesses = new Set(response.data.map(item => item.thickness));  
-      selectOptions.value = Array.from(uniqueWidths).map(width => ({ 
-      value: width, 
-      label: width, 
-    }));  
-      selectOptionsa.value = Array.from(uniqueHeights).map(height => ({ 
-      value: height, 
-      label: height, 
-    })); 
-    selectOptionsb.value = Array.from(uniqueFilmsIds).map(filmsId => ({
-      value: filmsId,
-      label: filmsId, 
-    })); 
-    selectOptionsc.value = Array.from(uniqueThicknesses).map(thickness => ({
-      value: thickness,
-      label: thickness,  
-    })); 
-    } else {
-      ElMessage.error(response.message);
-    }
-}
-catch (error) {
-    console.error(error);
-  }
-}
-// 寮�濮嬩笂鐗�
-const handle = async () => {
-  if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') {
-  try  {
-  let engineeringId = window.localStorage.getItem('engineeringId')
-  const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
-    engineerId: engineeringId,
-    state: 1,
-    })
-    if (response.code == 200) {
-      ElMessage.success(response.message);
-      blind.value = false;
-      selectedProjectNoa.value = '';
-    } else {
-      ElMessage.error(response.message);
-    }
-}
-catch (error) {
-    console.error(error);
-  }
-    } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') {  
-      // 鎻愮ず鐢ㄦ埛鎵撴爣鏈烘湭灏辩华  
-      ElMessage.warning(t('basicData.pausea'));  
-    } 
-}
-// 鏆傚仠
-const handlea = async () => {
-  try {
-    let engineeringId = window.localStorage.getItem('engineeringId')
-    console.log(engineeringId);
-    if (engineeringId !== '') {
-      const response = await request.post('/loadGlass/engineering/engineering/pauseTask', {
-        engineeringId: engineeringId,
-        state: 0,
-      })
-      if (response.code == 200) {
-        ElMessage.success(response.message);
-        blinda.value = false;
-        // tableData.splice([]);
-      } else {
-        ElMessage.error(response.message);
-    }
-  }
-    else  {
-      ElMessage({
-        type: 'info',
-        message: t('basicData.infonull'),
-      })
-    }
-}
-catch (error) {
-    console.error(error);
-  }
-}
-// 鍋滄浠诲姟
-const handleb = async () => {
-  try  {
-  let engineeringId = window.localStorage.getItem('engineeringId')
-console.log(engineeringId);
-if (engineeringId !== '') {
-  const response = await request.post('/loadGlass/engineering/engineering/pauseTask', {
-      engineeringId: engineeringId,
-      state: 0,
-    })
-    if (response.code == 200) {
-      ElMessage.success(response.message);
-      blindb.value = false;
-      tableData.splice([]);
-      ElMessage.error(response.message);
-    }
-  }
-    else  {
-      ElMessage({
-        type: 'info',
-        message: t('basicData.infonull'),
-      })
-    }
-}
-catch (error) {
-    console.error(error);
-  }
-}
-onMounted(fetchTableData);
-function getStatusText(state: number) {
-  switch (state) {
-    case 0:  
-      return t('basicData.waiting');
-    case 1:  
-      return t('basicData.up');
-    case 2:  
-      return t('basicData.up');
-    case 100:  
-      return t('basicData.finish');
-  }  
-}  
-function getStatusType(state: number) {  
-  switch (state) {  
-    case 0:
-      return 'warning';  
-    case 1: 
-      return 'primary';  
-    case 2: 
-      return 'primary';  
-    case 100:
-      return 'success';  
-  }  
-}  
-// 寮�濮嬩笂鐗�
-const handleBind = (row) => {
-  blind.value = true;
-};
-// 鏆傚仠
-const handleBinda = (row) => {
-  blinda.value = true;
-};
-// 鍒犻櫎
-const handleBindRacka = (row) => {
-  workstationId.value = row.workstationId;
-  adda.value = true;
-};
-const markingMachineStatus = ref('#911005');  
-const cuttingMachineStatus = ref('#911005');  
-// 瀹氫箟涓�涓柟娉曟潵鏀瑰彉棰滆壊鐘舵��  
-const confirmMarkingMachine = () => {  
-  markingMachineStatus.value = 'green';  
-}; 
-const confirmCuttingMachine = () => {  
-  cuttingMachineStatus.value = 'green';  
-}; 
-const toggleEnableState = async (row: any) => {  
-  if (!row.id) {  
-    ElMessage.error(t('basicData.updatanull'));  
-    return;
-  }  
-  const newState = row.state === 100 ? 0 : 100;  
-  try {
-    const response = await request.post('/loadGlass/up-patten-usage/updateGlassState', { id: row.id, state: newState });
-    if (response.code === 200) {
-      ElMessage.success(response.message);
-      row.state = newState;
-    } else {
-      ElMessage.error(response.message);
-    }
-  } catch (error) {
-    ElMessage.error(t('basicData.glassnull'));
-  }
-};
-const confirmCutting = async () => {
-  try {
-    const response = await request.post('/loadGlass/LoadGlass/updateMesInkageLoad',
-        inKageWord.value
-    );
-    if (response.code == 200) {
-      const status = response.data.status;
-      upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa');
-      cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005';
-      ElMessage.success(response.message);
-    } else {
-      ElMessage.error(response.message || '璇锋眰澶辫触');
-    }
-  } catch (error) {
-    console.error('璇锋眰鏃跺彂鐢熼敊璇�', error);
-    ElMessage.error('璇锋眰鏃跺彂鐢熼敊璇�');
-  }
-};
-</script>
-<template>
-  <div style="height: 500px;">
-    <div>
-      <div id="dotClass">
-        <div>{{ $t('basicData.laserprinting') }}</div>
-        <i :style="{ marginTop: '2px', backgroundColor: markingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
-        <el-button @click="confirmMarkingMachine" style="margin-left: 30px;margin-top: -3px;">{{
-            $t('basicData.yes')
-          }}
-        </el-button>
-        <div style="margin-left: 70px;">{{ $t('basicData.cuttingmachine') }}</div>
-        <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
-        <el-button @click="confirmCuttingMachine" style="margin-left: 30px;margin-top: -3px;">{{
-            $t('basicData.yes')
-          }}
-        </el-button>
-        <div style="margin-left: 70px;">{{ upstatus }}</div>
-        <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatusColor, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
-        <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;">{{
-            $t('basicData.change')
-          }}
-        </el-button>
-  </div>
-    <el-button :disabled="!canSelectProject" style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="selectproject">{{ $t('basicData.selectproject') }}</el-button>
-    <el-button :disabled="!canSelectProject" :style="{ backgroundColor: canStartLoading ? 'green' : 'initial',color: canStartLoading ? 'white' : 'black', }" style="margin-top: 5px;margin-left: 20px;"  @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
-    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
-    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="danger" @click="handledelete">{{ $t('searchOrder.deleteTask') }}</el-button>
-    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
-    <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
-      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
-    <el-table
-        height="350"
-        ref="table"
-        :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
-        :data="tableData"
-    >
-      <el-table-column prop="layoutSequence" :label="$t('basicData.layoutSequence')" width="100" align="center"/>
-      <el-table-column prop="engineeringId" :label="$t('basicData.projectnumber')" width="200" align="center"/>
-      <el-table-column prop="width" :label="$t('basicData.glasswidth')" align="center"/>
-      <el-table-column prop="height" :label="$t('basicData.glassheight')" align="center"/>
-      <el-table-column prop="filmsId" :label="$t('basicData.coatingtypes')" align="center"/>
-      <el-table-column :label="$t('basicData.quantity')" align="center">  
-      <template #default="{ row }">  
-        <!-- 杩欓噷鎬绘槸鏄剧ず 1 -->  
-        <span>{{ 1 }}</span>  
-      </template>  
-    </el-table-column>  
-      <el-table-column prop="thickness" :label="$t('basicData.thickness')" align="center"/>
-      <el-table-column
-          align="center"
-            :label="$t('basicData.startstatus')"
-            min-width="80"
-            prop="state"
-          >
-          <template #default="scope">  
-          <el-tag  
-            :type="scope.row.state === 100 ? 'success' : 'warning'"  
-            @click="toggleEnableState(scope.row)"  
-          >  
-            {{ scope.row.state === 100 ? $t('basicData.pass') : $t('basicData.waiting') }}
-          </el-tag>  
-        </template> 
-          </el-table-column>
-    </el-table>
-      </div>
-    </el-card>
-  <el-dialog v-model="blind" top="30vh" width="25%" :title="$t('basicData.startfilm')">
-    <template #footer>
-      <div id="dialog-footer">
-        <el-button type="primary" @click="handle">
-          {{ $t('basicData.confirm') }}
-        </el-button>
-        <el-button @click="blind = false">{{ $t('basicData.cancel') }}</el-button>
-      </div>
-    </template>
-  </el-dialog>
-<el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')">
-    <el-table  ref="table" style="margin-top: 20px;height: 300px;"
-        :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/>
-          <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')" />
-          <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')">
-        <template #default="{ row }">  
-          <el-input v-model="row.teamsGroupsName" autocomplete="off" min-width="150"/>  
-        </template>  
-      </el-table-column>
-          <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')">
-            <template #default="{ row }">  
-          <el-input v-model="row.deviceName" autocomplete="off" min-width="150"/>  
-        </template>
-        </el-table-column>
-        </el-table>
-        <template #footer>
-      <div id="dialog-footer">
-        <el-button type="primary" @click="handleConfirm">
-          {{ $t('searchOrder.add') }}
-        </el-button>
-        <el-button @click="dialoglea = false">{{ $t('searchOrder.cancel') }}</el-button>
-      </div>
-    </template>
-</el-dialog>
-  <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('basicData.whetherpause')">
-    <template #footer>
-      <div id="dialog-footer">
-        <el-button type="primary" @click="handlea">
-          {{ $t('basicData.confirm') }}
-        </el-button>
-        <el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button>
-      </div>
-    </template>
-  </el-dialog>
-  <el-dialog v-model="blindb" top="30vh" width="25%" :title="$t('searchOrder.pdeleteTask')">
-    <template #footer>
-      <div id="dialog-footer">
-        <el-button type="primary" @click="deleteTask">
-          {{ $t('basicData.confirm') }}
-        </el-button>
-        <el-button @click="blindb = false">{{ $t('basicData.cancel') }}</el-button>
-      </div>
-    </template>
-  </el-dialog>
-      <div id="parent">
-        <img src="../../assets/shangpian.png" alt="" style="max-width: 40%;max-height: 40%;margin-top: 20px;margin-left: 340px;">
-        <div id="overlay" v-show="flake"></div>
-        <div id="overlaya" v-show="flakea"></div>
-        <div id="overlayb" v-show="flakeb"></div>
-        <div id="overlayc" v-show="flakec"></div>
-      </div>
-      <div style="margin-top: -300px;margin-left: 680px;">
-        <el-table :data="tableDataa" border style="width: 85%"
-     :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
-        >
-          <el-table-column prop="workstationId" align="center" :label="$t('basicData.station')" min-width="60" />
-          <el-table-column prop="patternWidth" align="center" :label="$t('basicData.width')" min-width="80" />
-          <el-table-column prop="patternHeight" align="center" :label="$t('basicData.height')" min-width="80" />
-          <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="80" />
-          <el-table-column prop="number" align="center" :label="$t('basicData.quantity')" min-width="80" />
-          <el-table-column fixed="right" :label="$t('basicData.operate')" align="center" width="150">
-            <template #default="scope">
-              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{ $t('basicData.add') }}</el-button>
-              <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">{{ $t('basicData.delete') }}</el-button>
-            </template>
-        </el-table-column>
-        </el-table>
-    </div>
-  <el-dialog v-model="add" top="23vh" width="45%" :title="$t('basicData.addglass')" >
-    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form  size="mini" label-width="150px">
-      <el-form label-width="70px" label-position="right">
-        <el-row style="margin-top: -15px;margin-bottom: -2px;">
-          <el-col :span="6">
-              <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('basicData.widtha')" :required="true" style="width: 14vw">
-               <el-select  
-                      v-model="selectedValue"  
-                      filterable  
-                      clearable  
-                      :placeholder="$t('basicData.selectwidth')"
-                      style="width: 220px"  
-                      @input="handleInputChangea"  
-                    >  
-                 <el-option  
-                    v-for="item in selectOptions"  
-                    :key="item.id"  
-                    :label="item.label"  
-                    :value="item.value"  
-                 />  
-               </el-select>  
-              </el-form-item>
-              </div></div>
-          </el-col>
-          <el-col :span="9">
-            <div id="dta" style="font-size: 15px;">
-        <div>
-          <el-form-item :label="$t('basicData.heighta')" :required="true" style="width: 14vw">
-            <el-select  
-                      v-model="selectedValuea"  
-                      filterable  
-                      clearable  
-                      :placeholder="$t('basicData.selectheight')" 
-                      style="width: 220px"  
-                      @input="handleInputChangea"  
-                    >  
-                 <el-option  
-                    v-for="item in selectOptionsa"  
-                    :key="item.id"  
-                    :label="item.label"  
-                    :value="item.value"  
-                 />  
-               </el-select> 
-              </el-form-item></div>
-              </div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 10px;">
-          <el-col :span="6">
-              <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('basicData.coatingtypesa')"  :required="true" style="width: 14vw;">
-                <el-select  
-                      v-model="selectedValueb"  
-                      filterable  
-                      clearable  
-                      :placeholder="$t('basicData.selectcoatingtypes')"
-                      style="width: 220px"  
-                      @input="handleInputChangea"  
-                    >  
-                 <el-option  
-                    v-for="item in selectOptionsb"  
-                    :key="item.id"  
-                    :label="item.label"  
-                    :value="item.value"  
-                 />  
-               </el-select> 
-              </el-form-item></div></div>
-          </el-col>
-          <el-col :span="9">
-            <div id="dta" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('basicData.thicknessa')" :required="true" style="width: 14vw">
-                <el-select  
-                      v-model="selectedValuec"  
-                      filterable  
-                      clearable  
-                      :placeholder="$t('basicData.selectthickness')"
-                      style="width: 220px"  
-                      @input="handleInputChangea"  
-                    >  
-                 <el-option  
-                    v-for="item in selectOptionsc"  
-                    :key="item.id"  
-                    :label="item.label"  
-                    :value="item.value"  
-                 />  
-               </el-select>
-              </el-form-item></div></div>
-          </el-col>
-        </el-row>
-        <el-row style="margin-top: 10px;">
-          <el-col :span="6">
-              <div id="dt" style="font-size: 15px;">
-        <div>
-              <el-form-item :label="$t('basicData.quantitya')" :required="true" style="width: 14vw;">
-                <el-input :placeholder="$t('basicData.selectquantity')" v-model="number" autocomplete="off" />
-              </el-form-item></div></div>
-          </el-col>
-        </el-row>
-        </el-form>
-            </el-form>
-          </div>
-    <template #footer>
-      <div id="dialog-footer">
-        <el-button type="primary" @click="handleConfirm">
-          {{ $t('basicData.confirm') }}
-        </el-button>
-        <el-button @click="add = false">{{ $t('basicData.cancel') }}</el-button>
-      </div>
-    </template>
-  </el-dialog>
-  <el-dialog v-model="adda" top="30vh" width="25%" :title="$t('basicData.deletemessage')">
-    <template #footer>
-      <div id="dialog-footer">
-        <el-button type="primary" @click="handleConfirma">
-          {{ $t('basicData.confirm') }}
-        </el-button>
-        <el-button @click="adda = false">{{ $t('basicData.cancel') }}</el-button>
-      </div>
-    </template>
-  </el-dialog>
-        </div>
-  <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" :title="$t('basicData.project')" >
-    <div style="margin-left: 50px;margin-bottom: 10px;">
-      <el-form-item :label="$t('basicData.projectnumber')" :required="true">
-        <el-select
-            v-model="selectedProjectNo"
-            filterable
-            clearable
-            :placeholder="$t('basicData.plselectproject')"
-            style="width: 220px"
-            @input="handleInputChange"
-        >
-          <el-option
-              v-for="item in titleSelectJson['processType']"
-              :key="item.id"
-              :label="item.projectNo"
-              :value="item.projectNo"
-          />
-        </el-select>
-      </el-form-item>
-    </div>
-    <template #footer>
-      <div id="dialog-footer">
-        <el-button type="primary" @click="handleup">
-          {{ $t('basicData.confirm') }}
-        </el-button>
-        <el-button @click="dialogFormVisible = false">{{ $t('basicData.cancel') }}</el-button>
-      </div>
-    </template>
-  </el-dialog>
-  </div>
-</template>
-<style scoped>
-#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
-#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
-#dialog-footer{
-  text-align: center;
-  margin-top: -15px;
-}
-#dotClass {
-  display: flex;
-  margin-left: 20px; 
-  size: 50px;
-  margin-top: 20px;
-  margin-bottom: 10px;
-}
-#parent{
-  position: relative;
-  width: 1500px;
-  margin-left: -300px
-}
-#overlayb{
-  position: absolute;
-  z-index: 1;
-  width: 228px;
-  height: 16px;
-  background-color: #529b2e;
-  margin-top: -303px;
-  margin-left: 355px;
-}
-#overlayc{
-  position: absolute;
-  z-index: 1;
-  width: 228px;
-  height: 16px;
-  background-color: #529b2e;
-  margin-top: -303px;
-  margin-left:703px;
-}
-#overlay{
-  position: absolute;
-  z-index: 1;
-  width: 228px;
-  height: 16px;
-  background-color: #529b2e;
-  margin-top: -45px;
-  margin-left: 355px;
-}
-#overlaya{
-  position: absolute;
-  z-index: 1;
-  width: 228px;
-  height: 16px;
-  background-color: #529b2e;
-  margin-top: -45px;
-  margin-left: 703px;
-}
-</style>
\ No newline at end of file
diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index 290f1e9..e0b840e 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -19,6 +19,11 @@
 const dialogFormVisiblec = ref(false)
 const dialogFormVisibled = ref(false)
 const dialogFormVisibles = ref(false)
+const inkageEntity = ref('#911005');
+const requestEntity = ref('#911005');
+const mesReplyEntity = ref('#911005');
+const outInkageEntity = ref('#911005');
+const outRequestEntity = ref('#911005');
 const tableDataa = ref([])
 const tableDatagh = ref([])
 const tableDatab = ref([])
@@ -69,6 +74,7 @@
 const cell7=ref(true);
 const cell8=ref(true);
 const cell9=ref(true);
+const canEdit = ref(true);
 const selectedRow = ref(null);
 const temperingtotal = ref(0);
 const glasstotal = ref(0);
@@ -186,16 +192,21 @@
   row.enableState = newState;  
 }; 
 // 鏄惁鐮存崯
-const toggleEnableisDamage = async (row) => {
+const broken = async (row) => {
+  try  {
   const newState = row.isDamage === 1 ? 0 : 1;
-  const response = await request.post('/cacheGlass/edgStorageCage/updateEdgStorageCage', { id: row.id, enableState: newState });  
-  if (response.code === 200) {
+  const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/bigStorageGlassDamageByGlassId', { glassId: row.glassId });  
+    if (response.code == 200) {
       ElMessage.success(response.message);
-      } else {  
+    } else {
       ElMessage.error(response.message);
-      }  
+    }
   row.isDamage = newState;   
-}; 
+}
+catch (error) {
+    console.error(error);
+  }
+}
  // 鍒犻櫎 
  const opena = async(row) => {  
   try {
@@ -745,7 +756,22 @@
 let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`;
 const handleMessage = (data) => {
-  if (data.scanGlass != null) {
+  if (data.inkageEntity != null) {
+    inkageEntity.value = data.inkageEntity == 1 ? '#911005' : 'green';
+  }
+  if (data.requestEntity != null) {
+    requestEntity.value = data.requestEntity == 1 ? '#911005' : 'green';
+  }
+  if (data.mesReplyEntity != null) {
+    mesReplyEntity.value = data.mesReplyEntity == 1 ? '#911005' : 'green';
+  }
+  if (data.outInkageEntity != null) {
+    outInkageEntity.value = data.outInkageEntity == 1 ? '#911005' : 'green';
+  }
+  if (data.outRequestEntity != null) {
+    outRequestEntity.value = data.outRequestEntity == 1 ? '#911005' : 'green';
+  }
+    if (data.scanGlass != null) {
     scanGlass.value = data.scanGlass[0];
     let width = scanGlass.value.width;
     let height = scanGlass.value.height;
@@ -898,6 +924,18 @@
     <el-button style="margin-top: 7px;margin-left: 10px;" id="searchButton" type="primary"
       @click="dialogFormVisibleaDownGlasss = true">{{ $t('searchOrder.Labelprinting') }}
     </el-button>
+    <div id="dotClass">
+        <div>{{ $t('searchOrder.inkageEntity') }}</div>
+        <i :style="{ marginTop: '2px', backgroundColor: inkageEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
+        <div style="margin-left: 70px;">{{ $t('searchOrder.requestEntity') }}</div>
+        <i :style="{ marginTop: '2px', backgroundColor: requestEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
+        <div style="margin-left: 70px;">{{ $t('searchOrder.mesReplyEntity') }}</div>
+        <i :style="{ marginTop: '2px', backgroundColor: mesReplyEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
+        <div style="margin-left: 70px;">{{ $t('searchOrder.outInkageEntity') }}</div>
+        <i :style="{ marginTop: '2px', backgroundColor: outInkageEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
+        <div style="margin-left: 70px;">{{ $t('searchOrder.outRequestEntity') }}</div>
+        <i :style="{ marginTop: '2px', backgroundColor: outRequestEntity, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>
+  </div>
     <div class="table-container">
     <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 300px;">
@@ -1504,16 +1542,24 @@
             min-width="80"
             prop="isDamage"
           >
-          <template #default="scope">  
-          <el-tag  
-            :type="scope.row.isDamage === 1 ? 'danger' : 'success'"  
-            @click="toggleEnableisDamage(scope.row)"  
-          >  
-            {{ scope.row.isDamage === 1 ?  $t('searchOrder.breakage') : $t('searchOrder.breakagn') }}
-          </el-tag>  
-        </template>
+            <template #default="scope">
+              <div 
+                @click="scope.row.isDamage === 1 ? null : broken(scope.row)"
+                style="position: relative; display: inline-block;"
+              >
+                <el-tag
+                  :type="scope.row.isDamage === 1 ? 'danger' : 'success'"
+                  style="pointer-events: {{ scope.row.isDamage === 1 ? 'none' : 'auto' }};"
+                >
+                  {{ scope.row.isDamage === 1 ? $t('searchOrder.breakage') : $t('searchOrder.breakagn') }}
+                </el-tag>
+                <div 
+                  v-if="scope.row.isDamage === 1"
+                  style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: transparent; z-index: 1;"
+                ></div>
+              </div>
+            </template>
           </el-table-column>
-          <!-- <el-table-column prop="isDamage" align="center" :label="$t('searchOrder.state')" min-width="80" /> -->
           <el-table-column prop="layer" align="center" :label="$t('processCard.layer')" min-width="80" />
           <el-table-column prop="xcoordinate" align="center" :label="$t('searchOrder.xcoordinates')" min-width="80" />
           <el-table-column prop="ycoordinate" align="center" :label="$t('searchOrder.ycoordinates')" min-width="80" />
@@ -1742,4 +1788,11 @@
   flex: 1; /* 浣夸袱涓崱鐗囧钩鍒嗗彲鐢ㄧ┖闂� */
   margin-bottom: 10px; /* 鍙�夛紝鏍规嵁闇�瑕佹坊鍔犲簳閮ㄩ棿璺� */
 }
+#dotClass {
+  display: flex;
+  margin-left: 20px; 
+  size: 50px;
+  margin-top: 20px;
+  margin-bottom: 10px;
+}
 </style>
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java
index 261ec06..57fc8dd 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/HollowBigStorageCageBaseInfo.java
@@ -45,6 +45,12 @@
     private double height;
 
     /**
+     * 鍘氬害
+     */
+    @ApiModelProperty(value = "鍘氬害")
+    private Double thickness;
+
+    /**
      * 鏍煎瓙鍙�
      */
     @ApiModelProperty(value = "鐜荤拑id")
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 c33869e..ea0cda4 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
@@ -84,6 +84,7 @@
     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);
+    public static final List<Integer> GLASS_CACHE_TYPE_IN_ALL = Arrays.asList(1, 3);
 
     /**
      * 纾ㄨ竟浠诲姟鐜荤拑鐘舵��
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
index 4e5ec39..dfd5bc6 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
@@ -27,6 +27,14 @@
     Boolean submitReport(Damage damage);
 
     /**
+     * 鎸夌収鐜荤拑id淇℃伅鑷姩鎶ュ伐
+     * @param glassId
+     * @param deviceId
+     * @param workingProcedure
+     * @param remark
+     */
+    void autoSubmitReport(String glassId, int deviceId,String workingProcedure,String remark);
+    /**
      * 鍗曚釜鐮存崯
      *
      * @param damage
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
index 314be15..b9f5401 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/GlassInfo.java
@@ -101,6 +101,15 @@
      * 鍘熺墖椤哄簭
      */
     private Integer patternSequence;
+    /**
+     * x鍧愭爣
+     */
+    private Integer xAxis;
+
+    /**
+     * y鍧愭爣
+     */
+    private Integer yAxis;
 
     /**
      * 閽㈠寲鐗堝浘id
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
index db245d8..ce530ac 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/entity/OptimizeGlassinfo.java
@@ -72,9 +72,17 @@
      */
     private double pHeight;
     /**
-     * 鐗堝浘id
+     * 鍘熺墖鐗堝浘id
      */
     private Integer stockId;
+    /**
+     * 鍘熺墖鐗堝浘鐗堝簭
+     */
+    private Integer xAxis;
+    /**
+     * 鍘熺墖鐗堝浘鐗堝簭
+     */
+    private Integer yAxis;
     /**
      * 閽㈠寲鐗堝浘缂栧彿(鏋跺彿)
      */
@@ -86,11 +94,11 @@
     /**
      * x鍧愭爣
      */
-    private Integer xAxis;
+    private Integer xAxisHeat;
     /**
      * y鍧愭爣
      */
-    private  Integer yAxis;
+    private  Integer yAxisHeat;
     /**
      * 宸ョ▼鍙�
      */
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
index 0252637..ae5354a 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -39,7 +39,9 @@
         List<OptimizeGlassinfo> optimizeGlassinfos = null;
         if (engineeringId != null) {
             optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>()
-                    .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,c.x_axis,c.y_axis,b.project_no,b.glass_id,c.rotate_angle,d.merge as combine ,b.mark_icon")
+                    .select("b.process_id,t.glass_type,b.o_width,b.o_height,t.glass_thickness,b.order_sort,b.p_width,b.p_height,b.layer," +
+                            "d.layers_number AS total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort, b.x_axis,b.y_axis," +
+                            "c.x_axis as x_axis_heat,c.y_axis as y_axis_heat,b.project_no,b.glass_id,c.rotate_angle,d.merge as combine ,b.mark_icon")
                     .leftJoin("optimize_detail b on t.project_no=b.project_no")
                     .leftJoin("optimize_heat_detail c on c.project_no=t.project_no and b.heat_layout_id=c.layout_id and b.heat_layout_sort=c.sort")
                     .leftJoin("flow_card d on d.process_id=b.process_id and d.technology_number=b.layer and  d.order_number=b.order_sort ")
@@ -57,19 +59,26 @@
                 glassInfo.setEngineerId(map.getProjectNo());
                 glassInfo.setFlowCardId(map.getProcessId());
                 glassInfo.setFilmsid(map.getGlassType());
-                glassInfo.setGlassType(map.getOrderSort());//璁㈠崟搴忓彿
-                glassInfo.setWidth(map.getOWidth());//璁㈠崟瀹�
-                glassInfo.setHeight(map.getOHeight());//璁㈠崟楂�
+                //璁㈠崟搴忓彿
+                glassInfo.setGlassType(map.getOrderSort());
+                //璁㈠崟瀹�
+                glassInfo.setWidth(map.getOWidth());
+                //璁㈠崟楂�
+                glassInfo.setHeight(map.getOHeight());
                 glassInfo.setEdgWidth(map.getPWidth());
-                glassInfo.setLayer(map.getLayer());
-                glassInfo.setTotalLayer(map.getTotalLayer());
                 glassInfo.setEdgHeight(map.getPHeight());
                 glassInfo.setThickness(map.getGlassThickness());
-                glassInfo.setPatternSequence(map.getStockId());//
-                glassInfo.setTemperingLayoutId(map.getHeatLayoutId());//閽㈠寲鐗堝浘id
-                glassInfo.setTemperingFeedSequence(map.getHeatLayoutSort());//閽㈠寲鐗堝浘椤哄簭
-                glassInfo.setXCoordinate(map.getXAxis());
-                glassInfo.setYCoordinate(map.getYAxis());
+                glassInfo.setLayer(map.getLayer());
+                glassInfo.setTotalLayer(map.getTotalLayer());
+                glassInfo.setPatternSequence(map.getStockId());
+                glassInfo.setXAxis(map.getXAxis());
+                glassInfo.setYAxis(map.getYAxis());
+                //閽㈠寲鐗堝浘id
+                glassInfo.setTemperingLayoutId(map.getHeatLayoutId());
+                //閽㈠寲鐗堝浘椤哄簭
+                glassInfo.setTemperingFeedSequence(map.getHeatLayoutSort());
+                glassInfo.setXCoordinate(map.getXAxisHeat());
+                glassInfo.setYCoordinate(map.getYAxisHeat());
                 glassInfo.setAngle(map.getRotateAngle());
                 glassInfo.setGlassId(map.getGlassId());
                 glassInfo.setCombine(map.getCombine());
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
index ae7acb3..b86fa90 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
@@ -34,17 +34,8 @@
     @Autowired
     private EdgStorageCageDetailsService edgStorageCageDetailsService;
 
-//    @ApiOperation("鏌ヨ纾ㄨ竟缂撳瓨鐞嗙墖绗煎唴璇︽儏 鍙傛暟()")
-//    @PostMapping("/selectEdgStorageCage")
-//    @ResponseBody
-//    public Result selectEdgStorageCage() {
-//        List<Map<String, Object>> list = edgStorageCageService.selectEdgStorageCages();
-//        return Result.build(200, "鎴愬姛", list);
-//    }
-
     @ApiOperation("淇敼纾ㄨ竟缂撳瓨鐞嗙墖绗间俊鎭�   鍔熻兘锛氬绗煎唴鏍呮牸杩涜銆愬惎鐢�/绂佺敤銆�")
     @PostMapping("/updateEdgStorageCage")
-    @ResponseBody
     public Result updateEdgStorageCage(@RequestBody EdgStorageCage edgStorageCage) {
         String isSucess = edgStorageCageService.updateEdgStorageCage(edgStorageCage) ? "鎴愬姛" : "澶辫触";
         return Result.build(200, "銆愬惎鐢�/绂佺敤銆�" + isSucess, 1);
@@ -52,7 +43,6 @@
 
     @ApiOperation("纾ㄨ竟缂撳瓨鐞嗙墖绗间俊鎭�   鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑杩涜銆愭竻闄�/鏇存崲/缁戝畾銆� EdgStorageCage鏍煎瓙淇℃伅,EdgStorageCageDetails 鐜荤拑淇℃伅 ")
     @PostMapping("/edgStorageCageGlass")
-    @ResponseBody
     public Result edgStorageCageGlass(@RequestBody EdgStorageCageDetails edgStorageCageDetails, int edgStorageCageId) {
 
         String isSucess = edgStorageCageService.updateEdgStorageCageDetails(edgStorageCageId, edgStorageCageDetails) ? "鎴愬姛" : "澶辫触";
@@ -61,7 +51,6 @@
 
     @ApiOperation("纾ㄨ竟妯″潡姹囨姤鐜荤拑鐘舵��   鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑杩涜銆愮牬鎹�/鎷胯蛋銆�  ")
     @PostMapping("/edgReportStatus")
-    @ResponseBody
     public Result edgReportStatus(@RequestBody @Validated IdentWornRequest request) {
         return Result.build(200, "銆愮牬鎹�/鎷胯蛋銆�" + edgStorageCageDetailsService.edgReportStatus(request), 1);
     }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/CutDrawingVO.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/CutDrawingVO.java
new file mode 100644
index 0000000..76770f5
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/vo/CutDrawingVO.java
@@ -0,0 +1,19 @@
+package com.mes.edgstoragecage.entity.vo;
+
+import com.mes.edgstoragecage.entity.EdgStorageCage;
+import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.glassinfo.entity.GlassInfo;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/12/18 20:00
+ * @Description:
+ */
+@Data
+public class CutDrawingVO extends GlassInfo {
+
+    private int state;
+}
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 8dd8e31..80d8574 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
@@ -2,6 +2,11 @@
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.security.core.parameters.P;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,4 +19,6 @@
 public interface EdgStorageCageDetailsMapper extends MPJBaseMapper<EdgStorageCageDetails> {
 
     EdgStorageCageDetails queryEdgStorageDetailsBySize(int deviceId, int currentSlot, double width, double height);
+
+    List<CutDrawingVO> queryCutDrawingByEngineerId(@Param("engineerId") String engineerId, @Param("patternSequence") int patternSequence, @Param("isAll") int isAll);
 }
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 43d2024..2dfceff 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
@@ -3,6 +3,7 @@
 import com.github.yulichang.base.MPJBaseService;
 import com.mes.edgglasstask.entity.request.IdentWornRequest;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
 
 import java.util.List;
 import java.util.Map;
@@ -20,19 +21,14 @@
 //    boolean identWorn(Map<String, Object> arguments);
 
     /**
-     * 鑾峰彇 鍒囧壊褰撳墠鐗堝浘
-     *
+     * 鎸夌収璁惧鍙婄嚎璺紝鑾峰彇褰撳墠绾胯矾姝e湪鍒囧壊鐨勭増鍥句俊鎭�
+     * @param deviceId
+     * @param stationCell
      * @return
      */
-    List<Map<String, Object>> selectCutTerritory();
+    List<CutDrawingVO> queryCurrentCutDrawing(int deviceId, int stationCell);
 
-    /**
-     * 鑾峰彇 宸ョ▼涓嬬殑褰撳墠鐗堝浘
-     *
-     * @param current
-     * @return
-     */
-    List<List<Map<String, Object>>> selectCurrentCutTerritory(String current);
+    Map<String, Object> queryCutDrawingByEngineerId(String engineerId, int patternSequence);
 
     /**
      * 鑾峰彇 宸ョ▼涓嬬殑閽㈠寲鐗堝浘
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 e01c67f..87ce02b 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
@@ -1,5 +1,6 @@
 package com.mes.edgstoragecage.service.impl;
 
+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.update.LambdaUpdateWrapper;
@@ -16,20 +17,20 @@
 import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
 import com.mes.edgstoragecage.entity.EdgStorageCage;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
 import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
 import com.mes.edgstoragecage.mapper.EdgStorageCageMapper;
 import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
 import com.mes.engineering.entity.Engineering;
 import com.mes.engineering.mapper.EngineeringMapper;
 import com.mes.glassinfo.entity.GlassInfo;
-import com.mes.glassinfo.mapper.GlassInfoMapper;
-import com.mes.pp.entity.*;
-import com.mes.pp.mapper.OptimizeDetailMapper;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.pp.entity.OptimizeHeatDetail;
+import com.mes.pp.entity.OptimizeHeatLayout;
+import com.mes.pp.entity.OptimizeProject;
 import com.mes.pp.mapper.OptimizeHeatDetailMapper;
 import com.mes.taskcache.entity.TaskCache;
 import com.mes.taskcache.service.TaskCacheService;
-import com.mes.uppattenusage.entity.UpPattenUsage;
-import com.mes.uppattenusage.mapper.UpPattenUsageMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -56,13 +57,7 @@
 public class EdgStorageCageDetailsServiceImpl extends MPJBaseServiceImpl<EdgStorageCageDetailsMapper, EdgStorageCageDetails> implements EdgStorageCageDetailsService {
 
     @Resource
-    UpPattenUsageMapper upPattenUsageMapper;
-
-    @Resource
     EngineeringMapper engineeringMapper;
-
-    @Resource
-    OptimizeDetailMapper optimizeDetailMapper;
 
     @Resource
     OptimizeHeatDetailMapper optimizeHeatDetailMapper;
@@ -71,7 +66,7 @@
     EdgStorageCageMapper edgStorageCageMapper;
 
     @Resource
-    GlassInfoMapper glassInfoMapper;
+    GlassInfoService glassInfoService;
 
     @Autowired
     TaskCacheService taskCacheService;
@@ -84,226 +79,51 @@
 
     @Autowired
     EdgGlassTaskInfoService edgGlassTaskInfoService;
-//
-//    @Override
-//    public boolean identWorn(Map<String, Object> arguments) {
-//        String glassId=arguments.get("glassId").toString();
-//        int state=arguments.get("state").toString().isEmpty()?0:Integer.parseInt(arguments.get("state").toString());
-//        int line=arguments.get("line").toString().isEmpty()?0:Integer.parseInt(arguments.get("line").toString());
-//        String workingProcedure=arguments.get("workingProcedure").toString();
-//        if(state==0||line==0||workingProcedure==null||glassId==null||glassId.isEmpty()){
-//            log.info("鍓嶇浼犻�掓暟鎹笉鍏�:{}",arguments);
-//            return false;
-//        }
-//        List<GlassInfo> GlassInfos = glassInfoMapper.selectList(new MPJLambdaQueryWrapper<GlassInfo>()
-//                .selectAll(GlassInfo.class)
-//                .eq(GlassInfo::getGlassId, glassId));
-//        if (GlassInfos.size() == 1) {
-//            Damage damage =new Damage();
-//            damage.setGlassId(glassId);
-//            damage.setLine(line);
-//            damage.setWorkingProcedure(workingProcedure);
-//            damage.setRemark("");
-//            damage.setStatus(state);//8鐮存崯锛�9鎷胯蛋
-//            damageService.insertDamage(damage);
-//        }else{
-//            return false;
-//        }
-//        List<EdgStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
-//                .selectAll(EdgStorageCageDetails.class)
-//                .eq(EdgStorageCageDetails::getGlassId, glassId));
-//        if (edgStorageCageDetails.size() == 1) {
-//            EdgStorageCageDetails item = edgStorageCageDetails.get(0);
-//            item.setState(state);
-//            baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId));
-//        }
-//        return true;
-//    }
 
-    /**
-     * 鑾峰彇 鍒囧壊褰撳墠鐗堝浘
-     *
-     * @return
-     */
     @Override
-    public List<Map<String, Object>> selectCutTerritory() {
-        //鏌ヨEdgStorageCageDetails鏈�鍚庝竴寮犵幓鐠冩墍灞炵増鍥�
-        List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
-                .selectAll(UpPattenUsage.class)
-                .distinct()
-                .innerJoin(Engineering.class, on -> on
-                        .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId))
-                .innerJoin(GlassInfo.class, on -> on
-                        .eq(GlassInfo::getEngineerId, UpPattenUsage::getEngineeringId)
-                        .eq(GlassInfo::getPatternSequence, UpPattenUsage::getLayoutSequence))
-                .leftJoin(EdgStorageCageDetails.class, on -> on
-                        .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId)
-                        .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId))
-                .leftJoin(Damage.class, on -> on
-                        .eq(Damage::getEngineerId, UpPattenUsage::getEngineeringId)
-                        .eq(Damage::getGlassId, GlassInfo::getGlassId))
-                .eq(Engineering::getState, 1)
-                .and(wrapper -> wrapper.isNotNull(EdgStorageCageDetails::getId).or().isNotNull(Damage::getId))
-                .orderByDesc(UpPattenUsage::getLayoutSequence)
-                .orderByDesc(GlassInfo::getId)
-        );
-        if (!upPattenUsage.isEmpty()) {
-            //褰撳墠鐗�
-            UpPattenUsage upPattenUsage1 = upPattenUsage.get(0);
-            //鏌ョ湅褰撳墠鐗堟槸鍚﹀瓨鍦ㄦ湭杩涚瀛愭垨鐮存崯鐨勭幓鐠�
-            List<UpPattenUsage> upPattenUsage2 = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
-                    .selectAll(UpPattenUsage.class)
-                    .distinct()
-                    .innerJoin(GlassInfo.class, on -> on
-                            .eq(GlassInfo::getEngineerId, UpPattenUsage::getEngineeringId)
-                            .eq(GlassInfo::getPatternSequence, UpPattenUsage::getLayoutSequence))
-                    .leftJoin(EdgStorageCageDetails.class, on -> on
-                            .eq(EdgStorageCageDetails::getEngineerId, UpPattenUsage::getEngineeringId)
-                            .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId))
-                    .leftJoin(Damage.class, on -> on
-                            .eq(Damage::getEngineerId, UpPattenUsage::getEngineeringId)
-                            .eq(Damage::getGlassId, GlassInfo::getGlassId))
-                    .eq(UpPattenUsage::getEngineeringId, upPattenUsage.get(0).getEngineeringId())
-                    .eq(UpPattenUsage::getLayoutSequence, upPattenUsage.get(0).getLayoutSequence())
-                    .and(wrapper -> wrapper.isNull(EdgStorageCageDetails::getId).or().isNull(Damage::getId))
-                    .orderByDesc(UpPattenUsage::getLayoutSequence)
-                    .orderByDesc(GlassInfo::getId)
-            );
-            //鏄剧ず涓嬩竴鐗�  鍚﹀垯鏄剧ず褰撳墠鐗堝浘
-            if (upPattenUsage2.isEmpty()) {
-                //鍓╀綑鐗堝浘
-                List<UpPattenUsage> upPattenUsage3 = upPattenUsageMapper.selectJoinList(UpPattenUsage.class, new MPJLambdaWrapper<UpPattenUsage>()
-                        .selectAll(UpPattenUsage.class)
-                        .distinct()
-                        .innerJoin(Engineering.class, on -> on
-                                .eq(Engineering::getEngineerId, UpPattenUsage::getEngineeringId))
-                        .eq(Engineering::getState, 1)
-                        .gt(UpPattenUsage::getLayoutSequence, upPattenUsage1.getLayoutSequence())
-                        .orderByAsc(UpPattenUsage::getLayoutSequence)
-                );
-                if (!upPattenUsage3.isEmpty()) {
-                    //鍒囨崲鎴愪笅涓�鐗堝浘
-                    upPattenUsage1 = upPattenUsage3.get(0);
-                }
-            }
-
-            List<Map<String, Object>> cutTerritorys = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
-                    .selectAll(OptimizeDetail.class)
-                    .selectAs(OptimizeLayout::getWidth, "olWidth")
-                    .selectAs(OptimizeLayout::getHeight, "olHeight")
-                    .leftJoin(OptimizeLayout.class, on -> on
-                            .eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo)
-                            .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId))
-                    .eq(OptimizeDetail::getProjectNo, upPattenUsage1.getEngineeringId())
-                    .eq(OptimizeDetail::getStockId, upPattenUsage1.getLayoutSequence())
-            );
-            Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
-                    .selectAll(EdgStorageCageDetails.class)
-                    .eq(EdgStorageCageDetails::getEngineerId, upPattenUsage1.getEngineeringId())
-            ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails));
-
-            Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
-                    .selectAll(Damage.class)
-                    .eq(Damage::getEngineerId, upPattenUsage1.getEngineeringId())
-                    .and(wrapper -> wrapper.eq(Damage::getType, 8)
-                            .or()
-                            .eq(Damage::getType, 9))
-            ).stream().collect(Collectors.toMap(Damage::getGlassId, Damage -> Damage, (V1, V2) -> V2));
-
-            List<Map<String, Object>> resultCutTerritory = new ArrayList<>();
-            for (Map<String, Object> cutTerritory : cutTerritorys) {
-//                log.info("鍐呭锛歿}-------{}",cutTerritory,edgStorageCageDetails);
-                if (cutTerritory.get("glass_id") == null || "".equals(cutTerritory.get("glass_id"))) {
-                    log.info("浼樺寲鏁版嵁涓璯lassId瀛樺湪绌哄��-----鍐呭锛歿}", cutTerritorys);
-                    return new ArrayList<>();
-                } else if (damageMaps.get(cutTerritory.get("glass_id")) != null) {
-                    //log.info("鐜荤拑宸茬牬鎹�/鎷胯蛋-----鍐呭锛歿}",damageMaps.get(item.get("glass_id")));
-                    cutTerritory.put("glass_state", damageMaps.get(cutTerritory.get("glass_id")).getType());
-                } else if (edgMaps.get(cutTerritory.get("glass_id")) != null) {
-                    cutTerritory.put("glass_state", edgMaps.get(cutTerritory.get("glass_id")).getState());
-                } else {
-                    cutTerritory.put("glass_state", 0);
-                }
-                resultCutTerritory.add(cutTerritory);
-            }
-            return resultCutTerritory;
+    public List<CutDrawingVO> queryCurrentCutDrawing(int deviceId, int stationCell) {
+//         鑾峰彇鏈潯绾垮綋鍓嶆鍦ㄦ墽琛岀殑宸ョ▼
+        Engineering engineering = engineeringMapper.selectOne(new LambdaQueryWrapper<Engineering>()
+                .eq(Engineering::getState, 1).eq(Engineering::getStationCell, stationCell));
+        if (null == engineering) {
+            log.info("褰撳墠绾胯矾娌℃湁闇�瑕佹墽琛岀殑宸ョ▼");
+            return null;
         }
-        return null;
-    }
-
-    /**
-     * 鑾峰彇 宸ョ▼涓嬬殑褰撳墠鐗堝浘
-     *
-     * @param current
-     * @return
-     */
-    @Override
-    public List<List<Map<String, Object>>> selectCurrentCutTerritory(String current) {
-
-        List<Engineering> engineering = engineeringMapper.selectJoinList(Engineering.class, new MPJLambdaWrapper<Engineering>()
-                .selectAll(Engineering.class)
-                .eq(Engineering::getEngineerId, current)
-        );
-        if (engineering.size() == 0) {
-            log.info("褰撳墠宸ョ▼鍙锋湭棰嗗彇杩�:{}", current);
-            return new ArrayList<>();
-        }
-        //缁撴灉
-        List<Map<String, Object>> resultCutTerritory = new ArrayList<>();
-        //姝ゅ伐绋嬬殑鎵�鏈変紭鍖栨暟鎹�
-        List<Map<String, Object>> cutTerritory = optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
-                .selectAll(OptimizeDetail.class)
-                .selectAs(OptimizeLayout::getWidth, "olWidth")
-                .selectAs(OptimizeLayout::getHeight, "olHeight")
-                .leftJoin(OptimizeLayout.class, on -> on
-                        .eq(OptimizeLayout::getProjectNo, OptimizeDetail::getProjectNo)
-                        .eq(OptimizeLayout::getStockId, OptimizeDetail::getStockId))
-                .eq(OptimizeDetail::getProjectNo, current)
-        );
-
-        Map<String, EdgStorageCageDetails> edgMaps = baseMapper.selectList(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
-                .selectAll(EdgStorageCageDetails.class)
-                .eq(EdgStorageCageDetails::getEngineerId, current)
-        ).stream().collect(Collectors.toMap(EdgStorageCageDetails::getGlassId, EdgStorageCageDetails -> EdgStorageCageDetails, (V1, V2) -> V2));
-
-        Map<String, Damage> damageMaps = damageMapper.selectList(new MPJLambdaQueryWrapper<Damage>()
-                .selectAll(Damage.class)
-                .eq(Damage::getEngineerId, current)
-                .and(wrapper -> wrapper.eq(Damage::getType, 8)
-                        .or()
-                        .eq(Damage::getType, 9))
-        ).stream().collect(Collectors.toMap(Damage::getGlassId, Damage -> Damage, (V1, V2) -> V2));
-
-        for (Map<String, Object> item : cutTerritory) {
-//          log.info("鍐呭锛歿}-------{}",cutTerritory,edgStorageCageDetails);
-            if (item.get("glass_id") == null || "".equals(item.get("glass_id"))) {
-                log.info("浼樺寲鏁版嵁涓璯lassId瀛樺湪绌哄��-----鍐呭锛歿}", cutTerritory);
-                return new ArrayList<>();
-            }
-            if (damageMaps.get(item.get("glass_id")) != null) {
-                //log.info("鐜荤拑宸茬牬鎹�/鎷胯蛋-----鍐呭锛歿}",damageMaps.get(item.get("glass_id")));
-                item.put("glass_state", damageMaps.get(item.get("glass_id")).getType());
-            } else if (edgMaps.get(item.get("glass_id")) != null) {
-                item.put("glass_state", edgMaps.get(item.get("glass_id")).getState());
+        List<EdgStorageCageDetails> edgStorageCageDetailsList = this.list(new LambdaQueryWrapper<EdgStorageCageDetails>()
+                .eq(EdgStorageCageDetails::getDeviceId, deviceId)
+                .eq(EdgStorageCageDetails::getEngineerId, engineering.getEngineerId())
+                .orderByDesc(EdgStorageCageDetails::getId));
+        //鎸夌収褰撳墠宸ョ▼鍘荤悊鐗囩鎼滄渶鍚庝竴鍧楃幓鐠� 鑾峰彇宸ョ▼鍙�  鐗堝浘鍙� 娌℃湁鐩存帴鏄剧ず绗竴寮犵増鍥�
+        int patternSequence = 0;
+        if (CollectionUtil.isEmpty(edgStorageCageDetailsList)) {
+            patternSequence = 1;
+        } else {
+            EdgStorageCageDetails lastGlass = edgStorageCageDetailsList.get(0);
+            log.info("鑾峰彇鏈�鍚庝竴鍧楄繘绗肩殑鐜荤拑涓猴細{}", lastGlass);
+            List<CutDrawingVO> drawingVOList = baseMapper.queryCutDrawingByEngineerId(lastGlass.getEngineerId(), lastGlass.getPatternSequence(), 1);
+            if (CollectionUtil.isEmpty(drawingVOList)) {
+                //鏃犲墿浣� 鏄剧ず褰撳墠鐗堝浘鍔�1鐨勫叏閲忕増鍥�
+                patternSequence = lastGlass.getPatternSequence() + 1;
             } else {
-                item.put("glass_state", 0);
+                //褰撳墠鐗堝浘鏄惁鏈夊墿浣欙紝鏈夊墿浣欐樉绀哄綋鍓嶇増鍥�
+                patternSequence = lastGlass.getPatternSequence();
             }
-            resultCutTerritory.add(item);
         }
-        Map<String, List<Map<String, Object>>> groupBy = resultCutTerritory.stream().collect(Collectors.groupingBy(item -> item.get("stock_id").toString()));
-//        List<List<Map<String, Object>>> Result=groupBy.values().stream().collect(Collectors.toList());
-        int count = 1;
-        List<List<Map<String, Object>>> result = new ArrayList<>();
-        for (String item : groupBy.keySet()) {
-            String key = count + "";
-            if (key != null) {
-                result.add(groupBy.get(key));
-            }
-            count++;
-        }
-        return result;
+        return baseMapper.queryCutDrawingByEngineerId(engineering.getEngineerId(), patternSequence, 0);
     }
 
+    @Override
+    public Map<String, Object> queryCutDrawingByEngineerId(String engineerId, int patternSequence) {
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("currentCutDrawing", baseMapper.queryCutDrawingByEngineerId(engineerId, patternSequence, 0));
+        List<GlassInfo> glassInfoList = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getEngineerId, engineerId));
+        long totalPatternSequence = glassInfoList.stream().map(GlassInfo::getPatternSequence).distinct().count();
+        map.put("totalPatternSequence", totalPatternSequence);
+        return map;
+
+    }
+
+
     /**
      * 鑾峰彇 宸ョ▼涓嬬殑閽㈠寲鐗堝浘
      *
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 5a08b5f..51d94ae 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
@@ -9,6 +9,7 @@
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.service.MiloService;
 import com.mes.common.config.Const;
+import com.mes.damage.service.DamageService;
 import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
 import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
 import com.mes.edgstoragecage.entity.EdgStorageCage;
@@ -72,6 +73,8 @@
     EdgStorageCageService edgStorageCageService;
     @Resource
     EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
+    @Resource
+    DamageService damageService;
 
     @Value("${mes.glassGap}")
     private int glassGap;
@@ -122,17 +125,17 @@
     private void startOneOpcTaskChild(String tableName, int device) {
         EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName);
 //        try {
-            if (task == null) {
-                log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
-                return;
-            }
-            if (task.getTaskState() == 2) {
-                //闃叉鍑虹墖浠诲姟涓旂鍓嶆湁鐜荤拑鐨勬儏鍐碉紝灏嗚繘鐗噄d缃┖锛屽嵆鍑虹墖浠呰�冭檻绗煎唴鐨勭幓鐠�
-                task.setGlassIdIn("");
-            }
+        if (task == null) {
+            log.info("浠诲姟琛ㄥ熀纭�鏁版嵁褰曞叆澶辫触锛岃妫�鏌ユ暟鎹槸鍚﹀綍鍏ユ垚鍔�");
+            return;
+        }
+        if (task.getTaskState() == 2) {
+            //闃叉鍑虹墖浠诲姟涓旂鍓嶆湁鐜荤拑鐨勬儏鍐碉紝灏嗚繘鐗噄d缃┖锛屽嵆鍑虹墖浠呰�冭檻绗煎唴鐨勭幓鐠�
+            task.setGlassIdIn("");
+        }
         int request = task.getTaskState();
         int taskRunning = task.getTaskRunning();
-            log.info("寮�濮嬫墽琛屼换鍔★紝浠诲姟璇蜂俊鎭负{}", task);
+        log.info("寮�濮嬫墽琛屼换鍔★紝浠诲姟璇蜂俊鎭负{}", task);
         if (request == 0) {
             log.info("璁惧锛歿}鐘舵�侊細{}", device, request);
             log.info("鏈敹鍒颁换鍔¤姹傦紝缁撴潫鏈浠诲姟");
@@ -487,6 +490,10 @@
                 .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
                 .eq(EdgStorageDeviceTaskHistory::getDeviceId, device)
                 .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1"));
+        //濡傛灉浠诲姟绫诲瀷涓�1锛�3锛屽皢鍒囧壊瀹屾垚鐨勭幓鐠冭嚜鍔ㄦ姤宸�
+        if (Const.GLASS_CACHE_TYPE_IN_ALL.contains(taskHistory.getTaskType())) {
+            damageService.autoSubmitReport(taskHistory.getGlassIdIn(), taskHistory.getDeviceId(),"鍒囧壊","杩涘崸鐞�");
+        }
         updateCellRemainWidth(cell, device, taskHistory);
         edgStorageDeviceTaskHistoryService.update(new LambdaUpdateWrapper<EdgStorageDeviceTaskHistory>()
                 .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
@@ -528,10 +535,23 @@
                 .last("Limit 1");
         GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
         if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
+
+            int patternSequence = glassInfo.getPatternSequence();
+            int xAxis = glassInfo.getXAxis();
+            int yAxis = glassInfo.getYAxis();
             String swapGlassId = swapGlassInfo.getGlassId();
-            log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�,杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo);
+            int swapPatternSequence = swapGlassInfo.getPatternSequence();
+            int swapXAxis = swapGlassInfo.getXAxis();
+            int swapYAxis = swapGlassInfo.getYAxis();
             swapGlassInfo.setGlassId(glassId);
+            swapGlassInfo.setPatternSequence(patternSequence);
+            swapGlassInfo.setXAxis(xAxis);
+            swapGlassInfo.setYAxis(yAxis);
             glassInfo.setGlassId(swapGlassId);
+            glassInfo.setPatternSequence(swapPatternSequence);
+            glassInfo.setXAxis(swapXAxis);
+            glassInfo.setYAxis(swapYAxis);
+            log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�(鍘熺墖搴忓彿鍙婂潗鏍囬櫎澶�),杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo);
             glassInfoService.updateById(swapGlassInfo);
             glassInfoService.updateById(glassInfo);
             return swapGlassId;
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
index 8801ad7..c603a6e 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -1,12 +1,17 @@
 package com.mes.job;
 
 import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.mes.common.config.Const;
 import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
 import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
+import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
 import com.mes.edgstoragecage.entity.vo.EdgStorageCageVO;
 import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
 import com.mes.edgstoragecage.service.EdgStorageCageService;
 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 com.mes.tools.WebSocketServer;
 import lombok.extern.slf4j.Slf4j;
@@ -35,6 +40,8 @@
     EdgGlassTaskInfoService edgGlassTaskInfoService;
     @Resource
     EdgStorageDeviceTaskService edgStorageDeviceTaskService;
+    @Resource
+    EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
 
 
     private static final String EDG_STORAGE_DEVICE_ONE_TASK = "edg_storage_device_one_task";
@@ -53,14 +60,18 @@
 
     private void CacheGlassTasksChild(String tableName, String webSocketName, int deviceId, int stationCell) {
         JSONObject jsonObject = new JSONObject();
-//        List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
-//        jsonObject.append("currentCutTerritory", currentCutTerritorys);
-        //鍗у缂撳瓨绗煎唴淇℃伅0 = {EdgStorageCageVO@11649} "EdgStorageCageVO(details=null)"
+        List<CutDrawingVO> currentCutDrawings = edgStorageCageDetailsService.queryCurrentCutDrawing(deviceId, stationCell);
+        jsonObject.append("currentCutTerritory", currentCutDrawings);
+        //鍗у缂撳瓨绗煎唴淇℃伅
         List<EdgStorageCageVO> edgStorageCageVOS = edgStorageCageService.selectEdgStorageCagesByDeviceId(deviceId);
         jsonObject.append("EdgStorageCageinfos", edgStorageCageVOS);
 
-        EdgStorageDeviceTask task = edgStorageDeviceTaskService.queryTaskMessage(tableName);
-        jsonObject.append("taskMessage", task);
+        //鑾峰彇姝e湪鏁村舰涓殑浠诲姟
+        EdgStorageDeviceTaskHistory taskHistory = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
+                .eq(EdgStorageDeviceTaskHistory::getDeviceId,deviceId)
+                .eq(EdgStorageDeviceTaskHistory::getTaskState, Const.RAW_GLASS_TASK_NEW)
+                .orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 1"));
+        jsonObject.append("taskMessage", taskHistory);
 
         ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get(webSocketName);
         if (sendwServer != null) {
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
index 7eb5d0b..64e3791 100644
--- 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
@@ -1,16 +1,17 @@
 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.entity.request.TaskHistoryRequest;
 import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
 import com.mes.utils.Result;
 import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -29,60 +30,11 @@
     @Resource
     private EdgStorageDeviceTaskHistoryService edgStorageDeviceTaskHistoryService;
 
-    /**
-     * 鍒嗛〉鏌ヨ鎵�鏈夋暟鎹�
-     *
-     * @param page                        鍒嗛〉瀵硅薄
-     * @param edgStorageDeviceTaskHistory 鏌ヨ瀹炰綋
-     * @return 鎵�鏈夋暟鎹�
-     */
+    @ApiOperation(value = "鏌ヨ鏈潯绾挎墽琛岃繃鐨勫巻鍙蹭换鍔℃暟鎹�", notes = "鏌ヨ鏈潯绾挎墽琛岃繃鐨勫巻鍙蹭换鍔℃暟鎹�")
     @GetMapping
-    public Result selectAll(Page<EdgStorageDeviceTaskHistory> page, EdgStorageDeviceTaskHistory edgStorageDeviceTaskHistory) {
-        return Result.success(this.edgStorageDeviceTaskHistoryService.page(page, new QueryWrapper<>(edgStorageDeviceTaskHistory)));
+    public Result<List<EdgStorageDeviceTaskHistory>> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request) {
+        return Result.success(edgStorageDeviceTaskHistoryService.queryEdgStorageDeviceTaskHistory(request));
     }
 
-    /**
-     * 閫氳繃涓婚敭鏌ヨ鍗曟潯鏁版嵁
-     *
-     * @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/request/TaskHistoryRequest.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/request/TaskHistoryRequest.java
new file mode 100644
index 0000000..39f8572
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/opctask/entity/request/TaskHistoryRequest.java
@@ -0,0 +1,35 @@
+package com.mes.opctask.entity.request;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/12/22 16:10
+ * @Description:
+ */
+@Data
+public class TaskHistoryRequest {
+
+    @ApiModelProperty(value = "璁惧id")
+    private Integer deviceId;
+    @ApiModelProperty(value = "鐜荤拑id")
+    private String glassId;
+    @ApiModelProperty(value = "浠诲姟鐘舵�� 0榛樿绌轰换鍔� 1缁撴潫浠诲姟")
+    private Integer taskState;
+    @ApiModelProperty(value = "浠诲姟绫诲瀷锛�1杩涚墖浠诲姟 2鍑虹墖浠诲姟 3鐩撮�氫换鍔�")
+    private Integer taskType;
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+}
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
index 3eb12cb..13e4038 100644
--- 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
@@ -2,6 +2,9 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
+import com.mes.opctask.entity.request.TaskHistoryRequest;
+
+import java.util.List;
 
 /**
  * (EdgStorageDeviceTaskHistory)琛ㄦ湇鍔℃帴鍙�
@@ -11,5 +14,6 @@
  */
 public interface EdgStorageDeviceTaskHistoryService extends IService<EdgStorageDeviceTaskHistory> {
 
+    List<EdgStorageDeviceTaskHistory> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request);
 }
 
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
index 2eaa927..55a23a7 100644
--- 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
@@ -1,10 +1,15 @@
 package com.mes.opctask.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.opctask.entity.EdgStorageDeviceTaskHistory;
+import com.mes.opctask.entity.request.TaskHistoryRequest;
 import com.mes.opctask.mapper.EdgStorageDeviceTaskHistoryMapper;
 import com.mes.opctask.service.EdgStorageDeviceTaskHistoryService;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * (EdgStorageDeviceTaskHistory)琛ㄦ湇鍔″疄鐜扮被
@@ -15,5 +20,19 @@
 @Service("edgStorageDeviceTaskHistoryService")
 public class EdgStorageDeviceTaskHistoryServiceImpl extends ServiceImpl<EdgStorageDeviceTaskHistoryMapper, EdgStorageDeviceTaskHistory> implements EdgStorageDeviceTaskHistoryService {
 
+    @Override
+    public List<EdgStorageDeviceTaskHistory> queryEdgStorageDeviceTaskHistory(TaskHistoryRequest request) {
+        LambdaQueryWrapper<EdgStorageDeviceTaskHistory> wrapper = new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
+                .eq(EdgStorageDeviceTaskHistory::getDeviceId, request.getDeviceId())
+                .eq(StringUtils.checkValNotNull(request.getTaskState()), EdgStorageDeviceTaskHistory::getTaskState, request.getTaskState())
+                .eq(StringUtils.checkValNotNull(request.getTaskType()), EdgStorageDeviceTaskHistory::getTaskState, request.getTaskType())
+                .between(StringUtils.checkValNotNull(request.getStartTime()), EdgStorageDeviceTaskHistory::getCreateTime, request.getStartTime(),
+                        request.getEndTime()).orderByDesc(EdgStorageDeviceTaskHistory::getCreateTime).last("limit 20");
+        if (StringUtils.isNotBlank(request.getGlassId())) {
+            wrapper.and(e -> e.like(EdgStorageDeviceTaskHistory::getGlassIdIn, request.getGlassId())
+                    .or().like(EdgStorageDeviceTaskHistory::getGlassIdOut, request.getGlassId()));
+        }
+        return this.list(wrapper);
+    }
 }
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
index 577dd92..feefee2 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -1,6 +1,7 @@
 package com.mes.taskcache.controller;
 
 import com.mes.edgglasstask.entity.request.IdentWornRequest;
+import com.mes.edgstoragecage.entity.vo.CutDrawingVO;
 import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
 import com.mes.taskcache.service.TaskCacheService;
 import com.mes.utils.Result;
@@ -34,39 +35,34 @@
 
     @ApiOperation("鏌ヨ閽㈠寲鐗堝浘淇℃伅-鏍规嵁 宸ョ▼鍙�   鍙傛暟(宸ョ▼鍙�)")
     @PostMapping("/temperingTerritory")
-    @ResponseBody
     public Result temperingTerritory(String current) {
         List<Map<String, Object>> h = edgStorageCageDetailsService.selectTemperingTerritory(current);
         return Result.build(200, "鎴愬姛", h);
     }
 
-    @ApiOperation("鏌ヨ鍒囧壊鐗堝浘淇℃伅-鏍规嵁 宸ョ▼鍙�   鍙傛暟(宸ョ▼鍙�)")
-    @PostMapping("/cutTerritory")
-    @ResponseBody
-    public Result cutTerritory(String current) {
-        //engineerId=current;
-        List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current);
-        return Result.build(200, "鎴愬姛", h);
+    @ApiOperation("鏌ヨ鍒囧壊鐗堝浘淇℃伅-鏍规嵁宸ョ▼鍙峰強鐗堝簭锛岀増搴忛粯璁や负1")
+    @PostMapping("/queryCutDrawingByEngineerId")
+    public Result queryCutDrawingByEngineerId(String engineerId, int patternSequence) {
+//        List<List<Map<String, Object>>> h = edgStorageCageDetailsService.selectCurrentCutTerritory(current);
+        Map<String, Object> map = edgStorageCageDetailsService.queryCutDrawingByEngineerId(engineerId, patternSequence);
+        return Result.build(200, "鎴愬姛", map);
     }
 
-    @ApiOperation("璇嗗埆鏄剧ず  褰撳墠鐗堝浘   鍙傛暟()")
-    @PostMapping("/currentCutTerritory")
-    @ResponseBody
-    public Result currentCutTerritory() {
-        List<Map<String, Object>> h = edgStorageCageDetailsService.selectCutTerritory();
-        return Result.build(200, "鎴愬姛", h);
+    @ApiOperation("璇嗗埆鏄剧ず:褰撳墠鐗堝浘,闇�瑕佸綋鍓嶅崸寮忕悊鐗囪澶噄d銆佷笂鐗囩嚎璺�")
+    @PostMapping("/queryCurrentCutDrawing")
+    public Result queryCurrentCutDrawing(int deviceId, int stationCell) {
+        List<CutDrawingVO> cutDrawingVOS = edgStorageCageDetailsService.queryCurrentCutDrawing(deviceId, stationCell);
+        return Result.build(200, "鎴愬姛", cutDrawingVOS);
     }
 
     @ApiOperation("璇嗗埆鎿嶄綔锛�   鐮存崯/鎷胯蛋     鍙傛暟锛圛D,鍔熻兘[9锛氭嬁璧帮紝8:鐮存崯]锛�")
     @PostMapping("/identControls")
-    @ResponseBody
     public Result<String> identControls(@RequestBody @Validated IdentWornRequest request) {
         return Result.build(200, "鎴愬姛", edgStorageCageDetailsService.identControls(request));
     }
 
     @ApiOperation("纾ㄨ竟浠诲姟 鍙傛暟()")
     @PostMapping("/selectEdgTask")
-    @ResponseBody
     public Result selectEdgTask(@RequestBody Map<String, String> arguments) {
         String line = arguments.get("line");
         List<Map<String, Object>> EdgTasks = taskCacheService.selectEdgInfo(line);
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
index 097e078..8861765 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -31,8 +31,8 @@
       firstLength: 460
       secondLength: 390
     two: #绗簩鏉$(杈圭嚎鐨勬渶灏忓昂瀵镐俊鎭�
-      firstLength: 390
-      secondLength: 390
+      firstLength: 300
+      secondLength: 300
   glassGap: 2500
   cellLength: 2500
   sequence:
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
index aae437f..f4f8fc6 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/EdgStorageCageDetailsMapper.xml
@@ -56,4 +56,21 @@
         select *
         from slot_temp limit 1
     </select>
+    <select id="queryCutDrawingByEngineerId" resultType="com.mes.edgstoragecage.entity.vo.CutDrawingVO">
+        with glass_temp as (
+        select * from glass_info where engineer_id = #{engineerId} and pattern_sequence = #{patternSequence}
+        ), cut_drawing_temp as (
+        select t.*,
+        case when t2.glass_id is not null then t2.type
+        when t1.glass_id is not null then t1.state
+        else 0 end as state
+        from glass_temp t
+        left join edg_storage_cage_details t1 on t.glass_id = t1.glass_id
+        left join damage t2 on t.glass_id = t2.glass_id and t2.type in (8,9)
+        )select * from cut_drawing_temp where 1=1
+        <if test="isAll == 1">
+            and state = 0
+        </if>
+
+    </select>
 </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 0cf74de..6011bcc 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
@@ -104,6 +104,17 @@
         }
     }
 
+    @ApiOperation("鎸囧畾閽㈠寲宸ョ▼")
+    @PostMapping("/appointTemperingEngineerId")
+    public Result appointTemperingEngineerId(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
+        boolean result = bigStorageCageDetailsService.appointTemperingEngineerId(bigStorageCageDetails.getEngineerId());
+        if (result == true) {
+            return Result.build(200, "鎸囧畾閽㈠寲鎴愬姛", 1);
+        } else {
+            return Result.build(200, "宸插瓨鍦ㄩ挗鍖栦换鍔★紝璇风瓑寰呴挗鍖栧畬鎴愬啀鎸囧畾閽㈠寲", 1);
+        }
+    }
+
     @ApiOperation("閽㈠寲/闈為挗鍖栨煡璇細0 闈為挗鍖�  1锛氶挗鍖�")
     @PostMapping("/selectTemperingGlass")
     public Result<List<TemperingGlassCountDTO>> selectTemperingGlass(int isTempering) {
@@ -163,17 +174,11 @@
             return Result.build(200, "鎸囧畾娴佺▼鍗℃垚鍔�", 1);
         }
     }
-
-    @ApiOperation("鎸囧畾宸ョ▼")
-    @PostMapping("/appointEngineerId")
-    public Result appointEngineerId(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
-        bigStorageCageDetailsService.appointEngineerId(bigStorageCageDetails.getEngineerId());
-        return Result.build(200, "淇敼鎴愬姛", 1);
-    }
-
     @ApiOperation("澶х悊鐗囩鎶ョ牬鎹�")
     @PostMapping("/bigStorageGlassDamageByGlassId")
-    public Result<String> bigStorageGlassDamageByGlassId(String glassId) {
+
+    public Result<String> bigStorageGlassDamageByGlassId(@RequestBody Map<String, String> map) {
+        String glassId=map.get("glassId");
         return Result.build(200, "鎶ョ牬鎹熸垚鍔�", bigStorageCageDetailsService.bigStorageGlassDamageByGlassId(glassId));
     }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageAndDetailsDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageAndDetailsDTO.java
index 8d126d5..4acd70a 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageAndDetailsDTO.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/BigStorageAndDetailsDTO.java
@@ -1,9 +1,7 @@
 package com.mes.bigstorage.entity.dto;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
-import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.List;
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
index d52dbbb..f8413c4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -76,7 +76,7 @@
 
     String temperingSwitch(Boolean flag);
 
-    void appointEngineerId(String engineerId);
+    boolean appointTemperingEngineerId(String engineerId);
 
     List<BigStorageRelationDTO> queryIsAllNeedDispatchVirtualSlot();
 
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 485bdba..f23a0a7 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
@@ -447,8 +447,30 @@
     }
 
     @Override
-    public void appointEngineerId(String engineerId) {
-        redisUtil.setCacheObject("temperingengineerId", engineerId);
+    public boolean appointTemperingEngineerId(String engineerId) {
+        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        temperingGlassInfoLambdaQueryWrapper
+                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW);
+        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoMapper.selectList(temperingGlassInfoLambdaQueryWrapper);
+
+        if (temperingGlassInfoList.size() == 0) {
+            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(GlassInfo::getEngineerId, engineerId)
+                    .ne(GlassInfo::getTemperingLayoutId, 0)
+                    .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                    .orderByAsc(GlassInfo::getTemperingLayoutId)
+                    .orderByAsc(GlassInfo::getTemperingFeedSequence)
+            );
+            if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
+                temperingGlassInfoService.saveBatch(temperingGlassInfos);
+                return true;
+            }
+        }
+        return false;
     }
 
     @Override
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 959d8b7..57b2a42 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
@@ -221,8 +221,8 @@
         MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>();
         wrapper.selectAll(BigStorageCage.class).selectCollection(BigStorageCageDetails.class, BigStorageCage::getBigStorageCageDetails)
                 .leftJoin(BigStorageCageDetails.class, on -> on.eq(BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
-                        .eq(StringUtils.isNotBlank(query.getFilmsId()), BigStorageCageDetails::getFilmsId, query.getFilmsId())
-                        .eq(StringUtils.isNotBlank(query.getFlowCardId()), BigStorageCageDetails::getFlowCardId, query.getFlowCardId())
+                        .like(StringUtils.isNotBlank(query.getFilmsId()), BigStorageCageDetails::getFilmsId, query.getFilmsId())
+                        .like(StringUtils.isNotBlank(query.getFlowCardId()), BigStorageCageDetails::getFlowCardId, query.getFlowCardId())
                         .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL, Const.GLASS_STATE_OUT_ING))
                 .eq(BigStorageCage::getDeviceId, query.getDeviceId())
                 .orderByAsc(BigStorageCage::getDeviceId)
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
index 1429d59..1fcdedf 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
@@ -88,6 +88,22 @@
                 }
             }
             jsonObject.append("bigStorageCageDetailsFeedTask", inTaskList);
+
+            //杩涚墖鑱旀満
+            ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP1A.DLP1A.mesControl");
+            jsonObject.append("inkageEntity", inkageEntity.getValue());
+            //杩涚墖璇锋眰
+            ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP1A.DLP1A.RequestMes");
+            jsonObject.append("requestEntity", requestEntity.getValue());
+            //鍚姩鍛戒护
+            ReadWriteEntity mesReplyEntity = miloService.readFromOpcUa("DLP1A.DLP1A.MesReply");
+            jsonObject.append("mesReplyEntity", mesReplyEntity.getValue());
+            //鍑虹墖鑱旀満
+            ReadWriteEntity outInkageEntity = miloService.readFromOpcUa("DLP1B.DLP1B.mesControl");
+            jsonObject.append("outInkageEntity", outInkageEntity.getValue());
+            //鍑虹墖璇锋眰
+            ReadWriteEntity outRequestEntity = miloService.readFromOpcUa("DLP1B.DLP1B.RequestMes");
+            jsonObject.append("outRequestEntity", outRequestEntity.getValue());
         }catch(Exception e){
             //todo:涓嶅仛浠诲姟澶勭悊
         }
@@ -181,58 +197,6 @@
             }
         } catch (Exception e) {
             e.printStackTrace();
-        }
-    }
-
-//    @Scheduled(fixedDelay = 1000)
-    public void temperingIsRun() {
-        JSONObject jsonObject = new JSONObject();
-        //杩涚墖浠诲姟鏁版嵁
-        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask = bigStorageCageDetailsService.selectFeedTask();
-        jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask);
-        //鍑虹墖浠诲姟鏁版嵁
-        List<BigStorageCageDetails> bigStorageCageDetailsOutTask = bigStorageCageDetailsService.selectOutTask();
-        jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask);
-        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("isRun");
-        if (sendwServer != null) {
-            for (WebSocketServer webserver : sendwServer) {
-                if (webserver != null) {
-                    webserver.sendMessage(jsonObject.toString());
-                } else {
-                    log.info("Home is closed");
-                }
-            }
-        }
-    }
-
-    //    @Scheduled(fixedDelay = Long.MAX_VALUE)
-    public void scanCodeTask() {
-        log.info("鎵弿浠诲姟宸插惎鍔�");
-        while (true) {
-            JSONObject jsonObject = new JSONObject();
-            try (Socket socket = new Socket(scanIp, scanPort);
-                 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
-                // 鎺ユ敹鏈嶅姟鍣ㄥ搷搴�
-                log.info("绛夊緟鎵爜涓�......");
-                String glassId = in.readLine();
-                log.info("鎵弿鍒扮殑鐜荤拑id锛歿}", glassId);
-                List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("slicecage");
-                if (CollectionUtils.isNotEmpty(sendwServer)) {
-                    //鎸夌収鐜荤拑id鑾峰彇鐜荤拑淇℃伅杩斿洖缁欏墠绔晫闈紝鍏蜂綋闇�瑕佸摢浜涙暟鎹緟纭
-                    GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                            .eq(GlassInfo::getGlassId, glassId).last("limit 1"));
-                    if (null == glassInfo) {
-                        log.info("鎸夌収鐜荤拑id锛歿}锛屾棤娉曟壘鍒扮幓鐠冧俊鎭�", glassId);
-                    } else {
-                        for (WebSocketServer webserver : sendwServer) {
-                            jsonObject.append("scanGlass", glassInfo);
-                            webserver.sendMessage(jsonObject.toString());
-                        }
-                    }
-                }
-            } catch (Exception exception) {
-                log.info("璇诲彇寮傚父锛屽師鍥犱负{}", exception.getMessage());
-            }
         }
     }
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
index 44d88bd..2faeee9 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
@@ -101,6 +101,8 @@
     private Integer artificialOutTargetPosition;
     @Value("${mes.slotMaxHeight}")
     private Integer slotMaxHeight;
+    @Value("${mes.slotMaxthickness}")
+    private Integer slotMaxthickness;
 
     @Scheduled(fixedDelay = 1000)
     public void inBigStorageTask() throws Exception {
@@ -175,7 +177,7 @@
             }
         }
         //todo:瓒呭ぇ灏哄
-        if (slotMaxHeight < Math.min(glassInfoList.get(0).getWidth(), glassInfoList.get(0).getHeight())) {
+        if (slotMaxHeight < Math.min(glassInfoList.get(0).getWidth(), glassInfoList.get(0).getHeight()) || glassInfoList.get(0).getThickness() > slotMaxthickness) {
             int count = bigStorageCageDetailsService.count(new LambdaQueryWrapper<BigStorageCageDetails>()
                     .eq(BigStorageCageDetails::getSlot, THROUGH_SLOT)
                     .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL));
@@ -189,6 +191,11 @@
         //淇敼纾ㄨ竟瀵瑰垪琛ㄧ殑鐜荤拑鐘舵��
         edgGlassTaskInfoService.update(new LambdaUpdateWrapper<EdgGlassTaskInfo>()
                 .set(EdgGlassTaskInfo::getState, Const.EDG_GLASS_SUCCESS).in(EdgGlassTaskInfo::getGlassId, glassIdList));
+        //鎶ュ伐
+        for (String glass : glassIdList) {
+            damageService.autoSubmitReport(glass, inTaskList.get(0).getStartSlot(), "纾ㄨ竟", "杩涘ぇ鐞嗙墖绗�");
+        }
+
         Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId));
         //璁$畻鐩爣鏍煎瓙
         List<BigStorageCageHistoryTask> historyTasks = new ArrayList<>();
@@ -283,16 +290,6 @@
         List<TemperingGlassInfo> unFinishTemperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
                 .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW).orderByAsc(TemperingGlassInfo::getTemperingFeedSequence));
         if (CollectionUtil.isNotEmpty(unFinishTemperingGlassInfoList)) {
-//            List<String> glassIdList = unFinishTemperingGlassInfoList.stream().map(TemperingGlassInfo::getGlassId).collect(Collectors.toList());
-//            List<BigStorageCageHistoryTask> historyTaskList = bigStorageCageHistoryTaskService.list(new LambdaQueryWrapper<BigStorageCageHistoryTask>()
-//                    .eq(BigStorageCageHistoryTask::getTaskType, Const.BIG_STORAGE_BEFORE_OUT)
-//                    .in(BigStorageCageHistoryTask::getGlassId, glassIdList));
-//            List<TemperingGlassInfo> temperingGlassList = unFinishTemperingGlassInfoList;
-//            if (CollectionUtil.isNotEmpty(historyTaskList)) {
-//                List<String> taskGlassList = historyTaskList.stream().map(BigStorageCageHistoryTask::getGlassId).collect(Collectors.toList());
-//                temperingGlassList = unFinishTemperingGlassInfoList.stream().filter(e -> !taskGlassList.contains(e.getGlassId())).collect(Collectors.toList());
-//            }
-//            if (CollectionUtil.isNotEmpty(unFinishTemperingGlassInfoList)) {
             log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
             computeOutGlassInfoByVirtualSlot(unFinishTemperingGlassInfoList, "big_storage_cage_out_one_task", temperingOutTargetPosition, Const.GLASS_STATE_OUT_ING, Const.BIG_STORAGE_BEFORE_OUT);
             Date endDate = new Date();
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
index 51356c7..c60e249 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -28,6 +28,7 @@
   glassGap: 250  #鐜荤拑闂磋窛
   xMaxSize: 2800
   slotMaxHeight: 2500
+  slotMaxthickness: 12
   temperingOutTargetPosition: 930
   artificialOutTargetPosition: 931
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index 61adf41..ebda8bb 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -132,7 +132,7 @@
         </where>
     </update>
     <update id="updateDeviceIdBySlot">
-        update big_storage_cage_details t innser join big_storage_cage t1 on t.slot = t1.slot
+        update big_storage_cage_details t inner join big_storage_cage t1 on t.slot = t1.slot
         set t.device_id = t1.device_id
         where t.slot in (
         <foreach collection="list" item="item" separator=",">
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageController.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageController.java
index 6b96a2e..2ef9415 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageController.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/controller/HollowBigStorageCageController.java
@@ -1,8 +1,18 @@
 package com.mes.hollow.controller;
 
 
+import com.mes.hollow.entity.dto.HollowBigStorageAndDetailsDTO;
+import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
+import com.mes.hollow.service.HollowBigStorageCageService;
+import com.mes.utils.Result;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * (HollowBigStorageCage)琛ㄦ帶鍒跺眰
@@ -13,6 +23,13 @@
 @RestController
 @RequestMapping("hollowBigStorageCage")
 public class HollowBigStorageCageController {
+    @Resource
+    HollowBigStorageCageService hollowBigStorageCageService;
 
+    @ApiOperation("鎸夌収鏌ヨ鏉′欢锛堣澶噄d銆佹祦绋嬪崱銆佽啘绯伙級鑾峰彇璁惧瀵瑰簲鐨勭瀛愮幓鐠冧俊鎭�")
+    @PostMapping("/queryHollowBigStorageCageDetail")
+    public Result<List<HollowBigStorageAndDetailsDTO>> queryHollowBigStorageCageDetail(@RequestBody HollowBigStorageDetailsQueryVO query) {
+        return Result.build(200, "鏌ヨ鎴愬姛", hollowBigStorageCageService.queryHollowBigStorageCageDetail(query));
+    }
 }
 
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCage.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCage.java
index 2e6c606..7da587d 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCage.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCage.java
@@ -1,8 +1,12 @@
 package com.mes.hollow.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+
+import java.util.List;
 
 /**
  * (HollowBigStorageCage)琛ㄥ疄浣撶被
@@ -42,6 +46,10 @@
      */
     private Integer remainWidth;
 
+    @ApiModelProperty(hidden = true)
+    @TableField(exist = false)
+    private List<HollowBigStorageCageDetails> hollowBigStorageCageDetails;
+
 
 }
 
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java
index fb77157..ab67700 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/HollowBigStorageCageDetails.java
@@ -45,10 +45,6 @@
      */
     private String filmsId;
     /**
-     * /*鍘氬害
-     */
-    private Double thickness;
-    /**
      * /*鐘舵��
      */
     private Integer state;
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/dto/HollowBigStorageAndDetailsDTO.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/dto/HollowBigStorageAndDetailsDTO.java
new file mode 100644
index 0000000..48381de
--- /dev/null
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/dto/HollowBigStorageAndDetailsDTO.java
@@ -0,0 +1,18 @@
+package com.mes.hollow.entity.dto;
+
+import com.mes.hollow.entity.HollowBigStorageCage;
+import com.mes.hollow.entity.HollowBigStorageCageDetails;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/11 16:45
+ * @Description:
+ */
+@Data
+public class HollowBigStorageAndDetailsDTO extends HollowBigStorageCage {
+
+    private List<HollowBigStorageCageDetails> hollowBigStorageCageDetails;
+}
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java
new file mode 100644
index 0000000..f623d4e
--- /dev/null
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java
@@ -0,0 +1,25 @@
+package com.mes.hollow.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/12/23 10:48
+ * @Description:
+ */
+@Data
+public class HollowBigStorageDetailsQueryVO {
+    /**
+     * 璁惧id
+     */
+    private Integer deviceId;
+    /**
+     * 娴佺▼鍗�
+     */
+    private String flowCardId;
+    /**
+     * 鑶滅郴
+     */
+    private String filmsId;
+
+}
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageMapper.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageMapper.java
index b8f0656..d6ec7c7 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageMapper.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageMapper.java
@@ -1,6 +1,6 @@
 package com.mes.hollow.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.hollow.entity.HollowBigStorageCage;
 
 /**
@@ -9,7 +9,7 @@
  * @author makejava
  * @since 2024-11-21 09:22:40
  */
-public interface HollowBigStorageCageMapper extends BaseMapper<HollowBigStorageCage> {
+public interface HollowBigStorageCageMapper extends MPJBaseMapper<HollowBigStorageCage> {
 
 }
 
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageService.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageService.java
index 88b3fd8..ba96566 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageService.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageService.java
@@ -2,6 +2,11 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.hollow.entity.HollowBigStorageCage;
+import com.mes.hollow.entity.dto.HollowBigStorageAndDetailsDTO;
+import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * (HollowBigStorageCage)琛ㄦ湇鍔℃帴鍙�
@@ -11,5 +16,10 @@
  */
 public interface HollowBigStorageCageService extends IService<HollowBigStorageCage> {
 
+    List<HollowBigStorageAndDetailsDTO> queryHollowBigStorageCageDetail(HollowBigStorageDetailsQueryVO query);
+
+    Map<Integer, List<HollowBigStorageCage>> queryHollowbigStorageCageDetail();
+
+    List<Map<String, Object>> selectBigStorageCageUsage();
 }
 
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageServiceImpl.java
index 68350a7..3a365aa 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageServiceImpl.java
@@ -1,10 +1,22 @@
 package com.mes.hollow.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.mes.common.config.Const;
 import com.mes.hollow.entity.HollowBigStorageCage;
+import com.mes.hollow.entity.HollowBigStorageCageDetails;
+import com.mes.hollow.entity.dto.HollowBigStorageAndDetailsDTO;
+import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
 import com.mes.hollow.mapper.HollowBigStorageCageMapper;
 import com.mes.hollow.service.HollowBigStorageCageService;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * (HollowBigStorageCage)琛ㄦ湇鍔″疄鐜扮被
@@ -15,5 +27,39 @@
 @Service
 public class HollowBigStorageCageServiceImpl extends ServiceImpl<HollowBigStorageCageMapper, HollowBigStorageCage> implements HollowBigStorageCageService {
 
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
+    @Override
+    public List<HollowBigStorageAndDetailsDTO> queryHollowBigStorageCageDetail(HollowBigStorageDetailsQueryVO query) {
+        MPJLambdaWrapper<HollowBigStorageCage> wrapper = new MPJLambdaWrapper<>();
+        wrapper.selectAll(HollowBigStorageCage.class).selectCollection(HollowBigStorageCageDetails.class, HollowBigStorageCage::getHollowBigStorageCageDetails)
+                .leftJoin(HollowBigStorageCageDetails.class, on -> on.eq(HollowBigStorageCageDetails::getSlot, HollowBigStorageCage::getSlot)
+                        .like(StringUtils.isNotBlank(query.getFilmsId()), HollowBigStorageCageDetails::getFilmsId, query.getFilmsId())
+                        .like(StringUtils.isNotBlank(query.getFlowCardId()), HollowBigStorageCageDetails::getFlowCardId, query.getFlowCardId())
+                        .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL, Const.GLASS_STATE_OUT_ING))
+                .eq(HollowBigStorageCage::getDeviceId, query.getDeviceId())
+                .orderByAsc(HollowBigStorageCage::getDeviceId)
+                .orderByAsc(HollowBigStorageCage::getSlot);
+        return baseMapper.selectJoinList(HollowBigStorageAndDetailsDTO.class, wrapper);
+    }
+
+    @Override
+    public Map<Integer, List<HollowBigStorageCage>> queryHollowbigStorageCageDetail() {
+        MPJLambdaWrapper<HollowBigStorageCage> wrapper = new MPJLambdaWrapper<>();
+        wrapper.selectAll(HollowBigStorageCage.class).selectCollection(HollowBigStorageCageDetails.class, HollowBigStorageCage::getHollowBigStorageCageDetails)
+                .leftJoin(HollowBigStorageCageDetails.class, on -> on.eq(HollowBigStorageCageDetails::getSlot, HollowBigStorageCage::getSlot)
+                        .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).orderByAsc(HollowBigStorageCageDetails::getUpdateTime));
+        List<HollowBigStorageCage> bigStorageCages = baseMapper.selectJoinList(HollowBigStorageCage.class, wrapper);
+        Map<Integer, List<HollowBigStorageCage>> listMap = bigStorageCages.stream().collect(Collectors.groupingBy(item -> item.getDeviceId()));
+        return listMap;
+    }
+
+    @Override
+    public List<Map<String, Object>> selectBigStorageCageUsage() {
+        QueryWrapper<HollowBigStorageCage> wrapper = new QueryWrapper<>();
+        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");
+        return baseMapper.selectMaps(wrapper);
+    }
 }
 
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
index a61b3dd..cafa468 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -63,6 +63,7 @@
                 .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId)
                 .eq(HollowGlassRelationInfo::getWidth, width)
                 .eq(HollowGlassRelationInfo::getHeight, height)
+                .eq(HollowGlassRelationInfo::getTotalLayer, totalLayer)
                 .eq(HollowGlassRelationInfo::getLayer, layer)
                 .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_NEW)
                 .orderByAsc(HollowGlassRelationInfo::getHollowSequence)
@@ -76,6 +77,7 @@
                     .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId)
                     .eq(HollowGlassRelationInfo::getWidth, width)
                     .eq(HollowGlassRelationInfo::getHeight, height)
+                    .eq(HollowGlassRelationInfo::getTotalLayer, totalLayer)
                     .eq(HollowGlassRelationInfo::getLayer, layer)
                     .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_NEW)
                     .orderByAsc(HollowGlassRelationInfo::getHollowSequence)
@@ -84,6 +86,7 @@
         }
         HollowBigStorageCageDetails hollowDetails = hollowBigStorageCageDetailsService.getOne(new LambdaQueryWrapper<HollowBigStorageCageDetails>()
                 .eq(HollowBigStorageCageDetails::getFlowCardId, relationInfoOne.getFlowCardId())
+                .eq(HollowBigStorageCageDetails::getTotalLayer, totalLayer)
                 .eq(HollowBigStorageCageDetails::getLayer, layer)
                 .eq(HollowBigStorageCageDetails::getVirtualSlot, relationInfoOne.getVirtualSlot())
                 .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO)
@@ -102,6 +105,7 @@
         }
         HollowGlassRelationInfo relationInfoBefore = hollowGlassRelationInfoService.getOne(new LambdaQueryWrapper<HollowGlassRelationInfo>()
                 .eq(HollowGlassRelationInfo::getFlowCardId, relationInfoOne.getFlowCardId())
+                .eq(HollowGlassRelationInfo::getTotalLayer, relationInfoOne.getTotalLayer())
                 .eq(HollowGlassRelationInfo::getLayer, relationInfoOne.getLayer())
                 .eq(HollowGlassRelationInfo::getVirtualSlot, relationInfoOne.getVirtualSlot())
                 .eq(HollowGlassRelationInfo::getSlotSequence, relationInfoOne.getSlotSequence() - 1));
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java
index 0b1049f..a230379 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/hollowqueue/entity/HollowGlassQueueInfo.java
@@ -49,10 +49,6 @@
      */
     private String filmsId;
     /**
-     * /*鍘氬害
-     */
-    private Double thickness;
-    /**
      * /*鐘舵��
      */
     private Integer state;
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
index dfd6891..d718fe5 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
@@ -78,6 +78,10 @@
 
     private static final String BIG_STORAGE_CAGE_IN_TWO_TASK = "big_storage_cage_in_two_task";
     private static final String BIG_STORAGE_CAGE_OUT_TWO_TASK = "big_storage_cage_out_two_task";
+    /**
+     * 鐩撮�氭牸瀛�
+     */
+    private static final Integer THROUGH_SLOT = 920;
     @Autowired(required = false)
     MiloService miloService;
     @Resource
@@ -94,6 +98,11 @@
 
     @Value("${mes.outCarMaxSize}")
     private Integer outCarMaxSize;
+
+    @Value("${mes.slotMaxHeight}")
+    private Integer slotMaxHeight;
+    @Value("${mes.slotMaxthickness}")
+    private Integer slotMaxthickness;
 
     @Scheduled(fixedDelay = 1000)
     public void inBigStorageTask() throws Exception {
@@ -154,10 +163,40 @@
             //todo:鍚憄lc鍙戦�佹姤璀�
             return;
         }
+        //鎸夌収鐜荤拑鍘氬害鍒嗙粍锛屽垽鏂墿浣欐牸瀛愭槸鍚﹀彲浠ュ瓨鏀�
+        Map<Double, Long> thickCountMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getThickness, Collectors.counting()));
+        for (Map.Entry<Double, Long> entry : thickCountMap.entrySet()) {
+            int count = hollowBigStorageCageService.count(new LambdaQueryWrapper<HollowBigStorageCage>()
+                    .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth)
+                    .le(HollowBigStorageCage::getMinThickness, entry.getKey())
+                    .ge(HollowBigStorageCage::getMaxThickness, entry.getKey()));
+            if (count < entry.getValue()) {
+                log.info("绗煎唴鏍煎瓙鍓╀綑鏁伴噺涓嶈冻锛岀粨鏉熸湰娆¤繘鐗�");
+                //todo:鍚憄lc鍙戦�佹姤璀�
+                return;
+            }
+        }
+        //todo:瓒呭ぇ灏哄
+        if (slotMaxHeight < Math.min(glassInfoList.get(0).getWidth(), glassInfoList.get(0).getHeight()) || glassInfoList.get(0).getThickness() > slotMaxthickness) {
+            int count = hollowBigStorageCageDetailsService.count(new LambdaQueryWrapper<HollowBigStorageCageDetails>()
+                    .eq(HollowBigStorageCageDetails::getSlot, THROUGH_SLOT)
+                    .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL));
+            if (count > 0) {
+                log.info("鐩撮�氱墖鍙板瓨鍦ㄧ幓鐠冿紝缁撴潫鏈杩涚墖");
+                //todo:鍚憄lc鍙戦�佹姤璀�
+                return;
+            }
+        }
+
+        log.info("灏嗛挗鍖栧皬鐗囪〃鍐呯殑鐘舵�佹敼涓洪挗鍖栫粨鏉燂紝鐜荤拑id鏈夛細{}", glassIdList);
         //淇敼閽㈠寲浠诲姟琛ㄤ腑鐨勭姸鎬�
         temperingGlassInfoService.update(new LambdaUpdateWrapper<TemperingGlassInfo>()
                 .set(TemperingGlassInfo::getState, Const.TEMPERING_END).in(TemperingGlassInfo::getGlassId, glassIdList));
-
+        //鎶ュ伐
+        log.info("灏嗘帴鏀跺埌鐨勭幓鐠冭繘琛岄挗鍖栬嚜鍔ㄦ姤宸ワ紝鐜荤拑id鏈夛細{}", glassIdList);
+        for (String glass : glassIdList) {
+            damageService.autoSubmitReport(glass, inTaskList.get(0).getStartSlot(), "閽㈠寲", "杩涗腑绌虹悊鐗囩");
+        }
         Map<String, List<GlassInfo>> glassListMap = glassInfoList.stream().collect(Collectors.groupingBy(GlassInfo::getGlassId));
 
         //璁$畻鐩爣鏍煎瓙
@@ -762,11 +801,15 @@
             if (totalLayer != 0) {
                 resultList.add(list.get(0));
                 HollowBigStorageCage storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>()
-                        .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth).last("limit 1"));
+                        .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON)
+                        .le(HollowBigStorageCage::getMinThickness, list.get(0).getThickness())
+                        .ge(HollowBigStorageCage::getMaxThickness, list.get(0).getThickness())
+                        .eq(HollowBigStorageCage::getRemainWidth, slotWidth)
+                        .orderByAsc(HollowBigStorageCage::getMaxThickness).last("limit 1"));
                 targetSlot = storageCage.getSlot();
                 hollowBigStorageCageService.update(new LambdaUpdateWrapper<HollowBigStorageCage>()
                         .set(HollowBigStorageCage::getRemainWidth, 0).eq(HollowBigStorageCage::getSlot, targetSlot));
-            }else{
+            } else {
                 resultList = tempList;
             }
             totalLayer = 0;
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
index c745481..e3b5d27 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -3,13 +3,22 @@
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.kangaroohy.milo.model.ReadWriteEntity;
+import com.kangaroohy.milo.service.MiloService;
+import com.mes.bigstoragecagetask.entity.BigStorageCageTask;
+import com.mes.bigstoragecagetask.service.BigStorageCageTaskService;
 import com.mes.common.config.Const;
+import com.mes.hollow.entity.HollowBigStorageCage;
 import com.mes.hollow.entity.HollowGlassOutRelationInfo;
+import com.mes.hollow.service.HollowBigStorageCageService;
 import com.mes.hollow.service.HollowGlassOutRelationInfoService;
 import com.mes.hollowqueue.entity.HollowGlassQueueInfo;
 import com.mes.hollowqueue.service.HollowGlassQueueInfoService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
 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.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
@@ -32,6 +41,16 @@
     HollowGlassQueueInfoService  hollowGlassQueueInfoService;
     @Resource
     HollowGlassOutRelationInfoService hollowGlassOutRelationInfoService;
+    @Resource
+    HollowBigStorageCageService hollowBigStorageCageService;
+    @Resource
+    BigStorageCageTaskService bigStorageCageTaskService;
+
+    @Autowired(required = false)
+    MiloService miloService;
+
+    @Resource
+    RedisUtil redisUtil;
     @Scheduled(fixedDelay = 1000)
     public void hollowGlassTask() {
         List<HollowGlassOutRelationInfo> taskList = hollowGlassOutRelationInfoService.list(new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
@@ -55,4 +74,109 @@
             }
         }
     }
+
+    @Scheduled(fixedDelay = 1000)
+    public void hollowGlassMessage() {
+        JSONObject jsonObject = new JSONObject();
+        try {
+            //鏌ヨ浣跨敤鏁版嵁婧�1鏌ヨ鏁版嵁
+            queryDataSource1(jsonObject);
+
+            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("hollowGlassMessage");
+            if (sendwServer != null) {
+                for (WebSocketServer webserver : sendwServer) {
+                    if (webserver != null) {
+                        webserver.sendMessage(jsonObject.toString());
+                        List<String> messages = webserver.getMessages();
+                        if (!messages.isEmpty()) {
+                            // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+                            webserver.clearMessages();
+                        }
+                    } else {
+                        log.info("Home is closed");
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public void queryDataSource1(JSONObject jsonObject) throws Exception {
+        List<Double> carPostion = new ArrayList<>();
+        carPostion.add(0.25);
+        carPostion.add(0.5);
+        jsonObject.append("carPostion", carPostion);
+        //鐣岄潰灞曠ず绗煎瓙淇℃伅
+        jsonObject.append("bigStorageCageInfos", hollowBigStorageCageService.queryHollowbigStorageCageDetail());
+
+        try{
+            //杩涚墖浠诲姟鏁版嵁
+            List<BigStorageCageTask> inTaskList = new ArrayList();
+            ReadWriteEntity fromOpcUa = miloService.readFromOpcUa("DLP2A.DLP2A.FROM1");
+            for (int i = 1; i <= 6; i++) {
+                ReadWriteEntity requestWord = miloService.readFromOpcUa("DLP2A.DLP2A.DI" + i);
+                ReadWriteEntity targetSlotWord = miloService.readFromOpcUa("DLP2A.DLP2A.TO" + i);
+                ReadWriteEntity stateWord = miloService.readFromOpcUa("DLP2A.DLP2A.STATE" + i);
+                if (null != requestWord.getValue()) {
+                    BigStorageCageTask task = new BigStorageCageTask();
+                    task.setGlassId(requestWord.getValue() + "");
+                    task.setStartSlot(Integer.parseInt(fromOpcUa.getValue() + ""));
+                    task.setTargetSlot(Integer.parseInt(targetSlotWord.getValue() + ""));
+                    task.setTaskState(Integer.parseInt(stateWord.getValue() + ""));
+                    inTaskList.add(task);
+                    continue;
+                }
+            }
+            jsonObject.append("bigStorageCageDetailsFeedTask", inTaskList);
+            //杩涚墖鑱旀満
+            ReadWriteEntity inkageEntity = miloService.readFromOpcUa("DLP2A.DLP2A.mesControl");
+            jsonObject.append("inkageEntity", inkageEntity.getValue());
+            //杩涚墖璇锋眰
+            ReadWriteEntity requestEntity = miloService.readFromOpcUa("DLP2A.DLP2A.RequestMes");
+            jsonObject.append("requestEntity", requestEntity.getValue());
+            //鍚姩鍛戒护
+            ReadWriteEntity mesReplyEntity = miloService.readFromOpcUa("DLP2A.DLP2A.MesReply");
+            jsonObject.append("mesReplyEntity", mesReplyEntity.getValue());
+            //鍑虹墖鑱旀満
+            ReadWriteEntity outInkageEntity = miloService.readFromOpcUa("DLP2B.DLP2B.mesControl");
+            jsonObject.append("outInkageEntity", outInkageEntity.getValue());
+            //鍑虹墖璇锋眰
+            ReadWriteEntity outRequestEntity = miloService.readFromOpcUa("DLP2B.DLP2B.RequestMes");
+            jsonObject.append("outRequestEntity", outRequestEntity.getValue());
+
+        }catch(Exception e){
+            //todo:涓嶅仛浠诲姟澶勭悊
+        }
+
+        //鍑虹墖浠诲姟鏁版嵁
+        List<BigStorageCageTask> outTaskList = bigStorageCageTaskService.queryTaskMessage("big_storage_cage_out_two_task");
+        jsonObject.append("bigStorageCageDetailsOutTask", outTaskList);
+
+        //璋冨害寮�鍏�
+        boolean dispatchHollowSwitch = false;
+        if (redisUtil.getCacheObject("dispatchHollowSwitch") == null) {
+            redisUtil.setCacheObject("dispatchHollowSwitch", false);
+        } else {
+            dispatchHollowSwitch = redisUtil.getCacheObject("dispatchHollowSwitch");
+        }
+        jsonObject.append("dispatchHollowSwitch", dispatchHollowSwitch);
+
+        //鐞嗙墖绗间娇鐢ㄦ儏鍐�
+        List<Map<String, Object>> bigStorageCageUsage = hollowBigStorageCageService.selectBigStorageCageUsage();
+        jsonObject.append("bigStorageCageUsage", bigStorageCageUsage);
+
+//
+//        //鎵撳嵃寮�鍏�
+//        boolean autoPrint = false;
+//        if (redisUtil.getCacheObject("autoPrint") == null) {
+//            redisUtil.setCacheObject("autoPrint", false);
+//        } else {
+//            autoPrint = redisUtil.getCacheObject("autoPrint");
+//        }
+//        jsonObject.append("autoPrint", autoPrint);
+
+    }
+
 }
diff --git a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/application.yml
index d1efe15..71d5812 100644
--- a/hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/howllowGlassModule/src/main/resources/application.yml
@@ -29,6 +29,8 @@
   xMaxSize: 2800
   temperingOutTargetPosition: 930
   artificialOutTargetPosition: 931
+  slotMaxHeight: 2500
+  slotMaxthickness: 12
 kangaroohy:
   milo:
     enabled: true

--
Gitblit v1.8.0