From 6ff1b66c16a506d8f40b7284c1c3774faf1e6d2e Mon Sep 17 00:00:00 2001
From: wuyouming666 <2265557248@qq.com>
Date: 星期五, 31 五月 2024 16:45:45 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java                                      |    2 
 UI-Project/src/views/User/rolelist.vue                                                                                                           |   16 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java |   41 
 UI-Project/src/views/Returns/returns.vue                                                                                                         |  663 ++++++------
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java            |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java          |    2 
 hangzhoumesParent/common/springsecurity/src/main/resources/application-dev.yml                                                                   |    6 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java              |    6 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java                   |   12 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/controller/EdgGlassTaskInfoController.java           |   20 
 hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java                                        |   28 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/WebSocketConfig.java                                                    |    3 
 hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json                                                                                            |   57 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java                                             |  101 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java    |    8 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                       |   60 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java                                            |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java                      |   19 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml                                                              |    2 
 hangzhoumesParent/JsonFile/PlcCacheGlass.json                                                                                                    |   64 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java                                                        |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java                                                |    7 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java                     |    3 
 UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue                                                                                        |   59 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java                        |    1 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java            |   91 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java        |   12 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java                |    3 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java                                     |    3 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java                 |   16 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/TaskCacheService.java                                   |   17 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java                                                  |  123 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java                         |    1 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java                        |    2 
 UI-Project/src/layout/MainErpView.vue                                                                                                            |   59 
 UI-Project/src/views/Identify/identify.vue                                                                                                       |   37 
 UI-Project/src/views/Caching/cachingbefore.vue                                                                                                   |  141 +-
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java                 |   30 
 hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java                                          |    1 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java                      |   30 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml                                                               |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java           |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java                                      |   14 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java        |   20 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/mapper/TaskCacheMapper.java                                     |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java               |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java                  |   34 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java         |   22 
 UI-Project/src/views/User/permissions.vue                                                                                                        |   21 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/mapper/EdgGlassTaskInfoMapper.java                   |   18 
 UI-Project/src/views/User/userlist.vue                                                                                                           |   25 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java                            |    6 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java                                       |   17 
 UI-Project/src/views/StockBasicData/stockBasicData.vue                                                                                           |   58 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                                   |  153 ++
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml                                                   |   24 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java                     |   24 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java     |   88 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java               |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java                         |   71 +
 hangzhoumesParent/JsonFile/PlcLoadGlass.json                                                                                                     |   78 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java                          |   91 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java                     |    6 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java                                              |    4 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-dev.yml                                                          |   23 
 hangzhoumesParent/JsonFile/PlcdownGlass.json                                                                                                     |  362 +++++++
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java                                |    7 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                                              |    4 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java                             |    6 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml                                                           |   10 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java                |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java                   |   19 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java                          |   43 
 73 files changed, 2,279 insertions(+), 739 deletions(-)

diff --git a/UI-Project/src/layout/MainErpView.vue b/UI-Project/src/layout/MainErpView.vue
index 91453ae..3bd4a05 100644
--- a/UI-Project/src/layout/MainErpView.vue
+++ b/UI-Project/src/layout/MainErpView.vue
@@ -13,24 +13,49 @@
 const userStore = useUserInfoStore()
 const user = userStore.user.userName
 
-// store.createWebSocket();
-function quit() {
-  userStore.$patch({
-    user: null,
-  })
-  // router.push('/login')
-  let token = window.localStorage.getItem('userInfo')
-console.log(token);
-  request.get("/loadGlass/sys/user/login").then((res) => {
-    if (res.code === 200) {
-    ElMessage.success(res.msg);
-     console.log(res.data);
-    } else {
-    ElMessage.warning(res.msg);
-    // router.push("/login");
-    }
-   });
+let userInfoStr = window.localStorage.getItem('userInfo')
+console.log(userInfoStr);
+// const userInfoStr = localStorage.getItem('userInfo');  
+// let userInfo = userInfoStr.user.token;  
+let token = userInfo; // 鎻愬彇 token  
+// 閫�鍑虹櫥褰曟柟娉�  
+const quit = async () => {
+  try  {
+    const response = await request.get('/loadGlass/sys/user/logout', {
+        token: token,
+        user: null,
+    })
+    if (response.code === 200) {  
+        // 鐧诲嚭鎴愬姛锛屾竻闄ゆ湰鍦板瓨鍌ㄧ殑 userInfo  
+        localStorage.removeItem('userInfo');  
+        // 鍙互鍦ㄨ繖閲岄噸缃簲鐢ㄧ姸鎬侊紝濡傚鑸埌鐧诲綍椤电瓑  
+        console.log('鐧诲嚭鎴愬姛');  
+      } else {  
+        // 澶勭悊閿欒鎯呭喌  
+        console.error('鐧诲嚭澶辫触', response);  
+      } 
 }
+catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
+// store.createWebSocket();
+// function quit() {
+//   userStore.$patch({
+//     user: null,
+//   })
+//   // router.push('/login')
+//   request.get("/loadGlass/sys/user/login").then((res) => {
+//     if (res.code === 200) {
+//     ElMessage.success(res.msg);
+//      console.log(res.data);
+//     } else {
+//     ElMessage.warning(res.msg);
+//     // router.push("/login");
+//     }
+//    });
+// }
 
 //鎻愬彇鑿滃崟妯″潡鍒楄〃
 let menuList = $ref([])
diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue
index 5b9d2a2..2c6fe1a 100644
--- a/UI-Project/src/views/Caching/cachingbefore.vue
+++ b/UI-Project/src/views/Caching/cachingbefore.vue
@@ -6,27 +6,47 @@
 const adda = ref(false)
 
 import request from "@/utils/request"
-import { ref, onMounted } from "vue";
+import { ref, onMounted , onBeforeUnmount} from "vue";
+import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 //  import LanguageMixin from './lang/LanguageMixin'
 
 const tableData = ref([])
 const slot = ref('')
+const adjustedRects = ref([]);
   
-
-request.post("/cacheGlass/edgStorageCage/selectEdgStorageCage").then((res) => {
-          if (res.code == 200) {
-            
-          console.log(res.data);
-          tableData.value = res.data
-          console.log(res.data[0].slot);
-          } else {
-          ElMessage.warning(res.msg)
-        
-          }
-          });
-
+onMounted(async () => {  
+  try {  
+    const response = await request.post('/cacheGlass/edgStorageCage/selectEdgStorageCage'); // 鏇挎崲涓轰綘鐨凙PI绔偣  
+    if (response.code === 200) {  
+      const rawRects = response.data; // 璁剧疆鐭╁舰鏁版嵁  
+          tableData.value = response.data
+          console.log(response.data);
+          adjustedRects.value = rawRects.map(rect => ({  
+            ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
+            width: rect.width * 0.5 ,
+            id: rect.id * 10,
+          })); 
+          console.log(adjustedRects.value);
+    } else {  
+      ElMessage.warning(res.msg)
+    }  
+  } catch (error) {  
+    // console.error('Error fetching rects :', error);  
+  }  
+}); 
+const toggleEnableState = async (row) => {  
+  const newState = row.enable_state === 1 ? 0 : 1;  
+  // 鍙戦�佽姹傚埌鍚庣鏇存柊鐘舵�侊紙杩欓噷鐪佺暐浜嗗疄闄呯殑璇锋眰閫昏緫锛�  
+  const response = await request.post('/cacheGlass/edgStorageCage/updateEdgStorageCage', { id: row.id, enablestate: newState });  
+  if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+  row.enable_state = newState;  
+}; 
 const open = async(row) => {  
   try {  
     const confirmResult = await ElMessageBox.confirm(  
@@ -57,46 +77,31 @@
     // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
     console.error('鍙戠敓閿欒:', error);  
   }  
-};  
+};   
+const socketUrl = `ws://10.153.19.150:88/api/cacheGlass/api/talk/cacheGlass`;
+// 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
+const handleMessage = (data) => {
+  // 鏇存柊 tableData 鐨勬暟鎹�
+  tableData.value = data.EdgStorageCageinfos[0]
+  // adjustedRects.value = data.EdgStorageCageinfos[0]
+  adjustedRects.value = data.EdgStorageCageinfos[0].map(rect => ({  
+            ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
+            width: rect.width * 0.5 ,
+            id: rect.id * 10,
+          })); 
 
-const gridOptions = reactive({
-  border:  "full",//琛ㄦ牸鍔犺竟妗�
-  keepSource: true,//淇濇寔婧愭暟鎹�
-  align: 'center',//鏂囧瓧灞呬腑
-  stripe:true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true,height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
-  id: 'OrderList',
-  showFooter: true,//鏄剧ず鑴�
-  printConfig: {},
-  importConfig: {},
-  exportConfig: {},
-  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
-  showOverflow:true,
-  columnConfig: {
-    resizable: true,
-    useKey: true
-  },
-  filterConfig: {   //绛涢�夐厤缃」
-    remote: true
-  },
-  customConfig: {
-    storage: true
-  },
-  editConfig: {
-    trigger: 'click',
-    mode: 'row',
-    showStatus: true
-  },
-  data:  [
-    {
-      'id': '1',
-      'long': '5',
-      'wide': '1005',
-      'thick': '183.6',
-    }
-  ]
- 
-})
+};
+// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
+onMounted(() => {
+  // fetchFlowCardId();
+  // fetchTableData(); // 鑾峰彇鏁版嵁
+  initializeWebSocket(socketUrl, handleMessage);
+});
+
+onBeforeUnmount(() => {
+  console.log("鍏抽棴浜�")
+  closeWebSocket();
+});
 </script>
 
 <template>
@@ -116,9 +121,17 @@
             min-width="80"
             prop="enable_state"
           >
-          <template #default="scope">
+          <template #default="scope">  
+          <el-tag  
+            :type="scope.row.enable_state === 1 ? 'success' : 'danger'"  
+            @click="toggleEnableState(scope.row)"  
+          >  
+            {{ scope.row.enable_state === 1 ? '鍚敤' : '绂佺敤' }}  
+          </el-tag>  
+        </template> 
+          <!-- <template #default="scope">
             <el-tag type="success" >{{ scope.row.enable_state==1?"鍚敤":"鏈惎鐢�"  }}</el-tag>
-          </template>
+          </template> -->
           </el-table-column>
           <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
             <template #default="scope">
@@ -131,10 +144,21 @@
     </el-card>
   </div>
   <div id="awatch">
-    <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;">
-<div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: -124px;margin-left: 480px;"></div>
+    <img src="../../assets/woshihuancun.png" alt="" style="width: 60%;height: 90%;margin-left: 260px;margin-top: 20px;position: relative;"> 
+    <div style="position: absolute; width: 500px;height: 95px;margin-top: -165px;margin-left: 450px;">
+    <div  
+      v-for="(rect, index) in adjustedRects"  
+      :key="rect"  
+      :style="{ position: 'absolute', 
+       top: `${rect.id}px`, left: `10px`, width: `${rect.width}px`, height: `5px`,
+      backgroundColor: '#409EFF'
+       }"  
+    >
+    </div>
+  </div>
+<!-- <div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: -124px;margin-left: 480px;"></div>
 <div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: -30px;margin-left: 850px;"></div>
-<div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: 30px;margin-left: 695px;"></div>
+<div style="width: 100px;height: 10px;background-color: #409EFF;margin-top: 30px;margin-left: 695px;"></div> -->
 </div>
 </template>
 
@@ -157,6 +181,7 @@
 }
 #awatch{
   height: 460px;
+  width: 1500px;
   /* margin-top: -60px; */
 }
 </style>
\ No newline at end of file
diff --git a/UI-Project/src/views/Identify/identify.vue b/UI-Project/src/views/Identify/identify.vue
index 2d500f6..350535f 100644
--- a/UI-Project/src/views/Identify/identify.vue
+++ b/UI-Project/src/views/Identify/identify.vue
@@ -42,8 +42,9 @@
 <script setup lang="ts">  
 import { Delete, Upload } from '@element-plus/icons-vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
-import { ref, onMounted } from 'vue';  
+import { ref, onMounted, onBeforeUnmount } from 'vue';  
 import request from "@/utils/request"
+import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 const blind = ref(false)
 const olWidth = ref(); 
 const olHeight = ref();
@@ -83,8 +84,8 @@
         height:( rect.height*100) * 0.004 ,
         glass_state: rect.glass_state
       }));  
+      console.log(adjustedRects.value);
       
-        console.log(rect);
 
       //   console.log( (rect.width*100) / 300 );
     } else {  
@@ -174,6 +175,38 @@
     }  
   });  
 }
+const socketUrl = `ws://10.153.19.150:88/api/cacheGlass/api/talk/cacheGlass`;
+// 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
+const handleMessage = (data) => {
+  // 鏇存柊 tableData 鐨勬暟鎹�
+  
+  // adjustedRects.value = data.currentCutTerritory[0]
+  adjustedRects.value = data.currentCutTerritory[0].map(rect => ({  
+        ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
+        x_axis: (rect.x_axis*100) * 0.005, // 灏唜鍊奸櫎浠�3  
+        y_axis: (rect.y_axis*100) * 0.005,
+        width: (rect.width*100) * 0.004 ,
+        widtha: rect.width ,
+        heighta: rect.height ,
+        height:( rect.height*100) * 0.004 ,
+        glass_state: rect.glass_state
+      }));  
+ // console.log("鏇存柊鍚庢暟鎹�", tableData);
+
+};
+
+// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
+
+onMounted(() => {
+  // fetchFlowCardId();
+  // fetchTableData(); // 鑾峰彇鏁版嵁
+  initializeWebSocket(socketUrl, handleMessage);
+});
+
+onBeforeUnmount(() => {
+  console.log("鍏抽棴浜�")
+  closeWebSocket();
+});
 </script>  
   
 <style scoped>  
diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue
index eddab30..dd2b52c 100644
--- a/UI-Project/src/views/Returns/returns.vue
+++ b/UI-Project/src/views/Returns/returns.vue
@@ -4,7 +4,6 @@
 import {useRouter} from "vue-router"
 const router = useRouter()
 import type { TableColumnCtx } from 'element-plus'
- 
 import { ElMessage, ElMessageBox } from 'element-plus'
 const dialogFormVisible = ref(false)
 const blind = ref(false)
@@ -14,54 +13,61 @@
 const adda = ref(false)
 const flake = ref(false)
 const flakea = ref(false)
-// const patternHeight = ref('');
-// const patternWidth = ref('');
-// const filmsId = ref('');
-// const patternThickness = ref('');
-// const number = ref('');
-//  patternHeight.value = '';
-    //  patternWidth.value = '';
-    //  filmsId.value = '';
-    //  patternThickness.value = '';
-    //  number.value = '';
+import { WebSocketHost } from '@/utils/constants'
 import request from "@/utils/request"
 const ida = ref(null); 
-import { ref, onMounted, onUnmounted } from "vue";
-// import http from "@/http/index";
- 
-let ruleForm = ref({
-  projectNo: '',
-  workstationId: '',
-  patternHeight: '',
-  patternWidth: '',
-  filmsId: '',
-  patternThickness: '',
-  number: '',
- 
-})
-const tableDataa = ref([])
-  
- 
+import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
+import { ref, onMounted, onUnmounted, onBeforeUnmount } from "vue";
+// 鍝嶅簲寮忔暟鎹�  
+const selectedProjectNo = ref(''); // 褰撳墠閫変腑鐨勫伐绋嬪彿  
+const selectedProjectNoa = ref(''); // 褰撳墠閫変腑鐨勫伐绋嬪彿  
+const selectedValue = ref(''); // 褰撳墠閫変腑鐨勫  
+const selectedValuea = ref('');  
+const selectedValueb = ref('');
+const selectedValuec = ref(''); 
+const upstatus = ref(''); // 鍋囪杩欎釜鐢ㄤ簬鏄剧ず鑷姩/鎵嬪姩鐘舵��  
+const cuttingMachine = ref(''); // 鍋囪杩欎釜鐢ㄤ簬瀛樺偍鍚庣杩斿洖鐨勭姸鎬佸�硷紙0鎴�1锛�  
+const cuttingMachineStatusColor = ref(''); // 鐢ㄤ簬鍔ㄦ�佽缃甶鏍囩鐨勮儗鏅壊 
+const inKageWord = ref(0); // 鐢ㄤ簬瀛樺偍瑕佷紶閫掔粰鎺ュ彛鐨刬nKageWord鍊� 
+const options = ref<any[]>([]); // 涓嬫媺閫夐」鍒楄〃  
+const selectOptions = ref<Array<any>>([]); // 涓嬫媺閫夐�夐」鏁扮粍  
+const selectOptionsa = ref<Array<any>>([]); // 涓嬫媺閫夐�夐」鏁扮粍  
+const selectOptionsb = ref<Array<any>>([]); // 涓嬫媺閫夐�夐」鏁扮粍  
+const selectOptionsc = ref<Array<any>>([]); // 涓嬫媺閫夐�夐」鏁扮粍  
+  const tableDataa = ref([])
   const tableData = reactive([]);
-//   let filterData = ref({
-//   damageDetails: {
-//     state: '',
-//   },
- 
-// })
-// 鍙戦�佽幏鍙栬〃鏍兼暟鎹殑璇锋眰
-const fetchTableData = async () => {
+  const fetchTableData = async () => {
   try {
     const response = await request.get("/loadGlass/up-patten-usage/prioritylist");
- 
     // 妫�鏌ュ搷搴旂姸鎬�
     if (response.code === 200) {
       // 鏇存柊琛ㄦ牸鏁版嵁
       console.log('鎴愬姛鑾峰彇琛ㄦ牸鏁版嵁:', response.data);
       tableData.splice(0, tableData.length, ...response.data);
-      window.localStorage.setItem('engineeringId', response.data[0].engineeringId)
+      // window.localStorage.setItem('engineeringId', response.data[0].engineeringId)
+      // 鑾峰彇鍞竴鍊�
+      const uniqueWidths = new Set(response.data.map(item => item.width));  
+      const uniqueHeights = new Set(response.data.map(item => item.height));  
+      const uniqueFilmsIds = new Set(response.data.map(item => item.filmsId));  
+      const uniqueThicknesses = new Set(response.data.map(item => item.thickness));  
+  
+      selectOptions.value = Array.from(uniqueWidths).map(width => ({ 
+      value: width, // 鍋囪杩欐槸浣犳兂瑕佷綔涓簐alue鐨勫睘鎬�  
+      label: width, // 鍋囪杩欐槸浣犳兂瑕佹樉绀虹殑label  
+    }));  
+      selectOptionsa.value = Array.from(uniqueHeights).map(height => ({ 
+      value: height, 
+      label: height, 
+    })); 
+    selectOptionsb.value = Array.from(uniqueFilmsIds).map(filmsId => ({
+      value: filmsId,
+      label: filmsId, 
+    })); 
+    selectOptionsc.value = Array.from(uniqueThicknesses).map(thickness => ({
+      value: thickness,
+      label: thickness,  
+    })); 
     } else {
-      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.msg);
     }
   } catch (error) {
@@ -69,135 +75,45 @@
     // ElMessage.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触锛岃閲嶈瘯');
   }
 };
-onMounted(async () => {  
-  await fetchTableData();  
-  
-  // 璁剧疆瀹氭椂鍣ㄦ潵瀹氭湡鍒锋柊鏁版嵁  
-  const intervalId = setInterval(async () => {  
-    await fetchTableData();  
-  }, 1000); // 姣�1绉掑埛鏂颁竴娆�  
-  
-  // 缁勪欢鍗歌浇鏃舵竻闄ゅ畾鏃跺櫒  
-  onUnmounted(() => {  
-    clearInterval(intervalId);  
-  });  
-}); 
-onMounted(async () => {  
-  await fetchTableDataa();  
-  
-  // 璁剧疆瀹氭椂鍣ㄦ潵瀹氭湡鍒锋柊鏁版嵁  
-  const intervalId = setInterval(async () => {  
-    await fetchTableDataa();  
-  }, 1000); // 姣�1绉掑埛鏂颁竴娆�  
-  
-  // 缁勪欢鍗歌浇鏃舵竻闄ゅ畾鏃跺櫒  
-  onUnmounted(() => {  
-    clearInterval(intervalId);  
-  });  
-}); 
-  //  request.get("/loadGlass/LoadGlass/list").then((res) => {
-  //   if (res.code === 200) {
-  //    console.log(res.data);
-  //    tableDataa.value = res.data;
-   
-  //   if (tableDataa.value.length === 2) {
-  //    if (tableDataa.value[0].patternWidth > 0) {
-  //     flake.value = true;
-  //    }
- 
-  //   if (tableDataa.value[1].patternWidth > 0) {
-  //   flakea.value = true;
-  //   }
-  //   }
-  //   } else {
-  //   ElMessage.warning(res.msg);
-  //   // router.push("/login");
-  //   }
-  //  });
-   async function fetchTableDataa() {  
-  try {  
-    const res = await request.get("/loadGlass/LoadGlass/list");  
-    if (res.code === 200) {  
-      tableDataa.value = res.data;  
-  
-      // 鏍规嵁鏁版嵁鏇存柊 flake 鍜� flakea 鐨勫��  
-      if (res.data.length >= 2) {  
-        if (res.data[0].patternWidth > 0) {  
-          flake.value = true;  
-        } else {  
-          flake.value = false;  
-        }  
-  
-        if (res.data[1].patternWidth > 0) {  
-          flakea.value = true;  
-        } else {  
-          flakea.value = false;  
-        }  
-      }  
-    } else {  
-      ElMessage.warning(res.msg);  
-    }  
-  } catch (error) {  
-    console.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触', error);  
-    // 鍙互鍦ㄨ繖閲屾坊鍔犻澶栫殑閿欒澶勭悊閫昏緫  
-  }  
-}  
-// request.get("/loadGlass/LoadGlass/list").then((res) => {
-//       window.localStorage.setItem('patternWidth', res.data.patternWidth)
-//       window.localStorage.setItem('workstationId', res.data.workstationId)
-//           if (res.code == 200) {
-//           console.log(res.data);
-//           tableDataa.value = res.data
-//           console.log(res.data.patternWidth);
+request.get("/loadGlass/LoadGlass/list").then((res) => {
+      window.localStorage.setItem('patternWidth', res.data.patternWidth)
+      window.localStorage.setItem('workstationId', res.data.workstationId)
+          if (res.code == 200) {
+          console.log(res.data);
+          tableDataa.value = res.data
+          console.log(res.data.patternWidth);
           
-//       let workstationId = window.localStorage.getItem('workstationId')
-//       let patternWidth = window.localStorage.getItem('patternWidth')
-//       if (patternWidth !== '' || workstationId == '1') {
-//       flake.value = true
-//     } else if (patternWidth !== '' || workstationId == '2') {
-//       flakea.value = true
-//     }
-//           } else {
-//           ElMessage.warning(res.msg)
-//           // router.push("/login")
-//           }
-//           });
+      let workstationId = window.localStorage.getItem('workstationId')
+      let patternWidth = window.localStorage.getItem('patternWidth')
+      if (patternWidth !== '' || workstationId == '1') {
+      flake.value = true
+    } else if (patternWidth !== '' || workstationId == '2') {
+      flakea.value = true
+    }
+          } else {
+          ElMessage.warning(res.msg)
+          // router.push("/login")
+          }
+          });
 //瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
 const titleSelectJson = ref({
   processType: [],
- 
 })
 const titleSelectJsona = ref({
   processTypea: [],
- 
 })
-// const getBasicData = ref({
-//   id: '',
-//   projectNo: '',
-// })
-// const requestData = {
-//     // projectNo:"P24030805",
-//     state:100
-//   };
-// request.post("/loadGlass/optimizeProject/listByState", requestData)
-// .then((res) => {
-//           if (res.code == 200) {
-//     titleSelectJson.value.processType = res.data;
-//           console.log(res.data);
-//           } else {
-//           ElMessage.warning(res.msg)
-//           // router.push("/login")
-//           }
-//           });
-          // 鍒濆璇锋眰鍙傛暟  
+const socketUrl = `ws://10.153.19.150:88/api/loadGlass/api/talk/loadGlass`;
+// 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
+const handleMessage = (data) => {
+  // 鏇存柊 tableData 鐨勬暟鎹�
+
+  tableData.splice(0, tableData.length, ...data.prioritylist[0]);
+  tableDataa.value = data.list[0]
+ // console.log("鏇存柊鍚庢暟鎹�", tableData);
+};
 const requestData = {  
   state: 100  
 };  
-// 鍝嶅簲寮忔暟鎹�  
-const selectedProjectNo = ref(''); // 褰撳墠閫変腑鐨勫伐绋嬪彿  
-const selectedProjectNoa = ref(''); // 褰撳墠閫変腑鐨勫伐绋嬪彿  
-const options = ref<any[]>([]); // 涓嬫媺閫夐」鍒楄〃  
-  
 // 璋冪敤鎺ュ彛鑾峰彇閫夐」鏁版嵁鐨勫嚱鏁�  
 const fetchOptions = async (queryString: string) => {  
   try {  
@@ -218,22 +134,6 @@
     console.error('Error fetching options:', error);  
   }  
 };  
-  // 寮�濮嬩笂鐗囦笅鎷夐��  
-const fetchOptionsa = async (queryString: string) => {  
-  try {  
-    // 鍙戦�佽姹傚埌鍚庣鎺ュ彛  
-    const response = await request.get('/loadGlass/engineering/engineering/selectTask');  
-    if (response.code == 200) {  
-    titleSelectJsona.value.processTypea = response.data;
-    console.log(response.data);
- 
-    } else {  
-      ElMessage.warning(response.data);  
-    }  
-  } catch (error) {  
-    console.error('Error fetching options:', error);  
-  }  
-}; 
 // 澶勭悊鐢ㄦ埛杈撳叆鍙樺寲鐨勬柟娉�  
 const handleInputChange = async (value: string) => {  
   if (value) {  
@@ -252,28 +152,14 @@
 };  
 // 鍒濆鍖栧姞杞芥暟鎹紙濡傛灉闇�瑕侊級  
 onMounted(() => {  
-  // 鍦ㄧ粍浠舵寕杞藉悗璋冪敤 fetchOptions('') 鏉ュ姞杞藉垵濮嬫暟鎹紙濡傛灉闇�瑕侊級  
   fetchOptions('');  
+  initializeWebSocket(socketUrl, handleMessage);
 });  
-onMounted(() => {  
-  // 鍦ㄧ粍浠舵寕杞藉悗璋冪敤 fetchOptions('') 鏉ュ姞杞藉垵濮嬫暟鎹紙濡傛灉闇�瑕侊級  
-  fetchOptionsa('');  
-}); 
-// const billall  = () => {
-//   request.post("/loadGlass/optimizeProject/listByState", requestData)
-//     .then((res: any) => {
-//       // if (res.code == 200) {
-//       tableData.value = res.data;
-//       // let self = this
-//       // }
-//     })
-//     .catch((err: any) => {});
-// }
+onBeforeUnmount(() => {
+  console.log("鍏抽棴浜�")
+  closeWebSocket();
+});
 const user = ref('');
-// 瀹氫箟琛ㄥご涓婁紶鏁版嵁
-// let titleUploadData = ref({
-//   projectNo:'',
-// })
 const projectNo = ref('');
 const workstationId = ref('');
 const id = ref('');
@@ -298,10 +184,10 @@
     const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
       id: workstationId.value,
       workstationId: workstationId.value,
-      patternHeight: patternHeight.value,
-      patternWidth: patternWidth.value,
-      filmsId: filmsId.value,
-      patternThickness: patternThickness.value,
+      patternHeight: selectedValuea.value,
+      patternWidth: selectedValue.value,
+      filmsId: selectedValueb.value,
+      patternThickness: selectedValuec.value,
       number: number.value
     }); 
     if (response.code == 200) {
@@ -310,11 +196,11 @@
       // window.location.reload() 
       add.value = false;
      tableDataa.value = response.data;
-    //  patternHeight = '';
-    //  patternWidth.value = '';
-    //  filmsId.value = '';
-    //  patternThickness.value = '';
-    //  number.value = '';
+      selectedValuea.value = '';
+      selectedValue.value = '';
+      selectedValueb.value = '';
+      selectedValuec.value = '';
+      number.value = '';
       window.localStorage.setItem('workstationId', response.data.workstationId)
       let workstationId = window.localStorage.getItem('workstationId')
       if (workstationId == '1') {
@@ -337,10 +223,10 @@
     const response = await request.post('/loadGlass/LoadGlass/updateGlassMessage', {
       id: workstationId.value,
       workstationId: workstationId.value,
-      patternHeight: patternHeight.value,
-      patternWidth: patternWidth.value,
-      filmsId: filmsId.value,
-      patternThickness: patternThickness.value,
+      patternHeight: selectedValuea.value,
+      patternWidth: selectedValue.value,
+      filmsId: selectedValueb.value,
+      patternThickness: selectedValuec.value,
       number: number.value
     }); 
     if (response.code == 200) {
@@ -349,6 +235,11 @@
       // window.location.reload() 
       add.value = false;
      tableDataa.value = response.data;
+      selectedValuea.value = '';
+      selectedValue.value = '';
+      selectedValueb.value = '';
+      selectedValuec.value = '';
+      number.value = '';
       window.localStorage.setItem('workstationId', response.data.workstationId)
       let workstationId = window.localStorage.getItem('workstationId')
       if (workstationId == '1') {
@@ -410,15 +301,40 @@
 // 閫夋嫨宸ョ▼纭
 const handleup = async () => {
   try  {
-  const response = await request.post('/loadGlass/up-patten-usage/saveUpPattenUsage', {
+  const response = await request.post('/loadGlass/up-patten-usage/selectUpPattenUsage', {
     engineerId: selectedProjectNo.value,
     })
+      window.localStorage.setItem('engineeringId', selectedProjectNo.value)
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
       // window.location.reload() 
       dialogFormVisible.value = false;
+      tableData.splice(0, tableData.length, ...response.data);
       selectedProjectNo.value = ''
+      markingMachineStatus.value = '#911005';  
+      cuttingMachineStatus.value = '#911005';  
+      const uniqueWidths = new Set(response.data.map(item => item.width));  
+      const uniqueHeights = new Set(response.data.map(item => item.height));  
+      const uniqueFilmsIds = new Set(response.data.map(item => item.filmsId));  
+      const uniqueThicknesses = new Set(response.data.map(item => item.thickness));  
+  
+      selectOptions.value = Array.from(uniqueWidths).map(width => ({ 
+      value: width, // 鍋囪杩欐槸浣犳兂瑕佷綔涓簐alue鐨勫睘鎬�  
+      label: width, // 鍋囪杩欐槸浣犳兂瑕佹樉绀虹殑label  
+    }));  
+      selectOptionsa.value = Array.from(uniqueHeights).map(height => ({ 
+      value: height, 
+      label: height, 
+    })); 
+    selectOptionsb.value = Array.from(uniqueFilmsIds).map(filmsId => ({
+      value: filmsId,
+      label: filmsId, 
+    })); 
+    selectOptionsc.value = Array.from(uniqueThicknesses).map(thickness => ({
+      value: thickness,
+      label: thickness,  
+    })); 
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
       ElMessage.error(response.msg);
@@ -431,9 +347,14 @@
 }
 // 寮�濮嬩笂鐗�
 const handle = async () => {
+  if (markingMachineStatus.value === 'green' && cuttingMachineStatus.value === 'green') {  
+      
   try  {
+  let engineeringId = window.localStorage.getItem('engineeringId')
+console.log(engineeringId);
+
   const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
-    engineerId: selectedProjectNoa.value,
+    engineerId: engineeringId,
     state: 1,
     })
     if (response.code == 200) {
@@ -441,7 +362,6 @@
       ElMessage.success(response.message);
       // window.location.reload() 
       blind.value = false;
-      tableData.splice(0, tableData.length, ...response.data);
       selectedProjectNoa.value = ''
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
@@ -452,6 +372,10 @@
     // 澶勭悊閿欒
     console.error(error);
   }
+    } else if (markingMachineStatus.value === '#911005' || cuttingMachineStatus.value === '#911005') {  
+      // 鎻愮ず鐢ㄦ埛鎵撴爣鏈烘湭灏辩华  
+      ElMessage.warning('璇风‘璁ゆ墦鏍囨満鍜屽垏鍓叉満鐨勫氨缁姸鎬侊紒');  
+    } 
 }
 // 鏆傚仠
 const handlea = async () => {
@@ -459,17 +383,13 @@
   let engineeringId = window.localStorage.getItem('engineeringId')
 console.log(engineeringId);
 if (engineeringId !== '') {
-  const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
+  const response = await request.post('/loadGlass/engineering/engineering/pauseTask', {
       engineeringId: engineeringId,
       state: 0,
     })
     if (response.code == 200) {
-      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
-      // window.location.reload() 
       blinda.value = false;
-      // tableData.value = response.data
-      // tableData.value = [];
       tableData.splice([]);
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
@@ -494,7 +414,7 @@
   let engineeringId = window.localStorage.getItem('engineeringId')
 console.log(engineeringId);
 if (engineeringId !== '') {
-  const response = await request.post('/loadGlass/engineering/engineering/changeTask', {
+  const response = await request.post('/loadGlass/engineering/engineering/pauseTask', {
       engineeringId: engineeringId,
       state: 0,
     })
@@ -522,7 +442,6 @@
   }
 }
 onMounted(fetchTableData);
-onMounted(fetchTableDataa);
 function getStatusText(state: number) {
   switch (state) {
     case 0:  
@@ -533,115 +452,149 @@
       return '涓婄墖涓�';  
     case 100:  
       return '宸插畬鎴�';  
-    default:  
-      return '鏈煡鐘舵��';  
   }  
 }  
-  
 function getStatusType(state: number) {  
-  // 杩欓噷鍋囪鍙湁100鏃剁被鍨嬩笉鏄痵uccess锛屽叾浠栭兘鏄痵uccess  
-  return state === 100 ? 'info' : 'success'; // 鏍规嵁闇�瑕佽皟鏁寸被鍨�  
+  switch (state) {  
+    case 0:
+      return 'warning';  
+    case 1: 
+      return 'primary';  
+    case 2: 
+      return 'primary';  
+    case 100:
+      return 'success';  
+  }  
 }  
-// const open = () => {
-//   ElMessageBox.confirm(
-//     '鏄惁鍒犻櫎璇ユ潯淇℃伅?',
-//     '鎻愮ず',
-//     {
-//       confirmButtonText: '鏄�',
-//       cancelButtonText: '鍙栨秷',
-//       type: 'warning',
-//     }
-//   )
-//     .then(() => {
-//       ElMessage({
-//         type: 'success',
-//         message: '鍒犻櫎鎴愬姛锛�',
-//       })
-//     })
-//     .catch(() => {
-//       ElMessage({
-//         type: 'info',
-//         message: '鍒犻櫎澶辫触',
-//       })
-//     })
-// }
 // 寮�濮嬩笂鐗�
 const handleBind = (row) => {
-  // engineeringId.value = row.engineeringId; 
- 
   blind.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
 };
 // 鏆傚仠
 const handleBinda = (row) => {
-  // engineeringId.value = row.engineeringId; 
- 
-  blinda.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+  blinda.value = true;
 };
 // 鍋滄浠诲姟
 const handleBindb = (row) => {
-  // engineeringId.value = row.engineeringId; 
- 
-  blindb.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+  blindb.value = true; 
 };
 
 // 鍒犻櫎
 const handleBindRacka = (row) => {
-  workstationId.value = row.workstationId; // 鍋囪rackNumber鏄灦鍙峰瓧娈电殑灞炴�у悕
- 
-  adda.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+  workstationId.value = row.workstationId;
+  adda.value = true; 
 };
-const gridOptions = reactive({
-  border:  "full",//琛ㄦ牸鍔犺竟妗�
-  keepSource: true,//淇濇寔婧愭暟鎹�
-  align: 'center',//鏂囧瓧灞呬腑
-  stripe:true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true,height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
-  id: 'OrderList',
-  showFooter: true,//鏄剧ず鑴�
-  printConfig: {},
-  importConfig: {},
-  exportConfig: {},
-  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
-  showOverflow:true,
-  columnConfig: {
-    resizable: true,
-    useKey: true
-  },
-  filterConfig: {   //绛涢�夐厤缃」
-    remote: true
-  },
-  customConfig: {
-    storage: true
-  },
-  editConfig: {
-    trigger: 'click',
-    mode: 'row',
-    showStatus: true
-  },
-  data:  [
-    {
-      'id': '1',
-      'long': '5',
-      'wide': '1005',
-      'thick': '183.6',
-    }
-  ],
-})
+// 瀹氫箟涓�涓搷搴斿紡寮曠敤锛岀敤浜庡瓨鍌ㄩ鑹茬姸鎬�  
+const markingMachineStatus = ref('#911005');  
+const cuttingMachineStatus = ref('#911005');  
+// 瀹氫箟涓�涓柟娉曟潵鏀瑰彉棰滆壊鐘舵��  
+const confirmMarkingMachine = () => {  
+  markingMachineStatus.value = 'green';  
+}; 
+const confirmCuttingMachine = () => {  
+  cuttingMachineStatus.value = 'green';  
+}; 
+
+
+
+const wsUrl = 'ws://10.153.19.150:88/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.onclose = (event) => {  
+  if (event.wasClean) {  
+    console.log('WebSocket杩炴帴宸叉甯稿叧闂�');  
+  } else {  
+    console.error('WebSocket杩炴帴寮傚父鍏抽棴');  
+  }  
+};  
+  
+// 鐩戝惉WebSocket鐨勬秷鎭簨浠�  
+ws.onmessage = (event) => {  
+  // 鍋囪鏈嶅姟鍣ㄥ彂閫佺殑鏄疛SON鏍煎紡鐨勫瓧绗︿覆  
+  try {  
+    const data = JSON.parse(event.data); // 瑙f瀽娑堟伅涓篔SON  
+  
+    // 鍋囪鏈嶅姟鍣ㄥ彂閫佺殑鏁版嵁缁撴瀯鏄� { InkageStatus: ["1"] }  
+    if (data && Array.isArray(data.InkageStatus) && data.InkageStatus.length > 0) {  
+      const status = data.InkageStatus[0]; 
+      cuttingMachine.value = status; 
+      upstatus.value = status === '1' ? '涓婄墖鏈鸿仈鏈虹姸鎬侊細' : '涓婄墖鏈烘墜鍔ㄧ姸鎬侊細';
+      cuttingMachineStatusColor.value = status === '1' ? '#911005' : 'green';  
+      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', 
+      inKageWord.value
+  );  
+    if (response.code == 200) {  
+      const status = response.data.status; 
+      upstatus.value = status === '1' ? '涓婄墖鏈鸿仈鏈虹姸鎬侊細' : '涓婄墖鏈烘墜鍔ㄧ姸鎬侊細';  
+      cuttingMachineStatusColor.value = status === '1' ? '#911005' : 'green';  
+      // 鏄剧ず鎴愬姛娑堟伅  
+      ElMessage.success(response.message);  
+    } else {  
+      ElMessage.error(response.message || '璇锋眰澶辫触');  
+    }  
+  } catch (error) {  
+    // 澶勭悊閿欒  
+    console.error('璇锋眰鏃跺彂鐢熼敊璇�', error);  
+    ElMessage.error('璇锋眰鏃跺彂鐢熼敊璇�');  
+  }  
+};
+// const confirmCutting = async () => {
+//   try  {
+//   const response = await request.post('/loadGlass/LoadGlass/updateMesInkageLoad', {
+//     inKageWord: inKageWord.value
+//     })
+//     if (response.code == 200) {
+//       inKageWord == '1' ? '涓婄墖鏈鸿仈鏈虹姸鎬侊細' : '涓婄墖鏈烘墜鍔ㄧ姸鎬侊細';
+//       inKageWord.value == '1' ? '#911005' : 'green';  
+//       ElMessage.success(response.message);
+//     } else {
+//       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+//       ElMessage.error(response.msg);
+//     }
+// }
+// catch (error) {
+//     // 澶勭悊閿欒
+//     console.error(error);
+//   }
+// }
 </script>
  
 <template>
   <div>
     <div id="dotClass">
-      <div>鎵撴爣鏈哄氨缁姸鎬侊細</div>
-      <i style="margin-top: 2px; background-color: green;width:18px;  height:18px;  border-radius: 50%;  display: block"></i>
-    <el-button style="margin-left: 30px;margin-top: -3px;">鎵嬪姩纭</el-button>
- 
+      <div>鎵撴爣鏈哄氨缁姸鎬侊細</div>  
+    <i :style="{ marginTop: '2px', backgroundColor: markingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>  
+    <el-button @click="confirmMarkingMachine" style="margin-left: 30px;margin-top: -3px;">纭</el-button>
     <div style="margin-left: 70px;">鍒囧壊鏈哄氨缁姸鎬侊細</div>
-     <i style="margin-top: 2px; background-color: #911005 ;width:18px;  height:18px;  border-radius: 50%;  display: block"></i>
-    <el-button style="margin-left: 30px;margin-top: -3px;" >鎵嬪姩纭</el-button>
-   </div>
+    <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatus, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>  
+    <el-button @click="confirmCuttingMachine" style="margin-left: 30px;margin-top: -3px;" >纭</el-button>
+    <div style="margin-left: 70px;">{{ upstatus  }} </div>
+    <i :style="{ marginTop: '2px', backgroundColor: cuttingMachineStatusColor, width: '18px', height: '18px', borderRadius: '50%', display: 'block' }"></i>  
+    <el-button @click="confirmCutting" style="margin-left: 30px;margin-top: -3px;" >纭</el-button>
+   
+  </div>
     <el-button style="margin-top: 5px;margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">閫夋嫨宸ョ▼</el-button>
-    <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="primary" @click="handleBind">寮�濮嬩笂鐗�</el-button>
+    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">寮�濮嬩笂鐗�</el-button>
     <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">鏆傚仠</el-button>
     <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="danger" @click="handleBindb">鍋滄浠诲姟</el-button>
     
@@ -655,7 +608,7 @@
     >
     <el-table-column prop="engineeringId" label="宸ョ▼鍙�" width="200" align="center"/>
       <el-table-column prop="width" label="鍘熺墖瀹�" align="center"/>
-      <el-table-column prop="height" label="鍘熺墖闀�" align="center"/>
+      <el-table-column prop="height" label="鍘熺墖楂�" align="center"/>
       <el-table-column prop="filmsId" label="鑶滅郴" align="center"/>
       <el-table-column prop="layoutSequence" label="鏁伴噺" align="center"/>
       <el-table-column prop="thickness" label="鍘氬害" align="center"/>
@@ -670,34 +623,11 @@
           {{ getStatusText(scope.row.state) }}  
         </el-tag>  
       </template> 
-          <!-- <template #default="scope">
-            <el-tag type="success" >{{ scope.row.state==0?"绛夊緟涓�":"涓婄墖涓�"  }}</el-tag>
-          </template> -->
           </el-table-column>
     </el-table>
       </div>
-      
     </el-card>
-    <el-dialog v-model="blind" top="24vh" width="30%" title="鏄惁寮�濮嬩笂鐗囷紵" >
-    <div style="margin-left: 50px;margin-bottom: 10px;">
-      <el-form-item label="宸ョ▼鍙凤細" :required="true">
-        <el-select  
-           v-model="selectedProjectNoa"  
-           filterable  
-           clearable  
-           placeholder="璇烽�夋嫨宸ョ▼"  
-           style="width: 220px"  
-           @input="handleInputChangea"  
-         >  
-      <el-option  
-         v-for="item in titleSelectJsona['processTypea']"  
-         :key="item.id"  
-         :label="item.engineerId"  
-         :value="item.engineerId"  
-      />  
-    </el-select>  
-              </el-form-item>
-          </div>
+  <el-dialog v-model="blind" top="30vh" width="25%" title="鏄惁寮�濮嬩笂鐗�?" >
     <template #footer>
       <div id="dialog-footer">
         <el-button type="primary" @click="handle">
@@ -707,16 +637,6 @@
       </div>
     </template>
   </el-dialog>
-  <!-- <el-dialog v-model="blind" top="30vh" width="25%" title="鏄惁寮�濮嬩笂鐗�?" >
-    <template #footer>
-      <div id="dialog-footer">
-        <el-button type="primary" @click="handle">
-          纭
-        </el-button>
-        <el-button @click="blind = false">鍙栨秷</el-button>
-      </div>
-    </template>
-  </el-dialog> -->
   <el-dialog v-model="blinda" top="30vh" width="25%" title="鏄惁鏆傚仠?" >
     <template #footer>
       <div id="dialog-footer">
@@ -743,9 +663,10 @@
         <div id="overlaya" v-show="flakea"></div>
       </div>
       <div style="margin-top: -350px;margin-left: 650px;">
-        <el-table :data="tableDataa" border style="width: 60%"
+        <el-table :data="tableDataa" border style="width: 70%"
      :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
         >
+          <el-table-column prop="workstationId" align="center" label="宸ヤ綅" min-width="50" />
           <el-table-column prop="patternWidth" align="center" label="瀹�" min-width="80" />
           <el-table-column prop="patternHeight" align="center" label="楂�" min-width="80" />
           <el-table-column prop="filmsId" align="center" label="鑶滅郴" min-width="80" />
@@ -767,15 +688,44 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
-              <el-form-item label="楂橈細" :required="true" style="width: 14vw">
-                <el-input  v-model="patternHeight" autocomplete="off" />
-              </el-form-item></div></div>
+              <el-form-item label="瀹斤細" :required="true" style="width: 14vw">
+               <el-select  
+                      v-model="selectedValue"  
+                      filterable  
+                      clearable  
+                      placeholder="璇烽�夋嫨瀹�"  
+                      style="width: 220px"  
+                      @input="handleInputChangea"  
+                    >  
+                 <el-option  
+                    v-for="item in selectOptions"  
+                    :key="item.id"  
+                    :label="item.label"  
+                    :value="item.value"  
+                 />  
+               </el-select>  
+              </el-form-item>
+              </div></div>
           </el-col>
           <el-col :span="9">
             <div id="dta" style="font-size: 15px;">
         <div>
-              <el-form-item label="瀹斤細" :required="true" style="width: 14vw">
-                <el-input v-model="patternWidth" autocomplete="off" />
+          <el-form-item label="楂橈細" :required="true" style="width: 14vw">
+            <el-select  
+                      v-model="selectedValuea"  
+                      filterable  
+                      clearable  
+                      placeholder="璇烽�夋嫨楂�"  
+                      style="width: 220px"  
+                      @input="handleInputChangea"  
+                    >  
+                 <el-option  
+                    v-for="item in selectOptionsa"  
+                    :key="item.id"  
+                    :label="item.label"  
+                    :value="item.value"  
+                 />  
+               </el-select> 
               </el-form-item></div>
               </div>
           </el-col>
@@ -785,14 +735,43 @@
               <div id="dt" style="font-size: 15px;">
         <div>
               <el-form-item label="鑶滅郴锛�" :required="true" style="width: 14vw;">
-                <el-input v-model="filmsId" autocomplete="off" />
+                <el-select  
+                      v-model="selectedValueb"  
+                      filterable  
+                      clearable  
+                      placeholder="璇烽�夋嫨鑶滅郴"  
+                      style="width: 220px"  
+                      @input="handleInputChangea"  
+                    >  
+                 <el-option  
+                    v-for="item in selectOptionsb"  
+                    :key="item.id"  
+                    :label="item.label"  
+                    :value="item.value"  
+                 />  
+               </el-select> 
               </el-form-item></div></div>
           </el-col>
           <el-col :span="9">
             <div id="dta" style="font-size: 15px;">
         <div>
               <el-form-item label="鍘氬害锛�" :required="true" style="width: 14vw">
-                <el-input v-model="patternThickness" autocomplete="off" />
+                <el-select  
+                      v-model="selectedValuec"  
+                      filterable  
+                      clearable  
+                      placeholder="璇烽�夋嫨鍘氬害"  
+                      style="width: 220px"  
+                      @input="handleInputChangea"  
+                    >  
+                 <el-option  
+                    v-for="item in selectOptionsc"  
+                    :key="item.id"  
+                    :label="item.label"  
+                    :value="item.value"  
+                 />  
+               </el-select> 
+                <!-- <el-input v-model="patternThickness" autocomplete="off" /> -->
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -828,8 +807,6 @@
     </template>
   </el-dialog>
         </div>
- 
-  
   <el-dialog v-model="dialogFormVisible" top="24vh" width="30%" title="宸ョ▼" >
     <div style="margin-left: 50px;margin-bottom: 10px;">
       <el-form-item label="宸ョ▼鍙凤細" :required="true">
diff --git a/UI-Project/src/views/StockBasicData/stockBasicData.vue b/UI-Project/src/views/StockBasicData/stockBasicData.vue
index cdeb549..47e13cb 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicData.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -6,7 +6,8 @@
 const adda = ref(false)
 
 import request from "@/utils/request"
-import { ref, onMounted } from "vue";
+import { ref, onMounted , onBeforeUnmount} from "vue";
+import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 //  import LanguageMixin from './lang/LanguageMixin'
@@ -93,44 +94,23 @@
   }  
 };   
 
-const gridOptions = reactive({
-  border:  "full",//琛ㄦ牸鍔犺竟妗�
-  keepSource: true,//淇濇寔婧愭暟鎹�
-  align: 'center',//鏂囧瓧灞呬腑
-  stripe:true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true,height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
-  id: 'OrderList',
-  showFooter: true,//鏄剧ず鑴�
-  printConfig: {},
-  importConfig: {},
-  exportConfig: {},
-  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
-  showOverflow:true,
-  columnConfig: {
-    resizable: true,
-    useKey: true
-  },
-  filterConfig: {   //绛涢�夐厤缃」
-    remote: true
-  },
-  customConfig: {
-    storage: true
-  },
-  editConfig: {
-    trigger: 'click',
-    mode: 'row',
-    showStatus: true
-  },
-  data:  [
-    {
-      'id': '1',
-      'long': '5',
-      'wide': '1005',
-      'thick': '183.6',
-    }
-  ]
- 
-})
+const socketUrl = `ws://10.153.19.150:88/api/cacheGlass/api/talk/cacheGlass`;
+// 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
+const handleMessage = (data) => {
+  // 鏇存柊 tableData 鐨勬暟鎹�
+  tableData.value = data.EdgTasks1[0]
+};
+// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
+onMounted(() => {
+  // fetchFlowCardId();
+  // fetchTableData(); // 鑾峰彇鏁版嵁
+  initializeWebSocket(socketUrl, handleMessage);
+});
+
+onBeforeUnmount(() => {
+  console.log("鍏抽棴浜�")
+  closeWebSocket();
+});
 </script>
 
 <template>
diff --git a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
index da758c0..b318457 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
@@ -6,7 +6,8 @@
 const adda = ref(false)
 
 import request from "@/utils/request"
-import { ref, onMounted } from "vue";
+import { ref, onMounted , onBeforeUnmount} from "vue";
+import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 //  import LanguageMixin from './lang/LanguageMixin'
@@ -93,44 +94,24 @@
   }  
 };   
 
-const gridOptions = reactive({
-  border:  "full",//琛ㄦ牸鍔犺竟妗�
-  keepSource: true,//淇濇寔婧愭暟鎹�
-  align: 'center',//鏂囧瓧灞呬腑
-  stripe:true,//鏂戦┈绾�
-  rowConfig: {isCurrent: true, isHover: true,height: 50},//榧犳爣绉诲姩鎴栭�夋嫨楂樹寒
-  id: 'OrderList',
-  showFooter: true,//鏄剧ず鑴�
-  printConfig: {},
-  importConfig: {},
-  exportConfig: {},
-  scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
-  showOverflow:true,
-  columnConfig: {
-    resizable: true,
-    useKey: true
-  },
-  filterConfig: {   //绛涢�夐厤缃」
-    remote: true
-  },
-  customConfig: {
-    storage: true
-  },
-  editConfig: {
-    trigger: 'click',
-    mode: 'row',
-    showStatus: true
-  },
-  data:  [
-    {
-      'id': '1',
-      'long': '5',
-      'wide': '1005',
-      'thick': '183.6',
-    }
-  ]
- 
-})
+
+const socketUrl = `ws://10.153.19.150:88/api/cacheGlass/api/talk/cacheGlass`;
+// 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
+const handleMessage = (data) => {
+  // 鏇存柊 tableData 鐨勬暟鎹�
+  tableData.value = data.EdgTasks2[0]
+};
+// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
+onMounted(() => {
+  // fetchFlowCardId();
+  // fetchTableData(); // 鑾峰彇鏁版嵁
+  initializeWebSocket(socketUrl, handleMessage);
+});
+
+onBeforeUnmount(() => {
+  console.log("鍏抽棴浜�")
+  closeWebSocket();
+});
 </script>
 
 <template>
diff --git a/UI-Project/src/views/User/permissions.vue b/UI-Project/src/views/User/permissions.vue
index b5e4ae6..637eb78 100644
--- a/UI-Project/src/views/User/permissions.vue
+++ b/UI-Project/src/views/User/permissions.vue
@@ -6,6 +6,7 @@
 const add = ref(false)
 const adda = ref(false)
 
+const editingUser = ref({}); // 鐢ㄤ簬瀛樺偍褰撳墠缂栬緫鐨勭敤鎴锋暟鎹� 
 import request from "@/utils/request"
 import { ref, onMounted } from "vue";
 // import { ref } from 'vue'
@@ -83,6 +84,11 @@
     console.error(error);
   }
 };
+// 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
+function handleEdit(row) {  
+  editingUser.value = { ...row }; // 浣跨敤灞曞紑杩愮畻绗﹀鍒跺綋鍓嶈鏁版嵁  
+  adda.value = true; // 鏄剧ず瀵硅瘽妗�  
+}  
 // 缂栬緫
 const getTableRowa = async () => {
   try {
@@ -95,7 +101,8 @@
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
-      add.value = false;
+      editingUser.value = {}; 
+      adda.value = false;
      tableData.value = response.data;
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
@@ -204,7 +211,7 @@
           <el-table-column prop="id" align="center" label="鎺掑簭" min-width="140"/>
                   <el-table-column fixed="right" label="鎿嶄綔" align="center">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="adda = true">缂栬緫</el-button>
+              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button>
               <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
             </template>
         </el-table-column>
@@ -217,7 +224,7 @@
           <el-table-column prop="id" align="center" label="鎺掑簭" min-width="180" />
           <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="adda = true">缂栬緫</el-button>
+              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button>
               <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
             </template>
         </el-table-column>
@@ -289,14 +296,14 @@
   </el-dialog> 
   <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼鑿滃崟" >
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form  size="mini" label-width="150px">
+     <el-form  :model="editingUser" ref="formRef" size="mini" label-width="150px">
       <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div> 
           <el-form-item label="鑿滃崟鏍忥細" :required="true" style="width: 25vw">
-                <el-input v-model="menuName" autocomplete="off" />
+                <el-input v-model="editingUser.menuName" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -305,7 +312,7 @@
               <div id="dt" style="font-size: 15px;">
         <div>
           <el-form-item label="閾炬帴锛�" :required="true" style="width: 25vw">
-                <el-input v-model="url" autocomplete="off" />
+                <el-input v-model="editingUser.url" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -314,7 +321,7 @@
               <div id="dt" style="font-size: 15px;">
         <div>
           <el-form-item label="鎺掑簭锛�" :required="true" style="width: 25vw">
-                <el-input v-model="parentId" autocomplete="off" />
+                <el-input v-model="editingUser.parentId" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
diff --git a/UI-Project/src/views/User/rolelist.vue b/UI-Project/src/views/User/rolelist.vue
index 7594048..81ec996 100644
--- a/UI-Project/src/views/User/rolelist.vue
+++ b/UI-Project/src/views/User/rolelist.vue
@@ -5,7 +5,7 @@
 const router = useRouter()
 const add = ref(false)
 const adda = ref(false)
-
+const editingUser = ref({}); // 鐢ㄤ簬瀛樺偍褰撳墠缂栬緫鐨勭敤鎴锋暟鎹� 
 import request from "@/utils/request"
 import { ref, onMounted } from "vue";
 // import { ref } from 'vue'
@@ -73,6 +73,11 @@
     console.error(error);
   }
 };
+// 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
+function handleEdit(row) {  
+  editingUser.value = { ...row }; // 浣跨敤灞曞紑杩愮畻绗﹀鍒跺綋鍓嶈鏁版嵁  
+  adda.value = true; // 鏄剧ず瀵硅瘽妗�  
+}
 // 缂栬緫
 const getTableRowa = async () => {
   try {
@@ -84,7 +89,8 @@
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
-      add.value = false;
+      editingUser.value = {};  
+      adda.value = false;
      tableData.value = response.data;
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
@@ -177,7 +183,7 @@
           <el-table-column prop="name" align="center" label="瑙掕壊" min-width="180" />
           <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="adda = true">缂栬緫</el-button>
+              <el-button size="mini" type="text" plain  @click="handleEdit(scope.row)">缂栬緫</el-button>
               <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
             </template>
         </el-table-column>
@@ -212,14 +218,14 @@
   </el-dialog> 
   <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼瑙掕壊" >
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form  size="mini" label-width="150px">
+            <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px">
               <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
           <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw">
-                <el-input v-model="name" autocomplete="off" />
+                <el-input v-model="editingUser.name" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
diff --git a/UI-Project/src/views/User/userlist.vue b/UI-Project/src/views/User/userlist.vue
index bca1fae..ecd91ed 100644
--- a/UI-Project/src/views/User/userlist.vue
+++ b/UI-Project/src/views/User/userlist.vue
@@ -5,7 +5,7 @@
 const router = useRouter()
 const add = ref(false)
 const adda = ref(false)
-
+const editingUser = ref({}); // 鐢ㄤ簬瀛樺偍褰撳墠缂栬緫鐨勭敤鎴锋暟鎹� 
 import request from "@/utils/request"
 import { ref, onMounted } from "vue";
 // import { ref } from 'vue'
@@ -94,6 +94,11 @@
     console.error('Error fetching options:', error);  
   }  
 }; 
+// 澶勭悊缂栬緫鎸夐挳鐐瑰嚮  
+function handleEdit(row) {  
+  editingUser.value = { ...row }; // 浣跨敤灞曞紑杩愮畻绗﹀鍒跺綋鍓嶈鏁版嵁  
+  adda.value = true; // 鏄剧ず瀵硅瘽妗�  
+} 
 // 娣诲姞 
 const getTableRow = async () => {
   try {
@@ -129,7 +134,8 @@
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
-      add.value = false;
+      editingUser.value = {};  
+      adda.value = false;
      tableData.value = response.data;
     } else {
       // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
@@ -230,7 +236,7 @@
           <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
             <template #default="scope">
               <el-button size="mini" type="text" plain @click="open(scope.row)">閲嶇疆瀵嗙爜</el-button>
-              <el-button size="mini" type="text" plain @click="adda = true">缂栬緫</el-button>
+              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">缂栬緫</el-button>
               <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
             </template>
         </el-table-column>
@@ -300,14 +306,14 @@
   </el-dialog> 
   <el-dialog v-model="adda" top="23vh" width="37%" title="淇敼鐢ㄦ埛" >
     <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
-            <el-form  size="mini" label-width="150px">
+            <el-form :model="editingUser" ref="formRef" size="mini" label-width="150px">
       <el-form label-width="100px" label-position="right">
         <el-row style="margin-top: -15px;margin-bottom: -2px;">
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
           <el-form-item label="鐢ㄦ埛鍚嶏細" :required="true" style="width: 25vw">
-                <el-input v-model="userName" autocomplete="off" />
+                <el-input v-model="editingUser.userName" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -315,6 +321,13 @@
           <el-col :span="6">
               <div id="dt" style="font-size: 15px;">
         <div>
+          <!-- <el-table-column align="center" label="瑙掕壊" min-width="80">
+            <template #default="scope">  
+             <el-tag v-for="role in scope.row.roleList">  
+            {{role.name}}  
+           </el-tag>   
+         </template> 
+            </el-table-column> -->
               <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw;">
                 <el-select
                v-model="selectedProjectNoa"
@@ -339,7 +352,7 @@
         <div>
               <el-form-item label="瀵嗙爜锛�" :required="true" style="width: 25vw;">
                 <el-input style="width: 340px;"
-                        v-model="password"
+                        v-model="editingUser.password"
                         autocomplete="off"
                         :prefix-icon="Lock"
                         show-password/>
diff --git a/hangzhoumesParent/JsonFile/PlcCacheGlass.json b/hangzhoumesParent/JsonFile/PlcCacheGlass.json
new file mode 100644
index 0000000..01969b7
--- /dev/null
+++ b/hangzhoumesParent/JsonFile/PlcCacheGlass.json
@@ -0,0 +1,64 @@
+{
+   "plcAddressBegin":"DB11.0",
+   "plcAddressLenght":"80",
+   "dataType":"word",
+   "parameteInfor":[
+      {
+         "codeId": "A06_request_word",
+         "addressIndex":"0",
+         "addressLenght":"2", 
+         "ratio":"1", 
+         "unit":"m/min"    
+      },
+      {
+          "codeId": "A05_scanning_ID",
+          "addressIndex":"2",
+          "addressLenght":"30",
+          "ratio":"1",
+          "unit":""
+       },
+       {
+          "codeId": "Current_slot",
+          "addressIndex":"36",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":""
+       },
+        {
+          "codeId": "MES_confirmation_word",
+          "addressIndex":"38",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":""
+       },
+       {
+          "codeId": "A08_glass_status",
+          "addressIndex":"68",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":""
+       },
+       {
+          "codeId": "A10_glass_status",
+          "addressIndex":"70",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":""
+       },
+       {
+          "codeId": "A09_prohibit_film_production",
+          "addressIndex":"72",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":""
+       }
+       ,
+       {
+          "codeId": "A10_prohibit_film_production",
+          "addressIndex":"74",
+          "addressLenght":"2",
+          "ratio":"1",
+          "unit":""
+       }
+   ]
+}
diff --git a/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json b/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
new file mode 100644
index 0000000..5838dac
--- /dev/null
+++ b/hangzhoumesParent/JsonFile/PlcCacheVerticalGlass.json
@@ -0,0 +1,57 @@
+{
+  "plcAddressBegin":"DB.0",
+  "plcAddressLenght":"72",
+  "dataType":"word",
+  "parameteInfor":[
+    {
+      "codeId": "D01Request",
+      "addressIndex":"0",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":"m/min"
+    },
+    {
+      "codeId": "D01ID1",
+      "addressIndex":"2",
+      "addressLenght":"6",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "D04Request",
+      "addressIndex":"8",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "D04ID1",
+      "addressIndex":"10",
+      "addressLenght":"6",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "D02Go",
+      "addressIndex":"20",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "D05Go",
+      "addressIndex":"22",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    }
+  ,
+    {
+      "codeId": "DeviceStatus",
+      "addressIndex":"70",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    }
+  ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/JsonFile/PlcLoadGlass.json b/hangzhoumesParent/JsonFile/PlcLoadGlass.json
new file mode 100644
index 0000000..9b0432b
--- /dev/null
+++ b/hangzhoumesParent/JsonFile/PlcLoadGlass.json
@@ -0,0 +1,78 @@
+{
+  "plcAddressBegin":"DB1.2000",
+  "plcAddressLenght":"100",
+  "dataType":"word",
+  "parameteInfor":[
+    {
+      "codeId": "loadRequest",
+      "addressIndex":"0",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":"m/min"
+    },
+    {
+      "codeId": "PlcStatus",
+      "addressIndex":"10",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "MesToPlc",
+      "addressIndex":"20",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "InkageStatus",
+      "addressIndex":"22",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "WorkId",
+      "addressIndex":"24",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "GlassWidth",
+      "addressIndex":"26",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "GlassHeight",
+      "addressIndex":"28",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    }
+  ,
+    {
+      "codeId": "MesToPlcStatus",
+      "addressIndex":"40",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "MesToPlcStatusId",
+      "addressIndex":"42",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    },
+    {
+      "codeId": "MesTaskStatus",
+      "addressIndex":"56",
+      "addressLenght":"2",
+      "ratio":"1",
+      "unit":""
+    }
+  ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/JsonFile/PlcdownGlass.json b/hangzhoumesParent/JsonFile/PlcdownGlass.json
new file mode 100644
index 0000000..c813b1d
--- /dev/null
+++ b/hangzhoumesParent/JsonFile/PlcdownGlass.json
@@ -0,0 +1,362 @@
+{
+  "plcAddressBegin": "DB100.0",
+  "plcAddressLenght": "142",
+  "dataType": "word",
+  "parameteInfor": [
+    {
+      "codeId": "RequestWord",
+      "addressIndex": "0",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G04ID",
+      "addressIndex": "2",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G06RobotTaskRequestWord",
+      "addressIndex": "4",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G06ID",
+      "addressIndex": "6",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G11RobotTaskRequestWord",
+      "addressIndex": "8",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G011ID",
+      "addressIndex": "10",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "12",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "14",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "16",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "18",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "MESSendingWord",
+      "addressIndex": "20",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "InputGrid",
+      "addressIndex": "22",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "OutputGrid",
+      "addressIndex": "24",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "OutputID",
+      "addressIndex": "26",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "FrontOrRearLowerSlice",
+      "addressIndex": "28",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "30",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G06RobotTaskReply",
+      "addressIndex": "32",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G06Rack",
+      "addressIndex": "34",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G11RobotTaskReply",
+      "addressIndex": "36",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G11Rack",
+      "addressIndex": "38",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "40",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "42",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "44",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "46",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "48",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "50",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "52",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "54",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "MESTaskState",
+      "addressIndex": "56",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "58",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "AlarmState",
+      "addressIndex": "60",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "Alarm1",
+      "addressIndex": "62",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "Alarm2",
+      "addressIndex": "64",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "Alarm3",
+      "addressIndex": "66",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "Alarm4",
+      "addressIndex": "68",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "neirong",
+      "addressIndex": "70",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "device",
+      "addressIndex": "72",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "74",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "76",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "InOut1",
+      "addressIndex": "78",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "InOut2",
+      "addressIndex": "80",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "InOut3",
+      "addressIndex": "82",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "InOut4",
+      "addressIndex": "84",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "InOut5",
+      "addressIndex": "86",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "InOut6",
+      "addressIndex": "88",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "InOut7",
+      "addressIndex": "90",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "92",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "94",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "96",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "98",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "spare",
+      "addressIndex": "100",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G04ActionState",
+      "addressIndex": "102",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G05ActionState",
+      "addressIndex": "104",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G06ActionState",
+      "addressIndex": "106",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G07ActionState",
+      "addressIndex": "108",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G08ActionState",
+      "addressIndex": "110",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G09ActionState",
+      "addressIndex": "112",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G10ActionState",
+      "addressIndex": "114",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G11ActionState",
+      "addressIndex": "116",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G12ActionState",
+      "addressIndex": "118",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G13ActionState",
+      "addressIndex": "120",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G04IDS",
+      "addressIndex": "122",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G05IDS",
+      "addressIndex": "124",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G06IDS",
+      "addressIndex": "126",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G07IDS",
+      "addressIndex": "128",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G08IDS",
+      "addressIndex": "130",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G09IDS",
+      "addressIndex": "132",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G10IDS",
+      "addressIndex": "134",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G11IDS",
+      "addressIndex": "136",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G12IDS",
+      "addressIndex": "138",
+      "addressLenght": "2"
+    },
+    {
+      "codeId": "G13ID",
+      "addressIndex": "140",
+      "addressLenght": "2"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
index af09ed0..7b756d8 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
@@ -1,5 +1,8 @@
 package com.mes.common.config;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * @Author : zhoush
  * @Date: 2024/4/24 10:33
@@ -42,6 +45,7 @@
     public static final Integer GLASS_CACHE_TYPE_IN = 1;
     public static final Integer GLASS_CACHE_TYPE_OUT = 2;
     public static final Integer GLASS_CACHE_TYPE_THROUGH = 3;
+    public static final List<Integer> GLASS_CACHE_TYPE_OUT_ALL = Arrays.asList(2, 3);
 
     /**
      * 纾ㄨ竟浠诲姟鐜荤拑鐘舵��
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/WebSocketConfig.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/WebSocketConfig.java
index 387f053..f5d16bf 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/WebSocketConfig.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/WebSocketConfig.java
@@ -4,6 +4,9 @@
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
+/**
+ * @author SNG-010
+ */
 @Configuration
 public class WebSocketConfig {
     /**
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java
index dae4ca1..e8bfd42 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/device/PlcParameterObject.java
@@ -4,6 +4,7 @@
 import com.github.xingshuangs.iot.utils.ShortUtil;
 
 import java.lang.reflect.Array;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
 
@@ -182,6 +183,7 @@
                     Array.setByte(valueList, i, plcValueArray[plcParameterInfo.getAddressIndex() + i]);
 
                 }
+
                 if (plcParameterInfo.getAddressLength() == 2) {
                     plcParameterInfo.setValue(String.valueOf(byte2short(valueList)));
                 } else if (plcParameterInfo.getAddressLength() == 4) {
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
index f93019e..be26553 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/glassinfo/service/impl/GlassInfoServiceImpl.java
@@ -37,7 +37,7 @@
             optimizeGlassinfos = optimizeProjectMapper.selectJoinList(OptimizeGlassinfo.class, new MPJQueryWrapper<OptimizeProject>()
                     .select("b.process_id,t.type,b.width,b.height,t.glass_thickness,t.glass_type,b.p_width,b.p_height,b.layer, b.total_layer, b.stock_id,b.heat_layout_id,b.heat_layout_sort,b.x_axis,b.y_axis,b.project_no,b.glass_id")
                     .leftJoin("optimize_detail b on t.project_no=b.project_no")
-                    .eq("t.state",100)
+                    //.eq("t.state",100)
                     .eq("t.project_no", engineeringId));
         }
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
index 94fe110..bdab088 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
@@ -3,6 +3,7 @@
 import com.github.yulichang.base.MPJBaseService;
 import com.mes.pp.entity.OptimizeProject;
 import com.mes.pp.entity.request.OptimizeRequest;
+import com.mes.uppattenusage.entity.UpPattenUsage;
 
 import java.util.List;
 
@@ -26,4 +27,10 @@
      * 灏嗗伐绋嬩俊鎭洿鏂扮姸鎬佷负宸查鍙�
      */
     void changeTask(String engineeringId, int i);
+    /**
+     * 瀹屾垚宸ョ▼浠诲姟鏀逛负300
+     *
+     * @return
+     */
+    boolean overTask(UpPattenUsage sequence, int state);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
index 4bb7aa3..22f9d8e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
@@ -9,6 +9,7 @@
 import com.mes.pp.entity.request.OptimizeRequest;
 import com.mes.pp.mapper.OptimizeProjectMapper;
 import com.mes.pp.service.OptimizeProjectService;
+import com.mes.uppattenusage.entity.UpPattenUsage;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -29,13 +30,14 @@
 
     @Override
     public List<OptimizeProject> listByState(OptimizeRequest optimizeRequest) {
-        log.info("灏嗗弬鏁颁紶鍏ュ埌鏌ヨ绫婚噷,宸ョ▼鍙峰仛闈炵┖鍒ゆ柇妯$硦鏌ヨ");
+        //灏嗗弬鏁颁紶鍏ュ埌鏌ヨ绫婚噷,宸ョ▼鍙峰仛闈炵┖鍒ゆ柇妯$硦鏌ヨ
         LambdaQueryWrapper<OptimizeProject> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(OptimizeProject::getState,optimizeRequest.getState())
+                .or(qw -> qw.eq(OptimizeProject::getState, 200))
                 .like(StringUtils.isNotBlank(optimizeRequest.getProjectNo()),OptimizeProject::getProjectNo,optimizeRequest.getProjectNo())
                 //.groupBy(OptimizeProject::getProjectNo)
         ;
-        log.info("杩斿洖宸ョ▼淇℃伅");
+        //杩斿洖宸ョ▼淇℃伅
         return this.list(wrapper);
     }
 
@@ -50,6 +52,17 @@
 
     }
 
+    @Override
+    public boolean overTask(UpPattenUsage sequence, int state) {
+        if(sequence.getState()==100){
+            UpdateWrapper<OptimizeProject> wrapper=new  UpdateWrapper<>();
+            wrapper.eq("project_no",sequence.getEngineeringId())
+                    .set("state",state);
+            boolean updateSuccess = this.update(wrapper);
+            log.info("宸ョ▼瀹屾垚鏇存柊鐘舵�亄}",updateSuccess);
+        }
+        return false;
+    }
 
 
 }
diff --git a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
index c65bd69..597f93c 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
+++ b/hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
@@ -69,6 +69,7 @@
 
         //
         List<SysMenu> menuList = sysUserRoleMapper.selectJoinList(SysMenu.class, wrapper);
+        log.info("userinfos:{}",menuList);
         return create(menuList);
     }
 
diff --git a/hangzhoumesParent/common/springsecurity/src/main/resources/application-dev.yml b/hangzhoumesParent/common/springsecurity/src/main/resources/application-dev.yml
index 7085cc4..64e7984 100644
--- a/hangzhoumesParent/common/springsecurity/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/common/springsecurity/src/main/resources/application-dev.yml
@@ -1,15 +1,15 @@
 spring:
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8&characterEncoding=utf-8&useSSL=false
+    url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8&characterEncoding=utf-8&useSSL=false
     username: root
     password: beibo.123/
   cloud:
     nacos:
       discovery:
-        server-addr: 127.0.0.1:8848
+        server-addr: 10.153.19.150:8848
   redis:
     database: 0
-    host: 127.0.0.1
+    host: 10.153.19.150
     port: 6379
     password: 123456
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
index 785dd88..c4c802d 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/controller/EdgStorageCageController.java
@@ -2,6 +2,7 @@
 
 import com.mes.edgstoragecage.entity.EdgStorageCage;
 import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.edgstoragecage.service.EdgStorageCageDetailsService;
 import com.mes.edgstoragecage.service.EdgStorageCageService;
 import com.mes.edgstoragecage.service.impl.EdgStorageCageServiceImpl;
 import com.mes.taskcache.entity.TaskCache;
@@ -33,6 +34,9 @@
     @Autowired
     private EdgStorageCageService edgStorageCageService;
 
+    @Autowired
+    private EdgStorageCageDetailsService edgStorageCageDetailsService;
+
     @ApiOperation("鏌ヨ纾ㄨ竟缂撳瓨鐞嗙墖绗煎唴璇︽儏 鍙傛暟()")
     @PostMapping("/selectEdgStorageCage")
     @ResponseBody
@@ -52,14 +56,25 @@
     @ResponseBody
     public Result updateEdgStorageCage(@RequestBody EdgStorageCage edgStorageCage) {
         boolean isSucess=edgStorageCageService.updateEdgStorageCage(edgStorageCage);
-        return Result.build(200,"鏇存崲鎴愬姛",1);
+        return Result.build(200,"銆愬惎鐢�/绂佺敤銆戞垚鍔�",1);
     }
+
     @ApiOperation("纾ㄨ竟缂撳瓨鐞嗙墖绗间俊鎭�   鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑杩涜銆愭竻闄�/鏇存崲/缁戝畾銆� EdgStorageCage鏍煎瓙淇℃伅,EdgStorageCageDetails 鐜荤拑淇℃伅 ")
     @PostMapping("/edgStorageCageGlass")
     @ResponseBody
     public Result edgStorageCageGlass(@RequestBody EdgStorageCageDetails edgStorageCageDetails,int edgStorageCageId) {
         boolean isSucess=edgStorageCageService.updateEdgStorageCageDetails(edgStorageCageId,edgStorageCageDetails);
-        return Result.build(200,"鍒犻櫎鎴愬姛",1);
+        return Result.build(200,"銆愭竻闄�/鏇存崲/缁戝畾銆戞垚鍔�",1);
+    }
+
+    @ApiOperation("纾ㄨ竟妯″潡姹囨姤鐜荤拑鐘舵��   鍔熻兘锛氬绗煎唴鏍呮牸鐜荤拑杩涜銆愮牬鎹�/鎷胯蛋銆�  ")
+    @PostMapping("/edgReportStatus")
+    @ResponseBody
+    public Result edgReportStatus(@RequestBody Map<String, String> arguments) {
+        String edgStorageCageDetailsId=arguments.get("glassId");
+        int controlsId=Integer.valueOf(arguments.get("controlsId"));
+        boolean isSucess=edgStorageCageDetailsService.identWorn(edgStorageCageDetailsId,controlsId);
+        return Result.build(200,"銆愮牬鎹�/鎷胯蛋銆戞垚鍔�",1);
     }
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
index 8c2763e..81047b7 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/EdgStorageCageService.java
@@ -50,4 +50,5 @@
     boolean updateEdgStorageCage(EdgStorageCage edgStorageCage);
 
     boolean updateEdgStorageCageDetails(int edgStorageCageId, EdgStorageCageDetails edgStorageCageDetails);
+
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
index 930f76f..923a28b 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageDetailsServiceImpl.java
@@ -24,6 +24,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -66,7 +67,7 @@
         if (edgStorageCageDetails.size() == 1) {
             EdgStorageCageDetails item = edgStorageCageDetails.get(0);
             item.setState(ControlsId);
-            baseMapper.update(edgStorageCageDetails.get(0), new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId));
+            baseMapper.update(item, new MPJLambdaWrapper<EdgStorageCageDetails>().selectAll(EdgStorageCageDetails.class).eq(EdgStorageCageDetails::getGlassId, glassId));
             return true;
         }
 //            Sql鐗堟湰
@@ -89,11 +90,10 @@
     public List<Map<String, Object>> selectCutTerritory() {
         List<UpPattenUsage> upPattenUsage = upPattenUsageMapper.selectList(new MPJLambdaWrapper<UpPattenUsage>()
                 .selectAll(UpPattenUsage.class)
-                .eq(UpPattenUsage::getState, 1));
-
+                .eq(UpPattenUsage::getState, 1).or().eq(UpPattenUsage::getState, 0).orderByDesc(UpPattenUsage::getState));
         if (!upPattenUsage.isEmpty()) {
             UpPattenUsage upPattenUsage1 = upPattenUsage.get(0);
-            return optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
+            List<Map<String, Object>> cutTerritorys=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                     .selectAll(OptimizeDetail.class)
                     .selectAs(OptimizeLayout::getWidth, "olWidth")
                     .selectAs(OptimizeLayout::getWidth, "olHeight")
@@ -103,6 +103,20 @@
                     .eq(OptimizeDetail::getProjectNo, upPattenUsage1.getEngineeringId())
                     .eq(OptimizeDetail::getStockId, upPattenUsage1.getLayoutSequence())
             );
+            List<Map<String, Object>> ResultcutTerritorys=new ArrayList<>();
+            for (Map<String, Object> cutTerritory : cutTerritorys) {
+                EdgStorageCageDetails edgStorageCageDetails=baseMapper.selectOne(new MPJLambdaQueryWrapper<EdgStorageCageDetails>()
+                        .selectAll(EdgStorageCageDetails.class)
+                        .eq(EdgStorageCageDetails::getGlassId, cutTerritory.get("glass_id")));
+//                log.info("鍐呭锛歿}-------{}",cutTerritory,edgStorageCageDetails);
+                if(edgStorageCageDetails!=null){
+                    cutTerritory.put("glass_state",edgStorageCageDetails.getState());
+                }else{
+                    cutTerritory.put("glass_state",0);
+                }
+                ResultcutTerritorys.add(cutTerritory);
+            }
+            return ResultcutTerritorys;
 
 //            Sql鐗堟湰
 //            return optimizeDetailMapper.selectJoinMaps(new MPJQueryWrapper<OptimizeDetail>().selectAll(OptimizeDetail.class)
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
index 12a13ad..01d94b9 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/service/impl/EdgStorageCageServiceImpl.java
@@ -140,10 +140,11 @@
         log.info("姝e父" + edgItem);
         EdgStorageCageDetails edgDItem = edgStorageCageDetailsMapper.selectById(edgStorageCageDetails.getId());
         if (edgItem != null) {
-            //绉婚櫎
+            //绉婚櫎  锛堢牬鎹�,鐩墠涓や釜姒傚康娣峰悎鍦ㄤ竴璧�,寤鸿鎷嗗紑锛�
             EdgStorageCageDetails result = edgStorageCageDetailsMapper.selectOne(new MPJLambdaWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getSlot, edgStorageCageId));
             if (result != null) {
                 result.setSlot(0);
+                result.setState(201);
                 edgStorageCageDetailsMapper.updateById(result);
             }
             //娣诲姞
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
index 93bbc01..ade0460 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/glassinfo/mapper/GlassInfoMapper.java
@@ -1,6 +1,7 @@
 package com.mes.glassinfo.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.glassinfo.entity.GlassInfo;
 
 /**
@@ -11,6 +12,6 @@
  * @author zhoush
  * @since 2024-04-07
  */
-public interface GlassInfoMapper extends BaseMapper<GlassInfo> {
+public interface GlassInfoMapper extends MPJBaseMapper<GlassInfo> {
 
 }
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 61a5e69..83c2289 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
@@ -2,6 +2,7 @@
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.lang.Assert;
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.yulichang.query.MPJQueryWrapper;
@@ -30,6 +31,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Author : zhoush
@@ -63,6 +65,12 @@
 
     @Value("${mes.sequence.order}")
     private boolean sequenceOrder;
+
+    @Value("${mes.firstLength}")
+    private String firstLength;
+
+    @Value("${mes.secondLength}")
+    private String secondLength;
 
     @Scheduled(fixedDelay = 1000)
     public void plcHomeEdgTask() {
@@ -140,7 +148,7 @@
      * @param confirmationWrodAddress
      * @param currentSlot
      */
-    private void inTo(String glassId, String confirmationWrodAddress, String currentSlot) {
+    public void inTo(String glassId, String confirmationWrodAddress, String currentSlot) {
         log.info("1銆佹寜鐓х幓鐠僫d:{}鑾峰彇鐜荤拑灏忕墖淇℃伅,褰撳墠鏍煎瓙涓�:{}", glassId, currentSlot);
         //娣诲姞杩涚墖浠诲姟  鏌ユ壘绌烘牸
         EdgStorageCage nearestEmpty = edgStorageCageService.selectNearestEmpty(Integer.parseInt(currentSlot), Boolean.FALSE);
@@ -174,7 +182,8 @@
      * @return
      */
     public GlassInfo queryAndChangeGlass(String glassId) {
-        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId)
+                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
         Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");
         //鎸夌収鐜荤拑灏哄
         LambdaQueryWrapper<GlassInfo> queryWrapper = new LambdaQueryWrapper<GlassInfo>()
@@ -193,6 +202,7 @@
         GlassInfo swapGlassInfo = glassInfoService.getOne(queryWrapper);
         if (swapGlassInfo != null && !glassInfo.getGlassId().equals(swapGlassInfo.getGlassId())) {
             String swapGlassId = swapGlassInfo.getGlassId();
+            log.info("灏嗙幓鐠儃}鍜岀幓鐠儃}锛屼俊鎭簰鎹�,杩涚幓鐠� {}", glassInfo, swapGlassInfo, swapGlassInfo);
             swapGlassInfo.setGlassId(glassId);
             glassInfo.setGlassId(swapGlassId);
             glassInfoService.updateById(swapGlassInfo);
@@ -243,16 +253,16 @@
                 log.info("绗煎瓙鍐呭拰寰呰繘鐗囨病鏈夌幓鐠�");
                 return Boolean.FALSE;
             }
-            EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT);
-            EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT);
+            EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
+            EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
             endcell = queryLineByGlassInfo(a09EdgGlass, a10EdgGlass, glassInfo, out08Glassstate, out10Glassstate);
         } else {
             //鍒ゆ柇涓ゆ潯绾挎槸鍚﹂兘绌洪棽
             endcell = out10Glassstate == 2 ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
 
             if ((out08Glassstate == 0 && out10Glassstate == 0) || (out08Glassstate == 1 && out10Glassstate == 1)) {
-                EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT);
-                EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT);
+                EdgStorageCageDetails a09EdgGlass = queryGlassByTaskCache(Const.A09_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
+                EdgStorageCageDetails a10EdgGlass = queryGlassByTaskCache(Const.A10_OUT_TARGET_POSITION, Const.GLASS_CACHE_TYPE_OUT_ALL);
                 if (a09EdgGlass == null && a10EdgGlass == null) {
                     MPJQueryWrapper<EdgStorageCageDetails> wrapper = new MPJQueryWrapper<>();
                     wrapper.select("count(t.glass_id), t.width, t.height")
@@ -261,17 +271,18 @@
                     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 <3500 and t1.second_length<2600 ");
+                                "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
                     }
                     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);
+                                .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) {
                             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 glass_info) t1 " +
-                                    "on t.glass_id = t1.glass_id and t1.first_length <3500 and t1.second_length<2600 ");
+                                    "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
                         }
                         GlassInfo one = glassInfoService.getOne(queryWrapper);
                         if (one != null) {
@@ -336,7 +347,8 @@
         //todo: 鑾峰彇姝e湪鎵ц鐨勫伐绋嬩俊鎭�
         if (StringUtils.isNotBlank(glassId)) {
             GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                    .eq(GlassInfo::getGlassId, glassId));
+                    .eq(GlassInfo::getGlassId, glassId)
+                    .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1"));
             EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
             BeanUtils.copyProperties(one, resultDetails);
             glassList.add(resultDetails);
@@ -388,7 +400,9 @@
             return glassDetails;
         }
         GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
-                .eq(GlassInfo::getGlassId, glassId));
+                .eq(GlassInfo::getGlassId, glassId)
+                .inSql(GlassInfo::getEngineerId, "select engineer_id from engineering where state = 1")
+        );
         EdgStorageCageDetails resultDetails = new EdgStorageCageDetails();
         BeanUtils.copyProperties(one, resultDetails);
         if (null == glassDetails) {
@@ -403,14 +417,11 @@
      */
     private List<EdgStorageCageDetails> queryGlassByTaskLine(int line) {
         //鑾峰彇浠诲姟琛ㄤ腑鏈�鍚庝竴娆″嚭鐗囩殑鐜荤拑id
-        LambdaQueryWrapper<TaskCache> queryWrapper = new LambdaQueryWrapper<TaskCache>().eq(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT)
-                .eq(TaskCache::getEndCell, line).orderByDesc(TaskCache::getCreateTime);
-        List<TaskCache> taskCacheList = taskCacheService.list(queryWrapper);
-        if (CollectionUtil.isEmpty(taskCacheList)) {
+        TaskCache taskCache = taskCacheService.queryGlassByTaskCache(line, Const.GLASS_CACHE_TYPE_OUT_ALL);
+        if (null == taskCache) {
             log.info("娌℃湁鎵惧埌{}绾夸换鍔′俊鎭�", line);
             return new ArrayList<>();
         }
-        TaskCache taskCache = taskCacheList.get(0);
         MPJQueryWrapper<EdgStorageCageDetails> mpjLambdaWrapper = new MPJQueryWrapper<>();
         mpjLambdaWrapper.select("t1.*")
                 .innerJoin("edg_storage_cage_details t1 on t.width = t1.width and t.height = t1.height")
@@ -430,18 +441,17 @@
      * 鎸夌収浠诲姟绫诲瀷銆佺嚎鍙疯幏鍙栦换鍔′俊鎭�
      *
      * @param line
-     * @param taskType
+     * @param taskTypes
      * @return
      */
-    private EdgStorageCageDetails queryGlassByTaskCache(int line, int taskType) {
-        LambdaQueryWrapper<TaskCache> queryWrapper = new LambdaQueryWrapper<TaskCache>().eq(TaskCache::getTaskType, taskType)
-                .eq(TaskCache::getEndCell, line).orderByDesc(TaskCache::getCreateTime);
-        List<TaskCache> list = taskCacheService.list(queryWrapper);
-        if (CollectionUtil.isEmpty(list)) {
+    private EdgStorageCageDetails queryGlassByTaskCache(int line, List<Integer> taskTypes) {
+        TaskCache taskCache = taskCacheService.queryGlassByTaskCache(line, taskTypes);
+        if (null == taskCache) {
             log.info("娌℃湁鎵惧埌{}绾夸换鍔′俊鎭�", line);
             return null;
         }
-        return edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getGlassId, list.get(0).getGlassId()));
+        return edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>().eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId())
+                .inSql(EdgStorageCageDetails::getEngineerId, "select engineer_id from engineering where state = 1").last(" limit 1 "));
     }
 
     /**
@@ -486,7 +496,7 @@
         if (endcell == Const.A09_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 <3500 and t1.second_length<2600 ");
+                    "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
         }
         wrapper.last("order by count(t.glass_id) desc  limit 2");
         List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
@@ -517,15 +527,12 @@
         } else {
             log.info("鑾峰彇鐜荤拑鏁伴噺鍓�2鐨勭幓鐠冨崰姣斾负{}锛屽皬浜�2", mix);
             //鑾峰彇浠诲姟琛ㄤ腑鏈�鍚庝竴娆″嚭鐗囩殑鐜荤拑id
-            LambdaQueryWrapper<TaskCache> queryWrapper = new LambdaQueryWrapper<TaskCache>().eq(TaskCache::getTaskType, Const.GLASS_CACHE_TYPE_OUT)
-                    .eq(TaskCache::getEndCell, endcell).orderByDesc(TaskCache::getCreateTime);
-            List<TaskCache> taskCacheList = taskCacheService.list(queryWrapper);
-            log.info("鑾峰彇浠诲姟琛ㄤ腑{}绾挎渶鍚庝竴娆″嚭鐗囩殑鐜荤拑浠诲姟淇℃伅锛歿}", endcell, taskCacheList);
-            if (CollectionUtil.isEmpty(taskCacheList)) {
+            TaskCache taskCache = taskCacheService.queryGlassByTaskCache(endcell, Const.GLASS_CACHE_TYPE_OUT_ALL);
+            log.info("鑾峰彇浠诲姟琛ㄤ腑{}绾挎渶鍚庝竴娆″嚭鐗囩殑鐜荤拑浠诲姟淇℃伅锛歿}", endcell, taskCache);
+            if (null == taskCache) {
                 log.info("{}绾挎病鏈夊嚭鐗囦换鍔′俊鎭紝鐩存帴鍑虹墖", endcell);
                 return queryMinGlass(firstSize.getWidth(), firstSize.getHeight(), glassId);
             }
-            TaskCache taskCache = taskCacheList.get(0);
             EdgStorageCageDetails outGlassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
                     .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()));
             log.info("{}绾挎湁鍑虹墖浠诲姟淇℃伅,浠诲姟淇℃伅涓簕}锛岀幓鐠冧俊鎭负{}", endcell, taskCache, outGlassInfo);
@@ -624,5 +631,91 @@
         return edgGlassTaskInfoService.save(edgGlassTaskInfo);
     }
 
+    /**
+     * 褰撳墠鍒囧壊鐗堝浘淇℃伅
+     *
+     * @param
+     * @return
+     */
+    @Scheduled(fixedDelay = 1000)
+    public void currentCutTerritory(){
+        JSONObject jsonObject = new JSONObject();
+        List<Map<String, Object>> currentCutTerritorys = edgStorageCageDetailsService.selectCutTerritory();
+        jsonObject.append("currentCutTerritory", currentCutTerritorys);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                    List<String> messages = webserver.getMessages();
+                    if (!messages.isEmpty()) {
+                        // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+                        webserver.clearMessages();
+                    }
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
+
+    /**
+     * 纾ㄨ竟浠诲姟
+     *
+     * @param
+     * @return
+     */
+    @Scheduled(fixedDelay = 1000)
+    public void selectEdgTask(){
+        JSONObject jsonObject = new JSONObject();
+        List<Map<String,Object>> EdgTasks1 = taskCacheService.selectEdgInfo("2001");
+        List<Map<String,Object>> EdgTasks2 = taskCacheService.selectEdgInfo("2002");
+        jsonObject.append("EdgTasks1", EdgTasks1);
+        jsonObject.append("EdgTasks2", EdgTasks2);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                    List<String> messages = webserver.getMessages();
+                    if (!messages.isEmpty()) {
+                        // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+                        webserver.clearMessages();
+                    }
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
+
+    /**
+     * 纾ㄨ竟鍓� 缂撳瓨鍐呬俊鎭�
+     *
+     * @param
+     * @return
+     */
+    @Scheduled(fixedDelay = 1000)
+    public void selectEdgStorageCage(){
+        JSONObject jsonObject = new JSONObject();
+        List<Map<String, Object>> EdgStorageCageinfos=edgStorageCageService.selectEdgStorageCages();
+        jsonObject.append("EdgStorageCageinfos", EdgStorageCageinfos);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("cacheGlass");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                    List<String> messages = webserver.getMessages();
+                    if (!messages.isEmpty()) {
+                        // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+                        webserver.clearMessages();
+                    }
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
+
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
index bef6b24..58a0dfd 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/controller/TaskCacheController.java
@@ -52,7 +52,6 @@
     @PostMapping("/identControls")
     @ResponseBody
     public Result identControls(@RequestParam(name = "identId", required = false) String identId,@RequestParam(name = "controlsId", required = false) int controlsId) {
-
         boolean issucess = edgStorageCageDetailsService.identWorn(identId,controlsId);
         return Result.build(200,"鎴愬姛",issucess);
     }
@@ -60,8 +59,9 @@
     @ApiOperation("纾ㄨ竟浠诲姟 鍙傛暟()")
     @PostMapping("/selectEdgTask")
     @ResponseBody
-    public Result selectEdgTask(String line) {
-        List<TaskCache> EdgTasks = taskCacheService.selectEdgInfo(line);
+    public Result selectEdgTask(@RequestBody Map<String, String> arguments) {
+        String line=arguments.get("line");
+        List<Map<String,Object>> EdgTasks = taskCacheService.selectEdgInfo(line);
         return Result.build(200,"鎴愬姛",EdgTasks);
     }
 
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 be66272..6132c32 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
@@ -3,6 +3,9 @@
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.taskcache.entity.TaskCache;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -15,4 +18,5 @@
 @DS("salve_hangzhoumes")
 public interface TaskCacheMapper extends BaseMapper<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 4f37295..239fabe 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
@@ -4,6 +4,7 @@
 import com.mes.taskcache.entity.TaskCache;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -15,15 +16,27 @@
  */
 public interface TaskCacheService extends IService<TaskCache> {
 
+
+    boolean insertTaskCache(TaskCache taskCache);
     /**
      * 鏌ヨ纾ㄨ竟浠诲姟
+     *
      * @param line
      * @return
      */
-    List<TaskCache> selectEdgInfo(String line);
+    List<Map<String,Object>> selectEdgInfo(String line);
+
+    /**
+     * 鏌ヨ纾ㄨ竟浠诲姟
+     *
+     * @param line
+     * @return
+     */
+    TaskCache queryGlassByTaskCache(int line, List<Integer> taskTypes);
 
     /**
      * 鏌ヨ鐞嗙墖浠诲姟
+     *
      * @return
      */
     List<TaskCache> selectCacheInfo();
@@ -58,6 +71,6 @@
      * @param line
      * @return
      */
-    TaskCache selectLastOutCacheInfo(String line);
+    TaskCache selectLastOutCacheInfo(int line);
 
 }
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 2398039..3b56659 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
@@ -1,17 +1,26 @@
 package com.mes.taskcache.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.mes.edgstoragecage.entity.EdgStorageCageDetails;
+import com.mes.edgstoragecage.mapper.EdgStorageCageDetailsMapper;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.mapper.GlassInfoMapper;
 import com.mes.taskcache.entity.TaskCache;
 import com.mes.taskcache.mapper.TaskCacheMapper;
 import com.mes.taskcache.service.TaskCacheService;
+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;
 
 /**
  * <p>
- * 鏈嶅姟瀹炵幇绫�
+ *  鏈嶅姟瀹炵幇绫�
  * </p>
  *
  * @author zhoush
@@ -20,32 +29,78 @@
 @Service
 public class TaskCacheServiceImpl extends ServiceImpl<TaskCacheMapper, TaskCache> implements TaskCacheService {
 
+    @Autowired
+    EdgStorageCageDetailsMapper edgStorageCageDetailsMapper;
+
+    @Autowired
+    GlassInfoMapper glassInfoMapper;
+    /**
+     * 娣诲姞鐞嗙墖绗间换鍔�
+     * @param taskCache
+     * @return
+     */
+    @Override
+    public boolean insertTaskCache(TaskCache taskCache){
+        baseMapper.insert(taskCache);
+        return true;
+    }
+
     /**
      * 鏌ヨ纾ㄨ竟浠诲姟
-     *
      * @param line
      * @return
      */
     @Override
-    public List<TaskCache> selectEdgInfo(String line) {
-        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell, line));
+    public List<Map<String,Object>> selectEdgInfo(String line) {
+        List<TaskCache> taskCache=baseMapper.selectList(new MPJLambdaWrapper<TaskCache>()
+                .selectAll(TaskCache.class)
+                .eq(TaskCache::getEndCell, line)
+                .eq(TaskCache::getTaskStatus,1)
+                .orderByAsc(TaskCache::getCreateTime));
+        List<Map<String,Object>> result=new ArrayList<>();
+        int serialNumber=1;
+        for(TaskCache taskCache1:taskCache){
+            Map<String,Object> map=new HashMap<>();
+            GlassInfo glassInfo=glassInfoMapper.selectOne(new MPJLambdaWrapper<GlassInfo>()
+                    .selectAll(GlassInfo.class)
+                    .eq(GlassInfo::getGlassId,taskCache1.getGlassId()));
+            if(glassInfo!=null){
+                map.put("Line",line);//绾胯矾   2001  1绾匡紝 2002 2绾�
+                map.put("Width",glassInfo.getWidth());//瀹�
+                map.put("Height",glassInfo.getHeight());//楂�
+                map.put("Thickness",glassInfo.getThickness());//鍘�
+                map.put("GlassId",glassInfo.getGlassId());//鐜荤拑ID
+                map.put("FlowCardId",glassInfo.getFlowCardId());//娴佺▼鍗″彿
+                map.put("TemperingLayoutId",glassInfo.getTemperingLayoutId());// 鏆備笉鏄剧ず  閽㈠寲鐗堝浘ID
+                map.put("TemperingFeedSequence",glassInfo.getTemperingFeedSequence());// 鏆備笉鏄剧ず  閽㈠寲鐗堝浘ID鍐呯殑搴忓彿
+                map.put("FilmsId",glassInfo.getFilmsid());//鑶滅郴
+                map.put("SerialNumber",serialNumber);//鍑虹墖椤哄簭
+                result.add(map);
+            }
+            serialNumber++;
+        }
+
+        return result;
 //        return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("end_cell",line));
+    }
+
+    @Override
+    public TaskCache queryGlassByTaskCache(int line, List<Integer> taskTypes) {
+        return baseMapper.queryGlassByTaskCache(line, taskTypes);
     }
 
     /**
      * 鏌ヨ寰呯悊鐗囧伐浣滅殑浠诲姟
-     *
      * @return
      */
     @Override
-    public List<TaskCache> selectCacheInfo() {
-        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus, 0));
+    public List<TaskCache> selectCacheInfo(){
+        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus,0));
 //        return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("task_status",0));
     }
 
     /**
      * 鏌ヨ鍏ㄩ儴浠诲姟
-     *
      * @return
      */
     @Override
@@ -55,48 +110,44 @@
 
     /**
      * 鏌ヨ寰呰繘鐗囦换鍔�
-     *
      * @return
      */
     @Override
-    public List<TaskCache> selectInputTaskCache() {
-        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus, 0).eq(TaskCache::getTaskType, 1));
+    public List<TaskCache> selectInputTaskCache(){
+        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus,0).eq(TaskCache::getTaskType,1));
 
 //        return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("task_status",0).eq("task_type",1));
     }
 
     /**
      * 鏌ヨ寰呭嚭鐗囦换鍔�
-     *
      * @return
      */
     @Override
-    public List<TaskCache> selectOutTaskCache() {
-        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus, 0).eq(TaskCache::getTaskType, 2));
+    public List<TaskCache> selectOutTaskCache(){
+        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getTaskStatus,0).eq(TaskCache::getTaskType,2));
 //        return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("task_status",0).eq("task_type",2));
     }
 
     /**
      * 鏌ヨ  A09  鎴� A10 鏈�鏂扮殑涓�鐗� 鍑虹墖浠诲姟
-     *
      * @param line
      * @return
      */
     @Override
-    public List<TaskCache> selectLastOutCacheInfos(int line) {
-        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell, line).eq(TaskCache::getTaskStatus, 1).orderByDesc(TaskCache::getCreateTime));
+    public List<TaskCache> selectLastOutCacheInfos(int line){
+        return baseMapper.selectList(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell,line).eq(TaskCache::getTaskStatus,1).orderByDesc(TaskCache::getCreateTime));
 //        return baseMapper.selectList(new QueryWrapper<TaskCache>().eq("end_cell",line).eq("task_status",1).orderByDesc("ID"));
     }
 
     /**
      * 鏌ヨ  A09  鎴� A10 鏈�鏂扮殑涓�鐗� 鍑虹墖浠诲姟
-     *
      * @param line
      * @return
      */
     @Override
-    public TaskCache selectLastOutCacheInfo(String line) {
-        return baseMapper.selectOne(new MPJLambdaWrapper<TaskCache>().selectAll(TaskCache.class).eq(TaskCache::getEndCell, line).eq(TaskCache::getTaskStatus, 1).orderByDesc(TaskCache::getCreateTime));
+    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));
     }
 
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-dev.yml
index 2dcebbc..13f6aaa 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application-dev.yml
@@ -4,20 +4,35 @@
       primary: hangzhoumes #璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓簃aster
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
+#        hangzhoumes:
+#          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+#          username: root
+#          password: beibo.123/
+#          driver-class-name: com.mysql.cj.jdbc.Driver
+#        pp:
+#          url: jdbc:mysql://127.0.0.1:3306/pp?serverTimezone=GMT%2b8
+#          username: root
+#          password: beibo.123/
+#          driver-class-name: com.mysql.cj.jdbc.Driver
+#        salve_hangzhoumes:
+#          url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes
+#          username: sa
+#          password: beibo.123/
+#          driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
         hangzhoumes:
-          url: jdbc:mysql://127.0.0.1:3306/hangzhoumes?serverTimezone=GMT%2b8
+          url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
         pp:
-          url: jdbc:mysql://127.0.0.1:3306/pp?serverTimezone=GMT%2b8
+          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
         salve_hangzhoumes:
-          url: jdbc:sqlserver://127.0.0.1:1433;databasename=hangzhoumes
+          url: jdbc:sqlserver://10.153.19.150:1433;databasename=hangzhoumes
           username: sa
-          password: '!QAZ2wsx'
+          password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
   cloud:
     nacos:
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
index a344abc..9be3f0b 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/application.yml
@@ -13,5 +13,7 @@
 mes:
   threshold: 3
   ratio: 10
+  firstLength: 3500
+  secondLength: 2500
   sequence:
     order: false
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml
new file mode 100644
index 0000000..e19d670
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/resources/mapper/TaskCacheMapper.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.mes.taskcache.mapper.TaskCacheMapper">
+
+    <select id="queryGlassByTaskCache" resultType="com.mes.taskcache.entity.TaskCache">
+        SELECT top 1
+        glass_id
+        ,start_cell
+        , end_cell
+        , task_type
+        , task_status
+        , create_time
+        FROM task_cache
+        <where>
+            end_cell = #{line}
+            AND task_type in
+            <foreach collection="taskTypes" item="item" open='(' close=')' separator=','>
+                #{item}
+            </foreach>
+        </where>
+        ORDER BY create_time desc
+    </select>
+
+</mapper>
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
index 1931f0a..855eddd 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/test/java/com/mes/CacheGlassModuleApplicationTest.java
@@ -16,6 +16,7 @@
 import com.mes.pp.mapper.OptimizeDetailMapper;
 import com.mes.taskcache.entity.TaskCache;
 import com.mes.taskcache.mapper.TaskCacheMapper;
+import com.mes.taskcache.service.impl.TaskCacheServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -44,6 +45,9 @@
 
     @Autowired
     TaskCacheMapper taskCacheMapper;
+
+    @Autowired
+    TaskCacheServiceImpl taskCacheServiceImpl;
     @Autowired
     OptimizeDetailMapper optimizeDetailMapper;
     @Autowired
@@ -59,6 +63,13 @@
     public void testSqlServer() {
                 List<TaskCache> list=taskCacheMapper.selectList(null);
                 log.info("鏁版嵁{}",list);
+        log.info("Sql鏁版嵁锛歿}", Arrays.asList(list));
+    }
+
+    @Test
+    public void testEdgtask() {
+        List<Map<String,Object>> list=taskCacheServiceImpl.selectEdgInfo("2001");
+        log.info("鏁版嵁{}",list);
         log.info("Sql鏁版嵁锛歿}", Arrays.asList(list));
     }
 
@@ -95,7 +106,6 @@
     }
     @Test
     public void testOptimizeDetail() {
-
         List<Map<String, Object>> map2=optimizeDetailMapper.selectJoinMaps(JoinWrappers.lambda(OptimizeDetail.class)
                 .selectAll(OptimizeDetail.class)
                 .selectAs(OptimizeLayout::getWidth,"olWidth")
@@ -113,7 +123,7 @@
     public void testOutTask() {
         EdgStorageCageDetails edgStorageCageDetails=edgStorageCageDetailsService.selectConformGlass("1",3);
 
-        log.info("鍒囧壊褰撳墠鐗堝浘淇℃伅1锛歿}", Arrays.asList(edgStorageCageDetails));
+        log.info("鍑虹墖浠诲姟锛歿}", Arrays.asList(edgStorageCageDetails));
     }
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
index a81873e..4daedb5 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageController.java
@@ -30,8 +30,8 @@
 
     @ApiOperation("鏌ヨ鐞嗙墖绗间俊鎭�")
     @GetMapping("/bigStorageCage")
-    public Result querybigStorageCageDetail() {
-        return Result.build(200,"鏌ヨ鎴愬姛",bigStorageCageService.querybigStorageCageDetail());
+    public Result querybigStorageCageDetail(int deviceId) {
+        return Result.build(200,"鏌ヨ鎴愬姛",bigStorageCageService.querybigStorageCageDetail(deviceId));
     }
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
index 5d3bc0b..10bb881 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java
@@ -1,6 +1,7 @@
 package com.mes.bigstorage.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.utils.Result;
@@ -40,7 +41,6 @@
     public Result insertBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
         bigStorageCageDetailsService.save(bigStorageCageDetails);
         return Result.build(200,"娣诲姞鎴愬姛",1);
-
     }
 
     @ApiOperation("鐞嗙墖绗艰鎯呭垹闄�")
@@ -48,7 +48,15 @@
     public Result deleteBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails) {
         bigStorageCageDetailsService.removeById(bigStorageCageDetails.getId());
         return Result.build(200,"鍒犻櫎鎴愬姛",1);
-
     }
+
+    @ApiOperation("鐞嗙墖绗间换鍔℃煡璇�")
+    @PostMapping("/selectBigStorageCageDetails")
+    public Result selectBigStorageCageDetails(int state) {
+        LambdaQueryWrapper<BigStorageCageDetails> selectWrapper = new LambdaQueryWrapper<>();
+        selectWrapper.eq(BigStorageCageDetails::getState,state);
+        return Result.build(200,"鏌ヨ鎴愬姛",bigStorageCageDetailsService.list(selectWrapper));
+    }
+
 }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
index 4788f9b..0acc5f2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
@@ -1,13 +1,18 @@
 package com.mes.bigstorage.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * <p>
@@ -17,6 +22,7 @@
  * @author zhoush
  * @since 2024-03-27
  */
+@ApiModel(description = "<p> </p>")
 @Api(description = "澶х悊鐗囩璇︽儏")
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -109,5 +115,18 @@
     @ApiModelProperty(value = "鐜荤拑闂撮殭", position = 15)
     private Integer gap;
 
+    /**
+     * 杩涚墖浠诲姟
+     */
+    @ApiModelProperty(value = "杩涚墖浠诲姟", position = 16)
+    @TableField(exist = false)
+    private BigStorageCageFeedTask bigStorageCageFeedTask;
+
+    /**
+     * 鍑虹墖浠诲姟
+     */
+    @ApiModelProperty(value = "鍑虹墖浠诲姟", position = 17)
+    @TableField(exist = false)
+    private BigStorageCageOutTask bigStorageCageOutTask;
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
index ef46c59..7b0a0a4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java
@@ -2,6 +2,9 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
+import com.mes.glassinfo.entity.GlassInfo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +16,7 @@
  */
 public interface BigStorageCageDetailsService extends IService<BigStorageCageDetails> {
 
+    List<BigStorageCageDetails> selectTask(int taskType);
+
+    boolean selectGetBoard(GlassInfo glassInfo, String plcFeedReqLine);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
index 60ba4df..5f1d50f 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageService.java
@@ -7,6 +7,7 @@
 import com.mes.glassinfo.entity.GlassInfo;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -24,6 +25,9 @@
 
     boolean outGlass();
 
-    List<BigStorageCage> querybigStorageCageDetail();
+    List<BigStorageCage> querybigStorageCageDetail(int deviceId);
 
+    List<Map<String, Object>> selectBigStorageCageUsage();
+
+    boolean selectWidthSufficient(BigStorageCageDetails layoutSlotInfo,double width);
 }
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 298761d..89a9109 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
@@ -1,15 +1,24 @@
 package com.mes.bigstorage.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstorage.mapper.BigStorageCageMapper;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
+import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
+import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
+import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper;
+import com.mes.glassinfo.entity.GlassInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -21,7 +30,82 @@
  */
 @Service
 public class BigStorageCageDetailsServiceImpl extends ServiceImpl<BigStorageCageDetailsMapper, BigStorageCageDetails> implements BigStorageCageDetailsService {
-    @Resource
-    private BigStorageCageMapper bigStorageCageMapper;
 
+    @Resource
+    private BigStorageCageOutTaskMapper bigStorageCageOutTaskMapper;
+    @Resource
+    private BigStorageCageFeedTaskMapper bigStorageCageFeedTaskMapper;
+
+    /**
+     * 鏌ヨ杩�/鍑虹墖浠诲姟
+     */
+    @Override
+    public List<BigStorageCageDetails> selectTask(int taskType) {
+        if(taskType==1){
+            //杩涚墖浠诲姟鏁版嵁
+            LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>();
+            feedWrapper.eq(BigStorageCageDetails::getState, 1)
+                    .or()
+                    .eq(BigStorageCageDetails::getState, 2);
+            List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(feedWrapper);
+            List<BigStorageCageFeedTask> bigStorageCageFeedTaskList=bigStorageCageFeedTaskMapper.selectList(null);
+
+            Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream()
+                    .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task));
+
+            for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) {
+                BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId());
+                bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
+            }
+            return bigStorageCageDetailsList;
+        }else{
+            //鍑虹墖浠诲姟鏁版嵁
+            LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>();
+            outWrapper.eq(BigStorageCageDetails::getState, 3)
+                    .or()
+                    .eq(BigStorageCageDetails::getState, 4);
+            List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(outWrapper);
+            List<BigStorageCageOutTask> bigStorageCageOutTaskList=bigStorageCageOutTaskMapper.selectList(null);
+
+            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);
+            }
+            return bigStorageCageDetailsList;
+        }
+
+    }
+
+    /**
+     * 鍒ゆ柇褰撳墠鐜荤拑鏄惁鑳戒笂杞�
+     */
+    @Override
+    public boolean selectGetBoard(GlassInfo glassInfo, String plcFeedReqLine){
+        double carWidth=5000;
+        LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>();
+        feedWrapper.eq(BigStorageCageDetails::getState, plcFeedReqLine);
+
+        List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(feedWrapper);
+        List<BigStorageCageFeedTask> bigStorageCageFeedTaskList=bigStorageCageFeedTaskMapper.selectList(null);
+        Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream()
+                .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task));
+        for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList) {
+            BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId());
+            bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
+        }
+        for (BigStorageCageDetails bigStorageCageDetails:bigStorageCageDetailsList
+             ) {
+            if(bigStorageCageDetails.getBigStorageCageFeedTask().getTaskState()==0){
+                carWidth -= Integer.parseInt(bigStorageCageDetails.getWidth().toString()) + bigStorageCageDetails.getGap();
+            }
+        }
+        if(carWidth>=0){
+            return true;
+        }else{
+            return false;
+        }
+
+    }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
index 51d5f49..c798fc7 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageServiceImpl.java
@@ -10,6 +10,7 @@
 import com.mes.bigstorage.mapper.BigStorageCageMapper;
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
 import lombok.extern.slf4j.Slf4j;
@@ -18,6 +19,7 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -44,29 +46,32 @@
     @Resource
     private TemperingGlassInfoService temperingGlassInfoService;
 
+    @Resource
+    private GlassInfoService glassInfoService;
+
+    //杩涚墖閫昏緫
     @Override
     public BigStorageCageDetails feedGlass(GlassInfo glassInfo, BigStorageCageDetails bigStorageCageDetails) {
 
-        log.info("1銆佹煡璇㈢悊鐗囩鍐呯墖搴�+1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠�");
         LambdaQueryWrapper<BigStorageCageDetails> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
-                .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1);
+                .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() - 1);
         BigStorageCageDetails layoutSlotInfo;
         layoutSlotInfo= bigStorageCageDetailsMapper.selectOne(wrapper);
-
+        log.info("1銆佹煡璇㈢悊鐗囩鍐呯墖搴�-1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠�"+layoutSlotInfo);
         BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
 
-        log.info("2銆佹煡璇㈢悊鐗囩鍐呯墖搴�+1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠冪殑缁撴灉涓嶄负绌烘椂");
-        if (layoutSlotInfo.getSlot() != null) {
+        log.info("2銆佹煡璇㈢悊鐗囩鍐呯墖搴�-1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠冪殑缁撴灉涓嶄负绌烘椂"+layoutSlotInfo.getSlot());
+        if (layoutSlotInfo.getSlot() != null&&selectWidthSufficient(layoutSlotInfo,bigStorageCageDetails.getWidth())) {
             bigStorageCageDetails.setSlot(layoutSlotInfo.getSlot());
         } else {
-            log.info("3銆佹煡璇㈢悊鐗囩鍐呯墖搴�+1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠冪殑缁撴灉涓虹┖鏃惰幏鍙栧綋鍓嶇幓鐠冪増鍥緄d鏄惁瀛樺湪鐞嗙墖绗煎唴");
+            log.info("3銆佹煡璇㈢悊鐗囩鍐呯墖搴�-1绛変簬褰撳墠鐜荤拑鐗囧簭鐨勭幓鐠冪殑缁撴灉涓虹┖鏃惰幏鍙栧綋鍓嶇幓鐠冪増鍥緄d鏄惁瀛樺湪鐞嗙墖绗煎唴");
             LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailslambdaQueryWrapper = new LambdaQueryWrapper<>();
             bigStorageCageDetailslambdaQueryWrapper
                     .select(BigStorageCageDetails::getTemperingLayoutId);
             layoutSlotInfo = bigStorageCageDetailsMapper.selectOne(bigStorageCageDetailslambdaQueryWrapper);
 
-            if(layoutSlotInfo != null){
+            if(layoutSlotInfo != null&&selectWidthSufficient(layoutSlotInfo,bigStorageCageDetails.getWidth())){
                 log.info("4銆佽幏鍙栫瀛愬唴閫傚悎鐨勬牸瀛�");
                 BigStorageCage bigStorageCage=bigStorageCageSlot(layoutSlotInfo.getDeviceId());
                 bigStorageCageDetails.setSlot(bigStorageCage.getSlot());
@@ -81,13 +86,19 @@
                 List<Map<String, Object>> bigStorageCageDetailsCount= bigStorageCageDetailsMapper.selectMaps(queryWrapper);
 
                 log.info("5銆佹煡璇㈢瀛愬唴鏄惁鏈夊悎閫傜殑鏍煎瓙");
+                boolean found=false;
                 for (Map<String, Object> map : bigStorageCageDetailsCount) {
                     for (Map.Entry<String, Object> entry : map.entrySet()) {
                         int deviceId = Integer.parseInt(entry.getKey());
                         BigStorageCage bigStorageCage=bigStorageCageSlot(deviceId);
                         if(bigStorageCage!=null){
                             bigStorageCageDetails.setSlot(bigStorageCage.getSlot());
+                            found=true;
+                            break;
                         }
+                    }
+                    if(found){
+                        break;
                     }
                 }
             }
@@ -114,13 +125,14 @@
                 return bigStorageCageMapper.selectOne(bigStorageCageWrapper);
     }
 
-
+    //鍑虹墖閫昏緫
     @Override
     public boolean outGlass() {
-        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list();
+        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper=new LambdaQueryWrapper<>();
+        temperingGlassInfoWrapper.eq(TemperingGlassInfo::getState,-1);
+        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(temperingGlassInfoWrapper);
         log.info("1銆佹煡璇㈤挗鍖栧皬鐗囦换鍔¤〃鏄惁鏈夊緟鍑虹幓鐠�"+temperingGlassInfoList.size());
-
-        if(temperingGlassInfoList!=null){
+        if(temperingGlassInfoList.size()>0){
             temperingGlassInfoService.addOutTask(temperingGlassInfoList);
             log.info("2銆佹坊鍔犱换鍔″埌浠诲姟琛�");
             return true;
@@ -136,7 +148,17 @@
                     String layoutId = entry.getKey().substring(0, entry.getKey().indexOf('-'));
                     String layoutNum = entry.getKey().substring(entry.getKey().indexOf('-') + 1);
                     if (layoutNum.equals(entry.getValue())) {
-                        //4銆佹坊鍔犳閽㈠寲鐗堝浘id鎵�鏈夊皬鐗囧皬鐗囧埌閽㈠寲灏忕墖琛�
+                        log.info("4銆佹坊鍔犳閽㈠寲鐗堝浘id鎵�鏈夊皬鐗囧皬鐗囧埌閽㈠寲灏忕墖琛�");
+                        LambdaQueryWrapper<GlassInfo> glassInfoWrapper=new LambdaQueryWrapper<>();
+                        glassInfoWrapper.select(GlassInfo::getTemperingLayoutId)
+                                .orderByDesc(GlassInfo::getTemperingFeedSequence);
+                        List<GlassInfo> glassInfoList= glassInfoService.list(glassInfoWrapper);
+                        for (GlassInfo glassInfo:glassInfoList
+                             ) {
+                            TemperingGlassInfo temperingGlassInfo=new TemperingGlassInfo();
+                            BeanUtils.copyProperties(glassInfo, temperingGlassInfo);
+                            temperingGlassInfoService.save(temperingGlassInfo);
+                        }
                         return false;
                     }
                 }
@@ -163,16 +185,21 @@
         bigStorageCageMapper.update(bigStorageCage, bigStorageCageWrapper);
     }
 
-
-
-
+    //鏌ヨ澶х悊鐗囦俊鎭紝鍓嶇灞曠ず鐢�
     @Override
-    public List<BigStorageCage> querybigStorageCageDetail() {
-        //1銆佽幏鍙栧ぇ鐞嗙墖绗间俊鎭�
-        List<BigStorageCage> bigStorageCages = bigStorageCageMapper.selectList(null);
+    public List<BigStorageCage> querybigStorageCageDetail(int deviceId) {
+
+        LambdaQueryWrapper<BigStorageCage> BigStorageCageWrapper =new LambdaQueryWrapper<>();
+        BigStorageCageWrapper.eq(BigStorageCage::getSlot,deviceId);
+
+        LambdaQueryWrapper<BigStorageCageDetails> BigStorageCageDetailsWrapper =new LambdaQueryWrapper<>();
+        BigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getSlot,deviceId);
+
+        List<BigStorageCage> bigStorageCages = bigStorageCageMapper.selectList(BigStorageCageWrapper);
         log.info("1銆佽幏鍙栧ぇ鐞嗙墖绗间俊鎭畬鎴愶紝鑾峰彇鍒扮殑鏁版嵁{}", bigStorageCages.size());
-        //2鑾峰彇鐞嗙墖绗兼墍鏈変俊鎭�
-        List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsMapper.selectList(null);
+
+        List<BigStorageCageDetails> bigStorageCageDetailsList = bigStorageCageDetailsMapper.selectList(BigStorageCageDetailsWrapper);
+
         Map<Integer, List<BigStorageCageDetails>> listMap = bigStorageCageDetailsList.stream().collect(Collectors.groupingBy(BigStorageCageDetails::getSlot));
         for (BigStorageCage bigStorageCage : bigStorageCages) {
             List<BigStorageCageDetails> bigStorageCageDetails = listMap.get(bigStorageCage.getSlot());
@@ -181,4 +208,28 @@
         return bigStorageCages;
     }
 
+    //绗煎瓙浣跨敤鎯呭喌锛岀晫闈㈠睍绀虹敤
+    @Override
+    public List<Map<String, Object>> selectBigStorageCageUsage() {
+        QueryWrapper<BigStorageCage> wrapper = new QueryWrapper<>();
+        wrapper.select("device_id")
+                .select("ROUND(1 - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) / COUNT(device_id), 2) AS percentage")
+                .select("COUNT(device_id) - SUM(CASE WHEN remain_width = 5000 THEN 1 ELSE 0 END) AS count")
+                .groupBy("device_id");
+        List<Map<String, Object>> bigStorageCageUsages=baseMapper.selectMaps(wrapper);
+        return bigStorageCageUsages;
+    }
+
+    //鍒ゆ柇绗煎瓙鍓╀綑瀹藉害鏄惁瓒冲
+    @Override
+    public boolean selectWidthSufficient(BigStorageCageDetails layoutSlotInfo,double width) {
+        LambdaQueryWrapper<BigStorageCage> BigStorageCageWrapper = new LambdaQueryWrapper<>();
+        BigStorageCageWrapper.eq(BigStorageCage::getSlot,layoutSlotInfo.getSlot());
+        BigStorageCage bigStorageCage=baseMapper.selectOne(BigStorageCageWrapper);
+        if(bigStorageCage.getRemainWidth()>width){
+            return true;
+        }else{
+            return false;
+        }
+    }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
index a9f3743..41ed73d 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageFeedTask.java
@@ -3,6 +3,9 @@
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -14,21 +17,48 @@
  * @author zhoush
  * @since 2024-04-16
  */
+@ApiModel(description = "<p>  </p>")
 @Data
 @EqualsAndHashCode(callSuper = false)
 public class BigStorageCageFeedTask implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 涓婚敭id
+     */
+      @ApiModelProperty(value = "涓婚敭id", position = 2)
       @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    /**
+     * 鐜荤拑id
+     */
+    @ApiModelProperty(value = "鐜荤拑id", position = 3)
+    private String glassId;
+
+    /**
+     * 鐩爣浣嶇疆
+     */
+    @ApiModelProperty(value = "鐩爣浣嶇疆", position = 4)
     private Integer tragetSlot;
 
+    /**
+     * 鐜荤拑绫诲瀷
+     */
+    @ApiModelProperty(value = "鐜荤拑绫诲瀷", position = 5)
     private Integer taskType;
 
+    /**
+     * 浠诲姟绫诲瀷
+     */
+    @ApiModelProperty(value = "浠诲姟绫诲瀷", position = 6)
     private Integer taskState;
 
+    /**
+     * 绾胯矾
+     */
+    @ApiModelProperty(value = "绾胯矾", position = 7)
     private Integer line;
 
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
index ffbb1d7..2094530 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
@@ -3,6 +3,9 @@
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -14,23 +17,54 @@
  * @author zhoush
  * @since 2024-04-16
  */
+@ApiModel(description = "<p>  </p>")
 @Data
 @EqualsAndHashCode(callSuper = false)
 public class BigStorageCageOutTask implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 涓婚敭id
+     */
+      @ApiModelProperty(value = "涓婚敭id", position = 2)
       @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    /**
+     * 鐜荤拑id
+     */
+    @ApiModelProperty(value = "鐜荤拑id", position = 3)
+    private String glassId;
+
+    /**
+     * 寮�濮嬩綅缃�
+     */
+    @ApiModelProperty(value = "寮�濮嬩綅缃�", position = 4)
     private Integer startSlot;
 
+    /**
+     * 鐩爣浣嶇疆
+     */
+    @ApiModelProperty(value = "鐩爣浣嶇疆", position = 5)
     private Integer endSlot;
 
+    /**
+     * 杞︽
+     */
+    @ApiModelProperty(value = "杞︽", position = 6)
     private Integer trainNumber;
 
+    /**
+     * 搴忓彿
+     */
+    @ApiModelProperty(value = "搴忓彿", position = 7)
     private Integer serialNumber;
 
+    /**
+     * 浠诲姟鐘舵��
+     */
+    @ApiModelProperty(value = "浠诲姟鐘舵��", position = 8)
     private Integer taskState;
 
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
index 3765470..9722bca 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageFeedTaskMapper.java
@@ -1,5 +1,6 @@
 package com.mes.bigstoragetask.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -11,6 +12,7 @@
  * @author zhoush
  * @since 2024-04-16
  */
+@DS("salve_hangzhoumes")
 public interface BigStorageCageFeedTaskMapper extends BaseMapper<BigStorageCageFeedTask> {
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
index 4c29af4..4140cfa 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/mapper/BigStorageCageOutTaskMapper.java
@@ -1,5 +1,6 @@
 package com.mes.bigstoragetask.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -11,6 +12,7 @@
  * @author zhoush
  * @since 2024-04-16
  */
+@DS("salve_hangzhoumes")
 public interface BigStorageCageOutTaskMapper extends BaseMapper<BigStorageCageOutTask> {
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
index 2e10a4d..2c9a9e2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/BigStorageCageOutTaskService.java
@@ -19,5 +19,5 @@
 
     void updateOutTask();
 
-    void deleteOutTask(Long taskId);
+    void deleteOutTask(String glassId);
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
index c06a427..32938c2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/service/impl/BigStorageCageOutTaskServiceImpl.java
@@ -1,12 +1,14 @@
 package com.mes.bigstoragetask.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper;
 import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -32,6 +34,10 @@
     BigStorageCageOutTaskMapper bigStorageCageOutTaskMapper;
     @Resource
     BigStorageCageDetailsMapper bigStorageCageDetailsMapper;
+
+    /**
+     * 鏌ヨ浠诲姟淇℃伅
+     */
     @Override
     public List<BigStorageCageOutTask> querybigStorageCageOutTask(int taskState){
         log.info("鏍规嵁浼犲叆鐨勪换鍔$姸鎬佹煡璇换鍔′俊鎭細"+taskState);
@@ -40,21 +46,46 @@
         return baseMapper.selectList(getOutTaskWrapper);
     }
 
+    /**
+     * 妫�娴婸LC鏄惁瀹屾垚浠诲姟
+     */
     @Override
     public void updateOutTask(){
         List<BigStorageCageOutTask> bigStorageCageOutTaskList=querybigStorageCageOutTask(1);
         log.info("鏌ヨ浠诲姟琛ㄦ槸鍚︽湁宸插畬鎴愮殑鍑虹墖浠诲姟"+bigStorageCageOutTaskList.size());
         for (BigStorageCageOutTask bigStorageCageOutTask:bigStorageCageOutTaskList
         ) {
-            deleteOutTask(bigStorageCageOutTask.getId());
+            deleteOutTask(bigStorageCageOutTask.getGlassId());
         }
     }
 
+    /**
+     * 瀹屾垚鍑虹墖浠诲姟
+     */
     @Override
-    public void deleteOutTask(Long taskId){
+    public void deleteOutTask(String glassId){
         log.info("鏍规嵁浠诲姟id淇敼閽㈠寲灏忕墖琛ㄧ姸鎬侊紝鍒犻櫎宸插畬鎴愮殑鍑虹墖浠诲姟,鍒犻櫎绗煎瓙琛ㄧ幓鐠�");
-        temperingGlassInfoMapper.deleteById(taskId);
-        bigStorageCageOutTaskMapper.deleteById(taskId);
-        bigStorageCageDetailsMapper.deleteById(taskId);
+
+        LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoWrapper =new LambdaQueryWrapper<>();
+        temperingGlassInfoWrapper.eq(TemperingGlassInfo::getGlassId,glassId);
+        TemperingGlassInfo temperingGlassInfo=temperingGlassInfoMapper.selectOne(temperingGlassInfoWrapper);
+        //鍒ゆ柇鏄惁鎵嬪姩浠诲姟锛屼笉閽㈠寲浠诲姟瀹屾垚鍚庡垹鎺夛紝閽㈠寲浠诲姟瀹屾垚鍚庢敼鐘舵�佷负0
+        if(temperingGlassInfo.getState()==-2){
+            temperingGlassInfoMapper.deleteById(temperingGlassInfo.getId());
+        }else{
+            temperingGlassInfo.setState(0);
+            temperingGlassInfoMapper.updateById(temperingGlassInfo);
+        }
+
+        LambdaQueryWrapper<BigStorageCageOutTask> bigStorageCageOutTaskWrapper =new LambdaQueryWrapper<>();
+        bigStorageCageOutTaskWrapper.eq(BigStorageCageOutTask::getGlassId,glassId);
+        BigStorageCageOutTask bigStorageCageOutTask=bigStorageCageOutTaskMapper.selectOne(bigStorageCageOutTaskWrapper);
+        bigStorageCageOutTaskMapper.deleteById(bigStorageCageOutTask.getId());
+
+        LambdaQueryWrapper<BigStorageCageDetails> bigStorageCageDetailsWrapper =new LambdaQueryWrapper<>();
+        bigStorageCageDetailsWrapper.eq(BigStorageCageDetails::getGlassId,glassId);
+        BigStorageCageDetails bigStorageCageDetails=bigStorageCageDetailsMapper.selectOne(bigStorageCageDetailsWrapper);
+        bigStorageCageDetailsMapper.deleteById(bigStorageCageOutTask.getId());
+
     }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
index ac57db3..304846e 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/common/S7object.java
@@ -24,7 +24,9 @@
     private S7object() {
         if (plccontrol == null) {
             plccontrol = new S7control(plcType, ip, port, 0, 0);
-            String PlcLoadGlass = System.getProperty("user.dir") + "/JsonFile/PlcCacheVerticalGlass.json";
+
+            String PlcLoadGlass=S7object.class.getResource("/JsonFile/PlcCacheVerticalGlass.json").getPath();
+            //log.info(PLCAutoMes.class.getResource("").getPath());
             PlcMesObject = InitUtil.initword(PlcLoadGlass);
         }
     }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/controller/EdgGlassTaskInfoController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/controller/EdgGlassTaskInfoController.java
new file mode 100644
index 0000000..b8b8a9d
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/controller/EdgGlassTaskInfoController.java
@@ -0,0 +1,20 @@
+package com.mes.edgglasstask.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-05-11
+ */
+@RestController
+@RequestMapping("/edgGlassTaskInfo")
+public class EdgGlassTaskInfoController {
+
+}
+
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
new file mode 100644
index 0000000..52ad531
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/entity/EdgGlassTaskInfo.java
@@ -0,0 +1,71 @@
+package com.mes.edgglasstask.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author wu
+ * @since 2024-05-11
+ */
+@ApiModel(description = "<p> </p>")
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class EdgGlassTaskInfo implements Serializable {
+
+    /**
+     * 纾ㄨ竟浠诲姟id
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鐜荤拑id
+     */
+    @ApiModelProperty(value = "鐜荤拑id", position = 2)
+    private String glassId;
+
+    /**
+     * 瀹�
+     */
+    @ApiModelProperty(value = "瀹�", position = 3)
+    private Integer width;
+
+    /**
+     * 楂�
+     */
+    @ApiModelProperty(value = "楂�", position = 4)
+    private Integer height;
+
+    /**
+     * 鍘氬害
+     */
+    @ApiModelProperty(value = "鍘氬害", position = 5)
+    private Integer thickness;
+
+    /**
+     * 鐜荤拑绫诲瀷
+     */
+    @ApiModelProperty(value = "鐜荤拑绫诲瀷", position = 6)
+    private Integer glassType;
+
+    /**
+     * 鐘舵��
+     */
+    @ApiModelProperty(value = "鐘舵��", position = 7)
+    private Integer status;
+
+    /**
+     * 绾胯矾
+     */
+    @ApiModelProperty(value = "绾胯矾", position = 8)
+    private Integer line;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/mapper/EdgGlassTaskInfoMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/mapper/EdgGlassTaskInfoMapper.java
new file mode 100644
index 0000000..2f6a5be
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/mapper/EdgGlassTaskInfoMapper.java
@@ -0,0 +1,18 @@
+package com.mes.edgglasstask.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-05-11
+ */
+@DS("salve_hangzhoumes")
+public interface EdgGlassTaskInfoMapper extends BaseMapper<EdgGlassTaskInfo> {
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
new file mode 100644
index 0000000..1589b7d
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/EdgGlassTaskInfoService.java
@@ -0,0 +1,16 @@
+package com.mes.edgglasstask.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-05-11
+ */
+public interface EdgGlassTaskInfoService extends IService<EdgGlassTaskInfo> {
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
new file mode 100644
index 0000000..34a06f4
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgglasstask/service/impl/EdgGlassTaskInfoServiceImpl.java
@@ -0,0 +1,20 @@
+package com.mes.edgglasstask.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.edgglasstask.entity.EdgGlassTaskInfo;
+import com.mes.edgglasstask.mapper.EdgGlassTaskInfoMapper;
+import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-05-11
+ */
+@Service
+public class EdgGlassTaskInfoServiceImpl extends ServiceImpl<EdgGlassTaskInfoMapper, EdgGlassTaskInfo> implements EdgGlassTaskInfoService {
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java
index a11c8d2..23b286a 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/controller/TaskCacheController.java
@@ -1,4 +1,4 @@
-package com.mes.userinfo.controller;
+package com.mes.edgstoragetask.controller;
 
 
 import org.springframework.web.bind.annotation.RequestMapping;
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java
index 0f9d676..dee45f9 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/edgstoragetask/mapper/TaskCacheMapper.java
@@ -1,5 +1,6 @@
 package com.mes.edgstoragetask.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.mes.edgstoragetask.entity.TaskCache;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -11,6 +12,7 @@
  * @author zhoush
  * @since 2024-04-16
  */
+@DS("salve_hangzhoumes")
 public interface TaskCacheMapper extends BaseMapper<TaskCache> {
 
 }
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
new file mode 100644
index 0000000..d0c68d0
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
@@ -0,0 +1,101 @@
+package com.mes.job;
+
+import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.mes.bigstorage.entity.BigStorageCage;
+import com.mes.bigstorage.entity.BigStorageCageDetails;
+import com.mes.bigstorage.service.BigStorageCageDetailsService;
+import com.mes.bigstorage.service.BigStorageCageService;
+import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
+import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
+import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
+import com.mes.common.S7object;
+import com.mes.device.PlcParameterObject;
+import com.mes.edgstoragetask.service.TaskCacheService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.menu.service.SysMenuService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
+import com.mes.tools.WebSocketServer;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Component
+@Slf4j
+public class PlcSlicecage {
+
+    @Resource
+    private BigStorageCageService bigStorageCageService;
+    @Resource
+    private BigStorageCageDetailsService bigStorageCageDetailsService;
+    @Resource
+    private TemperingGlassInfoService temperingGlassInfoService;
+
+    PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+    /**
+     * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
+     * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
+     */
+    @Scheduled(fixedDelay = 5000)
+    public void plcStorageCageTask() throws InterruptedException {
+        JSONObject jsonObject = new JSONObject();
+        try {
+            //鐣岄潰灞曠ず绗煎瓙淇℃伅
+            jsonObject.append("bigStorageCageInfo1", bigStorageCageService.querybigStorageCageDetail(1));
+            jsonObject.append("bigStorageCageInfo2", bigStorageCageService.querybigStorageCageDetail(2));
+            jsonObject.append("bigStorageCageInfo3", bigStorageCageService.querybigStorageCageDetail(3));
+            jsonObject.append("bigStorageCageInfo4", bigStorageCageService.querybigStorageCageDetail(4));
+            jsonObject.append("bigStorageCageInfo5", bigStorageCageService.querybigStorageCageDetail(5));
+            jsonObject.append("bigStorageCageInfo6", bigStorageCageService.querybigStorageCageDetail(6));
+            jsonObject.append("bigStorageCageInfo7", bigStorageCageService.querybigStorageCageDetail(7));
+            jsonObject.append("bigStorageCageInfo8", bigStorageCageService.querybigStorageCageDetail(8));
+
+            //杩涚墖浠诲姟鏁版嵁
+            List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectTask(1);
+            jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask);
+
+            //鍑虹墖浠诲姟鏁版嵁
+            List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectTask(2);
+            jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask);
+
+            //鐞嗙墖绗间娇鐢ㄦ儏鍐�
+            List<Map<String, Object>> bigStorageCageUsage=bigStorageCageService.selectBigStorageCageUsage();
+            jsonObject.append("bigStorageCageUsage", bigStorageCageUsage);
+
+            //鍑虹墖闃熷垪
+            List<TemperingGlassInfo> temperingGlassInfoList= temperingGlassInfoService.list();
+            jsonObject.append("temperingGlassInfoList", temperingGlassInfoList);
+
+            //鎶ヨ淇℃伅
+            jsonObject.append("bigStorageCageFullAlarm", PlcStorageCageTask.bigStorageCageFullAlarm);
+
+            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
+            if (sendwServer != null) {
+                for (WebSocketServer webserver : sendwServer) {
+                    if (webserver != null) {
+                        webserver.sendMessage(jsonObject.toString());
+                        List<String> messages = webserver.getMessages();
+                        if (!messages.isEmpty()) {
+                            // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+                            webserver.clearMessages();
+                        }
+                    } else {
+                        log.info("Home is closed");
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+}
\ 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 f34d1a3..476151f 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
@@ -1,6 +1,4 @@
 package com.mes.job;
-
-import cn.hutool.json.JSONObject;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
@@ -13,14 +11,11 @@
 import com.mes.edgstoragetask.service.TaskCacheService;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
-import com.mes.menu.service.SysMenuService;
-import com.mes.tools.WebSocketServer;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.List;
 
 @Component
@@ -40,20 +35,16 @@
     @Resource
     private TaskCacheService taskCacheService;
 
-    @Resource
-    private SysMenuService sysMenuService;
-
     PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
+
+    public static boolean bigStorageCageFullAlarm = false;
     /**
      * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
      * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
      */
-    @Scheduled(fixedDelay = 300)
+    @Scheduled(fixedDelay = 5000)
     public void plcStorageCageTask() throws InterruptedException {
-        JSONObject jsonObject = new JSONObject();
         try {
-            // 鐖嗙鎶ヨ
-            boolean bigStorageCageFullAlarm = false;
 
             String plcFeedGlassid = "";
             String plcFeedReqLine = "0";
@@ -71,15 +62,24 @@
                 BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
                 GlassInfo glassInfo = glassInfoService.getById(plcFeedGlassid);
                 log.info("2銆佹牴鎹幓鐠僫d鑾峰彇鐜荤拑淇℃伅" + glassInfo);
-                BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails);
-                if (slotInfo != null) {
-                    int taskType = taskCacheService.judgeTasktype();
-                    log.info("3銆佹煡璇换鍔¤〃鍒ゆ柇褰撳墠浠诲姟绫诲瀷涓轰笂杞︾瓑鍒拌繕鏄笂杞﹀惎鍔�" + taskType);
-                    bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType);
-                    log.info("4銆佹坊鍔犱换鍔″埌浠诲姟琛�");
-                    bigStorageCageFullAlarm = false;
-                } else {
-                    bigStorageCageFullAlarm = true;
+                if(bigStorageCageDetailsService.selectGetBoard(glassInfo,plcFeedReqLine)){
+                    BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails);
+                    if (slotInfo != null) {
+                        int taskType = taskCacheService.judgeTasktype();
+                        log.info("3銆佹煡璇换鍔¤〃鍒ゆ柇褰撳墠浠诲姟绫诲瀷涓轰笂杞︾瓑鍒拌繕鏄笂杞﹀惎鍔�" + taskType);
+                        bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType);
+                        log.info("4銆佹坊鍔犱换鍔″埌浠诲姟琛�");
+                        bigStorageCageFullAlarm = false;
+                    } else {
+                        bigStorageCageFullAlarm = true;
+                    }
+                }else{
+                    log.info("褰撳墠鐜荤拑瀹藉害涓嶅涓婅溅" + glassInfo);
+                    if(!("1".equals(plcFeedReqLine))){
+                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
+                    }else{
+                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
+                    }
                 }
             } else {
                 List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskService.querybigStorageCageFeedTask(1);
@@ -105,24 +105,8 @@
             bigStorageCageOutTaskService.updateOutTask();
             log.info("9銆佹牴鎹换鍔¤〃鐘舵�佷慨鏀归挗鍖栧皬鐗囪〃浠诲姟鐘舵��");
 
-            //鎶ヨ淇℃伅
-            jsonObject.append("bigStorageCageFullAlarm", bigStorageCageFullAlarm);
 
-            ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("Home");
-            if (sendwServer != null) {
-                for (WebSocketServer webserver : sendwServer) {
-                    if (webserver != null) {
-                        webserver.sendMessage(jsonObject.toString());
-                        List<String> messages = webserver.getMessages();
-                        if (!messages.isEmpty()) {
-                            // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
-                            webserver.clearMessages();
-                        }
-                    } else {
-                        log.info("Home is closed");
-                    }
-                }
-            }
+
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
index 3f6b0c9..40878b5 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/entity/TemperingGlassInfo.java
@@ -3,6 +3,9 @@
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -14,6 +17,7 @@
  * @author zhoush
  * @since 2024-03-27
  */
+@ApiModel(description = "<p> 閽㈠寲灏忕墖淇℃伅琛� </p>")
 @Data
 @EqualsAndHashCode(callSuper = false)
 public class TemperingGlassInfo implements Serializable {
@@ -23,72 +27,92 @@
     /**
      * 閽㈠寲灏忕墖淇℃伅琛╥d
      */
+      @ApiModelProperty(value = "閽㈠寲灏忕墖淇℃伅琛╥d", position = 2)
       @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
+     * 鐜荤拑id
+     */
+    @ApiModelProperty(value = "鐜荤拑id", position = 3)
+    private String glassId;
+
+    /**
      * 娴佺▼鍗�
      */
+    @ApiModelProperty(value = "娴佺▼鍗�", position = 4)
     private String flowcardId;
 
     /**
      * 娴佺▼鍗$幓鐠冪被鍨�
      */
+    @ApiModelProperty(value = "娴佺▼鍗$幓鐠冪被鍨�", position = 5)
     private Integer glassType;
 
     /**
      * 瀹�
      */
+    @ApiModelProperty(value = "瀹�", position = 6)
     private Double width;
 
     /**
      * 楂�
      */
+    @ApiModelProperty(value = "楂�", position = 7)
     private Double height;
 
     /**
      * 鍘氬害
      */
+    @ApiModelProperty(value = "鍘氬害", position = 8)
     private Double thickness;
 
     /**
      * 鑶滅郴
      */
+    @ApiModelProperty(value = "鑶滅郴", position = 9)
     private Integer filmsid;
 
     /**
      * 閽㈠寲鏄惁鎺ュ彈妯斁
      */
+    @ApiModelProperty(value = "閽㈠寲鏄惁鎺ュ彈妯斁", position = 10)
     private Integer ishorizontal;
 
     /**
      * 閽㈠寲鐗堝浘id
      */
+    @ApiModelProperty(value = "閽㈠寲鐗堝浘id", position = 11)
     private Integer temperingLayoutId;
 
     /**
      * 閽㈠寲鐗堝浘鐗囧簭
      */
+    @ApiModelProperty(value = "閽㈠寲鐗堝浘鐗囧簭", position = 12)
     private Integer temperingFeedSequence;
 
     /**
      * x鍧愭爣
      */
+    @ApiModelProperty(value = "x鍧愭爣", position = 13)
     private Integer xCoordinate;
 
     /**
      * y鍧愭爣
      */
+    @ApiModelProperty(value = "y鍧愭爣", position = 14)
     private Integer yCoordinate;
 
     /**
      * 鏃嬭浆瑙掑害锛堥�嗘椂閽堬級
      */
+    @ApiModelProperty(value = "鏃嬭浆瑙掑害锛堥�嗘椂閽堬級", position = 15)
     private Integer angle;
 
     /**
      * 鐘舵��
      */
+    @ApiModelProperty(value = "鐘舵��", position = 16)
     private Integer state;
 
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
index ccf5a4b..bb591f5 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/mapper/TemperingGlassInfoMapper.java
@@ -1,5 +1,6 @@
 package com.mes.temperingglass.mapper;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 
@@ -11,6 +12,7 @@
  * @author zhoush
  * @since 2024-03-27
  */
+@DS("salve_hangzhoumes")
 public interface TemperingGlassInfoMapper extends BaseMapper<TemperingGlassInfo> {
 
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
index 4e4b1c8..b9e6e98 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/temperingglass/service/impl/TemperingGlassInfoServiceImpl.java
@@ -31,11 +31,11 @@
         ) {
             log.info("1銆佸綋鍑虹墖杞﹀搴﹀ぇ浜庣幓鐠冨搴︽椂");
             if((carWidth-temperingGlassInfo.getWidth())>0){
-                carWidth-=temperingGlassInfo.getWidth()-gap;
-                log.info("2銆佹坊鍔犲垰灏忕墖琛ㄤ俊鎭埌浠诲姟琛�");
-                temperingGlassInfo.setState(1);
+                carWidth-=temperingGlassInfo.getWidth()+gap;
+                log.info("2銆佹坊鍔犻挗鍖栧皬鐗囪〃淇℃伅鍒颁换鍔¤〃");
+                temperingGlassInfo.setState(0);
                 baseMapper.updateById(temperingGlassInfo);
-                log.info("3銆佹坊鍔犲垰灏忕墖琛ㄤ俊鎭埌浠诲姟琛�");
+                log.info("3銆佷慨鏀归挗鍖栧皬鐗囪〃浠诲姟鐘舵��");
                 BigStorageCageOutTask bigStorageCageOutTask =new BigStorageCageOutTask();
                 bigStorageCageOutTask.setId(temperingGlassInfo.getId());
             }else{
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java
index 593308c..2634690 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/LoadGlassModuleApplication.java
@@ -5,7 +5,6 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-import org.springframework.scheduling.annotation.EnableScheduling;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
 /**
@@ -17,7 +16,6 @@
 @SpringBootApplication
 @EnableSwagger2
 @EnableDiscoveryClient
-@EnableScheduling
 @MapperScan(basePackages = "com.mes.*.mapper")
 public class LoadGlassModuleApplication {
     public static void main(String[] args) {
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
index 08268b3..66aef59 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/controller/EngineeringController.java
@@ -3,6 +3,9 @@
 
 import com.mes.engineering.entity.Engineering;
 import com.mes.engineering.service.EngineeringService;
+import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.pp.service.OptimizeProjectService;
 import com.mes.uppattenusage.entity.UpPattenUsage;
 import com.mes.uppattenusage.service.UpPattenUsageService;
 import com.mes.utils.Result;
@@ -29,17 +32,51 @@
     private EngineeringService engineeringService;
     @Autowired
     private UpPattenUsageService upPattenUsageService;
-
+    @Autowired
+    private GlassInfoService glassInfoService;
+    @Autowired
+    private OptimizeProjectService optimizeProjectService;
     @ApiOperation("寮�濮�/鏆傚仠浠诲姟/浼犻�掑伐绋嬪彿鍜岀姸鎬�,寮�濮嬫槸1 鏆傚仠鏄�0")
-    @PostMapping("/changeTask") //璋冪敤涓婄墖浠诲姟
+    @PostMapping("/pauseTask") //璋冪敤涓婄墖浠诲姟
     @ResponseBody
-    public  Result <List<UpPattenUsage>> changeTask(@RequestBody Engineering engineering) {
+    public  Result <List<UpPattenUsage>> pauseTask(@RequestBody Engineering engineering) {
         boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
         List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
         log.info("StartorStop:{},{}", work,engineering);
         return Result.build(200, engineering.getEngineerId(),glass);
     }
 
+    @ApiOperation("寮�濮嬩笂鐗�")
+    @PostMapping("/changeTask") //璋冪敤涓婄墖浠诲姟
+    @ResponseBody
+    public  Result <Boolean> changeTask(@RequestBody Engineering engineering) {
+        log.info("engineeringId:{}", engineering);
+        UpPattenUsage upPattenUsage = upPattenUsageService.selectedEngineering(engineering.getEngineerId());
+        if (upPattenUsage != null) {
+            boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
+            List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
+            optimizeProjectService.changeTask(engineering.getEngineerId(), 200);
+            return Result.build(200, "宸蹭繚瀛樿繃", work);
+        } else {
+            List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId());
+            log.info("灏嗘煡璇㈠嚭鐨刄pPattenUsage鏁版嵁淇濆瓨鍒版暟鎹簱琛ㄩ噷");
+            upPattenUsageService.saveUpPattenUsage(upPattenUsages);
+            log.info("浠嶱P琛ㄦ煡璇lassinfo鐨勬暟鎹苟淇濆瓨鍒拌〃閲�");
+            List<GlassInfo> glassinfo = glassInfoService.selectGlassInfo(engineering.getEngineerId());
+            glassInfoService.saveGlassInfo(glassinfo);
+            log.info("浠嶱P琛ㄦ煡璇ngineering鐨勬暟鎹苟淇濆瓨鍒拌〃閲�");
+            List<Engineering> listEngineering = engineeringService.selectEngineering(engineering.getEngineerId());
+            engineeringService.saveEngineering(listEngineering);
+            log.info("鏇存敼pp琛ㄧ姸鎬佷负宸查鍙�");
+            //灏唀ngineering琛ㄧ姸鎬佷负姝e湪涓婄墖
+            boolean work=engineeringService.changeTask(engineering.getEngineerId(),engineering.getState());
+            List<UpPattenUsage> glass = upPattenUsageService.prioritylist();
+            optimizeProjectService.changeTask(engineering.getEngineerId(), 200);
+            return Result.build(200, "淇濆瓨鎴愬姛", work);
+        }
+
+    }
+
     @ApiOperation("鏌ヨ鍙互涓婄墖鐨勫伐绋嬪彿")
     @GetMapping("/selectTask") //璋冪敤涓婄墖浠诲姟
     @ResponseBody
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
index b36640b..806503a 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/engineering/service/EngineeringService.java
@@ -20,7 +20,7 @@
      * 寮�濮�/鏆傚仠浠诲姟
      * @return boolean
      */
-    boolean  changeTask(String projectId, Integer state);
+    boolean changeTask(String projectId, Integer state);
     /**
      * 鏌ヨ閽㈠寲淇℃伅
      * @return List<Engineering>
@@ -35,6 +35,9 @@
      * @return Engineering
      */
     Engineering selectInitiate(Integer state);
-
+    /**
+     * 鏌ヨ涓婄墖浠诲姟
+     * @return Engineering
+     */
     List<Engineering> selectTask();
 }
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 a019c7c..3f979db 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
@@ -1,9 +1,13 @@
 package com.mes.job;
 
+import cn.hutool.json.JSONObject;
 import com.mes.common.S7object;
 import com.mes.device.PlcParameterObject;
 import com.mes.engineering.entity.Engineering;
 import com.mes.engineering.service.EngineeringService;
+import com.mes.pp.entity.OptimizeProject;
+import com.mes.pp.service.OptimizeProjectService;
+import com.mes.tools.WebSocketServer;
 import com.mes.uppattenusage.entity.UpPattenUsage;
 import com.mes.uppattenusage.service.UpPattenUsageService;
 import com.mes.workstation.entity.UpWorkstation;
@@ -12,6 +16,9 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @author SNG-010
@@ -26,6 +33,9 @@
     private EngineeringService engineeringService;
     @Autowired
     private UpPattenUsageService upPattenUsageService;
+    @Autowired
+    private OptimizeProjectService optimizeProjectService;
+
 
     PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
 
@@ -34,32 +44,38 @@
      * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
      */
 
-    @Scheduled(fixedDelay = 300)
+    @Scheduled(fixedDelay = 3000000)
     public void plcLoadGlassTask() throws InterruptedException {
         try {
+            //鑾峰彇鑱旀満鐘舵��
+            String inkageStatus =plcParameterObject.getPlcParameter("MesToPlc").getValue();
             //鑾峰彇鏄惁鏈変笂鐗囪姹�
             String loadRequest = plcParameterObject.getPlcParameter("loadRequest").getValue();
+            //mes鐘舵��
             String mesToPlc = plcParameterObject.getPlcParameter("MesToPlc").getValue();
-            //鍒ゆ柇寮�濮嬩笂鐗囩殑宸ョ▼鍙�
-            Engineering engineering = engineeringService.selectInitiate(1);
-            if ("1".equals(loadRequest) && engineering != null) {
-                log.info("寮�濮嬩笂鐗囦换鍔�");
-                UpPattenUsage upPattenUsage = upWorkstationService.selectPriority(engineering);
-                log.info("褰撴湁璇锋眰鏃舵煡璇㈠綋鍓嶄笂鐗囬『搴忕殑鐜荤拑淇℃伅{}", upPattenUsage);
-                UpWorkstation upwork = upWorkstationService.selectWorkstation(upPattenUsage);
-                log.info("绗﹀悎鐨勫昂瀵哥殑宸ヤ綅鐜荤拑锛歿}", upwork);
-                if (upwork != null) {
-                    int workId = upwork.getWorkstationId();//宸ヤ綅id
-                    double width = upwork.getPatternWidth();//瀹藉害
-                    double height = upwork.getPatternHeight();//楂樺害
-                    S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("WorkId").getAddress(), (short) workId);
-                    S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("GlassWidth").getAddress(), (short) width);
-                    S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("GlassHeight").getAddress(), (short) height);
-                    S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("MesToPlc").getAddress(), (short) 1);
-                    //鏇存敼涓婄墖琛ㄧ姸鎬�
-                    upPattenUsageService.updateUpPattenUsageState(upPattenUsage, workId);
+            if("1".equals(inkageStatus)&&"1".equals(loadRequest)) {
+                //鍒ゆ柇寮�濮嬩笂鐗囩殑宸ョ▼鍙�
+                Engineering engineering = engineeringService.selectInitiate(1);
+                if (engineering != null) {
+                    log.info("寮�濮嬩笂鐗囦换鍔�");
+                    UpPattenUsage upPattenUsage = upWorkstationService.selectPriority(engineering);
+                    log.info("褰撴湁璇锋眰鏃舵煡璇㈠綋鍓嶄笂鐗囬『搴忕殑鐜荤拑淇℃伅{}", upPattenUsage);
+                    UpWorkstation upwork = upWorkstationService.selectWorkstation(upPattenUsage);
+                    log.info("绗﹀悎鐨勫昂瀵哥殑宸ヤ綅鐜荤拑锛歿}", upwork);
+                    if (upwork != null) {
+                        int workId = upwork.getWorkstationId();//宸ヤ綅id
+                        double width = upwork.getPatternWidth();//瀹藉害
+                        double height = upwork.getPatternHeight();//楂樺害
+                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("WorkId").getAddress(), workId);
+                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("GlassWidth").getAddress(), (long) width);
+                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("GlassHeight").getAddress(), (long) height);
+                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlc").getAddress(), 1);
+                        //鏇存敼涓婄墖琛ㄧ姸鎬�
+                        upPattenUsageService.updateUpPattenUsageState(upPattenUsage, workId);
 
+                    }
                 }
+
             }
             if ("1".equals(mesToPlc) && "0".equals(loadRequest)) {
                 //璇锋眰瀛椾负闆舵椂锛屼换鍔″瓧娓呴浂
@@ -72,8 +88,8 @@
         }
     }
 
-    @Scheduled(fixedDelay = 300)
-    public void plcLoadGlassReport() {
+    @Scheduled(fixedDelay = 30000000)
+    public void plcLoadGlassReport(){
         //鑾峰彇鏄惁鏈夋眹鎶�
         String loadStatus = plcParameterObject.getPlcParameter("PlcStatus").getValue();
         if (loadStatus != null) {
@@ -81,7 +97,8 @@
             switch (loadStatus) {
                 case "1":
                     log.info("鏀跺埌姹囨姤浠诲姟瀹屾垚");
-                    S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 1);
+                    //鍑忓皯宸ヤ綅鏁伴噺,瀹屾垚浠诲姟鐘舵��
+                    overTask(loadStatus, 100);
                     break;
                 case "2":
                     log.info("鏀跺埌姹囨姤鏈畬鎴愪换鍔�");
@@ -93,15 +110,63 @@
                     overTask(loadStatus, 0);
                     break;
                 case "0":
-                    log.info("鏀跺埌姹囨姤娓�0鐘舵��");
-                    //鍑忓皯宸ヤ綅鏁伴噺,瀹屾垚浠诲姟鐘舵��
-                    overTask(loadStatus, 100);
+                    S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 0);
                     break;
             }
         }
     }
 
-    public void overTask(String loadStatus, int state) {
+    @Scheduled(fixedDelay = 1000)
+    public void loadGlassHome(){
+        JSONObject jsonObject = new JSONObject();
+        //姝e湪杩涜鐨勪换鍔�
+        List<UpPattenUsage> upPattenUsages = upPattenUsageService.prioritylist();
+        jsonObject.append("prioritylist", upPattenUsages);
+        //宸ヤ綅淇℃伅
+        List<UpWorkstation> upWorkstations = upWorkstationService.list();
+        jsonObject.append("list", upWorkstations);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                    List<String> messages = webserver.getMessages();
+                    if (!messages.isEmpty()) {
+                        // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+                        webserver.clearMessages();
+                    }
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
+    @Scheduled(fixedDelay = 5000)
+    public void loadGlassStatus(){
+        JSONObject jsonObject = new JSONObject();
+        //姝e湪杩涜鐨勪换鍔�
+        //String inkageStatus =plcParameterObject.getPlcParameter("MesToPlc").getValue();
+        String inkageStatus ="1";
+        jsonObject.append("InkageStatus", inkageStatus);
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("loadGlass");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null) {
+                    webserver.sendMessage(jsonObject.toString());
+                    List<String> messages = webserver.getMessages();
+                    if (!messages.isEmpty()) {
+                        // // 灏嗘渶鍚庝竴涓秷鎭浆鎹负鏁存暟绫诲瀷鐨勫垪琛�
+                        webserver.clearMessages();
+                    }
+                } else {
+                    log.info("Home is closed");
+                }
+            }
+        }
+    }
+
+    public void overTask(String loadStatus, int state)  {
+
         UpPattenUsage upPattenUsage = upPattenUsageService.selectOverTask();
         if (upPattenUsage != null) {
             log.info("鏀跺埌姹囨姤娓厈}鐘舵��", loadStatus);
@@ -109,8 +174,12 @@
             upWorkstationService.reduceWorkstationNumber(upPattenUsage.getState());
             //瀹屾垚涓婄墖琛ㄧ姸鎬�
             upPattenUsageService.updateUpPattenUsageState(upPattenUsage, state);
-            S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 0);
+            //鍒ゆ柇鏄惁鏄渶鍚庝竴鍧楃幓鐠�
+            UpPattenUsage sequence=upPattenUsageService.selectSequence(upPattenUsage);
+            //濡傛灉鏄渶鍚庝竴鍧楁椂瀹屾垚宸ョ▼浠诲姟
+            optimizeProjectService.overTask(sequence,300);
         }
+        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("MesToPlcStatus").getAddress(), 1);
     }
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
index 33610c6..5851554 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/controller/UpPattenUsageController.java
@@ -45,32 +45,14 @@
         return Result.build(200, "", glass);
     }
 
-    @ApiOperation("鐐瑰嚮閫夋嫨宸ョ▼淇濆瓨鍚庤繘琛岃皟鐢�,浼犲叆宸ョ▼鍙�")
-    @PostMapping("/saveUpPattenUsage") //鏌ヨ鐜板湪涓婄墖鏈虹殑鐜荤拑淇℃伅
+    @ApiOperation("閫夋嫨宸ョ▼鍙峰悗鏄剧ず涓婄墖椤哄簭棰勮")
+    @PostMapping("/selectUpPattenUsage") //鏌ヨ鐜板湪涓婄墖鏈虹殑鐜荤拑淇℃伅
     @ResponseBody
-    public Result<Engineering> saveUpPattenUsage(@RequestBody Engineering engineering) {
-        log.info("engineeringId:{}", engineering);
-        UpPattenUsage upPattenUsage= upPattenUsageService.selectedEngineering(engineering.getEngineerId());
-        if (upPattenUsage!=null){
-            log.info("宸蹭繚瀛樿繃");
-            return Result.build(200, "宸蹭繚瀛樼殑宸ョ▼", null);
-        }else {
-            List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId());
-            log.info("灏嗘煡璇㈠嚭鐨刄pPattenUsage鏁版嵁淇濆瓨鍒版暟鎹簱琛ㄩ噷");
-            upPattenUsageService.saveUpPattenUsage(upPattenUsages);
-            log.info("浠嶱P琛ㄦ煡璇lassinfo鐨勬暟鎹苟淇濆瓨鍒拌〃閲�");
-            List<GlassInfo> glassinfo=glassInfoService.selectGlassInfo(engineering.getEngineerId());
-            glassInfoService.saveGlassInfo(glassinfo);
-            log.info("浠嶱P琛ㄦ煡璇ngineering鐨勬暟鎹苟淇濆瓨鍒拌〃閲�");
-            List<Engineering> listEngineering= engineeringService.selectEngineering(engineering.getEngineerId());
-            engineeringService.saveEngineering(listEngineering);
-            log.info("鏇存敼pp琛ㄧ姸鎬佷负宸查鍙�");
-            optimizeProjectService.changeTask(engineering.getEngineerId(), 200);
-//            List<UpPattenUsage> data=upPattenUsageService.prioritylist();
-//            log.info("鏄剧ず淇濆瓨鍚庣殑涓婄墖椤哄簭琛�");
-            return Result.build(200, "", engineering);
+    public Result<List<UpPattenUsage>> selectUpPattenUsage(@RequestBody Engineering engineering) {
+        List<UpPattenUsage> upPattenUsages = upPattenUsageService.selectSaveUpPattenUsage(engineering.getEngineerId());
+        return Result.build(200, "", upPattenUsages);
         }
 
-    }
+
 }
 
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
index d5506a4..69c8aa0 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/UpPattenUsageService.java
@@ -41,5 +41,11 @@
       * @return UpPattenUsage
       */
      UpPattenUsage selectOverTask();
+     /**
+      * 鏌ヨ涓婄墖鏈�鍚庝竴鍧楃殑鐜荤拑
+      * @return UpPattenUsage
+      */
+     UpPattenUsage selectSequence(UpPattenUsage upPattenUsage);
+
 }
 
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
index 8a5142b..322ebc0 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/uppattenusage/service/impl/UpPattenUsageServiceImpl.java
@@ -40,7 +40,7 @@
     public List<UpPattenUsage> prioritylist() {
         //鑾峰彇姝e湪涓婄墖鐨勪换鍔d
         Engineering engineering= engineeringService.selectInitiate(1);
-        log.info("灏嗗弬鏁颁紶鍏ュ埌鏌ヨ绫婚噷{}",engineering);
+        //log.info("灏嗗弬鏁颁紶鍏ュ埌鏌ヨ绫婚噷{}",engineering);
         if(engineering!=null){
             LambdaQueryWrapper<UpPattenUsage> wrapper = new LambdaQueryWrapper<>();
             wrapper.eq(UpPattenUsage::getEngineeringId,engineering.getEngineerId());
@@ -117,5 +117,15 @@
         return this.getOne(wrapper);
     }
 
+    @Override
+    //鑾峰彇鏈�鍚庝竴鍧楃幓鐠�
+    public UpPattenUsage selectSequence(UpPattenUsage upPattenUsage) {
+        QueryWrapper<UpPattenUsage>wrapper = new QueryWrapper<>();
+        wrapper.eq("engineering_id",upPattenUsage.getEngineeringId())
+                .orderByDesc("layout_sequence")
+                .last("limit 1");
+        return this.getOne(wrapper);
+    }
+
 
 }
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java
index f1907fe..257bc80 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/controller/UpWorkstationController.java
@@ -53,6 +53,7 @@
     public Result<String> updateMesInkageLoad(@RequestBody short inKageWord) {
         String result = upWorkstationService.updateMesInkageLoad(inKageWord);
         return Result.success(result);
+
     }
 
 }
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java
index a9d15bf..b7d08c2 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/workstation/service/impl/UpWorkstationServiceImpl.java
@@ -92,7 +92,8 @@
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
         log.info("淇敼璁惧鑱斿姩璇锋眰涓簕}锛�0绂荤嚎锛�1鑱斿姩", inKageWord);
         S7object.getinstance().plccontrol.writeWord(plcParameterObject.getPlcParameter("InkageStatus").getAddress(), inKageWord);
-        return "success";
+        //璇诲彇plc鐨勫��
+        return plcParameterObject.getPlcParameter("InkageStatus").getValue();
     }
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
index a4d1cac..66f9c31 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application-dev.yml
@@ -14,6 +14,16 @@
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
+#        hangzhoumes:
+#          url: jdbc:mysql://10.153.19.150:3306/hangzhoumes?serverTimezone=GMT%2b8
+#          username: root
+#          password: beibo.123/
+#          driver-class-name: com.mysql.cj.jdbc.Driver
+#        pp:
+#          url: jdbc:mysql://10.153.19.150:3306/pp?serverTimezone=GMT%2b8
+#          username: root
+#          password: beibo.123/
+#          driver-class-name: com.mysql.cj.jdbc.Driver
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
index 94840e1..2128453 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/resources/application.yml
@@ -7,5 +7,5 @@
     name: loadGlass
 mybatis-plus:
   mapper-locations: classpath*:mapper/*.xml
-  configuration:
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
+#  configuration:
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
index ee68635..4afc106 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/test/java/com/mes/LoadGlassModuleApplicationTest.java
@@ -3,6 +3,8 @@
 import com.mes.engineering.entity.Engineering;
 import com.mes.engineering.service.EngineeringService;
 import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.pp.entity.OptimizeProject;
+import com.mes.pp.entity.request.OptimizeRequest;
 import com.mes.pp.service.OptimizeProjectService;
 import com.mes.uppattenusage.entity.UpPattenUsage;
 import com.mes.uppattenusage.service.impl.UpPattenUsageServiceImpl;
@@ -71,23 +73,31 @@
         engineeringService.saveEngineering(glass);
         log.info("glassinfo锛歿}", Arrays.asList(glass));
     }
-    @Test
-    public  void  textengineering2(){
-        //鏇存柊宸ョ▼琛ㄧ姸鎬佷负宸查鍙�
-        //optimizeProjectService.changeTask("P24050801",200);
-        engineeringService.changeTask("P24051102",1);
-    }
+
     @Test
     public  void  textengineering3(){
-        //鍒ゆ柇鏄惁宸蹭繚瀛樿繃宸ョ▼鍙峰埌涓婄墖琛�
-        UpPattenUsage upPattenUsage=upPattenUsageService.selectOverTask();
-        log.info("涓婄墖琛ㄤ换鍔′腑鐨勬暟鎹畕}",upPattenUsage);
+        //涓婄墖琛ㄦ渶鍚庝竴鐗�
+        UpPattenUsage upPattenUsage=new UpPattenUsage();
+        upPattenUsage.setEngineeringId("P24051103");
+        UpPattenUsage upPattenUsage1=upPattenUsageService.selectSequence(upPattenUsage);
+        log.info("涓婄墖琛ㄤ换鍔′腑鐨勬暟鎹畕}",upPattenUsage1);
+        boolean isOver= optimizeProjectService.overTask(upPattenUsage1,300);
+        log.info("鏇存敼鏄惁鎴愬姛{}",isOver);
     }
     @Test
     public  void  textengineering4(){
         //鍒ゆ柇鏄惁宸蹭繚瀛樿繃宸ョ▼鍙峰埌涓婄墖琛�
         List<Engineering> engineerings=engineeringService.selectTask();
         log.info("涓婄墖琛ㄤ换鍔′腑鐨勬暟鎹畕}",engineerings);
+
+    }
+    @Test
+    public  void  textengineering5(){
+        //鏄剧ず閫夋嫨宸ョ▼
+        OptimizeRequest optimizeRequest=new OptimizeRequest();
+        optimizeRequest.setState(100);
+        List<OptimizeProject> engineerings=optimizeProjectService.listByState(optimizeRequest);
+        log.info("涓婄墖琛ㄤ换鍔′腑鐨勬暟鎹畕}",engineerings);
     }
 
 }

--
Gitblit v1.8.0