From 8a76767b0a7ad271c8487a02063590b956deb5df Mon Sep 17 00:00:00 2001
From: 严智鑫 <test>
Date: 星期四, 25 七月 2024 14:30:30 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml                                            |   22 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java                    |   12 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java                |    4 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml                                              |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java                                                    |    2 
 hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java                                   |   67 +
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java                                          |   12 
 UI-Project/src/utils/api.js                                                                                                                   |   23 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java                                                          |    5 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java                                          |    1 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java                          |   15 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java                           |    5 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java                   |    5 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java                              |    4 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml                                                  |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java         |   18 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/mapper/LoadPositionMapper.java                          |    4 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java              |   16 
 UI-Project/src/assets/d1a.png                                                                                                                 |    0 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java                                            |   44 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java                                          |    3 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java                                              |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java                                                |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java                                      |   23 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml                                                     |    4 
 UI-Project/src/assets/shangpian.png                                                                                                           |    0 
 UI-Project/src/views/Identify/identify.vue                                                                                                    |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/WebSocketServer.java                                                         |   27 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java                                      |   21 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java                                |   12 
 UI-Project/src/views/UnLoadGlass/loadmachinerack.vue                                                                                          |  108 -
 hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java                                   |   23 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java          |   39 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml                                                    |    2 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java        |   30 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java                          |    5 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java                         |    6 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                                |   49 
 UI-Project/src/lang/zh.js                                                                                                                     |    7 
 UI-Project/src/views/ReportWork/reportWork.vue                                                                                                |  132 ++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java  |  107 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java                                            |   17 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml                                                   |    9 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml                                                   |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java                                               |    3 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java                                     |   37 
 UI-Project/src/views/Slicecage/slicecage.vue                                                                                                  |  173 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java                                                               |    1 
 UI-Project/src/views/GlassStorage/MaterialRackManagement.vue                                                                                  |   36 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/json/PlcTemperingGlass.json                                           |  132 ++
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java                                      |    4 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java                                   |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/GlassInfoService.java                                            |    8 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java                                       |   11 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                                           |    4 
 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue                                                                                        |  309 ++++-
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java                                   |   10 
 UI-Project/src/views/Returns/returns.vue                                                                                                      |  232 ++-
 hangzhoumesParent/gateway/src/main/resources/application.yml                                                                                  |    8 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java                                     |   23 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java           |    7 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/controller/TemperingRecordController.java          |   20 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/impl/TemperingRecordServiceImpl.java       |   20 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/entity/TemperingRecord.java                        |   77 +
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/mapper/RawUsageMapper.java                                  |    3 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml                                           |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java |    1 
 UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue                                                                                     |    8 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java                           |   20 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                    |  194 ++
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java                  |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java                                                |    3 
 UI-Project/src/assets/dlpl9.png                                                                                                               |    0 
 JsonFile/PlcTemperingGlass.json                                                                                                               |  132 ++
 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                                                  |    5 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java                            |   12 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java                                              |    2 
 UI-Project/src/assets/lp9.png                                                                                                                 |    0 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java                                         |   16 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java                                                  |    3 
 UI-Project/src/views/PurchaseReturn/purchaseStorage.vue                                                                                       |  120 +
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java                                                  |    2 
 UI-Project/src/router/index.js                                                                                                                |   13 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java                     |   29 
 UI-Project/src/utils/WebSocketService.js                                                                                                      |   20 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java                      |   13 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java             |    2 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java                                             |   41 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml                           |    3 
 UI-Project/src/layout/MainErpView.vue                                                                                                         |    4 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java                                       |   66 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java                                             |   80 +
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java                     |    7 
 UI-Project/src/views/Caching/cachingun.vue                                                                                                    |    9 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java                 |    3 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java               |   14 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java      |   37 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java                        |   10 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java                                              |    4 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/TemperingRecordService.java                |   16 
 UI-Project/src/views/largescreen/largescreen.vue                                                                                              |    2 
 UI-Project/src/views/UnLoadGlass/Landingindication.vue                                                                                        |    8 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                            |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java                   |   71 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java                              |   51 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/TemperingRecordMapper.java                  |   16 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/xml/TemperingRecordMapper.xml               |   10 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java                 |   36 
 /dev/null                                                                                                                                     |    5 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java                       |   22 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java                                           |    9 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java                                      |   28 
 hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/common/S7object.java                                               |   60 +
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-prod.yml                                                    |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java                     |  112 +
 UI-Project/src/assets/lpa9.png                                                                                                                |    0 
 117 files changed, 2,725 insertions(+), 675 deletions(-)

diff --git a/JsonFile/PlcTemperingGlass.json b/JsonFile/PlcTemperingGlass.json
new file mode 100644
index 0000000..3abe9a6
--- /dev/null
+++ b/JsonFile/PlcTemperingGlass.json
@@ -0,0 +1,132 @@
+{
+    "plcAddressBegin": "DB88.0",
+    "plcAddressLenght": "58",
+    "dataType": "word",
+    "parameteInfor": [
+        {
+            "codeId": "confirmationWord",
+            "addressIndex": "0",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperingLayoutId",
+            "addressIndex": "2",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "filmsid",
+            "addressIndex": "4",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperingType",
+            "addressIndex": "6",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "thickness",
+            "addressIndex": "8",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "loadingRate",
+            "addressIndex": "10",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "areaDifference",
+            "addressIndex": "12",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "state",
+            "addressIndex": "22",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "deviceState",
+            "addressIndex": "24",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "resultState",
+            "addressIndex": "26",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "loadSpeed",
+            "addressIndex": "28",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "downSpeed",
+            "addressIndex": "30",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "load1",
+            "addressIndex": "32",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "heat1",
+            "addressIndex": "34",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "heat2",
+            "addressIndex": "36",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "cool1",
+            "addressIndex": "38",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "cool2",
+            "addressIndex": "40",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "downId",
+            "addressIndex": "42",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "productionTime",
+            "addressIndex": "44",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "heatEnergy",
+            "addressIndex": "46",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "coolEnergy",
+            "addressIndex": "48",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperatureUp1",
+            "addressIndex": "50",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperatureDown1",
+            "addressIndex": "52",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperatureUp2",
+            "addressIndex": "54",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperatureDown2",
+            "addressIndex": "56",
+            "addressLenght": "2"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/UI-Project/src/assets/d1a.png b/UI-Project/src/assets/d1a.png
new file mode 100644
index 0000000..b031d4b
--- /dev/null
+++ b/UI-Project/src/assets/d1a.png
Binary files differ
diff --git a/UI-Project/src/assets/dlpl9.png b/UI-Project/src/assets/dlpl9.png
new file mode 100644
index 0000000..fc78fde
--- /dev/null
+++ b/UI-Project/src/assets/dlpl9.png
Binary files differ
diff --git a/UI-Project/src/assets/lp9.png b/UI-Project/src/assets/lp9.png
new file mode 100644
index 0000000..a976458
--- /dev/null
+++ b/UI-Project/src/assets/lp9.png
Binary files differ
diff --git a/UI-Project/src/assets/lpa9.png b/UI-Project/src/assets/lpa9.png
new file mode 100644
index 0000000..f7f2204
--- /dev/null
+++ b/UI-Project/src/assets/lpa9.png
Binary files differ
diff --git a/UI-Project/src/assets/shangpian.png b/UI-Project/src/assets/shangpian.png
new file mode 100644
index 0000000..71152cc
--- /dev/null
+++ b/UI-Project/src/assets/shangpian.png
Binary files differ
diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
index 3a9af7a..21ceabd 100644
--- a/UI-Project/src/lang/zh.js
+++ b/UI-Project/src/lang/zh.js
@@ -83,6 +83,7 @@
         updatanull:'璇ュ伐绋嬫湭淇濆瓨鍒颁笂鐗囪〃锛�',
         glassnull:'鏇存柊鐜荤拑鐘舵�佹椂鍙戠敓閿欒',
         deletemessage:'鏄惁鍒犻櫎璇ユ潯淇℃伅?',
+        layoutSequence:'搴忓彿',
     },
     sorter:{
         gridnumber:'鏍呮牸鍙�',
@@ -205,6 +206,12 @@
         down:'涓嬩竴椤�',
         now:'褰撳墠椤垫樉绀�',
         tit:'鏉℃暟鎹�',
+        temperingqueries:'閽㈠寲鏌ヨ',
+        specifytempering:'鎸囧畾閽㈠寲',
+        projectnumber:'宸ョ▼鍙�',
+        layoutnumber:'閽㈠寲鐗堝浘鍙�',
+        numberglasses:'鐜荤拑鏁伴噺',
+        specifytemperinga:'鏄惁鎸囧畾閽㈠寲璇ユ潯淇℃伅锛�',
     },
     workOrder:{
         glassID:'鐜荤拑ID',
diff --git a/UI-Project/src/layout/MainErpView.vue b/UI-Project/src/layout/MainErpView.vue
index 098140d..8680e02 100644
--- a/UI-Project/src/layout/MainErpView.vue
+++ b/UI-Project/src/layout/MainErpView.vue
@@ -169,6 +169,10 @@
                alt=""
                style="max-width: 100%;max-height: 100%">
           <h3 style="margin: 1rem  ;font-weight: bold;width: 33vw;"> {{ $t('main.titleFirst') }}{{ user }}{{ $t('main.titleLast') }}</h3>
+          <!-- <div class="header-left">
+            <el-button :icon="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="toggleCollapse"
+              style="height:30px;"></el-button>
+          </div> -->
           <span style="height: 70%;width: 78vw;margin-top: 1rem;">
             <!-- <el-button class="sys-quit"
                        @click="quit"
diff --git a/UI-Project/src/router/index.js b/UI-Project/src/router/index.js
index 030de26..d790e4b 100644
--- a/UI-Project/src/router/index.js
+++ b/UI-Project/src/router/index.js
@@ -259,6 +259,19 @@
       },
     ]
   },
+  /*----------- 鎶ュ伐绠$悊 ----------------*/
+  {
+    path: 'reportWork',
+    name: 'reportWork',
+    component: () => import('../views/ReportWork/reportWork.vue'),
+    children:[
+      {
+        path: '/ReportWork/reportWork',
+        name: 'reportWork',
+        component: () => import('../views/ReportWork/reportWork.vue')
+      },
+    ]
+  },
         /*----------- 绠$悊绯荤粺 ----------------*/
         {
           path: 'sys',
diff --git a/UI-Project/src/utils/WebSocketService.js b/UI-Project/src/utils/WebSocketService.js
index 432bd9c..4ad03b7 100644
--- a/UI-Project/src/utils/WebSocketService.js
+++ b/UI-Project/src/utils/WebSocketService.js
@@ -1,7 +1,7 @@
 // WebSocketService.js
 
 let socket = null;
-
+let messages = '';
 export const initializeWebSocket = (socketUrl, messageHandler) => {
     if (typeof WebSocket === "undefined") {
       console.log("Your browser does not support WebSocket");
@@ -18,13 +18,25 @@
       if (!msg.data) {
         return;
       }
-  
-      const obj = JSON.parse(msg.data);
-  
+      
+      const isLastChunk = msg.data.endsWith('<END>');
+      //鏄惁涓烘渶鍚庝竴鍧楁秷鎭�
+      messages += msg.data;
+      if(isLastChunk||msg.data.length<50000) {
+        messages= messages.replace('<END>', '');
+        const obj = JSON.parse(messages);
+        
       // 璋冪敤娑堟伅澶勭悊鍑芥暟锛屽皢鏁版嵁浼犻�掔粰 Vue 缁勪欢
       if (messageHandler) {
         messageHandler(obj);
       }
+        messages='';
+      }
+      
+      
+
+  
+      
     };
   
     return socket;
diff --git a/UI-Project/src/utils/api.js b/UI-Project/src/utils/api.js
new file mode 100644
index 0000000..c8674a7
--- /dev/null
+++ b/UI-Project/src/utils/api.js
@@ -0,0 +1,23 @@
+// src/services/api.js
+import request from 'request';
+
+
+export const findTasks = (id, newState) => {
+  const url = `glassStorage/api/storageTask/findTasks`;
+  const options = {
+    method: 'POST',
+    url,
+    json: true,
+    body: { id, enableState: newState }
+  };
+
+  return new Promise((resolve, reject) => {
+    request(options, (error, response, body) => {
+      if (error) {
+        reject(new Error(error.message));
+      } else {
+        resolve(body);
+      }
+    });
+  });
+};
diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue
index d1ec117..2ce7900 100644
--- a/UI-Project/src/views/Caching/cachingun.vue
+++ b/UI-Project/src/views/Caching/cachingun.vue
@@ -10,7 +10,7 @@
           <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"
+            align="center"
             :label="$t('sorter.startstatus')"
             min-width="80"
             prop="enable_state"
@@ -194,7 +194,7 @@
 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 });  
+  const response = await request.post('/unLoadGlass/downStorage/updateDownStorageCage', { id: row.id, enableState: newState });  
   if (response.code === 200) {
       ElMessage.success(response.message);
       } else {  
@@ -202,7 +202,10 @@
       }  
   row.enable_state = newState;  
 };
-const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`;
+
+
+
+const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/downcache`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
diff --git a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
index e1b6d88..0f132b5 100644
--- a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
+++ b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
@@ -64,8 +64,17 @@
             <!-- <el-button type="success" size="mini" @click="addglass()">娣诲姞鍘熺墖</el-button> -->
           </template>
         </el-table-column>
-      </el-table>
 
+        
+      </el-table>
+      <el-pagination
+        v-if="totalItems > 0"
+        background
+        layout="prev, pager, next"
+        :total="totalItems"
+        :page-size="pageSize"
+        @current-change="handleCurrentChange"
+      ></el-pagination>
 
       
   </el-dialog>
@@ -256,6 +265,17 @@
    
 
     const Hidden = ref(false)
+
+
+    const totalItems = ref(0);
+    totalItems.value = 10;
+    const pageSize = 10;
+    let currentPage = ref(1);
+    const handleCurrentChange = (val) => {
+
+      currentPage.value = val;
+      
+    };
 
    const getTagType2 =(status) => {
       switch (status) {
@@ -555,17 +575,13 @@
 </script>
 
 <style scoped>
-html, body {
-  height: 100%;
-  margin: 0;
-  padding: 0;
-  overflow: hidden; /* 绂佹鍑虹幇婊氬姩鏉� */
-}
 
-.app-container {
 
-  flex-direction: column;
-  height: 100vh; /* 浣跨敤瑙嗗彛楂樺害 */
+#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;
 }
 
 
diff --git a/UI-Project/src/views/Identify/identify.vue b/UI-Project/src/views/Identify/identify.vue
index a972dbe..74f05a1 100644
--- a/UI-Project/src/views/Identify/identify.vue
+++ b/UI-Project/src/views/Identify/identify.vue
@@ -111,7 +111,6 @@
   //   controlsId: 201,
   //   })
     if (response.code == 200) {
-      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
       // window.location.reload() 
       blind.value = false;
@@ -126,7 +125,7 @@
     console.error(error);
   }
 }
-// // 浜哄伐鎷胯蛋
+ // 浜哄伐鎷胯蛋
 const handleManualTake = async () => {
   try  {
     var url="/cacheGlass/taskCache/identControls?identId="+currentGlassId.value+'&controlsId='+200;
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
index 77bd047..ee5825e 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -5,67 +5,202 @@
 import request from "@/utils/request"
 import { ref, onMounted, onBeforeUnmount } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
+import { ElMessage, ElMessageBox } from 'element-plus'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
   import { useI18n } from 'vue-i18n'
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
-const dialogFormVisible = ref(true)
-const dialogFormVisiblea = ref(false)
+const dialogFormVisible = ref(false)
+const dialogFormVisiblea = ref(true)
 const dialogFormVisibleb = ref(false)
+const blind = ref(false)
 const width = ref();
 const height = ref();
 const adjustedRects = ref([]);
 const adjustedRects2 = ref([]);
 const adjustedRectsa = ref([]);
 const adjustedRectsb = ref([]);
+const currentGlassId = ref(null);
+const currenttemperingFeedSequence = ref(null);
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
 const handleMessage = (data) => {
 // 杩涚倝涓�
-  adjustedRects.value =  data.intoGlass[0].map(rect => ({  
+  if(data.intoGlass!=null){
+    adjustedRects.value =  data.intoGlass[0].map(rect => {  
+        let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
+        let newX = rect.yCoordinate; 
+  if (rect.angle === 0) {  
+          adjustedWidth = rect.height * 0.12;  
+          adjustedHeight = rect.width * 0.1;  
+          adjustedWidtha = rect.height;  
+          adjustedHeighta = rect.width;  
+          newX = 5087 - (rect.xCoordinate + rect.height); 
+        } else {  
+          adjustedWidth = rect.width * 0.12;  
+          adjustedHeight = rect.height * 0.1;  
+          adjustedWidtha = rect.width;  
+          adjustedHeighta = rect.height;  
+          newX = 5087 - (rect.xCoordinate + rect.width); 
+        }  
+        return {  
         ...rect, 
-        xcoordinate: rect.xCoordinate * 0.3,
-        ycoordinate: rect.ycoordinate * 0.3,
-        width: rect.width * 0.2,
-        height: rect.height * 0.2,
-        widtha: rect.width,
-        heighta: rect.height,
-      })); 
-  adjustedRects2.value =  data.intoGlass2[0].map(rect => ({  
+        xcoordinate: newX * 0.12,
+        ycoordinate: rect.yCoordinate * 0.1,
+        width: adjustedWidth,  
+        height: adjustedHeight,  
+        widtha: adjustedWidtha, 
+        heighta: adjustedHeighta,
+      };  
+      });
+      }
+  if(data.intoGlass2!=null){
+    adjustedRects2.value =  data.intoGlass2[0].map(rect => {  
+        let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
+      let newX = rect.yCoordinate; 
+      if (rect.angle === 0) {  
+          adjustedWidth = rect.height * 0.12;  
+          adjustedHeight = rect.width * 0.1;  
+          adjustedWidtha = rect.height;  
+          adjustedHeighta = rect.width;  
+          newX = 5087 - (rect.xCoordinate + rect.height); 
+  } else {  
+          adjustedWidth = rect.width * 0.12;  
+          adjustedHeight = rect.height * 0.1;  
+          adjustedWidtha = rect.width;  
+          adjustedHeighta = rect.height;  
+          newX = 5087 - (rect.xCoordinate + rect.width); 
+  }  
+        return {  
         ...rect, 
-        xcoordinate: rect.xCoordinate * 0.3,
-        ycoordinate: rect.ycoordinate * 0.3,
-        width: rect.width * 0.2,
-        height: rect.height * 0.2,
-        widtha: rect.width,
-        heighta: rect.height,
-      })); 
-      console.log(data.intoGlass[0]);
+        xcoordinate: newX * 0.12,
+        ycoordinate: rect.yCoordinate * 0.1,
+        width: adjustedWidth,  
+        height: adjustedHeight,  
+        widtha: adjustedWidtha, 
+        heighta: adjustedHeighta,
+      };  
+      });
+      }
   // 杩涚倝鍓�
-      adjustedRectsa.value = data.waitingGlass[0].map(rect => ({  
-        ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5,
-        ycoordinate: rect.ycoordinate * 0.5,
-        width: rect.width * 0.4,
-        height: rect.height * 0.4,
-        widtha: rect.width,
-        heighta: rect.height,
-        state: rect.state
-      }));
+  if(data.waitingGlass!=null){
+    adjustedRectsa.value = data.waitingGlass[0].map(rect => {  
+  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta; 
+  let newX = rect.yCoordinate; 
+  if (rect.angle === 0) {  
+    adjustedWidth = rect.width * 0.24;  
+    adjustedHeight = rect.height * 0.16;
+    adjustedWidtha = rect.width;  
+    adjustedHeighta = rect.height;  
+    newX = 5190 - (rect.yCoordinate + rect.width); 
+    } else {  
+    adjustedWidth = rect.height * 0.24;  
+    adjustedHeight = rect.width * 0.16;  
+    adjustedWidtha = rect.height;  
+    adjustedHeighta = rect.width;  
+    newX = 5190 - (rect.yCoordinate + rect.height);  
+  }  
+  return {  
+    ...rect, 
+    x: newX * 0.24,  
+    y: rect.xCoordinate * 0.16,  
+    width: adjustedWidth,  
+    height: adjustedHeight,  
+    widtha: adjustedWidtha, 
+    heighta: adjustedHeighta,
+  };  
+});
+  }
     // 宸插嚭鐐�
-      adjustedRectsb.value = data.outGlass[0].map(rect => ({  
+  if(data.outGlass!=null){
+    adjustedRectsb.value = data.outGlass[0].map(rect => {  
+  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
+  let newX = rect.yCoordinate; 
+  if (rect.angle === 0) {  
+    adjustedWidth = rect.width * 0.24;  
+    adjustedHeight = rect.height * 0.16;  
+    adjustedWidtha = rect.width;  
+    adjustedHeighta = rect.height;  
+    newX = 5190 - (rect.yCoordinate + rect.width); 
+  } else {  
+    adjustedWidth = rect.height * 0.24;  
+    adjustedHeight = rect.width * 0.16;  
+    adjustedWidtha = rect.height;  
+    adjustedHeighta = rect.width;  
+    newX = 5190 - (rect.yCoordinate + rect.height);  
+  }  
+  return {  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5,
-        ycoordinate: rect.ycoordinate * 0.5,
-        width: rect.width * 0.4,
-        height: rect.height * 0.4,
-        widtha: rect.width,
-        heighta: rect.height,
-        state: rect.state
-      }));  
+        x: newX * 0.24,
+        y: rect.xCoordinate * 0.16,
+        width: adjustedWidth,  
+        height: adjustedHeight,  
+        widtha: adjustedWidtha, 
+        heighta: adjustedHeighta,
+  };  
+});
+  }
 };
 onMounted(() => {
   initializeWebSocket(socketUrl, handleMessage);
 });
+function updateRectColors() {  
+  adjustedRectsa.value.forEach(rect => {  
+    if (rect.glassId === glassId) {  
+      rect.state = 5;
+    }
+  });  
+}  
+function getRectColora(state) {  
+  switch (state) {  
+    case 0:  
+      return '#d1edc4';  
+    case 1:  
+      return '#E6E6FA';
+    case -1:  
+      return '#dedfe0';  
+    case 5:  
+      return '#911005';  
+  }
+}
+function getRectColorb(state) {  
+  switch (state) {  
+    case 3:  
+      return '#f8e3c5';  
+    case 4:  
+      return '#F0F8FF';
+    case 5:  
+      return '#911005';  
+  }  
+}
+function showDialog(rect) {  
+  currentGlassId.value = rect.glassId;  
+  currenttemperingFeedSequence.value = rect.temperingFeedSequence;  
+  blind.value = true;  
+}  
+// 鐮存崯
+const handleDamage = async () => {
+  try  {
+  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', {
+    glassId: currentGlassId.value,
+    // temperingFeedSequence: currenttemperingFeedSequence.value,
+    line: 4001,
+    status: 2,
+    workingProcedure: '閽㈠寲',
+    })
+    if (response.code == 200) {
+      ElMessage.success(response.message);
+      blind.value = false;
+      updateRectColors();
+    } else {
+      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+      ElMessage.error(response.message);
+    }
+}
+catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
@@ -73,89 +208,126 @@
 </script>
 <template>
   <div style="margin-top: 10px;">
-     <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">{{ $t('processCard.intofurnace') }}</el-button>
-     <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >{{ $t('processCard.beforefurnace') }}</el-button>
+     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >{{ $t('processCard.beforefurnace') }}</el-button>
+     <el-button style="margin-left: 15px;" id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">{{ $t('processCard.intofurnace') }}</el-button>
     <el-button  id="searchButton" type="success" @click="dialogFormVisibleb = true;dialogFormVisible = false;dialogFormVisiblea = false">{{ $t('processCard.outfurnace') }}</el-button>
 <div v-if="dialogFormVisible" >
     <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
 <div style="width: 49%;float: left;background-color: #f4f4f5;height: 550px;">
-  <el-scrollbar height="630px">
-    <div  style="position: relative;width: 1400px;">  
+    <div v-if="adjustedRects.length > 0">
+      <div style="text-align: center;">鐐夊彿锛歿{ adjustedRects[0].engineerId }}-{{ adjustedRects[0].temperingLayoutId }}</div>  
+    <el-scrollbar height="550px" style="background-color: #e9e9eb;">
+    <div  style="position: relative;max-width: 1400px;">  
       <div  
       v-for="(rect, index) in adjustedRects"
       :key="index"  
+      @click="showDialog(rect)"  
       class="rect"
-      :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px`  }"  
+      :style="{ position: 'absolute', 
+       top: `${rect.ycoordinate}px`, 
+       left: `${rect.xcoordinate}px`,
+        width: `${rect.width}px`, 
+        height: `${rect.height}px`,
+        backgroundColor: rect.state === 5 ? '#911005' : 'lightblue' }"
     >
      <div  class="centered-text">
-    <div >{{ rect.flowcardId }}</div>  
-    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
+    <div >{{ rect.glassId }}</div>  
+    <div >{{ rect.flowCardId }}</div>  
+    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>  
   </div>
   </div>
    </div>
    </el-scrollbar>
+   </div>
   </div>
 <div style="width: 49%;float: right;background-color: #f4f4f5;height: 550px;">
-  <el-scrollbar height="550px">
-    <div  style="position: relative;width: 1400px;">  
+    <div v-if="adjustedRects2.length > 0">
+      <div style="text-align: center;">鐐夊彿锛歿{ adjustedRects[0].engineerId }}-{{ adjustedRects[0].temperingLayoutId }}</div>  
+    <el-scrollbar height="550px" style="background-color: #e9e9eb;">
+    <div  style="position: relative;max-width: 1400px;">  
       <div  
       v-for="(rect, index) in adjustedRects2"
       :key="index"  
+      @click="showDialog(rect)"  
       class="rect"
-      :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px`  }"  
-    >
+      :style="{ position: 'absolute', 
+       top: `${rect.ycoordinate}px`, 
+       left: `${rect.xcoordinate}px`, 
+       width: `${rect.width}px`, 
+       height: `${rect.height}px`,
+       backgroundColor: rect.state === 5 ? '#911005' : 'lightblue' }"
+       >
      <div  class="centered-text">
-    <div >{{ rect.flowcardId }}</div>  
-    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
+    <div >{{ rect.glassId }}</div>  
+    <div >{{ rect.flowCardId }}</div>  
+    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>  
   </div>
   </div>
    </div>
    </el-scrollbar>
+   </div>
 </div>
    </el-card>
     </div>
 <div v-if="dialogFormVisiblea">
   <!-- 杩涚倝鍓� -->
-  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
-      <el-scrollbar height="550px">
-    <div  style="position: relative;width: 1400px;">  
+  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
+    <div v-if="adjustedRectsa.length > 0">
+      <div style="text-align: center;">鐐夊彿锛歿{ adjustedRects[0].engineerId }}-{{ adjustedRects[0].temperingLayoutId }}</div>  
+      <el-scrollbar height="550px" style="background-color: #e9e9eb;">
+    <div  style="position: relative;max-width: 1400px;">  
       <div  
       v-for="(rect, index) in adjustedRectsa"  
       :key="index"  
+      @click="showDialog(rect)"  
       class="rect"  
-      :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`,
+      :style="{ position: 'absolute',  top: `${rect.y}px`, left: `${rect.x}px`,
        width: `${rect.width}px`, height: `${rect.height}px`,
-       backgroundColor: rect.state === 0 ? '#dedfe0' : '#d1edc4' }">
-     <div  class="centered-text">
-    <div >{{ rect.flowcardId }}</div>  
-    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
+      backgroundColor: getRectColora(rect.state) }">
+    <div  class="centered-text">
+    <div>{{ rect.glassId }}</div>  
+    <div >{{ rect.flowCardId }}</div>  
+    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>  
   </div>
   </div> 
    </div>
    </el-scrollbar>
+   </div>
    </el-card>
 </div>
 <div v-if="dialogFormVisibleb">
   <!-- 宸插嚭鐐� -->
-  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
-      <el-scrollbar height="550px">
-    <div  style="position: relative;width: 1400px;">  
+  <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
+      <div v-if="adjustedRectsb.length > 0">
+      <div style="text-align: center;">鐐夊彿锛歿{ adjustedRects[0].engineerId }}-{{ adjustedRects[0].temperingLayoutId }}</div>  
+      <el-scrollbar height="550px" style="background-color: #e9e9eb;">
+    <div  style="position: relative;max-width: 1400px;">  
       <div  
       v-for="(rect, index) in adjustedRectsb"  
       :key="index"  
+      @click="showDialog(rect)"  
       class="rect"  
-      :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`,
+      :style="{ position: 'absolute',  top: `${rect.y}px`, left: `${rect.x}px`,
        width: `${rect.width}px`, height: `${rect.height}px`,
-       backgroundColor: rect.state === 4 ? '#911005' : '#f8e3c5' }">
+      backgroundColor: getRectColorb(rect.state) }">
+       <!-- backgroundColor: rect.state === 4 ? '#911005' : '#f8e3c5' }"> -->
      <div  class="centered-text">
-    <div >{{ rect.flowcardId }}</div>  
-    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
+    <div >{{ rect.glassId }}</div>  
+    <div >{{ rect.flowCardId }}</div>  
+    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>  
   </div>
   </div> 
    </div>
    </el-scrollbar>
+   </div>
    </el-card>
 </div>
+
+<el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;">
+        <el-button type="warning" plain :icon="Delete" @click="handleDamage"  style="width: 140px;margin-left: 10px;">
+          {{ $t('order.dilapidation') }}
+        </el-button>
+  </el-dialog> 
   </div>
 </template>
 <style scoped>
@@ -233,9 +405,10 @@
 }  
 .centered-text {
   /* 璁剧疆鏂囧瓧灞呬腑鏍峰紡 */  
-  display: flex;  
+  /* display: flex; */
   justify-content: center;  
-  align-items: center;  
+  align-items: center; 
   height: 100%; /* 纭繚div鍗犳嵁鏁翠釜鐭╁舰鐨勯珮搴� */  
+  /* font-size: small; */
 } 
 </style>
\ No newline at end of file
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
index d987eb8..742ba24 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
@@ -2,14 +2,19 @@
 import {Search} from "@element-plus/icons-vue";
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
+import { ElMessage, ElMessageBox } from 'element-plus'
+import request from "@/utils/request"
 
 import { ref, onMounted, onBeforeUnmount } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 const adjustedRects = ref([]);
+const currentGlassId = ref(null);
+const currenttemperingFeedSequence = ref(null);
 
 const dialogFormVisible = ref(true)
 const dialogFormVisiblea = ref(false)
+const blind = ref(false)
 
 const getTableRow = (row,type) =>{
   switch (type) {
@@ -25,21 +30,85 @@
   }
 }
 
-const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
+const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`; 
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
-  adjustedRects.value =  data.overGlass[0].map(rect => ({  
-        ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5, // 灏唜鍊奸櫎浠�3  
-        ycoordinate: rect.ycoordinate * 0.5,
-        width: rect.width * 0.4,
-        height: rect.height * 0.4,
-        widtha: rect.width,
-        heighta: rect.height,
-      })); 
-      console.log(adjustedRects.value);
+  if(data.overGlass!=null){
+    adjustedRects.value =  data.overGlass[0].map(rect => {  
+  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
+      let newX = rect.yCoordinate; 
+      if (rect.angle === 0) {  
+    adjustedWidth = rect.width * 0.24;  
+    adjustedHeight = rect.height * 0.16;  
+    adjustedWidtha = rect.width;  
+    adjustedHeighta = rect.height;  
+    newX = 5190 - (rect.yCoordinate + rect.width);
+  } else {  
+    adjustedWidth = rect.height * 0.24;  
+    adjustedHeight = rect.width * 0.16;  
+    adjustedWidtha = rect.height;  
+    adjustedHeighta = rect.width;  
+    newX = 5190 - (rect.yCoordinate + rect.height);
+  }  
+  return {  
+    ...rect, 
+    xcoordinate: newX * 0.24, 
+    ycoordinate: rect.xCoordinate * 0.16,
+    width: adjustedWidth,  
+    height: adjustedHeight,  
+    widtha: adjustedWidtha, 
+    heighta: adjustedHeighta,
+  };  
+});
+  }
 };
+function updateRectColors() {  
+  adjustedRectsa.value.forEach(rect => {  
+    if (rect.glassId === glassId) {  
+      rect.state = 5;
+    }
+  });  
+}  
+function getRectColora(state) {  
+  switch (state) {  
+    case 3:  
+      return '#f8e3c5';  
+    case 4:  
+      return '#F0F8FF';
+    case 5:  
+      return '#911005';  
+  }  
+}
+function showDialog(rect) {  
+  currentGlassId.value = rect.glassId;  
+  currenttemperingFeedSequence.value = rect.temperingFeedSequence;  
+  blind.value = true;  
+}  
+// 鐮存崯
+const handleDamage = async () => {
+  try  {
+  const response = await request.post('/temperingGlass/temperingGlassInfo/updateTemperingState', {
+    glassId: currentGlassId.value,
+    // temperingFeedSequence: currenttemperingFeedSequence.value,
+    line: 4001,
+    status: 2,
+    workingProcedure: '閽㈠寲',
+    })
+    if (response.code == 200) {
+      ElMessage.success(response.message);
+      blind.value = false;
+      updateRectColors();
+    } else {
+      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+      ElMessage.error(response.message);
+    }
+}
+catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
 onMounted(() => {
   // fetchFlowCardId();
   // fetchTableData(); // 鑾峰彇鏁版嵁
@@ -55,25 +124,37 @@
 <template>
   <div style="margin-top: 10px;">
 <div>
-    <el-card style="margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
-    <el-scrollbar height="600px">
-    <div  style="position: relative;width: 1400px;">  
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 600px;" v-loading="loading">
+      <!-- <el-card style="margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading"> -->
+      <div v-if="adjustedRects.length > 0">
+      <div style="text-align: center;">鐐夊彿锛歿{ adjustedRects[0].engineerId }}-{{ adjustedRects[0].temperingLayoutId }}</div>  
+    <el-scrollbar height="550px" width="1200px" style="background-color: #e9e9eb;">
+    <div  style="position: relative;">  
       <div  
       v-for="(rect, index) in adjustedRects"
       :key="index"  
+      @click="showDialog(rect)"  
       class="rect"  
       :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`,
        width: `${rect.width}px`, height: `${rect.height}px`,
-       backgroundColor: rect.state === 4 ? '#d1edc4' : '#f8e3c5' }">
+      backgroundColor: getRectColora(rect.state) }">
      <div  class="centered-text">
-    <div >{{ rect.flowcardId }}</div>  
-    <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
+    <div >{{ rect.glassId }}</div>  
+    <div >{{ rect.flowCardId }}</div>  
+    <div>{{ rect.widtha }}*{{ rect.heighta }}</div>  
+    <!-- <div style="margin-top: 25px;margin-left: -60px;">{{ rect.widtha }}*{{ rect.heighta }}</div>   -->
   </div>
   </div> 
    </div>
    </el-scrollbar>
+   </div>
     </el-card>
     </div>
+    <el-dialog v-model="blind" top="30vh" width="15%" style="text-align: center;">
+        <el-button type="warning" plain :icon="Delete" @click="handleDamage"  style="width: 140px;margin-left: 10px;">
+          {{ $t('order.dilapidation') }}
+        </el-button>
+  </el-dialog> 
   </div>
 
 </template>
@@ -94,9 +175,10 @@
 } 
 .centered-text {
   /* 璁剧疆鏂囧瓧灞呬腑鏍峰紡 */  
-  display: flex;  
+  /* display: flex; */
   justify-content: center;  
-  align-items: center;  
+  align-items: center; 
   height: 100%; /* 纭繚div鍗犳嵁鏁翠釜鐭╁舰鐨勯珮搴� */  
+  font-size: small;
 } 
 </style>
\ No newline at end of file
diff --git a/UI-Project/src/views/ReportWork/reportWork.vue b/UI-Project/src/views/ReportWork/reportWork.vue
new file mode 100644
index 0000000..f28dac1
--- /dev/null
+++ b/UI-Project/src/views/ReportWork/reportWork.vue
@@ -0,0 +1,132 @@
+<template>
+  <div style="height: 600px;">
+    <span class="demonstration">鐢熶骇鏃堕棿</span>
+    <el-date-picker v-model="timeRange" type="daterange" format="YYYY/MM/DD" value-format="YYYY-MM-DD"
+      start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" :default-time="defaultTime" />
+    <el-select v-model="report.type" placeholder="娓呴�夋嫨绫诲瀷">
+      <el-option label="鍏ㄩ儴" value="0"></el-option>
+      <el-option label="瀹屽伐" value="1"></el-option>
+      <el-option label="鐮存崯" value="2"></el-option>
+      <el-option label="鎷胯蛋" value="3"></el-option>
+    </el-select>
+    <el-select v-model="report.status" placeholder="娓呴�夋嫨鐘舵��">
+      <el-option label="鍏ㄩ儴" value="0"></el-option>
+      <el-option label="鏈姤宸�" value="1"></el-option>
+      <el-option label="寰呮姤宸�" value="2"></el-option>
+      <el-option label="宸叉姤宸�" value="3"></el-option>
+    </el-select>
+    <el-select v-model="report.workingProcedure" placeholder="娓呴�夋嫨宸ュ簭">
+      <el-option label="鍏ㄩ儴" value="0"></el-option>
+      <el-option label="鍒囧壊" value="1"></el-option>
+      <el-option label="纾ㄨ竟" value="2"></el-option>
+      <el-option label="閽㈠寲" value="3"></el-option>
+    </el-select>
+    <el-button type="primary" @click="selectReportData()">鏌ヨ</el-button>
+    <el-button type="success">鎶ュ伐</el-button>
+    <el-table height="100%" ref="table" :data="reportData"
+      :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
+      <el-table-column prop="teamsGroupsName" align="center" label="鎶ュ伐鐝粍" min-width="120" />
+      <el-table-column prop="deviceName" align="center" label="鎶ュ伐璁惧" min-width="120" />
+      <el-table-column prop="line" align="center" label="绾胯矾" min-width="120" />
+      <el-table-column prop="workingProcedure" align="center" label="宸ュ簭" min-width="120" />
+      <el-table-column prop="glassId" align="center" label="鐜荤拑id" min-width="120" />
+      <el-table-column prop="engineerId" align="center" label="宸ョ▼鍙�" min-width="120" />
+      <el-table-column prop="temperingLayoutId" align="center" label="閽㈠寲鐗堝浘id" min-width="120" />
+      <el-table-column prop="damageTime" align="center" label="鐢熶骇鏃堕棿" min-width="120" />
+      <el-table-column prop="type" align="center" label="绫诲瀷" min-width="120" />
+      <el-table-column prop="status" align="center" label="鐘舵��" min-width="120" />
+      <el-table-column prop="processId" align="center" label="娴佺▼鍗�" min-width="120" />
+      <el-table-column prop="orderNumber" align="center" label="搴忓彿" min-width="120" />
+      <el-table-column prop="technologyNumber" align="center" label="灞�" min-width="120" />
+      <el-table-column prop="breakageType" align="center" label="鐮存崯绫诲瀷" min-width="120" />
+      <el-table-column prop="breakageReason" align="center" label="鐮存崯鍘熷洜" min-width="120" />
+      <el-table-column prop="responsibleProcess" align="center" label="璐d换宸ュ簭" min-width="120" />
+      <el-table-column prop="responsiblePersonnel" align="center" label="璐d换浜哄憳" min-width="120" />
+      <el-table-column prop="responsibleTeam" align="center" label="璐d换鐝粍" min-width="120" />
+      <el-table-column prop="responsibleEquipment" align="center" label="璐d换璁惧" min-width="120" />
+      <el-table-column prop="remark" align="center" label="澶囨敞" min-width="120" />
+    </el-table>
+  </div>
+</template>
+<script setup>
+import { Delete, Upload } from '@element-plus/icons-vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { ref, onMounted, onBeforeUnmount, reactive, computed, shallowRef, onUnmounted, watchEffect } from "vue";
+import request from "@/utils/request"
+import { WebSocketHost, host } from '@/utils/constants'
+import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
+import { useI18n } from 'vue-i18n'
+const { t } = useI18n()
+const report = ref({
+  type: '0',
+  status: '0',
+  workingProcedure: '0',
+});
+const reportData = ref([])
+const timeRange = ref(["2022-01-01", "2022-01-01"])
+
+
+// 鏌ヨ鏁版嵁
+const selectReportData = async () => {
+  const response = await request.post("/cacheVerticalGlass/damage/selectDamage", {
+    startTime: timeRange.value[0],
+    endTime: timeRange.value[1],
+    type: report.value.type,
+    status: report.value.status,
+    workingProcedure: report.value.workingProcedure
+  })
+  if (response.code === 200) {
+    reportData.value = response.data;
+    ElMessage.success(response.message);
+  } else {
+    ElMessage.error(response.message);
+  }
+
+  const responses = await request.post("/cacheVerticalGlass/damage/insertDamage", {
+    glassId:"P24060403|3|6",
+    line:"2001",
+    workingProcedure:"鍐峰姞宸�",
+    remark:"",
+    status:"2"
+  })
+};
+
+const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`;
+const handleMessage = (data) => {
+  // adjustedRects.value = data.device[0].map(rect => ({  
+  //       ...rect, 
+  //       completed: rect.completedQuantity,
+  //       breakage: rect.breakageQuantity,
+  //       thisProcess: rect.thisProcess,
+  //     })); 
+};
+let socket;
+onMounted(() => {
+  socket = new WebSocket(socketUrl);
+  socket.onmessage = (event) => {
+    const data = JSON.parse(event.data);
+
+    // updateCharts();
+  };
+  // };  
+});
+
+
+
+
+onUnmounted(() => {
+  socket.close();
+});
+
+onMounted(() => {
+  // fetchFlowCardId();
+  // fetchTableData(); // 鑾峰彇鏁版嵁
+  initializeWebSocket(socketUrl, handleMessage);
+});
+onBeforeUnmount(() => {
+  console.log("鍏抽棴浜�")
+  closeWebSocket();
+});
+</script>
+
+<style scoped></style>
\ No newline at end of file
diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue
index 42dd369..85ae736 100644
--- a/UI-Project/src/views/Returns/returns.vue
+++ b/UI-Project/src/views/Returns/returns.vue
@@ -15,6 +15,17 @@
 const adda = ref(false)
 const flake = ref(false)
 const flakea = ref(false)
+const flakeb = ref(false)
+const flakec = ref(false)
+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('');
 import { WebSocketHost ,host} from '@/utils/constants'
 import request from "@/utils/request"
 const ida = ref(null); 
@@ -78,26 +89,62 @@
     // ElMessage.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触锛岃閲嶈瘯');
   }
 };
-request.get("/loadGlass/LoadGlass/list").then((res) => {
-      window.localStorage.setItem('patternWidth', res.data.patternWidth)
-      window.localStorage.setItem('workstationId', res.data.workstationId)
-          if (res.code == 200) {
-          console.log(res.data);
-          tableDataa.value = res.data
-          console.log(res.data.patternWidth);
-          
-      let workstationId = window.localStorage.getItem('workstationId')
-      let patternWidth = window.localStorage.getItem('patternWidth')
-      if (patternWidth !== '' || workstationId == '1') {
-      flake.value = true
-    } else if (patternWidth !== '' || workstationId == '2') {
-      flakea.value = true
-    }
-          } else {
-          ElMessage.warning(res.message)
-          // router.push("/login")
+onMounted(() => {  
+  list('');  
+  fetchOptions('');
+  initializeWebSocket(socketUrl, handleMessage);
+});
+onMounted(() => {  
+}); 
+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);  
+  }  
+}; 
+// 鍋囪杩欐槸鎮ㄧ殑鍝嶅簲澶勭悊鍑芥暟 
+// request.get("/loadGlass/LoadGlass/list").then((res) => {
+//       if (res.code == 200) {
+//           tableDataa.value = res.data
+//           if (tableDataa.value.length === 4) {
+//           if (tableDataa.value[0].patternHeight > 0) {
+//           flake.value = true;
+//           }
+//          if (tableDataa.value[1].patternHeight > 0) {
+//           flakea.value = true;
+//           } 
+//          if (tableDataa.value[2].patternHeight > 0) {
+//           flakeb.value = true;
+//           } 
+//          if (tableDataa.value[3].patternHeight > 0) {
+//           flakec.value = true;
+//           } 
+//            }
+//           } else {
+//           ElMessage.warning(res.message)
+//           // router.push("/login")
+//           }
+//           }); 
 //瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
 const titleSelectJson = ref({
   processType: [],
@@ -109,10 +156,12 @@
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
-
+  if(data.prioritylist!=null){
   tableData.splice(0, tableData.length, ...data.prioritylist[0]);
+  }
+  if(data.list!=null){
   tableDataa.value = data.list[0]
- // console.log("鏇存柊鍚庢暟鎹�", tableData);
+  }
 };
 const requestData = {  
   state: 100  
@@ -153,36 +202,19 @@
     options.value = []; // 娓呯┖閫夐」鍒楄〃  
   }  
 };  
-// 鍒濆鍖栧姞杞芥暟鎹紙濡傛灉闇�瑕侊級  
-onMounted(() => {  
-  fetchOptions('');  
-  initializeWebSocket(socketUrl, handleMessage);
-});  
 onBeforeUnmount(() => {
-  console.log("鍏抽棴浜�")
   closeWebSocket();
 });
-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 handleBindRack = (row) => {
   workstationId.value = row.workstationId; // 鍋囪rackNumber鏄灦鍙峰瓧娈电殑灞炴�у悕
   ida.value = row.id;
-  console.log(ida.value);
   add.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
 };
 // 娣诲姞
     const handleConfirm = async () => {
-  console.log(ida.value);
       // console.log('id.value:', id.value);
-  if ((ida.value === 2 || ida.value === 4) && (parseInt(patternHeight.value, 10) >= 2700 )) {  
+  if ((ida.value === 2 || ida.value === 4) && (parseInt(selectedValuea.value, 10) >= 2700 )) {  
     try {
     const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
       id: workstationId.value,
@@ -193,32 +225,50 @@
       patternThickness: selectedValuec.value,
       number: number.value
     }); 
+      // window.localStorage.setItem('workstationId', workstationId.value)
+      // window.localStorage.setItem('patternHeight', selectedValuea.value)
+      // window.localStorage.setItem('patternWidth', selectedValue.value)
+      // window.localStorage.setItem('number', number.value)
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
       // window.location.reload() 
       add.value = false;
      tableDataa.value = response.data;
+      // let workstationId = window.localStorage.getItem('workstationId')
+      // let patternHeight = window.localStorage.getItem('patternHeight')
+      // let patternWidth = window.localStorage.getItem('patternWidth')
+      // let number = window.localStorage.getItem('number')
+      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
+    }
+    //   if (patternHeight !== '0' && patternWidth !== '0' && number !== '0' && workstationId === '1') {
+    //   flake.value = true
+    // } else if (patternHeight !== '0' && patternWidth !== '0' && number !== '0' && workstationId === '2'){
+    //   flakea.value = true
+    // }else if (patternHeight !== '0' && patternWidth !== '0' && number !== '0' && workstationId === '3'){
+    //   flakeb.value = true
+    // }else if (patternHeight !== '0' && patternWidth !== '0' && number !== '0' && workstationId === '4'){
+    //   flakec.value = true
+    // }
       selectedValuea.value = '';
       selectedValue.value = '';
       selectedValueb.value = '';
       selectedValuec.value = '';
       number.value = '';
-      window.localStorage.setItem('workstationId', response.data.workstationId)
-      let workstationId = window.localStorage.getItem('workstationId')
-      if (workstationId == '1') {
-      flake.value = true
-    } else if (workstationId == '2'){
-      flakea.value = true
-    }
+        list()
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.message);
     }
   } catch (error) {  
       // 澶勭悊璇锋眰閿欒  
-      console.error(error);  
-      alert('璇锋眰澶辫触锛岃绋嶅悗鍐嶈瘯锛�');  
     }  
   }  
   else if( ida.value === 1 || ida.value === 3){
@@ -238,26 +288,27 @@
       // window.location.reload() 
       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 = '';
-      window.localStorage.setItem('workstationId', response.data.workstationId)
-      let workstationId = window.localStorage.getItem('workstationId')
-      if (workstationId == '1') {
-      flake.value = true
-    } else if (workstationId == '2'){
-      flakea.value = true
-    }
+      list()
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.message);
     }
   } catch (error) {  
       // 澶勭悊璇锋眰閿欒  
-      console.error(error);  
-      alert('璇锋眰澶辫触锛岃绋嶅悗鍐嶈瘯锛�');  
     } 
     }
   else  {
@@ -285,14 +336,19 @@
       ElMessage.success(response.message);
       adda.value = false;
      tableDataa.value = response.data;
-      window.localStorage.setItem('workstationId', response.data.workstationId)
-      let workstationId = window.localStorage.getItem('workstationId')
-      if (workstationId == '1') {
+      // window.localStorage.setItem('workstationId', response.data.workstationId)
+      // let workstationId = window.localStorage.getItem('workstationId')
+      if (workstationId.value == '1') {
       flake.value = false
-    } else if (workstationId == '2'){
+    } else if (workstationId.value == '2'){
       flakea.value = false
+    }else if (workstationId.value == '3'){
+      flakeb.value = false
+    }else if (workstationId.value == '4'){
+      flakec.value = false
     }
-    } else {
+        list()
+      } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.message);
     }
@@ -545,11 +601,13 @@
     const data = JSON.parse(event.data); // 瑙f瀽娑堟伅涓篔SON  
   
     if (data && Array.isArray(data.InkageStatus) && data.InkageStatus.length > 0) {  
+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;  
+}
     } else {  
       // 澶勭悊閿欒鎯呭喌鎴栨棤鏁堟暟鎹�  
       console.error('鎺ユ敹鍒扮殑鏁版嵁鏃犳晥', data);  
@@ -607,11 +665,17 @@
      :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
       :data="tableData"
     >
-    <el-table-column prop="engineeringId" :label="$t('basicData.projectnumber')" width="200" align="center"/>
+      <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 prop="layoutSequence" :label="$t('basicData.quantity')" 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"
@@ -673,11 +737,13 @@
     </template>
   </el-dialog> -->
       <div id="parent">
-        <img src="../../assets/shangpianji.png" alt="" style="max-width: 20%;max-height: 20%;margin-top: 20px;margin-left: 500px;">
+        <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: -350px;margin-left: 650px;">
+      <div style="margin-top: -300px;margin-left: 680px;">
         <el-table :data="tableDataa" border style="width: 85%"
      :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
         >
@@ -873,23 +939,41 @@
   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: 212px;
-  height: 15px;
+  width: 228px;
+  height: 16px;
   background-color: #529b2e;
-  margin-top: -404px;
-  margin-left: 542px;
+  margin-top: -45px;
+  margin-left: 355px;
 }
 #overlaya{
   position: absolute;
   z-index: 1;
-  width: 212px;
-  height: 15px;
+  width: 228px;
+  height: 16px;
   background-color: #529b2e;
-  margin-top: -38px;
-  margin-left: 537px;
+  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 5fd9087..5870cad 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -14,7 +14,9 @@
 const dialogFormVisible = ref(false)
 const dialogFormVisiblea = ref(false)
 const dialogFormVisibleb = ref(false)
+const dialogFormVisiblec = ref(false)
 const tableData = ref([])
+const tableDatagh = ref([])
 const tableDatab = ref([])
 const tableDatac = ref([])
 const tableDatad = ref([])
@@ -69,57 +71,68 @@
 const cell8=ref(true);
 const cell9=ref(true);
 const selectedRow = ref(null); // 瀛樺偍閫変腑鐨勮鏁版嵁  
-
-
+ 
+onMounted(async () => {  
+  try {  
+    const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/selectTemperingGlass');
+    if (response.code === 200) {  
+      tableDatagh.value = response.data
+    } else {  
+      ElMessage.warning(response.msg)
+    }  
+  } catch (error) {  
+    // console.error('Error fetching rects :', error);  
+  }  
+}); 
     // 褰撳墠椤电爜鍜屾瘡椤垫樉绀虹殑鏉℃暟
     const currentPage = ref(1);
     const itemsPerPage = computed(() => {
       if (currentPage.value === 1) {
-        return 21;
+        return 55;
       } else if (currentPage.value === 2) {
-        return 21;
+        return 55;
       } else if (currentPage.value === 3) {
-        return 21;
+        return 55;
       } else if (currentPage.value === 4) {
-        return 20;
+        return 55;
       } else if (currentPage.value === 5) {
-        return 21;
+        return 55;
       } else if (currentPage.value === 6) {
         return 25;
       } else if (currentPage.value === 7) {
-        return 51;
+        return 30;
       } else if (currentPage.value === 8) {
         return 25;
       } else {
         return 25; // 榛樿鍊硷紝鍙互鏍规嵁瀹為檯闇�姹備慨鏀�
       }
     });
-
+ 
     // 璁$畻鍒嗛〉鍚庣殑鏁版嵁
     const paginatedUsers = computed(() => {
       const startIndex = calculateStartIndex();
       const endIndex = startIndex + itemsPerPage.value;
       return tableData.value.slice(startIndex, endIndex);
     });
-
+ 
     // 璁$畻褰撳墠椤电殑璧峰绱㈠紩
     function calculateStartIndex() {
       let index = 0;
       for (let i = 1; i < currentPage.value; i++) {
         if (i === 1) {
-          index += 21;
+          index += 55;
         } else if (i === 2) {
-          index += 21;
+          index += 55;
         } else if (i === 3) {
-          index += 21;
+          index += 55;
         }else if (i === 4) {
-          index += 20;
+          index += 55;
         }else if (i === 5) {
-          index += 21;
+          index += 55;
         }else if (i === 6) {
           index += 25;
         }else if (i === 7) {
-          index += 51;
+          index += 30;
         }else if (i === 8) {
           index += 25;
         } else {
@@ -145,7 +158,7 @@
         currentPage.value++;
       }
     };
-
+ 
     // 鎬婚〉鏁拌绠�
     const totalPages = computed(() => {
       // let total = 0;
@@ -162,9 +175,9 @@
       // }
       return 9;
     });
-
-
-
+ 
+ 
+ 
 const getTableRow = (row,type) =>{
   switch (type) {
     case 'edit' :{
@@ -349,6 +362,33 @@
     console.error('鍙戠敓閿欒:', error);  
   }  
 }; 
+ // 鎸囧畾閽㈠寲
+ const brokee = async(row) => {  
+  try {
+    const confirmResult = await ElMessageBox.confirm(  
+      t('searchOrder.specifytemperinga'), 
+      t('searchOrder.prompt'),  
+      {  
+        confirmButtonText: t('searchOrder.yes'), 
+        cancelButtonText: t('searchOrder.cancel'),
+        type: 'warning',  
+      } 
+    ); 
+    if (confirmResult === 'confirm') {  
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/TemperingGlass",{
+        engineerId: row.engineer_id,
+        temperingLayoutId: row.tempering_layout_id,
+    });
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+    }  
+  } catch (error) {  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
 // 鍑虹墖闃熷垪鎷胯蛋
 const brokeb = async(row) => {  
   try {
@@ -452,7 +492,7 @@
       ElMessage.success(response.message);
       glassId.value = '';
       tableDataf.value = '';
-
+ 
       } else {  
       ElMessage.error(response.message);
       }  
@@ -469,21 +509,38 @@
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
-  tableDatac.value = data.bigStorageCageDetailsOutTask[0]
-  tableDatad.value = data.bigStorageCageDetailsFeedTask[0]
+  if(data.bigStorageCageDetailsOutTask!=null){
+    tableDatac.value = data.bigStorageCageDetailsOutTask[0]
+    adjusta.value = data.bigStorageCageDetailsOutTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined);
+  }
+  if(data.bigStorageCageDetailsFeedTask!=null){
+    tableDatad.value = data.bigStorageCageDetailsFeedTask[0]
+    adjust.value = data.bigStorageCageDetailsFeedTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined); 
+  }
+  
   // adjust.value = data.bigStorageCageDetailsFeedTask[0].map(rect => ({  
   //           ...rect, 
   //         })); 
-  adjusta.value = data.bigStorageCageDetailsOutTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined);  
-  adjust.value = data.bigStorageCageDetailsFeedTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined);  
+     
 //   const adjust = computed(() => {  
 //   return data.value.bigStorageCageDetailsFeedTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined);  
 // }); 
+if(data.bigStorageCageInfo!=null){
   tableData.value = data.bigStorageCageInfo[0]
+}
+if(data.temperingGlassInfoList!=null){
   tableDatab.value = data.temperingGlassInfoList[0]
+}
+if(data.bigStorageCageUsage!=null){
   tableDatae.value = data.bigStorageCageUsage[0]
+}
+if(data.carPostion!=null){
   carPosition.value = data.carPostion[0]
-  window.localStorage.setItem('length', data.bigStorageCageInfos[0][1].length)
+}
+  
+  
+  if(data.bigStorageCageInfos!=null){
+    window.localStorage.setItem('length', data.bigStorageCageInfos[0][1].length)
   let length = window.localStorage.getItem('length')
   adjustedRects.value = data.bigStorageCageInfos[0][1].map(rect => ({  
             ...rect, 
@@ -530,12 +587,15 @@
             height: 20/length,
             top: 29/length
           })); 
+  }
+ 
+  
 };
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
   // fetchFlowCardId();
   initializeWebSocket(socketUrl, handleMessage);
-
+ 
 });
 function getStatusType(enableState: number) {  
   switch (enableState) {  
@@ -597,9 +657,10 @@
   <div style="height: 600px;">
     <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true">{{ $t('searchOrder.cageinformation') }}</el-button>
     <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('searchOrder.productionqueue') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="info" @click="dialogFormVisiblec = true">{{ $t('searchOrder.temperingqueries') }}</el-button>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
-        <el-table height="100%" ref="table" 
+        <el-table height="100px" ref="table" 
         :data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="bigStorageCageOutTask.glassId" align="center" :label="$t('searchOrder.outputglassID')" min-width="120" />
           <el-table-column prop="bigStorageCageOutTask.startSlot" align="center" :label="$t('searchOrder.startposition')" min-width="120" />
@@ -634,7 +695,7 @@
     </el-card>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 3px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
-        <el-table height="100%" ref="table" 
+        <el-table height="100px" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" :label="$t('searchOrder.intoglassid')" min-width="120" />
@@ -667,7 +728,7 @@
         </el-table>
       </div>
     </el-card>
-    <div style="padding: 10px;display: flex;height:110px;">
+    <div style="padding: 10px;display: flex;height:130px;">
             <div v-for="(item, index) in tableDatae" :key="index" id="occupy">  
                <el-col style="text-align:left;font-weight: bold;">#{{ item.device_id }}</el-col>  
                <el-col style="text-align:left;display:flex;justify-content: space-between;align-items: center;">  
@@ -681,7 +742,7 @@
     </div>
 <!-- // 鐖剁骇妗� -->
 <div class="img-dlpl" >
-    <div class="img-car1" :style="'z-index:999;left:247px;top:' + 350*carPosition[0] + 'px;position:absolute;'">
+    <div class="img-car1" :style="'z-index:999;left:270px;top:' + 350*carPosition[0] + 'px;position:absolute;'">
       <div  
       v-for="(rect, index) in adjusta"  
       :key="rect.id"  
@@ -689,13 +750,13 @@
        width: '30px',
        height: '5px',
        backgroundColor: '#409EFF',
-       marginLeft: index * 5+ `px`,
+       marginLeft: 5+ `px`,
        top: '10px',
        }"  
     >
     </div>
     </div>
-    <div class="img-car4" :style="'z-index:999;left:704px;top:' + 350*carPosition[1] + 'px;position:absolute;'">
+    <div class="img-car4" :style="'z-index:999;left:740px;top:' + 350*carPosition[1] + 'px;position:absolute;'">
       <div  
       v-for="(rect, index) in adjust"  
       :key="rect.id"  
@@ -703,14 +764,14 @@
        width: '30px',
        height: '5px',
        backgroundColor: '#409EFF',
-       marginLeft: index * 5+ `px`,
+       marginLeft: 5+ `px`,
        top: '10px',
        }"  
     >
     </div>
     </div>
     <div style="position: relative;">
-    <div v-show="cell1" style="width: 227px;height: 29px;position: relative;top:55px;left: 465px;">
+    <div v-show="cell1" style="width: 227px;height: 29px;position: relative;top:50px;left: 495px;">
       <div  
       v-for="(rect, index) in adjustedRects"  
       :key="rect"  
@@ -741,7 +802,7 @@
       </div>
     </div>
     </div>
- <div v-show="cell2" style="width: 227px;height: 29px;position: relative;top:56px;left: 465px;">
+ <div v-show="cell2" style="width: 227px;height: 29px;position: relative;top:51px;left: 495px;">
   <div  
       v-for="(rect, index) in adjustedRectsa"  
       :key="rect.id"  
@@ -772,7 +833,7 @@
       </div>
     </div>
     </div>
-  <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:117px;left: 465px;">
+  <div v-show="cell3" style="width: 227px;height: 29px;position: absolute;top:110px;left: 495px;">
     <div  
       v-for="(rect, index) in adjustedRectsb"  
       :key="rect.id"  
@@ -802,7 +863,7 @@
       </div>
     </div>
     </div>
-  <div v-show="cell4" style="width: 227px;height: 29px;position: absolute;top:148px;left: 465px;">
+  <div v-show="cell4" style="width: 227px;height: 29px;position: absolute;top:140px;left: 495px;">
     <div  
       v-for="(rect, index) in adjustedRectsc"  
       :key="rect.id"  
@@ -833,7 +894,7 @@
       </div>
     </div>
     </div>
-  <div v-show="cell5" style="width: 227px;height: 29px;position: absolute;top:208px;left: 465px;">
+  <div v-show="cell5" style="width: 227px;height: 29px;position: absolute;top:170px;left: 495px;">
     <div  
       v-for="(rect, index) in adjustedRectsd"  
       :key="rect.id"  
@@ -864,7 +925,7 @@
       </div>
     </div>
     </div>
-  <div v-show="cell6" style="width: 227px;height: 29px;position: absolute;top:238px;left: 465px;">
+  <div v-show="cell6" style="width: 227px;height: 29px;position: absolute;top:241px;left: 495px;">
     <div  
       v-for="(rect, index) in adjustedRectse"  
       :key="rect.id"  
@@ -895,7 +956,7 @@
       </div>
     </div>
     </div>
-  <div v-show="cell7" style="width: 227px;height: 29px;position: absolute;top:269px;left: 465px;">
+  <div v-show="cell7" style="width: 227px;height: 29px;position: absolute;top:271px;left: 495px;">
     <div  
       v-for="(rect, index) in adjustedRectsf"  
       :key="rect.id"  
@@ -926,7 +987,7 @@
       </div>
     </div>
     </div>
-  <div v-show="cell8" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;">
+  <div v-show="cell8" style="width: 227px;height: 29px;position: absolute;top:301px;left: 495px;">
     <div  
       v-for="(rect, index) in adjustedRectsg"  
       :key="rect.id"  
@@ -957,7 +1018,7 @@
       </div>
     </div>
     </div>
-  <div v-show="cell9" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;">
+  <div v-show="cell9" style="width: 227px;height: 29px;position: absolute;top:332px;left: 495px;">
     <div  
       v-for="(rect, index) in adjustedRectsh"  
       :key="rect.id"  
@@ -1019,8 +1080,8 @@
           </el-input>
           <el-button type="primary" plain style="margin-left: 10px;" @click="searchout">{{ $t('searchOrder.search') }}</el-button>
     </div>
-
-    <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 500px;">
+ 
+    <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;">
         <el-table height="100%" ref="table"
         :data="tableDataf" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="glassId" align="center" :label="$t('searchOrder.glassID')" min-width="120" />
@@ -1219,6 +1280,19 @@
         </el-table-column>
         </el-table>
 </el-dialog>
+<el-dialog v-model="dialogFormVisiblec" top="5vh" width="85%" :title="$t('searchOrder.temperingqueries')">
+    <el-table  ref="table" style="margin-top: 20px;height: 500px;"
+        :data="tableDatagh" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="engineer_id" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/>
+          <el-table-column prop="tempering_layout_id" fixed align="center" :label="$t('searchOrder.layoutnumber')" min-width="120" />
+          <el-table-column prop="count" align="center" :label="$t('searchOrder.numberglasses')" min-width="150" />
+          <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center" width="150">
+            <template #default="scope">
+              <el-button size="mini" type="text" plain @click="brokee(scope.row)">{{ $t('searchOrder.specifytempering') }}</el-button>
+            </template>
+        </el-table-column>
+        </el-table>
+</el-dialog>
  
 </template>
 <style scoped>
@@ -1320,8 +1394,9 @@
 }
  
 .img-dlpl{
-  margin-left: 80px;
-  background-image:url('../../assets/dlpl.png');
+  margin-left: 20px;
+  margin-top: 20px;
+  background-image:url('../../assets/dlpl9.png');
   background-repeat: no-repeat;
     background-attachment: local;
     min-height: 400px;
@@ -1333,7 +1408,7 @@
 }
 .img-car1{
   display: flex;
-  background-image:url('../../assets/lp.png');
+  background-image:url('../../assets/lp9.png');
   position: absolute;
   background-repeat: no-repeat;
     background-attachment: local;
@@ -1346,7 +1421,7 @@
 }
 .img-car4{
   display: flex;
-  background-image:url('../../assets/lpa.png');
+  background-image:url('../../assets/lpa9.png');
   position: absolute;
   background-repeat: no-repeat;
     background-attachment: local;
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindication.vue b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
index 89d7621..36af612 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindication.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="glass-rack">
     <div >
-      <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">
+      <svg width="500" height="370" xmlns="http://www.w3.org/2000/svg">
         <g stroke="null" id="Layer_1">
           <!-- 浣跨敤 v-for 寰幆娓叉煋鏁版嵁 -->
           <g v-for="(rack, index) in racks" :key="index"   :data="tableData">
@@ -42,11 +42,11 @@
 import { initializeWebSocket } from '@/utils/WebSocketService';
  import { WebSocketHost } from '@/utils/constants';
 const racks = ref([
-  { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: '',downGlassInfoList:"" } },
+  { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456',downGlassInfoList:"" } },
  
-  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: '',downGlassInfoList:"" } },
+  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678',downGlassInfoList:"" } },
  
-  { x: 140, y: 320, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: '' ,downGlassInfoList:""} }
+  { x: 140, y: 280, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' ,downGlassInfoList:""} }
   
 ]);
 
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
index 6566fde..c42fbe5 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -1,7 +1,7 @@
 <template>
   <div class="glass-rack">
     <div >
-      <svg width="500" height="500" xmlns="http://www.w3.org/2000/svg">
+      <svg width="500" height="370" xmlns="http://www.w3.org/2000/svg">
         <g stroke="null" id="Layer_1">
           <!-- 浣跨敤 v-for 寰幆娓叉煋鏁版嵁 -->
           <g v-for="(rack, index) in racks" :key="index">
@@ -42,11 +42,11 @@
 import { initializeWebSocket } from '@/utils/WebSocketService';
 import { WebSocketHost ,host} from '@/utils/constants'
 const racks = ref([
-  { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: '' } },
+  { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
  
-  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: '' } },
+  { x: 280, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG12345678' } },
  
-  { x: 140, y: 320, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: '' } }
+  { x: 140, y: 280, height: 60, width: 110, fillColor: '#6a6da9', item: { height: 20, width: 100, fillColor: 'yellow', content: 'NG1234561454' } }
   
 ]);
 
diff --git a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
index 9769112..581478d 100644
--- a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
+++ b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,10 +1,8 @@
 <script setup>
 import {Search} from "@element-plus/icons-vue";
 import {reactive, onMounted, onBeforeUnmount} from "vue";
-
 import {useRouter} from "vue-router"
 const router = useRouter()
-
 import { useI18n } from 'vue-i18n'
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
@@ -39,7 +37,6 @@
     fetchFlowCardId(); 
   dialogFormVisiblea.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
 };
-
 //鑾峰彇娴佺▼鍗″彿
 const fetchFlowCardId = async () => {
   try {
@@ -59,7 +56,6 @@
   }
 };
 //纭
-
 const handleConfirm = async () => {
   try {
     const firstPart = flowCardId.value.split('|')[0].trim(); // 
@@ -68,9 +64,7 @@
       workstationId: workstationId.value,
       flowCardId: firstPart,
       layer:twoPart
-
     }); 
-
     console.log(response)
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
@@ -88,16 +82,12 @@
     console.error(error);
   }
 };
-
-
 const updatePageData = () => {
   // 鍋囪浣犵殑椤甸潰涓婃湁涓�涓悕涓� tableData 鐨� Vue 缁勪欢
   // 浣犲彲浠ョ洿鎺ユ洿鏂� tableData 鐨勬暟鎹�
   fetchTableData()
   // 浣跨敤 $forceUpdate() 寮哄埗鏇存柊缁勪欢
-
 };
-
 const handleBindRack2 = (row) => {
   workstationId.value = row.workstationId; // 鍋囪rackNumber鏄灦鍙峰瓧娈电殑灞炴�у悕
   dialogFormVisiblea2.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
@@ -116,7 +106,7 @@
             console.log('娓呴櫎鎴愬姛');
             ElMessage.success(response.message);
             dialogFormVisiblea2.value = false;
-        } else if (response.code === 400) {
+        } else if (response.code === 500) {
             // 娓呴櫎澶辫触鐨勯�昏緫
             console.log('娓呴櫎澶辫触');
             console.log(response.message); // 鎵撳嵃鏈嶅姟鍣ㄨ繑鍥炵殑閿欒淇℃伅
@@ -129,8 +119,6 @@
             dialogFormVisiblea2.value = false;
     }
 };
-
-
 // 鍙戦�佽幏鍙栬〃鏍兼暟鎹殑璇锋眰
 const fetchTableData = async () => {
   try {
@@ -151,52 +139,47 @@
     ElMessage.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触锛岃閲嶈瘯');
   }
 };
-
-
 const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
-
   // 鏇存柊 tableData 鐨勬暟鎹�
-
   tableData.splice(0, tableData.length, ...data.params[0]);
 //  console.log("鏇存柊鍚庢暟鎹�", data.params[0]);
-
 };
-
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
-
 onMounted(() => {
   fetchFlowCardId();
   fetchTableData(); // 鑾峰彇鏁版嵁
   initializeWebSocket(socketUrl, handleMessage);
 });
-
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 
+
 const getTagType =(status) => {
       return status === 1 ? 'success' : 'danger';
       // 鏍规嵁鐘舵�佸�煎喅瀹氭爣绛剧被鍨嬶紝杩欓噷鍋囪鐘舵�佷负1鏃朵负鎴愬姛锛堢豢鑹诧級锛屽惁鍒欎负澶辫触锛堢孩鑹诧級
     }
-
+ 
     const toggleStatus = (row) => {
       // 鍒囨崲鏂欐灦鐘舵�佺殑閫昏緫
       row.enableState = 1 - row.enableState; // Toggle between 0 and 1
       // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
       updateRowStatus(row);
     };
-
+ 
     const updateRowStatus = async (row) => {
   try {
     // 鍋囪浣犵殑鍚庣 API 鎺ユ敹 PUT 璇锋眰锛屽苟涓旈渶瑕佷紶閫� row.id 鍜� row.enableState 鍙傛暟
    
-
+ 
     const response = await request.post('unLoadGlass/downWorkStation/updateDownWorkstation', {
-      enableState: 1 - row.enableState
+      enableState: row.enableState,
+      id: row.id
 
+ 
     }); 
     console.log('Updated row status:', response.data);
     // 鍙互鏍规嵁鍚庣杩斿洖鐨勬暟鎹繘琛岃繘涓�姝ュ鐞嗭紝姣斿鏇存柊鏈湴鐘舵�佺瓑
@@ -205,25 +188,34 @@
     // 澶勭悊閿欒鎯呭喌锛屾瘮濡傛彁绀虹敤鎴锋洿鏂板け璐�
   }
 };
+ 
 
 
+
+
+
+
+// beforeUnmount(() => {
+//   closeWebSocket();
+// });
+// setInterval(fetchTableData, 2000)
 </script>
-
 <template>
   <div>
-    <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
-      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 200px;">
-        <el-table height="100%" ref="table" 
+    <el-card style="flex: 1;" v-loading="loading">
+      <el-card style="flex: 1;margin-left: 4px;margin-top: 1px;" v-loading="loading">
+      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
+        <el-table height="200px" ref="table" 
         @selection-change="handleSelectionChange"
         :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="workstationId" align="center" :label="$t('reportWork.lowerbit')" min-width="80" />
           <el-table-column prop="workstationId" align="center" :label="$t('reportWork.shelfnumber')" min-width="120" />
-          <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="120" />
-          <el-table-column prop="totalquantity" align="center" :label="$t('reportWork.totalquantity')" min-width="120" />
-          <el-table-column prop="racksnumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" />
+          <el-table-column prop="flowCardId" align="center" :label="$t('reportWork.cardnumber')" min-width="150" />
+          <el-table-column prop="totalQuantity" align="center" :label="$t('reportWork.totalquantity')" min-width="120" />
+          <el-table-column prop="racksNumber" align="center" :label="$t('reportWork.beendropped')" min-width="120" />
           <el-table-column prop="layer" align="center" label="灞傛暟" min-width="120" />
           <el-table-column prop="otherNumber" align="center" label="浜哄伐涓嬬墖鏁�" min-width="120" />
-          <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" />
+          <!-- <el-table-column prop="work_state" align="center" :label="$t('reportWork.state')" min-width="120" /> -->
           <el-table-column prop="deviceId" align="center" :label="$t('reportWork.devicenumber')" min-width="120" />
           <el-table-column
             align="center"
@@ -247,7 +239,22 @@
         </el-table>
       </div>
     </el-card>
-
+    <!-- workstationId: '1',
+    workstationId: '1005',
+    flowCardId: '183.6',
+    totalquantity: '1991',
+    racksnumber:"1",
+    work_state: '寰呰瘑鍒�', -->
+  <div style="display: flex;" class="awatch">
+  <div id="main-body">
+      <Landingindication></Landingindication>
+    </div>
+  <div id="main-bodya">
+    <Landingindicationtwo></Landingindicationtwo>
+    </div>
+    </div>
+    </el-card>
+  </div>
 
     <el-dialog v-model="dialogFormVisiblea" top="21vh" width="40%" :title="$t('reportWork.bindingshelves')">
     <div style="margin-left: 50px;margin-top: 10px;margin-bottom: 10px;">
@@ -273,12 +280,7 @@
       </div>
     </template>
   </el-dialog>
-
-
-
-
   <el-dialog v-model="dialogFormVisiblea2" top="21vh" width="30%" :title="$t('reportWork.clearglass')">
-
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleclear">
@@ -288,26 +290,8 @@
       </div>
     </template>
   </el-dialog>
-
-
-    <!-- workstationId: '1',
-    workstationId: '1005',
-    flowCardId: '183.6',
-    totalquantity: '1991',
-    racksnumber:"1",
-    work_state: '寰呰瘑鍒�', -->
-  </div>
-  <div style="display: flex;">
-  <div id="main-body">
-      <Landingindication></Landingindication>
-    </div>
-  <div id="main-bodya">
-    <Landingindicationtwo></Landingindicationtwo>
-    </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{
@@ -323,15 +307,15 @@
    background-color: #337ecc;
    margin-left: 28%;
 }
-#awatch{
-  height: 450px;
+.awatch{
+  max-width: 100%;
 }
 #main-body{
-  margin-top: -20px;
-  margin-left: 200px;
+  margin-top: -40px;
+  margin-left: 150px;
 }
 #main-bodya{
-  margin-top: -10px;
+  margin-top: -40px;
   margin-left: 100px;
 }
 </style>
\ No newline at end of file
diff --git a/UI-Project/src/views/largescreen/largescreen.vue b/UI-Project/src/views/largescreen/largescreen.vue
index bd8d350..7c3603a 100644
--- a/UI-Project/src/views/largescreen/largescreen.vue
+++ b/UI-Project/src/views/largescreen/largescreen.vue
@@ -26,7 +26,7 @@
       </el-table>
 </div> 
 <div id="center" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 750px;">
-  <img src="../../assets/d1.png" alt="" style="margin-left: -30px; width: 110%;height: 100%;position: relative;"> 
+  <img src="../../assets/d1a.png" alt="" style="margin-left: -10px; width: 100%;height: 100%;position: relative;"> 
 </div>
 <div id="centerright" style="margin-top: 10px;margin-left: 10px; height: 240px;width: 240px;background-color: #911005;">
   <el-table height="240" ref="table" width="340px"
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java
index 97eba6b..b5c0c8e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/base/entity/BigStorageCageBaseInfo.java
@@ -22,6 +22,11 @@
      */
     @ApiModelProperty(value = "瀹�")
     private double width;
+    /**
+     * 瀹�
+     */
+    @ApiModelProperty(value = "楂�")
+    private double height;
 
     /**
      * 鏍煎瓙鍙�
@@ -29,4 +34,16 @@
     @ApiModelProperty(value = "鐜荤拑id")
     private Integer slot;
 
+    /**
+     * x鍧愭爣
+     */
+    @ApiModelProperty(value = "x鍧愭爣", position = 13)
+    private Integer xCoordinate;
+
+    /**
+     * y鍧愭爣
+     */
+    @ApiModelProperty(value = "y鍧愭爣", position = 14)
+    private Integer yCoordinate;
+
 }
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 5423c6e..fe5c038 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
@@ -21,6 +21,7 @@
      * A09鍑虹墖鐩爣浣嶇疆  d02鍗ц浆绔�    2001
      * A10鍑虹墖鐩爣浣嶇疆  d05鍗ц浆绔�    2002
      */
+    public static final Integer OUT_TARGET_POSITION_ZERO = 0;
     public static final Integer A09_OUT_TARGET_POSITION = 2001;
     public static final Integer A10_OUT_TARGET_POSITION = 2002;
 
@@ -37,12 +38,14 @@
      * 璇嗗埆鍚庢垚鍔熺姸鎬�100
      * 鍑虹墖浠诲姟101
      * 浜哄伐涓嬬墖102
+     * 鍑虹墖涓�103
      * 鎷胯蛋200
      * 鐮存崯201
      */
     public static final Integer GLASS_STATE_IN = 100;
     public static final Integer GLASS_STATE_OUT = 101;
     public static final Integer GLASS_STATE_ARTIFICIAL = 102;
+    public static final Integer GLASS_STATE_OUT_ING = 103;
     public static final Integer GLASS_STATE_TAKE = 200;
     public static final Integer GLASS_STATE_DAMAGE = 201;
 
@@ -112,6 +115,7 @@
     public static final Integer BIG_STORAGE_OUT_SUCCESS = 3;
     public static final Integer BIG_STORAGE_OUT_ERROR = 4;
     public static final Integer BIG_STORAGE_OUT_DAMAGE = 5;
+    public static final List<Integer> BIG_STORAGE_OUT_ALL = Arrays.asList(2, 3);
 
     /**
      * 鍗ц浆绔嬪嚭鐗囪姹�
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
index b821404..ea9bcb2 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
@@ -5,14 +5,14 @@
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
 import com.mes.utils.Result;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
-
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -22,30 +22,50 @@
  * @author wu
  * @since 2024-06-25
  */
+@Api(description = "鎶ュ伐淇℃伅")
 @RestController
 @RequestMapping("/damage")
+@ResponseBody
 public class DamageController {
 
     @Autowired
     private DamageService damageService;
     @ApiOperation("鎶ュ伐鏁版嵁鏌ヨ")
-    @GetMapping("/selectDamage")
-    public Result selectDamage(DateTime startTime , DateTime endTime,int type,int status,int workingProcedureId) {
-        return Result.build(200,"鏌ヨ鎴愬姛",damageService.selectDamage(startTime,endTime,type,status,workingProcedureId));
+    @PostMapping("/selectDamage")
+    public Result selectDamage(@RequestBody Map map) {
+        String startTime=map.get("startTime").toString();
+        String endTime=map.get("endTime").toString();
+        int type =Integer.parseInt(map.get("type").toString());
+        int status =Integer.parseInt(map.get("status").toString());
+        String workingProcedure =map.get("workingProcedure").toString();
+        return Result.build(200,"鏌ヨ鎴愬姛",damageService.selectDamage(startTime,endTime,type,status,workingProcedure));
     }
 
     @ApiOperation("鎶ュ伐")
-    @GetMapping("/submitDamage")
-    public Result submitDamage(DateTime startTime , DateTime endTime,int type,int status,int workingProcedureId) {
-        damageService.submitDamage(startTime,endTime,type,status,workingProcedureId);
+    @PostMapping("/submitDamage")
+    public Result submitDamage(@RequestBody Map map) {
+        String startTime=map.get("startTime").toString();
+        String endTime=map.get("endTime").toString();
+        int type =Integer.parseInt(map.get("type").toString());
+        int status =Integer.parseInt(map.get("status").toString());
+        String workingProcedure =map.get("workingProcedure").toString();
+        damageService.submitDamage(startTime,endTime,type,status,workingProcedure);
         return Result.build(200,"鎶ュ伐鎴愬姛",1);
     }
 
     @ApiOperation("鎶ュ伐鏁版嵁淇敼")
-    @GetMapping("/updateDamage")
-    public Result updateDamage(List<Damage> damageList) {
+    @PostMapping("/updateDamage")
+    public Result updateDamage(@RequestBody List<Damage> damageList) {
         damageService.updateBatchById(damageList);
         return Result.build(200,"淇敼鎴愬姛",1);
     }
+
+    @ApiOperation("鎶ュ伐鏁版嵁鏂板")
+    @PostMapping("/insertDamage")
+    public Result insertDamage(@RequestBody Damage damage) {
+        damageService.insertDamage(damage);
+        return Result.build(200,"鏂板鎴愬姛",1);
+    }
+
 }
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java
index 2d78544..52b355e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java
@@ -2,8 +2,9 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.sql.Timestamp;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -52,7 +53,7 @@
     /**
      * 鐢熶骇鏃堕棿
      */
-    private LocalDateTime damageTime;
+    private Timestamp damageTime;
 
     /**
      * 澶囨敞
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
index 2b2bc54..a993bd7 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
@@ -1,5 +1,6 @@
 package com.mes.damage.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.mes.damage.entity.Damage;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -11,6 +12,7 @@
  * @author wu
  * @since 2024-06-13
  */
+@DS("hangzhoumes")
 public interface DamageMapper extends BaseMapper<Damage> {
 
 }
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 43d1142..1fba706 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
@@ -4,6 +4,7 @@
 import com.mes.damage.entity.Damage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -16,9 +17,9 @@
  */
 public interface DamageService extends IService<Damage> {
 
-    List<Damage> selectDamage(DateTime startTime, DateTime endTime, int type, int status, int workingProcedureId);
+    List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure);
 
-    void submitDamage(DateTime startTime, DateTime endTime, int type, int status, int workingProcedureId);
+    void submitDamage(String startTime, String endTime, int type, int status, String workingProcedure);
 
     void insertDamage(Damage damage);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
index b81f7b2..118d12e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -3,7 +3,6 @@
 import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.mapper.DamageMapper;
 import com.mes.damage.service.DamageService;
@@ -16,6 +15,7 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -39,7 +39,7 @@
      * 鏌ヨ鎶ュ伐淇℃伅
      */
     @Override
-    public List<Damage> selectDamage(DateTime startTime, DateTime endTime, int type, int status, int workingProcedureId){
+    public List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure){
         LambdaQueryWrapper<Damage> damageSelectWrapper =new LambdaQueryWrapper<>();
         damageSelectWrapper.between(Damage::getDamageTime,startTime,endTime);
         if (type!=0){
@@ -48,8 +48,8 @@
         if (status!=0){
             damageSelectWrapper.eq(Damage::getStatus,status);
         }
-        if(workingProcedureId!=0){
-            damageSelectWrapper.eq(Damage::getWorkingProcedure,workingProcedureId);
+        if(!"0".equals(workingProcedure)){
+            damageSelectWrapper.eq(Damage::getWorkingProcedure,workingProcedure);
         }
         return baseMapper.selectList(damageSelectWrapper);
     }
@@ -58,7 +58,7 @@
      * 鎻愪氦鎶ュ伐
      */
     @Override
-    public void submitDamage(DateTime startTime, DateTime endTime, int type, int status, int workingProcedureId){
+    public void submitDamage(String startTime, String endTime, int type, int status, String workingProcedure){
         LambdaUpdateWrapper<Damage> damageUpdateWrapper=new LambdaUpdateWrapper<>();
         damageUpdateWrapper.between(Damage::getDamageTime,startTime,endTime);
         if (type!=0){
@@ -67,8 +67,8 @@
         if (status!=0){
             damageUpdateWrapper.eq(Damage::getStatus,status);
         }
-        if(workingProcedureId!=0){
-            damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedureId);
+        if(!"0".equals(workingProcedure)){
+            damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedure);
         }
         Damage damage=new Damage();
         damage.setStatus(2);
@@ -96,7 +96,7 @@
         damage.setProcessId(glassInfo.getFlowCardId());
         damage.setOrderNumber(glassInfo.getGlassType());
         damage.setTechnologyNumber(glassInfo.getLayer());
-        damage.setDamageTime(LocalDateTime.now());
+        damage.setDamageTime(Timestamp.valueOf(LocalDateTime.now()));
         damage.setType(2);
         baseMapper.insert(damage);
     }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
index bdfb970..e8b3016 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
@@ -1,5 +1,6 @@
 package com.mes.glassinfo.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.glassinfo.entity.GlassInfo;
 
@@ -11,6 +12,7 @@
  * @author wu
  * @since 2024-04-29
  */
+@DS("hangzhoumes")
 public interface GlassInfoMapper extends MPJBaseMapper<GlassInfo> {
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/GlassInfoService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
index fc7e13f..b2a6af1 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/GlassInfoService.java
@@ -1,7 +1,8 @@
 package com.mes.glassinfo.service;
 
-import com.mes.glassinfo.entity.GlassInfo;
 import com.github.yulichang.base.MPJBaseService;
+import com.mes.glassinfo.entity.GlassInfo;
+
 import java.util.List;
 import java.util.Map;
 
@@ -24,11 +25,10 @@
        */
       void saveGlassInfo(List<GlassInfo> glassinfo);
 
-      int getGlassInfoCountByFlowCardId(String flowCardId,int layer);
+      int getGlassInfoCountByFlowCardId(String flowCardId, int layer);
 
       /**
-       * @return
-       * 鏌ヨ鎵�鏈夊伐绋嬬姸鎬佷笉涓�300涓嶅悓娴佺▼鍗″彿
+       * @return 鏌ヨ鎵�鏈夊伐绋嬬姸鎬佷笉涓�300涓嶅悓娴佺▼鍗″彿
        */
       List<Map<String, Object>> getFlowCardId();
 
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 c143b88..10ab730 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
@@ -11,9 +11,9 @@
 import com.mes.pp.entity.OptimizeProject;
 import com.mes.pp.mapper.OptimizeProjectMapper;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -31,7 +31,7 @@
 @Service
 @Slf4j
 public class GlassInfoServiceImpl extends MPJBaseServiceImpl<GlassInfoMapper, GlassInfo> implements GlassInfoService {
-    @Autowired
+    @Resource
     OptimizeProjectMapper optimizeProjectMapper;
 
     @Override
@@ -42,7 +42,7 @@
             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")
                     .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("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")
                     //.eq("t.state",100)
                     .eq("t.project_no", engineeringId));
         }
@@ -89,7 +89,7 @@
 
 
     @Override
-    public int getGlassInfoCountByFlowCardId(String flowCardId,int layer) {
+    public int getGlassInfoCountByFlowCardId(String flowCardId, int layer) {
         return baseMapper.selectCount(new QueryWrapper<GlassInfo>().lambda()
                 .eq(GlassInfo::getFlowCardId, flowCardId)
                 .eq(GlassInfo::getLayer, layer));
@@ -121,7 +121,7 @@
         List<Map<String, Object>> result = glassInfos.stream()
                 .map(glassInfo -> {
                     Map<String, Object> map = new HashMap<>();
-                    map.put("flow_card_id", glassInfo.getFlowCardId()+" | "+glassInfo.getLayer());
+                    map.put("flow_card_id", glassInfo.getFlowCardId() + " | " + glassInfo.getLayer());
                     // 濡傛灉杩樻湁鍏朵粬瀛楁闇�瑕佹坊鍔犲埌 map 涓紝鍦ㄨ繖閲岀户缁坊鍔�
                     return map;
                 })
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java
deleted file mode 100644
index df9b277..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeDetailController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.mes.pp.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author zhoush
- * @since 2024-04-16
- */
-@RestController
-@RequestMapping("/optimize-detail")
-public class OptimizeDetailController {
-
-}
-
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java
index 59ed7a3..0f6b968 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeDetailMapper.java
@@ -1,10 +1,8 @@
 package com.mes.pp.mapper;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.pp.entity.OptimizeDetail;
-import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -15,7 +13,6 @@
  * @since 2024-04-16
  */
 @DS("pp")
-@Mapper
 public interface OptimizeDetailMapper extends MPJBaseMapper<OptimizeDetail> {
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java
index 857d2a9..20f9c71 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeLayoutMapper.java
@@ -3,7 +3,6 @@
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.pp.entity.OptimizeLayout;
-import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -14,7 +13,6 @@
  * @since 2024-04-16
  */
 @DS("pp")
-@Mapper
 public interface OptimizeLayoutMapper extends MPJBaseMapper<OptimizeLayout> {
 
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
index 08c1911..2449b5f 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
@@ -1,11 +1,9 @@
 package com.mes.pp.mapper;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.pp.entity.OptimizeProject;
 import com.mes.pp.entity.request.OptimizeRequest;
-import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
 
@@ -17,7 +15,6 @@
  * @author zhoush
  * @since 2024-04-16
  */
-@Mapper
 @DS("pp")
 public interface OptimizeProjectMapper extends MPJBaseMapper<OptimizeProject> {
     List<OptimizeProject> saveProject(OptimizeRequest optimizeRequest);
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java
index e42cefa..47f829c 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkServiceImpl.java
@@ -20,7 +20,7 @@
 
 /**
  * <p>
- *  鏈嶅姟瀹炵幇绫�
+ * 鏈嶅姟瀹炵幇绫�
  * </p>
  *
  * @author wu
@@ -30,24 +30,25 @@
 @DS("pp")
 @Slf4j
 public class ReportingWorkServiceImpl extends ServiceImpl<ReportingWorkMapper, ReportingWork> implements ReportingWorkService {
-@Autowired
-private ReportingDamageMapper reportingDamageMapper;
-@Autowired
-private AwaitingRepairMapper awaitingRepairMapper;
+    @Autowired
+    private ReportingDamageMapper reportingDamageMapper;
+    @Autowired
+    private AwaitingRepairMapper awaitingRepairMapper;
+
     @Override
     public List<Reportingdamage> selectDamage(Reportingdamage reportingdamage) {
-        QueryWrapper<Reportingdamage>queryWrapper=new QueryWrapper<>();
-        queryWrapper.select("this_process,sum(completed_quantity)as completedQuantity,sum(breakage_quantity)as breakageQuantity,device_name ")
-                .eq("this_process",reportingdamage.getThisProcess())
+        QueryWrapper<Reportingdamage> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("this_process,sum(completed_quantity) as completedQuantity,sum(breakage_quantity) as breakageQuantity ")
+                //.eq("this_process", reportingdamage.getThisProcess())
                 //.eq("device_name",reportingdamage.getDeviceName())
-                .ge("reporting_work_time",reportingdamage.getReportingWorkTime())
+                .ge("reporting_work_time", reportingdamage.getReportingWorkTime())
                 .groupBy("this_process");
         return reportingDamageMapper.selectList(queryWrapper);
     }
 
     @Override
     public List<AwaitingRepair> selectAwaitingRepair() {
-        QueryWrapper<AwaitingRepair>queryWrapper=new QueryWrapper<>();
+        QueryWrapper<AwaitingRepair> queryWrapper = new QueryWrapper<>();
         queryWrapper.select("*");
         return awaitingRepairMapper.selectList(queryWrapper);
     }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
index 63b0c45..9a83681 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
@@ -45,12 +45,6 @@
     private Integer glassType;
 
     /**
-     * 楂�
-     */
-    @ApiModelProperty(value = "楂�", position = 7)
-    private double height;
-
-    /**
      * 鍘氬害
      */
     @ApiModelProperty(value = "鍘氬害", position = 8)
@@ -81,18 +75,6 @@
     private Integer temperingFeedSequence;
 
     /**
-     * x鍧愭爣
-     */
-    @ApiModelProperty(value = "x鍧愭爣", position = 13)
-    private Integer xCoordinate;
-
-    /**
-     * y鍧愭爣
-     */
-    @ApiModelProperty(value = "y鍧愭爣", position = 14)
-    private Integer yCoordinate;
-
-    /**
      * 鏃嬭浆瑙掑害锛堥�嗘椂閽堬級
      */
     @ApiModelProperty(value = "鏃嬭浆瑙掑害锛堥�嗘椂閽堬級", position = 15)
@@ -104,4 +86,9 @@
     @ApiModelProperty(value = "鐘舵��", position = 16)
     private Integer state;
 
+    /**
+     * 宸ョ▼id
+     */
+    @ApiModelProperty(value = "宸ョ▼id", position = 17)
+    private String engineerId;
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingAgoService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingAgoService.java
deleted file mode 100644
index 83088d7..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingAgoService.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.mes.temperingglass.service;
-import com.mes.temperingglass.entity.TemperingGlassInfo;
-import com.github.yulichang.base.MPJBaseService;
-import java.util.List;
-
-/**
- * <p>
- * 鏈嶅姟绫�
- * </p>
- *
- * @author zhoush
- * @since 2024-04-07
- */
-public interface TemperingAgoService extends MPJBaseService<TemperingGlassInfo> {
-
-    List<TemperingGlassInfo> selectWaitingGlass();
-
-    List<TemperingGlassInfo> selectIntoGlass(int layoutId);
-
-    List<TemperingGlassInfo> selectOutGlass();
-
-    List<TemperingGlassInfo> selectOverGlass();
-
-    List<TemperingGlassInfo> selectLayoutId();
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
new file mode 100644
index 0000000..3ebeae3
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/TemperingGlassInfoService.java
@@ -0,0 +1,51 @@
+package com.mes.temperingglass.service;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.github.yulichang.base.MPJBaseService;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+public interface TemperingGlassInfoService extends MPJBaseService<TemperingGlassInfo> {
+    /**
+     * 绛夊緟涓殑鐜荤拑
+     * @return
+     */
+    List<TemperingGlassInfo> selectWaitingGlass();
+    /**
+     * 杩涚倝涓殑鐜荤拑
+     * @return
+     */
+    List<TemperingGlassInfo> selectIntoGlass(TemperingGlassInfo temperingGlassInfo);
+    /**
+     * 鍑虹倝涓殑鐜荤拑
+     * @return
+     */
+    List<TemperingGlassInfo> selectOutGlass();
+    /**
+     * 閽㈠寲鍚庣殑鐜荤拑
+     * @return
+     */
+    List<TemperingGlassInfo> selectOverGlass();
+    /**
+     * 鏌ヨ閽㈠寲鍚庣殑鐗堝浘id
+     * @return
+     */
+    List<TemperingGlassInfo> selectLayoutId();
+    /**
+     * 鏌ヨ閽㈠寲鐘舵��
+     * @return
+     */
+    List<TemperingGlassInfo> selectTaskType();
+    /**
+     * 閽㈠寲妯″潡鐮存崯
+     * @return
+     */
+    Integer updateTemperingState(TemperingGlassInfo temperingGlassInfo);
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingAgoServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingAgoServiceImpl.java
deleted file mode 100644
index e8a10af..0000000
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingAgoServiceImpl.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.mes.temperingglass.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.github.yulichang.base.MPJBaseServiceImpl;
-import com.mes.temperingglass.entity.TemperingGlassInfo;
-import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
-import com.mes.temperingglass.service.TemperingAgoService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * <p>
- * 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author zhoush
- * @since 2024-04-07
- */
-@Service
-public class TemperingAgoServiceImpl extends MPJBaseServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingAgoService {
-    @Autowired
-    TemperingGlassInfoMapper temperingMapper;
-
-    @Override
-    public List<TemperingGlassInfo> selectWaitingGlass() {
-        //鑾峰彇绛夊緟杩涚倝涓殑鐜荤拑淇℃伅
-        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
-        //wrapper.eq("state",1);
-        wrapper.in("state",1,0);
-        return temperingMapper.selectList(wrapper);
-    }
-
-    @Override
-    public List<TemperingGlassInfo> selectIntoGlass(int layoutId) {
-        //鑾峰彇杩涚倝涓殑鐜荤拑淇℃伅
-        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
-        wrapper.eq("state",2)
-                .eq("tempering_layout_id", layoutId)
-                .orderByAsc("tempering_layout_id","tempering_feed_sequence");
-        return temperingMapper.selectList(wrapper);
-    }
-
-    @Override
-    public List<TemperingGlassInfo> selectOutGlass() {
-        //鑾峰彇鍑虹倝涓殑鐜荤拑淇℃伅
-        QueryWrapper<TemperingGlassInfo> wapper = new QueryWrapper<>();
-        wapper.eq("state", 3)
-                .orderByAsc("tempering_layout_id","tempering_feed_sequence");
-        return temperingMapper.selectList(wapper);
-    }
-
-    @Override
-    public List<TemperingGlassInfo> selectOverGlass() {
-        //鑾峰彇杩囨棆杞彴鏈�澶х殑閽㈠寲鐗堝浘id
-        QueryWrapper<TemperingGlassInfo> wapper = new QueryWrapper<>();
-        wapper.select("top 1 *").eq("state", 4)
-                .orderByDesc("tempering_layout_id");
-        //鏍规嵁鏈�澶х殑鐗堝浘id鏄剧ず閽㈠寲鍚庣殑鐗堝浘淇℃伅
-        TemperingGlassInfo glassinfo= temperingMapper.selectOne(wapper);
-        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
-        wrapper.eq("tempering_layout_id",glassinfo.getTemperingLayoutId());
-        return  temperingMapper.selectList(wrapper);
-    }
-
-    @Override
-    public List<TemperingGlassInfo> selectLayoutId() {
-        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
-        wrapper.select("distinct tempering_layout_id")
-                .eq("state",2)
-                .orderByAsc("tempering_layout_id");
-        return temperingMapper.selectList(wrapper);
-    }
-}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
new file mode 100644
index 0000000..a7da6ff
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -0,0 +1,112 @@
+package com.mes.temperingglass.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-04-07
+ */
+@Service
+@DS("salve_hangzhoumes")
+public class TemperingGlassInfoServiceImpl extends MPJBaseServiceImpl<TemperingGlassInfoMapper, TemperingGlassInfo> implements TemperingGlassInfoService {
+    @Autowired
+    TemperingGlassInfoMapper temperingMapper;
+
+    @Override
+    public List<TemperingGlassInfo> selectWaitingGlass() {
+        //鑾峰彇绛夊緟杩涚倝涓殑鐜荤拑淇℃伅
+        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
+        wrapper.select("Top 1 *").eq("state",1);
+        TemperingGlassInfo glass=temperingMapper.selectOne(wrapper);
+        QueryWrapper<TemperingGlassInfo> glassinfo = new QueryWrapper<>();
+        glassinfo.eq("engineer_id",glass.getEngineerId())
+                .eq("tempering_layout_id", glass.getTemperingLayoutId());
+        return temperingMapper.selectList(glassinfo);
+    }
+
+    @Override
+    public List<TemperingGlassInfo> selectIntoGlass(TemperingGlassInfo temperingGlassInfo) {
+        //鑾峰彇杩涚倝涓殑鐜荤拑淇℃伅
+        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
+        wrapper.eq("tempering_layout_id", temperingGlassInfo.getTemperingLayoutId())
+                .eq("engineer_id", temperingGlassInfo.getEngineerId())
+                .orderByAsc("tempering_layout_id","tempering_feed_sequence");
+        return temperingMapper.selectList(wrapper);
+    }
+
+    @Override
+    public List<TemperingGlassInfo> selectOutGlass() {
+        //鑾峰彇鍑虹倝涓殑鐜荤拑淇℃伅
+        QueryWrapper<TemperingGlassInfo> wrap = new QueryWrapper<>();
+        wrap.select("Top 1 *").eq("state",3);
+        TemperingGlassInfo glass=temperingMapper.selectOne(wrap);
+        //鏍规嵁宸ョ▼鍙峰拰鐗堝浘鑾峰彇鏁版嵁
+        QueryWrapper<TemperingGlassInfo> wapper = new QueryWrapper<>();
+        wapper.eq("engineer_id",glass.getEngineerId())
+                .eq("tempering_layout_id", glass.getTemperingLayoutId())
+                .orderByAsc("tempering_layout_id","tempering_feed_sequence");
+        return temperingMapper.selectList(wapper);
+    }
+
+    @Override
+    public List<TemperingGlassInfo> selectOverGlass() {
+        //鑾峰彇杩囨棆杞彴鏈�澶х殑閽㈠寲鐗堝浘id
+        QueryWrapper<TemperingGlassInfo> wapper = new QueryWrapper<>();
+        wapper.select("Top 1 *").eq("state", 4)
+                .orderByDesc("tempering_layout_id,engineer_id");
+        //鏍规嵁鏈�澶х殑鐗堝浘id鏄剧ず閽㈠寲鍚庣殑鐗堝浘淇℃伅
+        TemperingGlassInfo glassinfo= temperingMapper.selectOne(wapper);
+        if (glassinfo == null) {
+            return null;  // 鐩存帴杩斿洖null锛岃〃绀烘病鏈夋壘鍒扮鍚堟潯浠剁殑璁板綍
+        }
+        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
+        wrapper.eq("tempering_layout_id",glassinfo.getTemperingLayoutId())
+                .eq("engineer_id",glassinfo.getEngineerId());
+
+        return  temperingMapper.selectList(wrapper);
+    }
+
+    @Override
+    public List<TemperingGlassInfo> selectLayoutId() {
+        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
+        wrapper.select("distinct tempering_layout_id,engineer_id")
+                .eq("state",2)
+                .orderByAsc("tempering_layout_id");
+        return temperingMapper.selectList(wrapper);
+    }
+
+    @Override
+        public List<TemperingGlassInfo> selectTaskType() {
+        QueryWrapper<TemperingGlassInfo> wrapper = new QueryWrapper<>();
+        wrapper.select("state")
+                .groupBy("state");
+        return temperingMapper.selectList(wrapper);
+    }
+
+    @Override
+    public Integer updateTemperingState(TemperingGlassInfo temperingGlassInfo) {
+        UpdateWrapper<TemperingGlassInfo> wrapper = new UpdateWrapper<>();
+        wrapper.eq("glass_id",temperingGlassInfo.getGlassId())
+                .lt("state",5)
+                .set("state", temperingGlassInfo.getState());;
+        if (temperingMapper.update(null,wrapper) > 0) {
+            return 200;
+        }else {
+            return 100;
+        }
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java
index 32812b3..45bf01e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/S7control.java
@@ -66,6 +66,7 @@
                 s7PLC.writeUInt16(address, data);
                 result = true;
             } catch (Exception ex) {
+                System.out.println("鍚憄lc鍐欏懡浠よ繃绋嬩腑鍙戠敓寮傚父锛屽師鍥犱负锛�" + ex.getMessage());
                 reStartS7client();
             } finally {
                 tryCount -= 1;
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/WebSocketServer.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/WebSocketServer.java
index 11ce5dd..480921c 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/WebSocketServer.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/tools/WebSocketServer.java
@@ -119,9 +119,32 @@
     public void sendMessage(String message) {
         try {
             // log.info("鏈嶅姟绔粰瀹㈡埛绔痆{}]鍙戦�佹秷鎭瘂}", this.session.getId(), message);
-            this.session.getBasicRemote().sendText(message);
+            if(this.session.isOpen()){
+                int maxChunkSize = 50000; // 瀹氫箟鏈�澶х殑鍒嗗潡澶у皬
+                int length = message.length();
+                if(length>50000){
+                    int chunks = (int) Math.ceil((double) length / maxChunkSize);
+                    //鍒嗗潡鍙戦�佹秷鎭�
+                    for (int i = 0; i < chunks; i++) {
+                        int startIndex = i * maxChunkSize;
+                        int endIndex = Math.min(startIndex + maxChunkSize, length);
+                        String chunk = message.substring(startIndex, endIndex);
+
+                        // 鍒ゆ柇鏄惁鏄渶鍚庝竴鍧楁秷鎭�
+                        boolean isLastChunk = (i == chunks - 1);
+                        if(isLastChunk==true){
+                            chunk+="<END>";
+                        }
+                        // 鍙戦�佸垎鍧楁秷鎭紝骞朵紶閫掓槸鍚︽槸鏈�鍚庝竴鍧楁秷鎭殑鏍囪瘑
+                        this.session.getBasicRemote().sendText(chunk);
+                    }
+                }else{
+                    this.session.getBasicRemote().sendText(message);
+                }
+
+            }
         } catch (Exception e) {
-            log.error("鏈嶅姟绔彂閫佹秷鎭粰瀹㈡埛绔け璐�", e);
+            log.error("鍙戦�佹秷鎭粰瀹㈡埛绔け璐ワ細{}", e.getMessage(), e);
         }
     }
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java
index 2384256..582dafe 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java
@@ -1,16 +1,15 @@
 package com.mes.work_assignment.controller;
 
 
-import cn.hutool.core.date.DateTime;
-import com.mes.damage.service.DamageService;
 import com.mes.utils.Result;
+import com.mes.work_assignment.entity.WorkAssignment;
 import com.mes.work_assignment.service.WorkAssignmentService;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
 
 /**
  * <p>
@@ -20,17 +19,24 @@
  * @author wu
  * @since 2024-07-01
  */
+@Api(description = "鍊肩彮淇℃伅")
 @RestController
-@RequestMapping("/work_assignment/work-assignment")
+@RequestMapping("/work_assignment")
 public class WorkAssignmentController {
 
     @Autowired
     private WorkAssignmentService workAssignmentService;
     @ApiOperation("鍊肩彮鏁版嵁鏌ヨ")
-    @GetMapping("/selectWorkAssignment")
+    @PostMapping("/selectWorkAssignment")
     public Result selectWorkAssignment(int line,String workingProcedure) {
         return Result.build(200,"鏌ヨ鎴愬姛",workAssignmentService.selectWorkAssignment(line,workingProcedure));
     }
 
+    @ApiOperation("鍊肩彮鏁版嵁淇敼")
+    @PostMapping("/updateWorkAssignment")
+    public Result updateWorkAssignment(@RequestBody List<WorkAssignment> workAssignmentList) {
+        workAssignmentService.saveOrUpdateBatch(workAssignmentList);
+        return Result.build(200,"淇敼鎴愬姛",1);
+    }
 }
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java
index e713455..c5acc6b 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/mapper/WorkAssignmentMapper.java
@@ -1,5 +1,6 @@
 package com.mes.work_assignment.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.mes.work_assignment.entity.WorkAssignment;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -11,6 +12,7 @@
  * @author wu
  * @since 2024-07-01
  */
+@DS("hangzhoumes")
 public interface WorkAssignmentMapper extends BaseMapper<WorkAssignment> {
 
 }
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java
index b1ef2d6..ae06d40 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/mapper/SysMenuMapper.java
@@ -2,7 +2,6 @@
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.menu.entity.SysMenu;
-import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
 
@@ -14,7 +13,7 @@
  * @author zhoush
  * @since 2024-04-11
  */
-@Mapper
+
 public interface SysMenuMapper extends MPJBaseMapper<SysMenu> {
 
     List<String> selectPermsByUserId(long parseLong);
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
index 036e737..f752b45 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/controller/SysRoleController.java
@@ -33,15 +33,19 @@
     @ApiOperation("鏂板瑙掕壊鍙婅鑹蹭笅鐨勬潈闄愪俊鎭�")
     @PostMapping("/saveRole")
 //    @PreAuthorize("hasAuthority('sys:role:save')")
-    public Result<SysRole> saveRole(@Validated @RequestBody SysRoleVO sysRoleVO) {
-        return Result.success(sysRoleService.saveRole(sysRoleVO));
+    public Result<SysRoleVO> saveRole(@Validated @RequestBody SysRoleVO sysRoleVO) {
+        //return Result.success(sysRoleService.saveRole(sysRoleVO));
+        sysRoleService.saveRole(sysRoleVO);
+        return Result.build(200,"鏂板鎴愬姛",sysRoleVO);
     }
 
     @ApiOperation("缂栬緫瑙掕壊鍙婅鑹蹭笅鐨勬潈闄愪俊鎭�")
     @PostMapping("/updateRole")
 //    @PreAuthorize("hasAuthority('sys:role:save')")
-    public Result<String> updateRole(@Validated @RequestBody SysRoleVO sysRoleVO) {
-        return Result.success(sysRoleService.updateRole(sysRoleVO));
+    public Result<SysRoleVO> updateRole(@Validated @RequestBody SysRoleVO sysRoleVO) {
+       // return Result.success(sysRoleService.updateRole(sysRoleVO));
+        sysRoleService.updateRole(sysRoleVO);
+        return Result.build(200,"鏂板鎴愬姛",sysRoleVO);
     }
 
     @ApiOperation("鏌ヨ瑙掕壊鍙婅鑹蹭笅鐨勬潈闄愪俊鎭�")
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java
index d9251c1..bf1bf6d 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMapper.java
@@ -2,7 +2,6 @@
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.role.entity.SysRole;
-import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -12,7 +11,6 @@
  * @author zhoush
  * @since 2024-04-11
  */
-@Mapper
 public interface SysRoleMapper extends MPJBaseMapper<SysRole> {
 
 }
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java
index 451d7fe..0cfc7df 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/mapper/SysRoleMenuMapper.java
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.role.entity.SysRoleMenu;
-import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -12,7 +11,7 @@
  * @author zhoush
  * @since 2024-04-11
  */
-@Mapper
+
 public interface SysRoleMenuMapper extends BaseMapper<SysRoleMenu> {
 
 }
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
index 3201d55..a787182 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/role/service/impl/SysRoleServiceImpl.java
@@ -117,10 +117,21 @@
             roleMenu.setMenuId(menu.getId());
             return roleMenu;
         }).collect(Collectors.toList());
+        // 浣跨敤娴佸鐞嗚彍鍗曞垪琛紝鎻愬彇 children 鐨� id锛屽苟璁剧疆鍒� SysRoleMenu 涓�
+        List<SysRoleMenu> childrenList = menuList.stream()
+                .flatMap(menu -> menu.getChildren().stream()) // 鎵佸钩鍖栧鐞� children 鍒楄〃
+                .map(child -> {
+                    SysRoleMenu roleMenu = new SysRoleMenu();
+                    roleMenu.setRoleId(roleId);
+                    roleMenu.setMenuId(child.getId()); // 璁剧疆 child 鐨� id 鍒� menuId
+                    return roleMenu;
+                })
+                .collect(Collectors.toList());
         log.info("娓呯┖瑙掕壊鏉冮檺琛ㄤ腑璇ヨ鑹蹭俊鎭�");
         // 鍏堝垹闄ゅ師鏉ョ殑璁板綍锛屽啀淇濆瓨鏂扮殑
         sysRoleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, roleId));
         sysRoleMenuService.saveBatch(roleMenuList);
+        sysRoleMenuService.saveBatch(childrenList);
         // 鍒犻櫎缂撳瓨
         sysUserService.clearUserAuthorityInfoByRoleId(roleId);
         return "success";
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
index 6f13e7c..e897e65 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/controller/SysUserController.java
@@ -43,7 +43,6 @@
 
     @ApiOperation("閫�鍑虹櫥褰�")
     @PostMapping("/logout")
-//    @PreAuthorize("hasRole('ROLE_admin')")
     @PreAuthorize("hasAuthority('xt:yh')")
     public Result<String> logout() {
         return Result.success(sysUserService.logout());
@@ -61,10 +60,9 @@
     @PostMapping("/updateUser")
 //    @PreAuthorize("hasAuthority('sys:user:update')")
     public Result<List<SysUserVO>> updateUser(@Validated @RequestBody SysUserVO sysUser) {
-        //return Result.success(sysUserService.updateUser(sysUser));
         sysUserService.updateUser(sysUser);
         GeneralRequest request=new GeneralRequest();
-        request.setKey("");
+        //request.setKey("");
         return Result.success(sysUserService.listByUserName(request));
         //鏇存敼浜嗕慨鏀逛箣鍚庤繑鍥炴墍鏈夌敤鎴峰垪琛�
     }
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java
index f3e2f25..b9c491c 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserMapper.java
@@ -1,8 +1,8 @@
 package com.mes.userinfo.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.userinfo.entity.SysUser;
-import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -12,7 +12,7 @@
  * @author zhoush
  * @since 2024-04-11
  */
-@Mapper
+@DS("hangzhoumes")
 public interface SysUserMapper extends MPJBaseMapper<SysUser> {
 
 }
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java
index cfd9a6f..697ca74 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/userinfo/mapper/SysUserRoleMapper.java
@@ -2,7 +2,6 @@
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.userinfo.entity.SysUserRole;
-import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -12,7 +11,7 @@
  * @author zhoush
  * @since 2024-04-11
  */
-@Mapper
+
 public interface SysUserRoleMapper extends MPJBaseMapper<SysUserRole> {
 
 }
diff --git a/hangzhoumesParent/gateway/src/main/resources/application.yml b/hangzhoumesParent/gateway/src/main/resources/application.yml
index 3ddd26b..a369150 100644
--- a/hangzhoumesParent/gateway/src/main/resources/application.yml
+++ b/hangzhoumesParent/gateway/src/main/resources/application.yml
@@ -47,6 +47,14 @@
           filters:
             - StripPrefix=2
 
+
+        - id: glassStorage
+          uri: lb://glassStorage
+          predicates:
+            - Path=/api/glassStorage/**
+          filters:
+            - StripPrefix=2
+
 #        - id: unLoadGlass
 #          uri: lb://unLoadGlass
 #          predicates:
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
index f52662f..73b2bd4 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
@@ -25,12 +25,7 @@
      */
     EdgStorageCage selectNearestEmpty(int currentSlot, boolean flag);
 
-    /**
-     * 鏌ヨ绗煎唴绌烘牸
-     * @return
-     */
     List<EdgStorageCage> selectCacheEmpty();
-
     /**
      * 鏌ヨ绗煎唴鍑虹墖椤哄簭璇︽儏
      * @return
@@ -45,11 +40,19 @@
 
     /**
      * 淇敼鐞嗙墖绗间俊鎭�
+     *
      * @param edgStorageCage
      * @return
      */
     boolean updateEdgStorageCage(EdgStorageCage edgStorageCage);
 
+    /**
+     * 鏇存柊鐞嗙墖绗艰鎯呬俊鎭�
+     *
+     * @param edgStorageCageId
+     * @param edgStorageCageDetails
+     * @return
+     */
     boolean updateEdgStorageCageDetails(int edgStorageCageId, EdgStorageCageDetails edgStorageCageDetails);
 
 }
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 301ef23..b4c28b8 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
@@ -15,6 +15,8 @@
 import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
 import com.mes.edgstoragecage.mapper.EdgStorageCageMapper;
 import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.mapper.GlassInfoMapper;
 import com.mes.pp.entity.OptimizeDetail;
 import com.mes.pp.entity.OptimizeLayout;
 import com.mes.pp.mapper.OptimizeDetailMapper;
@@ -53,6 +55,8 @@
 
     @Autowired
     EdgStorageCageMapper edgStorageCageMapper;
+    @Autowired
+    GlassInfoMapper glassInfoMapper;
 
     @Autowired
     TaskCacheService taskCacheService;
@@ -77,12 +81,20 @@
             log.info("鍓嶇浼犻�掓暟鎹笉鍏�:{}",arguments);
             return false;
         }
-        int state=controlsId==200?3:2;
+        int state;
+        if(controlsId==200||controlsId==201){
+            state=controlsId==200?3:2;
+        }else if (controlsId==300||controlsId==301){
+            state=controlsId==300?3:2;
+        }else{
+            log.info("鍓嶇浼犻�掔姸鎬佷笉鍚堟硶:{}",arguments);
+            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(controlsId);
+        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);
@@ -90,9 +102,18 @@
             damage.setRemark("");
             damage.setStatus(state);//201鐮存崯锛�200鎷胯蛋   =銆嬬牬鎹熻〃 2鐮存崯  3 鎷胯蛋
             damageService.insertDamage(damage);
-            baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId));
-            return true;
+        }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(controlsId);
+            baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId));
+        }
+
 //            Sql鐗堟湰
 //        List<EdgStorageCageDetails> edgStorageCageDetails = baseMapper.selectList(new QueryWrapper<EdgStorageCageDetails>().eq("glass_id", glassId));
 //        if (edgStorageCageDetails.size() == 1) {
@@ -101,7 +122,7 @@
 //            baseMapper.update(edgStorageCageDetails.get(0), new QueryWrapper<EdgStorageCageDetails>().eq("glass_id", glassId));
 //            return true;
 //        }
-        return false;
+        return true;
     }
 
     /**
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
index 40e35b2..ce367b3 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java
@@ -5,7 +5,9 @@
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.github.yulichang.query.MPJQueryWrapper;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.mes.common.S7object;
 import com.mes.common.config.Const;
 import com.mes.device.PlcParameterObject;
@@ -128,27 +130,6 @@
         }
         Date endDate = new Date();
         log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
-    }
-
-    public void plcToHomeEdgTask() {
-        // log.info("鎺ㄦ暟鎹�");
-        // jsonObject.append("params", new short[] { 30, 40, });
-//        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
-//        if (sendwServer != null) {
-//            for (WebSocketServer webserver : sendwServer) {
-//                webserver.sendMessage(jsonObject.toString());
-//                if (webserver != null) {
-//
-//                    List<String> messages = webserver.getMessages();
-//
-//                    if (!messages.isEmpty()) {
-//                        // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
-//                        webserver.clearMessages();
-//                    }
-//                }
-//
-//            }
-//        }
     }
 
     /**
@@ -277,6 +258,7 @@
                     MPJQueryWrapper<EdgStorageCageDetails> wrapper = new MPJQueryWrapper<>();
                     wrapper.select("count(t.glass_id), t.width, t.height")
                             .eq("t.state", Const.GLASS_STATE_IN)
+                            .inSql("t.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
                             .groupBy("t.width, t.height");
                     if (endcell == Const.A10_OUT_TARGET_POSITION) {
                         wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
@@ -372,8 +354,9 @@
             glassList.add(resultDetails);
         }
         //鑾峰彇绗煎唴鐜荤拑
-        List<EdgStorageCageDetails> details = edgStorageCageDetailsService.list(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                .eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN));
+        List<EdgStorageCageDetails> details = edgStorageCageDetailsService.selectJoinList(EdgStorageCageDetails.class, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class)
+                .leftJoin(EdgStorageCage.class, on -> on.eq(EdgStorageCage::getSlot, EdgStorageCageDetails::getSlot).eq(EdgStorageCageDetails::getState, Const.GLASS_STATE_IN))
+                .eq(EdgStorageCage::getEnableState, Const.SLOT_ON));
         glassList.addAll(details);
         return glassList;
 
@@ -384,19 +367,20 @@
      *
      * @return
      */
-    private boolean queryMaxMinDiff(int threshold) {
+    public boolean queryMaxMinDiff(int threshold) {
         //鑾峰彇绗煎瓙鍐呮渶澶х増鍥緄d鍜屾渶灏忕増鍥緄d鎻掑�硷紝鍒ゆ柇鏄惁澶т簬闃堝�硷紝澶т簬闃堝�肩洿鎺ュ嚭鏈�灏忕増鍥剧幓鐠�
         QueryWrapper<EdgStorageCageDetails> queryWrapper = new QueryWrapper<>();
         queryWrapper.select("max(tempering_layout_id)-min(tempering_layout_id) as diff")
-                .eq("state", Const.GLASS_STATE_IN);
+                .eq("state", Const.GLASS_STATE_IN)
+                .inSql("slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON);
         List<Object> list = edgStorageCageDetailsService.listObjs(queryWrapper);
+        //鑾峰彇绗煎唴鐜荤拑鐗堝浘宸�兼槸鍚﹀ぇ浜庨槇鍊�
         if (CollectionUtil.isNotEmpty(list)) {
             Long diff = (Long) list.get(0);
             return diff > threshold;
         } else {
             return Boolean.FALSE;
         }
-
     }
 
     /**
@@ -411,6 +395,7 @@
                 .eq(EdgStorageCageDetails::getState, 100)
                 .eq(width != 0, EdgStorageCageDetails::getWidth, width)
                 .eq(height != 0, EdgStorageCageDetails::getHeight, height)
+                .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
                 .orderByAsc(EdgStorageCageDetails::getTemperingLayoutId)
                 .orderBy(Boolean.TRUE, sequenceOrder, EdgStorageCageDetails::getTemperingFeedSequence)
                 .last("limit 1"));
@@ -446,6 +431,7 @@
                 .eq("t.glass_id", taskCache.getGlassId())
                 .ne("t1.glass_id", taskCache.getGlassId())
                 .eq("t1.state", Const.GLASS_STATE_IN)
+                .inSql("t1.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
                 .orderByAsc("t1.tempering_layout_id")
                 .orderBy(Boolean.TRUE, sequenceOrder, "t1.tempering_feed_sequence");
         List<EdgStorageCageDetails> details = edgStorageCageDetailsService.selectJoinList(EdgStorageCageDetails.class, mpjLambdaWrapper);
@@ -469,7 +455,7 @@
             return null;
         }
         return edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId())
-//                .inSql(EdgStorageCageDetails::getEngineerId, "select engineer_id from engineering where state = 1")
+                .inSql(EdgStorageCageDetails::getSlot, "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
                 .last(" limit 1 "));
     }
 
@@ -513,6 +499,7 @@
         MPJQueryWrapper<EdgStorageCageDetails> wrapper = new MPJQueryWrapper<>();
         wrapper.select("count(t.glass_id) as count, t.width, t.height")
                 .eq("t.state", Const.GLASS_STATE_IN)
+                .inSql("t.slot", "select slot from edg_storage_cage where enable_state = " + Const.SLOT_ON)
                 .groupBy("t.width, t.height");
         if (endcell == Const.A10_OUT_TARGET_POSITION) {
             wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
@@ -601,11 +588,9 @@
                 log.info("6銆佹坊鍔犲嚭鐗囦换鍔℃槸鍚﹀畬鎴愶細{}", taskCacheStatus);
             } else {
                 log.info("5銆侀潪鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", glassInfo);
-                LambdaQueryWrapper<EdgStorageCageDetails> wrapper = new LambdaQueryWrapper<>();
-                wrapper.eq(EdgStorageCageDetails::getGlassId, glassInfo.getGlassId());
-                EdgStorageCageDetails updateDetail = new EdgStorageCageDetails();
-                updateDetail.setState(Const.GLASS_STATE_OUT);
-                edgStorageCageDetailsService.update(updateDetail, wrapper);
+                LambdaUpdateWrapper<EdgStorageCageDetails> wrapper = new LambdaUpdateWrapper<>();
+                wrapper.eq(EdgStorageCageDetails::getGlassId, glassInfo.getGlassId()).set(EdgStorageCageDetails::getState, Const.GLASS_STATE_OUT);
+                edgStorageCageDetailsService.update(wrapper);
                 log.info("5銆佹洿鏂板嚭鐗囩幓鐠冪殑鐘舵�佷负{}", Const.GLASS_STATE_OUT);
 
                 boolean taskCacheStatus = saveTaskCache(glassInfo.getGlassId(), glassInfo.getSlot(), endcell, Const.GLASS_CACHE_TYPE_OUT);
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
index 02fa1cc..7fff8e4 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -3,8 +3,10 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.mes.common.config.Const;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
+import com.mes.edgstoragecage.entity.EdgStorageCage;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
 import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
 import com.mes.glassinfo.entity.GlassInfo;
@@ -12,6 +14,7 @@
 import com.mes.taskcache.entity.TaskCache;
 import com.mes.taskcache.mapper.TaskCacheMapper;
 import com.mes.taskcache.service.TaskCacheService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -28,6 +31,7 @@
  * @author zhoush
  * @since 2024-04-07
  */
+@Slf4j
 @Service
 public class TaskCacheServiceImpl extends ServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
 
@@ -65,10 +69,19 @@
         int serialNumber=1;
         for(TaskCache taskCache1:taskCache){
             Map<String,Object> map=new HashMap<>();
-            GlassInfo glassInfo=glassInfoMapper.selectOne(new MPJLambdaWrapper<GlassInfo>()
+//            GlassInfo glassInfo=glassInfoMapper.selectOne(new MPJLambdaWrapper<GlassInfo>()
+//                    .selectAll(GlassInfo.class)
+//                    .eq(GlassInfo::getGlassId,taskCache1.getGlassId()));
+            List<GlassInfo> glassInfos=glassInfoMapper.selectJoinList(GlassInfo.class, new MPJLambdaWrapper<GlassInfo>()
                     .selectAll(GlassInfo.class)
-                    .eq(GlassInfo::getGlassId,taskCache1.getGlassId()));
-            if(glassInfo!=null){
+                    .innerJoin(EdgStorageCageDetails.class, on -> on
+                            .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId)
+                            .eq(EdgStorageCageDetails::getEngineerId, GlassInfo::getEngineerId))
+                    .eq(GlassInfo::getGlassId,taskCache1.getGlassId())
+                    .eq(EdgStorageCageDetails::getState,Const.GLASS_STATE_IN)
+            );
+            if(glassInfos.size()==1){
+                GlassInfo glassInfo=glassInfos.get(0);
                 map.put("Line",line);//绾胯矾   2001  1绾匡紝 2002 2绾�
                 map.put("Width",glassInfo.getWidth());//瀹�
                 map.put("Height",glassInfo.getHeight());//楂�
@@ -80,6 +93,9 @@
                 map.put("FilmsId",glassInfo.getFilmsid());//鑶滅郴
                 map.put("SerialNumber",serialNumber);//鍑虹墖椤哄簭
                 result.add(map);
+            }else if(glassInfos.size()>1){
+                log.info("鏁版嵁涓嶇鍚堥�昏緫--纾ㄨ竟闃熷垪glassId閲嶅:",glassInfos);
+                return new ArrayList<>();
             }
             serialNumber++;
         }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
index 8a15f1b..19a87ce 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
@@ -15,6 +15,7 @@
 import com.mes.pp.mapper.OptimizeDetailMapper;
 import com.mes.taskcache.entity.TaskCache;
 import com.mes.taskcache.mapper.TaskCacheMapper;
+import com.mes.taskcache.service.TaskCacheService;
 import com.mes.taskcache.service.impl.TaskCacheServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
@@ -54,6 +55,9 @@
     GlassInfoService glassInfoService;
     @Autowired
     CacheGlassTask cacheGlassTask;
+
+    @Autowired
+    TaskCacheService taskCacheService;
 
     @Test
     public void testFindPath() {
@@ -122,8 +126,8 @@
 
     @Test
     public void testSelectCacheEmpty() {
-        List<EdgStorageCage> map = edgStorageCageService.selectCacheEmpty();
-        log.info("绗煎唴绌烘牸锛歿}", Arrays.asList(map));
+//        List<EdgStorageCage> map = edgStorageCageService.selectCacheEmpty();
+//        log.info("绗煎唴绌烘牸锛歿}", Arrays.asList(map));
     }
 
     @Test
@@ -135,10 +139,10 @@
     @Test
     public void testidentWorn() {
         Map<String, String> arguments=new HashMap<>();
-        arguments.put("glassId","P24060405|30|1");//鐜荤拑ID
-        arguments.put("controlsId","200");        //鎷胯蛋锛�200/鐮存崯锛�201
-        arguments.put("line","1001");             //绾胯矾锛�
-        arguments.put("machine","璇嗗埆");           //璁惧鍚嶇О锛�
+        arguments.put("glassId","P24060403|3|6");//鐜荤拑ID
+        arguments.put("controlsId","300");        //鎷胯蛋锛�200/鐮存崯锛�201
+        arguments.put("line","2001");             //绾胯矾锛�
+        arguments.put("machine","鍐峰姞宸�");           //璁惧鍚嶇О锛�
         edgStorageCageDetailsService.identWorn(arguments);
         log.info("璇嗗埆鍙般�愮牬鎹�/鎷胯蛋銆戯細{}", 1);
     }
@@ -175,4 +179,11 @@
         log.info("鍑虹墖浠诲姟锛歿}", Arrays.asList(edgStorageCageDetails));
     }
 
+    @Test
+    public void testedgTask() {
+        List<Map<String,Object>> EdgTasks = taskCacheService.selectEdgInfo("2001");
+
+        log.info("纾ㄨ竟浠诲姟锛歿}", Arrays.asList(EdgTasks));
+    }
+
 }
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 deed23a..3dd6f8f 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
@@ -34,7 +34,11 @@
     @PostMapping("/selectBigStorageCageDetails")
     public Result selectBigStorageCageDetails(@RequestBody Map map) {
         List<BigStorageCageDetails> bigStorageCageDetails=bigStorageCageDetailsService.selectBigStorageCageDetails(map.get("glassId").toString());
-        return Result.build(200,"鏌ヨ鎴愬姛",bigStorageCageDetails);
+        if (bigStorageCageDetails.size()>0){
+            return Result.build(200,"鏌ヨ鎴愬姛",bigStorageCageDetails);
+        }else{
+            return Result.build(200,"鏌ヨ澶辫触锛屾棤姝ょ幓鐠僫d",bigStorageCageDetails);
+        }
     }
 
     @ApiOperation("鐞嗙墖绗艰鎯呮坊鍔�")
@@ -68,10 +72,25 @@
     @ApiOperation("鐞嗙墖绗间换鍔″嚭鐗�")
     @PostMapping("/outBigStorageCageDetails")
     public Result outBigStorageCageDetails(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
-
         bigStorageCageDetailsService.outBigStorageCageDetails(bigStorageCageDetails);
         return Result.build(200,"鍑虹墖娣诲姞鎴愬姛",1);
     }
 
+    @ApiOperation("鎸囧畾閽㈠寲")
+    @PostMapping("/TemperingGlass")
+    public Result TemperingGlass(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
+        boolean result=bigStorageCageDetailsService.TemperingGlass(bigStorageCageDetails.getTemperingLayoutId().toString(),bigStorageCageDetails.getEngineerId());
+        if(result==true){
+            return Result.build(200,"鎸囧畾閽㈠寲鎴愬姛",1);
+        }else {
+            return Result.build(200, "宸插瓨鍦ㄩ挗鍖栦换鍔★紝璇风瓑寰呴挗鍖栧畬鎴愬啀鎸囧畾閽㈠寲", 1);
+        }
+    }
+
+    @ApiOperation("閽㈠寲鏌ヨ")
+    @PostMapping("/selectTemperingGlass")
+    public Result selectTemperingGlass() {
+        return Result.build(200,"鏌ヨ鎴愬姛",bigStorageCageDetailsService.selectTemperingGlass());
+    }
 }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
index 9b6ecc4..5a79a88 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
@@ -46,15 +46,26 @@
     private Integer slot;
 
     /**
+     * 鏍呮牸鍙�
+     */
+    @ApiModelProperty(value = "鏈�灏忓帤搴�", position = 5)
+    private Integer minThickness;
+    /**
+     * 鏍呮牸鍙�
+     */
+    @ApiModelProperty(value = "鏈�澶у帤搴�", position = 6)
+    private Integer maxThickness;
+
+    /**
      * 鍚敤鐘舵��
      */
-    @ApiModelProperty(value = "鍚敤鐘舵��", position = 5)
+    @ApiModelProperty(value = "鍚敤鐘舵��", position = 7)
     private Integer enableState;
 
     /**
      * 鍓╀綑瀹藉害
      */
-    @ApiModelProperty(value = "鍓╀綑瀹藉害", position = 6)
+    @ApiModelProperty(value = "鍓╀綑瀹藉害", position = 8)
     private Integer remainWidth;
 
     @ApiModelProperty(hidden = true)
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
index 33fe7f5..e717b46 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
@@ -60,11 +60,6 @@
     @ApiModelProperty(value = "鐜荤拑绫诲瀷", position = 8)
     private Integer glassType;
 
-    /**
-     * 楂�
-     */
-    @ApiModelProperty(value = "楂�", position = 10)
-    private double height;
 
     /**
      * 鍘氬害
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java
index a2df9ab..465c7a2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageDTO.java
@@ -22,4 +22,9 @@
      * 鐜荤拑鏁伴噺
      */
     private Integer glassCount;
+
+    /**
+     * 绗煎瓙鍙�
+     */
+    private Integer deviceId;
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
index da14719..495b06a 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
@@ -24,7 +24,7 @@
      *
      * @return
      */
-    TemperingLayoutDTO temperingIsAll();
+    List<TemperingLayoutDTO> temperingIsAll();
 
     /**
      * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
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 83d86fe..cab1f09 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
@@ -8,6 +8,7 @@
 import com.mes.glassinfo.entity.GlassInfo;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -47,7 +48,7 @@
      *
      * @return
      */
-    TemperingLayoutDTO temperingIsAll();
+    List<TemperingLayoutDTO> temperingIsAll();
 
     /**
      * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
@@ -64,4 +65,8 @@
      * @return
      */
     List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId);
+
+    boolean TemperingGlass(String temperingLayoutId, String engineerId);
+
+    List<Map<String, Object>> selectTemperingGlass();
 }
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 5b09ac0..01b49c4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -2,6 +2,7 @@
 
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.mes.bigstorage.entity.BigStorageCage;
@@ -17,6 +18,8 @@
 import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
 import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper;
 import com.mes.common.config.Const;
+import com.mes.damage.entity.Damage;
+import com.mes.damage.service.DamageService;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.mapper.GlassInfoMapper;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
@@ -53,6 +56,9 @@
     private BigStorageCageService bigStorageCageService;
     @Resource
     private GlassInfoMapper glassInfoMapper;
+
+    @Resource
+    private DamageService damageService;
 
     @Value("${mes.minCount}")
     private int minCount;
@@ -96,13 +102,14 @@
                     .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
                     .isNull(BigStorageCageFeedTask::getTargetSlot);
             List<BigStorageCageFeedTask> bigStorageCageFeedTaskNoTargetList = bigStorageCageFeedTaskMapper.selectList(feedTaskNoTargetWrapper);
-            for (BigStorageCageFeedTask bigStorageCageFeedTask:bigStorageCageFeedTaskNoTargetList
-                 ) {
-                BigStorageCageDetails bigStorageCageDetails=new BigStorageCageDetails();
+            for (BigStorageCageFeedTask bigStorageCageFeedTask : bigStorageCageFeedTaskNoTargetList
+            ) {
+                BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
                 LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>();
-                glassInfoWrapper.eq(GlassInfo::getGlassId,bigStorageCageFeedTask.getGlassId());
-                GlassInfo glassInfo= glassInfoMapper.selectOne(glassInfoWrapper);
+                glassInfoWrapper.eq(GlassInfo::getGlassId, bigStorageCageFeedTask.getGlassId());
+                GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper);
                 BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
+                bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
                 bigStorageCageDetailsList.add(bigStorageCageDetails);
             }
             return bigStorageCageDetailsList;
@@ -196,14 +203,19 @@
             temperingGlassInfoMapper.updateById(temperingGlassInfo);
         }
         if (status == 0) {
-            bigStorageCageDetails.setState(Const.GLASS_STATE_TAKE);
-        } else {
             bigStorageCageDetails.setState(Const.GLASS_STATE_DAMAGE);
+        } else {
+            bigStorageCageDetails.setState(Const.GLASS_STATE_TAKE);
         }
         baseMapper.updateById(bigStorageCageDetails);
         bigStorageCageService.updateRemainWidth(bigStorageCageDetails.getSlot());
         //todo:鎻掑叆鐮存崯鏁版嵁
-
+        Damage damage = new Damage();
+        damage.setGlassId(bigStorageCageDetails.getGlassId());
+        damage.setWorkingProcedure("鍐峰姞宸�");
+        damage.setRemark("澶х悊鐗囩鐮存崯");
+        damage.setStatus(2);
+        damageService.insertDamage(damage);
     }
 
     //鏌ヨ鐜荤拑淇℃伅
@@ -217,10 +229,13 @@
             BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
             bigStorageCageDetails.setState(1);
             bigStorageCageDetails.setGap(glassGap);
+            List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
+            bigStorageCageDetailsList.add(bigStorageCageDetails);
+            return bigStorageCageDetailsList;
+        } else {
+            return null;
         }
-        List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
-        bigStorageCageDetailsList.add(bigStorageCageDetails);
-        return bigStorageCageDetailsList;
+
     }
 
     //鐞嗙墖绗艰鎯呮坊鍔�
@@ -259,7 +274,7 @@
                 .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                 .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
-                .gt(BigStorageCage::getRemainWidth, glassInfo.getWidth())
+                .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
                 .last("limit 1");
         if (glassInfo.getTemperingLayoutId() == 0) {
             wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight());
@@ -271,6 +286,7 @@
             bigStorageDTO = new BigStorageDTO();
             bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
             bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
             return bigStorageDTO;
         }
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
@@ -283,21 +299,42 @@
             bigStorageDTO = new BigStorageDTO();
             bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
             bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
+            return bigStorageDTO;
+        }
+
+        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨
+        bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
+                .eq(BigStorageCage::getRemainWidth, slotWidth)
+                .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .notInSql(BigStorageCage::getDeviceId,
+                        "select distinct device_id from big_storage_cage_details where state in (100,102,103)")
+                .ge(BigStorageCage::getMaxThickness, glassInfo.getThickness())
+                .orderByAsc(BigStorageCage::getDeviceId)
+                .last("limit 1"));
+        if (null != bigStorageCage) {
+            bigStorageDTO = new BigStorageDTO();
+            bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
+            bigStorageDTO.setSlot(bigStorageCage.getSlot());
+            bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
             return bigStorageDTO;
         }
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                 .eq(BigStorageCage::getRemainWidth, slotWidth)
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .ge(BigStorageCage::getMaxThickness, glassInfo.getThickness())
+                .orderByAsc(BigStorageCage::getDeviceId)
                 .last("limit 1"));
         Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�");
         bigStorageDTO = new BigStorageDTO();
         bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
         bigStorageDTO.setSlot(bigStorageCage.getSlot());
+        bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
         return bigStorageDTO;
     }
 
     @Override
-    public TemperingLayoutDTO temperingIsAll() {
+    public List<TemperingLayoutDTO> temperingIsAll() {
         return baseMapper.temperingIsAll();
     }
 
@@ -311,4 +348,48 @@
     public List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId) {
         return baseMapper.queryGlassMaxAndMin(engineerId, temperingLayoutId);
     }
+
+    @Override
+    public boolean TemperingGlass(String temperingLayoutId, String engineerId) {
+        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        temperingGlassInfoLambdaQueryWrapper
+                .eq(TemperingGlassInfo::getState,Const.TEMPERING_NEW);
+        List<TemperingGlassInfo> temperingGlassInfoList=temperingGlassInfoMapper.selectList(temperingGlassInfoLambdaQueryWrapper);
+
+        if(temperingGlassInfoList.size()==0){
+            LambdaQueryWrapper<BigStorageCageDetails> wrapper =new LambdaQueryWrapper<>();
+            wrapper.eq(BigStorageCageDetails::getTemperingLayoutId,temperingLayoutId)
+                    .eq(BigStorageCageDetails::getEngineerId,engineerId)
+                    .in(BigStorageCageDetails::getState,Const.GLASS_STATE_IN,Const.GLASS_STATE_ARTIFICIAL);
+            List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(wrapper);
+
+            for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList
+            ) {
+                TemperingGlassInfo temperingGlassInfo = new TemperingGlassInfo();
+                LambdaQueryWrapper<GlassInfo> glassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                glassInfoLambdaQueryWrapper.eq(GlassInfo::getGlassId, bigStorageCageDetails.getGlassId());
+                GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoLambdaQueryWrapper);
+
+                BeanUtils.copyProperties(glassInfo, temperingGlassInfo);
+                temperingGlassInfo.setAngle((int) glassInfo.getAngle());
+                temperingGlassInfo.setState(Const.TEMPERING_NEW);
+                temperingGlassInfo.setSlot(bigStorageCageDetails.getSlot());
+                temperingGlassInfoMapper.insert(temperingGlassInfo);
+            }
+            return true;
+        } else {
+            return false;
+        }
+
+
+    }
+
+    @Override
+    public List<Map<String, Object>> selectTemperingGlass(){
+        QueryWrapper<BigStorageCageDetails> wrapper = new QueryWrapper<>();
+        wrapper.select("engineer_id,tempering_layout_id,count(*) as count")
+                .groupBy("engineer_id,tempering_layout_id");
+        List<Map<String, Object>> TemperingGlass = baseMapper.selectMaps(wrapper);
+        return TemperingGlass;
+    }
 }
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 7ce8d3f..44e8033 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
@@ -18,6 +18,7 @@
 import com.mes.temperingglass.service.TemperingGlassInfoService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -48,6 +49,9 @@
 
     @Resource
     private GlassInfoService glassInfoService;
+
+    @Value("${mes.glassGap}")
+    private Integer glassGap;
 
     //杩涚墖閫昏緫
     @Override
@@ -217,15 +221,13 @@
         LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper = new LambdaQueryWrapper();
         bigStorageCageDetailsWrapper
                 .eq(BigStorageCageDetails::getSlot, slot)
-                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL);
+                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL);
 
         List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsMapper.selectList(bigStorageCageDetailsWrapper);
         for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList
         ) {
             double widths = bigStorageCageDetails.getWidth();
-            double gap = bigStorageCageDetails.getGap();
-            width -= widths + gap;
+            width = width - widths - glassGap;
         }
         //淇敼鏍煎瓙鍓╀綑瀹藉害
         BigStorageCage bigStorageCage = new BigStorageCage();
@@ -241,7 +243,9 @@
         MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>();
         wrapper.selectAll(BigStorageCage.class).selectCollection(BigStorageCageDetails.class, BigStorageCage::getBigStorageCageDetails)
                 .leftJoin(BigStorageCageDetails.class, on -> on.eq(BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
-                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL));
+                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL,Const.GLASS_STATE_OUT_ING))
+                        .orderByAsc(BigStorageCage::getDeviceId)
+                        .orderByAsc(BigStorageCage::getSlot);
         return bigStorageCageMapper.selectJoinList(BigStorageCage.class, wrapper);
     }
 
@@ -252,7 +256,7 @@
         MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>();
         wrapper.selectAll(BigStorageCage.class).selectCollection(BigStorageCageDetails.class, BigStorageCage::getBigStorageCageDetails)
                 .leftJoin(BigStorageCageDetails.class, on -> on.eq(BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
-                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL));
+                        .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL,Const.GLASS_STATE_OUT_ING));
         List<BigStorageCage> bigStorageCages = bigStorageCageMapper.selectJoinList(BigStorageCage.class, wrapper);
         Map<Integer, List<BigStorageCage>> listMap = bigStorageCages.stream().collect(Collectors.groupingBy(item -> item.getDeviceId()));
         return listMap;
@@ -262,7 +266,7 @@
     @Override
     public List<Map<String, Object>> selectBigStorageCageUsage() {
         QueryWrapper<BigStorageCage> wrapper = new QueryWrapper<>();
-        wrapper.select("device_id,ROUND(1 - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) / COUNT(device_id), 2) AS percentage,COUNT(device_id) - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) AS count")
+        wrapper.select("device_id,ROUND(1 - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) / COUNT(device_id), 2) AS percentage,SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) AS count")
 
                 .groupBy("device_id");
         List<Map<String, Object>> bigStorageCageUsages = baseMapper.selectMaps(wrapper);
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
index b439101..e5279a4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
@@ -27,10 +27,12 @@
     public BigStorageCageOutTask() {
     }
 
-    public BigStorageCageOutTask(String glassId, Integer startSlot, Integer endSlot, Integer width, Integer trainNumber, Integer serialNumber, Integer taskState) {
+    public BigStorageCageOutTask(String glassId, Integer startSlot, Integer endSlot, double width, double height, Integer trainNumber, Integer serialNumber, Integer taskState) {
         this.glassId = glassId;
         this.startSlot = startSlot;
         this.endSlot = endSlot;
+        this.width = width;
+        this.height = height;
         this.trainNumber = trainNumber;
         this.serialNumber = serialNumber;
         this.taskState = taskState;
@@ -60,6 +62,16 @@
      */
     @ApiModelProperty(value = "鐩爣浣嶇疆", position = 5)
     private Integer endSlot;
+    /**
+     * 鐩爣浣嶇疆
+     */
+    @ApiModelProperty(value = "鐩爣浣嶇疆", position = 5)
+    private double width;
+    /**
+     * 鐩爣浣嶇疆
+     */
+    @ApiModelProperty(value = "鐩爣浣嶇疆", position = 5)
+    private double height;
 
     /**
      * 杞︽
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
index 85cf462..b8361f4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
@@ -57,12 +57,17 @@
                 e.printStackTrace();
             }
             Date startDate = new Date();
-            log.info("澶х悊鐗囩璇诲彇plc鏁版嵁寮�濮嬫椂闂达細{}", startDate);
             byte[] getplcvlues = plccontrol.readByte(PlcMesObject.getPlcAddressBegin(), PlcMesObject.getPlcAddressLength());
             Date endDate = new Date();
-            log.info("澶х悊鐗囩璇诲彇plc鏁版嵁缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+            log.info("澶х悊鐗囩璇诲彇plc鏁版嵁,寮�濮嬫椂闂达細{}锛岀粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", startDate, endDate, endDate.getTime() - startDate.getTime());
             if (getplcvlues != null) {
                 PlcMesObject.setPlcParameterList(getplcvlues);
+                log.info("澶х悊鐗囧綋鍓嶈繘鍗ц浆绔嬬‘璁ゅ瓧涓篸01:{},d04:{},杩涚閫佺墖浠诲姟纭瀛椾负锛歞03:{},d05:{},鍑虹墖浠诲姟纭瀛椾负{}",
+                        PlcMesObject.getPlcParameter("MESToD01").getValue(),
+                        PlcMesObject.getPlcParameter("MESToD04").getValue(),
+                        PlcMesObject.getPlcParameter("MESToD03").getValue(),
+                        PlcMesObject.getPlcParameter("MESToD05").getValue(),
+                        PlcMesObject.getPlcParameter("MESToPLC").getValue());
             }
         }
     }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
index e200106..c013e0a 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
@@ -76,6 +76,7 @@
             queryDataSource1();
             //鏌ヨ浣跨敤鏁版嵁婧�2鏌ヨ鏁版嵁
             queryDataSource2();
+
             ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("slicecage");
             if (sendwServer != null) {
                 for (WebSocketServer webserver : sendwServer) {
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
index ad16377..1254d27 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java
@@ -85,6 +85,13 @@
     @Value("${mes.glassGap}")
     private Integer glassGap;
 
+    @Value("${mes.xMaxSize}")
+    private Integer xMaxSize;
+
+
+    private String d01GlassId = "";
+    private String d04GlassId = "";
+
     @Scheduled(fixedDelay = 300)
     public void plcToHomeEdgScan() {
         Date startDate = new Date();
@@ -114,11 +121,17 @@
         }
         //鎸夌収绾胯矾鍙婄幓鐠僫d鑾峰彇鐩搁偦涓ゅ潡鐜荤拑 鍗ц浆绔嬩笂鐨勭幓鐠�:  鐘舵�佷负0涓嶆搷浣滐紙D01閫佺墖锛�0涓嶆搷浣滐紝1鍏佽閫佺墖锛夛紝璇锋眰瀛椾负1锛� 锛�02鐜荤拑id涓虹┖鎴栬�呭崸杞珛鏈惎鍔級
         if (!REQUEST_WORD.equals(mesD01Value) && REQUEST_WORD.equals(d01ToMES) && (StringUtils.isBlank(d02State) || !REQUEST_WORD.equals(d03State))) {
-            judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION, mesD01Address);
+            if (!d01GlassId.equals(d01Id)) {
+                judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION, mesD01Address);
+                d01GlassId = d01Id;
+            }
         }
 //        鐘舵�佷负0涓嶆搷浣滐紙D01閫佺墖锛�0涓嶆搷浣滐紝1鍏佽閫佺墖锛夛紝璇锋眰瀛椾负1锛� 鍗ц浆绔嬫湭鍚姩
         if (!REQUEST_WORD.equals(mesD04Value) && REQUEST_WORD.equals(d04ToMES) && !REQUEST_WORD.equals(d05State)) {
-            judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION, mesD04Address);
+            if (!d04GlassId.equals(d04Id)) {
+                judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION, mesD04Address);
+                d04GlassId = d04Id;
+            }
         }
         Date endDate = new Date();
         log.info("澶х悊鐗囩鎵爜浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
@@ -145,6 +158,7 @@
         }
         LambdaQueryWrapper<BigStorageCageFeedTask> wrapper = new LambdaQueryWrapper<BigStorageCageFeedTask>()
                 .eq(BigStorageCageFeedTask::getTaskType, Const.BIG_STORAGE_IN_RUN)
+                .and(e -> e.isNull(BigStorageCageFeedTask::getTargetSlot).or().eq(BigStorageCageFeedTask::getTargetSlot, Const.OUT_TARGET_POSITION_ZERO))
                 .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP);
         //鑾峰彇鍙互鍚姩鍗ц浆绔嬬殑浠诲姟绾胯矾
         List<BigStorageCageFeedTask> feedTaskList = bigStorageCageFeedTaskService.list(wrapper);
@@ -169,7 +183,7 @@
 //            log.info("涓ゆ潯绾块兘瀛樺湪杩涚墖浠诲姟锛岀粨鏉熶换鍔�");
 //            return;
 //        }
-        //鑾峰彇涓ゆ潯绾垮崸杞珛鏄惁鏈夌幓鐠冿紝涓斾换鍔$姸鎬侀兘涓�2
+        //鑾峰彇涓ゆ潯绾垮崸杞珛鏄惁鏈夌幓鐠冿紝涓斾换鍔$姸鎬佷负1/2
         List<Integer> lineList = bigStorageCageFeedTaskService.querySitToUpGlass();
         if (CollectionUtils.isEmpty(lineList)) {
             Date endDate = new Date();
@@ -235,6 +249,11 @@
         Date startDate = new Date();
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
         PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject;
+        String e02State = plcMesObject.getPlcParameter("E02State").getAddress();
+        if (REQUEST_WORD.equals(e02State)) {
+            log.info("鍑虹墖蹇欑锛岀粨鏉熷嚭鐗囦换鍔�");
+            return;
+        }
         String mesToPLCAddress = plcMesObject.getPlcParameter("MESToPLC").getAddress();
         List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW));
         Assert.isTrue(CollectionUtils.isEmpty(outingList), "鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�");
@@ -263,23 +282,27 @@
             return;
         }
         //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
-        TemperingLayoutDTO temperingLayoutDTO = bigStorageCageDetailsService.temperingIsAll();
-        if (null != temperingLayoutDTO) {
-            //鐜荤拑鍒伴綈
+        List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll();
+        if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) {
+            //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑
             //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
-            List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
-                    .selectAll(GlassInfo.class)
-                    .select("-1 as state")
-                    .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
-                    .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
-                    .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                    .eq(GlassInfo::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId())
-                    .eq(GlassInfo::getEngineerId, temperingLayoutDTO.getEngineerId()));
-            temperingGlassInfoService.saveBatch(temperingGlassInfos);
-            computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
-            Date endDate = new Date();
-            log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
-            return;
+            for (TemperingLayoutDTO item : temperingLayoutDTOList) {
+                List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
+                        .selectAll(GlassInfo.class)
+                        .select("-1 as state")
+                        .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
+                        .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
+                        .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                        .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId())
+                        .eq(GlassInfo::getEngineerId, item.getEngineerId()));
+                if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
+                    temperingGlassInfoService.saveBatch(temperingGlassInfos);
+                    computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                    Date endDate = new Date();
+                    log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                    return;
+                }
+            }
         }
         //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟
         TemperingLayoutDTO temperingOccupySlot = bigStorageCageDetailsService.queryTemperingOccupySlot();
@@ -294,16 +317,50 @@
                     List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
                             .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN));
                     List<BigStorageCageOutTask> outTasks = list.stream().map(e -> new BigStorageCageOutTask(e.getGlassId(), first.getSlot(), second.getSlot(),
-                            slotWidth, 0, 0, 1)).collect(Collectors.toList());
+                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1)).collect(Collectors.toList());
                     bigStorageCageOutTaskService.saveBatch(outTasks);
-                    S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
-                    log.info("宸插悜plc鍙戦�佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{}", mesToPLCAddress);
+
+                    //鍚憄lc鍐欏叆纭瀛�
+                    int returnData = 0;
+                    int count = 1;
+                    while (returnData == 0) {
+                        log.info("宸插悜plc绗瑊}娆¢�佸崗璁�", count);
+                        S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+                        returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+                        log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+                    }
                     Date endDate = new Date();
                     log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
                     return;
                 }
             }
         }
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void updateOutGlassStateTask() {
+        Date startDate = new Date();
+        log.info("1銆佸ぇ鐞嗙墖绗煎嚭鐗囧畬鎴愬悗鏇存柊澶х悊鐗囩鏁版嵁浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        //鍥犱负澶х悊鐗囩鍜屽嚭鐗囦换鍔℃槸涓や釜搴撶殑鏁版嵁锛屾墍浠ヨ鍒嗗紑鏌ユ壘
+        List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING));
+        if (CollectionUtils.isNotEmpty(list)) {
+            log.info("2銆佽幏鍙栨墍鏈夋鍦ㄥ嚭鐗囩殑鐜荤拑淇℃伅id:{}", list);
+            List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList());
+            List<Object> outSuccessGlassIdsObj = bigStorageCageOutTaskService.listObjs(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                    .select(BigStorageCageOutTask::getGlassId).in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL));
+            List<String> outSuccessGlassIds = outSuccessGlassIdsObj.stream().map(String::valueOf).collect(Collectors.toList());
+            if (CollectionUtils.isNotEmpty(outSuccessGlassIds)) {
+                log.info("3銆佽幏鍙栧嚭鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", outSuccessGlassIdsObj);
+                bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                        .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT).in(BigStorageCageDetails::getGlassId, outSuccessGlassIds));
+                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlassIdsObj);
+            }
+        }
+        Date endDate = new Date();
+        log.info("end:澶х悊鐗囩鍑虹墖瀹屾垚鍚庢洿鏂板ぇ鐞嗙墖绗兼暟鎹换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        return;
+
     }
 
     /**
@@ -317,7 +374,11 @@
         List<BigStorageCageFeedTask> inDamageTaskInfoList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
                 .eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
         if (CollectionUtils.isNotEmpty(inDamageTaskInfoList)) {
+            log.info("鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", inDamageTaskInfoList);
             bigStorageCageFeedTaskService.remove(new LambdaQueryWrapper<BigStorageCageFeedTask>().eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
+            //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佹洿鏂�
+            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                    .set(BigStorageCageDetails::getState, Const.GLASS_STATE_DAMAGE).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList())));
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
             for (BigStorageCageFeedTask bigStorageCageFeedTask : inDamageTaskInfoList) {
                 Damage damage = new Damage();
@@ -328,14 +389,21 @@
                 damage.setStatus(2);
                 damageService.insertDamage(damage);
             }
+            log.info("杩涚墖浠诲姟鎵ц瀹屾垚");
         }
         //鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
         List<BigStorageCageOutTask> outDamageTaskInfoList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
                 .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_DAMAGE));
         if (CollectionUtils.isNotEmpty(outDamageTaskInfoList)) {
+            log.info("鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", outDamageTaskInfoList);
             bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
             List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+            //绉婚櫎閽㈠寲涓嬬墖琛ㄦ暟鎹�
             temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList));
+            //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佹洿鏂�
+            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                    .set(BigStorageCageDetails::getState, Const.GLASS_STATE_DAMAGE).in(BigStorageCageDetails::getGlassId, glassIdList));
+
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
             for (BigStorageCageOutTask bigStorageCageOutTask : outDamageTaskInfoList) {
                 Damage damage = new Damage();
@@ -346,6 +414,7 @@
                 damage.setStatus(2);
                 damageService.insertDamage(damage);
             }
+            log.info("鍑虹墖浠诲姟鎵ц瀹屾垚");
         }
         Date endDate = new Date();
         log.info("澶х悊鐗囩鐮存崯鐜荤拑娓呴櫎浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
@@ -377,27 +446,29 @@
         Boolean flag = Boolean.TRUE;
         //2銆佽幏鍙栧崸杞珛
         Integer widthFirst = Math.max(edgGlassTaskInfoList.get(0).getWidth() / 10, edgGlassTaskInfoList.get(0).getHeight() / 10);
+        Integer heightFirst = Math.min(edgGlassTaskInfoList.get(0).getWidth() / 10, edgGlassTaskInfoList.get(0).getHeight() / 10);
         if (edgGlassTaskInfoList.size() == 1) {
             if (remainWidth >= widthFirst) {
                 if (glassCount < inCarMaxSize) {
-                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst);
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst, heightFirst);
                 } else {
-                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst);
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightFirst);
                 }
             } else {
                 flag = Boolean.FALSE;
             }
         } else {
             Integer widthSecond = Math.max(edgGlassTaskInfoList.get(1).getWidth() / 10, edgGlassTaskInfoList.get(1).getHeight() / 10);
+            Integer heightSecond = Math.min(edgGlassTaskInfoList.get(1).getWidth() / 10, edgGlassTaskInfoList.get(1).getHeight() / 10);
             if (remainWidth >= widthFirst) {
                 if (remainWidth - widthFirst - glassGap >= widthSecond) {
                     if (glassCount < inCarMaxSize) {
-                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst);
+                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst, heightSecond);
                     } else {
-                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst);
+                        addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightSecond);
                     }
                 } else {
-                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst);
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthFirst, heightSecond);
                 }
             } else {
                 flag = Boolean.FALSE;
@@ -405,7 +476,15 @@
         }
         //鍚憄lc鍙戦�佽繘鐗囩‘璁�
         if (flag) {
-            S7object.getinstance().plccontrol.writeWord(mesAddress, 1);
+            //鍚憄lc鍐欏叆纭瀛�
+            int returnData = 0;
+            int count = 1;
+            while (returnData == 0) {
+                S7object.getinstance().plccontrol.writeWord(mesAddress, 1);
+                returnData = S7object.getinstance().plccontrol.readWord(mesAddress, 1).get(0);
+                log.info("杩涘崸杞珛绗瑊}娆″彂閫佺‘璁ゅ瓧瀹屾垚锛屽湴鍧�涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesAddress, returnData);
+
+            }
         }
         //璁板綍鏃犳硶鏀句笅鐜荤拑锛屽悗缁垽鏂惎鍔�
         return flag;
@@ -414,13 +493,14 @@
     /**
      * 娣诲姞浠诲姟淇℃伅
      */
-    private Boolean addFeedTask(String glassId, Integer line, Integer taskType, Integer width) {
+    private Boolean addFeedTask(String glassId, Integer line, Integer taskType, Integer width, Integer height) {
         BigStorageCageFeedTask bigStorageCageFeedTask = new BigStorageCageFeedTask();
         bigStorageCageFeedTask.setGlassId(glassId);
         bigStorageCageFeedTask.setTaskState(Const.BIG_STORAGE_IN_NEW);
         bigStorageCageFeedTask.setLine(line);
         bigStorageCageFeedTask.setTaskType(taskType);
         bigStorageCageFeedTask.setWidth(width);
+        bigStorageCageFeedTask.setHeight(height);
         bigStorageCageFeedTask.setCreateTime(new Date());
         return bigStorageCageFeedTaskService.save(bigStorageCageFeedTask);
     }
@@ -432,7 +512,8 @@
      */
     public Integer getStartLine() {
         List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
-                .inSql(BigStorageCageFeedTask::getId, "select min(id) from big_storage_cage_feed_task where task_state = 2 group by line"));
+                .inSql(BigStorageCageFeedTask::getId, "select min(id) from big_storage_cage_feed_task where task_state = 2" +
+                        "and (target_slot = 0 or target_slot is null) group by line"));
         Assert.isFalse(CollectionUtils.isEmpty(taskList), "鍗ц浆绔嬩袱鏉$嚎閮芥病鏈夌幓鐠冭繘鐗囦换鍔�");
         Map<String, Integer> taskMap = taskList.stream().collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId,
                 BigStorageCageFeedTask::getLine));
@@ -451,6 +532,7 @@
         //1銆佽幏鍙栦换鍔¤〃涓殑鎵�鏈夌幓鐠冿紙鎸囧畾绾胯矾涓斿凡缁忚繘鍗ц浆绔嬪畬鎴愶級
         List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
                 .eq(BigStorageCageFeedTask::getLine, line)
+                .and(e -> e.isNull(BigStorageCageFeedTask::getTargetSlot).or().eq(BigStorageCageFeedTask::getTargetSlot, Const.OUT_TARGET_POSITION_ZERO))
                 .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_UP_ALL)
                 .orderByAsc(BigStorageCageFeedTask::getId));
         //2銆佸幓绗煎瓙鍐呮煡鎵炬槸鍚﹀彲浠ョ户缁瓨鏀剧殑绗煎瓙
@@ -480,7 +562,7 @@
             //2銆佽幏鍙栫洰鏍囨牸瀛愪俊鎭�
             BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info);
             //3銆佹洿鏂板ぇ鐞嗙墖绗艰〃鍓╀綑瀹藉害
-            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - info.getWidth())
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - info.getWidth() - glassGap)
                     .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
             //4銆佹洿鏂拌繘鐗囦换鍔¤〃锛岀洰鏍囨牸瀛愬強鐘舵�侊紙鐘舵�佹敼涓�2 鐢垫皵鎵埌鑷澶勭悊锛�  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
             e.setTargetSlot(bigStorageDTO.getSlot());
@@ -490,6 +572,8 @@
             //5銆佸皢杩涚墖淇℃伅瀛樺叆澶х悊鐗囩璇︽儏琛�
             cageDetails.setSlot(bigStorageDTO.getSlot());
             cageDetails.setState(Const.GLASS_STATE_IN);
+            cageDetails.setDeviceId(bigStorageDTO.getDeviceId());
+            cageDetails.setGap(glassGap);
             bigStorageCageDetailsService.save(cageDetails);
         }
         sendTaskListToPLC(taskList, line);
@@ -507,8 +591,13 @@
             s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine());
             s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot());
         }
-        s7control.writeWord(outLine, 2);
-        log.info("閫佺墖浠诲姟宸插彂閫佸畬鎴愶紝浠诲姟绾胯矾涓猴細{}锛屽惎鍔ㄥ湴鍧�涓簕},纭瀛椾负{}", line, outLine, 2);
+        int returnData = 0;
+        int count = 1;
+        while (returnData == 0) {
+            s7control.writeWord(outLine, 2);
+            returnData = s7control.readWord(outLine, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, outLine, returnData);
+        }
     }
 
     private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
@@ -516,17 +605,25 @@
         List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
         //鎵撹溅鍓╀綑灏哄
         Integer remainWidth = carWidth;
+        int maxX = 0;
         for (T e : list) {
-            if (bigStorageCageOutTaskList.size() > outCarMaxSize || e.getWidth() > remainWidth) {
+            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || e.getWidth() > remainWidth) {
                 break;
             }
             remainWidth = remainWidth - (int) e.getWidth() - glassGap;
             if (isTempering) {
-                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
-                        (int) e.getWidth() * 10, 0, 0, 1));
+                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+                if (maxX + minLength <= xMaxSize) {
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1));
+                    maxX = Math.max(maxX, e.getXCoordinate());
+                } else {
+                    break;
+                }
+
             } else {
                 bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
-                        (int) e.getWidth() * 10, 0, 0, 1));
+                        e.getWidth() * 10, e.getHeight(), 0, 0, 1));
             }
 
         }
@@ -536,26 +633,32 @@
         List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
         log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
         bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
-                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT)
+                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
                 .in(BigStorageCageDetails::getGlassId, glassIds));
         //鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄
         updateSlotRemain(list, glassIds);
-        S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
-        log.info("宸插悜plc鍙戦�佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{}", mesToPLCAddress);
+
+        int returnData = 0;
+        int count = 1;
+        while (returnData == 0) {
+            S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+            returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+        }
         return Boolean.TRUE;
     }
 
     /**
      * 鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄
      *
-     * @param list
-     * @param taskGlassIds
+     * @param list         绗煎唴鍙互鍑虹鐨勭幓鐠冧俊鎭�
+     * @param taskGlassIds 鏈浠诲姟鍑哄幓鐨勭幓鐠僫ds
      * @param <T>
      */
     public <T extends BigStorageCageBaseInfo> void updateSlotRemain(List<T> list, List<String> taskGlassIds) {
         //鑾峰彇闇�瑕佸嚭鍘伙紙鍖呮嫭寰呭嚭鍘荤殑锛夌殑鎵�鏈夌幓鐠冩牸瀛愬彿
         List<Integer> slotList = list.stream().map(T::getSlot).distinct().collect(Collectors.toList());
-        //鑾峰彇寰呭嚭鍘荤殑鐜荤拑淇℃伅锛堢瓑涓嬭溅鍑哄幓鐨勭幓鐠冿級
+        //鑾峰彇寰呭嚭鍘荤殑鐜荤拑淇℃伅锛堢瓑寰呮湰娆′换鍔$粨鏉熷悗涓嬭溅鍑哄幓鐨勭幓鐠冿級
         Map<Integer, Double> slotRemainMap = list.stream().filter(e -> !taskGlassIds.contains(e.getGlassId()))
                 .collect(Collectors.groupingBy(T::getSlot, Collectors.summingDouble(item -> item.getWidth() + glassGap)));
         if (CollectionUtils.isNotEmpty(slotRemainMap)) {
@@ -576,9 +679,12 @@
     public Boolean computeIsRun(int line, String glassId) {
         //鑾峰彇鍗ц浆绔嬪墿浣欏搴�
         BigStorageDTO sitToUpRemainWidth = bigStorageCageFeedTaskService.querySitToUpRemainWidth(line);
+        if (sitToUpRemainWidth.getGlassCount() == 0) {
+            return Boolean.FALSE;
+        }
         //鑾峰彇鐜荤拑淇℃伅
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
-        return sitToUpRemainWidth.getWidth() < glassInfo.getWidth();
+        return sitToUpRemainWidth.getWidth() < Math.max(glassInfo.getWidth(), glassInfo.getHeight());
     }
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
index 82d885e..5468375 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -61,6 +61,7 @@
 
     @Override
     public boolean saveBatch(List<TemperingGlassInfo> list) {
+        log.info("闇�瑕侀挗鍖栫殑鐜荤拑涓猴細{}", list);
         return baseMapper.saveBatch(list);
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
index d4281e8..d7124b8 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
 
 spring:
   profiles:
-    active: prod
+    active: cz
   application:
     name: cacheVerticalGlass
 mybatis-plus:
@@ -16,6 +16,7 @@
   minCount: 5
   carWidth: 5000   #澶ц溅瀹藉害
   slotWidth: 5000   #澶ц溅瀹藉害
-  inCarMaxSize: 6     #杩涚墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
-  outCarMaxSize: 1     #鍑虹墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
-  glassGap: 300      #鐜荤拑闂磋窛
\ No newline at end of file
+  inCarMaxSize: 2     #杩涚墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
+  outCarMaxSize: 3     #鍑虹墖澶ц溅鏈�澶у瓨鏀剧幓鐠冩暟閲�
+  glassGap: 1000      #鐜荤拑闂磋窛
+  xMaxSize: 2850
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index a0f23bf..b49e679 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -37,10 +37,10 @@
              ) T2
                  INNER JOIN (SELECT ENGINEER_ID, TEMPERING_LAYOUT_ID, COUNT(TEMPERING_FEED_SEQUENCE) AS COUNT
                              FROM BIG_STORAGE_CAGE_DETAILS
-                             WHERE STATE in (100, 101, 102)
+                             WHERE STATE in (100, 101, 102, 103)
                              GROUP BY ENGINEER_ID, TEMPERING_LAYOUT_ID) T3 ON T2.ENGINEER_ID = T3.ENGINEER_ID
             AND T2.TEMPERING_LAYOUT_ID = T3.TEMPERING_LAYOUT_ID
-            AND T2.COUNT = T3.COUNT LIMIT 1
+            AND T2.COUNT = T3.COUNT
     </select>
 
     <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
index 2776022..c4affcd 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageFeedTaskMapper.xml
@@ -33,7 +33,8 @@
                             ELSE HEIGHT
                             END MAX_LENGTH
                  FROM BIG_STORAGE_CAGE_FEED_TASK
-                 WHERE LINE = 2002
+                 WHERE LINE = #{line}
+                   AND (target_slot = 0 or target_slot is null)
                    AND TASK_STATE IN (1, 2)
              ) T
     </select>
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
index 65bf9c0..d9a451e 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -1,7 +1,9 @@
 package com.mes;
 
+import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
+import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
 import com.mes.common.config.Const;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
@@ -13,7 +15,9 @@
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 /**
  * @Author : zhoush
@@ -33,6 +37,67 @@
     BigStorageCageDetailsService bigStorageCageDetailsService;
     @Autowired
     DamageService damageService;
+
+//    @Autowired
+//    BigStorageCageFeedTaskMapper bigStorageCageFeedTaskMapper;
+
+    @Test
+    public void testInsertSlot() {
+        List<BigStorageCage> list = new ArrayList();
+        for (int j = 1; j <= 5; j++) {
+            for (int i = 1 + (55 * (j - 1)); i <= 55 * j; i++) {
+                BigStorageCage cage = new BigStorageCage();
+                cage.setDeviceId(j);
+                cage.setSlot(i);
+                cage.setMinThickness(4);
+                cage.setMaxThickness(6);
+                cage.setEnableState(1);
+                cage.setRemainWidth(5000);
+                list.add(cage);
+            }
+        }
+        for (int i = 276; i <= 300; i++) {
+            BigStorageCage cage = new BigStorageCage();
+            cage.setDeviceId(6);
+            cage.setSlot(i);
+            cage.setMinThickness(8);
+            cage.setMaxThickness(12);
+            cage.setEnableState(1);
+            cage.setRemainWidth(5000);
+            list.add(cage);
+        }
+        for (int i = 301; i <= 330; i++) {
+            BigStorageCage cage = new BigStorageCage();
+            cage.setDeviceId(7);
+            cage.setSlot(i);
+            cage.setMinThickness(8);
+            cage.setMaxThickness(12);
+            cage.setEnableState(1);
+            cage.setRemainWidth(5000);
+            list.add(cage);
+        }
+        for (int i = 331; i <= 355; i++) {
+            BigStorageCage cage = new BigStorageCage();
+            cage.setDeviceId(8);
+            cage.setSlot(i);
+            cage.setMinThickness(8);
+            cage.setMaxThickness(12);
+            cage.setEnableState(1);
+            cage.setRemainWidth(5000);
+            list.add(cage);
+        }
+        for (int i = 356; i <= 380; i++) {
+            BigStorageCage cage = new BigStorageCage();
+            cage.setDeviceId(9);
+            cage.setSlot(i);
+            cage.setMinThickness(15);
+            cage.setMaxThickness(19);
+            cage.setEnableState(1);
+            cage.setRemainWidth(5000);
+            list.add(cage);
+        }
+        bigStorageCageService.saveBatch(list);
+    }
 
     @Test
     public void testFindPath() {
@@ -96,4 +161,10 @@
         damage.setStatus(2);
         damageService.insertDamage(damage);
     }
+
+    @Test
+    public void updateOutGlassStateTask() {
+        plcStorageCageTask.updateOutGlassStateTask();
+    }
+
 }
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/mapper/LoadPositionMapper.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/mapper/LoadPositionMapper.java
index ecd3ec9..ab8c084 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/mapper/LoadPositionMapper.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/mapper/LoadPositionMapper.java
@@ -3,8 +3,6 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.loadposition.entity.LoadPosition;
 
-import org.apache.ibatis.annotations.Mapper;
-
 /**
  *  
  *
@@ -12,7 +10,7 @@
  * @since 2024-07-09 14:51:27
  *
  */
-@Mapper
+
 public interface LoadPositionMapper extends BaseMapper<LoadPosition> {
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/mapper/RawUsageMapper.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/mapper/RawUsageMapper.java
index 513aff2..5eb15ee 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/mapper/RawUsageMapper.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/mapper/RawUsageMapper.java
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.rawusage.entity.RawUsage;
-import org.apache.ibatis.annotations.Mapper;
 /**
  *  
  *
@@ -10,7 +9,7 @@
  * @since 2024-07-09 14:51:27
  *
  */
-@Mapper
+
 public interface RawUsageMapper extends BaseMapper<RawUsage> {
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java
index f1bda86..cc226f8 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java
@@ -15,6 +15,7 @@
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import java.util.List;
+import java.util.Map;
 
 /**
  *  
@@ -99,4 +100,13 @@
         return Result.success(result);
     }
 
+
+    @ApiOperation(value = "鏋跺瓙琛ㄦ牸鏌ヨ",notes = "鏋跺瓙琛ㄦ牸鏌ヨ",produces = "application/json")
+    @ApiResponses({@ApiResponse(code = 200, message = "鏌ヨ鎴愬姛")})
+    @GetMapping("/findshelfrack")
+    public Result findshelfrack() {
+        List<Map<String, Object>> result = shelfRackService.selectshelf_rack();
+        return Result.success(result);
+    }
+
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java
index 3570a5a..bea1293 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java
@@ -1,8 +1,12 @@
 package com.mes.shelfrack.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.shelfrack.entity.ShelfRack;
-import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
 /**
  *  
  *
@@ -10,7 +14,9 @@
  * @since 2024-07-09 14:51:27
  *
  */
-@Mapper
-public interface ShelfRackMapper extends BaseMapper<ShelfRack> {
 
+public interface ShelfRackMapper extends MPJBaseMapper<ShelfRack> {
+
+
+    List<Map<String, Object>> selectshelf_rack();
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java
index d66b35e..bb0bdb0 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java
@@ -4,6 +4,8 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Map;
+
 /**
  * @author system
  * @since 2024-07-09 14:51:27
@@ -12,6 +14,6 @@
 
     List<ShelfRack> findList(ShelfRack params);
 
-
+    List<Map<String, Object>> selectshelf_rack();
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java
index 6c134c8..85d4adc 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java
@@ -1,14 +1,20 @@
 package com.mes.shelfrack.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.mes.common.config.Const;
+import com.mes.rawusage.entity.RawUsage;
 import com.mes.shelfrack.mapper.ShelfRackMapper;
 import com.mes.shelfrack.entity.ShelfRack;
 import com.mes.shelfrack.service.ShelfRackService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author system
@@ -26,6 +32,29 @@
         return shelfRackMapper.selectList(query);
     }
 
+//
+//    public void yourMethodName() {
+//        List<Map<String, Object>> resultList = shelfRackMapper.selectMaps(
+//                new LambdaQueryWrapper<ShelfRack>()
+//                        .select(ShelfRack::getNumber, RawUsage::getRawType, RawUsage::getRawWidth,
+//                                RawUsage::getRawHeight, RawUsage::getRawThickness, ShelfRack::getModTime,
+//                                ShelfRack::getEnableState, RawUsage::getPieces, RawUsage::getLeftPieces,
+//                                "(datediff(now(), raw_usage.create_time)) as rukuTime",
+//                                "(concat(if(ROUND(raw_usage.left_pieces / #{param1} * 100, 0) < 20, 20, ROUND(raw_usage.left_pieces / #{param1} * 100, 0)), '%')) as bfb")
+//                        .leftJoin(RawUsage.class, RawUsage::getId, ShelfRack::getRawPackageId)
+//                        .orderByAsc(ShelfRack::getNumber)
+//        );
+//
+//        // Process resultList as needed
+//    }
+
+
+
+    @Override
+    public  List<Map<String, Object>> selectshelf_rack() {
+        return baseMapper.selectshelf_rack();
+    }
+
 
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java
index 88b1494..0678559 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java
@@ -15,6 +15,8 @@
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 
 /**
  *  
@@ -99,4 +101,14 @@
         return Result.success(result);
     }
 
+
+    @ApiOperation(value = "浠诲姟鏌ヨ",notes = "浠诲姟鏌ヨ",produces = "application/json")
+    @ApiResponses({@ApiResponse(code = 200, message = "鏌ヨ鎴愬姛")})
+    @GetMapping("/findTasks")
+    public Result findLatestTasks() {
+        List<Map<String, Object>> result = storageTaskService.Tasks();
+        return Result.success(result);
+    }
+
+
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java
index 43a8507..f2737a1 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java
@@ -2,7 +2,12 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.storagetask.entity.StorageTask;
-import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
 /**
  *  
  *
@@ -10,7 +15,10 @@
  * @since 2024-07-09 14:51:27
  *
  */
-@Mapper
+@Repository
 public interface StorageTaskMapper extends BaseMapper<StorageTask> {
 
+
+    List<Map<String, Object>> selectTasks();
+
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.xml b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.xml
deleted file mode 100644
index 69ad537..0000000
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.mes.storagetask.mapper.StorageTaskMapper">
-
-</mapper>
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java
index e774319..bad474f 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java
@@ -4,6 +4,9 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
 /**
  * @author system
  * @since 2024-07-09 14:51:27
@@ -12,5 +15,7 @@
 
     List<StorageTask> findList(StorageTask params);
 
+    Map<String, Optional<StorageTask>> findLatestTasks();
 
+    List<Map<String, Object>> Tasks();
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java
index 8709da5..04cb2d7 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java
@@ -6,15 +6,21 @@
 import com.mes.storagetask.mapper.StorageTaskMapper;
 import com.mes.storagetask.entity.StorageTask;
 import com.mes.storagetask.service.StorageTaskService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 
 /**
  * @author system
  * @since 2024-07-09 14:51:27
  */
 @Service
+@Slf4j
 public class StorageTaskServiceImpl extends ServiceImpl<StorageTaskMapper, StorageTask> implements StorageTaskService {
 
     @Autowired
@@ -27,5 +33,35 @@
     }
 
 
+    public Map<String, Optional<StorageTask>> findLatestTasks() {
+        Map<String, Optional<StorageTask>> latestTasks = new HashMap<>();
+
+        // 鏌ヨ鏈�鏂扮殑宸插畬鎴愪换鍔�
+        LambdaQueryWrapper<StorageTask> completedWrapper = new LambdaQueryWrapper<>();
+        completedWrapper.eq(StorageTask::getTaskType, "宸插畬鎴�")
+                .orderByDesc(StorageTask::getId)
+                .last("LIMIT 1");
+        Optional<StorageTask> latestCompletedTask = Optional.ofNullable(storageTaskMapper.selectOne(completedWrapper));
+        latestTasks.put("宸插畬鎴�", latestCompletedTask);
+
+        // 鏌ヨ鏈�鏂扮殑绛夊緟涓换鍔�
+        LambdaQueryWrapper<StorageTask> pendingWrapper = new LambdaQueryWrapper<>();
+        pendingWrapper.eq(StorageTask::getTaskType, "绛夊緟涓�")
+                .orderByDesc(StorageTask::getId);
+        Optional<StorageTask> latestPendingTask = Optional.ofNullable(storageTaskMapper.selectOne(pendingWrapper));
+        latestTasks.put("绛夊緟涓�", latestPendingTask);
+        log.info(latestTasks+"");
+        return latestTasks;
+    }
+
+
+    @Override
+    public  List<Map<String, Object>> Tasks() {
+        return baseMapper.selectTasks();
+    }
+
+
+
+
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
index 3097382..53a3a66 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-dev.yml
@@ -5,7 +5,7 @@
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
         hangzhoumes:
-          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+          url: jdbc:mysql://127.0.0.1:3306/yiwumes?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
@@ -17,7 +17,7 @@
   cloud:
     nacos:
       discovery:
-        server-addr: 127.0.0.1:8848
+        server-addr: 10.153.19.150:8848
   redis:
     database: 0
     host: 127.0.0.1
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-prod.yml
index 0c3ff07..782f39a 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-prod.yml
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/application-prod.yml
@@ -5,7 +5,7 @@
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
         hangzhoumes:
-          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+          url: jdbc:mysql://127.0.0.1:3306/yiwumes?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml
new file mode 100644
index 0000000..0e13316
--- /dev/null
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.shelfrack.mapper.ShelfRackMapper">
+
+
+        <select id="selectshelf_rack" resultType="java.util.Map">
+        <![CDATA[
+            SELECT a.number, b.raw_type, b.raw_width, b.raw_height, b.raw_thickness, b.left_pieces, a.mod_time, a.enable_state, b.pieces,
+                   datediff(now(), b.create_time) as rukutime,
+                   concat(if(ROUND(b.left_pieces / b.pieces * 100, 0) < 20, 20, ROUND(b.left_pieces / b.pieces * 100, 0)), '%') as bfb
+            FROM shelf_rack AS a
+                     LEFT JOIN raw_usage AS b ON a.raw_package_id = b.id
+            ]]>
+    </select>
+
+</mapper>
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml
new file mode 100644
index 0000000..9fb2ca0
--- /dev/null
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.storagetask.mapper.StorageTaskMapper">
+
+
+
+    <select id="selectTasks" resultType="java.util.Map">
+        <![CDATA[
+        SELECT d.*, g.raw_thickness, g.color
+        FROM (
+                 (SELECT * FROM storage_task AS a WHERE a.task_state = '宸插畬鎴�' ORDER BY a.id DESC LIMIT 1)
+                 UNION ALL
+                 (SELECT * FROM storage_task AS c WHERE c.task_state = '姝e湪宸ヤ綔')
+                 UNION ALL
+                 (SELECT * FROM storage_task AS b WHERE b.task_state = '绛夊緟涓�')
+             ) AS d
+                 LEFT JOIN shelf_rack AS f ON f.id = d.shelf_rack
+                 LEFT JOIN raw_usage AS g ON g.id = f.raw_package_id
+        ]]>
+    </select>
+
+</mapper>
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
new file mode 100644
index 0000000..4f0bd8b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
@@ -0,0 +1,67 @@
+package mes;
+
+import com.mes.GlassStorageApplication;
+import com.mes.shelfrack.service.ShelfRackService;
+import com.mes.storagetask.entity.StorageTask;
+import com.mes.storagetask.service.StorageTaskService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.Arrays;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/3/27 16:37
+ * @Description:
+ */
+@Slf4j
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = GlassStorageApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+
+public class GlassStorageModuleApplicationTest {
+
+
+
+    @Autowired
+    private StorageTaskService storageTaskService;
+    @Autowired
+    private ShelfRackService shelfRackService;
+
+
+    @Test
+    public void testFindPath() {
+        log.info("瀹屾暣璺緞锛歿}", Arrays.asList("123"));
+    }
+
+    @Test
+    public void testCacheGlass() {
+     // storageTaskService.getBaseMapper().selectById(1);
+        //StorageTask storageTask=new StorageTask();
+//        storageTask.setId(Long.valueOf("1"));
+//        storageTask.setTaskState("1");
+//      storageTaskService.updateById(storageTask);
+//        storageTaskService.getBaseMapper().deleteById(1);
+       // storageTaskService.findList(storageTask);
+        ///storageTaskService.findLatestTasks();
+        storageTaskService.Tasks();
+    }
+    @Test
+    public void selectshelf_rack() {
+
+        shelfRackService.selectshelf_rack();
+    }
+
+
+
+
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
index f020aa3..9bcefd7 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
@@ -52,7 +52,11 @@
       */
      UpPattenUsage selectSequence(UpPattenUsage upPattenUsage);
 
-
+     /**
+      * 鏇存敼涓婄墖鐜荤拑鐘舵��
+      * @return UpPattenUsage
+      */
      Boolean updateGlassState(UpPattenUsage upPattenUsage);
+
 }
 
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
index 9d93d35..409cfb2 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
@@ -66,8 +66,8 @@
         List<OptimizeUpPattenUsage> upPattenUsageList = null;
         if (engineeringId != null) {
             upPattenUsageList = optimizeProjectMapper.selectJoinList(OptimizeUpPattenUsage.class, new MPJQueryWrapper<OptimizeProject>()
-                    .select("t.project_no,t.glass_type,b.o_width as width,b.o_height as height ,REGEXP_REPLACE(t.glass_thickness,'\\D','')as glass_thickness,b.stock_number")
-                    .leftJoin("optimize_detail b on t.project_no=b.project_no")
+                    .select("t.project_no,t.glass_type,b.realwidth as width,b.realheight as height ,REGEXP_REPLACE(t.glass_thickness,'\\D','')as glass_thickness,b.stock_id")
+                    .leftJoin("optimize_layout b on t.project_no=b.project_no")
                     .eq("b.project_no", engineeringId));
         }
         // 鍒涘缓涓�涓� List 鐢ㄤ簬淇濆瓨鏄犲皠鍚庣殑瀹炰綋瀵硅薄
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/common/S7object.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/common/S7object.java
new file mode 100644
index 0000000..94ae268
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/common/S7object.java
@@ -0,0 +1,60 @@
+package com.mes.common;
+
+import com.github.xingshuangs.iot.protocol.s7.enums.EPlcType;
+import com.mes.device.PlcParameterObject;
+import com.mes.tools.InitUtil;
+import com.mes.tools.S7control;
+
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/4/9 15:13
+ * @Description:
+ */
+public class S7object extends Thread {
+    public S7control plccontrol; // PLC閫氳绫诲疄渚�
+    private EPlcType plcType = EPlcType.S1200; // 瑗块棬瀛怭LC绫诲瀷
+    private String ip = "192.168.20.202"; // plc ip鍦板潃
+    private int port = 102; // plc 绔彛鍙�
+
+
+    public PlcParameterObject PlcMesObject;
+    private static volatile S7object instance = null;
+
+    private S7object() {
+        if (plccontrol == null) {
+            plccontrol = new S7control(plcType, ip, port, 0, 0);
+            String PlcLoadGlass = System.getProperty("user.dir") + "/JsonFile/PlcTemperingGlass.json";
+            PlcMesObject = InitUtil.initword(PlcLoadGlass);
+        }
+    }
+
+    // 鍗曚緥妯″紡 鑾峰彇绫荤殑鍞竴瀹炰緥
+    public static S7object getinstance() {
+        if (instance == null) {
+            synchronized (S7object.class) {
+                if (instance == null) {
+                    instance = new S7object();
+                }
+            }
+        }
+        return instance;
+    }
+
+    @Override
+    public void run() {
+        while (this != null) {
+            try {
+                Thread.sleep(100);
+
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+            byte[] getplcvlues = plccontrol.readByte(PlcMesObject.getPlcAddressBegin(), PlcMesObject.getPlcAddressLength());
+            if (getplcvlues != null) {
+                PlcMesObject.setPlcParameterList(getplcvlues);
+            }
+        }
+    }
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
index d5d59a5..ea60109 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcScreenTask.java
@@ -25,7 +25,7 @@
     @Autowired
     private ReportingWorkService reportingWorkService;
     @Autowired
-    private  OptimizeProjectService optimizeProjectService;
+    private OptimizeProjectService optimizeProjectService;
     @Autowired
     private OrdersService ordersService;
     /**
@@ -34,45 +34,26 @@
      */
 
     @Scheduled(fixedDelay = 2000)
-    public void screenHome(){
+    public void screenHome() {
         JSONObject jsonObject = new JSONObject();
-        //姝e湪绛夊緟杩涚墖鐨勭幓鐠�
         Reportingdamage reportingdamage = new Reportingdamage();
         reportingdamage.setReportingWorkTime("2024-05-11");
-        //鑾峰彇鍒囧壊淇℃伅
-        reportingdamage.setThisProcess("鍒囧壊");
-        List<Reportingdamage> cutting = reportingWorkService.selectDamage(reportingdamage);
-        jsonObject.append("cutting", cutting);
-        //鑾峰彇纾ㄨ竟淇℃伅
-        reportingdamage.setThisProcess("纾ㄨ竟");
-        List<Reportingdamage> edging = reportingWorkService.selectDamage(reportingdamage);
-        jsonObject.append("edging", edging);
-        //鑾峰彇閽㈠寲淇℃伅
-        reportingdamage.setThisProcess("閽㈠寲");
-        List<Reportingdamage> tempering = reportingWorkService.selectDamage(reportingdamage);
-        jsonObject.append("tempering", tempering);
-        //鑾峰彇澶硅兌淇℃伅
-        reportingdamage.setThisProcess("澶硅兌");
-        List<Reportingdamage> doubling = reportingWorkService.selectDamage(reportingdamage);
-        jsonObject.append("doubling", doubling);
-        //鑾峰彇涓┖淇℃伅
-        reportingdamage.setThisProcess("涓┖");
-        List<Reportingdamage> hollow = reportingWorkService.selectDamage(reportingdamage);
-        jsonObject.append("hollow", hollow);
-        //鑾峰彇鍖呰淇℃伅
-        reportingdamage.setThisProcess("鍖呰");
-        List<Reportingdamage> packaging = reportingWorkService.selectDamage(reportingdamage);
-        jsonObject.append("packaging", packaging);
+        //鎵囧舰鍥惧悇璁惧鐨勫姞宸ョ牬鎹熸暟閲�
+        List<Reportingdamage> device = reportingWorkService.selectDamage(reportingdamage);
+        jsonObject.append("device", device);
         //鑾峰彇娆$牬鏈ˉ淇℃伅
-        List<AwaitingRepair>awaitingRepairs = reportingWorkService.selectAwaitingRepair();
+        List<AwaitingRepair> awaitingRepairs = reportingWorkService.selectAwaitingRepair();
         jsonObject.append("awaitingRepairs", awaitingRepairs);
         //鑾峰彇姝e湪杩涜鐨勫伐绋�
-        List<OptimizeProject>optimizeProjects= optimizeProjectService.getDoingTask();
+        List<OptimizeProject> optimizeProjects = optimizeProjectService.getDoingTask();
         jsonObject.append("DoingTask", optimizeProjects);
         //鑾峰彇褰撳墠璁㈠崟
-        List<Orders>orders=ordersService.selectOrders();
+        List<Orders> orders = ordersService.selectOrders();
         jsonObject.append("orders", orders);
 
+        /*鐜板満瑙勫垝鍥炬樉绀�*/
+
+
         ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("screen");
         if (sendwServer != null) {
             for (WebSocketServer webserver : sendwServer) {
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
index 3f108b5..f7e63e5 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/PlcTemperingGlassTask.java
@@ -1,6 +1,6 @@
 package com.mes.job;
 import cn.hutool.json.JSONObject;
-import com.mes.temperingglass.service.TemperingAgoService;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.tools.WebSocketServer;
 import lombok.extern.slf4j.Slf4j;
@@ -19,7 +19,7 @@
 public class PlcTemperingGlassTask {
 
     @Autowired
-    private TemperingAgoService temperingAgoService;
+    private TemperingGlassInfoService temperingAgoService;
     /**
      * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
      * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
@@ -34,18 +34,21 @@
         //鑾峰彇鏁村湪鐐変腑鐨勪袱涓増鍥緄d
         List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId();
         //杩涚倝涓殑鐜荤拑
-        List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0).getTemperingLayoutId());
-        jsonObject.append("intoGlass", intoGlass);
-        //杩涚倝涓殑绗簩涓増鍥�
-        if (layoutId.size() > 1) {
-            List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1).getTemperingLayoutId());
-            jsonObject.append("intoGlass2", intoGlass2);
+        if(!layoutId.isEmpty()) {
+            List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0));
+            jsonObject.append("intoGlass", intoGlass);
+            //杩涚倝涓殑绗簩涓増鍥�
+            if (layoutId.size() > 1) {
+                List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1));
+                jsonObject.append("intoGlass2", intoGlass2);
+            }
         }
         //鍑虹倝鍚庣殑鐜荤拑
         List<TemperingGlassInfo> outGlass = temperingAgoService.selectOutGlass();
         jsonObject.append("outGlass", outGlass);
         //杩囨棆杞彴閽㈠寲鍚庣殑鐜荤拑
         List<TemperingGlassInfo> overGlass = temperingAgoService.selectOverGlass();
+
         jsonObject.append("overGlass", overGlass);
 
         ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("temperingGlass");
@@ -59,5 +62,23 @@
             }
         }
     }
+    @Scheduled(fixedDelay = 1000)
+    public void temperingIsRun(){
+        JSONObject jsonObject = new JSONObject();
+        //姝e湪杩涜鐨勪换鍔�
+        List<TemperingGlassInfo>temperingTaskType=temperingAgoService.selectTaskType();
+        jsonObject.append("temperingTaskType", temperingTaskType);
+        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");
+                }
+            }
+        }
+    }
+
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
new file mode 100644
index 0000000..8646b79
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/job/TemperingTask.java
@@ -0,0 +1,80 @@
+package com.mes.job;
+
+import cn.smallbun.screw.core.util.CollectionUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.mes.common.S7object;
+import com.mes.common.config.Const;
+import com.mes.device.PlcParameterObject;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
+import com.mes.temperingrecord.entity.TemperingRecord;
+import com.mes.temperingrecord.service.TemperingRecordService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/7/17 12:47
+ * @Description:
+ */
+@Component
+@Slf4j
+public class TemperingTask {
+
+    @Autowired
+    private TemperingRecordService temporalRecordService;
+
+    @Autowired
+    private TemperingGlassInfoService temporaryGlassInfoService;
+    private static final String ALONE_STATE = "0";
+
+
+    @Scheduled(fixedDelay = 1000)
+    public void temperingGlassBefore() {
+        Date startDate = new Date();
+        log.info("鏈浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+        String state = plcParameterObject.getPlcParameter("state").getValue();
+//        褰撳墠杩炵嚎鐘舵�佷负
+        if (ALONE_STATE.equals(state)) {
+            log.info("褰撳墠閽㈠寲鐐夎繛绾挎ā寮忎负锛歿},涓嶆墽琛岃浠诲姟", state);
+            return;
+        }
+        //灏嗙‘璁ゅ瓧缃负0
+        S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 0);
+
+        //todo:鑾峰彇閽㈠寲鐗堝浘涓姸鎬佷负2鐨勶紙杩涚倝瀹屾垚鐨勭幓鐠冧俊鎭級  涓斾笉瀛樺湪閽㈠寲璁板綍琛ㄥ唴鐨�
+        List<Object> temperRecordIdListObj = temporalRecordService.listObjs(new QueryWrapper<TemperingRecord>().select("distinct tempering_layout_id"));
+
+        List<String> temperRecordIdList = temperRecordIdListObj.stream().map(String::valueOf).collect(Collectors.toList());
+        List<TemperingGlassInfo> list = temporaryGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
+                .eq(TemperingGlassInfo::getState, Const.TEMPERING_START).notIn(TemperingGlassInfo::getTemperingLayoutId, temperRecordIdList));
+        if (CollectionUtils.isEmpty(list)) {
+            log.info("褰撳墠绯荤粺娌℃湁闇�瑕侀挗鍖栫殑鐜荤拑淇℃伅");
+            return;
+        }
+        List<Integer> temperingLayoutIdList = list.stream().map(TemperingGlassInfo::getTemperingLayoutId).distinct().collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(temperRecordIdList)) {
+            temperingLayoutIdList.removeAll(temperRecordIdList);
+        }
+        if (CollectionUtils.isEmpty(temperingLayoutIdList)) {
+            log.info("褰撳墠鐜荤拑鏈夋鍦ㄩ挗鍖栫殑浠诲姟");
+        }
+//        鑾峰彇閽㈠寲涓嬬墖琛ㄧ姸鎬佷负2鐨勭幓鐠冧俊鎭�
+
+        //瀹屾垚浠诲姟灏嗙‘璁ゅ瓧缃负1
+        S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("confirmationWord").getAddress(), 1);
+    }
+
+    @Scheduled(fixedDelay = 1000)
+    public void temperingGlassAfter() {
+
+    }
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
index 3496554..73cc34b 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingglass/controller/TemperingGlassInfoController.java
@@ -1,13 +1,13 @@
 package com.mes.temperingglass.controller;
-import com.mes.temperingglass.service.TemperingAgoService;
+import com.mes.damage.entity.Damage;
+import com.mes.damage.service.DamageService;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.utils.Result;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -22,12 +22,14 @@
 public class TemperingGlassInfoController {
 
     @Autowired
-    private TemperingAgoService temperingAgoService;
+    private TemperingGlassInfoService temperingGlassInfoService;
+    @Autowired
+    private DamageService damageService;
 
     @ApiOperation("鏌ヨ閽㈠寲绛夌墖涓殑鐗堝浘淇℃伅,鐘舵�佷负1鐨勪负宸插埌,鐘舵�佷负0鐨勪负绛夊緟涓�")
     @GetMapping("/selectWaitingGlass") // 鏌ヨ閽㈠寲绛夌墖涓殑鐗堝浘淇℃伅,鐘舵�佷负1鐨勪负宸插埌,鐘舵�佷负0鐨勪负绛夊緟涓�
     public Result <List<TemperingGlassInfo>> selectWaitingGlass() {
-        List<TemperingGlassInfo> glass = temperingAgoService.selectWaitingGlass();
+        List<TemperingGlassInfo> glass = temperingGlassInfoService.selectWaitingGlass();
         log.info("绛夊緟涓殑鐜荤拑淇℃伅{}",glass);
         return Result.build(200, "", glass);
     }
@@ -41,10 +43,24 @@
     @ApiOperation("//閽㈠寲鍚庢樉绀哄嚭鐐夌殑鐗堝浘淇℃伅銆�")
     @GetMapping("/selectOutGlass") //閽㈠寲鍚庢樉绀哄嚭鐐夌殑鐗堝浘淇℃伅
     public Result <List<TemperingGlassInfo>> selectOutGlass() {
-        List<TemperingGlassInfo> glass = temperingAgoService.selectOutGlass();
+        List<TemperingGlassInfo> glass = temperingGlassInfoService.selectOutGlass();
         log.info("閽㈠寲鍑虹倝鍚庣殑鐜荤拑淇℃伅{}",glass);
         return Result.build(200, "", glass);
     }
 
+    @ApiOperation("//閽㈠寲鐮存崯")
+    @PostMapping("/updateTemperingState") //閽㈠寲鍚庢樉绀哄嚭鐐夌殑鐗堝浘淇℃伅
+    public Result <Integer> updateTemperingState(@RequestBody  Damage damage) {
+        damageService.insertDamage(damage);
+        TemperingGlassInfo temperingGlassInfo=new TemperingGlassInfo();
+        if(damage.getStatus()==2){
+            temperingGlassInfo.setState(5);
+
+        }
+        temperingGlassInfo.setGlassId(damage.getGlassId());
+        int result=temperingGlassInfoService.updateTemperingState(temperingGlassInfo);
+        return Result.build(200, "鐮存崯鎴愬姛", result);
+    }
+
 
 }
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/controller/TemperingRecordController.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/controller/TemperingRecordController.java
new file mode 100644
index 0000000..ea8b73b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/controller/TemperingRecordController.java
@@ -0,0 +1,20 @@
+package com.mes.temperingrecord.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-07-17
+ */
+@RestController
+@RequestMapping("/temperingRecord")
+public class TemperingRecordController {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/entity/TemperingRecord.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/entity/TemperingRecord.java
new file mode 100644
index 0000000..0049269
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/entity/TemperingRecord.java
@@ -0,0 +1,77 @@
+package com.mes.temperingrecord.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-07-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class TemperingRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 宸ョ▼id
+     */
+    private String engineerId;
+    /**
+     * 閽㈠寲鐗堝浘
+     */
+    private Integer temperingLayoutId;
+
+    /**
+     * 鐜荤拑鏉愯川(鑶滅郴0.鐧界幓1.鍗曢摱2.鍙岄摱3涓夐摱 4.瓒呯櫧5.鐑弽灏�)
+     */
+    private Integer glassType;
+
+    /**
+     * 閽㈠寲绫诲瀷锛�1.鍏ㄩ挗:2.鍗婇挗锛�
+     */
+    private Integer temperingType;
+
+    /**
+     * 鍘氬害锛堝帤搴�*10)
+     */
+    private Double thickness;
+
+    /**
+     * 瑁呰浇鐜�
+     */
+    private Double loadingRate;
+
+    /**
+     * 闈㈢Н宸�
+     */
+    private Double areaDifference;
+
+    /**
+     * 鐢熶骇鑰楁椂
+     */
+    private String productionTime;
+
+    /**
+     * 鍔犵儹鑳借��
+     */
+    private String heatEnergy;
+
+    /**
+     * 鍐峰嵈鑳借��
+     */
+    private String coolEnergy;
+
+    /**
+     * 鏄惁瀹屾垚(plc鑾峰彇闈�1锛氬弬鏁颁笉瀛樺湪锛�2銆佸尮閰嶅畬鎴愶紱3銆佸尮閰嶈秴鏃讹級
+     */
+    private Integer state;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/TemperingRecordMapper.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/TemperingRecordMapper.java
new file mode 100644
index 0000000..d12a20a
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/TemperingRecordMapper.java
@@ -0,0 +1,16 @@
+package com.mes.temperingrecord.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.temperingrecord.entity.TemperingRecord;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-07-17
+ */
+public interface TemperingRecordMapper extends BaseMapper<TemperingRecord> {
+
+}
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.xml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/xml/TemperingRecordMapper.xml
similarity index 67%
rename from hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.xml
rename to hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/xml/TemperingRecordMapper.xml
index 719ef59..73d8f85 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.xml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/mapper/xml/TemperingRecordMapper.xml
@@ -1,5 +1,5 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.mes.shelfrack.mapper.ShelfRackMapper">
-
-</mapper>
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.tempering_record.mapper.TemperingRecordMapper">
+
+</mapper>
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/TemperingRecordService.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/TemperingRecordService.java
new file mode 100644
index 0000000..daeb9a4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/TemperingRecordService.java
@@ -0,0 +1,16 @@
+package com.mes.temperingrecord.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.temperingrecord.entity.TemperingRecord;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-07-17
+ */
+public interface TemperingRecordService extends IService<TemperingRecord> {
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/impl/TemperingRecordServiceImpl.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/impl/TemperingRecordServiceImpl.java
new file mode 100644
index 0000000..ea39a21
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/java/com/mes/temperingrecord/service/impl/TemperingRecordServiceImpl.java
@@ -0,0 +1,20 @@
+package com.mes.temperingrecord.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.temperingrecord.entity.TemperingRecord;
+import com.mes.temperingrecord.mapper.TemperingRecordMapper;
+import com.mes.temperingrecord.service.TemperingRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author zhoush
+ * @since 2024-07-17
+ */
+@Service
+public class TemperingRecordServiceImpl extends ServiceImpl<TemperingRecordMapper, TemperingRecord> implements TemperingRecordService {
+
+}
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml
index 34f72c9..2a02763 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-cz.yml
@@ -10,7 +10,7 @@
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
         salve_hangzhoumes:
-          url: jdbc:sqlserver://192.168.20.24:1433;databasename=hangzhoumes
+          url: jdbc:sqlserver://192.168.10.2:1433;databasename=hangzhoumes
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
index 18d4c7e..ae0d119 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-dev.yml
@@ -4,8 +4,18 @@
       primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
+#        hangzhoumes:
+#          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+#          username: root
+#          password: beibo.123/
+#          driver-class-name: com.mysql.cj.jdbc.Driver
+#        salve_hangzhoumes:
+#          url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes
+#          username: sa
+#          password: beibo.123/
+#          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
         hangzhoumes:
-          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+          url: jdbc:mysql:127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
@@ -15,12 +25,12 @@
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
         pp:
-          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
+          url: jdbc:mysql://127.0.0.1:3306/pp?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
         sd:
-          url: jdbc:mysql://10.153.19.150:3306/sd?serverTimezone=GMT%2b8
+          url: jdbc:mysql://127.0.0.1:3306/sd?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
index 3fc6fbb..697a608 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/application-prod.yml
@@ -1,7 +1,7 @@
 spring:
   datasource:
     dynamic:
-      primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
+      primary: salve_hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
         hangzhoumes:
@@ -28,6 +28,8 @@
     nacos:
       discovery:
         server-addr: 10.153.19.150:8848
+  application:
+        name: temperingGlass
   redis:
     database: 0
     host: 10.153.19.150
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/json/PlcTemperingGlass.json b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/json/PlcTemperingGlass.json
new file mode 100644
index 0000000..3abe9a6
--- /dev/null
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/main/resources/json/PlcTemperingGlass.json
@@ -0,0 +1,132 @@
+{
+    "plcAddressBegin": "DB88.0",
+    "plcAddressLenght": "58",
+    "dataType": "word",
+    "parameteInfor": [
+        {
+            "codeId": "confirmationWord",
+            "addressIndex": "0",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperingLayoutId",
+            "addressIndex": "2",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "filmsid",
+            "addressIndex": "4",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperingType",
+            "addressIndex": "6",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "thickness",
+            "addressIndex": "8",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "loadingRate",
+            "addressIndex": "10",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "areaDifference",
+            "addressIndex": "12",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "state",
+            "addressIndex": "22",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "deviceState",
+            "addressIndex": "24",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "resultState",
+            "addressIndex": "26",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "loadSpeed",
+            "addressIndex": "28",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "downSpeed",
+            "addressIndex": "30",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "load1",
+            "addressIndex": "32",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "heat1",
+            "addressIndex": "34",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "heat2",
+            "addressIndex": "36",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "cool1",
+            "addressIndex": "38",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "cool2",
+            "addressIndex": "40",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "downId",
+            "addressIndex": "42",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "productionTime",
+            "addressIndex": "44",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "heatEnergy",
+            "addressIndex": "46",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "coolEnergy",
+            "addressIndex": "48",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperatureUp1",
+            "addressIndex": "50",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperatureDown1",
+            "addressIndex": "52",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperatureUp2",
+            "addressIndex": "54",
+            "addressLenght": "2"
+        },
+        {
+            "codeId": "temperatureDown2",
+            "addressIndex": "56",
+            "addressLenght": "2"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java b/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java
index d6edffc..c567a90 100644
--- a/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java
+++ b/hangzhoumesParent/moduleService/TemperingGlassModule/src/test/java/com/mes/TemperingApplicationTest.java
@@ -1,7 +1,7 @@
 package com.mes;
 
 import com.mes.temperingglass.entity.TemperingGlassInfo;
-import com.mes.temperingglass.service.TemperingAgoService;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -23,13 +23,21 @@
 public class TemperingApplicationTest {
 
     @Autowired
-    private TemperingAgoService temperingAgoService;
+    private TemperingGlassInfoService temperingAgoService;
 
 
     @Test
     public void testFindPa() {
-        List<TemperingGlassInfo> glass = temperingAgoService.selectIntoGlass(12);
-        log.info("杩涚倝涓殑鐜荤拑锛歿}", Arrays.asList(glass));
+        List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId();
+        if(!layoutId.isEmpty()) {
+            List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0));
+            log.info("宸插嚭涓殑鐜荤拑锛歿}", Arrays.asList(intoGlass));
+            //杩涚倝涓殑绗簩涓増鍥�
+            if (layoutId.size() > 1) {
+                List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1));
+                log.info("宸插嚭涓殑鐜荤拑锛歿}", Arrays.asList(intoGlass2));
+            }
+        }
     }
     @Test
     public void testFindPa2() {
@@ -45,16 +53,6 @@
     @Test
     public void testFindPa4() {
         List<TemperingGlassInfo> glass = temperingAgoService.selectOverGlass();
-        log.info("绛夊緟涓殑鐜荤拑锛歿}", Arrays.asList(glass));
-    }
-    @Test
-    public void testFindPa5() {
-        List<TemperingGlassInfo> layoutId = temperingAgoService.selectLayoutId();
-        //杩涚倝涓殑鐜荤拑
-        log.info("鐗堝浘id锛歿}", Arrays.asList(layoutId.get(0).getTemperingLayoutId()));
-        List<TemperingGlassInfo> intoGlass = temperingAgoService.selectIntoGlass(layoutId.get(0).getTemperingLayoutId());
-        log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass));
-        List<TemperingGlassInfo> intoGlass2 = temperingAgoService.selectIntoGlass(layoutId.get(1).getTemperingLayoutId());
-        log.info("鐜荤拑鐗堝浘id锛歿}", Arrays.asList(intoGlass2));
+        log.info("閽㈠寲鍚庣殑鐜荤拑锛歿}", Arrays.asList(glass));
     }
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
index 327b48e..50991e4 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/mapper/DownStorageCageDetailsMapper.java
@@ -2,7 +2,6 @@
 
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.downstorage.entity.DownStorageCageDetails;
-import org.apache.ibatis.annotations.Mapper;
 
 /**
  * <p>
@@ -12,7 +11,7 @@
  * @author zhoush
  * @since 2024-03-27
  */
-@Mapper
+
 public interface DownStorageCageDetailsMapper extends MPJBaseMapper<DownStorageCageDetails> {
 
     DownStorageCageDetails getGlassInfoMaxCount();
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
index 504a70d..18e1259 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downstorage/service/impl/DownStorageCageServiceImpl.java
@@ -95,6 +95,7 @@
                                 .eq(DownStorageCageDetails::getSlot, DownStorageCage::getSlot)
                                 .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN))
                         .isNull(DownStorageCageDetails::getSlot)
+                        .eq(DownStorageCage::getEnableState, Const.SLOT_ON)
                         .last("order by abs(t.slot - " + currentSlot + ")  asc limit 2")
         );
         if (flag && CollectionUtil.isNotEmpty(emptyList)) {
@@ -151,11 +152,20 @@
     @Override
     public boolean updateDownStorageCage(DownStorageCage downStorageCage) {
         DownStorageCage downItem = baseMapper.selectById(downStorageCage.getId());
-        downItem.setEnableState(downStorageCage.getEnableState());
-        baseMapper.updateById(downItem);
-        return true;
+        if (downItem != null) {
+            downItem.setEnableState(downStorageCage.getEnableState());
+            int rowsAffected = baseMapper.updateById(downItem);
+            if (rowsAffected > 0) {
+                return true;
+            } else {
+                return false;
+            }
+        } else {
+            return false;
+        }
     }
 
+
     /**
      * 淇敼鐞嗙墖绗间俊鎭� 鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑 銆愭坊鍔�/鍒犻櫎/鏇存崲銆�
      *
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java
index 75bcc83..2c548c5 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationMapper.java
@@ -2,14 +2,9 @@
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.downworkstation.entity.DownWorkstation;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
-
-import java.util.List;
 
 /**
  * <p>
@@ -19,7 +14,7 @@
  * @author zhoush
  * @since 2024-03-27
  */
-@Mapper
+
 
 @Repository
 @InterceptorIgnore(tenantLine = "true")
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java
index b9b2df0..0098390 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/mapper/DownWorkstationTaskMapper.java
@@ -4,7 +4,6 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.downworkstation.entity.DownWorkstation;
 import com.mes.downworkstation.entity.DownWorkstationTask;
-import org.mapstruct.Mapper;
 
 import java.util.List;
 
@@ -18,7 +17,7 @@
  */
 
 @DS("salve_hangzhoumes")
-@Mapper
+
 public interface DownWorkstationTaskMapper extends BaseMapper<DownWorkstationTask> {
 
     List<DownWorkstationTask> selectList();
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
index 3d8482d..cbcb1ff 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/service/impl/DownWorkstationServiceImpl.java
@@ -10,7 +10,6 @@
 import com.mes.downglassinfo.mapper.DownGlassInfoMapper;
 import com.mes.downglassinfo.service.DownGlassInfoService;
 import com.mes.downglassinfo.service.DownGlassTaskService;
-import com.mes.downstorage.entity.DownStorageCage;
 import com.mes.downworkstation.entity.DownWorkstation;
 import com.mes.downworkstation.entity.DownWorkstationTask;
 import com.mes.downworkstation.entity.DownWorkstionAndDownGlassinfo;
@@ -35,7 +34,7 @@
 
     @Autowired
     private DownWorkstationMapper downWorkstationMapper;
-    @Autowired(required=false)
+    @Autowired(required = false)
     private DownWorkstationTaskMapper downWorkstationTaskMapper;
     @Autowired
     private DownGlassInfoService downGlassInfoService;
@@ -68,7 +67,7 @@
 
     //宸ヤ綅鏄剧ず
     @Override
-    public List<Map<String, Object>> getTotalGlassDimensionsByWorkstation(int start,int end) {
+    public List<Map<String, Object>> getTotalGlassDimensionsByWorkstation(int start, int end) {
         MPJQueryWrapper<DownWorkstation> queryWrapper = new MPJQueryWrapper<>();
         queryWrapper.select("t.workstation_id", "t.flow_card_id", "COALESCE(SUM(b.width), 0) AS totalwidth", "COALESCE(SUM(b.height), 0) AS totalheight")
                 .leftJoin("down_glass_info b on t.flow_card_id = b.flow_card_id")
@@ -77,8 +76,8 @@
 
         ;
 
-    List<DownWorkstionAndDownGlassinfo> workstationList = downWorkstationMapper.selectJoinList(DownWorkstionAndDownGlassinfo.class, queryWrapper);
-       // List<DownWorkstionAndDownGlassinfo> workstationList = null;
+        List<DownWorkstionAndDownGlassinfo> workstationList = downWorkstationMapper.selectJoinList(DownWorkstionAndDownGlassinfo.class, queryWrapper);
+        // List<DownWorkstionAndDownGlassinfo> workstationList = null;
         List<Map<String, Object>> result = new ArrayList<>();
         for (DownWorkstionAndDownGlassinfo downWorkstionAndDownGlassinfo : workstationList) {
             Map<String, Object> rack = new HashMap<>();
@@ -95,7 +94,7 @@
             List<DownGlassInfo> downGlassInfoList = downGlassInfoMapper.selectList(glassInfoQueryWrapper);
 
 
-         if (!downGlassInfoList.isEmpty()) {
+            if (!downGlassInfoList.isEmpty()) {
 
                 item.put("downGlassInfoList", downGlassInfoList);
 
@@ -104,7 +103,7 @@
             rack.put("item", item);
             result.add(rack);
         }
-        log.info("result"+(result));
+        log.info("result" + (result));
         return result; // 杩斿洖鏈�缁堢粨鏋�
     }
 
@@ -142,13 +141,13 @@
 
 
     @Override
-    public void updateFlowCardIdAndCount(String flowCardId,  int workstationId,int layer) {
-        int glassInfoCount = glassInfoService.getGlassInfoCountByFlowCardId(flowCardId,layer);
+    public void updateFlowCardIdAndCount(String flowCardId, int workstationId, int layer) {
+        int glassInfoCount = glassInfoService.getGlassInfoCountByFlowCardId(flowCardId, layer);
         QueryWrapper<Damage> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("process_id", flowCardId);
         queryWrapper.eq("technology_number", layer);
 
-       int otherNumber=damageservice.count(queryWrapper);
+        int otherNumber = damageservice.count(queryWrapper);
         UpdateWrapper<DownWorkstation> updateWrapper = new UpdateWrapper<>();
         updateWrapper.set("total_quantity", glassInfoCount)
                 .set("flow_card_id", flowCardId)
@@ -170,9 +169,6 @@
 
         baseMapper.update(new DownWorkstation(), updateWrapper);
     }
-
-
-
 
 
     @Override
@@ -197,10 +193,21 @@
 
     @Override
     public boolean updateDownWorkstationstate(DownWorkstation downWorkstation) {
+
         DownWorkstation downWork = baseMapper.selectById(downWorkstation.getId());
-        downWork.setEnableState(downWorkstation.getEnableState());
-        baseMapper.updateById(downWork);
-        return true;
+
+        if (downWork != null) {
+
+            downWork.setEnableState(downWorkstation.getEnableState());
+
+            baseMapper.updateById(downWork);
+
+            return true;
+        } else {
+
+            return false;
+        }
     }
 
+
 }
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
index 0dcc65a..13d4b6e 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -77,7 +77,7 @@
     private Integer minHeight;
 
 
-    @Scheduled(fixedDelay = 3000)
+    @Scheduled(fixedDelay = 300)
     public void plcHomeEdgTask() {
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
         String requestWord = plcParameterObject.getPlcParameter("requestWord").getValue();
@@ -161,7 +161,7 @@
                 if (CollectionUtils.isNotEmpty(list)) {
                     log.info("鏈夌┖鏋跺瓙,灏嗘祦绋嬪崱涓庢灦瀛愬ソ缁戝畾锛屾墽琛岃繘鐗囦换鍔� 缁撴潫");
                     //缁戝畾娴佺▼鍗�
-                    downWorkstationService.updateFlowCardIdAndCount(glassInfo.getFlowCardId(), glassInfo.getLayer(), list.get(0).getWorkstationId());
+                    downWorkstationService.updateFlowCardIdAndCount(glassInfo.getFlowCardId(), list.get(0).getWorkstationId(), glassInfo.getLayer());
                     checkFlag = Boolean.TRUE;
                 }
             }
@@ -241,9 +241,14 @@
             return Boolean.FALSE;
         }
         Boolean flag08 = "1".equals(out08Glassstate) ? Boolean.TRUE : Boolean.FALSE;
-        if (!generateTaskByShelf(glassStatus06, glassStatus11, flag08, glassStatus13, tempList, cageDetails, glassId)) {
-            return generateTaskByShelf(glassStatus06, glassStatus11, !flag08, glassStatus13, tempList, cageDetails, glassId);
+        if (!flag08) {
+            generateTaskByShelf(glassStatus06, glassStatus11, flag08, glassStatus13, tempList, cageDetails, glassId);
+        } else {
+            if (!generateTaskByShelf(glassStatus06, glassStatus11, flag08, glassStatus13, tempList, cageDetails, glassId)) {
+                return generateTaskByShelf(glassStatus06, glassStatus11, !flag08, glassStatus13, tempList, cageDetails, glassId);
+            }
         }
+
         return Boolean.TRUE;
     }
 
@@ -304,7 +309,7 @@
         if (CollectionUtils.isNotEmpty(workList)) {
             List<DownWorkstation> downWorkstationList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
                     .eq(DownWorkstation::getEnableState, Const.SLOT_ON).in(DownWorkstation::getWorkstationId, workList));
-            log.info("鏋跺瓙琚鐢紝鏃犳硶鍑虹墖钀芥灦");
+//            log.info("鏋跺瓙琚鐢紝鏃犳硶鍑虹墖钀芥灦");
             if (CollectionUtils.isEmpty(downWorkstationList)) {
                 log.info("绗煎瓙琚鐢紝鏃犳硶璧版満姊拌噦涓嬬墖");
                 //璧颁汉宸ヤ笅鐗�
@@ -312,18 +317,33 @@
                     list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
                 }
             } else {
+                //鑾峰彇鍙惤鏋剁殑鐨勬灦瀛愪俊鎭紙鍖呮嫭绌烘灦瀛愶級
                 List<DownWorkstation> workstationsIsNotBind = downWorkstationList.stream().filter(item -> null == (item.getFlowCardId())).collect(Collectors.toList());
-                Map<String, List<DownWorkstation>> listMap = downWorkstationList.stream().collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                //灏嗘灦瀛愮殑娴佺▼鍗″彿鍙婂眰鏁颁綔涓簁ey
                 if (CollectionUtils.isEmpty(workstationsIsNotBind)) {
                     log.info("涓嶅瓨鍦ㄦ湭缁戝畾娴佺▼鍗℃灦瀛�");
                     //绛涢�夊嚭瀵瑰簲鏋跺瓙宸茬粦瀹氭祦绋嬪崱鍙笅鐗囩殑鐜荤拑
+                    Map<String, List<DownWorkstation>> listMap = downWorkstationList.stream()
+                            .filter(item -> null != (item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
                     list = tempList.stream().filter(item -> listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
                 } else {
-                    log.info("瀛樺湪鏈粦瀹氭祦绋嬪崱鏋跺瓙锛岀洿鎺ヨ幏鍙栫鍐呮墍鏈夌幓鐠�");
+                    log.info("瀛樺湪鏈粦瀹氭祦绋嬪崱鏋跺瓙锛岀洿鎺ヨ幏鍙栫鍐呮墍鏈夌幓鐠�,涓旀湭缁戝畾鏋跺瓙鐨勭幓鐠冧俊鎭�");
+                    //鑾峰彇绂佺敤鏋跺瓙鐨勬祦绋嬪彿锛屽皢绗煎唴缁戝畾鏋跺瓙涓旀灦瀛愯绂佺敤鐨勬祦绋嬪崱淇℃伅
+                    List<Integer> workStationAll = Arrays.asList(1, 2, 3, 4, 5, 6);
+                    List<Integer> offWorkStationList = workStationAll.stream().filter(e -> !workList.contains(e)).collect(Collectors.toList());
+                    List<DownWorkstation> downWorkstationOffList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
+                            .and(i -> i.in(DownWorkstation::getWorkstationId, offWorkStationList).or().eq(DownWorkstation::getEnableState, Const.SLOT_OFF)));
+                    //鑾峰彇琚鐢ㄧ殑娴佺▼鍗′俊鎭�
+                    if (CollectionUtils.isEmpty(downWorkstationOffList)) {
+                        list = tempList;
+                    } else {
+                        Map<String, List<DownWorkstation>> listOffMap = downWorkstationOffList.stream().filter(item -> null != (item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                        list = tempList.stream().filter(item -> !listOffMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
+                    }
                     isEmptyShelf = Boolean.TRUE;
                     //todo:濡傛灉绂佺敤鏋跺瓙宸茬粦瀹氭祦绋嬪崱锛屽洜涓烘椂闂翠笉纭畾锛岀瀛愬唴鐨勭幓鐠冨彲閲嶆柊缁戝畾鏂版灦瀛�
 //                    list = tempList.stream().filter(item -> !listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
-                    list = tempList;
+
                 }
             }
         } else {
@@ -360,7 +380,8 @@
                 break loop;
             }
             //灏嗙瀛愬唴鐨勭幓鐠冭繘琛岃繃婊わ紝浠呰幏鍙栨棤娉曡惤鏋剁殑娴佺▼鍗$幓鐠�
-            List<DownStorageCageDetails> noDownLoadList = list.stream().filter(item -> !downGlassFlowList.contains(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
+            List<DownStorageCageDetails> noDownLoadList = list.stream().filter(item -> !downGlassFlowList.contains(item.getFlowCardId() + ":" + item.getLayer()))
+                    .collect(Collectors.toList());
             if (CollectionUtils.isNotEmpty(noDownLoadList)) {
                 //鏄惁鏈夌┖鏋跺瓙
 //                List<DownWorkstation> emptyShelfList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
@@ -451,14 +472,18 @@
         }
 
         Integer endCell = null;
-        if (!isBind) {
+        if (isBind) {
             //鑾峰彇绌烘灦瀛愪俊鎭紝灏嗙┖鏋跺瓙淇℃伅缁戝畾娴佺▼鍗�
             DownWorkstation emptyDownWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
                     .isNull(DownWorkstation::getFlowCardId).orderByDesc(DownWorkstation::getWorkstationId).last("limit 1"));
             if (null != emptyDownWorkstation) {
                 log.info("鑾峰彇鍒扮┖鏋跺瓙淇℃伅锛岀粦瀹氭祦绋嬪崱");
-                downWorkstationService.updateFlowCardIdAndCount(downStorageCageDetails.getFlowCardId(), downStorageCageDetails.getLayer(), emptyDownWorkstation.getWorkstationId());
+                downWorkstationService.updateFlowCardIdAndCount(downStorageCageDetails.getFlowCardId(), emptyDownWorkstation.getWorkstationId(), downStorageCageDetails.getLayer());
                 endCell = emptyDownWorkstation.getWorkstationId();
+                //灏嗕笅鐗囩幓鐠冨瓨鍏ョ瀛愯鎯呬俊鎭〃涓�
+                //灏嗕换鍔℃彃鍏ョ悊鐗囩璇︽儏琛�
+                downStorageCageDetails.setState(Const.GLASS_STATE_OUT);
+                downStorageCageDetailsService.save(downStorageCageDetails);
             } else {
                 log.info("娌℃湁绌烘灦瀛愪俊鎭紝鏃犳硶缁戝畾娴佺▼鍗�");
                 return Boolean.FALSE;
@@ -467,14 +492,15 @@
             DownWorkstation workstation = downWorkstationService.getOne(new LambdaUpdateWrapper<DownWorkstation>()
                     .eq(DownWorkstation::getFlowCardId, downStorageCageDetails.getFlowCardId()).eq(DownWorkstation::getLayer, downStorageCageDetails.getLayer()));
             endCell = workstation.getWorkstationId();
-        }
-        //鏇存柊璇︽儏琛ㄥ唴鐨勭姸鎬�
-        if (downStorageCageDetailsService.update(new LambdaUpdateWrapper<DownStorageCageDetails>()
-                .set(DownStorageCageDetails::getState, Const.GLASS_STATE_OUT).eq(DownStorageCageDetails::getGlassId, glassId))) {
-            log.info("鏇存柊璇︽儏琛ㄥ唴鐨勭姸鎬佹垚鍔�");
-        } else {
-            log.info("鏇存柊璇︽儏琛ㄥ唴鐨勭姸鎬佸け璐�");
-            return Boolean.FALSE;
+
+            if (downStorageCageDetailsService.update(new LambdaUpdateWrapper<DownStorageCageDetails>()
+                    .set(DownStorageCageDetails::getState, Const.GLASS_STATE_OUT).eq(DownStorageCageDetails::getGlassId, glassId))) {
+                log.info("鏇存柊璇︽儏琛ㄥ唴鐨勭姸鎬佹垚鍔�");
+//                return Boolean.TRUE;
+            } else {
+                log.info("鏇存柊璇︽儏琛ㄥ唴鐨勭姸鎬佸け璐�");
+                return Boolean.FALSE;
+            }
         }
         //鏇存柊钀芥灦鐜荤拑鏁伴噺
         if (endCell == 7) {
@@ -488,6 +514,8 @@
         //鐢熸垚浠诲姟淇℃伅
         DownGlassInfo downGlassInfo = new DownGlassInfo();
         BeanUtils.copyProperties(downStorageCageDetails, downGlassInfo);
+        //todo锛氳惤鏋剁墖搴�
+        downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
         downGlassInfoService.save(downGlassInfo);
         //鐢熸垚浠诲姟淇℃伅
         GlassInfo glassInfo = new GlassInfo();
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
index 1930840..32bca1a 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/resources/mapper/DownGlassInfoMapper.xml
@@ -38,7 +38,7 @@
         order by count desc limit 1
     </select>
     <select id="queryMaxSequence" resultType="java.lang.Integer">
-        SELECT max(sequence) + 1 as sequence
+        SELECT COALESCE(max(sequence) + 1, 0) as sequence
         FROM down_glass_info
         WHERE flow_card_id = #{flowCardId}
           AND layer = #{layer}
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
index 395722b..4029a6e 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/test/java/mes/UnloadGlassModuleApplicationTest.java
@@ -12,6 +12,7 @@
 import com.mes.downstorage.service.impl.DownStorageCageDetailsServiceImpl;
 import com.mes.downstorage.service.impl.DownStorageCageServiceImpl;
 
+import com.mes.downworkstation.entity.DownWorkstation;
 import com.mes.downworkstation.service.DownWorkstationService;
 import com.mes.downworkstation.service.impl.DownWorkstationServiceImpl;
 import com.mes.glassinfo.service.impl.GlassInfoServiceImpl;
@@ -190,6 +191,28 @@
         //downGlassTaskService.getUnloadingTaskState();
     }
 
+    @Test
+    public void updateDownWorkstationstate() {
+
+        DownWorkstation downWorkstation=  new DownWorkstation();
+
+        downWorkstation.setId(1);
+        downWorkstation.setEnableState(0);
+        downWorkstationServiceImpl.updateDownWorkstationstate(downWorkstation);
+    }
+
+
+    @Test
+    public void updateDownstate() {
+
+        DownStorageCage downStorageCage=  new DownStorageCage();
+
+        downStorageCage.setId(1);
+        downStorageCage.setEnableState(0);
+        downStorageCageServiceImpl.updateDownStorageCage(downStorageCage);
+    }
+
+
  /*   @Test
     public void updateDownStorageCage() {
 

--
Gitblit v1.8.0