From 00c4dfc5ac687c93e0b7abafc33abb693b38edd6 Mon Sep 17 00:00:00 2001
From: 严智鑫 <test>
Date: 星期一, 05 八月 2024 09:14:33 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 UI-Project/src/views/Returns/returns.vue                                                                                                     |  177 ++++++--
 UI-Project/src/views/Identify/identify.vue                                                                                                   |   99 ++--
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java                                      |  139 +++---
 UI-Project/src/views/Caching/cachingbefore.vue                                                                                               |   13 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java                                         |   21 +
 UI-Project/src/views/UnLoadGlass/loadmachinerack.vue                                                                                         |   10 
 UI-Project/src/views/Caching/cachingun.vue                                                                                                   |   14 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java                                 |    3 
 UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue                                                                                    |   15 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/controller/WorkAssignmentController.java                          |    5 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                   |   84 +++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java                                |    4 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml                                                          |   10 
 UI-Project/src/views/largescreen/largescreen.vue                                                                                             |   14 
 UI-Project/src/views/StockBasicData/stockBasicData.vue                                                                                       |   17 
 UI-Project/src/views/UnLoadGlass/Landingindication.vue                                                                                       |   15 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                               |   61 ++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                           |    1 
 UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue                                                                                    |   16 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java                   |    2 
 UI-Project/src/lang/zh.js                                                                                                                    |    1 
 UI-Project/src/views/ReportWork/reportWork.vue                                                                                               |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java                       |    6 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |   92 ++-
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java                                                 |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java                                           |   10 
 UI-Project/src/views/Slicecage/slicecage.vue                                                                                                 |   83 ++-
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java                      |   27 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java                                        |  182 +------
 UI-Project/src/views/GlassStorage/MaterialRackManagement.vue                                                                                 |   16 
 UI-Project/src/views/PurchaseReturn/purchaseStorage.vue                                                                                      |   14 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java                               |    9 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java                                              |   24 +
 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue                                                                                       |   10 
 34 files changed, 716 insertions(+), 496 deletions(-)

diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
index c04c3a4..d2c352b 100644
--- a/UI-Project/src/lang/zh.js
+++ b/UI-Project/src/lang/zh.js
@@ -219,6 +219,7 @@
         team:'鐝粍',
         basic:'璁惧',
         add:'纭淇濆瓨',
+        cancel:'鍙栨秷',
     },
     workOrder:{
         glassID:'鐜荤拑ID',
diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue
index 6c9510b..e4c67f3 100644
--- a/UI-Project/src/views/Caching/cachingbefore.vue
+++ b/UI-Project/src/views/Caching/cachingbefore.vue
@@ -7,7 +7,7 @@
 import { WebSocketHost ,host} from '@/utils/constants'
 
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
@@ -77,6 +77,7 @@
     console.error('鍙戠敓閿欒:', error);  
   }  
 };   
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -92,11 +93,13 @@
 };
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue
index 2ce7900..737c1de 100644
--- a/UI-Project/src/views/Caching/cachingun.vue
+++ b/UI-Project/src/views/Caching/cachingun.vue
@@ -60,7 +60,7 @@
 const adda = ref(false)
 import { WebSocketHost ,host} from '@/utils/constants'
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
@@ -205,6 +205,7 @@
 
 
 
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/downcache`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -219,13 +220,14 @@
           })); 
 
 };
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
index 6ca0948..c41ce56 100644
--- a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
+++ b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
@@ -330,7 +330,7 @@
 
 
 <script setup>
-import { ref, onMounted, onBeforeUnmount } from "vue"; // 瀵煎叆 Vue 3 鐨勬ā鍧�
+import { ref, onMounted, onBeforeUnmount,onUnmounted } from "vue"; // 瀵煎叆 Vue 3 鐨勬ā鍧�
 //import * as echarts from 'echarts';
 import { ElMessage, ElMessageBox } from "element-plus";
 // import {tableData} from '@/stores/tableData.js';
@@ -393,6 +393,7 @@
   row.enableState = 1 - row.enableState; // Toggle between 0 and 1
   // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
 };
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/storageTask`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -429,16 +430,15 @@
     // 鏇挎崲鍘熸潵鐨� createTime 瀛楁涓烘牸寮忓寲鍚庣殑鏃ユ湡鏃堕棿瀛楃涓�
     item.startTime = formattedDateTime;
   });
-
-
-
-
-
 };
-
 onMounted(() => {
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�");
   closeWebSocket();
diff --git a/UI-Project/src/views/Identify/identify.vue b/UI-Project/src/views/Identify/identify.vue
index 3274205..e7be5c2 100644
--- a/UI-Project/src/views/Identify/identify.vue
+++ b/UI-Project/src/views/Identify/identify.vue
@@ -1,10 +1,10 @@
 <template>  
     <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
-      <el-scrollbar height="600px">
+      <el-scrollbar height="600px" >
   <div id="app" style="margin-top: 20px;">  
-    <div  
-      :style="{ width: `${olWidth}px`, height: `${olHeight}px`,position: 'relative' }"  
-    > 
+    <!-- <div  
+      :style="{ width: `${olWidth}px`, height: `${olHeight}px`,position: 'relative',}"
+    >  -->
     <div  
       v-for="(rect, index) in adjustedRects"  
       :key="rect.glass_id"  
@@ -34,14 +34,14 @@
           {{ $t('order.Takeaway') }}</el-button>
   </el-dialog> 
    </div>
-  </div>  
+  <!-- </div>   -->
   </el-scrollbar>
   </el-card>
 </template>  
 <script setup lang="ts">  
 import { Delete, Upload } from '@element-plus/icons-vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
-import { ref, onMounted, onBeforeUnmount } from 'vue';  
+import { ref, onMounted, onBeforeUnmount,onUnmounted } from 'vue';  
 import request from "@/utils/request"
 import { WebSocketHost ,host} from '@/utils/constants'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
@@ -64,42 +64,42 @@
   currentGlassId.value = glassId;  
   blind.value = true;  
 }  
-onMounted(async () => {  
-  try {  
-    const response = await request.post('/cacheGlass/taskCache/currentCutTerritory'); // 鏇挎崲涓轰綘鐨凙PI绔偣  
-    if (response.code === 200) {  
-      // const process_id = response.data[0].process_id
-      const rawRects = response.data; // 璁剧疆鐭╁舰鏁版嵁  
-      console.log(response.data);
-      const { olWidth: newolWidth, olHeight: newolHeight, process_id: newprocess_id ,glass_id:newglass_id } = response.data; // 鑾峰彇灏哄  
-      olWidth.value = newolWidth; // 璁剧疆瀹瑰櫒瀹藉害  
-      olHeight.value = newolHeight; // 璁剧疆瀹瑰櫒楂樺害  
-      process_id.value = newprocess_id;  
-      glass_id.value = newglass_id;
+// onMounted(async () => {  
+//   try {  
+//     const response = await request.post('/cacheGlass/taskCache/currentCutTerritory'); // 鏇挎崲涓轰綘鐨凙PI绔偣  
+//     if (response.code === 200) {  
+//       // const process_id = response.data[0].process_id
+//       const rawRects = response.data; // 璁剧疆鐭╁舰鏁版嵁  
+//       console.log(response.data);
+//       const { olWidth: newolWidth, olHeight: newolHeight, process_id: newprocess_id ,glass_id:newglass_id } = response.data; // 鑾峰彇灏哄  
+//       olWidth.value = newolWidth; // 璁剧疆瀹瑰櫒瀹藉害  
+//       olHeight.value = newolHeight; // 璁剧疆瀹瑰櫒楂樺害  
+//       process_id.value = newprocess_id;  
+//       glass_id.value = newglass_id;
 
-      adjustedRects.value = rawRects.map(rect => ({  
-        ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        x_axis: (rect.x_axis*100) * 0.003, // 灏唜鍊奸櫎浠�3  
-        y_axis: (rect.y_axis*100) * 0.003,
-        width: (rect.width*100) * 0.002 ,
-        widtha: rect.width ,
-        heighta: rect.height ,
-        height:( rect.height*100) * 0.002 ,
-        glass_state: rect.glass_state
-      }));  
-      console.log(adjustedRects.value);
+//       adjustedRects.value = rawRects.map(rect => ({  
+//         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
+//         x_axis: (rect.x_axis*100) * 0.003, // 灏唜鍊奸櫎浠�3  
+//         y_axis: (rect.y_axis*100) * 0.003,
+//         width: (rect.width*100) * 0.002 ,
+//         widtha: rect.width ,
+//         heighta: rect.height ,
+//         height:( rect.height*100) * 0.002 ,
+//         glass_state: rect.glass_state
+//       }));  
+//       console.log(adjustedRects.value);
       
 
-      //   console.log( (rect.width*100) / 300 );
-    } else {  
-      // console.error('Failed to fetch rectangles from API.');  
-      console.error('Failed to fetch rects from API.'); 
-    }  
-  } catch (error) {  
-    // console.error('Error fetching rectangles :', error);
-    console.error('Error fetching rects :', error);  
-  }  
-}); 
+//       //   console.log( (rect.width*100) / 300 );
+//     } else {  
+//       // console.error('Failed to fetch rectangles from API.');  
+//       console.error('Failed to fetch rects from API.'); 
+//     }  
+//   } catch (error) {  
+//     // console.error('Error fetching rectangles :', error);
+//     console.error('Error fetching rects :', error);  
+//   }  
+// }); 
 // 鐮存崯
 const handleDamage = async () => {
   try  {
@@ -181,12 +181,14 @@
     }  
   });  
 }
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
 const handleMessage = (data) => {
   // adjustedRects.value = data.currentCutTerritory[0]
   adjustedRects.value = data.currentCutTerritory[0].map(rect => ({  
-        ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        x_axis: (rect.x_axis*100) * 0.003, // 灏唜鍊奸櫎浠�3  
+        ...rect,
+        x_axis: 1360 -(rect.x_axis + rect.width) * 0.37,
+        // x_axis: (rect.x_axis*100) * 0.003,
         y_axis: (rect.y_axis*100) * 0.003,
         width: (rect.width*100) * 0.002 ,
         widtha: rect.width ,
@@ -194,18 +196,15 @@
         height:( rect.height*100) * 0.002 ,
         glass_state: rect.glass_state
       }));  
- // console.log("鏇存柊鍚庢暟鎹�", tableData);
-
 };
-
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
-
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
index 3ab4e62..f0b25de 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -3,7 +3,7 @@
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
 import request from "@/utils/request"
-import { ref, onMounted, onBeforeUnmount } from 'vue';  
+import { ref, onMounted, onBeforeUnmount,onUnmounted } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
@@ -22,6 +22,7 @@
 const adjustedRectsb = ref([]);
 const currentGlassId = ref(null);
 const currenttemperingFeedSequence = ref(null);
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
 const handleMessage = (data) => {
 // 杩涚倝涓�
@@ -205,8 +206,13 @@
       }
 };
 onMounted(() => {
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 function updateRectColors() {  
   adjustedRectsa.value.forEach(rect => {  
     if (rect.glassId === glassId) {  
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
index 8bd571d..5164c6a 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
@@ -5,7 +5,7 @@
 import { ElMessage, ElMessageBox } from 'element-plus'
 import request from "@/utils/request"
 
-import { ref, onMounted, onBeforeUnmount } from 'vue';  
+import { ref, onMounted, onBeforeUnmount,onUnmounted } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 const adjustedRects = ref([]);
@@ -29,7 +29,7 @@
     }
   }
 }
-
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`; 
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -117,11 +117,13 @@
   }
 }
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/ReportWork/reportWork.vue b/UI-Project/src/views/ReportWork/reportWork.vue
index d1bfcfe..67b04ab 100644
--- a/UI-Project/src/views/ReportWork/reportWork.vue
+++ b/UI-Project/src/views/ReportWork/reportWork.vue
@@ -224,6 +224,7 @@
   inputValuesb[rowId] = value;  
 };
 fetchTableData();  
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`;
 const handleMessage = (data) => {
   // adjustedRects.value = data.device[0].map(rect => ({  
@@ -233,7 +234,7 @@
   //       thisProcess: rect.thisProcess,
   //     })); 
 };
-let socket;
+// let socket;
 onMounted(() => {
   socket = new WebSocket(socketUrl);
   socket.onmessage = (event) => {
@@ -243,19 +244,18 @@
   };
   // };  
 });
-
-
-
-
 onUnmounted(() => {
   socket.close();
 });
-
 onMounted(() => {
-  // fetchFlowCardId();
   fetchTableData();
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue
index 3c14673..bcbbd2e 100644
--- a/UI-Project/src/views/Returns/returns.vue
+++ b/UI-Project/src/views/Returns/returns.vue
@@ -17,6 +17,8 @@
 const flakea = ref(false)
 const flakeb = ref(false)
 const flakec = ref(false)
+const dialoglea = ref(false)
+const tableDatax = ref([])
 const user = ref('');
 const projectNo = ref('');
 const workstationId = ref('');
@@ -26,6 +28,8 @@
 const filmsId = ref('');
 const patternThickness = ref('');
 const number = ref('');
+const canSelectProject = ref(true); // 鍋囪寮�濮嬫椂鍙互閫夋嫨椤圭洰  
+const canStartLoading = ref(false);
 import { WebSocketHost ,host} from '@/utils/constants'
 import request from "@/utils/request"
 const ida = ref(null); 
@@ -89,13 +93,50 @@
     // ElMessage.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触锛岃閲嶈瘯');
   }
 };
-onMounted(() => {  
+const handlezhiban = () => {
+  dialoglea.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+  fetchFlowCardId(); 
+};
+// 鍊肩彮淇℃伅
+const fetchFlowCardId = async () => {
+  try  {
+    const response = await request.post('/loadGlass/work_assignment/selectWorkAssignment',{
+      line: 2001,
+      workingProcedure : '鍐峰姞宸�'
+    })
+    if (response.code == 200) {
+      ElMessage.success(response.message);
+      tableDatax.value = response.data;
+      console.log(tableDatax.value);
+      console
+    } else {
+      ElMessage.error(response.message);
+    }
+}
+catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
+const handleConfirmb = async () => {
+  const response = await request.post("/loadGlass/work_assignment/updateWorkAssignment", tableDatax.value)
+  if (response.code === 200) {
+    ElMessage.success(response.message);
+    dialoglea.value = false;
+  } else {
+    ElMessage.error(response.message);
+  }
+};
+onMounted(() => {
   list('');  
   fetchOptions('');
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-onMounted(() => {  
-}); 
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 const list = async () => {  
   try {  
     const response = await request.get('/loadGlass/LoadGlass/list');  
@@ -152,16 +193,34 @@
 const titleSelectJsona = ref({
   processTypea: [],
 })
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� 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]
   }
+  if(data.engineering ){
+    if ( Array.isArray(data.engineering) && data.engineering.length !== 0) {  
+    canSelectProject.value = false;
+    canStartLoading.value = true;
+  }else{
+      canSelectProject.value = true;
+      canStartLoading.value = false;
+  }
+}
+if (data.InkageStatus) {
+if(data.InkageStatus!=null){
+      const status = data.InkageStatus[0]; 
+      cuttingMachine.value = status; 
+            upstatus.value = status === '1' ? t('basicData.machine') : t('basicData.machineaa');
+      cuttingMachineStatusColor.value = status === '1' ? 'green' : '#911005';  
+      inKageWord.value = status === '1' ? 0 : 1;  
+}
+}
 };
 const requestData = {  
   state: 100  
@@ -575,47 +634,46 @@
     ElMessage.error(t('basicData.glassnull'));   
   }  
 };  
-const wsUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
-const ws = new WebSocket(wsUrl);  
-ws.onopen = () => {  
-  console.log('WebSocket杩炴帴宸叉墦寮�');  
-};  
+// 涓婄墖鏈鸿仈鏈虹姸鎬�
+// const wsUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
+// const ws = new WebSocket(wsUrl);  
+// ws.onopen = () => {  
+//   console.log('WebSocket杩炴帴宸叉墦寮�');  
+// };  
   
-// 鐩戝惉WebSocket鐨勯敊璇簨浠�  
-ws.onerror = (error) => {  
-  console.error('WebSocket鍙戠敓閿欒:', error);  
-};  
+// // 鐩戝惉WebSocket鐨勯敊璇簨浠�  
+// ws.onerror = (error) => {  
+//   console.error('WebSocket鍙戠敓閿欒:', error);  
+// };  
   
-// 鐩戝惉WebSocket鐨勫叧闂簨浠�  
-ws.onclose = (event) => {  
-  if (event.wasClean) {  
-    console.log('WebSocket杩炴帴宸叉甯稿叧闂�');  
-  } else {  
-    console.error('WebSocket杩炴帴寮傚父鍏抽棴');  
-  }  
-};  
-// 鐩戝惉WebSocket鐨勬秷鎭簨浠�  
-ws.onmessage = (event) => {  
-  try {  
-    
-    const data = JSON.parse(event.data.replace('<END>', '')); // 瑙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);  
-    }  
-  } catch (error) {  
-    // console.error('瑙f瀽WebSocket娑堟伅鏃跺彂鐢熼敊璇�', error);  
-  }  
-};  
+// // 鐩戝惉WebSocket鐨勫叧闂簨浠�  
+// ws.onclose = (event) => {  
+//   if (event.wasClean) {  
+//     console.log('WebSocket杩炴帴宸叉甯稿叧闂�');  
+//   } else {  
+//     console.error('WebSocket杩炴帴寮傚父鍏抽棴');  
+//   }  
+// };  
+// // 鐩戝惉WebSocket鐨勬秷鎭簨浠�  
+// ws.onmessage = (event) => {  
+//   try {   
+//     const data = JSON.parse(event.data.replace('<END>', '')); // 瑙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);  
+//     }  
+//   } catch (error) {  
+//     // console.error('瑙f瀽WebSocket娑堟伅鏃跺彂鐢熼敊璇�', error);  
+//   }  
+// };  
 const confirmCutting = async () => {  
   try {  
     const response = await request.post('/loadGlass/LoadGlass/updateMesInkageLoad', 
@@ -651,9 +709,10 @@
     <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;" >{{ $t('basicData.change') }}</el-button>
    
   </div>
-    <el-button style="margin-top: 5px;margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">{{ $t('basicData.selectproject') }}</el-button>
-    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
+    <el-button :disabled="!canSelectProject" style="margin-top: 5px;margin-left: 15px;"  type="primary" @click="dialogFormVisible = true">{{ $t('basicData.selectproject') }}</el-button>
+    <el-button :style="{ backgroundColor: canStartLoading ? 'green' : 'initial',color: canStartLoading ? 'white' : 'black', }" style="margin-top: 5px;margin-left: 20px;"  @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
     <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
     <!-- <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="danger" @click="handleBindb">鍋滄浠诲姟</el-button> -->
     
     <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
@@ -715,6 +774,32 @@
       </div>
     </template>
   </el-dialog>
+  
+<el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')">
+    <el-table  ref="table" style="margin-top: 20px;height: 300px;"
+        :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/>
+          <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')" />
+          <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')">
+        <template #default="{ row }">  
+          <el-input v-model="row.teamsGroupsName" autocomplete="off" min-width="150"/>  
+        </template>  
+      </el-table-column>
+          <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')">
+            <template #default="{ row }">  
+          <el-input v-model="row.deviceName" autocomplete="off" min-width="150"/>  
+        </template>
+        </el-table-column>
+        </el-table>
+        <template #footer>
+      <div id="dialog-footer">
+        <el-button type="primary" @click="handleConfirm">
+          {{ $t('searchOrder.add') }}
+        </el-button>
+        <el-button @click="dialoglea = false">{{ $t('searchOrder.cancel') }}</el-button>
+      </div>
+    </template>
+</el-dialog>
   <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('basicData.whetherpause')">
     <template #footer>
       <div id="dialog-footer">
diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index f52ad85..4ed89ea 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -7,7 +7,7 @@
 const router = useRouter()
 import request from "@/utils/request"
 import { WebSocketHost ,host} from '@/utils/constants'
-import { ref, onMounted , onBeforeUnmount, reactive, computed } from "vue";
+import { ref, onMounted , onBeforeUnmount, reactive, computed,onUnmounted } from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { tr } from "element-plus/es/locale";
@@ -23,7 +23,7 @@
 const tableDatad = ref([])
 const tableDataf = ref([])
 const tableDatae = ref([])
-const tableDataxx = ref([])
+const tableDatax = ref([])
 const carPosition = ref([])
 const ganghua = ref('')
 const adjustedRects = ref([]);
@@ -39,6 +39,8 @@
 const adjustedRectsg = ref([]);
 const adjustedRectsh = ref([]);
 const currentRow = reactive({}); // 褰撳墠琛岀殑鏁版嵁 
+const inputValuesa = reactive({});
+
 const add = ref(false)
 const flowCardId = ref('');
 const gap = ref('');
@@ -180,10 +182,8 @@
     });
     setInterval(() => {  
     localStorage.clear(); // 娓呴櫎鎵�鏈塴ocalStorage鏁版嵁  
-    console.log(11111);
 }, 60000);
 //  function cleanUp() {
-//     console.log('鎵ц娓呯悊鎿嶄綔');  
 // }
 // // 鍋囪鎴戜滑姣�2鍒嗛挓鎵ц涓�娆℃竻鐞�  
 // setInterval(cleanUp, 1 * 60 * 1000);
@@ -232,10 +232,7 @@
 // 鏄惁绂佺敤
 const toggleEnableState = async (row) => {
   const newState = row.enableState === 1 ? 0 : 1;  
-  console.log(row.slot);
-  console.log(row.enableState);
   var url="/cacheVerticalGlass/bigStorageCage/updateStorageCageDisabled?slot="+row.slot + "&enableState=" + newState;
-      console.log(url);
       const response = await request.get(url) 
   if (response.code === 200) {
       ElMessage.success(response.message);
@@ -513,28 +510,36 @@
   }  
 }; 
 const handlezhiban = () => {
-  fetchFlowCardId(); 
   dialoglea.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+  fetchFlowCardId(); 
 };
 const fetchFlowCardId = async () => {
-  try {
-    // var url="/cacheVerticalGlass/work_assignment/selectWorkAssignment?line=" + 2001 + "&workingProcedure='鍐峰姞宸�'";
-    // const response = await request.post(url)
+  try  {
     const response = await request.post('/cacheVerticalGlass/work_assignment/selectWorkAssignment',{
       line: 2001,
       workingProcedure : '鍐峰姞宸�'
-    });
-    if (response.code === 200) {
-      ElMessage.error(response.message);
-      tableDataxx.value = response.data;
-      console.log(tableDataxx.value);
-      
-}
- else {
+    })
+    if (response.code == 200) {
+      ElMessage.success(response.message);
+      tableDatax.value = response.data;
+      console.log(tableDatax.value);
+      console
+    } else {
       ElMessage.error(response.message);
     }
-  } catch (error) {
+}
+catch (error) {
+    // 澶勭悊閿欒
     console.error(error);
+  }
+}
+const handleConfirm = async () => {
+  const response = await request.post("/cacheVerticalGlass/work_assignment/updateWorkAssignment", tableDatax.value)
+  if (response.code === 200) {
+    ElMessage.success(response.message);
+    dialoglea.value = false;
+  } else {
+    ElMessage.error(response.message);
   }
 };
 function handleRowClick(row) {  
@@ -561,11 +566,11 @@
     console.error(error);
   }
 }
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
-  console.log(data.temperingSwitch[0]);
   if(data.bigStorageCageDetailsOutTask!=null){
     tableDatac.value = data.bigStorageCageDetailsOutTask[0]
     adjusta.value = data.bigStorageCageDetailsOutTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined);
@@ -612,7 +617,6 @@
 }else{
   ganghua.value = ''
   }
-console.log(data.temperingSwitch[0]);
   if(data.bigStorageCageInfos!=null){
     window.localStorage.setItem('length', data.bigStorageCageInfos[0][1].length)
   let length = window.localStorage.getItem('length')
@@ -670,9 +674,14 @@
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
   // fetchFlowCardId();
-  initializeWebSocket(socketUrl, handleMessage);
- 
+  // initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 function getStatusType(enableState: number) {  
   switch (enableState) {  
     case 100:
@@ -724,7 +733,7 @@
   }  
 }
 onBeforeUnmount(() => {
-  console.log("鍏抽棴浜�")
+  // console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 </script>
@@ -1371,20 +1380,28 @@
         </el-table-column>
         </el-table>
 </el-dialog>
-<el-dialog v-model="dialoglea" top="5vh" width="85%" :title="$t('searchOrder.dutyinformation')">
-    <el-table  ref="table" style="margin-top: 20px;height: 400px;"
-        :data="tableDataxx" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')" min-width="150"/>
-          <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')" min-width="120" />
-          <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')" min-width="150" />
-          <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')" min-width="150" />
+<el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')">
+    <el-table  ref="table" style="margin-top: 20px;height: 300px;"
+        :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/>
+          <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')" />
+          <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')">
+        <template #default="{ row }">  
+          <el-input v-model="row.teamsGroupsName" autocomplete="off" min-width="150"/>  
+        </template>  
+      </el-table-column>
+          <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')">
+            <template #default="{ row }">  
+          <el-input v-model="row.deviceName" autocomplete="off" min-width="150"/>  
+        </template>
+        </el-table-column>
         </el-table>
         <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handleConfirm">
           {{ $t('searchOrder.add') }}
         </el-button>
-        <el-button @click="dialoglea = false">{{ $t('basicData.cancel') }}</el-button>
+        <el-button @click="dialoglea = false">{{ $t('searchOrder.cancel') }}</el-button>
       </div>
     </template>
 </el-dialog>
diff --git a/UI-Project/src/views/StockBasicData/stockBasicData.vue b/UI-Project/src/views/StockBasicData/stockBasicData.vue
index 8b0da31..5135e96 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicData.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -6,7 +6,7 @@
 const adda = ref(false)
 import { WebSocketHost ,host} from '@/utils/constants'
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
@@ -100,26 +100,26 @@
     console.error('鍙戠敓閿欒:', error);  
   }  
 };   
-
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
   tableData.value = data.EdgTasks1[0]
 };
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 </script>
-
 <template>
   <div>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
@@ -147,7 +147,6 @@
 </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{
diff --git a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
index 8775761..57e6567 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
@@ -6,7 +6,7 @@
 const adda = ref(false)
 import { WebSocketHost ,host} from '@/utils/constants'
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
@@ -100,21 +100,21 @@
     console.error('鍙戠敓閿欒:', error);  
   }  
 };   
-
-
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
   tableData.value = data.EdgTasks2[0]
 };
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindication.vue b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
index 36af612..06aa4d0 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindication.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -32,14 +32,14 @@
 </template>
 
 <script  setup>
-import { ref, watchEffect ,onMounted} from 'vue';
+import { ref, watchEffect ,onMounted,onUnmounted} from 'vue';
 
 import { useI18n } from 'vue-i18n'
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
 import Swal from 'sweetalert2'
 import request from "@/utils/request";
-import { initializeWebSocket } from '@/utils/WebSocketService';
+import { initializeWebSocket,closeWebSocket } 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: 'NG123456',downGlassInfoList:"" } },
@@ -116,6 +116,7 @@
     console.error(error);
   }
 };
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:8085/api/talk/unloadglass2`;
 //const socketUrl = `ws://${WebSocketHost}:88/api/unLoadGlass/api/talk/unloadglass2`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
@@ -146,13 +147,15 @@
   }
 });
 };
-
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
-
 onMounted(() => {
   fetchFlowCardId(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 const showCustomAlert = (downGlassInfoList) => {
   let tableContent = '<table border="1" style="border-collapse: collapse; width: 100%;">';
   tableContent += '<tr><th style="background-color: #f2f2f2;">鐜荤拑ID</th><th style="background-color: #f2f2f2;">鑶滅郴</th><th style="background-color: #f2f2f2;">鍘氬害</th><th style="background-color: #f2f2f2;">瀹藉害</th><th style="background-color: #f2f2f2;">楂樺害</th></tr>';
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
index c42fbe5..9d4fb7a 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -32,14 +32,14 @@
 </template>
 
 <script setup>
-import { ref, watchEffect ,onMounted} from 'vue';
+import { ref, watchEffect ,onMounted,onUnmounted} from 'vue';
 
 import { useI18n } from 'vue-i18n'
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
 import Swal from 'sweetalert2'
 import request from "@/utils/request";
-import { initializeWebSocket } from '@/utils/WebSocketService';
+import { initializeWebSocket,closeWebSocket } 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: 'NG123456' } },
@@ -115,6 +115,7 @@
   }
 };
 
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass3`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -143,13 +144,15 @@
   }
 });
 };
-
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
-
 onMounted(() => {
   fetchFlowCardId(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 const showCustomAlert = (downGlassInfoList) => {
   let tableContent = '<table border="1" style="border-collapse: collapse; width: 100%;">';
   tableContent += '<tr><th style="background-color: #f2f2f2;">鐜荤拑ID</th><th style="background-color: #f2f2f2;">鑶滅郴</th><th style="background-color: #f2f2f2;">鍘氬害</th><th style="background-color: #f2f2f2;">瀹藉害</th><th style="background-color: #f2f2f2;">楂樺害</th></tr>';
diff --git a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
index 581478d..c0fbde6 100644
--- a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
+++ b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,6 +1,6 @@
 <script setup>
 import {Search} from "@element-plus/icons-vue";
-import {reactive, onMounted, onBeforeUnmount} from "vue";
+import {reactive, onMounted, onBeforeUnmount,onUnmounted} from "vue";
 import {useRouter} from "vue-router"
 const router = useRouter()
 import { useI18n } from 'vue-i18n'
@@ -139,6 +139,7 @@
     ElMessage.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触锛岃閲嶈瘯');
   }
 };
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -150,8 +151,13 @@
 onMounted(() => {
   fetchFlowCardId();
   fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/largescreen/largescreen.vue b/UI-Project/src/views/largescreen/largescreen.vue
index 7c3603a..fb2ab1a 100644
--- a/UI-Project/src/views/largescreen/largescreen.vue
+++ b/UI-Project/src/views/largescreen/largescreen.vue
@@ -147,6 +147,7 @@
   return t('large.allstatus');
 }  
 }  
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`;
 const handleMessage = (data) => {
 tableData.value = data.awaitingRepairs[0]
@@ -159,7 +160,7 @@
 //       thisProcess: rect.thisProcess,
 //     })); 
 };
-let socket;
+// let socket;
 // 璁剧疆鍥捐〃 DOM 寮曠敤  
 function setChartDom(index, el) {  
 if (!chartRefs.value[index]) {  
@@ -232,13 +233,14 @@
 onUnmounted(() => {  
 socket.close();  
 });  
-
 onMounted(() => {
-// fetchFlowCardId();
-// fetchTableData(); // 鑾峰彇鏁版嵁
-initializeWebSocket(socketUrl, handleMessage);
-
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
 console.log("鍏抽棴浜�")
 closeWebSocket();
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 ea9bcb2..d096488 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
@@ -43,13 +43,9 @@
 
     @ApiOperation("鎶ュ伐")
     @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);
+    public Result submitDamage(@RequestBody List<Damage> damageList) {
+        damageService.submitDamage(damageList);
+        damageService.updateBatchById(damageList);
         return Result.build(200,"鎶ュ伐鎴愬姛",1);
     }
 
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 1fba706..1b323f9 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
@@ -19,7 +19,7 @@
 
     List<Damage> selectDamage(String startTime, String endTime, int type, int status, String workingProcedure);
 
-    void submitDamage(String startTime, String endTime, int type, int status, String workingProcedure);
+    void submitDamage(List<Damage> damageList);
 
     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 1e52a35..aae4a9a 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
@@ -1,15 +1,13 @@
 package com.mes.damage.service.impl;
 
-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.extension.service.impl.ServiceImpl;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.mapper.DamageMapper;
 import com.mes.damage.service.DamageService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.mapper.GlassInfoMapper;
-import com.mes.pp.entity.BasicDataProduce;
 import com.mes.pp.entity.ReportingWork;
 import com.mes.work_assignment.entity.WorkAssignment;
 import com.mes.work_assignment.mapper.WorkAssignmentMapper;
@@ -21,11 +19,12 @@
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
  * <p>
- *  鏈嶅姟瀹炵幇绫�
+ * 鏈嶅姟瀹炵幇绫�
  * </p>
  *
  * @author wu
@@ -43,17 +42,22 @@
      * 鏌ヨ鎶ュ伐淇℃伅
      */
     @Override
-    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){
-            damageSelectWrapper.eq(Damage::getType,type);
+    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) {
+            damageSelectWrapper.eq(Damage::getType, type);
         }
-        if (status!=0){
-            damageSelectWrapper.eq(Damage::getStatus,status);
+        if (status != 0) {
+            damageSelectWrapper.eq(Damage::getStatus, status);
         }
-        if(!"0".equals(workingProcedure)){
-            damageSelectWrapper.eq(Damage::getWorkingProcedure,workingProcedure);
+        if (!"0".equals(workingProcedure)) {
+            damageSelectWrapper.eq(Damage::getWorkingProcedure, workingProcedure);
+        }
+        List<Damage> damageList = baseMapper.selectList(damageSelectWrapper);
+
+        for (Damage damage : damageList) {
+            damage.setStatus(2);
         }
         return baseMapper.selectList(damageSelectWrapper);
     }
@@ -62,132 +66,23 @@
      * 鎻愪氦鎶ュ伐
      */
     @Override
-    public void submitDamage(String startTime, String endTime, int type, int status, String workingProcedures){
-        LambdaUpdateWrapper<Damage> damageUpdateWrapper=new LambdaUpdateWrapper<>();
-        LambdaQueryWrapper<Damage> damageLambdaQueryWrapper=new LambdaQueryWrapper<>()
-;       damageUpdateWrapper.between(Damage::getDamageTime,startTime,endTime);
-        damageLambdaQueryWrapper.between(Damage::getDamageTime,startTime,endTime);
-        if (type!=0){
-            damageUpdateWrapper.eq(Damage::getType,type);
-            damageLambdaQueryWrapper.eq(Damage::getType,type);
-        }
-        if (status!=0){
-            damageUpdateWrapper.eq(Damage::getStatus,status);
-            damageLambdaQueryWrapper.eq(Damage::getStatus,status);
-        }
-        if(!"0".equals(workingProcedures)){
-            damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedures);
-            damageLambdaQueryWrapper.eq(Damage::getWorkingProcedure,workingProcedures);
-        }
-//        Damage damage=new Damage();
-//        damage.setStatus(2);
-//        baseMapper.update(damage,damageUpdateWrapper);
-        List<Damage> damageList = baseMapper.selectList(damageLambdaQueryWrapper);
-        Map<String, Map<String, Map<String, Map<String, List<Damage>>>>> resultMap = damageList.stream()
-                .collect(Collectors.groupingBy(
-                        Damage::getProcessId,
-                        Collectors.groupingBy(
-                                Damage::getWorkingProcedure,
-                                Collectors.groupingBy(
-                                        Damage::getDeviceName,
-                                        Collectors.groupingBy(Damage::getTeamsGroupsName)
-                                )
-                        )
-                ));
-        // 閬嶅巻 resultMap
-        for (Map.Entry<String, Map<String, Map<String, Map<String, List<Damage>>>>> processEntry : resultMap.entrySet()) {
-            String processId = processEntry.getKey();
-            System.out.println("ProcessId: " + processId);
+    public void submitDamage(List<Damage> damageList) {
+        Map<String, List<Damage>> firstMap = damageList.stream().collect(Collectors.groupingBy(e -> e.getProcessId() + ":"
+                + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName()));
 
-            // 鑾峰彇绗簩灞傜殑 Map锛屾寜 workingProcedure 鍒嗙粍鐨勭粨鏋�
-            Map<String, Map<String, Map<String, List<Damage>>>> workingProcedureMap = processEntry.getValue();
+        for (Map.Entry<String, List<Damage>> entry : firstMap.entrySet()) {
+            String key = entry.getKey();
+            List<Damage> damages = entry.getValue();
 
-            // 閬嶅巻 workingProcedureMap
-            for (Map.Entry<String, Map<String, Map<String, List<Damage>>>> workingProcedureEntry : workingProcedureMap.entrySet()) {
-                String workingProcedure = workingProcedureEntry.getKey();
-                System.out.println("  WorkingProcedure: " + workingProcedure);
+            System.out.println("Key: " + key);
 
-                // 鑾峰彇绗笁灞傜殑 Map锛屾寜 deviceName 鍒嗙粍鐨勭粨鏋�
-                Map<String, Map<String, List<Damage>>> deviceNameMap = workingProcedureEntry.getValue();
+            Map<String, List<Damage>> secondMap = damageList.stream().collect(Collectors.groupingBy(e -> e.getProcessId() + ":"
+                    + e.getWorkingProcedure() + ":" + e.getDeviceName() + ":" + e.getTeamsGroupsName()));
 
-                // 閬嶅巻 deviceNameMap
-                for (Map.Entry<String, Map<String, List<Damage>>> deviceNameEntry : deviceNameMap.entrySet()) {
-                    String deviceName = deviceNameEntry.getKey();
-                    System.out.println("    DeviceName: " + deviceName);
+            for (Map.Entry<String, List<Damage>> entrys : secondMap.entrySet()) {
 
-                    // 鑾峰彇绗洓灞傜殑 Map锛屾寜 teamsGroupsName 鍒嗙粍鐨勭粨鏋�
-                    Map<String, List<Damage>> teamsGroupsNameMap = deviceNameEntry.getValue();
-
-                    // 閬嶅巻 teamsGroupsNameMap
-                    for (Map.Entry<String, List<Damage>> teamsGroupsNameEntry : teamsGroupsNameMap.entrySet()) {
-                        String teamsGroupsName = teamsGroupsNameEntry.getKey();
-                        System.out.println("      TeamsGroupsName: " + teamsGroupsName);
-
-                        // 鑾峰彇 Damage 鍒楄〃
-                        List<Damage> damageListForTeamsGroupsName = teamsGroupsNameEntry.getValue();
-
-                        // 浣跨敤 stream 瀵� damageListForTeamsGroupsName 杩涜鍐嶆鍒嗙粍
-                        Map<Integer, Map<Integer, Map<String, List<Damage>>>> groupedByOrderTechBreakage = damageListForTeamsGroupsName.stream()
-                                .collect(Collectors.groupingBy(
-                                        Damage::getOrderNumber,
-                                        Collectors.groupingBy(
-                                                Damage::getTechnologyNumber,
-                                                Collectors.groupingBy(
-                                                        Damage::getBreakageType,
-                                                        Collectors.toList()
-                                                )
-                                        )
-                                ));
-
-                        // 閬嶅巻 groupedByOrderTechBreakage
-                        for (Map.Entry<Integer, Map<Integer, Map<String, List<Damage>>>> orderEntry : groupedByOrderTechBreakage.entrySet()) {
-                            Integer orderNumber = orderEntry.getKey();
-                            System.out.println("        OrderNumber: " + orderNumber);
-
-                            // 鑾峰彇绗簩灞傜殑 Map锛屾寜 technologyNumber 鍒嗙粍鐨勭粨鏋�
-                            Map<Integer, Map<String, List<Damage>>> technologyNumberMap = orderEntry.getValue();
-
-                            // 閬嶅巻 technologyNumberMap
-                            for (Map.Entry<Integer, Map<String, List<Damage>>> technologyEntry : technologyNumberMap.entrySet()) {
-                                Integer technologyNumber = technologyEntry.getKey();
-                                System.out.println("          TechnologyNumber: " + technologyNumber);
-
-                                // 鑾峰彇绗笁灞傜殑 Map锛屾寜 breakageType 鍒嗙粍鐨勭粨鏋�
-                                Map<String, List<Damage>> breakageTypeMap = technologyEntry.getValue();
-
-                                // 閬嶅巻 breakageTypeMap
-                                for (Map.Entry<String, List<Damage>> breakageTypeEntry : breakageTypeMap.entrySet()) {
-                                    String breakageType = breakageTypeEntry.getKey();
-                                    System.out.println("            BreakageType: " + breakageType);
-
-                                    ReportingWork reportingWork=new ReportingWork();
-                                    reportingWork.setProcessId(processId);
-                                    reportingWork.setThisProcess(workingProcedure);
-                                    reportingWork.setDeviceName(deviceName);
-                                    reportingWork.setTeamsGroupsName(teamsGroupsName);
-                                    // 鑾峰彇 Damage 鍒楄〃
-                                    List<Damage> damageListForBreakageType = breakageTypeEntry.getValue();
-                                    int completedQuantity=0;
-                                    int breakageQuantity=0;
-                                    // 閬嶅巻 Damage 鍒楄〃
-                                    for (Damage damage : damageListForBreakageType) {
-                                        // 鎵撳嵃鎴栧鐞嗘瘡涓� Damage 瀵硅薄
-                                        System.out.println("              Damage: " + damage.toString());
-                                        if(damage.getType()==1){
-                                            completedQuantity+=1;
-                                        }else if(damage.getType()==2){
-                                            breakageQuantity+=1;
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
             }
         }
-
-
 
 
     }
@@ -196,20 +91,21 @@
      * 娣诲姞鎶ュ伐淇℃伅
      */
     @Override
-    public void insertDamage(Damage damage){
-        LambdaQueryWrapper<GlassInfo> glassInfoSelectWrapper=new LambdaQueryWrapper<>();
-        glassInfoSelectWrapper.eq(GlassInfo::getGlassId,damage.getGlassId());
-        GlassInfo glassInfo=glassInfoMapper.selectOne(glassInfoSelectWrapper);
+    public void insertDamage(Damage damage) {
+        LambdaQueryWrapper<GlassInfo> glassInfoSelectWrapper = new LambdaQueryWrapper<>();
+        glassInfoSelectWrapper.eq(GlassInfo::getGlassId, damage.getGlassId());
+        GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoSelectWrapper);
         BeanUtils.copyProperties(glassInfo, damage);
 
-        LambdaQueryWrapper<WorkAssignment> workAssignmentSelectWrapper=new LambdaQueryWrapper<>();
+        LambdaQueryWrapper<WorkAssignment> workAssignmentSelectWrapper = new LambdaQueryWrapper<>();
         workAssignmentSelectWrapper
-                .eq(WorkAssignment::getLine,damage.getLine())
-                .eq(WorkAssignment::getWorkProcesses,damage.getWorkingProcedure());
-        WorkAssignment workAssignment=workAssignmentMapper.selectOne(workAssignmentSelectWrapper);
-
-        damage.setTeamsGroupsName(workAssignment.getTeamsGroupsName());
-        damage.setDeviceName(workAssignment.getDeviceName());
+                .eq(WorkAssignment::getLine, damage.getLine())
+                .eq(WorkAssignment::getWorkProcesses, damage.getWorkingProcedure());
+        WorkAssignment workAssignment = workAssignmentMapper.selectOne(workAssignmentSelectWrapper);
+        if (workAssignment != null) {
+            damage.setTeamsGroupsName(workAssignment.getTeamsGroupsName());
+            damage.setDeviceName(workAssignment.getDeviceName());
+        }
         damage.setProcessId(glassInfo.getFlowCardId());
         damage.setOrderNumber(glassInfo.getGlassType());
         damage.setTechnologyNumber(glassInfo.getLayer());
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 582dafe..7cc83b8 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
@@ -10,6 +10,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -28,7 +29,9 @@
     private WorkAssignmentService workAssignmentService;
     @ApiOperation("鍊肩彮鏁版嵁鏌ヨ")
     @PostMapping("/selectWorkAssignment")
-    public Result selectWorkAssignment(int line,String workingProcedure) {
+    public Result selectWorkAssignment(@RequestBody Map map) {
+        String line=map.get("line").toString();
+        String workingProcedure=map.get("workingProcedure").toString();
         return Result.build(200,"鏌ヨ鎴愬姛",workAssignmentService.selectWorkAssignment(line,workingProcedure));
     }
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java
index 3571fe6..c4daba8 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/WorkAssignmentService.java
@@ -3,6 +3,8 @@
 import com.mes.work_assignment.entity.WorkAssignment;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * <p>
  *  鏈嶅姟绫�
@@ -13,5 +15,5 @@
  */
 public interface WorkAssignmentService extends IService<WorkAssignment> {
 
-    WorkAssignment selectWorkAssignment(int line, String workingProcedure);
+    List<WorkAssignment> selectWorkAssignment(String line, String workingProcedure);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java
index e80cce6..1bef12b 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/work_assignment/service/impl/WorkAssignmentServiceImpl.java
@@ -7,6 +7,8 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  *  鏈嶅姟瀹炵幇绫�
@@ -25,11 +27,11 @@
      * @return
      */
     @Override
-    public WorkAssignment selectWorkAssignment(int line, String workingProcedure){
+    public List<WorkAssignment> selectWorkAssignment(String line, String workingProcedure){
         LambdaQueryWrapper<WorkAssignment> workAssignmentSelectWrapper=new LambdaQueryWrapper<>();
         workAssignmentSelectWrapper
                 .eq(WorkAssignment::getLine,line)
                 .eq(WorkAssignment::getWorkProcesses,workingProcedure);
-        return baseMapper.selectOne(workAssignmentSelectWrapper);
+        return baseMapper.selectList(workAssignmentSelectWrapper);
     }
 }
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 770919e..0dd3ec0 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
@@ -21,6 +21,7 @@
 import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.taskcache.entity.TaskCache;
 import com.mes.taskcache.service.TaskCacheService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.tools.WebSocketServer;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -74,11 +75,17 @@
     @Value("${mes.max.secondLength}")
     private String secondLength;
 
-    @Value("${mes.min.firstLength}")
-    private String minFirstLength;
+    @Value("${mes.min.one.firstLength}")
+    private String minOneFirstLength;
 
-    @Value("${mes.min.secondLength}")
-    private String minSecondLength;
+    @Value("${mes.min.one.secondLength}")
+    private String minOneSecondLength;
+
+    @Value("${mes.min.two.firstLength}")
+    private String minTwoFirstLength;
+
+    @Value("${mes.min.two.secondLength}")
+    private String minTwoSecondLength;
 
     public static String engineerId="";
 
@@ -117,7 +124,7 @@
             inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
         } else if ("2".equals(taskRequestTypeValue)) {
             //09绌洪棽 锛�1      10绌洪棽 锛�2        閮界┖闂诧細3    鍏朵粬0
-            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛屽嚭鐗囦换鍔�");
             outTo(Integer.parseInt(out08Glassstate),
                     Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", 0);
         } else if ("3".equals(taskRequestTypeValue)) {
@@ -133,7 +140,23 @@
         Date endDate = new Date();
         log.info("鏈浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms", endDate, endDate.getTime() - startDate.getTime());
     }
-
+    @Scheduled(fixedDelay = 1000)
+    public void temperingIsRun(){
+        JSONObject jsonObject = new JSONObject();
+        //姝e湪杩涜鐨勪换鍔�
+        List<TaskCache>taskCaches=taskCacheService.selectTaskCacheIsRun();
+        jsonObject.append("taskCaches", taskCaches);
+        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");
+                }
+            }
+        }
+    }
     /**
      * 杩涚墖浠诲姟
      *
@@ -229,7 +252,7 @@
 //        2銆佸鏋滄病鏈夊巻鍙插嚭鐗囦换鍔�
 //        2.1銆佸嚭褰撳墠鐗堝浘id鏈�灏忕増搴忔渶灏忕殑鐜荤拑锛堥棶棰橈細涓ゆ潯绾块兘娌℃湁鍘嗗彶浠诲姟锛屽嚭鐗囨椂涓ゆ潯绾跨殑鐜荤拑灏哄鐩稿悓锛屾槸鍚︽壘灏哄涓嶅悓鐨勶級
         if ((out08Glassstate == 2 && out10Glassstate == 2) || (out08Glassstate == 0 && out10Glassstate == 0)) {
-            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖");
+            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", out08Glassstate, out10Glassstate);
             return Boolean.FALSE;
         }
         log.info("0銆佸嚭鐗囦换鍔″嚭鐨勭姸鎬�:A09:銆恵}銆�;A10:銆恵}銆�)", out08Glassstate, out10Glassstate);
@@ -265,26 +288,27 @@
                     if (endcell == Const.A10_OUT_TARGET_POSITION) {
                         wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                 "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                                "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                                + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
                     } else {
                         wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                 "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                                "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
                     }
                     wrapper.last("order by count(t.glass_id) desc  limit 2");
                     List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
                     if (CollectionUtil.isEmpty(list)) {
                         MPJQueryWrapper<GlassInfo> queryWrapper = new MPJQueryWrapper<GlassInfo>()
                                 .selectAll(GlassInfo.class).eq("t.glass_id", glassId);
-//                                .inSql("t.engineer_id", "select engineer_id from engineering where state = 1");
                         if (endcell == Const.A10_OUT_TARGET_POSITION) {
-                            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+                            queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                     "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                    "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
                         } else {
-                            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+                            queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                     "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
                         }
                         GlassInfo one = glassInfoService.getOne(queryWrapper);
                         if (one != null) {
@@ -506,11 +530,12 @@
         if (endcell == Const.A10_OUT_TARGET_POSITION) {
             wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                     "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                    "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
         } else {
             wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                     "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
         }
         wrapper.last("order by count(t.glass_id) desc  limit 2");
         List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
@@ -548,7 +573,7 @@
                 return queryMinGlass(firstSize.getWidth(), firstSize.getHeight(), glassId);
             }
             EdgStorageCageDetails outGlassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                    .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()));
+                    .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()).last("limit 1"));
             log.info("{}绾挎湁鍑虹墖浠诲姟淇℃伅,浠诲姟淇℃伅涓簕}锛岀幓鐠冧俊鎭负{}", endcell, taskCache, outGlassInfo);
             if (outGlassInfo.getWidth() == firstWidth && outGlassInfo.getHeight() == firstHeight) {
                 log.info("鏁伴噺鏈�澶氱殑瀹絳}楂榹}鍜寋}绾夸换鍔$殑瀹絳}楂榹}鐩稿悓锛屽嚭鏁伴噺鎺掔浜岀殑鐜荤拑锛屽{}楂榹}",
@@ -643,6 +668,8 @@
         edgGlassTaskInfo.setStatus(Const.EDG_GLASS_BEFORE);
         edgGlassTaskInfo.setLine(endcell);
         edgGlassTaskInfo.setTime(new Date());
+        //鍏堝皢鍘嗗彶瀵瑰垪琛ㄤ腑鏈幓鐠冪殑鏁版嵁鍒犻櫎锛岄噸鏂版柊澧炰竴浠芥渶鏂扮殑鏁版嵁
+        edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().eq(EdgGlassTaskInfo::getGlassId, glassInfo.getGlassId()));
         return edgGlassTaskInfoService.save(edgGlassTaskInfo);
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
index 6132c32..a99287d 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.taskcache.entity.TaskCache;
 import org.apache.ibatis.annotations.Param;
 
@@ -16,7 +17,7 @@
  * @since 2024-04-07
  */
 @DS("salve_hangzhoumes")
-public interface TaskCacheMapper extends BaseMapper<TaskCache> {
+public interface TaskCacheMapper extends MPJBaseMapper<TaskCache> {
 
     TaskCache queryGlassByTaskCache(@Param(value = "line") int line, @Param(value = "taskTypes") List<Integer> taskTypes);
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
index 239fabe..daaf6e3 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java
@@ -1,6 +1,7 @@
 package com.mes.taskcache.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
 import com.mes.taskcache.entity.TaskCache;
 
 import java.util.List;
@@ -14,7 +15,7 @@
  * @author zhoush
  * @since 2024-04-07
  */
-public interface TaskCacheService extends IService<TaskCache> {
+public interface TaskCacheService extends MPJBaseService<TaskCache> {
 
 
     boolean insertTaskCache(TaskCache taskCache);
@@ -72,5 +73,11 @@
      * @return
      */
     TaskCache selectLastOutCacheInfo(int line);
+    /**
+     * 鏌ヨ鍒ゆ柇纾ㄨ竟绾挎槸鍚︽湁鐜荤拑杩愯
+     * @param
+     * @return
+     */
+    List<TaskCache> selectTaskCacheIsRun();
 
 }
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 0287e4b..0e330b0 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
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.mes.common.config.Const;
 import com.mes.damage.entity.Damage;
@@ -18,10 +19,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
@@ -33,13 +31,15 @@
  */
 @Slf4j
 @Service
-public class TaskCacheServiceImpl extends ServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
+public class TaskCacheServiceImpl extends MPJBaseServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
 
     @Autowired
     EdgStorageCageDetailsMapper edgStorageCageDetailsMapper;
 
     @Autowired
     GlassInfoMapper glassInfoMapper;
+    @Autowired
+    private TaskCacheMapper taskCacheMapper;
 
 
     /**
@@ -169,7 +169,22 @@
     public TaskCache selectLastOutCacheInfo(int line){
         return baseMapper.selectOne(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell,line).eq(TaskCache::getTaskStatus,1).orderByDesc(TaskCache::getCreateTime));
     }
-
+    /**
+     * 鏌ヨ鍒ゆ柇纾ㄨ竟绾挎槸鍚︽湁鐜荤拑杩愯
+     * @param
+     * @return
+     */
+    @Override
+    public List<TaskCache> selectTaskCacheIsRun() {
+        List<TaskCache> taskCaches=null;
+        taskCaches=taskCacheMapper.selectJoinList(TaskCache.class, new MPJLambdaWrapper<TaskCache>()
+                .select("top 4   t.end_cell,ISNULL(b.glass_id, 0)as glass_id")
+                .leftJoin("big_storage_cage_feed_task as b on t.glass_id=b.glass_id ")
+                .groupBy("t.end_cell,b.glass_id,t.create_time")
+                .orderByDesc("t.create_time")
+        );
+        return taskCaches;
+    }
 
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
index 1abe8aa..3a702c3 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -13,12 +13,16 @@
 mes:
   threshold: 3
   ratio: 10
-  max:
+  max: # 绗簩鏉$嚎鐨勬渶澶у昂瀵镐俊鎭�
     firstLength: 3500
     secondLength: 2500
   min:
-    firstLength: 600
-    secondLength: 350
+    one: #绗竴鏉$(杈圭嚎鐨勬渶灏忓昂瀵镐俊鎭�
+      firstLength: 600
+      secondLength: 350
+    two: #绗簩鏉$(杈圭嚎鐨勬渶灏忓昂瀵镐俊鎭�
+      firstLength: 400
+      secondLength: 300
   sequence:
     order: false
 
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 588bc3e..c77392e 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
@@ -30,6 +30,7 @@
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 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;
@@ -49,6 +50,7 @@
  * @author zhoush
  * @since 2024-03-27
  */
+@Slf4j
 @Service
 public class BigStorageCageDetailsServiceImpl extends MPJBaseServiceImpl<BigStorageCageDetailsMapper, BigStorageCageDetails> implements BigStorageCageDetailsService {
 
@@ -88,7 +90,7 @@
 
 
     @Override
-    public List<BigStorageCageDetails> selectFeedTask(){
+    public List<BigStorageCageDetails> selectFeedTask() {
         //杩涚墖浠诲姟鏁版嵁
         LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>();
         feedWrapper.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW);
@@ -101,38 +103,38 @@
         List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(feedTaskWrapper);
         Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream()
                 .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task));
-            Iterator<BigStorageCageDetails> iterator = bigStorageCageDetailsList.iterator();
-            while (iterator.hasNext()) {
-                BigStorageCageDetails bigStorageCageDetails = iterator.next();
-                BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId());
-                bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
-            }
-            return bigStorageCageDetailsList;
+        Iterator<BigStorageCageDetails> iterator = bigStorageCageDetailsList.iterator();
+        while (iterator.hasNext()) {
+            BigStorageCageDetails bigStorageCageDetails = iterator.next();
+            BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId());
+            bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
+        }
+        return bigStorageCageDetailsList;
     }
 
     @Override
-    public List<BigStorageCageDetails> selectOutTask(){
-            LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>();
-            outWrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING,Const.GLASS_STATE_SCHEDULE_ING);
-            List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper);
-            LambdaQueryWrapper<BigStorageCageOutTask> outTaskWrapper = new LambdaQueryWrapper<>();
-            outTaskWrapper.lt(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS);
-            List<BigStorageCageOutTask> bigStorageCageOutTaskList = bigStorageCageOutTaskMapper.selectList(outTaskWrapper);
+    public List<BigStorageCageDetails> selectOutTask() {
+        LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>();
+        outWrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING, Const.GLASS_STATE_SCHEDULE_ING);
+        List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper);
+        LambdaQueryWrapper<BigStorageCageOutTask> outTaskWrapper = new LambdaQueryWrapper<>();
+        outTaskWrapper.lt(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS);
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = bigStorageCageOutTaskMapper.selectList(outTaskWrapper);
 
-            Map<String, BigStorageCageOutTask> listMap = bigStorageCageOutTaskList.stream()
-                    .collect(Collectors.toMap(BigStorageCageOutTask::getGlassId, task -> task));
-            for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) {
-                BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId());
-                bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask);
-            }
-            Iterator<BigStorageCageDetails> iterator = bigStorageCageDetailsList.iterator();
-            while (iterator.hasNext()) {
-                BigStorageCageDetails bigStorageCageDetails = iterator.next();
-                BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId());
-                bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask);
-            }
-            return bigStorageCageDetailsList;
+        Map<String, BigStorageCageOutTask> listMap = bigStorageCageOutTaskList.stream()
+                .collect(Collectors.toMap(BigStorageCageOutTask::getGlassId, task -> task));
+        for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) {
+            BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId());
+            bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask);
         }
+        Iterator<BigStorageCageDetails> iterator = bigStorageCageDetailsList.iterator();
+        while (iterator.hasNext()) {
+            BigStorageCageDetails bigStorageCageDetails = iterator.next();
+            BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId());
+            bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask);
+        }
+        return bigStorageCageDetailsList;
+    }
 
 
     /**
@@ -266,6 +268,8 @@
                 .selectAll(BigStorageCage.class)
                 .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .in(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW, Const.GLASS_STATE_IN_ALL)
+                .eq(BigStorageCageDetails::getEngineerId, glassInfo.getEngineerId())
                 .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
                 .gt(BigStorageCage::getRemainWidth, Math.max(glassInfo.getWidth(), glassInfo.getHeight()))
                 .last("limit 1");
@@ -276,6 +280,7 @@
         }
         BigStorageCage bigStorageCage = bigStorageCageService.selectJoinOne(BigStorageCage.class, wrapper);
         if (null != bigStorageCage) {
+            log.info("鏃犻挗鍖栫増鍥緄d鎴栨牴鎹綋鍓嶇幓鐠冪墖搴�+1鎵惧埌鐩爣鏍煎瓙锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
             bigStorageDTO = new BigStorageDTO();
             bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
             bigStorageDTO.setSlot(bigStorageCage.getSlot());
@@ -285,11 +290,12 @@
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                 .eq(BigStorageCage::getRemainWidth, slotWidth)
-                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
+//                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
                 .inSql(BigStorageCage::getDeviceId,
-                        "select distinct device_id from big_storage_cage_details where tempering_layout_id = " + glassInfo.getTemperingLayoutId())
+                        "select distinct device_id from big_storage_cage_details where engineer_id = '" + glassInfo.getEngineerId() + "' and tempering_layout_id = " + glassInfo.getTemperingLayoutId())
                 .last("limit 1"));
         if (null != bigStorageCage) {
+            log.info("鏍规嵁鐗堝浘id鎵惧埌绗煎瓙鍐呯殑鐩爣鏍煎瓙锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
             bigStorageDTO = new BigStorageDTO();
             bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
             bigStorageDTO.setSlot(bigStorageCage.getSlot());
@@ -301,27 +307,33 @@
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                 .eq(BigStorageCage::getRemainWidth, slotWidth)
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
-                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
-                .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)
+                .inSql(BigStorageCage::getDeviceId,
+                        "select t.device_id from big_storage_cage t left join big_storage_cage_details t1 on t.slot = t1.slot " +
+                                " where state in (0,100,102,103,104)  and t.max_thickness >= " + glassInfo.getThickness() + " and t.enable_state = 1 " +
+                                " group by t.device_id " +
+                                " order by count(DISTINCT t1.tempering_layout_id), count(distinct t1.slot)")
                 .last("limit 1"));
         if (null != bigStorageCage) {
+            log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板崰鐢ㄦ渶灏戞柟寮忚幏鍙栦俊鎭牸瀛愪负锛歿},鐜荤拑id锛歿}", bigStorageCage.getSlot(), glassInfo.getGlassId());
             bigStorageDTO = new BigStorageDTO();
             bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
             bigStorageDTO.setSlot(bigStorageCage.getSlot());
             bigStorageDTO.setDeviceId(bigStorageCage.getDeviceId());
             return bigStorageDTO;
         }
+
+        //鑾峰彇鐜荤拑鐨勫帤搴︼細閲嶆柊閫夌瀛愰渶瑕佹寜鐓х瀛愬彲鏀剧幓鐠冨帤搴﹁繘琛岄�夋嫨
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                 .eq(BigStorageCage::getRemainWidth, slotWidth)
-                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
-                .ge(BigStorageCage::getMaxThickness, glassInfo.getThickness())
-                .orderByAsc(BigStorageCage::getDeviceId)
+                .inSql(BigStorageCage::getDeviceId,
+                        "select t.device_id from big_storage_cage t left join big_storage_cage_details t1 on t.slot = t1.slot " +
+                                " where state in (0,100,102,103,104)  and t.max_thickness >= " + glassInfo.getThickness() + " and t.enable_state = 1 " +
+                                " group by t.device_id " +
+                                " order by count(DISTINCT t1.tempering_layout_id), count(distinct t.slot) - count(distinct t1.slot) desc")
                 .last("limit 1"));
         Assert.isTrue(null != bigStorageCage, "娌℃湁绌轰綑鐨勭瀛愬瓨鏀剧幓鐠�");
+        log.info("鎸夌収瀛樼鐜荤拑鏍煎瓙鏁板墿浣欐渶澶氬緱鏂瑰紡鑾峰彇淇℃伅鐗堝浘id:{},鏍煎瓙锛歿},鐜荤拑id锛歿}", glassInfo.getTemperingLayoutId(), bigStorageCage.getSlot(), glassInfo.getGlassId());
         bigStorageDTO = new BigStorageDTO();
         bigStorageDTO.setWidth(bigStorageCage.getRemainWidth());
         bigStorageDTO.setSlot(bigStorageCage.getSlot());
@@ -376,7 +388,9 @@
         QueryWrapper<BigStorageCageDetails> wrapper = new QueryWrapper<>();
         wrapper.select("engineer_id,tempering_layout_id,count(*) as count")
                 .in("state", Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL)
-                .groupBy("engineer_id,tempering_layout_id");
+                .groupBy("engineer_id,tempering_layout_id")
+                .orderByAsc("engineer_id")
+                .orderByAsc("tempering_layout_id");
         List<Map<String, Object>> TemperingGlass = baseMapper.selectMaps(wrapper);
         return TemperingGlass;
     }
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 c6587ca..8f7ba74 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
@@ -109,4 +109,25 @@
         }
     }
 
+    @Scheduled(fixedDelay = 1000)
+    public void temperingIsRun(){
+        JSONObject jsonObject = new JSONObject();
+        //杩涚墖浠诲姟鏁版嵁
+        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectFeedTask();
+        jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask);
+        //鍑虹墖浠诲姟鏁版嵁
+        List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectOutTask();
+        jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("isRun");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
+
 }
\ No newline at end of file
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 94d89f3..d15f91a 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
@@ -244,7 +244,7 @@
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
     }
 
-    @Scheduled(fixedDelay = 2000)
+    @Scheduled(fixedDelay = 300)
     public void plcToHomeEdgOutTask() {
         Date startDate = new Date();
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
@@ -484,6 +484,7 @@
             bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>()
                     .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList())));
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
             for (BigStorageCageFeedTask bigStorageCageFeedTask : inDamageTaskInfoList) {
                 Damage damage = new Damage();
                 damage.setGlassId(bigStorageCageFeedTask.getGlassId());
@@ -492,7 +493,10 @@
                 damage.setRemark("杩涚鍓嶅崸杞珛");
                 damage.setStatus(2);
                 damageService.insertDamage(damage);
+                slotList.add(bigStorageCageFeedTask.getTargetSlot());
             }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
             log.info("杩涚墖浠诲姟鎵ц瀹屾垚");
         }
         //鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
@@ -500,7 +504,7 @@
                 .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));
+            bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_DAMAGE));
             List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
             //绉婚櫎閽㈠寲涓嬬墖琛ㄦ暟鎹�
             temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList));
@@ -508,6 +512,7 @@
             bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList));
 
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
             for (BigStorageCageOutTask bigStorageCageOutTask : outDamageTaskInfoList) {
                 Damage damage = new Damage();
                 damage.setGlassId(bigStorageCageOutTask.getGlassId());
@@ -516,7 +521,10 @@
                 damage.setRemark("鍑虹墖鍚庡崸杞珛");
                 damage.setStatus(2);
                 damageService.insertDamage(damage);
+                slotList.add(bigStorageCageOutTask.getStartSlot());
             }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
             log.info("鍑虹墖浠诲姟鎵ц瀹屾垚");
         }
         Date endDate = new Date();
@@ -704,7 +712,69 @@
         }
     }
 
+    /**
+     * 鍑虹墖涓�娆′粎鐢熸垚涓�杞︾幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
     private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
+        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+        //鎵撹溅鍓╀綑灏哄
+        Integer remainWidth = carWidth;
+        int maxX = 0;
+        for (T e : list) {
+            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || Math.max((int) e.getWidth(), (int) e.getHeight()) > remainWidth) {
+                break;
+            }
+            remainWidth = remainWidth - Math.max((int) e.getWidth(), (int) e.getHeight()) - glassGap;
+            if (isTempering) {
+                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+                if (maxX + minLength <= xMaxSize) {
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1));
+                    maxX = Math.max(maxX, e.getXCoordinate());
+                } else {
+                    break;
+                }
+
+            } else {
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                        e.getWidth() * 10, e.getHeight(), 0, 0, 1));
+            }
+        }
+        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
+                .in(BigStorageCageDetails::getGlassId, glassIds));
+        int returnData = 0;
+        int count = 1;
+        while (returnData == 0) {
+            S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+            returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+        }
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 鍑虹墖涓�娆$敓鎴愪竴鐐夌幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
+    private <T extends BigStorageCageBaseInfo> Boolean computeOutMoreGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
         //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
         List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
         //鎵撹溅鍓╀綑灏哄
@@ -714,12 +784,11 @@
         int maxX = 0;
         for (T e : list) {
             int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
-            if (bigStorageCageOutTaskList.size() >= outCarMaxSize || maxLength > remainWidth) {
+            if (serialNumber > outCarMaxSize || maxLength > remainWidth) {
                 remainWidth = carWidth;
                 trainNumber = trainNumber + 1;
                 serialNumber = 1;
                 maxX = 0;
-                continue;
             }
             remainWidth = remainWidth - maxLength - glassGap;
             if (isTempering) {
@@ -729,11 +798,12 @@
                             e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1));
                     maxX = Math.max(maxX, e.getXCoordinate());
                 } else {
-                    remainWidth = carWidth;
+                    remainWidth = carWidth - maxLength - glassGap;
                     trainNumber = trainNumber + 1;
                     serialNumber = 1;
-                    maxX = 0;
-                    continue;
+                    maxX = e.getXCoordinate();
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1));
                 }
             } else {
                 bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index 2c93d87..be947ce 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -41,6 +41,7 @@
                              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
+        ORDER BY T2.ENGINEER_ID, T2.TEMPERING_LAYOUT_ID
     </select>
 
     <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
index d3c02f3..3b1819f 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
@@ -99,7 +99,7 @@
         //鏌ヨ鏄惁鏈夊紑濮嬩笂鐗囩殑宸ョ▼浠诲姟
         QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
             wrapper.eq("state", state);
-        return this.getOne(wrapper);
+        return engineeringMapper.selectOne(wrapper);
     }
 
     @Override
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
index 5e73260..7ecbf06 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -127,6 +127,10 @@
         //宸ヤ綅淇℃伅
         List<UpWorkstation> upWorkstations = upWorkstationService.list();
         jsonObject.append("list", upWorkstations);
+        //鏄惁寮�濮嬪伐绋�
+        Engineering engineering = engineeringService.selectInitiate(1);
+        jsonObject.append("engineering", engineering);
+
         ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
         if (sendwServer != null) {
             for (WebSocketServer webserver : sendwServer) {
@@ -162,6 +166,26 @@
             }
         }
     }
+    @Scheduled(fixedDelay = 1000)
+    public void loadGlassIsRun() {
+        JSONObject jsonObject = new JSONObject();
+        Engineering engineering = engineeringService.selectInitiate(1);
+        if (engineering != null){
+            jsonObject.append("engineering", engineering);
+        }else {
+            jsonObject.append("engineering", "0");
+        }
+        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");
+                }
+            }
+        }
+    }
 
     public void overTask(String loadStatus, int state) {
 
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 841570f..7e31c30 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
@@ -134,13 +134,15 @@
         log.info("2銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
         Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");
-        if ("1".equals(requestWord) && (glassInfo.getWidth() > throughWidth || glassInfo.getHeight() > throughHeight)) {
-            log.info("鐜荤拑褰撳墠灏哄瀹斤細{}锛岄珮锛歿}鍙兘鐩撮�氾紝褰撳墠杩涚墖浠诲姟闇�绛夊緟", glassInfo.getWidth(), glassInfo.getHeight());
+        double glassWidth = Math.max(glassInfo.getWidth(), glassInfo.getHeight());
+        double glassHeight = Math.min(glassInfo.getWidth(), glassInfo.getHeight());
+        if ("1".equals(requestWord) && (glassWidth > throughWidth || glassHeight > throughHeight)) {
+            log.info("鐜荤拑褰撳墠灏哄瀹斤細{}锛岄珮锛歿}鍙兘鐩撮�氾紝褰撳墠杩涚墖浠诲姟闇�绛夊緟", glassWidth, glassHeight);
             return;
         }
         Boolean checkFlag = Boolean.FALSE;
         //鐜荤拑灏哄鏄惁璧颁汉宸ヤ笅鐗�
-        if (glassInfo.getWidth() > maxWidth || glassInfo.getHeight() > maxHeight || glassInfo.getWidth() < minWidth || glassInfo.getHeight() < minHeight) {
+        if (glassWidth > maxWidth || glassHeight > maxHeight || glassWidth < minWidth || glassHeight < minHeight) {
             log.info("璇ョ幓鐠冨昂瀵镐笉绗﹀悎瑕佹眰锛岄渶瑕佽蛋浜哄伐涓嬬墖鐩存帴杩涚墖");
         } else {
             log.info("璇ョ幓鐠冨昂瀵搁潪浜哄伐涓嬬墖");
@@ -148,6 +150,7 @@
             DownWorkstation one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
                     .eq(DownWorkstation::getLayer, glassInfo.getLayer())
                     .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
+            //鏄惁宸茬粡缁戝畾   true锛氬凡缁戝畾    false:鏈粦瀹�
             Boolean isBind = Boolean.FALSE;
             if (null != one) {
                 log.info("璇ユ祦绋嬪崱宸茬粦瀹氭灦瀛�");
@@ -157,7 +160,7 @@
             if (!checkFlag && !isBind) {
                 log.info("璇ョ幓鐠冪殑娴佺▼鍗℃湭缁戝畾鏋跺瓙锛岃幏鍙栨槸鍚︽湁绌烘灦瀛�");
                 List<DownWorkstation> list = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
-                        .isNull(DownWorkstation::getFlowCardId).orderByDesc(DownWorkstation::getWorkstationId));
+                        .and(on -> on.isNull(DownWorkstation::getFlowCardId).or().eq(DownWorkstation::getFlowCardId, "")).orderByDesc(DownWorkstation::getWorkstationId));
                 if (CollectionUtils.isNotEmpty(list)) {
                     log.info("鏈夌┖鏋跺瓙,灏嗘祦绋嬪崱涓庢灦瀛愬ソ缁戝畾锛屾墽琛岃繘鐗囦换鍔� 缁撴潫");
                     //缁戝畾娴佺▼鍗�
@@ -176,28 +179,31 @@
                     endLoop:
                     for (DownGlassInfoDTO e : downGlassInfoDTOList) {
                         List<GlassInfo> glassInfoList = e.getGlassInfoList();
-                        Optional<GlassInfo> glassInfoTempOptional = glassInfoList.stream().filter(item -> item.getWidth() == glassInfo.getWidth() && item.getHeight() == glassInfo.getHeight()
-                                && item.getThickness() == glassInfo.getThickness() && item.getFilmsid().equals(glassInfo.getFilmsid()))
-                                .findFirst();
-                        if (glassInfoTempOptional.isPresent()) {
-                            GlassInfo item = glassInfoTempOptional.get();
-                            //鐜荤拑鏄惁涓哄灞�
-                            checkFlag = multilayerCheck(item, Boolean.FALSE);
-                            if (checkFlag) {
-                                //鐜荤拑鏇挎崲 浠呮浛鎹㈡祦绋嬪崱id鍙婂眰鏁�
-                                String tempFlowCardId = item.getFlowCardId();
-                                Integer tempLayer = item.getLayer();
-                                String flowCardId = glassInfo.getFlowCardId();
-                                Integer layer = glassInfo.getLayer();
-                                log.info("鏇挎崲娴佺▼鍗′俊鎭�,褰撳墠鐜荤拑淇℃伅:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗},鏇挎崲鍚庣幓鐠冧俊鎭�:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗}",
-                                        item, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer);
-                                glassInfo.setFlowCardId(tempFlowCardId);
-                                glassInfo.setLayer(tempLayer);
-                                glassInfoService.updateById(glassInfo);
-                                item.setFlowCardId(flowCardId);
-                                item.setLayer(layer);
-                                glassInfoService.updateById(item);
-                                break endLoop;
+                        List<GlassInfo> glassInfoTempList = glassInfoList.stream().filter(item -> item.getWidth() == glassInfo.getWidth() && item.getHeight() == glassInfo.getHeight()
+                                && item.getThickness() == glassInfo.getThickness() && item.getFilmsid().equals(glassInfo.getFilmsid())).collect(Collectors.toList());
+                        if (CollectionUtils.isNotEmpty(glassInfoTempList)) {
+                            for (GlassInfo item : glassInfoTempList) {
+                                //鐜荤拑鏄惁涓哄灞傦細1銆佸厛鑾峰彇褰撳墠娴佺▼鍗¤惤鏋舵渶澶氱殑灞傛暟锛屽鏋滀负绌猴紝琛ㄦ槑鏈粦瀹氭祦绋嬪崱锛屾湭钀芥灦锛岀劧鍚庢寜鐓ф槸鍚﹀彲缁戝畾鏋跺瓙鍐冲畾鏄惁鏇挎崲銆傦紙鍙拷鐣ヤ笉璁★紝鏈牎楠屼粎鍦ㄥ墠涓�娆¤皟鐢ㄨ捣浣滅敤锛�
+//                                          2銆佸垽鏂惤鏋舵渶澶氱殑灞傛暟鏄惁涓哄綋鍓嶆浛鎹㈢幓鐠冪殑灞傛暟锛屾槸  鍒欒蛋鏇挎崲閫昏緫杩斿洖true
+//                                          3銆佷笉鏄渶澶氱殑灞傛暟锛岃幏鍙栬惤鏋舵渶澶氬眰鏁扮殑鐩稿悓娆″簭鐨勭幓鐠冨昂瀵镐笌褰撳墠鏇挎崲鐜荤拑鐨勫昂瀵告瘮杈冿紝鐩稿悓璧版浛鎹紝鍚﹀垯缁х画寰幆
+//                                          4銆佸崟灞傜幓鐠冪洿鎺ヨ蛋鏇挎崲
+                                checkFlag = multilayerCheck(item, Boolean.FALSE);
+                                if (checkFlag) {
+                                    //鐜荤拑鏇挎崲 浠呮浛鎹㈡祦绋嬪崱id鍙婂眰鏁�
+                                    String tempFlowCardId = item.getFlowCardId();
+                                    Integer tempLayer = item.getLayer();
+                                    String flowCardId = glassInfo.getFlowCardId();
+                                    Integer layer = glassInfo.getLayer();
+                                    log.info("鏇挎崲娴佺▼鍗′俊鎭�,褰撳墠鐜荤拑淇℃伅:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗},鏇挎崲鍚庣幓鐠冧俊鎭�:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗}",
+                                            item, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer);
+                                    glassInfo.setFlowCardId(tempFlowCardId);
+                                    glassInfo.setLayer(tempLayer);
+                                    glassInfoService.updateById(glassInfo);
+                                    item.setFlowCardId(flowCardId);
+                                    item.setLayer(layer);
+                                    glassInfoService.updateById(item);
+                                    break endLoop;
+                                }
                             }
                         }
                     }
@@ -210,7 +216,6 @@
         downStorageCageDetails.setState(Const.GLASS_STATE_IN);
         downStorageCageDetails.setSlot(nearestEmpty.getSlot());
         downStorageCageDetailsService.save(downStorageCageDetails);
-
         //        鐢熸垚杩涚墖浠诲姟
         initDownGlassTask(glassInfo, 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
     }
@@ -221,9 +226,9 @@
             log.info("G06銆丟11銆丟13鍒嗗埆涓簕},{}銆亄}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", glassStatus06, glassStatus11, glassStatus13);
             return Boolean.FALSE;
         }
-
         List<DownStorageCageDetails> tempList = downStorageCageDetailsService.list(new LambdaQueryWrapper<DownStorageCageDetails>()
                 .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN));
+        log.info("鍑虹墖1銆佺鍐呯殑鐜荤拑淇℃伅鏈夛細{}", tempList);
         //鑾峰彇寰呰繘鐗囩幓鐠�
         DownStorageCageDetails cageDetails = new DownStorageCageDetails();
         if (StringUtils.isNotBlank(glassId)) {
@@ -234,12 +239,15 @@
             cageDetails.setSlot(empty.getSlot());
             tempList.add(cageDetails);
         }
-
-        log.info("绗煎唴鐜荤拑鐨勬暟鎹湁锛歿}", tempList);
+        log.info("鍑虹墖2锛氱鍐呯幓鐠冪殑鏁版嵁(鍖呮嫭寰呰繘鐗�)鏈夛細{}", tempList);
         if (CollectionUtils.isEmpty(tempList)) {
             log.info("绗煎唴娌℃湁鐜荤拑,鏃犳硶鎵ц鍑虹墖");
             return Boolean.FALSE;
         }
+        //浼樺厛璧�08鐗囧彴鐨勭幓鐠冿細璧颁汉宸ヤ笅鐗囨垨鑰�2鍙锋満姊拌噦
+        //1銆�08鍙板繖纰岋紝浠呰蛋1鍙锋満姊拌噦
+        //2銆�08鍙扮┖闂诧紝鍏堣蛋鎵斿伐涓嬬墖鎴�2鍙锋満姊拌噦锛屾棤鐜荤拑鍑虹墖 鍦ㄨ蛋1鍙锋満姊拌噦
+        //鏈烘鑷傝绂佺敤鐨勬儏鍐典笅涓嶈兘缁х画鍚戠鐢ㄧ殑鏈烘鑷傛斁鐜荤拑
         Boolean flag08 = "1".equals(out08Glassstate) ? Boolean.TRUE : Boolean.FALSE;
         if (!flag08) {
             generateTaskByShelf(glassStatus06, glassStatus11, flag08, glassStatus13, tempList, cageDetails, glassId);
@@ -248,7 +256,6 @@
                 return generateTaskByShelf(glassStatus06, glassStatus11, !flag08, glassStatus13, tempList, cageDetails, glassId);
             }
         }
-
         return Boolean.TRUE;
     }
 
@@ -264,7 +271,6 @@
                     log.info("鏋跺瓙宸茬粡鍗犳弧锛屽灞傜幓鐠冩棤娉曟壘鍒板搴旂殑鏍煎瓙锛岄渶鎵ц鏇挎崲鐜荤拑鐨勬搷浣�");
                     return Boolean.FALSE;
                 }
-
             }
             if (downGlassInfoDTO.getLayer().equals(glassInfo.getLayer())) {
                 log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶� 鐩存帴杩涚墖");
@@ -293,7 +299,6 @@
             glassStatus13, List<DownStorageCageDetails> tempList, DownStorageCageDetails cageDetails, String glassId) {
         //鑾峰彇2涓満姊拌噦鑼冨洿鍐呯殑鏋跺瓙缁戝畾鐨勬祦绋嬪崱淇℃伅
         List<Integer> workList = new ArrayList();
-
         if (flag08) {
             if (!"2".equals(glassStatus11)) {
                 workList.addAll(Const.G11_WORK_STATION);
@@ -306,51 +311,59 @@
         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<DownStorageCageDetails> list = new ArrayList();
+        //鏄惁鏈夌┖鏋跺瓙 true锛氭湁   false:鏃�
         Boolean isEmptyShelf = Boolean.FALSE;
         //瀵圭鍐呯幓鐠冭繘琛岃繃婊わ紝浠呭嚭绗﹀悎閫昏緫鐨勭幓鐠�
         if (CollectionUtils.isNotEmpty(workList)) {
             List<DownWorkstation> downWorkstationList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
                     .eq(DownWorkstation::getEnableState, Const.SLOT_ON).in(DownWorkstation::getWorkstationId, workList));
-//            log.info("鏋跺瓙琚鐢紝鏃犳硶鍑虹墖钀芥灦");
             if (CollectionUtils.isEmpty(downWorkstationList)) {
                 log.info("绗煎瓙琚鐢紝鏃犳硶璧版満姊拌噦涓嬬墖");
                 //璧颁汉宸ヤ笅鐗�
-                if (!"2".equals(glassStatus13)) {
-                    list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
+                if (flag08 && !"2".equals(glassStatus13)) {
+                    list = tempList.stream().filter(item -> {
+                        double firstLength = Math.max(item.getWidth(), item.getHeight());
+                        double secondLength = Math.min(item.getWidth(), item.getHeight());
+                        return firstLength > maxWidth || secondLength > maxHeight;
+                    }).collect(Collectors.toList());
                 }
             } else {
                 //鑾峰彇鍙惤鏋剁殑鐨勬灦瀛愪俊鎭紙鍖呮嫭绌烘灦瀛愶級
-                List<DownWorkstation> workstationsIsNotBind = downWorkstationList.stream().filter(item -> null == (item.getFlowCardId())).collect(Collectors.toList());
-                //灏嗘灦瀛愮殑娴佺▼鍗″彿鍙婂眰鏁颁綔涓簁ey
+                //浠呰幏鍙栫┖鏋跺瓙淇℃伅
+                List<DownWorkstation> workstationsIsNotBind = downWorkstationList.stream().filter(item -> StringUtils.isBlank(item.getFlowCardId())).collect(Collectors.toList());
+                //灏嗘灦瀛愮殑娴佺▼鍗″彿鍙婂眰鏁颁綔涓簁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()));
+                            .filter(item -> StringUtils.isNotBlank(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("瀛樺湪鏈粦瀹氭祦绋嬪崱鏋跺瓙锛岀洿鎺ヨ幏鍙栫鍐呮墍鏈夌幓鐠�,涓旀湭缁戝畾鏋跺瓙鐨勭幓鐠冧俊鎭�");
-                    //鑾峰彇绂佺敤鏋跺瓙鐨勬祦绋嬪彿锛屽皢绗煎唴缁戝畾鏋跺瓙涓旀灦瀛愯绂佺敤鐨勬祦绋嬪崱淇℃伅
-
+                    //鑾峰彇绂佺敤鍙婇潪鏈満姊拌噦鐨勬灦瀛愮殑娴佺▼鍙峰強灞傛暟瀵瑰簲鐨勭幓鐠冧俊鎭�
                     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()));
+                        //绗煎唴瀛樺湪鏃犳硶鍑虹墖鐨勭幓鐠冧俊鎭紝杩囨护鏃犳硶鍑虹墖鐨勭幓鐠冧俊鎭紝浠呰幏鍙栧彲鍑虹墖鐨勭幓鐠冧俊鎭�   鏃犳硶鍑虹墖鐨勭幓鐠冧负锛氭湭缁戝畾鏋跺瓙銆佺粦瀹氭灦瀛愯绂佺敤銆侀潪鏈満姊拌噦瀵瑰簲鐨勬灦瀛�
+                        Map<String, List<DownWorkstation>> listOffMap = downWorkstationOffList.stream().filter(item -> StringUtils.isNotBlank(item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
                         list = tempList.stream().filter(item -> !listOffMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
                     }
+                    //绌烘灦瀛愯〃绀虹疆涓簍rue
                     isEmptyShelf = Boolean.TRUE;
-                    //todo:濡傛灉绂佺敤鏋跺瓙宸茬粦瀹氭祦绋嬪崱锛屽洜涓烘椂闂翠笉纭畾锛岀瀛愬唴鐨勭幓鐠冨彲閲嶆柊缁戝畾鏂版灦瀛�
-//                    list = tempList.stream().filter(item -> !listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
-
                 }
             }
         } else {
             if (flag08 && !"2".equals(glassStatus13)) {
                 //鐩存帴璧颁汉宸ヤ笅鐗�
-                list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
+                list = tempList.stream().filter(item -> {
+                    double firstLength = Math.max(item.getWidth(), item.getHeight());
+                    double secondLength = Math.min(item.getWidth(), item.getHeight());
+                    return firstLength > maxWidth || secondLength > maxHeight;
+                }).collect(Collectors.toList());
             }
         }
         if (CollectionUtils.isEmpty(list)) {
@@ -358,10 +371,12 @@
             return Boolean.FALSE;
         }
         String tempGlassId = null;
-        Boolean isBind = Boolean.FALSE;
+        Boolean isNeedBind = Boolean.FALSE;
 
         for (DownStorageCageDetails item : list) {
-            if (item.getWidth() > maxWidth || item.getHeight() > maxHeight) {
+            double firstLength = Math.max(item.getWidth(), item.getHeight());
+            double secondLength = Math.min(item.getWidth(), item.getHeight());
+            if (firstLength > maxWidth || secondLength > maxHeight) {
                 if (flag08 && !"2".equals(glassStatus13)) {
                     log.info("鐜荤拑瀹藉害鎴栭珮搴﹁秴鍑洪槇鍊硷紝鎵ц浜哄伐涓嬬墖");
                     tempGlassId = item.getGlassId();
@@ -378,7 +393,7 @@
                 //鏋跺瓙閮芥湭缁戝畾娴佺▼鍗★紝鍑虹鍐呭瓙鏁伴噺鏈�澶氬昂瀵告渶澶х殑鐜荤拑id,鏃�  鍒欒繑鍥炴壂鎻忔壂鍒扮殑鐜荤拑id杩涜鍑虹墖
                 tempGlassId = downStorageCageDetailsService.getGlassInfoMaxCount(glassId, offWorkStationList);
 
-                isBind = Boolean.TRUE;
+                isNeedBind = Boolean.TRUE;
                 break loop;
             }
             //灏嗙瀛愬唴鐨勭幓鐠冭繘琛岃繃婊わ紝浠呰幏鍙栨棤娉曡惤鏋剁殑娴佺▼鍗$幓鐠�
@@ -391,7 +406,7 @@
                 if (isEmptyShelf) {
                     //鏋跺瓙閮芥湭缁戝畾娴佺▼鍗★紝鍑虹鍐呭瓙鏁伴噺鏈�澶氬昂瀵告渶澶х殑鐜荤拑id,鏃�  鍒欒繑鍥炴壂鎻忔壂鍒扮殑鐜荤拑id杩涜鍑虹墖
                     tempGlassId = downStorageCageDetailsService.getGlassInfoMaxCount(glassId, offWorkStationList);
-                    isBind = Boolean.TRUE;
+                    isNeedBind = Boolean.TRUE;
                     break loop;
                 }
             }
@@ -409,16 +424,13 @@
                     DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(item.getFlowCardId());
                     if (null == downGlassInfoDTO) {
 //                    鍘嗗彶钀芥灦鐜荤拑鎸夌収鐩稿叧娴佺▼鍗″彇鏁版嵁搴撴湭鎵惧埌鏈�澶氱幓鐠冧俊鎭紝琛ㄦ槑褰撳墠娴佺▼鍗′笅鐨勬湁灞傜殑鐜荤拑鍧囨湭钀芥灦锛岀洿鎺ュ彲鍑哄綋鍓嶇幓鐠�
-                        log.info("");
-                        isBind = Boolean.FALSE;
                         tempGlassId = item.getGlassId();
+                        log.info("褰撳墠娴佺▼鍗′笉瀛樺湪钀芥灦鐨勭幓鐠冿紝鍙洿鎺ュ嚭鐗囪惤鏋讹紝鐜荤拑id:{}", tempGlassId);
                         break loop;
                     }
                     if (downGlassInfoDTO.getLayer().equals(downGlassInfoDTO.getLayer())) {
-                        log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶�,鐩存帴鍑虹墖");
-                        //鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟
                         tempGlassId = item.getGlassId();
-                        isBind = Boolean.FALSE;
+                        log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶�,鐩存帴鍑虹墖锛岀幓鐠僫d:{}", tempGlassId);
                         break loop;
                     }
                     Integer sequence = downGlassInfoService.queryMaxSequence(item.getFlowCardId(), item.getLayer());
@@ -427,10 +439,8 @@
                             .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId())
                             .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence));
                     if (null != downGlassInfoDTO && downGlassInfo.getWidth() == item.getWidth() && downGlassInfo.getHeight() == item.getHeight()) {
-                        log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔�");
-                        //鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟
                         tempGlassId = item.getGlassId();
-                        isBind = Boolean.FALSE;
+                        log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔★紝鐜荤拑id:{}", tempGlassId);
                         break loop;
                     }
                 }
@@ -445,7 +455,6 @@
                         List<DownStorageCageDetails> downStorageCageDetails = singleLayerMap.get(e.getFlowCardId() + e.getLayer());
                         if (CollectionUtils.isNotEmpty(downStorageCageDetails)) {
                             tempGlassId = downStorageCageDetails.get(0).getGlassId();
-                            isBind = Boolean.FALSE;
                             break;
                         }
                     }
@@ -457,12 +466,12 @@
             return Boolean.FALSE;
         } else {
             //鎸夌収鍑虹墖鐨勭幓鐠僫d鏇存柊绗煎唴鐨勭幓鐠冪姸鎬佷负宸插嚭鐗�
-            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isBind, cageDetails, workList);
+            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isNeedBind, cageDetails, workList);
         }
     }
 
     public Boolean generateDownGlassOutTask(String glassId, Integer taskType, Boolean
-            isBind, DownStorageCageDetails cageDetails, List<Integer> workList) {
+            isNeedBind, DownStorageCageDetails cageDetails, List<Integer> workList) {
         //鎸夌幓鐠僫d鑾峰彇鐜荤拑淇℃伅
         DownStorageCageDetails downStorageCageDetails = null;
         if (glassId.equals(cageDetails.getGlassId())) {
@@ -486,10 +495,10 @@
         }
 
         Integer endCell = null;
-        if (isBind) {
+        if (isNeedBind) {
             //鑾峰彇绌烘灦瀛愪俊鎭紝灏嗙┖鏋跺瓙淇℃伅缁戝畾娴佺▼鍗�
             DownWorkstation emptyDownWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
-                    .isNull(DownWorkstation::getFlowCardId).in(DownWorkstation::getWorkstationId, workList).orderByDesc(DownWorkstation::getWorkstationId).last("limit 1"));
+                    .and(on -> on.isNull(DownWorkstation::getFlowCardId).or().eq(DownWorkstation::getFlowCardId, "")).in(DownWorkstation::getWorkstationId, workList).orderByDesc(DownWorkstation::getWorkstationId).last("limit 1"));
             if (null != emptyDownWorkstation) {
                 log.info("鑾峰彇鍒扮┖鏋跺瓙淇℃伅锛岀粦瀹氭祦绋嬪崱");
                 downWorkstationService.updateFlowCardIdAndCount(downStorageCageDetails.getFlowCardId(), emptyDownWorkstation.getWorkstationId(), downStorageCageDetails.getLayer());
@@ -515,7 +524,7 @@
         //鐢熸垚浠诲姟淇℃伅
         DownGlassInfo downGlassInfo = new DownGlassInfo();
         BeanUtils.copyProperties(downStorageCageDetails, downGlassInfo);
-        //todo锛氳惤鏋剁墖搴�
+        //钀芥灦鐗囧簭
         downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
         downGlassInfoService.save(downGlassInfo);
         //鐢熸垚浠诲姟淇℃伅

--
Gitblit v1.8.0