From 928fa3682fcd0bcb59e3ca3da8770ecbb06cf315 Mon Sep 17 00:00:00 2001
From: wu <731351411@qq.com>
Date: 星期五, 02 八月 2024 10:32:21 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml                                           |   15 
 UI-Project/src/views/Returns/returns.vue                                                                                                     |   76 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java                                   |   16 
 hangzhoumesParent/gateway/src/main/resources/application.yml                                                                                 |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java          |   17 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java                   |   17 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml                                             |   29 
 hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java                                  |   12 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWorkDetail.java                                                |  151 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkDetailMapper.java                                          |   16 
 UI-Project/src/utils/api.js                                                                                                                  |  190 ++
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/entity/LoadPosition.java                               |    8 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java                                         |   16 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/impl/RawUsageServiceImpl.java                      |  107 +
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/entity/RawUsage.java                                       |    7 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/ShelfRack.java                                     |    9 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/request/StorageTaskRequest.java                  |   77 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkDetailService.java                                        |   16 
 UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue                                                                                    |   15 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                   |  410 +++-
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/request/RawUsageAndShelfRack.java                  |   76 +
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java                             |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/BasicDataProduceService.java                                           |   20 
 UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue                                                                                    |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/DamageDetailsController.java                                        |   31 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java    |   29 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java                           |    3 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/DamageDetails.java                                                      |  115 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/BasicDataProduceController.java                                     |   39 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java                                         |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java                                        |  133 +
 UI-Project/src/views/PurchaseReturn/purchaseStorage.vue                                                                                      |   51 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java            |   10 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java                    |    3 
 UI-Project/src/utils/WebSocketService.js                                                                                                     |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java            |   11 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml                                             |    5 
 UI-Project/src/layout/MainErpView.vue                                                                                                        |    2 
 UI-Project/src/views/Identify/identify.vue                                                                                                   |   25 
 hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java                                      |  139 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/BasicDataProduceMapper.java                                             |   18 
 UI-Project/src/views/Caching/cachingbefore.vue                                                                                               |   13 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/StorageTask.java                                 |   11 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/controller/RawUsageController.java                         |   31 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/BasicDataProduceServiceImpl.java                                  |   30 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java                               |    3 
 UI-Project/src/views/UnLoadGlass/loadmachinerack.vue                                                                                         |   10 
 UI-Project/src/views/Caching/cachingun.vue                                                                                                   |   14 
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml                                                  |    4 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java                       |    3 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml                                               |    5 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/UpdateBigStorageCageDTO.java            |   16 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/DamageDetailsService.java                                              |   16 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java                         |    5 
 UI-Project/src/views/largescreen/largescreen.vue                                                                                             |   14 
 UI-Project/config.js                                                                                                                         |    8 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java                                                       |   54 
 UI-Project/src/views/StockBasicData/stockBasicData.vue                                                                                       |   17 
 UI-Project/src/views/UnLoadGlass/Landingindication.vue                                                                                       |   15 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/CacheGlassTask.java                                               |   42 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                           |   20 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java                                  |   21 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml                                              |    5 
 UI-Project/src/lang/zh.js                                                                                                                    |   56 
 UI-Project/src/views/ReportWork/reportWork.vue                                                                                               |  237 ++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |  146 -
 UI-Project/src/utils/constants.js                                                                                                            |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml                                                  |    2 
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java                |  102 +
 UI-Project/src/views/Slicecage/slicecage.vue                                                                                                 |  151 +
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java                      |    2 
 UI-Project/src/views/GlassStorage/MaterialRackManagement.vue                                                                                 | 1136 ++++++++------
 hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/RawUsageService.java                               |   19 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/BasicDataProduce.java                                                   |   55 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                                          |    4 
 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue                                                                                       |  174 +
 76 files changed, 3,288 insertions(+), 1,110 deletions(-)

diff --git a/UI-Project/config.js b/UI-Project/config.js
index 7df122b..b15a1a5 100644
--- a/UI-Project/config.js
+++ b/UI-Project/config.js
@@ -1,7 +1,7 @@
 export default {
-//  serverUrl: "10.153.19.150:88/api",
- serverUrl: "192.168.1.199:88/api",
-  // serverUrl2: "10.153.19.150:88"
-  serverUrl2: "192.168.1.199:88"
+ serverUrl: "10.153.19.150:88/api",
+//  serverUrl: "192.168.1.199:88/api",
+  serverUrl2: "10.153.19.150:88"
+  // serverUrl2: "192.168.1.199:88"
   //serverUrl:"res.abeim.cn"
 }
\ No newline at end of file
diff --git a/UI-Project/src/lang/zh.js b/UI-Project/src/lang/zh.js
index 21ceabd..d2c352b 100644
--- a/UI-Project/src/lang/zh.js
+++ b/UI-Project/src/lang/zh.js
@@ -212,6 +212,14 @@
         layoutnumber:'閽㈠寲鐗堝浘鍙�',
         numberglasses:'鐜荤拑鏁伴噺',
         specifytemperinga:'鏄惁鎸囧畾閽㈠寲璇ユ潯淇℃伅锛�',
+        temperedswitch:'閽㈠寲寮�鍏�',
+        dutyinformation:'鍊肩彮淇℃伅',
+        line:'绾胯矾',
+        process:'宸ュ簭',
+        team:'鐝粍',
+        basic:'璁惧',
+        add:'纭淇濆瓨',
+        cancel:'鍙栨秷',
     },
     workOrder:{
         glassID:'鐜荤拑ID',
@@ -419,5 +427,51 @@
         allstatus: '鍏ㄩ儴鍏ュ簱鐘舵��',
         completedquantity: '瀹屾垚鏁伴噺',
         scrapquantity: '鎶ュ簾鏁伴噺',
-    }
+    },
+    reportmanage:{
+        productiontime :'鐢熶骇鏃堕棿',
+        starttime :'寮�濮嬫椂闂�',
+        endtime :'缁撴潫鏃堕棿',
+        ctype :'娓呴�夋嫨绫诲瀷',
+        cstate :'娓呴�夋嫨鐘舵��',
+        cprocess :'娓呴�夋嫨宸ュ簭',
+        all :'鍏ㄩ儴',
+        completed :'瀹屽伐',
+        broke :'鐮存崯',
+        takeout :'鎷胯蛋',
+        dreportwork :'鏈姤宸�',
+        pendingwork :'寰呮姤宸�',
+        reportwork :'宸叉姤宸�',
+        incise :'鍒囧壊',
+        edging :'纾ㄨ竟',
+        steel :'閽㈠寲',
+        inquire :'鏌ヨ',
+        signingwork :'鎶ュ伐',
+        reporteam :'鎶ュ伐鐝粍',
+        reportingequipment :'鎶ュ伐璁惧',
+        line :'绾胯矾',
+        process :'宸ュ簭',
+        glassID :'鐜荤拑ID',
+        projectnumber :'宸ョ▼鍙�',
+        layoutID :'閽㈠寲鐗堝浘ID',
+        productiontime :'鐢熶骇鏃堕棿',
+        type :'绫诲瀷',
+        state :'鐘舵��',
+        processcards :'娴佺▼鍗�',
+        number :'搴忓彿',
+        layer :'灞�',
+        typebreakage :'鐮存崯绫诲瀷',
+        ptypebreakage :' 璇烽�夋嫨鐮存崯绫诲瀷',
+        causebreakage :'鐮存崯鍘熷洜',
+        pcausebreakage :'璇烽�夋嫨鐮存崯鍘熷洜',
+        responsibleprocess :'璐d换宸ュ簭',
+        responsiblepersonnel :'璐d换浜哄憳',
+        presponsiblepersonnel :'璇疯緭鍏ヨ矗浠讳汉鍛�',
+        responsibleteam :'璐d换鐝粍',
+        presponsibleteam :'璇烽�夋嫨璐d换鐝粍',
+        responsibleequipment :'璐d换璁惧',
+        presponsibleequipment :'璇烽�夋嫨璐d换璁惧',
+        remark :'澶囨敞',
+        premark :'璇疯緭鍏ュ娉�',
+    },
 }
\ No newline at end of file
diff --git a/UI-Project/src/layout/MainErpView.vue b/UI-Project/src/layout/MainErpView.vue
index 8680e02..88c07a1 100644
--- a/UI-Project/src/layout/MainErpView.vue
+++ b/UI-Project/src/layout/MainErpView.vue
@@ -168,7 +168,7 @@
           <img src="../assets/northGlass.ico"
                alt=""
                style="max-width: 100%;max-height: 100%">
-          <h3 style="margin: 1rem  ;font-weight: bold;width: 33vw;"> {{ $t('main.titleFirst') }}{{ user }}{{ $t('main.titleLast') }}</h3>
+          <h3 style="margin: 1rem  ;font-weight: bold;width: 33vw;"> {{ $t('main.titleFirst') }}{{ userName }}{{ $t('main.titleLast') }}</h3>
           <!-- <div class="header-left">
             <el-button :icon="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="toggleCollapse"
               style="height:30px;"></el-button>
diff --git a/UI-Project/src/utils/WebSocketService.js b/UI-Project/src/utils/WebSocketService.js
index f74df0a..1b44f21 100644
--- a/UI-Project/src/utils/WebSocketService.js
+++ b/UI-Project/src/utils/WebSocketService.js
@@ -1,8 +1,8 @@
 // WebSocketService.js
 
 let socket = null;
-let messages='' ;
 export const initializeWebSocket = (socketUrl, messageHandler) => {
+  let messages='' ;
     if (typeof WebSocket === "undefined") {
       console.log("Your browser does not support WebSocket");
       return null;
diff --git a/UI-Project/src/utils/api.js b/UI-Project/src/utils/api.js
index c8674a7..9be06af 100644
--- a/UI-Project/src/utils/api.js
+++ b/UI-Project/src/utils/api.js
@@ -1,14 +1,42 @@
 // src/services/api.js
-import request from 'request';
+import request from '../utils/request';
+import { ElMessage } from 'element-plus';
 
+ // Replace with your actual backend base URL
 
-export const findTasks = (id, newState) => {
+// Function to find list of raw usages
+const BASE_URL = 'glassStorage/api/rawUsage';
+const taskBASE_URL = 'glassStorage/api/storageTask';
+
+export const findTasks = () => {
   const url = `glassStorage/api/storageTask/findTasks`;
   const options = {
-    method: 'POST',
+    method: 'get',
     url,
     json: true,
-    body: { id, enableState: newState }
+    
+  };
+ 
+  return new Promise((resolve, reject) => {
+    request(options, (error, response, body) => {
+      if (error) {
+        reject(new Error(error.message));
+      } else {
+        resolve(body);
+      }
+    });
+  });
+};
+
+
+
+export const findList = (params) => {
+  const url = `${BASE_URL}/findList`;
+  const options = {
+    method: 'post',
+    url,
+    json: true,
+    body: params
   };
 
   return new Promise((resolve, reject) => {
@@ -21,3 +49,157 @@
     });
   });
 };
+
+// Function to find raw usage by ID
+export const findById = (id) => {
+  const url = `${BASE_URL}/${id}`;
+  const options = {
+    method: 'get',
+    url,
+    json: true
+  };
+
+  return new Promise((resolve, reject) => {
+    request(options, (error, response, body) => {
+      if (error) {
+        reject(new Error(error.message));
+      } else {
+        resolve(body);
+      }
+    });
+  });
+};
+
+// Function to insert a new raw usage
+export const insertRawUsage = (rawUsage) => {
+  const url = `${BASE_URL}`;
+  const options = {
+    method: 'post',
+    url,
+    json: true,
+    body: rawUsage
+  };
+
+  return new Promise((resolve, reject) => {
+    request(options, (error, response, body) => {
+      if (error) {
+        reject(new Error(error.message));
+      } else {
+        resolve(body);
+      }
+    });
+  });
+};
+
+
+export const updateRawUsage = async (rawUsage) => {
+  try {
+    const response = await request.post(`${BASE_URL}/updaterawUsage`, rawUsage);
+    ElMessage.success('淇敼鎴愬姛');
+    return response.data;
+  } catch (error) {
+    ElMessage.error('淇敼澶辫触');
+    throw error;
+  }
+};
+
+export const deleteRawUsage = async (id) => {
+  try {
+    const response = await request.post(`${BASE_URL}/id`, id);
+    ElMessage.success('鍒犻櫎鍘熷浣跨敤鏁版嵁鎴愬姛');
+    return response.data;
+  } catch (error) {
+    ElMessage.error('鍒犻櫎鍘熷浣跨敤鏁版嵁澶辫触');
+    throw error;
+  }
+};
+
+export const inStorage = async (RawUsageAndShelfRack) => {
+  try {
+    const response = await request.post(`${BASE_URL}/inStorage`, RawUsageAndShelfRack);
+    ElMessage.success('鍏ュ簱鎿嶄綔鎴愬姛');
+    return response.data;
+  } catch (error) {
+    ElMessage.error('鍏ュ簱鎿嶄綔澶辫触');
+    throw error;
+  }
+};
+
+export const outStorage = async (RawUsageAndShelfRack) => {
+  try {
+    const response = await request.post(`${BASE_URL}/outStorage`, RawUsageAndShelfRack);
+    ElMessage.success('鍑哄簱鎿嶄綔鎴愬姛');
+    return response.data;
+  } catch (error) {
+    ElMessage.error('鍑哄簱鎿嶄綔澶辫触');
+    throw error;
+  }
+};
+
+
+
+export const taskUpdate = async (task) => {
+  try {
+    const response = await request.post(`${taskBASE_URL}/taskUpdate`, task);
+
+    return response.data;
+  } catch (error) {
+ 
+    throw error;
+  }
+};
+
+
+
+
+
+
+const API_URL = 'glassStorage/api/shelfRack';  // Adjust this based on your actual API URL
+
+export const shelfRackfindList = (params) => {
+  return request.post(`${API_URL}/findList`, params)
+    .then(response => response.data)
+    .catch(error => {
+      throw error;  // Handle errors appropriately in your frontend
+    });
+};
+
+export const shelfRackfindById = (id) => {
+  return request.get(`${API_URL}/${id}`)
+    .then(response => response.data)
+    .catch(error => {
+      throw error;
+    });
+};
+
+export const insertShelfRack = (shelfRack) => {
+  return request.post(`${API_URL}`, shelfRack)
+    .then(response => response.data)
+    .catch(error => {
+      throw error;
+    });
+};
+
+export const updateShelfRack = (shelfRack) => {
+  return request.put(`${API_URL}`, shelfRack)
+    .then(response => response.data)
+    .catch(error => {
+      throw error;
+    });
+};
+
+export const shelfRackdeleteById = (id) => {
+  return request.delete(`${API_URL}/${id}`)
+    .then(response => response.data)
+    .catch(error => {
+      throw error;
+    });
+};
+
+export const findShelfRack = () => {
+  return request.get(`${API_URL}/findshelfrack`)
+    .then(response => response.data)
+    .catch(error => {
+      throw error;
+    });
+};
\ No newline at end of file
diff --git a/UI-Project/src/utils/constants.js b/UI-Project/src/utils/constants.js
index 9a2423c..67d36d2 100644
--- a/UI-Project/src/utils/constants.js
+++ b/UI-Project/src/utils/constants.js
@@ -1,3 +1,3 @@
-export const WebSocketHost = "192.168.1.199";
-// export const WebSocketHost = "10.153.19.150";
+// export const WebSocketHost = "192.168.1.199";
+export const WebSocketHost = "10.153.19.150";
 export const host = "88";
\ No newline at end of file
diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue
index 6c9510b..e4c67f3 100644
--- a/UI-Project/src/views/Caching/cachingbefore.vue
+++ b/UI-Project/src/views/Caching/cachingbefore.vue
@@ -7,7 +7,7 @@
 import { WebSocketHost ,host} from '@/utils/constants'
 
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
@@ -77,6 +77,7 @@
     console.error('鍙戠敓閿欒:', error);  
   }  
 };   
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -92,11 +93,13 @@
 };
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/Caching/cachingun.vue b/UI-Project/src/views/Caching/cachingun.vue
index 2ce7900..737c1de 100644
--- a/UI-Project/src/views/Caching/cachingun.vue
+++ b/UI-Project/src/views/Caching/cachingun.vue
@@ -60,7 +60,7 @@
 const adda = ref(false)
 import { WebSocketHost ,host} from '@/utils/constants'
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
@@ -205,6 +205,7 @@
 
 
 
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/downcache`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -219,13 +220,14 @@
           })); 
 
 };
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
index 0f132b5..c41ce56 100644
--- a/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
+++ b/UI-Project/src/views/GlassStorage/MaterialRackManagement.vue
@@ -1,144 +1,174 @@
 <template>
-  <div  class="app-container">
-    <el-card style="flex: 1; margin-left: 10px; " :loading="loading">
-      <div slot="header" class="clearfix" style="display: flex; align-items: center;">
+  <div class="app-container">
+    <el-card style="flex: 1; margin-left: 10px" :loading="loading">
+      <div
+        slot="header"
+        class="clearfix"
+        style="display: flex; align-items: center"
+      >
+        <!-- 宸︿晶鎸夐挳缁� -->
+        <div>
+          <el-button type="success" size="mini" @click="storage()"
+            >鍘熺墖浠撳偍璇︽儏</el-button
+          >
+          <el-button type="success" size="mini" @click="handleInbound()"
+            >鍏ュ簱</el-button
+          >
+          <el-button type="success" size="mini">鍚婅浣嶅叆搴�</el-button>
+        </div>
 
-<!-- 宸︿晶鎸夐挳缁� -->
-<div >
-  <el-button type="success" size="mini"  @click="storage()">鍘熺墖浠撳偍璇︽儏</el-button>
-  <el-button type="success" size="mini" @click="handleInbound()">鍏ュ簱</el-button>
-  <el-button type="success" size="mini" >鍚婅浣嶅叆搴�</el-button>
- 
-</div>
+        <!-- 鍙充晶閫夋嫨妗� -->
+        <el-form-item style="margin-top: 15px; width: 150px">
+          <el-select v-model="formData2.dzw" placeholder="璇烽�夋嫨鍚婅浣�">
+            <el-option label="鍚婅浣�1" value="鍚婅浣�1"></el-option>
+            <el-option label="鍚婅浣�2" value="鍚婅浣�2"></el-option>
+            <!-- 鏍规嵁瀹為檯鎯呭喌娣诲姞鏇村閫夐」 -->
+          </el-select>
+        </el-form-item>
+      </div>
+      <el-dialog v-model="Hidden" top="10vh" width="80%">
+        <el-table
+          :data="tableData"
+          v-model="dialogVisible3"
+          style="width: 98%; height: 200px"
+          @selection-change="handleSelectionChange"
+          :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
+          ref="table"
+          empty-text="No Data"
+        >
+          <el-table-column prop="number" label="搴撲綅鍙�"></el-table-column>
+          <el-table-column prop="rawType" label="绫诲瀷"></el-table-column>
+          <el-table-column prop="rawWidth" label="闀垮害(mm)"></el-table-column>
+          <el-table-column prop="rawHeight" label="楂樺害(mm)"></el-table-column>
+          <el-table-column
+            prop="rawThickness"
+            label="鍘氬害(mm)"
+          ></el-table-column>
+          <el-table-column prop="pieces" label="鏁伴噺"></el-table-column>
+          <el-table-column prop="createTime" label="鍏ュ簱鏃堕棿"></el-table-column>
+          <el-table-column prop="batchId" label="鎵规鍙�"></el-table-column>
 
-<!-- 鍙充晶閫夋嫨妗� -->
-<el-form-item style="margin-top: 15px; width: 150px;">
-  <el-select v-model="formData2.dzw" placeholder="璇烽�夋嫨鍚婅浣�">
-    <el-option label="鍚婅浣�1" value="鍚婅浣�1"></el-option>
-    <el-option label="鍚婅浣�2" value="鍚婅浣�2"></el-option>
-    <!-- 鏍规嵁瀹為檯鎯呭喌娣诲姞鏇村閫夐」 -->
-  </el-select>
-</el-form-item>
+          <el-table-column
+            align="center"
+            label="鏂欐灦鐘舵��"
+            min-width="80"
+            prop="enableState"
+          >
+            <template #default="scope">
+              <el-tag
+                :type="getTagType(scope.row.enableState)"
+                @click="toggleStatus(scope.row)"
+              >
+                {{ scope.row.enableState === 1 ? "鍚敤" : "鏈惎鐢�" }}
+              </el-tag>
+            </template>
+          </el-table-column>
 
-</div>
-<el-dialog v-model="Hidden" top="10vh" width="80%"  >
+          <!-- 鎿嶄綔鍒� -->
+          <el-table-column label="鎿嶄綔" width="250">
+            <template #default="{ row }">
+              <el-button
+                type="primary"
+                size="mini"
+                @click="edithandleRowClick(row)"
+                >淇敼</el-button
+              >
+              <el-button type="danger" size="mini" @click="handleDelete(row)"
+                >鍒犻櫎</el-button
+              >
+              <el-button type="warning" size="mini" @click="handleCheckout(row)"
+                >鍑哄簱</el-button
+              >
+              <!-- <el-button type="success" size="mini" @click="addglass()">娣诲姞鍘熺墖</el-button> -->
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-pagination
+          v-if="totalItems > 0"
+          background
+          layout="prev, pager, next"
+          :total="totalItems"
+          :page-size="pageSize"
+          @current-change="handleCurrentChange"
+        ></el-pagination>
+      </el-dialog>
+
       <el-table
-        :data="tableData" v-model="dialogVisible3"
-       
-        style="width: 98%; height: 200px"
+        :data="tasktableData"
+        style="width: 98%; height: 150px"
         @selection-change="handleSelectionChange"
         :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
         ref="table"
-       
         empty-text="No Data"
       >
-       
-        <el-table-column prop="location" label="搴撲綅鍙�"></el-table-column>
-        <el-table-column prop="type" label="绫诲瀷"></el-table-column>
-        <el-table-column prop="length" label="闀垮害(mm)"></el-table-column>
-        <el-table-column prop="height" label="楂樺害(mm)"></el-table-column>
-        <el-table-column prop="thickness" label="鍘氬害(mm)"></el-table-column>
-        <el-table-column prop="quantity" label="鏁伴噺"></el-table-column>
-        <el-table-column prop="entry_time" label="鍏ュ簱鏃堕棿"></el-table-column>
-        <el-table-column prop="batchnumber" label="鎵规鍙�"></el-table-column>
-       
+        <template #header>
+          <div style="display: flex; align-items: center">
+            <span style="font-size: 16px; font-weight: bold; margin-right: 20px"
+              >浠诲姟鍒楄〃</span
+            >
+          </div>
+        </template>
+        <el-table-column prop="id" label="Glassid"></el-table-column>
         <el-table-column
-  align="center"
-  label="鏂欐灦鐘舵��"
-  min-width="80"
-  prop="shelf_status"
->
-<template #default="scope">
-        <el-tag :type="getTagType(scope.row.shelf_status)" @click="toggleStatus(scope.row)">
-          {{ scope.row.shelf_status === 1 ? '鍚敤' : '鏈惎鐢�' }}
-        </el-tag>
-      </template>
-</el-table-column>
+          prop="taskType"
+          label="浠诲姟鎻忚堪"
+          width="250"
+          :formatter="formatTaskType"
+        ></el-table-column>
+        <el-table-column
+          prop="rawThickness"
+          label="鐜荤拑鍘氬害"
+        ></el-table-column>
+        <el-table-column prop="color" label="鐜荤拑鑶滅郴"></el-table-column>
+        <el-table-column prop="startTime" label="鍒涘缓鏃堕棿"></el-table-column>
 
-        <!-- 鎿嶄綔鍒� -->
-        <el-table-column label="鎿嶄綔" width="250">
-          <template #default="{ row }">
-            <el-button type="primary" size="mini" @click="edithandleRowClick(row)">淇敼</el-button>
-            <el-button type="danger" size="mini" @click="handleDelete(row)">鍒犻櫎</el-button>
-            <el-button type="warning" size="mini" @click="handleCheckout(row)">鍑哄簱</el-button>
-            <!-- <el-button type="success" size="mini" @click="addglass()">娣诲姞鍘熺墖</el-button> -->
+        <el-table-column
+          align="center"
+          label="浠诲姟鐘舵��"
+          min-width="80"
+          prop="taskState"
+        >
+          <template #default="scope">
+            <el-tag :type="getTagType2(scope.row.taskState)">
+              {{ scope.row.taskState == "completed" ? "瀹屾垚" : "杩涜涓�" }}
+            </el-tag>
           </template>
         </el-table-column>
 
-        
+        <!-- 鎿嶄綔鍒� -->
+        <el-table-column label="鎿嶄綔" width="350">
+          <template #default="{ row }">
+            <el-button type="primary" size="mini" @click="handleRestart(row)"
+              >閲嶆柊寮�濮�</el-button
+            >
+            <el-button type="danger" size="mini" @click="handleDeletetask(row)"
+              >鍒犻櫎浠诲姟</el-button
+            >
+            <el-button type="success" size="mini" @click="handleComplete(row)"
+              >浠诲姟瀹屾垚</el-button
+            >
+          </template>
+        </el-table-column>
       </el-table>
-      <el-pagination
-        v-if="totalItems > 0"
-        background
-        layout="prev, pager, next"
-        :total="totalItems"
-        :page-size="pageSize"
-        @current-change="handleCurrentChange"
-      ></el-pagination>
-
-      
-  </el-dialog>
-
-
-  <el-table
-    :data="tasktableData"
-    style="width: 98%; height: 150px"
-    @selection-change="handleSelectionChange"
-    :header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
-    ref="table"
-    empty-text="No Data"
-  >
-
-
-  <template #header>
-        <div style="display: flex; align-items: center;">
-          <span style="font-size: 16px; font-weight: bold; margin-right: 20px;">浠诲姟鍒楄〃</span>
-        
-        </div>
-      </template>
-    <el-table-column prop="Glassid" label="Glassid"></el-table-column>
-    <el-table-column prop="taskDescription" label="浠诲姟鎻忚堪" width="250"></el-table-column>
-    <el-table-column prop="glassThickness" label="鐜荤拑鍘氬害"></el-table-column>
-    <el-table-column prop="glassFilm" label="鐜荤拑鑶滅郴"></el-table-column>
-    <el-table-column prop="creationTime" label="鍒涘缓鏃堕棿"></el-table-column>
-
-    <el-table-column
-      align="center"
-      label="浠诲姟鐘舵��"
-      min-width="80"
-      prop="taskStatus"
-    >
-      <template #default="scope">
-        <el-tag :type="getTagType2(scope.row.taskStatus)">
-          {{ scope.row.taskStatus == 'completed' ? '瀹屾垚' : '杩涜涓�' }}
-        </el-tag>
-      </template>
-    </el-table-column>
-
-    <!-- 鎿嶄綔鍒� -->
-    <el-table-column label="鎿嶄綔" width="350">
-      <template #default="{ row }">
-        <el-button type="primary" size="mini" @click="handleRestart(row)">閲嶆柊寮�濮�</el-button>
-        <el-button type="danger" size="mini" @click="handleDeletetask(row)">鍒犻櫎浠诲姟</el-button>
-        <el-button type="success" size="mini" @click="handleComplete(row)">浠诲姟瀹屾垚</el-button>
-      </template>
-    </el-table-column>
-  </el-table>
     </el-card>
 
-
-
-
-   
-    <div class="img-ypcc" >
-
-
-      <div class="img-car1" :style="'z-index:999;left:397px;top:205px;position:absolute;'">
-      <div v-show="cellshow1" style="margin-top:10px;width:200px;height:5px;background-color:#409EFF;"></div>
+    <div class="img-ypcc">
+      <div
+        class="img-car1"
+        :style="'z-index:999;left:397px;top:205px;position:absolute;'"
+      >
+        <div
+          v-show="cellshow1"
+          style="
+            margin-top: 10px;
+            width: 200px;
+            height: 5px;
+            background-color: #409eff;
+          "
+        ></div>
+      </div>
     </div>
-   
-    </div>
-   
+
     <!-- 鍏ュ簱瀵硅瘽妗� -->
     <el-dialog
       title="鍏ュ簱"
@@ -148,9 +178,9 @@
     >
       <el-form :model="formData" ref="form" label-width="80px">
         <el-form-item label="杩涘簱鏂欐灦">
-          <el-select v-model="formData.shelf" placeholder="璇烽�夋嫨杩涘簱鏂欐灦">
-            <el-option label="A1" value="A1"></el-option>
-            <el-option label="B2" value="B2"></el-option>
+          <el-select v-model="formData.number" placeholder="璇烽�夋嫨杩涘簱鏂欐灦">
+            <el-option label="1" value="1"></el-option>
+            <el-option label="2" value="2"></el-option>
             <!-- 鏍规嵁瀹為檯鎯呭喌娣诲姞鏇村閫夐」 -->
           </el-select>
         </el-form-item>
@@ -162,91 +192,137 @@
           </el-select>
         </el-form-item>
         <el-form-item label="瀹藉害">
-          <el-input v-model.number="formData.width" placeholder="璇疯緭鍏ュ搴�"></el-input>
+          <el-input
+            v-model.number="formData.rawWidth"
+            placeholder="璇疯緭鍏ュ搴�"
+          ></el-input>
         </el-form-item>
         <el-form-item label="楂樺害">
-          <el-input v-model.number="formData.height" placeholder="璇疯緭鍏ラ珮搴�"></el-input>
+          <el-input
+            v-model.number="formData.rawHeight"
+            placeholder="璇疯緭鍏ラ珮搴�"
+          ></el-input>
         </el-form-item>
         <el-form-item label="鍘氬害">
-          <el-input v-model.number="formData.thickness" placeholder="璇疯緭鍏ュ帤搴�"></el-input>
+          <el-input
+            v-model.number="formData.rawThickness"
+            placeholder="璇疯緭鍏ュ帤搴�"
+          ></el-input>
         </el-form-item>
         <el-form-item label="鏁伴噺">
-          <el-input v-model.number="formData.quantity" placeholder="璇疯緭鍏ユ暟閲�"></el-input>
+          <el-input
+            v-model.number="formData.pieces"
+            placeholder="璇疯緭鍏ユ暟閲�"
+          ></el-input>
         </el-form-item>
       </el-form>
 
       <div slot="footer" class="dialog-footer">
         <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
-        <el-button type="primary" @click="handleConfirmInbound">纭� 瀹�</el-button>
+        <el-button type="primary" @click="handleConfirmInbound"
+          >纭� 瀹�</el-button
+        >
       </div>
     </el-dialog>
 
-
-    <el-dialog title="娣诲姞鍘熺墖"  v-model="dialogVisible3" width="50%">
-    <el-form :model="formData3" ref="form" label-width="80px">
-      <el-form-item label="棰滆壊鑶滅郴">
-        <el-input v-model="formData.selectedColor" readonly style="width: 250px; height: 35px; font-size: 20px"></el-input>
-        <el-dropdown @command="handleCommand">
-          <span class="el-dropdown-link">
-            閫夋嫨<i class="el-icon-arrow-down el-icon--right"></i>
-          </span>
-          <el-dropdown-menu slot="dropdown">
-            <el-dropdown-item v-for="color in colors" :key="color['0_glass_id']" :command="color['0_glass_id']">
-              {{ color['0_glass_id'] }}
-            </el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
-      </el-form-item>
-
-      <el-form-item label="闀垮害">
-        <el-input v-model="formData.width" required style="width: 250px; font-size: 20px" @focus="clearInput('wid')"></el-input>
-      </el-form-item>
-
-      <el-form-item label="楂樺害">
-        <el-input v-model="formData.height" required style="width: 250px; font-size: 20px" @focus="clearInput('heig')"></el-input>
-      </el-form-item>
-
-      <el-form-item label="鍘氬害">
-        <el-input v-model="formData.thickness" required style="width: 250px; font-size: 20px" @focus="clearInput('thinkness')"></el-input>
-      </el-form-item>
-
-      <el-form-item label="鏁伴噺">
-        <el-input-number v-model="formData.quantity" required :min="0" :max="9000" style="width: 250px; font-size: 20px" @focus="clearInput('num')"></el-input-number>
-      </el-form-item>
-    </el-form>
-
-    <span slot="footer" class="dialog-footer">
-      <el-button @click="dialogVisible3 = false">鍏抽棴</el-button>
-      <el-button type="primary" @click="submitForm">鎻愪氦</el-button>
-    </span>
-  </el-dialog>
-
-  <el-dialog title="缂栬緫" v-model="editdialogVisible" width="30%" @close="edithandleDialogClose">
-      <el-form :model="editForm" ref="editFormRef" label-width="80px">
-        <el-form-item label="鏁伴噺">
-          <el-input v-model="editForm.quantity"></el-input>
+    <el-dialog title="娣诲姞鍘熺墖" v-model="dialogVisible3" width="50%">
+      <el-form :model="formData3" ref="form" label-width="80px">
+        <el-form-item label="棰滆壊鑶滅郴">
+          <el-input
+            v-model="formData.selectedColor"
+            readonly
+            style="width: 250px; height: 35px; font-size: 20px"
+          ></el-input>
+          <el-dropdown @command="handleCommand">
+            <span class="el-dropdown-link">
+              閫夋嫨<i class="el-icon-arrow-down el-icon--right"></i>
+            </span>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item
+                v-for="color in colors"
+                :key="color['0_glass_id']"
+                :command="color['0_glass_id']"
+              >
+                {{ color["0_glass_id"] }}
+              </el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
         </el-form-item>
-        <el-form-item label="鎵规鍙�">
-          <el-input v-model="editForm.batchnumber"></el-input>
-        </el-form-item>
+
         <el-form-item label="闀垮害">
-          <el-input v-model="editForm.length"></el-input>
+          <el-input
+            v-model="formData.width"
+            required
+            style="width: 250px; font-size: 20px"
+            @focus="clearInput('wid')"
+          ></el-input>
         </el-form-item>
+
         <el-form-item label="楂樺害">
-          <el-input v-model="editForm.height"></el-input>
+          <el-input
+            v-model="formData.height"
+            required
+            style="width: 250px; font-size: 20px"
+            @focus="clearInput('heig')"
+          ></el-input>
         </el-form-item>
+
         <el-form-item label="鍘氬害">
-          <el-input v-model="editForm.thickness"></el-input>
+          <el-input
+            v-model="formData.thickness"
+            required
+            style="width: 250px; font-size: 20px"
+            @focus="clearInput('thinkness')"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="鏁伴噺">
+          <el-input-number
+            v-model="formData.quantity"
+            required
+            :min="0"
+            :max="9000"
+            style="width: 250px; font-size: 20px"
+            @focus="clearInput('num')"
+          ></el-input-number>
         </el-form-item>
       </el-form>
 
-      <div  class="dialog-footer">
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible3 = false">鍏抽棴</el-button>
+        <el-button type="primary" @click="submitForm">鎻愪氦</el-button>
+      </span>
+    </el-dialog>
+
+    <el-dialog
+      title="缂栬緫"
+      v-model="editdialogVisible"
+      width="30%"
+      @close="edithandleDialogClose"
+    >
+      <el-form :model="editForm" ref="editFormRef" label-width="80px">
+        <el-form-item label="鏁伴噺">
+          <el-input v-model="editForm.pieces"></el-input>
+        </el-form-item>
+        <el-form-item label="鎵规鍙�">
+          <el-input v-model="editForm.batchId"></el-input>
+        </el-form-item>
+        <el-form-item label="闀垮害">
+          <el-input v-model="editForm.rawWidth"></el-input>
+        </el-form-item>
+        <el-form-item label="楂樺害">
+          <el-input v-model="editForm.rawHeight"></el-input>
+        </el-form-item>
+        <el-form-item label="鍘氬害">
+          <el-input v-model="editForm.rawThickness"></el-input>
+        </el-form-item>
+      </el-form>
+
+      <div class="dialog-footer">
         <el-button @click="editdialogVisible = false">鍙栨秷</el-button>
         <el-button type="primary" @click="editsaveEdit">淇濆瓨</el-button>
       </div>
     </el-dialog>
-
-
   </div>
 </template>
 
@@ -254,363 +330,413 @@
 
 
 <script setup>
-import { ref, onMounted, onBeforeUnmount } from 'vue'; // 瀵煎叆 Vue 3 鐨勬ā鍧�
-import * as echarts from 'echarts';
-import { ElMessage, ElMessageBox } from 'element-plus'
-import {tableData} from '@/stores/tableData.js';
+import { ref, onMounted, onBeforeUnmount,onUnmounted } from "vue"; // 瀵煎叆 Vue 3 鐨勬ā鍧�
+//import * as echarts from 'echarts';
+import { ElMessage, ElMessageBox } from "element-plus";
+// import {tableData} from '@/stores/tableData.js';
+import { WebSocketHost, host } from "@/utils/constants";
+import { initializeWebSocket, closeWebSocket } from "@/utils/WebSocketService";
 
+import {
+  updateRawUsage,
+  deleteRawUsage,
+  inStorage,
+  outStorage,
+  taskUpdate,
+} from "@/utils/api";
 
-
-    const loading = ref(false);
-   
-
-    const Hidden = ref(false)
-
-
-    const totalItems = ref(0);
-    totalItems.value = 10;
-    const pageSize = 10;
-    let currentPage = ref(1);
-    const handleCurrentChange = (val) => {
-
-      currentPage.value = val;
-      
-    };
-
-   const getTagType2 =(status) => {
-      switch (status) {
-        case 'completed':
-          return 'success';
-        case 'in-progress':
-          return 'info';
-        case 'warning':
-          return 'warning';
-        case 'danger':
-          return 'danger';
-        default:
-          return '';
-      }
-    }
-
-    const getTagType =(status) => {
-      return status === 1 ? 'success' : 'danger';
-      // 鏍规嵁鐘舵�佸�煎喅瀹氭爣绛剧被鍨嬶紝杩欓噷鍋囪鐘舵�佷负1鏃朵负鎴愬姛锛堢豢鑹诧級锛屽惁鍒欎负澶辫触锛堢孩鑹诧級
-    }
-
-    const toggleStatus = (row) => {
-      // 鍒囨崲鏂欐灦鐘舵�佺殑閫昏緫
-      row.shelf_status = 1 - row.shelf_status; // Toggle between 0 and 1
-      // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
-    };
-
-   const tasktableData=ref([
-
-    {
-          Glassid: 'G001',
-          taskDescription: '浠庡悐瑁呬綅銆�99銆戝埌浠撲綅銆�56銆�',
-          taskStatus: 'in-progress',
-          glassThickness: '5mm',
-          glassFilm: '鑶滅郴A',
-          creationTime: '2024-06-19 10:00:00'
-        },
-        {
-          Glassid: 'G002',
-          taskDescription: '浠庡悐瑁呬綅銆�99銆戝埌浠撲綅銆�56銆�',
-          taskStatus: 'completed',
-          glassThickness: '10mm',
-          glassFilm: '鑶滅郴B',
-          creationTime: '2024-06-19 11:00:00'
-        }
-        ]);
-
-    const dialogVisible = ref(false);
-    const formData = ref({
-      shelf: '',
-      color: '',
-      width: '',
-      height: '',
-      thickness: '',
-      quantity: ''
-    });
-
-    const formData2 = ref({
-      dzw: '',
-     
-    });
-
-   
-    const handleDelete = (row) => {
-  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
-  ElMessageBox.confirm('纭畾瑕佹墽琛屽垹闄ゆ搷浣滃悧锛�', '纭鍒犻櫎', {
-    confirmButtonText: '纭',
-    cancelButtonText: '鍙栨秷',
-    type: 'warning',
-  }).then(() => {
-    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋冿紝鎵ц鍑哄簱鎿嶄綔
-    console.log('鎵ц鍒犻櫎鎿嶄綔', row);
-  }).catch(() => {
-    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
-    console.log('鍙栨秷鍒犻櫎鎿嶄綔');
-  });
+const loading = ref(false);
+const Hidden = ref(false);
+const tableData = ref([]);
+const totalItems = ref(0);
+totalItems.value = 10;
+const pageSize = 10;
+let currentPage = ref(1);
+const handleCurrentChange = (val) => {
+  currentPage.value = val;
 };
 
-    
-    const handleCheckout = (row) => {
-  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
-  ElMessageBox.confirm('纭畾瑕佹墽琛屽嚭搴撴搷浣滃悧锛�', '纭鍑哄簱', {
-    confirmButtonText: '纭',
-    cancelButtonText: '鍙栨秷',
-    type: 'warning',
-  }).then(() => {
-    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋冿紝鎵ц鍑哄簱鎿嶄綔
-    console.log('鎵ц鍑哄簱鎿嶄綔', row);
-  }).catch(() => {
-    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
-    console.log('鍙栨秷鍑哄簱鎿嶄綔');
-  });
+const formatTaskType = (row, column) => {
+  if (row.taskType === "浠庝粨浣嶅埌鍚婅浣�") {
+    return `浠庝粨浣�${row.shelfRack}鍒板悐瑁呬綅${row.loadRack}`;
+  } else if (row.taskType === "浠庝粨浣嶅埌涓婄墖浣�") {
+    return `浠庝粨浣�${row.shelfRack}鍒颁笂鐗囦綅${row.loadRack}`;
+  } else if (row.taskType === "浠庝笂鐗囦綅鍒颁粨浣�") {
+    return `浠庝笂鐗囦綅${row.loadRack}鍒颁粨浣�${row.shelfRack}`;
+  } else if (row.taskType === "浠庡悐瑁呬綅鍒颁粨浣�") {
+    return `浠庡悐瑁呬綅${row.loadRack}鍒颁粨浣�${row.shelfRack}`;
+  }
 };
 
+const getTagType2 = (status) => {
+  switch (status) {
+    case "completed":
+      return "success";
+    case "in-progress":
+      return "info";
+    case "warning":
+      return "warning";
+    case "danger":
+      return "danger";
+    default:
+      return "";
+  }
+};
 
-    const handleInbound = () => {
-      // 鎵撳紑鍏ュ簱瀵硅瘽妗�
-      dialogVisible.value = true;
-    };
+const getTagType = (status) => {
+  return status === 1 ? "success" : "danger";
+  // 鏍规嵁鐘舵�佸�煎喅瀹氭爣绛剧被鍨嬶紝杩欓噷鍋囪鐘舵�佷负1鏃朵负鎴愬姛锛堢豢鑹诧級锛屽惁鍒欎负澶辫触锛堢孩鑹诧級
+};
 
-    const storage = () => {
-      // 鎵撳紑鍏ュ簱瀵硅瘽妗�
-      Hidden.value = true;
-    };
-    
+const toggleStatus = (row) => {
+  // 鍒囨崲鏂欐灦鐘舵�佺殑閫昏緫
+  row.enableState = 1 - row.enableState; // Toggle between 0 and 1
+  // 姝ゅ鍙互娣诲姞淇濆瓨鐘舵�佺殑閫昏緫锛屾瘮濡傝皟鐢� API 鏇存柊鏁版嵁
+};
+let socket = null;
+const socketUrl = `ws://${WebSocketHost}:${host}/api/glassStorage/api/talk/storageTask`;
+// 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
+const handleMessage = (data) => {
+  // 鏇存柊 tableData 鐨勬暟鎹�
 
-    const handleCloseDialog = () => {
-      // 鍏抽棴瀵硅瘽妗嗘椂閲嶇疆琛ㄥ崟鏁版嵁
-      formData.value = {
-        shelf: '',
-        color: '',
-        width: '',
-        height: '',
-        thickness: '',
-        quantity: ''
+  tableData.value = data.rack[0]; // 鍋囪 tableData 鏄搷搴斿紡瀵硅薄鎴栧彉閲�
+
+  tableData.value.forEach((item) => {
+    // 鑾峰彇 createTime 鐨勬椂闂存埑
+    const createTimeTimestamp = item.createTime;
+
+    // 鍒涘缓鏃ユ湡瀵硅薄
+    const date = new Date(createTimeTimestamp);
+
+    // 鏍煎紡鍖栨棩鏈熸椂闂翠负鏈湴鏍煎紡
+    const formattedDateTime = date.toLocaleString();
+
+    // 鏇挎崲鍘熸潵鐨� createTime 瀛楁涓烘牸寮忓寲鍚庣殑鏃ユ湡鏃堕棿瀛楃涓�
+    item.createTime = formattedDateTime;
+  });
+
+  tasktableData.value = data.tasks[0]; // 鍋囪 tasktableData 鏄搷搴斿紡瀵硅薄鎴栧彉閲�
+
+  tasktableData.value.forEach((item) => {
+    // 鑾峰彇 createTime 鐨勬椂闂存埑
+    const createTimeTimestamp = item.startTime;
+
+    // 鍒涘缓鏃ユ湡瀵硅薄
+    const date = new Date(createTimeTimestamp);
+
+    // 鏍煎紡鍖栨棩鏈熸椂闂翠负鏈湴鏍煎紡
+    const formattedDateTime = date.toLocaleString();
+
+    // 鏇挎崲鍘熸潵鐨� createTime 瀛楁涓烘牸寮忓寲鍚庣殑鏃ユ湡鏃堕棿瀛楃涓�
+    item.startTime = formattedDateTime;
+  });
+};
+onMounted(() => {
+  socket = initializeWebSocket(socketUrl, handleMessage);
+});
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
+onBeforeUnmount(() => {
+  console.log("鍏抽棴浜�");
+  closeWebSocket();
+});
+
+const tasktableData = ref([]);
+
+const dialogVisible = ref(false);
+const formData = ref({
+  number: "",
+  color: "",
+  rawWidth: "",
+  rawHeight: "",
+  rawThickness: "",
+  pieces: "",
+  loadRack: 1,
+});
+
+const formData2 = ref({
+  dzw: "",
+});
+
+const handleDelete = (row) => {
+  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
+  ElMessageBox.confirm("纭畾瑕佹墽琛屽垹闄ゆ搷浣滃悧锛�", "纭鍒犻櫎", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      // 鐐瑰嚮纭鎸夐挳鐨勫洖璋冿紝鎵ц鍑哄簱鎿嶄綔
+
+      const intNumber = {
+        id: parseInt(row.number),
       };
-      dialogVisible.value = false;
-    };
+      deleteRawUsage(intNumber);
 
-    const handleConfirmInbound = () => {
-      // 澶勭悊纭鍏ュ簱閫昏緫锛屽彲浠ュ湪杩欓噷鎻愪氦琛ㄥ崟鎴栬�呮墽琛屽叾浠栨搷浣�
-      console.log('Confirm Inbound:', formData.value);
-      // 鍏抽棴瀵硅瘽妗�
-      dialogVisible.value = false;
-    };
-
-
-
-
-
-    const dialogVisible3 = ref(false);
-    const colors = ref([
-      { '0_glass_id': 'Red' },
-      { '0_glass_id': 'Green' },
-      { '0_glass_id': 'Blue' }
-      // Add more colors as needed
-    ]);
-
-    const formData3 = ref({
-      selectedColor: '',
-      wid: '',
-      heig: '',
-      thinkness: '',
-      num: ''
+      console.log("鎵ц鍒犻櫎鎿嶄綔");
+    })
+    .catch(() => {
+      // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+      console.log("鍙栨秷鍒犻櫎鎿嶄綔");
     });
-
-
-    const addglass = () => {
-      // 鎵撳紑鍏ュ簱瀵硅瘽妗�
-      dialogVisible3.value = true;
-    };
-    const handleCommand = (command) => {
-      formData.value.selectedColor = command;
-    };
-
-    const clearInput = (field) => {
-      formData.value[field] = '';
-    };
-
-    const submitForm = () => {
-      console.log('鎻愪氦鏁版嵁:', formData.value);
-      dialogVisible3.value = false;
-      // Add your submit logic here
-    };
-    
-
-
-
-    const editdialogVisible = ref(false);
-    const editForm = ref({
-      quantity: '',
-      batchnumber: '',
-      length:'',
-      height:'',
-      thickness:''
-    });
-    const editFormRef = ref(null);
-    let currentRow = ref(null);
-
-    // 澶勭悊琛岀偣鍑讳簨浠�
-    const edithandleRowClick = (row) => {
-      currentRow.value = row;
-      console.log(row)
-      editForm.value.quantity = row.quantity.toString();
-      editForm.value.batchnumber = row.batchnumber;
-      editForm.value.length = row.length;
-      editForm.value.height = row.height;
-      editForm.value.thickness = row.thickness;
-      editdialogVisible.value = true;
-      console.log(editForm.value)
-    };
-
-    // 娣诲姞淇濆瓨缂栬緫鍐呭
-    const editsaveEdit = () => {
-      if (!currentRow.value) return;
-
-      // 鏇存柊褰撳墠琛屾暟鎹�
-      currentRow.value.quantity = parseInt(editForm.value.quantity);
-      currentRow.value.batchnumber = editForm.value.batchnumber;
-
-      // 鍏抽棴瀵硅瘽妗�
-      editdialogVisible.value = false;
-    };
-
-    // 瀵硅瘽妗嗗叧闂椂閲嶇疆缂栬緫琛ㄥ崟鍜屽綋鍓嶈鏁版嵁
-    const edithandleDialogClose = () => {
-      editForm.value.quantity = '';
-      editForm.value.batchnumber = '';
-      editForm.value.width = '';
-      editForm.value.height = '';
-      editForm.value.thickness = '';
-  
-
-      currentRow.value = null;
-    };
-
-
-
-
-
-    
-
-
-    const handleRestart = (row) => {
-  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
-  ElMessageBox.confirm('纭畾瑕佹墽琛岄噸鏂板紑濮嬫搷浣滃悧锛�', '纭閲嶆柊寮�濮�', {
-    confirmButtonText: '纭',
-    cancelButtonText: '鍙栨秷',
-    type: 'warning',
-  }).then(() => {
-    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋�
-    console.log('鎵ц閲嶆柊寮�濮嬫搷浣�', row);
-  }).catch(() => {
-    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
-    console.log('鍙栨秷閲嶆柊寮�濮嬫搷浣�');
-  });
 };
 
+const handleCheckout = (row) => {
+  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
+  ElMessageBox.confirm("纭畾瑕佹墽琛屽嚭搴撴搷浣滃悧锛�", "纭鍑哄簱", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      // 鐐瑰嚮纭鎸夐挳鐨勫洖璋冿紝鎵ц鍑哄簱鎿嶄綔
+      const raw={
+        number:parseInt(row.number),
+        loadRack:2
+      }
+      outStorage(raw)
+      console.log("鎵ц鍑哄簱鎿嶄綔", row);
+    })
+    .catch(() => {
+      // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+      console.log("鍙栨秷鍑哄簱鎿嶄綔");
+    });
+};
+
+const handleInbound = () => {
+  // 鎵撳紑鍏ュ簱瀵硅瘽妗�
+  dialogVisible.value = true;
+};
+
+const storage = () => {
+  // 鎵撳紑鍏ュ簱瀵硅瘽妗�
+  Hidden.value = true;
+};
+
+const handleCloseDialog = () => {
+  // 鍏抽棴瀵硅瘽妗嗘椂閲嶇疆琛ㄥ崟鏁版嵁
+  formData.value = {
+    number: "",
+    color: "",
+    rawWidth: "",
+    rawHeight: "",
+    rawThickness: "",
+    pieces: "",
+  };
+  dialogVisible.value = false;
+};
+
+const handleConfirmInbound = () => {
+  inStorage(formData.value);
+  // 澶勭悊纭鍏ュ簱閫昏緫锛屽彲浠ュ湪杩欓噷鎻愪氦琛ㄥ崟鎴栬�呮墽琛屽叾浠栨搷浣�
+  console.log("Confirm Inbound:", formData.value);
+  // 鍏抽棴瀵硅瘽妗�
+  dialogVisible.value = false;
+};
+
+const dialogVisible3 = ref(false);
+const colors = ref([
+  { "0_glass_id": "Red" },
+  { "0_glass_id": "Green" },
+  { "0_glass_id": "Blue" },
+  // Add more colors as needed
+]);
+
+const formData3 = ref({
+  selectedColor: "",
+  wid: "",
+  heig: "",
+  thinkness: "",
+  num: "",
+});
+
+const addglass = () => {
+  // 鎵撳紑鍏ュ簱瀵硅瘽妗�
+  dialogVisible3.value = true;
+};
+const handleCommand = (command) => {
+  formData.value.selectedColor = command;
+};
+
+const clearInput = (field) => {
+  formData.value[field] = "";
+};
+
+const submitForm = () => {
+  console.log("鎻愪氦鏁版嵁:", formData.value);
+  dialogVisible3.value = false;
+  // Add your submit logic here
+};
+
+const editdialogVisible = ref(false);
+const editForm = ref({
+  id: "",
+  pieces: "",
+  batchId: "",
+  rawWidth: "",
+  rawHeight: "",
+  rawThickness: "",
+});
+const editFormRef = ref(null);
+let currentRow = ref(null);
+
+// 澶勭悊琛岀偣鍑讳簨浠�
+const edithandleRowClick = (row) => {
+  currentRow.value = row;
+  console.log(row);
+  editForm.value.pieces = row.pieces.toString();
+  editForm.value.batchId = row.batchId;
+  editForm.value.rawWidth = row.rawWidth;
+  editForm.value.rawHeight = row.rawHeight;
+  editForm.value.rawThickness = row.rawThickness;
+  editForm.value.id = row.number;
+  editdialogVisible.value = true;
+  console.log(editForm.value);
+};
+
+// 娣诲姞淇濆瓨缂栬緫鍐呭
+const editsaveEdit = () => {
+  if (!currentRow.value) return;
+
+  // 鏇存柊褰撳墠琛屾暟鎹�
+  currentRow.value.pieces = editForm.value.pieces;
+  currentRow.value.batchId = editForm.value.batchId;
+  currentRow.value.rawWidth = editForm.value.rawWidth;
+  currentRow.value.rawHeight = editForm.value.rawHeight;
+  currentRow.value.rawThickness = editForm.value.rawThickness;
+  // 璋冪敤鏇存柊鍑芥暟锛屽苟澶勭悊鍏惰繑鍥炵殑 Promise
+  updateRawUsage(editForm.value);
+
+  // 鍏抽棴瀵硅瘽妗�
+  editdialogVisible.value = false;
+};
+
+// 瀵硅瘽妗嗗叧闂椂閲嶇疆缂栬緫琛ㄥ崟鍜屽綋鍓嶈鏁版嵁
+const edithandleDialogClose = () => {
+  editForm.value.pieces = "";
+  editForm.value.batchId = "";
+  editForm.value.rawWidth = "";
+  editForm.value.rawHeight = "";
+  editForm.value.rawThickness = "";
+
+  currentRow.value = null;
+};
+
+const handleRestart = (row) => {
+  // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
+  ElMessageBox.confirm("纭畾瑕佹墽琛岄噸鏂板紑濮嬫搷浣滃悧锛�", "纭閲嶆柊寮�濮�", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      const taskdata={
+        id:row.id,
+        Type:"閲嶆柊寮�濮�"
+      }
+      taskUpdate(taskdata);
+      
+
+      console.log("鎵ц閲嶆柊寮�濮嬫搷浣�", row);
+    })
+    .catch(() => {
+      // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+      console.log("鍙栨秷閲嶆柊寮�濮嬫搷浣�");
+    });
+};
 
 const handleDeletetask = (row) => {
   // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
-  ElMessageBox.confirm('纭畾瑕佹墽琛屽垹闄や换鍔℃搷浣滃悧锛�', '纭鍒犻櫎浠诲姟', {
-    confirmButtonText: '纭',
-    cancelButtonText: '鍙栨秷',
-    type: 'warning',
-  }).then(() => {
-    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋�
-    console.log('鎵ц鍒犻櫎浠诲姟鎿嶄綔', row);
-  }).catch(() => {
-    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
-    console.log('鍙栨秷鍒犻櫎浠诲姟鎿嶄綔');
-  });
+  ElMessageBox.confirm("纭畾瑕佹墽琛屽垹闄や换鍔℃搷浣滃悧锛�", "纭鍒犻櫎浠诲姟", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      // 鐐瑰嚮纭鎸夐挳鐨勫洖璋�
+      const taskdata={
+        id:row.id,
+        Type:"鍒犻櫎"
+      }
+      taskUpdate(taskdata);
+      console.log("鎵ц鍒犻櫎浠诲姟鎿嶄綔", row);
+    })
+    .catch(() => {
+      // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+      console.log("鍙栨秷鍒犻櫎浠诲姟鎿嶄綔");
+    });
 };
-
-
 
 const handleComplete = (row) => {
   // 浣跨敤 Element UI 鐨� MessageBox.confirm 鏂规硶杩涜浜屾纭
-  ElMessageBox.confirm('纭畾瑕佹墽琛屼换鍔″畬鎴愭搷浣滃悧锛�', '纭浠诲姟瀹屾垚', {
-    confirmButtonText: '纭',
-    cancelButtonText: '鍙栨秷',
-    type: 'warning',
-  }).then(() => {
-    // 鐐瑰嚮纭鎸夐挳鐨勫洖璋�
-    console.log('鎵ц浠诲姟瀹屾垚鎿嶄綔', row);
-  }).catch(() => {
-    // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
-    console.log('鍙栨秷浠诲姟瀹屾垚鎿嶄綔');
-  });
+  ElMessageBox.confirm("纭畾瑕佹墽琛屼换鍔″畬鎴愭搷浣滃悧锛�", "纭浠诲姟瀹屾垚", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+
+      const taskdata={
+        id:row.id,
+        Type:"瀹屾垚"
+      }
+      taskUpdate(taskdata);
+      // 鐐瑰嚮纭鎸夐挳鐨勫洖璋�
+      console.log("鎵ц浠诲姟瀹屾垚鎿嶄綔", row);
+    })
+    .catch(() => {
+      // 鐐瑰嚮鍙栨秷鎸夐挳鐨勫洖璋冿紝涓嶆墽琛屼换浣曟搷浣�
+      console.log("鍙栨秷浠诲姟瀹屾垚鎿嶄綔");
+    });
 };
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    
-
-
 </script>
 
 <style scoped>
-
-
-#dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
-#dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
-#dialog-footer{
+#dt {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 100px;
+}
+#dta {
+  display: block;
+  float: left;
+  line-height: 20px;
+  margin-left: 80%;
+}
+#dialog-footer {
   text-align: center;
   margin-top: -15px;
 }
 
-
-
-.img-ypcc{
+.img-ypcc {
   margin-left: 80px;
-  background-image:url('../../assets/ypcc.png');
+  background-image: url("../../assets/ypcc.png");
   background-repeat: no-repeat;
-    background-attachment: local;
-    min-height: 600px;
-    width: 1400px;
-    max-width: 100%;
-    background-size: 1400px 600px;
-    overflow: hidden;
-    position:relative;
-    margin-top:0px
+  background-attachment: local;
+  min-height: 600px;
+  width: 1400px;
+  max-width: 100%;
+  background-size: 1400px 600px;
+  overflow: hidden;
+  position: relative;
+  margin-top: 0px;
 }
 
-.img-car1{
-  background-image:url('../../assets/ypccche.png');
+.img-car1 {
+  background-image: url("../../assets/ypccche.png");
   position: absolute;
   background-repeat: no-repeat;
-    background-attachment: local;
-    min-height: 400px;
-    width: 200px;
-    max-width: 100%;
-    background-size: 200px 170px;
-    overflow: hidden;
-    position:relative
+  background-attachment: local;
+  min-height: 400px;
+  width: 200px;
+  max-width: 100%;
+  background-size: 200px 170px;
+  overflow: hidden;
+  position: relative;
 }
 
 .custom-dialog {
diff --git a/UI-Project/src/views/Identify/identify.vue b/UI-Project/src/views/Identify/identify.vue
index 64df621..5111448 100644
--- a/UI-Project/src/views/Identify/identify.vue
+++ b/UI-Project/src/views/Identify/identify.vue
@@ -41,7 +41,7 @@
 <script setup lang="ts">  
 import { Delete, Upload } from '@element-plus/icons-vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
-import { ref, onMounted, onBeforeUnmount } from 'vue';  
+import { ref, onMounted, onBeforeUnmount,onUnmounted } from 'vue';  
 import request from "@/utils/request"
 import { WebSocketHost ,host} from '@/utils/constants'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
@@ -181,15 +181,13 @@
     }  
   });  
 }
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/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.003, // 灏唜鍊奸櫎浠�3  
+        ...rect,
+        x_axis: (rect.x_axis*100) * 0.003,
         y_axis: (rect.y_axis*100) * 0.003,
         width: (rect.width*100) * 0.002 ,
         widtha: rect.width ,
@@ -197,18 +195,15 @@
         height:( rect.height*100) * 0.002 ,
         glass_state: rect.glass_state
       }));  
- // console.log("鏇存柊鍚庢暟鎹�", tableData);
-
 };
-
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
-
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
index 2d6988b..f0b25de 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -3,7 +3,7 @@
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
 import request from "@/utils/request"
-import { ref, onMounted, onBeforeUnmount } from 'vue';  
+import { ref, onMounted, onBeforeUnmount,onUnmounted } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
@@ -22,31 +22,52 @@
 const adjustedRectsb = ref([]);
 const currentGlassId = ref(null);
 const currenttemperingFeedSequence = ref(null);
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
 const handleMessage = (data) => {
 // 杩涚倝涓�
   if(data.intoGlass!=null){
     adjustedRects1.value =  data.intoGlass[0].map(rect => {  
       console.log( adjustedRects1.value);
-        let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
+        let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
         let newX = rect.yCoordinate; 
-  if (rect.angle === 0) {  
-          adjustedWidth = rect.height * 0.12;  
-          adjustedHeight = rect.width * 0.1;  
-          adjustedWidtha = rect.height;  
-          adjustedHeighta = rect.width;  
-          newX = 5087 - (rect.xCoordinate + rect.height); 
-        } else {  
-          adjustedWidth = rect.width * 0.12;  
-          adjustedHeight = rect.height * 0.1;  
-          adjustedWidtha = rect.width;  
-          adjustedHeighta = rect.height;  
-          newX = 5087 - (rect.xCoordinate + rect.width); 
-        }  
+      if (rect.width < rect.height) {
+        widtha = rect.height;
+        heighta = rect.width;
+      }else {
+        widtha = rect.width;
+        heighta = rect.height;
+      }
+      if (rect.angle === 0) {  
+    adjustedWidth = widtha * 0.12;
+    adjustedHeight = heighta * 0.1;
+    adjustedWidtha = widtha;  
+    adjustedHeighta = heighta;  
+    newX = 5087 - (rect.yCoordinate + widtha); 
+    } else {  
+    adjustedWidth = heighta * 0.12;  
+    adjustedHeight = widtha * 0.1;  
+    adjustedWidtha = heighta;  
+    adjustedHeighta = widtha;  
+    newX = 5087 - (rect.yCoordinate + heighta);  
+  }  
+  // if (rect.angle === 0) {  
+  //         adjustedWidth = heighta * 0.12;  
+  //         adjustedHeight = widtha * 0.1;  
+  //         adjustedWidtha = heighta;  
+  //         adjustedHeighta = widtha;  
+  //         newX = 5087 - (rect.xCoordinate + heighta); 
+  //       } else {  
+  //         adjustedWidth = widtha * 0.12;  
+  //         adjustedHeight = heighta * 0.1;  
+  //         adjustedWidtha = widtha;  
+  //         adjustedHeighta = heighta;  
+  //         newX = 5087 - (rect.xCoordinate + widtha); 
+  //       }  
         return {  
         ...rect, 
         xcoordinate: newX * 0.12,
-        ycoordinate: rect.yCoordinate * 0.1,
+        ycoordinate: rect.xCoordinate * 0.1,
         width: adjustedWidth,  
         height: adjustedHeight,  
         widtha: adjustedWidtha, 
@@ -59,25 +80,45 @@
   if(data.intoGlass2!=null){
     adjustedRects2.value =  data.intoGlass2[0].map(rect => {  
       console.log( adjustedRects2.value);
-      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
+      let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
       let newX = rect.yCoordinate; 
+      if (rect.width < rect.height) {
+        widtha = rect.height;
+        heighta = rect.width;
+      }else {
+        widtha = rect.width;
+        heighta = rect.height;
+      }
       if (rect.angle === 0) {  
-          adjustedWidth = rect.height * 0.12;  
-          adjustedHeight = rect.width * 0.1;  
-          adjustedWidtha = rect.height;  
-          adjustedHeighta = rect.width;  
-          newX = 5087 - (rect.xCoordinate + rect.height); 
-  } else {  
-          adjustedWidth = rect.width * 0.12;  
-          adjustedHeight = rect.height * 0.1;  
-          adjustedWidtha = rect.width;  
-          adjustedHeighta = rect.height;  
-          newX = 5087 - (rect.xCoordinate + rect.width); 
+    adjustedWidth = widtha * 0.12;
+    adjustedHeight = heighta * 0.1;
+    adjustedWidtha = widtha;  
+    adjustedHeighta = heighta;  
+    newX = 5087 - (rect.yCoordinate + widtha); 
+    } else {  
+    adjustedWidth = heighta * 0.12;  
+    adjustedHeight = widtha * 0.1;  
+    adjustedWidtha = heighta;  
+    adjustedHeighta = widtha;  
+    newX = 5087 - (rect.yCoordinate + heighta);  
   }  
+  //     if (rect.angle === 0) {  
+  //         adjustedWidth = heighta * 0.12;  
+  //         adjustedHeight = widtha * 0.1;  
+  //         adjustedWidtha = heighta;  
+  //         adjustedHeighta = widtha;  
+  //         newX = 5087 - (rect.xCoordinate + heighta); 
+  // } else {  
+  //         adjustedWidth = widtha * 0.12;  
+  //         adjustedHeight = heighta * 0.1;  
+  //         adjustedWidtha = widtha;  
+  //         adjustedHeighta = heighta;  
+  //         newX = 5087 - (rect.xCoordinate + widtha); 
+  // }  
         return {  
         ...rect, 
         xcoordinate: newX * 0.12,
-        ycoordinate: rect.yCoordinate * 0.1,
+        ycoordinate: rect.xCoordinate * 0.1,
         width: adjustedWidth,  
         height: adjustedHeight,  
         widtha: adjustedWidtha, 
@@ -90,20 +131,27 @@
   // 杩涚倝鍓�
   if(data.waitingGlass!=null){
     adjustedRectsa.value = data.waitingGlass[0].map(rect => {  
-  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta; 
+  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;; 
   let newX = rect.yCoordinate; 
+      if (rect.width < rect.height) {
+        widtha = rect.height;
+        heighta = rect.width;
+      }else {
+        widtha = rect.width;
+        heighta = rect.height;
+      }
   if (rect.angle === 0) {  
-    adjustedWidth = rect.width * 0.24;  
-    adjustedHeight = rect.height * 0.16;
-    adjustedWidtha = rect.width;  
-    adjustedHeighta = rect.height;  
-    newX = 5190 - (rect.yCoordinate + rect.width); 
+    adjustedWidth = widtha * 0.24;  
+    adjustedHeight = heighta * 0.16;
+    adjustedWidtha = widtha;  
+    adjustedHeighta = heighta;  
+    newX = 5190 - (rect.yCoordinate + widtha); 
     } else {  
-    adjustedWidth = rect.height * 0.24;  
-    adjustedHeight = rect.width * 0.16;  
-    adjustedWidtha = rect.height;  
-    adjustedHeighta = rect.width;  
-    newX = 5190 - (rect.yCoordinate + rect.height);  
+    adjustedWidth = heighta * 0.24;  
+    adjustedHeight = widtha * 0.16;  
+    adjustedWidtha = heighta;  
+    adjustedHeighta = widtha;  
+    newX = 5190 - (rect.yCoordinate + heighta);  
   }  
   return {  
     ...rect, 
@@ -121,20 +169,27 @@
     // 宸插嚭鐐�
   if(data.outGlass!=null){
     adjustedRectsb.value = data.outGlass[0].map(rect => {  
-  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
+  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;;
   let newX = rect.yCoordinate; 
+      if (rect.width < rect.height) {
+        widtha = rect.height;
+        heighta = rect.width;
+      }else {
+        widtha = rect.width;
+        heighta = rect.height;
+      }
   if (rect.angle === 0) {  
-    adjustedWidth = rect.width * 0.24;  
-    adjustedHeight = rect.height * 0.16;  
-    adjustedWidtha = rect.width;  
-    adjustedHeighta = rect.height;  
-    newX = 5190 - (rect.yCoordinate + rect.width); 
+    adjustedWidth = widtha * 0.24;  
+    adjustedHeight = heighta * 0.16;  
+    adjustedWidtha = widtha;  
+    adjustedHeighta = heighta;  
+    // newX = 5190 - (rect.yCoordinate + widtha); 
   } else {  
-    adjustedWidth = rect.height * 0.24;  
-    adjustedHeight = rect.width * 0.16;  
-    adjustedWidtha = rect.height;  
-    adjustedHeighta = rect.width;  
-    newX = 5190 - (rect.yCoordinate + rect.height);  
+    adjustedWidth = heighta * 0.24;  
+    adjustedHeight = widtha * 0.16;  
+    adjustedWidtha = heighta;  
+    adjustedHeighta = widtha;  
+    // newX = 5190 - (rect.yCoordinate + heighta);  
   }  
   return {  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
@@ -151,8 +206,13 @@
       }
 };
 onMounted(() => {
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 function updateRectColors() {  
   adjustedRectsa.value.forEach(rect => {  
     if (rect.glassId === glassId) {  
@@ -163,11 +223,11 @@
 function getRectColora(state) {  
   switch (state) {  
     case 0:  
-      return '#d1edc4';  
+      return '#7AC5CD';  
     case 1:  
-      return '#E6E6FA';
+      return '#95d475';
     case -1:  
-      return '#dedfe0';  
+      return '#CDAF95';  
     case 5:  
       return '#911005';  
   }
@@ -175,9 +235,9 @@
 function getRectColorb(state) {  
   switch (state) {  
     case 3:  
-      return '#f8e3c5';  
+      return '#eebe77';  
     case 4:  
-      return '#F0F8FF';
+      return '#CD6090';
     case 5:  
       return '#911005';  
   }  
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
index 742ba24..5164c6a 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseStorage.vue
@@ -5,7 +5,7 @@
 import { ElMessage, ElMessageBox } from 'element-plus'
 import request from "@/utils/request"
 
-import { ref, onMounted, onBeforeUnmount } from 'vue';  
+import { ref, onMounted, onBeforeUnmount,onUnmounted } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 const adjustedRects = ref([]);
@@ -29,27 +29,34 @@
     }
   }
 }
-
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`; 
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
   if(data.overGlass!=null){
     adjustedRects.value =  data.overGlass[0].map(rect => {  
-  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta;
+  let adjustedWidth, adjustedHeight, adjustedWidtha, adjustedHeighta,widtha,heighta;
       let newX = rect.yCoordinate; 
-      if (rect.angle === 0) {  
-    adjustedWidth = rect.width * 0.24;  
-    adjustedHeight = rect.height * 0.16;  
-    adjustedWidtha = rect.width;  
-    adjustedHeighta = rect.height;  
-    newX = 5190 - (rect.yCoordinate + rect.width);
+      if (rect.width < rect.height) {
+        widtha = rect.height;
+        heighta = rect.width;
+      }else {
+        widtha = rect.width;
+        heighta = rect.height;
+      }
+    if (rect.angle === 0) {  
+    adjustedWidth = widtha * 0.24;  
+    adjustedHeight = heighta * 0.16;  
+    adjustedWidtha = widtha;  
+    adjustedHeighta = heighta;  
+    // newX = 5190 - (rect.yCoordinate + rect.width); 
   } else {  
-    adjustedWidth = rect.height * 0.24;  
-    adjustedHeight = rect.width * 0.16;  
-    adjustedWidtha = rect.height;  
-    adjustedHeighta = rect.width;  
-    newX = 5190 - (rect.yCoordinate + rect.height);
+    adjustedWidth = heighta * 0.24;  
+    adjustedHeight = widtha * 0.16;  
+    adjustedWidtha = heighta;  
+    adjustedHeighta = widtha;  
+    // newX = 5190 - (rect.yCoordinate + rect.height);  
   }  
   return {  
     ...rect, 
@@ -71,11 +78,11 @@
   });  
 }  
 function getRectColora(state) {  
-  switch (state) {  
+  switch (state) { 
     case 3:  
-      return '#f8e3c5';  
+      return '#eebe77';  
     case 4:  
-      return '#F0F8FF';
+      return '#CD6090';
     case 5:  
       return '#911005';  
   }  
@@ -110,11 +117,13 @@
   }
 }
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/ReportWork/reportWork.vue b/UI-Project/src/views/ReportWork/reportWork.vue
index f28dac1..67b04ab 100644
--- a/UI-Project/src/views/ReportWork/reportWork.vue
+++ b/UI-Project/src/views/ReportWork/reportWork.vue
@@ -1,51 +1,137 @@
 <template>
   <div style="height: 600px;">
-    <span class="demonstration">鐢熶骇鏃堕棿</span>
-    <el-date-picker v-model="timeRange" type="daterange" format="YYYY/MM/DD" value-format="YYYY-MM-DD"
-      start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" :default-time="defaultTime" />
-    <el-select v-model="report.type" placeholder="娓呴�夋嫨绫诲瀷">
-      <el-option label="鍏ㄩ儴" value="0"></el-option>
-      <el-option label="瀹屽伐" value="1"></el-option>
-      <el-option label="鐮存崯" value="2"></el-option>
-      <el-option label="鎷胯蛋" value="3"></el-option>
+    <div style="display: flex; flex-direction: row; align-items: center; margin-top: 20px;">  
+    <span style="margin-left: 10px;" class="demonstration">{{ $t('reportmanage.productiontime') }}</span>
+    <el-date-picker style="margin-left: 10px;"  v-model="timeRange" type="daterange" format="YYYY/MM/DD" value-format="YYYY-MM-DD"
+      :start-placeholder="$t('reportmanage.starttime')" :end-placeholder="$t('reportmanage.endtime')" :default-time="defaultTime" />
+    <el-select v-model="report.type" :placeholder="$t('reportmanage.ctype')" style="margin-left: 10px;" >
+      <el-option :label="$t('reportmanage.all')" value="0"></el-option>
+      <el-option :label="$t('reportmanage.completed')" value="1"></el-option>
+      <el-option :label="$t('reportmanage.broke')" value="2"></el-option>
+      <el-option :label="$t('reportmanage.takeout')" value="3"></el-option>
     </el-select>
-    <el-select v-model="report.status" placeholder="娓呴�夋嫨鐘舵��">
-      <el-option label="鍏ㄩ儴" value="0"></el-option>
-      <el-option label="鏈姤宸�" value="1"></el-option>
-      <el-option label="寰呮姤宸�" value="2"></el-option>
-      <el-option label="宸叉姤宸�" value="3"></el-option>
+    <el-select v-model="report.status" :placeholder="$t('reportmanage.cstate')" style="margin-left: 10px;" >
+      <el-option :label="$t('reportmanage.all')" value="0"></el-option>
+      <el-option :label="$t('reportmanage.dreportwork')" value="1"></el-option>
+      <el-option :label="$t('reportmanage.pendingwork')" value="2"></el-option>
+      <el-option :label="$t('reportmanage.reportwork')" value="3"></el-option>
     </el-select>
-    <el-select v-model="report.workingProcedure" placeholder="娓呴�夋嫨宸ュ簭">
-      <el-option label="鍏ㄩ儴" value="0"></el-option>
-      <el-option label="鍒囧壊" value="1"></el-option>
-      <el-option label="纾ㄨ竟" value="2"></el-option>
-      <el-option label="閽㈠寲" value="3"></el-option>
+    <el-select v-model="report.workingProcedure" :placeholder="$t('reportmanage.cprocess')" style="margin-left: 10px;" >
+      <el-option :label="$t('reportmanage.all')" value="0"></el-option>
+      <el-option :label="$t('reportmanage.incise')" value="1"></el-option>
+      <el-option :label="$t('reportmanage.edging')" value="2"></el-option>
+      <el-option :label="$t('reportmanage.steel')" value="3"></el-option>
     </el-select>
-    <el-button type="primary" @click="selectReportData()">鏌ヨ</el-button>
-    <el-button type="success">鎶ュ伐</el-button>
-    <el-table height="100%" ref="table" :data="reportData"
+    <el-button type="primary" style="margin-left: 10px;" @click="selectReportData()">{{ $t('reportmanage.inquire') }}</el-button>
+    <el-button type="success" style="margin-left: 10px;" @click="handleConfirm">{{ $t('reportmanage.signingwork') }}</el-button>
+  </div>
+    <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
+      <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
+    <el-table height="540" ref="table" :data="reportData"
       :header-cell-style="{ background: '#F2F3F5 ', color: '#1D2129' }">
-      <el-table-column prop="teamsGroupsName" align="center" label="鎶ュ伐鐝粍" min-width="120" />
-      <el-table-column prop="deviceName" align="center" label="鎶ュ伐璁惧" min-width="120" />
-      <el-table-column prop="line" align="center" label="绾胯矾" min-width="120" />
-      <el-table-column prop="workingProcedure" align="center" label="宸ュ簭" min-width="120" />
-      <el-table-column prop="glassId" align="center" label="鐜荤拑id" min-width="120" />
-      <el-table-column prop="engineerId" align="center" label="宸ョ▼鍙�" min-width="120" />
-      <el-table-column prop="temperingLayoutId" align="center" label="閽㈠寲鐗堝浘id" min-width="120" />
-      <el-table-column prop="damageTime" align="center" label="鐢熶骇鏃堕棿" min-width="120" />
-      <el-table-column prop="type" align="center" label="绫诲瀷" min-width="120" />
-      <el-table-column prop="status" align="center" label="鐘舵��" min-width="120" />
-      <el-table-column prop="processId" align="center" label="娴佺▼鍗�" min-width="120" />
-      <el-table-column prop="orderNumber" align="center" label="搴忓彿" min-width="120" />
-      <el-table-column prop="technologyNumber" align="center" label="灞�" min-width="120" />
-      <el-table-column prop="breakageType" align="center" label="鐮存崯绫诲瀷" min-width="120" />
-      <el-table-column prop="breakageReason" align="center" label="鐮存崯鍘熷洜" min-width="120" />
-      <el-table-column prop="responsibleProcess" align="center" label="璐d换宸ュ簭" min-width="120" />
-      <el-table-column prop="responsiblePersonnel" align="center" label="璐d换浜哄憳" min-width="120" />
-      <el-table-column prop="responsibleTeam" align="center" label="璐d换鐝粍" min-width="120" />
-      <el-table-column prop="responsibleEquipment" align="center" label="璐d换璁惧" min-width="120" />
-      <el-table-column prop="remark" align="center" label="澶囨敞" min-width="120" />
+      <el-table-column prop="teamsGroupsName" align="center" :label="$t('reportmanage.reporteam')" min-width="120" />
+      <el-table-column prop="deviceName" align="center" :label="$t('reportmanage.reportingequipment')" min-width="120" />
+      <el-table-column prop="line" align="center" :label="$t('reportmanage.line')" min-width="120" />
+      <el-table-column prop="workingProcedure" align="center" :label="$t('reportmanage.process')" min-width="120" />
+      <el-table-column prop="glassId" align="center" :label="$t('reportmanage.glassID')" min-width="130" />
+      <el-table-column prop="engineerId" align="center" :label="$t('reportmanage.projectnumber')" min-width="120" />
+      <el-table-column prop="temperingLayoutId" align="center" :label="$t('reportmanage.layoutID')" min-width="120" />
+      <el-table-column prop="damageTime" align="center" :label="$t('reportmanage.productiontime')" min-width="230" />
+      <el-table-column prop="type" align="center" :label="$t('reportmanage.type')" min-width="120" />
+      <el-table-column prop="status" align="center" :label="$t('reportmanage.state')" min-width="120" />
+      <el-table-column prop="processId" align="center" :label="$t('reportmanage.processcards')" min-width="140" />
+      <el-table-column prop="orderNumber" align="center" :label="$t('reportmanage.number')" min-width="120" />
+      <el-table-column prop="technologyNumber" align="center" :label="$t('reportmanage.layer')" min-width="120" />
+      <el-table-column prop="breakageType" align="center" :label="$t('reportmanage.typebreakage')" min-width="180">
+        <template #default="{ row }">  
+        <el-select  
+                      v-model="selectValuesa[row.id]"
+                      filterable  
+                      :placeholder="$t('reportmanage.pcausebreakage')"
+                      clearable  
+                      @input="handleInputChangea($event, row.id)"
+                    >  
+                 <el-option  
+                    v-for="item in selectOptionsa"  
+                    :key="item.basicName"  
+                    :label="item.basicName"  
+                    :value="item.basicName"  
+                 />  
+               </el-select>  
+               </template>
+      </el-table-column>
+      <el-table-column prop="breakageReason" align="center" :label="$t('reportmanage.causebreakage')" min-width="180">
+        <template #default="{ row }">  
+        <el-select  
+                      v-model="selectValuesb[row.id]"
+                      filterable  
+                      :placeholder="$t('reportmanage.ptypebreakage')"
+                      clearable  
+                      @input="handleInputChangea($event, row.id)"
+                    >  
+                 <el-option  
+                    v-for="item in selectOptionsb"  
+                    :key="item.basicName"  
+                    :label="item.basicName"  
+                    :value="item.basicName"  
+                 />  
+               </el-select>  
+               </template>
+      </el-table-column>
+      <el-table-column align="center" :label="$t('reportmanage.responsibleprocess')" min-width="120">
+        <template #default="{ row }">  
+        <span>{{ '鍒囧壊纾ㄨ竟閽㈠寲' }}</span>  
+      </template>  
+      </el-table-column>
+      <el-table-column prop="responsiblePersonnel" align="center" :label="$t('reportmanage.responsiblepersonnel')" min-width="180">
+        <template #default="{ row }">
+          <el-input :placeholder="$t('reportmanage.presponsiblepersonnel')" v-model="inputValuesa[row.id]" autocomplete="off" />
+        </template>
+      </el-table-column>
+      <el-table-column prop="responsibleTeam" align="center" :label="$t('reportmanage.responsibleteam')" min-width="180">
+        <template #default="{ row }">  
+        <el-select  
+                      v-model="selectValuesc[row.id]"
+                      filterable  
+                      :placeholder="$t('reportmanage.presponsibleteam')"
+                      clearable  
+                      @input="handleInputChangea($event, row.id)"
+                    >  
+                 <el-option  
+                    v-for="item in selectOptionsc"  
+                    :key="item.basicName"  
+                    :label="item.basicName"  
+                    :value="item.basicName"  
+                 />  
+               </el-select>  
+               </template>
+      </el-table-column>
+      <el-table-column prop="responsibleEquipment" align="center" :label="$t('reportmanage.responsibleequipment')" min-width="180">
+        <template #default="{ row }">  
+        <el-select  
+                      v-model="selectValuesd[row.id]"
+                      filterable  
+                      :placeholder="$t('reportmanage.presponsibleequipment')"
+                      clearable  
+                      @input="handleInputChangea($event, row.id)"
+                    >  
+                 <el-option  
+                    v-for="item in selectOptionsd"  
+                    :key="item.basicName"  
+                    :label="item.basicName"  
+                    :value="item.basicName"  
+                 />  
+               </el-select>  
+               </template>
+      </el-table-column>
+      <el-table-column prop="remark" align="center" :label="$t('reportmanage.remark')" min-width="180">
+        <template #default="{ row }">
+          <el-input :placeholder="$t('reportmanage.premark')" v-model="inputValuesb[row.id]" autocomplete="off" />
+        </template>
+      </el-table-column>
     </el-table>
+    </div>
+    </el-card>
   </div>
 </template>
 <script setup>
@@ -63,7 +149,17 @@
   workingProcedure: '0',
 });
 const reportData = ref([])
-const timeRange = ref(["2022-01-01", "2022-01-01"])
+const timeRange = ref(["2022-01-01", "2025-01-01"])
+const selectOptionsa = ref([]);
+const selectOptionsb = ref([]);
+const selectOptionsc = ref([]);
+const selectOptionsd = ref([]);
+const selectValuesa = reactive({});
+const selectValuesb = reactive({});
+const selectValuesc = reactive({});
+const selectValuesd = reactive({});
+const inputValuesa = reactive({});
+const inputValuesb = reactive({});
 
 
 // 鏌ヨ鏁版嵁
@@ -90,7 +186,45 @@
     status:"2"
   })
 };
-
+// 鎶ュ伐
+const handleConfirm = async () => {
+  const response = await request.post("/cacheVerticalGlass/damage/submitDamage", reportData.value)
+  if (response.code === 200) {
+    ElMessage.success(response.message);
+  } else {
+    ElMessage.error(response.message);
+  }
+};
+const fetchTableData = async () => {  
+  try {  
+    const response = await request.post('/cacheVerticalGlass/basic_data_produce/selectBasicDataProduceGroup');  
+    if (response.code == 200) {  
+      selectOptionsa.value = response.data.breakagetype.filter(item => item !== null)
+.map(item => ({ basicName: item.basicName }));
+      selectOptionsb.value = response.data.breakagereason.filter(item => item !== null)
+.map(item => ({ basicName: item.basicName }));
+      selectOptionsc.value = response.data.teamsgroups.filter(item => item !== null)
+.map(item => ({ basicName: item.basicName }));
+      selectOptionsd.value = response.data.device.filter(item => item !== null)
+.map(item => ({ basicName: item.basicName }));
+    } else {  
+      ElMessage.warning(response.data);  
+    }  
+  } catch (error) {  
+    console.error('Error fetching options:', error);  
+  }  
+}; 
+const handleInputChangea = (value, rowId) => {  
+  // 鏇存柊瀵瑰簲琛岀殑 select 鍊�  
+  selectValuesa[rowId] = value;  
+  selectValuesb[rowId] = value;  
+  selectValuesc[rowId] = value;  
+  selectValuesd[rowId] = value;  
+  inputValuesa[rowId] = value;  
+  inputValuesb[rowId] = value;  
+};
+fetchTableData();  
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`;
 const handleMessage = (data) => {
   // adjustedRects.value = data.device[0].map(rect => ({  
@@ -100,7 +234,7 @@
   //       thisProcess: rect.thisProcess,
   //     })); 
 };
-let socket;
+// let socket;
 onMounted(() => {
   socket = new WebSocket(socketUrl);
   socket.onmessage = (event) => {
@@ -110,19 +244,18 @@
   };
   // };  
 });
-
-
-
-
 onUnmounted(() => {
   socket.close();
 });
-
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  fetchTableData();
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue
index 26b1c91..5824545 100644
--- a/UI-Project/src/views/Returns/returns.vue
+++ b/UI-Project/src/views/Returns/returns.vue
@@ -17,6 +17,8 @@
 const flakea = ref(false)
 const flakeb = ref(false)
 const flakec = ref(false)
+const dialoglea = ref(false)
+const tableDatax = ref([])
 const user = ref('');
 const projectNo = ref('');
 const workstationId = ref('');
@@ -89,13 +91,50 @@
     // ElMessage.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触锛岃閲嶈瘯');
   }
 };
-onMounted(() => {  
+const handlezhiban = () => {
+  dialoglea.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+  fetchFlowCardId(); 
+};
+// 鍊肩彮淇℃伅
+const fetchFlowCardId = async () => {
+  try  {
+    const response = await request.post('/loadGlass/work_assignment/selectWorkAssignment',{
+      line: 2001,
+      workingProcedure : '鍐峰姞宸�'
+    })
+    if (response.code == 200) {
+      ElMessage.success(response.message);
+      tableDatax.value = response.data;
+      console.log(tableDatax.value);
+      console
+    } else {
+      ElMessage.error(response.message);
+    }
+}
+catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
+const handleConfirmb = async () => {
+  const response = await request.post("/loadGlass/work_assignment/updateWorkAssignment", tableDatax.value)
+  if (response.code === 200) {
+    ElMessage.success(response.message);
+    dialoglea.value = false;
+  } else {
+    ElMessage.error(response.message);
+  }
+};
+onMounted(() => {
   list('');  
   fetchOptions('');
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-onMounted(() => {  
-}); 
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 const list = async () => {  
   try {  
     const response = await request.get('/loadGlass/LoadGlass/list');  
@@ -152,6 +191,7 @@
 const titleSelectJsona = ref({
   processTypea: [],
 })
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/loadGlass/api/talk/loadGlass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -637,7 +677,6 @@
   }  
 };
 </script>
- 
 <template>
   <div>
     <div id="dotClass">
@@ -655,6 +694,7 @@
     <el-button style="margin-top: 5px;margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">{{ $t('basicData.selectproject') }}</el-button>
     <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="primary" @click="handleBind">{{ $t('basicData.startloading') }}</el-button>
     <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="warning" @click="handleBinda">{{ $t('basicData.stop') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 20px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
     <!-- <el-button style="margin-top: 5px;margin-left: 20px;"  id="searchButton" type="danger" @click="handleBindb">鍋滄浠诲姟</el-button> -->
     
     <el-card style="flex: 1;margin-left: 10px;margin-top: 15px;" v-loading="loading">
@@ -716,6 +756,32 @@
       </div>
     </template>
   </el-dialog>
+  
+<el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')">
+    <el-table  ref="table" style="margin-top: 20px;height: 300px;"
+        :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/>
+          <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')" />
+          <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')">
+        <template #default="{ row }">  
+          <el-input v-model="row.teamsGroupsName" autocomplete="off" min-width="150"/>  
+        </template>  
+      </el-table-column>
+          <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')">
+            <template #default="{ row }">  
+          <el-input v-model="row.deviceName" autocomplete="off" min-width="150"/>  
+        </template>
+        </el-table-column>
+        </el-table>
+        <template #footer>
+      <div id="dialog-footer">
+        <el-button type="primary" @click="handleConfirm">
+          {{ $t('searchOrder.add') }}
+        </el-button>
+        <el-button @click="dialoglea = false">{{ $t('searchOrder.cancel') }}</el-button>
+      </div>
+    </template>
+</el-dialog>
   <el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('basicData.whetherpause')">
     <template #footer>
       <div id="dialog-footer">
diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index 5870cad..4ed89ea 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -7,11 +7,12 @@
 const router = useRouter()
 import request from "@/utils/request"
 import { WebSocketHost ,host} from '@/utils/constants'
-import { ref, onMounted , onBeforeUnmount, reactive, computed } from "vue";
+import { ref, onMounted , onBeforeUnmount, reactive, computed,onUnmounted } from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { tr } from "element-plus/es/locale";
 const dialogFormVisible = ref(false)
+const dialoglea = ref(false)
 const dialogFormVisiblea = ref(false)
 const dialogFormVisibleb = ref(false)
 const dialogFormVisiblec = ref(false)
@@ -22,7 +23,9 @@
 const tableDatad = ref([])
 const tableDataf = ref([])
 const tableDatae = ref([])
+const tableDatax = ref([])
 const carPosition = ref([])
+const ganghua = ref('')
 const adjustedRects = ref([]);
 const project = ref([]);
 const adjust = ref([]);
@@ -36,6 +39,8 @@
 const adjustedRectsg = ref([]);
 const adjustedRectsh = ref([]);
 const currentRow = reactive({}); // 褰撳墠琛岀殑鏁版嵁 
+const inputValuesa = reactive({});
+
 const add = ref(false)
 const flowCardId = ref('');
 const gap = ref('');
@@ -175,8 +180,13 @@
       // }
       return 9;
     });
- 
- 
+    setInterval(() => {  
+    localStorage.clear(); // 娓呴櫎鎵�鏈塴ocalStorage鏁版嵁  
+}, 60000);
+//  function cleanUp() {
+// }
+// // 鍋囪鎴戜滑姣�2鍒嗛挓鎵ц涓�娆℃竻鐞�  
+// setInterval(cleanUp, 1 * 60 * 1000);
  
 const getTableRow = (row,type) =>{
   switch (type) {
@@ -222,10 +232,7 @@
 // 鏄惁绂佺敤
 const toggleEnableState = async (row) => {
   const newState = row.enableState === 1 ? 0 : 1;  
-  console.log(row.slot);
-  console.log(row.enableState);
   var url="/cacheVerticalGlass/bigStorageCage/updateStorageCageDisabled?slot="+row.slot + "&enableState=" + newState;
-      console.log(url);
       const response = await request.get(url) 
   if (response.code === 200) {
       ElMessage.success(response.message);
@@ -502,9 +509,64 @@
     console.error('鍙戠敓閿欒:', error);  
   }  
 }; 
+const handlezhiban = () => {
+  dialoglea.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+  fetchFlowCardId(); 
+};
+const fetchFlowCardId = async () => {
+  try  {
+    const response = await request.post('/cacheVerticalGlass/work_assignment/selectWorkAssignment',{
+      line: 2001,
+      workingProcedure : '鍐峰姞宸�'
+    })
+    if (response.code == 200) {
+      ElMessage.success(response.message);
+      tableDatax.value = response.data;
+      console.log(tableDatax.value);
+      console
+    } else {
+      ElMessage.error(response.message);
+    }
+}
+catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
+const handleConfirm = async () => {
+  const response = await request.post("/cacheVerticalGlass/work_assignment/updateWorkAssignment", tableDatax.value)
+  if (response.code === 200) {
+    ElMessage.success(response.message);
+    dialoglea.value = false;
+  } else {
+    ElMessage.error(response.message);
+  }
+};
 function handleRowClick(row) {  
   selectedRow.value = row; // 鏇存柊閫変腑鐨勮鏁版嵁  
 }  
+  const handleChange = async () => {
+  try  {
+    const body = {  
+      flag: ganghua.value, // 浣跨敤 ganghua.value 鑾峰彇褰撳墠寮�鍏崇殑鐘舵��  
+    }; 
+    
+    var url="/cacheVerticalGlass/bigStorageCageDetails/temperingSwitch?flag="+ganghua.value;
+  const response = await request.post(url)
+    if (response.code == 200) {
+      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
+      ElMessage.success(response.message);
+      ganghua.value = response.data
+    }else {  
+      ElMessage.error(response.message);
+      }  
+}
+catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+}
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -512,11 +574,16 @@
   if(data.bigStorageCageDetailsOutTask!=null){
     tableDatac.value = data.bigStorageCageDetailsOutTask[0]
     adjusta.value = data.bigStorageCageDetailsOutTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined);
+  } else {
+    tableDatac.value = '',
+    adjusta.value = ''
   }
   if(data.bigStorageCageDetailsFeedTask!=null){
     tableDatad.value = data.bigStorageCageDetailsFeedTask[0]
     adjust.value = data.bigStorageCageDetailsFeedTask[0].filter(rect => rect.slot !== null && rect.slot !== undefined); 
-  }
+  }else{
+    tableDatad.value = ''
+      }
   
   // adjust.value = data.bigStorageCageDetailsFeedTask[0].map(rect => ({  
   //           ...rect, 
@@ -527,18 +594,29 @@
 // }); 
 if(data.bigStorageCageInfo!=null){
   tableData.value = data.bigStorageCageInfo[0]
-}
+}else{
+    tableData.value = ''
+   }
 if(data.temperingGlassInfoList!=null){
   tableDatab.value = data.temperingGlassInfoList[0]
-}
+}else{
+    tableDatab.value = ''
+      }
 if(data.bigStorageCageUsage!=null){
   tableDatae.value = data.bigStorageCageUsage[0]
-}
+}else{
+    tableDatae.value = ''
+      }
 if(data.carPostion!=null){
   carPosition.value = data.carPostion[0]
-}
-  
-  
+}else{
+  carPosition.value = ''
+  }
+if(data.temperingSwitch!=null){
+  ganghua.value = data.temperingSwitch[0]
+}else{
+  ganghua.value = ''
+  }
   if(data.bigStorageCageInfos!=null){
     window.localStorage.setItem('length', data.bigStorageCageInfos[0][1].length)
   let length = window.localStorage.getItem('length')
@@ -587,6 +665,8 @@
             height: 20/length,
             top: 29/length
           })); 
+  }else{
+    adjustedRects.value = ''
   }
  
   
@@ -594,9 +674,14 @@
 // 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
   // fetchFlowCardId();
-  initializeWebSocket(socketUrl, handleMessage);
- 
+  // initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 function getStatusType(enableState: number) {  
   switch (enableState) {  
     case 100:
@@ -648,16 +733,18 @@
   }  
 }
 onBeforeUnmount(() => {
-  console.log("鍏抽棴浜�")
+  // console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 </script>
  
 <template>
   <div style="height: 600px;">
-    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true">{{ $t('searchOrder.cageinformation') }}</el-button>
-    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('searchOrder.productionqueue') }}</el-button>
-    <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="info" @click="dialogFormVisiblec = true">{{ $t('searchOrder.temperingqueries') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="primary" @click="dialogFormVisiblea = true">{{ $t('searchOrder.cageinformation') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="success" @click="dialogFormVisibleb = true">{{ $t('searchOrder.productionqueue') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="warning" @click="dialogFormVisiblec = true">{{ $t('searchOrder.temperingqueries') }}</el-button>
+    <el-button style="margin-top: 5px;margin-left: 10px;" id="searchButton" type="info" @click="handlezhiban">{{ $t('searchOrder.dutyinformation') }}</el-button>
+    <el-switch style="margin-top: 5px;margin-left: 10px;" v-model="ganghua" class="mb-2" :inactive-text="$t('searchOrder.temperedswitch')" @change="handleChange" />
     <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
         <el-table height="100px" ref="table" 
@@ -1293,7 +1380,31 @@
         </el-table-column>
         </el-table>
 </el-dialog>
- 
+<el-dialog v-model="dialoglea" top="15vh" width="70%" :title="$t('searchOrder.dutyinformation')">
+    <el-table  ref="table" style="margin-top: 20px;height: 300px;"
+        :data="tableDatax" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
+          <el-table-column prop="line" fixed align="center" :label="$t('searchOrder.line')"/>
+          <el-table-column prop="workProcesses" fixed align="center" :label="$t('searchOrder.process')" />
+          <el-table-column prop="teamsGroupsName" align="center" :label="$t('searchOrder.team')">
+        <template #default="{ row }">  
+          <el-input v-model="row.teamsGroupsName" autocomplete="off" min-width="150"/>  
+        </template>  
+      </el-table-column>
+          <el-table-column prop="deviceName" align="center" :label="$t('searchOrder.basic')">
+            <template #default="{ row }">  
+          <el-input v-model="row.deviceName" autocomplete="off" min-width="150"/>  
+        </template>
+        </el-table-column>
+        </el-table>
+        <template #footer>
+      <div id="dialog-footer">
+        <el-button type="primary" @click="handleConfirm">
+          {{ $t('searchOrder.add') }}
+        </el-button>
+        <el-button @click="dialoglea = false">{{ $t('searchOrder.cancel') }}</el-button>
+      </div>
+    </template>
+</el-dialog>
 </template>
 <style scoped>
 #dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
diff --git a/UI-Project/src/views/StockBasicData/stockBasicData.vue b/UI-Project/src/views/StockBasicData/stockBasicData.vue
index 8b0da31..5135e96 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicData.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicData.vue
@@ -6,7 +6,7 @@
 const adda = ref(false)
 import { WebSocketHost ,host} from '@/utils/constants'
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
@@ -100,26 +100,26 @@
     console.error('鍙戠敓閿欒:', error);  
   }  
 };   
-
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
   tableData.value = data.EdgTasks1[0]
 };
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 </script>
-
 <template>
   <div>
     <el-card style="flex: 1;margin-left: 10px;margin-top: 20px;" v-loading="loading">
@@ -147,7 +147,6 @@
 </template>
 
 <style scoped>
-
 #dt { display:block; float:left;line-height: 20px;margin-left: 100px;}
 #dta { display:block; float:left;line-height: 20px;margin-left: 80%;}
 #dialog-footer{
diff --git a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
index 8775761..57e6567 100644
--- a/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
+++ b/UI-Project/src/views/StockBasicData/stockBasicDatatwo.vue
@@ -6,7 +6,7 @@
 const adda = ref(false)
 import { WebSocketHost ,host} from '@/utils/constants'
 import request from "@/utils/request"
-import { ref, onMounted , onBeforeUnmount} from "vue";
+import { ref, onMounted , onBeforeUnmount,onUnmounted} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 // import { ref } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
@@ -100,21 +100,21 @@
     console.error('鍙戠敓閿欒:', error);  
   }  
 };   
-
-
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheGlass/api/talk/cacheGlass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
   // 鏇存柊 tableData 鐨勬暟鎹�
   tableData.value = data.EdgTasks2[0]
 };
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
-
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindication.vue b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
index 36af612..06aa4d0 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindication.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindication.vue
@@ -32,14 +32,14 @@
 </template>
 
 <script  setup>
-import { ref, watchEffect ,onMounted} from 'vue';
+import { ref, watchEffect ,onMounted,onUnmounted} from 'vue';
 
 import { useI18n } from 'vue-i18n'
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
 import Swal from 'sweetalert2'
 import request from "@/utils/request";
-import { initializeWebSocket } from '@/utils/WebSocketService';
+import { initializeWebSocket,closeWebSocket } from '@/utils/WebSocketService';
  import { WebSocketHost } from '@/utils/constants';
 const racks = ref([
   { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456',downGlassInfoList:"" } },
@@ -116,6 +116,7 @@
     console.error(error);
   }
 };
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:8085/api/talk/unloadglass2`;
 //const socketUrl = `ws://${WebSocketHost}:88/api/unLoadGlass/api/talk/unloadglass2`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
@@ -146,13 +147,15 @@
   }
 });
 };
-
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
-
 onMounted(() => {
   fetchFlowCardId(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 const showCustomAlert = (downGlassInfoList) => {
   let tableContent = '<table border="1" style="border-collapse: collapse; width: 100%;">';
   tableContent += '<tr><th style="background-color: #f2f2f2;">鐜荤拑ID</th><th style="background-color: #f2f2f2;">鑶滅郴</th><th style="background-color: #f2f2f2;">鍘氬害</th><th style="background-color: #f2f2f2;">瀹藉害</th><th style="background-color: #f2f2f2;">楂樺害</th></tr>';
diff --git a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
index c42fbe5..9d4fb7a 100644
--- a/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
+++ b/UI-Project/src/views/UnLoadGlass/Landingindicationtwo.vue
@@ -32,14 +32,14 @@
 </template>
 
 <script setup>
-import { ref, watchEffect ,onMounted} from 'vue';
+import { ref, watchEffect ,onMounted,onUnmounted} from 'vue';
 
 import { useI18n } from 'vue-i18n'
   const { t } = useI18n()
   let language = ref(localStorage.getItem('lang') || 'zh')
 import Swal from 'sweetalert2'
 import request from "@/utils/request";
-import { initializeWebSocket } from '@/utils/WebSocketService';
+import { initializeWebSocket,closeWebSocket } from '@/utils/WebSocketService';
 import { WebSocketHost ,host} from '@/utils/constants'
 const racks = ref([
   { x: 50, y: 100, height: 100, width: 60, fillColor: '#6a6da9', item: { height: 90, width: 10, fillColor: 'yellow', content: 'NG123456' } },
@@ -115,6 +115,7 @@
   }
 };
 
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass3`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -143,13 +144,15 @@
   }
 });
 };
-
-// 鍒濆鍖� WebSocket锛屽苟浼犻�掓秷鎭鐞嗗嚱鏁�
-
 onMounted(() => {
   fetchFlowCardId(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 const showCustomAlert = (downGlassInfoList) => {
   let tableContent = '<table border="1" style="border-collapse: collapse; width: 100%;">';
   tableContent += '<tr><th style="background-color: #f2f2f2;">鐜荤拑ID</th><th style="background-color: #f2f2f2;">鑶滅郴</th><th style="background-color: #f2f2f2;">鍘氬害</th><th style="background-color: #f2f2f2;">瀹藉害</th><th style="background-color: #f2f2f2;">楂樺害</th></tr>';
diff --git a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
index 581478d..c0fbde6 100644
--- a/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
+++ b/UI-Project/src/views/UnLoadGlass/loadmachinerack.vue
@@ -1,6 +1,6 @@
 <script setup>
 import {Search} from "@element-plus/icons-vue";
-import {reactive, onMounted, onBeforeUnmount} from "vue";
+import {reactive, onMounted, onBeforeUnmount,onUnmounted} from "vue";
 import {useRouter} from "vue-router"
 const router = useRouter()
 import { useI18n } from 'vue-i18n'
@@ -139,6 +139,7 @@
     ElMessage.error('鑾峰彇琛ㄦ牸鏁版嵁澶辫触锛岃閲嶈瘯');
   }
 };
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/unLoadGlass/api/talk/unloadglass`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
 const handleMessage = (data) => {
@@ -150,8 +151,13 @@
 onMounted(() => {
   fetchFlowCardId();
   fetchTableData(); // 鑾峰彇鏁版嵁
-  initializeWebSocket(socketUrl, handleMessage);
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
diff --git a/UI-Project/src/views/largescreen/largescreen.vue b/UI-Project/src/views/largescreen/largescreen.vue
index 7c3603a..fb2ab1a 100644
--- a/UI-Project/src/views/largescreen/largescreen.vue
+++ b/UI-Project/src/views/largescreen/largescreen.vue
@@ -147,6 +147,7 @@
   return t('large.allstatus');
 }  
 }  
+let socket = null;
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/screen`;
 const handleMessage = (data) => {
 tableData.value = data.awaitingRepairs[0]
@@ -159,7 +160,7 @@
 //       thisProcess: rect.thisProcess,
 //     })); 
 };
-let socket;
+// let socket;
 // 璁剧疆鍥捐〃 DOM 寮曠敤  
 function setChartDom(index, el) {  
 if (!chartRefs.value[index]) {  
@@ -232,13 +233,14 @@
 onUnmounted(() => {  
 socket.close();  
 });  
-
 onMounted(() => {
-// fetchFlowCardId();
-// fetchTableData(); // 鑾峰彇鏁版嵁
-initializeWebSocket(socketUrl, handleMessage);
-
+  socket = initializeWebSocket(socketUrl, handleMessage);
 });
+  onUnmounted(() => {
+    if (socket) {
+    closeWebSocket(socket);
+    }
+    });
 onBeforeUnmount(() => {
 console.log("鍏抽棴浜�")
 closeWebSocket();
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java
index 5a0bd8a..f5bda8f 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
@@ -40,6 +40,7 @@
      * 鍑虹墖浠诲姟101
      * 浜哄伐涓嬬墖102
      * 鍑虹墖涓�103
+     * 璋冨害涓�104
      * 鎷胯蛋200
      * 鐮存崯201
      */
@@ -48,9 +49,10 @@
     public static final Integer GLASS_STATE_OUT = 101;
     public static final Integer GLASS_STATE_ARTIFICIAL = 102;
     public static final Integer GLASS_STATE_OUT_ING = 103;
+    public static final Integer GLASS_STATE_SCHEDULE_ING = 104;
     public static final Integer GLASS_STATE_TAKE = 200;
     public static final Integer GLASS_STATE_DAMAGE = 201;
-    public static final List<Integer> GLASS_STATE_IN_ALL = Arrays.asList(100, 102, 103);
+    public static final List<Integer> GLASS_STATE_IN_ALL = Arrays.asList(100, 102, 103, 104);
 
     /**
      * 鍗у紡鐞嗙墖绗艰鎯呰〃鐜荤拑鐘舵��
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
index 118d12e..9a607ac 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -1,14 +1,14 @@
 package com.mes.damage.service.impl;
 
-import cn.hutool.core.date.DateTime;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.mapper.DamageMapper;
 import com.mes.damage.service.DamageService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.mapper.GlassInfoMapper;
+import com.mes.pp.entity.ReportingWork;
 import com.mes.work_assignment.entity.WorkAssignment;
 import com.mes.work_assignment.mapper.WorkAssignmentMapper;
 import org.springframework.beans.BeanUtils;
@@ -18,6 +18,8 @@
 import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -58,21 +60,134 @@
      * 鎻愪氦鎶ュ伐
      */
     @Override
-    public void submitDamage(String startTime, String endTime, int type, int status, String workingProcedure){
+    public void submitDamage(String startTime, String endTime, int type, int status, String workingProcedures){
         LambdaUpdateWrapper<Damage> damageUpdateWrapper=new LambdaUpdateWrapper<>();
-        damageUpdateWrapper.between(Damage::getDamageTime,startTime,endTime);
+        LambdaQueryWrapper<Damage> damageLambdaQueryWrapper=new LambdaQueryWrapper<>()
+;       damageUpdateWrapper.between(Damage::getDamageTime,startTime,endTime);
+        damageLambdaQueryWrapper.between(Damage::getDamageTime,startTime,endTime);
         if (type!=0){
             damageUpdateWrapper.eq(Damage::getType,type);
+            damageLambdaQueryWrapper.eq(Damage::getType,type);
         }
         if (status!=0){
             damageUpdateWrapper.eq(Damage::getStatus,status);
+            damageLambdaQueryWrapper.eq(Damage::getStatus,status);
         }
-        if(!"0".equals(workingProcedure)){
-            damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedure);
+        if(!"0".equals(workingProcedures)){
+            damageUpdateWrapper.eq(Damage::getWorkingProcedure,workingProcedures);
+            damageLambdaQueryWrapper.eq(Damage::getWorkingProcedure,workingProcedures);
         }
-        Damage damage=new Damage();
-        damage.setStatus(2);
-        baseMapper.update(damage,damageUpdateWrapper);
+//        Damage damage=new Damage();
+//        damage.setStatus(2);
+//        baseMapper.update(damage,damageUpdateWrapper);
+        List<Damage> damageList = baseMapper.selectList(damageLambdaQueryWrapper);
+        Map<String, Map<String, Map<String, Map<String, List<Damage>>>>> resultMap = damageList.stream()
+                .collect(Collectors.groupingBy(
+                        Damage::getProcessId,
+                        Collectors.groupingBy(
+                                Damage::getWorkingProcedure,
+                                Collectors.groupingBy(
+                                        Damage::getDeviceName,
+                                        Collectors.groupingBy(Damage::getTeamsGroupsName)
+                                )
+                        )
+                ));
+        // 閬嶅巻 resultMap
+        for (Map.Entry<String, Map<String, Map<String, Map<String, List<Damage>>>>> processEntry : resultMap.entrySet()) {
+            String processId = processEntry.getKey();
+            System.out.println("ProcessId: " + processId);
+
+            // 鑾峰彇绗簩灞傜殑 Map锛屾寜 workingProcedure 鍒嗙粍鐨勭粨鏋�
+            Map<String, Map<String, Map<String, List<Damage>>>> workingProcedureMap = processEntry.getValue();
+
+            // 閬嶅巻 workingProcedureMap
+            for (Map.Entry<String, Map<String, Map<String, List<Damage>>>> workingProcedureEntry : workingProcedureMap.entrySet()) {
+                String workingProcedure = workingProcedureEntry.getKey();
+                System.out.println("  WorkingProcedure: " + workingProcedure);
+
+                // 鑾峰彇绗笁灞傜殑 Map锛屾寜 deviceName 鍒嗙粍鐨勭粨鏋�
+                Map<String, Map<String, List<Damage>>> deviceNameMap = workingProcedureEntry.getValue();
+
+                // 閬嶅巻 deviceNameMap
+                for (Map.Entry<String, Map<String, List<Damage>>> deviceNameEntry : deviceNameMap.entrySet()) {
+                    String deviceName = deviceNameEntry.getKey();
+                    System.out.println("    DeviceName: " + deviceName);
+
+                    // 鑾峰彇绗洓灞傜殑 Map锛屾寜 teamsGroupsName 鍒嗙粍鐨勭粨鏋�
+                    Map<String, List<Damage>> teamsGroupsNameMap = deviceNameEntry.getValue();
+
+                    // 閬嶅巻 teamsGroupsNameMap
+                    for (Map.Entry<String, List<Damage>> teamsGroupsNameEntry : teamsGroupsNameMap.entrySet()) {
+                        String teamsGroupsName = teamsGroupsNameEntry.getKey();
+                        System.out.println("      TeamsGroupsName: " + teamsGroupsName);
+
+                        // 鑾峰彇 Damage 鍒楄〃
+                        List<Damage> damageListForTeamsGroupsName = teamsGroupsNameEntry.getValue();
+
+                        // 浣跨敤 stream 瀵� damageListForTeamsGroupsName 杩涜鍐嶆鍒嗙粍
+                        Map<Integer, Map<Integer, Map<String, List<Damage>>>> groupedByOrderTechBreakage = damageListForTeamsGroupsName.stream()
+                                .collect(Collectors.groupingBy(
+                                        Damage::getOrderNumber,
+                                        Collectors.groupingBy(
+                                                Damage::getTechnologyNumber,
+                                                Collectors.groupingBy(
+                                                        Damage::getBreakageType,
+                                                        Collectors.toList()
+                                                )
+                                        )
+                                ));
+
+                        // 閬嶅巻 groupedByOrderTechBreakage
+                        for (Map.Entry<Integer, Map<Integer, Map<String, List<Damage>>>> orderEntry : groupedByOrderTechBreakage.entrySet()) {
+                            Integer orderNumber = orderEntry.getKey();
+                            System.out.println("        OrderNumber: " + orderNumber);
+
+                            // 鑾峰彇绗簩灞傜殑 Map锛屾寜 technologyNumber 鍒嗙粍鐨勭粨鏋�
+                            Map<Integer, Map<String, List<Damage>>> technologyNumberMap = orderEntry.getValue();
+
+                            // 閬嶅巻 technologyNumberMap
+                            for (Map.Entry<Integer, Map<String, List<Damage>>> technologyEntry : technologyNumberMap.entrySet()) {
+                                Integer technologyNumber = technologyEntry.getKey();
+                                System.out.println("          TechnologyNumber: " + technologyNumber);
+
+                                // 鑾峰彇绗笁灞傜殑 Map锛屾寜 breakageType 鍒嗙粍鐨勭粨鏋�
+                                Map<String, List<Damage>> breakageTypeMap = technologyEntry.getValue();
+
+                                // 閬嶅巻 breakageTypeMap
+                                for (Map.Entry<String, List<Damage>> breakageTypeEntry : breakageTypeMap.entrySet()) {
+                                    String breakageType = breakageTypeEntry.getKey();
+                                    System.out.println("            BreakageType: " + breakageType);
+
+                                    ReportingWork reportingWork=new ReportingWork();
+                                    reportingWork.setProcessId(processId);
+                                    reportingWork.setThisProcess(workingProcedure);
+                                    reportingWork.setDeviceName(deviceName);
+                                    reportingWork.setTeamsGroupsName(teamsGroupsName);
+                                    // 鑾峰彇 Damage 鍒楄〃
+                                    List<Damage> damageListForBreakageType = breakageTypeEntry.getValue();
+                                    int completedQuantity=0;
+                                    int breakageQuantity=0;
+                                    // 閬嶅巻 Damage 鍒楄〃
+                                    for (Damage damage : damageListForBreakageType) {
+                                        // 鎵撳嵃鎴栧鐞嗘瘡涓� Damage 瀵硅薄
+                                        System.out.println("              Damage: " + damage.toString());
+                                        if(damage.getType()==1){
+                                            completedQuantity+=1;
+                                        }else if(damage.getType()==2){
+                                            breakageQuantity+=1;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+
+
+
     }
 
     /**
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/BasicDataProduceController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/BasicDataProduceController.java
new file mode 100644
index 0000000..e275d47
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/BasicDataProduceController.java
@@ -0,0 +1,39 @@
+package com.mes.pp.controller;
+
+
+import com.mes.pp.service.BasicDataProduceService;
+import com.mes.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+@Api(description = "鐢熶骇鍩虹鏁版嵁")
+@RestController
+@RequestMapping("/basic_data_produce")
+public class BasicDataProduceController {
+
+    @Autowired
+    //鑾峰彇寰呴�夋嫨鐨勫伐绋嬪彿
+    private BasicDataProduceService basicDataProduceService;
+
+    @ApiOperation("鏌ヨ鍩虹鏁版嵁")
+    @PostMapping("/selectBasicDataProduceGroup") //鏄剧ず宸ョ▼閫夋嫨淇℃伅
+    @ResponseBody
+    public Result selectBasicDataProduceGroup() {
+        return Result.build(200, "鏌ヨ鎴愬姛", basicDataProduceService.selectBasicDataProduceGroup());
+    }
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/DamageDetailsController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/DamageDetailsController.java
new file mode 100644
index 0000000..37515ca
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/DamageDetailsController.java
@@ -0,0 +1,31 @@
+package com.mes.pp.controller;
+
+
+import com.mes.pp.entity.BasicDataProduce;
+import com.mes.pp.entity.OptimizeProject;
+import com.mes.pp.entity.request.OptimizeRequest;
+import com.mes.pp.service.BasicDataProduceService;
+import com.mes.pp.service.OptimizeProjectService;
+import com.mes.utils.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-26
+ */
+@RestController
+@RequestMapping("/damage_details")
+public class DamageDetailsController {
+
+
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java
new file mode 100644
index 0000000..b22f975
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/ReportingWorkDetailController.java
@@ -0,0 +1,21 @@
+package com.mes.pp.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+@RestController
+@RequestMapping("/reporting-work-detail")
+public class ReportingWorkDetailController {
+
+}
+
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/BasicDataProduce.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/BasicDataProduce.java
new file mode 100644
index 0000000..7ad36be
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/BasicDataProduce.java
@@ -0,0 +1,55 @@
+package com.mes.pp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BasicDataProduce implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鍩虹鏁版嵁绫诲瀷
+     */
+    private String basicType;
+
+    /**
+     * 鍩虹鏁版嵁鍚嶇О
+     */
+    private String basicName;
+
+    /**
+     * 鍩虹鏁版嵁绫诲埆
+     */
+    private String basicCategory;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private Timestamp createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    private Timestamp updateTime;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/DamageDetails.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/DamageDetails.java
new file mode 100644
index 0000000..6daf826
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/DamageDetails.java
@@ -0,0 +1,115 @@
+package com.mes.pp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class DamageDetails implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <娆$牬鏄庣粏琛�>
+     */
+      @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鎶ュ伐缂栧彿
+     */
+    private String reportingWorkId;
+
+    /**
+     * 娴佺▼鍗″彿
+     */
+    private String processId;
+
+    /**
+     * 搴忓彿
+     */
+    private Integer orderNumber;
+
+    /**
+     * 宸ヨ壓纭搴忓彿锛堝眰鍙凤級
+     */
+    private Integer technologyNumber;
+
+    /**
+     * 娆$牬鏁伴噺
+     */
+    private Integer breakageQuantity;
+
+    /**
+     * 娆$牬绫诲瀷
+     */
+    private String breakageType;
+
+    /**
+     * 娆$牬鍘熷洜
+     */
+    private String breakageReason;
+
+    /**
+     * 鍙埄鐢紙榛樿0锛岄渶瑕佽繑宸�1锛�
+     */
+    private Integer available;
+
+    /**
+     * 杩斿伐/琛ョ墖鏁伴噺
+     */
+    private Integer quantity;
+
+    /**
+     * 杩斿伐宸ュ簭
+     */
+    private String returnProcess;
+
+    /**
+     * 璐d换宸ュ簭
+     */
+    private String responsibleProcess;
+
+    /**
+     * 璐d换浜哄憳
+     */
+    private String responsiblePersonnel;
+
+    /**
+     * 璐d换鐝粍
+     */
+    private String responsibleTeam;
+
+    /**
+     * 璐d换璁惧
+     */
+    private String responsibleEquipment;
+
+    /**
+     * 璐ㄦ鍛�
+     */
+    private String qualityInspector;
+
+    /**
+     * 琛ョ墖鐘舵�侊紙榛樿0锛屽凡琛ョ墖1锛�
+     */
+    private Integer patchStatus;
+
+    /**
+     * 璐ㄦ鐘舵�侊紙榛樿0,1寰呰川妫�1锛屽凡璐ㄦ2锛�
+     */
+    private Integer qualityInsStatus;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWorkDetail.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWorkDetail.java
new file mode 100644
index 0000000..6dc14df
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/entity/ReportingWorkDetail.java
@@ -0,0 +1,151 @@
+package com.mes.pp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class ReportingWorkDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <鎶ュ伐鏄庣粏>
+     */
+      @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鎶ュ伐缂栧彿
+     */
+    private String reportingWorkId;
+
+    /**
+     * 搴忓彿
+     */
+    private Integer orderNumber;
+
+    /**
+     * 宸ヨ壓纭搴忓彿
+     */
+    private Integer technologyNumber;
+
+    /**
+     * 瀹屽伐鏁伴噺
+     */
+    private Integer completedQuantity;
+
+    /**
+     * 娆$牬鏁伴噺
+     */
+    private Integer breakageQuantity;
+
+    /**
+     * 娆$牬绫诲瀷
+     */
+    private String breakageType;
+
+    /**
+     * 娆$牬鍘熷洜
+     */
+    private String breakageReason;
+
+    /**
+     * 鍙埄鐢紙1鍙埄鐢�0榛樿锛�
+     */
+    private Integer available;
+
+    /**
+     * 閫�鍥炲伐搴�
+     */
+    private String returnProcess;
+
+    /**
+     * 璐d换宸ュ簭
+     */
+    private String responsibleProcess;
+
+    /**
+     * 璐d换浜哄憳
+     */
+    private String responsiblePersonnel;
+
+    /**
+     * 璐d换鐝粍
+     */
+    private String responsibleTeam;
+
+    /**
+     * 璐d换璁惧
+     */
+    private String responsibleEquipment;
+
+    /**
+     * 璐ㄦ鍛�
+     */
+    private String qualityInspector;
+
+    /**
+     * 琛ョ墖鐘舵��
+     */
+    private Integer patchStatus;
+
+    /**
+     * 鍦ㄥ埗鍝佸悕绉�
+     */
+    private String workProgress;
+
+    /**
+     * 璐ㄦ鐘舵��
+     */
+    private Integer qualityInsStatus;
+
+    /**
+     * 鎶ュ伐绫诲瀷
+     */
+    private Integer type;
+
+    /**
+     * 寰呰繑宸ユ暟閲�
+     */
+    private Integer waitReworkQuantity;
+
+    /**
+     * 杩斿伐鐝粍
+     */
+    private String reworkTeam;
+
+    /**
+     * 杩斿伐瀹℃牳浜�
+     */
+    private String reviewer;
+
+    /**
+     * 杩斿伐瀹℃牳鐘舵��
+     */
+    private String reviewStatus;
+
+    /**
+     * 杩斿伐鏃堕棿
+     */
+    private LocalDateTime reworkTime;
+
+    /**
+     * 杩斿伐淇敼鏃堕棿
+     */
+    private LocalDateTime reworkUpdateTime;
+
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/BasicDataProduceMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/BasicDataProduceMapper.java
new file mode 100644
index 0000000..dc15b3d
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/BasicDataProduceMapper.java
@@ -0,0 +1,18 @@
+package com.mes.pp.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.pp.entity.BasicDataProduce;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+@DS("pp")
+public interface BasicDataProduceMapper extends BaseMapper<BasicDataProduce> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkDetailMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkDetailMapper.java
new file mode 100644
index 0000000..1185b00
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/ReportingWorkDetailMapper.java
@@ -0,0 +1,16 @@
+package com.mes.pp.mapper;
+
+import com.mes.pp.entity.ReportingWorkDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+public interface ReportingWorkDetailMapper extends BaseMapper<ReportingWorkDetail> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/BasicDataProduceService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/BasicDataProduceService.java
new file mode 100644
index 0000000..939dc76
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/BasicDataProduceService.java
@@ -0,0 +1,20 @@
+package com.mes.pp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.pp.entity.BasicDataProduce;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+public interface BasicDataProduceService extends IService<BasicDataProduce> {
+
+    Map<String, List<BasicDataProduce>> selectBasicDataProduceGroup();
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/DamageDetailsService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/DamageDetailsService.java
new file mode 100644
index 0000000..6b0eb6f
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/DamageDetailsService.java
@@ -0,0 +1,16 @@
+package com.mes.pp.service;
+
+import com.mes.pp.entity.DamageDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-26
+ */
+public interface DamageDetailsService extends IService<DamageDetails> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkDetailService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkDetailService.java
new file mode 100644
index 0000000..5574527
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/ReportingWorkDetailService.java
@@ -0,0 +1,16 @@
+package com.mes.pp.service;
+
+import com.mes.pp.entity.ReportingWorkDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+public interface ReportingWorkDetailService extends IService<ReportingWorkDetail> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/BasicDataProduceServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/BasicDataProduceServiceImpl.java
new file mode 100644
index 0000000..143cffb
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/BasicDataProduceServiceImpl.java
@@ -0,0 +1,30 @@
+package com.mes.pp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.pp.entity.BasicDataProduce;
+import com.mes.pp.mapper.BasicDataProduceMapper;
+import com.mes.pp.service.BasicDataProduceService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+@Service
+public class BasicDataProduceServiceImpl extends ServiceImpl<BasicDataProduceMapper, BasicDataProduce> implements BasicDataProduceService {
+
+    @Override
+    public Map<String, List<BasicDataProduce>> selectBasicDataProduceGroup(){
+        List<BasicDataProduce> basicDataProduceList=baseMapper.selectList(null);
+        Map<String, List<BasicDataProduce>> listMap = basicDataProduceList.stream().collect(Collectors.groupingBy(item -> item.getBasicType()));
+        return listMap;
+    }
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java
new file mode 100644
index 0000000..a3b3e5a
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/DamageDetailsService.java
@@ -0,0 +1,16 @@
+package com.mes.pp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.pp.entity.DamageDetails;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-26
+ */
+public interface DamageDetailsService extends IService<DamageDetails> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java
new file mode 100644
index 0000000..0b53228
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/ReportingWorkDetailService.java
@@ -0,0 +1,16 @@
+package com.mes.pp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.pp.entity.ReportingWorkDetail;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-07-25
+ */
+public interface ReportingWorkDetailService extends IService<ReportingWorkDetail> {
+
+}
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
index c85d6d5..92cbb79 100644
--- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/TemperingGlassInfoMapper.xml
@@ -4,12 +4,12 @@
     <insert id="saveBatch">
         INSERT INTO tempering_glass_info (glass_id, flow_card_id, glass_type, width, height, thickness, filmsid,
         ishorizontal, tempering_layout_id,
-        tempering_feed_sequence, x_coordinate, y_coordinate, angle, state, slot ) VALUES
+        tempering_feed_sequence, x_coordinate, y_coordinate, angle, state, slot, engineer_id) VALUES
         <foreach collection="list" item="item" separator=",">
             (#{item.glassId}, #{item.flowCardId}, #{item.glassType}, #{item.width}, #{item.height}, #{item.thickness},
             #{item.filmsid},#{item.ishorizontal},
             #{item.temperingLayoutId}, #{item.temperingFeedSequence}, #{item.xCoordinate}, #{item.yCoordinate},
-            #{item.angle}, #{item.state}, #{item.slot})
+            #{item.angle}, #{item.state}, #{item.slot}, #{item.engineerId})
         </foreach>
     </insert>
 
diff --git a/hangzhoumesParent/gateway/src/main/resources/application.yml b/hangzhoumesParent/gateway/src/main/resources/application.yml
index a369150..93b9826 100644
--- a/hangzhoumesParent/gateway/src/main/resources/application.yml
+++ b/hangzhoumesParent/gateway/src/main/resources/application.yml
@@ -6,7 +6,7 @@
   cloud:
     nacos:
       discovery:
-        server-addr: 127.0.0.1:8848
+        server-addr: 10.153.19.150:8848
     gateway:
       discovery:
         locator:
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 39ed6ed..ddbc9a9 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
@@ -75,11 +75,17 @@
     @Value("${mes.max.secondLength}")
     private String secondLength;
 
-    @Value("${mes.min.firstLength}")
-    private String minFirstLength;
+    @Value("${mes.min.one.firstLength}")
+    private String minOneFirstLength;
 
-    @Value("${mes.min.secondLength}")
-    private String minSecondLength;
+    @Value("${mes.min.one.secondLength}")
+    private String minOneSecondLength;
+
+    @Value("${mes.min.two.firstLength}")
+    private String minTwoFirstLength;
+
+    @Value("${mes.min.two.secondLength}")
+    private String minTwoSecondLength;
 
     @Scheduled(fixedDelay = 1000)
     public void plcHomeEdgTask() {
@@ -116,7 +122,7 @@
             inTo(glassIdeValue, confirmationWrodAddress, currentSlot);
         } else if ("2".equals(taskRequestTypeValue)) {
             //09绌洪棽 锛�1      10绌洪棽 锛�2        閮界┖闂诧細3    鍏朵粬0
-            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛岃繘鐗囦换鍔�");
+            log.info("2銆佸嚭鐗囪姹傦紝涓旂‘璁ゅ瓧涓�0锛屾墽琛屽嚭鐗囦换鍔�");
             outTo(Integer.parseInt(out08Glassstate),
                     Integer.parseInt(out10Glassstate), confirmationWrodAddress, "", 0);
         } else if ("3".equals(taskRequestTypeValue)) {
@@ -244,7 +250,7 @@
 //        2銆佸鏋滄病鏈夊巻鍙插嚭鐗囦换鍔�
 //        2.1銆佸嚭褰撳墠鐗堝浘id鏈�灏忕増搴忔渶灏忕殑鐜荤拑锛堥棶棰橈細涓ゆ潯绾块兘娌℃湁鍘嗗彶浠诲姟锛屽嚭鐗囨椂涓ゆ潯绾跨殑鐜荤拑灏哄鐩稿悓锛屾槸鍚︽壘灏哄涓嶅悓鐨勶級
         if ((out08Glassstate == 2 && out10Glassstate == 2) || (out08Glassstate == 0 && out10Glassstate == 0)) {
-            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖");
+            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", out08Glassstate, out10Glassstate);
             return Boolean.FALSE;
         }
         log.info("0銆佸嚭鐗囦换鍔″嚭鐨勭姸鎬�:A09:銆恵}銆�;A10:銆恵}銆�)", out08Glassstate, out10Glassstate);
@@ -280,26 +286,27 @@
                     if (endcell == Const.A10_OUT_TARGET_POSITION) {
                         wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                 "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                                "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                                + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
                     } else {
                         wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                 "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                                "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
                     }
                     wrapper.last("order by count(t.glass_id) desc  limit 2");
                     List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
                     if (CollectionUtil.isEmpty(list)) {
                         MPJQueryWrapper<GlassInfo> queryWrapper = new MPJQueryWrapper<GlassInfo>()
                                 .selectAll(GlassInfo.class).eq("t.glass_id", glassId);
-//                                .inSql("t.engineer_id", "select engineer_id from engineering where state = 1");
                         if (endcell == Const.A10_OUT_TARGET_POSITION) {
-                            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+                            queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                     "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                    "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
                         } else {
-                            wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
+                            queryWrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                                     "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
                         }
                         GlassInfo one = glassInfoService.getOne(queryWrapper);
                         if (one != null) {
@@ -521,11 +528,12 @@
         if (endcell == Const.A10_OUT_TARGET_POSITION) {
             wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                     "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                    "on t.glass_id = t1.glass_id and (t1.first_length <=" + firstLength + " and t1.second_length<=" + secondLength + ") ");
+                    "on t.glass_id = t1.glass_id and (t1.first_length between " + minTwoFirstLength + " and " + firstLength
+                    + " and t1.second_length between " + minTwoSecondLength + " and " + secondLength + ") ");
         } else {
             wrapper.innerJoin("(select glass_id, case when height <= width then width else height end as first_length, " +
                     "case when width < height then width else height end as second_length from edg_storage_cage_details) t1 " +
-                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minFirstLength + " and t1.second_length>=" + minSecondLength + ") ");
+                    "on t.glass_id = t1.glass_id and (t1.first_length >=" + minOneFirstLength + " and t1.second_length>=" + minOneSecondLength + ") ");
         }
         wrapper.last("order by count(t.glass_id) desc  limit 2");
         List<EdgStorageCageDetails> list = edgStorageCageDetailsService.list(wrapper);
@@ -563,7 +571,7 @@
                 return queryMinGlass(firstSize.getWidth(), firstSize.getHeight(), glassId);
             }
             EdgStorageCageDetails outGlassInfo = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
-                    .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()));
+                    .eq(EdgStorageCageDetails::getGlassId, taskCache.getGlassId()).last("limit 1"));
             log.info("{}绾挎湁鍑虹墖浠诲姟淇℃伅,浠诲姟淇℃伅涓簕}锛岀幓鐠冧俊鎭负{}", endcell, taskCache, outGlassInfo);
             if (outGlassInfo.getWidth() == firstWidth && outGlassInfo.getHeight() == firstHeight) {
                 log.info("鏁伴噺鏈�澶氱殑瀹絳}楂榹}鍜寋}绾夸换鍔$殑瀹絳}楂榹}鐩稿悓锛屽嚭鏁伴噺鎺掔浜岀殑鐜荤拑锛屽{}楂榹}",
@@ -658,6 +666,8 @@
         edgGlassTaskInfo.setStatus(Const.EDG_GLASS_BEFORE);
         edgGlassTaskInfo.setLine(endcell);
         edgGlassTaskInfo.setTime(new Date());
+        //鍏堝皢鍘嗗彶瀵瑰垪琛ㄤ腑鏈幓鐠冪殑鏁版嵁鍒犻櫎锛岄噸鏂版柊澧炰竴浠芥渶鏂扮殑鏁版嵁
+        edgGlassTaskInfoService.remove(new LambdaQueryWrapper<EdgGlassTaskInfo>().eq(EdgGlassTaskInfo::getGlassId, glassInfo.getGlassId()));
         return edgGlassTaskInfoService.save(edgGlassTaskInfo);
     }
 
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
index 2dd10f2..0e330b0 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/taskcache/service/impl/TaskCacheServiceImpl.java
@@ -78,7 +78,7 @@
                             .eq(EdgStorageCageDetails::getGlassId, GlassInfo::getGlassId)
                             .eq(EdgStorageCageDetails::getEngineerId, GlassInfo::getEngineerId))
                     .eq(GlassInfo::getGlassId,taskCache1.getGlassId())
-                    .eq(EdgStorageCageDetails::getState,Const.GLASS_STATE_IN)
+                    .eq(EdgStorageCageDetails::getState,Const.GLASS_STATE_OUT)
             );
             if(glassInfos.size()==1){
                 GlassInfo glassInfo=glassInfos.get(0);
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 3dd6f8f..223343a 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,13 +1,19 @@
 package com.mes.bigstorage.controller;
+
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
+import com.mes.common.utils.RedisUtil;
 import com.mes.utils.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 
@@ -28,6 +34,8 @@
     private BigStorageCageDetailsService bigStorageCageDetailsService;
     @Autowired
     private BigStorageCageService bigStorageCageService;
+    @Resource
+    private RedisUtil redisUtil;
 
 
     @ApiOperation("鐜荤拑璇︽儏鏌ヨ")
@@ -78,11 +86,11 @@
 
     @ApiOperation("鎸囧畾閽㈠寲")
     @PostMapping("/TemperingGlass")
-    public Result TemperingGlass(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
-        boolean result=bigStorageCageDetailsService.TemperingGlass(bigStorageCageDetails.getTemperingLayoutId().toString(),bigStorageCageDetails.getEngineerId());
-        if(result==true){
-            return Result.build(200,"鎸囧畾閽㈠寲鎴愬姛",1);
-        }else {
+    public Result temperingGlass(@RequestBody BigStorageCageDetails bigStorageCageDetails) {
+        boolean result = bigStorageCageDetailsService.temperingGlass(bigStorageCageDetails.getTemperingLayoutId().toString(), bigStorageCageDetails.getEngineerId());
+        if (result == true) {
+            return Result.build(200, "鎸囧畾閽㈠寲鎴愬姛", 1);
+        } else {
             return Result.build(200, "宸插瓨鍦ㄩ挗鍖栦换鍔★紝璇风瓑寰呴挗鍖栧畬鎴愬啀鎸囧畾閽㈠寲", 1);
         }
     }
@@ -90,7 +98,14 @@
     @ApiOperation("閽㈠寲鏌ヨ")
     @PostMapping("/selectTemperingGlass")
     public Result selectTemperingGlass() {
-        return Result.build(200,"鏌ヨ鎴愬姛",bigStorageCageDetailsService.selectTemperingGlass());
+        return Result.build(200, "鏌ヨ鎴愬姛", bigStorageCageDetailsService.selectTemperingGlass());
+    }
+
+    @ApiOperation("鏄惁閽㈠寲寮�鍏�")
+    @PostMapping("/temperingSwitch")
+    public Result temperingSwitch(Boolean flag) {
+        bigStorageCageDetailsService.temperingSwitch(flag);
+        return Result.build(200, "淇敼鎴愬姛", redisUtil.getCacheObject("temperingSwitch"));
     }
 }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
index 495b06a..f6353ea 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java
@@ -4,6 +4,7 @@
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
 import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
+import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -31,8 +32,16 @@
      *
      * @return
      */
-    TemperingLayoutDTO queryTemperingOccupySlot(@Param(value = "count") int count);
+    List<TemperingLayoutDTO> queryTemperingOccupySlot(@Param(value = "count") int count);
 
 
     List<SlotSequenceDTO> queryGlassMaxAndMin(@Param(value = "engineerId") String engineerId, @Param(value = "temperingLayoutId") Integer temperingLayoutId);
+
+    /**
+     * 鎸夌収鐜荤拑id鍜岀洰鏍囨牸瀛愭洿鏂扮鍐呯幓鐠冧俊鎭�
+     *
+     * @param glassList
+     * @param state
+     */
+    void updateBySlot(@Param(value = "list") List<UpdateBigStorageCageDTO> glassList, @Param(value = "state") int state);
 }
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 cab1f09..83a601d 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
@@ -5,6 +5,7 @@
 import com.mes.bigstorage.entity.BigStorageDTO;
 import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
 import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
+import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
 import com.mes.glassinfo.entity.GlassInfo;
 
 import java.util.List;
@@ -12,7 +13,7 @@
 
 /**
  * <p>
- *  鏈嶅姟绫�
+ * 鏈嶅姟绫�
  * </p>
  *
  * @author zhoush
@@ -20,13 +21,15 @@
  */
 public interface BigStorageCageDetailsService extends IService<BigStorageCageDetails> {
 
-    List<BigStorageCageDetails> selectTask(int taskType);
+    List<BigStorageCageDetails> selectFeedTask();
+
+    List<BigStorageCageDetails> selectOutTask();
 
     double selectGetBoard(String plcFeedReqLine);
 
     void deleteBigStorageCageDetails(BigStorageCageDetails bigStorageCageDetails);
 
-    void damageBigStorageCageDetails(String glassId,int status);
+    void damageBigStorageCageDetails(String glassId, int status);
 
     List<BigStorageCageDetails> selectBigStorageCageDetails(String glassId);
 
@@ -55,7 +58,7 @@
      *
      * @return
      */
-    TemperingLayoutDTO queryTemperingOccupySlot();
+    List<TemperingLayoutDTO> queryTemperingOccupySlot();
 
     /**
      * 鑾峰彇鐗堝浘姣忎釜鏍煎瓙鐨勬渶澶ф渶灏忓簭鍙�
@@ -66,7 +69,11 @@
      */
     List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId);
 
-    boolean TemperingGlass(String temperingLayoutId, String engineerId);
+    boolean temperingGlass(String temperingLayoutId, String engineerId);
 
     List<Map<String, Object>> selectTemperingGlass();
+
+    void updateBySlot(List<UpdateBigStorageCageDTO> glassList, int state);
+
+    String temperingSwitch(Boolean flag);
 }
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 8de5698..588bc3e 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
@@ -3,7 +3,9 @@
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.toolkit.JoinWrappers;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
@@ -15,15 +17,19 @@
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
+import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
 import com.mes.bigstoragetask.mapper.BigStorageCageFeedTaskMapper;
 import com.mes.bigstoragetask.mapper.BigStorageCageOutTaskMapper;
 import com.mes.common.config.Const;
+import com.mes.common.utils.RedisUtil;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.mapper.GlassInfoMapper;
+import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
+import com.mes.temperingglass.service.TemperingGlassInfoService;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -58,7 +64,15 @@
     private GlassInfoMapper glassInfoMapper;
 
     @Resource
+    private GlassInfoService glassInfoService;
+
+    @Resource
+    private TemperingGlassInfoService temperingGlassInfoService;
+
+    @Resource
     private DamageService damageService;
+    @Resource
+    private RedisUtil redisUtil;
 
     @Value("${mes.minCount}")
     private int minCount;
@@ -69,56 +83,38 @@
     @Value("${mes.glassGap}")
     private Integer glassGap;
 
-    /**
-     * 鏌ヨ杩�/鍑虹墖浠诲姟
-     */
+    @Value("${mes.sequence.order}")
+    private boolean sequenceOrder;
+
+
     @Override
-    public List<BigStorageCageDetails> selectTask(int taskType) {
-        if (taskType == 1) {
-            //杩涚墖浠诲姟鏁版嵁
-            LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>();
-            feedWrapper.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN);
-            List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(feedWrapper);
+    public List<BigStorageCageDetails> selectFeedTask(){
+        //杩涚墖浠诲姟鏁版嵁
+        LambdaQueryWrapper<BigStorageCageDetails> feedWrapper = new LambdaQueryWrapper<>();
+        feedWrapper.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW);
+        List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(feedWrapper);
 
-            LambdaQueryWrapper<BigStorageCageFeedTask> feedTaskWrapper = new LambdaQueryWrapper<>();
-            feedTaskWrapper
-                    .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
-                    .isNotNull(BigStorageCageFeedTask::getTargetSlot);
-            List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(feedTaskWrapper);
-
-            Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream()
-                    .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task));
+        LambdaQueryWrapper<BigStorageCageFeedTask> feedTaskWrapper = new LambdaQueryWrapper<>();
+        feedTaskWrapper
+                .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
+                .isNotNull(BigStorageCageFeedTask::getTargetSlot);
+        List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskMapper.selectList(feedTaskWrapper);
+        Map<String, BigStorageCageFeedTask> listMap = bigStorageCageFeedTaskList.stream()
+                .collect(Collectors.toMap(BigStorageCageFeedTask::getGlassId, task -> task));
             Iterator<BigStorageCageDetails> iterator = bigStorageCageDetailsList.iterator();
             while (iterator.hasNext()) {
                 BigStorageCageDetails bigStorageCageDetails = iterator.next();
                 BigStorageCageFeedTask bigStorageCageFeedTask = listMap.get(bigStorageCageDetails.getGlassId());
                 bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
-                if (bigStorageCageDetails.getBigStorageCageFeedTask() == null) {
-                    iterator.remove();
-                }
-            }
-            LambdaQueryWrapper<BigStorageCageFeedTask> feedTaskNoTargetWrapper = new LambdaQueryWrapper<>();
-            feedTaskNoTargetWrapper
-                    .lt(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT)
-                    .isNull(BigStorageCageFeedTask::getTargetSlot);
-            List<BigStorageCageFeedTask> bigStorageCageFeedTaskNoTargetList = bigStorageCageFeedTaskMapper.selectList(feedTaskNoTargetWrapper);
-            for (BigStorageCageFeedTask bigStorageCageFeedTask : bigStorageCageFeedTaskNoTargetList
-            ) {
-                BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
-                LambdaQueryWrapper<GlassInfo> glassInfoWrapper = new LambdaQueryWrapper<>();
-                glassInfoWrapper.eq(GlassInfo::getGlassId, bigStorageCageFeedTask.getGlassId());
-                GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoWrapper);
-                BeanUtils.copyProperties(glassInfo, bigStorageCageDetails);
-                bigStorageCageDetails.setBigStorageCageFeedTask(bigStorageCageFeedTask);
-                bigStorageCageDetailsList.add(bigStorageCageDetails);
             }
             return bigStorageCageDetailsList;
-        } else {
-            //鍑虹墖浠诲姟鏁版嵁
-            LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>();
-            outWrapper.eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN);
-            List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper);
+    }
 
+    @Override
+    public List<BigStorageCageDetails> selectOutTask(){
+            LambdaQueryWrapper<BigStorageCageDetails> outWrapper = new LambdaQueryWrapper<>();
+            outWrapper.in(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING,Const.GLASS_STATE_SCHEDULE_ING);
+            List<BigStorageCageDetails> bigStorageCageDetailsList = baseMapper.selectList(outWrapper);
             LambdaQueryWrapper<BigStorageCageOutTask> outTaskWrapper = new LambdaQueryWrapper<>();
             outTaskWrapper.lt(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS);
             List<BigStorageCageOutTask> bigStorageCageOutTaskList = bigStorageCageOutTaskMapper.selectList(outTaskWrapper);
@@ -134,13 +130,10 @@
                 BigStorageCageDetails bigStorageCageDetails = iterator.next();
                 BigStorageCageOutTask bigStorageCageOutTask = listMap.get(bigStorageCageDetails.getGlassId());
                 bigStorageCageDetails.setBigStorageCageOutTask(bigStorageCageOutTask);
-                if (bigStorageCageDetails.getBigStorageCageOutTask() == null) {
-                    iterator.remove();
-                }
             }
             return bigStorageCageDetailsList;
         }
-    }
+
 
     /**
      * 鍒ゆ柇褰撳墠鐜荤拑鏄惁鑳戒笂杞�
@@ -292,6 +285,7 @@
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                 .eq(BigStorageCage::getRemainWidth, slotWidth)
+                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
                 .inSql(BigStorageCage::getDeviceId,
                         "select distinct device_id from big_storage_cage_details where tempering_layout_id = " + glassInfo.getTemperingLayoutId())
                 .last("limit 1"));
@@ -307,6 +301,7 @@
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                 .eq(BigStorageCage::getRemainWidth, slotWidth)
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
+                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
                 .notInSql(BigStorageCage::getDeviceId,
                         "select distinct device_id from big_storage_cage_details where state in (100,102,103)")
                 .ge(BigStorageCage::getMaxThickness, glassInfo.getThickness())
@@ -321,6 +316,7 @@
         }
         bigStorageCage = bigStorageCageService.getOne(new LambdaQueryWrapper<BigStorageCage>()
                 .eq(BigStorageCage::getRemainWidth, slotWidth)
+                .notInSql(BigStorageCage::getSlot, "select distinct slot from big_storage_cage_details where state = 0")
                 .eq(BigStorageCage::getEnableState, Const.SLOT_ON)
                 .ge(BigStorageCage::getMaxThickness, glassInfo.getThickness())
                 .orderByAsc(BigStorageCage::getDeviceId)
@@ -340,7 +336,7 @@
 
 
     @Override
-    public TemperingLayoutDTO queryTemperingOccupySlot() {
+    public List<TemperingLayoutDTO> queryTemperingOccupySlot() {
         return baseMapper.queryTemperingOccupySlot(minCount);
     }
 
@@ -350,47 +346,49 @@
     }
 
     @Override
-    public boolean TemperingGlass(String temperingLayoutId, String engineerId) {
+    public boolean temperingGlass(String temperingLayoutId, String engineerId) {
         LambdaQueryWrapper<TemperingGlassInfo> temperingGlassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
         temperingGlassInfoLambdaQueryWrapper
-                .eq(TemperingGlassInfo::getState,Const.TEMPERING_NEW);
-        List<TemperingGlassInfo> temperingGlassInfoList=temperingGlassInfoMapper.selectList(temperingGlassInfoLambdaQueryWrapper);
+                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW);
+        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoMapper.selectList(temperingGlassInfoLambdaQueryWrapper);
 
-        if(temperingGlassInfoList.size()==0){
-            LambdaQueryWrapper<BigStorageCageDetails> wrapper =new LambdaQueryWrapper<>();
-            wrapper.eq(BigStorageCageDetails::getTemperingLayoutId,temperingLayoutId)
-                    .eq(BigStorageCageDetails::getEngineerId,engineerId)
-                    .in(BigStorageCageDetails::getState,Const.GLASS_STATE_IN,Const.GLASS_STATE_ARTIFICIAL);
-            List<BigStorageCageDetails> bigStorageCageDetailsList=baseMapper.selectList(wrapper);
-
-            for (BigStorageCageDetails bigStorageCageDetails : bigStorageCageDetailsList
-            ) {
-                TemperingGlassInfo temperingGlassInfo = new TemperingGlassInfo();
-                LambdaQueryWrapper<GlassInfo> glassInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
-                glassInfoLambdaQueryWrapper.eq(GlassInfo::getGlassId, bigStorageCageDetails.getGlassId());
-                GlassInfo glassInfo = glassInfoMapper.selectOne(glassInfoLambdaQueryWrapper);
-
-                BeanUtils.copyProperties(glassInfo, temperingGlassInfo);
-                temperingGlassInfo.setAngle((int) glassInfo.getAngle());
-                temperingGlassInfo.setState(Const.TEMPERING_NEW);
-                temperingGlassInfo.setSlot(bigStorageCageDetails.getSlot());
-                temperingGlassInfoMapper.insert(temperingGlassInfo);
+        if (temperingGlassInfoList.size() == 0) {
+            List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
+                    .selectAll(GlassInfo.class)
+                    .select("-1 as state")
+                    .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
+                    .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
+                    .eq(GlassInfo::getTemperingLayoutId, temperingLayoutId)
+                    .eq(GlassInfo::getEngineerId, engineerId)
+                    .in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                    .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
+            if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
+                temperingGlassInfoService.saveBatch(temperingGlassInfos);
+                return true;
             }
-            return true;
-        } else {
-            return false;
         }
-
-
+        return false;
     }
 
+
     @Override
-    public List<Map<String, Object>> selectTemperingGlass(){
+    public List<Map<String, Object>> selectTemperingGlass() {
         QueryWrapper<BigStorageCageDetails> wrapper = new QueryWrapper<>();
         wrapper.select("engineer_id,tempering_layout_id,count(*) as count")
-                .in("state",Const.GLASS_STATE_IN,Const.GLASS_STATE_ARTIFICIAL)
+                .in("state", Const.GLASS_STATE_IN, Const.GLASS_STATE_ARTIFICIAL)
                 .groupBy("engineer_id,tempering_layout_id");
         List<Map<String, Object>> TemperingGlass = baseMapper.selectMaps(wrapper);
         return TemperingGlass;
     }
+
+    @Override
+    public void updateBySlot(List<UpdateBigStorageCageDTO> glassList, int state) {
+        baseMapper.updateBySlot(glassList, state);
+    }
+
+    @Override
+    public String temperingSwitch(Boolean flag) {
+        redisUtil.setCacheObject("temperingSwitch", flag);
+        return "success";
+    }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/UpdateBigStorageCageDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/UpdateBigStorageCageDTO.java
new file mode 100644
index 0000000..6a1cecc
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/UpdateBigStorageCageDTO.java
@@ -0,0 +1,16 @@
+package com.mes.bigstoragetask.entity;
+
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/7/26 9:05
+ * @Description:
+ */
+@Data
+public class UpdateBigStorageCageDTO {
+
+    private String glassId;
+
+    private int targetSlot;
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
index c013e0a..c6587ca 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcSlicecage.java
@@ -5,6 +5,7 @@
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.common.S7object;
+import com.mes.common.utils.RedisUtil;
 import com.mes.device.PlcParameterObject;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
@@ -31,6 +32,8 @@
     private BigStorageCageDetailsService bigStorageCageDetailsService;
     @Resource
     private TemperingGlassInfoService temperingGlassInfoService;
+    @Resource
+    private RedisUtil redisUtil;
 
     private JSONObject jsonObject = new JSONObject();
     public void queryDataSource1() throws InterruptedException {
@@ -42,11 +45,11 @@
         jsonObject.append("bigStorageCageInfos", bigStorageCageService.querybigStorageCageDetail());
 
         //杩涚墖浠诲姟鏁版嵁
-        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectTask(1);
+        List<BigStorageCageDetails> bigStorageCageDetailsFeedTask=bigStorageCageDetailsService.selectFeedTask();
         jsonObject.append("bigStorageCageDetailsFeedTask", bigStorageCageDetailsFeedTask);
 
         //鍑虹墖浠诲姟鏁版嵁
-        List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectTask(2);
+        List<BigStorageCageDetails> bigStorageCageDetailsOutTask=bigStorageCageDetailsService.selectOutTask();
         jsonObject.append("bigStorageCageDetailsOutTask", bigStorageCageDetailsOutTask);
 
         //鐞嗙墖绗间娇鐢ㄦ儏鍐�
@@ -56,6 +59,15 @@
         //鐞嗙墖绗艰〃鏍间俊鎭�
         jsonObject.append("bigStorageCageInfo", bigStorageCageService.querybigStorageCageDetailAll());
 
+        //閽㈠寲寮�鍏�
+        boolean temperingSwitch=false;
+        if(redisUtil.getCacheObject("temperingSwitch")==null){
+            redisUtil.setCacheObject("temperingSwitch", false);
+        }else{
+            temperingSwitch=redisUtil.getCacheObject("temperingSwitch");
+        }
+        jsonObject.append("temperingSwitch", temperingSwitch);
+
     }
 
     public void queryDataSource2() throws InterruptedException {
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 6952bac..b1a5bf5 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
@@ -16,10 +16,12 @@
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
+import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
 import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
 import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
 import com.mes.common.S7object;
 import com.mes.common.config.Const;
+import com.mes.common.utils.RedisUtil;
 import com.mes.damage.entity.Damage;
 import com.mes.damage.service.DamageService;
 import com.mes.device.PlcParameterObject;
@@ -64,6 +66,9 @@
     private TemperingGlassInfoService temperingGlassInfoService;
     @Resource
     private DamageService damageService;
+
+    @Resource
+    private RedisUtil redisUtil;
 
     private static final String REQUEST_WORD = "1";
 
@@ -178,11 +183,6 @@
         String d01Id = plcParameterObject.getPlcParameter("D01ID").getValue();
         String d04Id = plcParameterObject.getPlcParameter("D04ID").getValue();
         log.info("1銆佽幏鍙杁01Id鎵弿ID涓猴細{};鑾峰彇d04Id鎵弿ID涓猴細{};", d01Id, d04Id);
-        //涓ゆ潯绾块兘鏈夎繘鍗ц浆绔嬩换鍔★紝鐩存帴缁撴潫
-//        if (StringUtils.isNotBlank(d01Id) && StringUtils.isNotBlank(d04Id)) {
-//            log.info("涓ゆ潯绾块兘瀛樺湪杩涚墖浠诲姟锛岀粨鏉熶换鍔�");
-//            return;
-//        }
         //鑾峰彇涓ゆ潯绾垮崸杞珛鏄惁鏈夌幓鐠冿紝涓斾换鍔$姸鎬佷负1/2
         List<Integer> lineList = bigStorageCageFeedTaskService.querySitToUpGlass();
         if (CollectionUtils.isEmpty(lineList)) {
@@ -249,92 +249,115 @@
         Date startDate = new Date();
         log.info("澶х悊鐗囩绌鸿溅杩涚墖浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
         PlcParameterObject plcMesObject = S7object.getinstance().PlcMesObject;
-        String e02State = plcMesObject.getPlcParameter("E02State").getAddress();
+        String e02State = plcMesObject.getPlcParameter("E02State").getValue();
         if (REQUEST_WORD.equals(e02State)) {
             log.info("鍑虹墖蹇欑锛岀粨鏉熷嚭鐗囦换鍔�");
             return;
         }
         String mesToPLCAddress = plcMesObject.getPlcParameter("MESToPLC").getAddress();
-        List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW));
-        Assert.isTrue(CollectionUtils.isEmpty(outingList), "鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�");
-
-        //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑
-        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>()
-                .selectAll(TemperingGlassInfo.class)
-                .leftJoin(BigStorageCageOutTask.class, BigStorageCageOutTask::getGlassId, TemperingGlassInfo::getGlassId)
-                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
-                .isNull(BigStorageCageOutTask::getGlassId)
-                .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
-        if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
-            log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
-            computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
-            Date endDate = new Date();
-            log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        List<BigStorageCageOutTask> outingList = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_NEW));
+        if (CollectionUtils.isNotEmpty(outingList)) {
+            log.info("鏈夋鍦ㄦ墽琛屽嚭鐗囩殑浠诲姟锛岀粨鏉熷綋鍓嶅嚭鐗囩嚎绋�");
             return;
         }
-        //鏄惁鏈変汉宸ヤ笅鐗囦换鍔�   鏈夌洿鎺ュ嚭
-        List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
-                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth));
-        if (CollectionUtils.isNotEmpty(artificialList)) {
-            computeOutGlassInfo(artificialList, Boolean.FALSE, mesToPLCAddress);
-            Date endDate = new Date();
-            log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
-            return;
-        }
-        //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
-        List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll();
-        if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) {
-            //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑
-            //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
-            for (TemperingLayoutDTO item : temperingLayoutDTOList) {
-                List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
-                        .selectAll(GlassInfo.class)
-                        .select("-1 as state")
-                        .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
-                        .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
-                        .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                        .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId())
-                        .eq(GlassInfo::getEngineerId, item.getEngineerId())
-                        .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
-                if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
-                    temperingGlassInfoService.saveBatch(temperingGlassInfos);
-                    computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
-                    Date endDate = new Date();
-                    log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
-                    return;
-                }
+        if (redisUtil.getCacheObject("temperingSwitch")) {
+            //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑
+            List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.selectJoinList(TemperingGlassInfo.class, new MPJLambdaWrapper<TemperingGlassInfo>()
+                    .selectAll(TemperingGlassInfo.class)
+                    .leftJoin(BigStorageCageOutTask.class, BigStorageCageOutTask::getGlassId, TemperingGlassInfo::getGlassId)
+                    .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
+                    .isNull(BigStorageCageOutTask::getGlassId)
+                    .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
+            if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
+                log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
+                computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                Date endDate = new Date();
+                log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                return;
             }
-        }
-        //鏈埌榻� 鎵ц鍐呴儴璋冨害浠诲姟
-        TemperingLayoutDTO temperingOccupySlot = bigStorageCageDetailsService.queryTemperingOccupySlot();
-        if (null != temperingOccupySlot) {
-            List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
-            for (int i = 0; i < slotSequenceList.size() - 1; i++) {
-                SlotSequenceDTO first = slotSequenceList.get(i);
-                SlotSequenceDTO second = slotSequenceList.get(i + 1);
-                int slotWidth = carWidth - first.getRemainWidth() - glassGap;
-                if (first.getMinSequence() == second.getMaxSequence() + 1
-                        && second.getRemainWidth() > slotWidth) {
-                    List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
-                            .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN));
-                    List<BigStorageCageOutTask> outTasks = list.stream().map(e -> new BigStorageCageOutTask(e.getGlassId(), first.getSlot(), second.getSlot(),
-                            e.getWidth() * 10, e.getHeight() * 10, 0, 0, 1)).collect(Collectors.toList());
-                    bigStorageCageOutTaskService.saveBatch(outTasks);
-
-                    //鍚憄lc鍐欏叆纭瀛�
-                    int returnData = 0;
-                    int count = 1;
-                    while (returnData == 0) {
-                        log.info("宸插悜plc绗瑊}娆¢�佸崗璁�", count);
-                        S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
-                        returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
-                        log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+            //鏄惁鏈変汉宸ヤ笅鐗囦换鍔�   鏈夌洿鎺ュ嚭
+            List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                    .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth));
+            if (CollectionUtils.isNotEmpty(artificialList)) {
+                computeOutGlassInfo(artificialList, Boolean.FALSE, mesToPLCAddress);
+                Date endDate = new Date();
+                log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                return;
+            }
+            //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+            List<TemperingLayoutDTO> temperingLayoutDTOList = bigStorageCageDetailsService.temperingIsAll();
+            if (CollectionUtils.isNotEmpty(temperingLayoutDTOList)) {
+                //鐜荤拑鍒伴綈鍖呮嫭宸插嚭鐗囩殑
+                //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
+                for (TemperingLayoutDTO item : temperingLayoutDTOList) {
+                    List<TemperingGlassInfo> temperingGlassInfos = glassInfoService.selectJoinList(TemperingGlassInfo.class, JoinWrappers.lambda(GlassInfo.class)
+                            .selectAll(GlassInfo.class)
+                            .select("-1 as state")
+                            .selectAs(BigStorageCageDetails::getSlot, TemperingGlassInfo::getSlot)
+                            .innerJoin(BigStorageCageDetails.class, BigStorageCageDetails::getGlassId, GlassInfo::getGlassId)
+                            .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                            .eq(GlassInfo::getTemperingLayoutId, item.getTemperingLayoutId())
+                            .eq(GlassInfo::getEngineerId, item.getEngineerId())
+                            .orderBy(Boolean.TRUE, sequenceOrder, GlassInfo::getTemperingFeedSequence));
+                    if (CollectionUtils.isNotEmpty(temperingGlassInfos)) {
+                        temperingGlassInfoService.saveBatch(temperingGlassInfos);
+                        computeOutGlassInfo(temperingGlassInfoList, Boolean.TRUE, mesToPLCAddress);
+                        Date endDate = new Date();
+                        log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+                        return;
                     }
-                    Date endDate = new Date();
-                    log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
-                    return;
                 }
             }
+        }
+        //鎵ц鍐呴儴璋冨害浠诲姟
+        List<TemperingLayoutDTO> temperingOccupySlotList = bigStorageCageDetailsService.queryTemperingOccupySlot();
+        if (CollectionUtils.isNotEmpty(temperingOccupySlotList)) {
+            loop:
+            for (TemperingLayoutDTO temperingOccupySlot : temperingOccupySlotList) {
+                List<SlotSequenceDTO> slotSequenceList = bigStorageCageDetailsService.queryGlassMaxAndMin(temperingOccupySlot.getEngineerId(), temperingOccupySlot.getTemperingLayoutId());
+                for (int i = 0; i < slotSequenceList.size() - 1; i++) {
+                    SlotSequenceDTO first = slotSequenceList.get(i);
+                    SlotSequenceDTO second = slotSequenceList.get(i + 1);
+                    int slotWidth = carWidth - first.getRemainWidth() - glassGap;
+                    if (first.getMinSequence() == second.getMaxSequence() + 1
+                            && second.getRemainWidth() > slotWidth && slotWidth >= 0) {
+                        List<BigStorageCageDetails> list = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                                .eq(BigStorageCageDetails::getSlot, first.getSlot()).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_IN)
+                                .orderBy(Boolean.TRUE, sequenceOrder, BigStorageCageDetails::getTemperingFeedSequence));
+                        if (CollectionUtils.isNotEmpty(list)) {
+                            List<BigStorageCageOutTask> outTasks = new ArrayList<>();
+                            int serialNumber = 1;
+                            for (BigStorageCageDetails item : list) {
+                                outTasks.add(new BigStorageCageOutTask(item.getGlassId(), first.getSlot(), second.getSlot(),
+                                        item.getWidth() * 10, item.getHeight() * 10, 1, serialNumber++, Const.BIG_STORAGE_OUT_NEW));
+                            }
+                            //鏂板璋冨害浠诲姟
+                            bigStorageCageOutTaskService.saveBatch(outTasks);
+                            //鏇存柊鐞嗙墖绗艰鎯呰〃璋冨害鐨勫悗鐨勭幓鐠冧綅缃俊鎭細鐢熸垚浠诲姟鍚庡厛灏嗙幓鐠冩牸瀛愪綅缃繘琛岃皟鏁达紝鐜荤拑鐘舵�佹敼涓鸿皟搴︿腑锛屾柊澧炶皟搴﹀畬鎴愪换鍔★紝澶勭悊璋冨害瀹屾垚鍚庣幓鐠冪姸鎬佹敼涓�100.
+                            List<String> glassList = list.stream().map(BigStorageCageDetails::getGlassId).collect(Collectors.toList());
+                            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>().set(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING)
+                                    .set(BigStorageCageBaseInfo::getSlot, second.getSlot()).in(BigStorageCageDetails::getGlassId, glassList));
+                            //涓ゆ鏇存柊绗煎瓙鐨勫墿浣欏昂瀵革細绗竴娆¢槻姝㈡湁鐜荤拑缁х画杩涜皟搴﹀悗鐨勭瀛愶紝绗簩娆℃洿鏂帮細璁$畻鏍煎瓙鐨勫疄闄呭昂瀵�
+                            // 浠呮洿鏂拌皟搴﹀悗鐨勬牸瀛愪俊鎭細璧峰鏍煎瓙瀹屾垚鍚庢洿鏂帮細闃叉璋冨害鍑虹墖杩囩▼涓湁鏂扮幓鐠冭繘鍏ワ紝
+                            updateSlotRemainBySlots(Arrays.asList(second.getSlot()));
+                            break loop;
+                        }
+                    }
+                }
+            }
+            //鍚憄lc鍐欏叆纭瀛�
+            int returnData = 0;
+            int count = 1;
+            while (returnData == 0) {
+                log.info("宸插悜plc绗瑊}娆¢�佸崗璁�", count);
+                S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+                returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+                log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+            }
+            Date endDate = new Date();
+            log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+            return;
         }
     }
 
@@ -348,17 +371,21 @@
         if (CollectionUtils.isNotEmpty(list)) {
             log.info("2銆佽幏鍙栨墍鏈夋鍦ㄨ繘鐗囩殑鐜荤拑淇℃伅id:{}", list);
             List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList());
-            List<Object> inSuccessGlassIdsObj = bigStorageCageFeedTaskService.listObjs(new LambdaQueryWrapper<BigStorageCageFeedTask>()
-                    .select(BigStorageCageFeedTask::getGlassId).in(BigStorageCageFeedTask::getGlassId, glassIds)
+            List<BigStorageCageFeedTask> inSuccessGlass = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
+                    .in(BigStorageCageFeedTask::getGlassId, glassIds)
                     .in(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_SLOT));
-            List<String> inSuccessGlassIds = inSuccessGlassIdsObj.stream().map(String::valueOf).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(inSuccessGlassIds)) {
-                log.info("3銆佽幏鍙栬繘鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", inSuccessGlassIds);
-                bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
-                        .set(BigStorageCageDetails::getState, Const.GLASS_STATE_IN).in(BigStorageCageDetails::getGlassId, inSuccessGlassIds));
-                log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", inSuccessGlassIds);
+            if (CollectionUtils.isNotEmpty(inSuccessGlass)) {
+                log.info("3銆佽幏鍙栬繘鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", inSuccessGlass);
+                List<Integer> inSuccessGlassSlot = inSuccessGlass.stream().map(BigStorageCageFeedTask::getTargetSlot).collect(Collectors.toList());
+                List<UpdateBigStorageCageDTO> storageCageDTOList = inSuccessGlass.stream().map(e -> {
+                    UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
+                    BeanUtils.copyProperties(e, storageCageDTO);
+                    return storageCageDTO;
+                }).collect(Collectors.toList());
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN);
+                log.info("4銆佸ぇ鐞嗙墖绗艰繘鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", inSuccessGlass);
                 //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
-                updateSlotRemain(inSuccessGlassIds, Boolean.TRUE);
+                updateSlotRemainBySlots(inSuccessGlassSlot);
                 log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
             }
 
@@ -379,16 +406,58 @@
         if (CollectionUtils.isNotEmpty(list)) {
             log.info("2銆佽幏鍙栨墍鏈夋鍦ㄥ嚭鐗囩殑鐜荤拑淇℃伅id:{}", list);
             List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList());
-            List<Object> outSuccessGlassIdsObj = bigStorageCageOutTaskService.listObjs(new LambdaQueryWrapper<BigStorageCageOutTask>()
-                    .select(BigStorageCageOutTask::getGlassId).in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL));
-            List<String> outSuccessGlassIds = outSuccessGlassIdsObj.stream().map(String::valueOf).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(outSuccessGlassIds)) {
-                log.info("3銆佽幏鍙栧嚭鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", outSuccessGlassIdsObj);
-                bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
-                        .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT).in(BigStorageCageDetails::getGlassId, outSuccessGlassIds));
-                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlassIdsObj);
+            List<BigStorageCageOutTask> outSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                    .in(BigStorageCageOutTask::getGlassId, glassIds).in(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_ALL));
+            if (CollectionUtils.isNotEmpty(outSuccessGlass)) {
+                log.info("3銆佽幏鍙栧嚭鐗囧凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", outSuccessGlass);
+                List<UpdateBigStorageCageDTO> storageCageDTOList = outSuccessGlass.stream().map(e -> {
+                    UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
+                    storageCageDTO.setGlassId(e.getGlassId());
+                    storageCageDTO.setTargetSlot(e.getStartSlot());
+                    return storageCageDTO;
+                }).collect(Collectors.toList());
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_OUT);
+                List<Integer> outSuccessSlotList = outSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).collect(Collectors.toList());
+                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", outSuccessGlass);
                 //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
-                updateSlotRemain(outSuccessGlassIds, Boolean.FALSE);
+                updateSlotRemainBySlots(outSuccessSlotList);
+                log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
+            }
+        }
+        Date endDate = new Date();
+        log.info("end:澶х悊鐗囩鍑虹墖瀹屾垚鍚庢洿鏂板ぇ鐞嗙墖绗兼暟鎹换鍔$粨鏉熸椂闂达細{}锛屽叡鑰楁椂锛歿}ms,缁撴潫浠诲姟", endDate, endDate.getTime() - startDate.getTime());
+        return;
+
+    }
+
+    @Scheduled(fixedDelay = 300)
+    public void updateScheduleGlassStateTask() {
+        Date startDate = new Date();
+        log.info("1銆佸ぇ鐞嗙墖绗艰皟搴﹀畬鎴愬悗鏇存柊澶х悊鐗囩鏁版嵁浠诲姟寮�濮嬫墽琛屾椂闂达細{}", startDate);
+        //鍥犱负澶х悊鐗囩鍜岃皟搴︿换鍔℃槸涓や釜搴撶殑鏁版嵁锛屾墍浠ヨ鍒嗗紑鏌ユ壘
+        List<Object> list = bigStorageCageDetailsService.listObjs(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .select(BigStorageCageDetails::getGlassId).eq(BigStorageCageDetails::getState, Const.GLASS_STATE_SCHEDULE_ING));
+        if (CollectionUtils.isNotEmpty(list)) {
+            log.info("2銆佽幏鍙栨墍鏈夋鍦ㄥ嚭鐗囩殑鐜荤拑淇℃伅id:{}", list);
+            List<String> glassIds = list.stream().map(String::valueOf).collect(Collectors.toList());
+            List<BigStorageCageOutTask> scheduleSuccessGlass = bigStorageCageOutTaskService.list(new LambdaQueryWrapper<BigStorageCageOutTask>()
+                    .in(BigStorageCageOutTask::getGlassId, glassIds).eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_SUCCESS)
+                    .notIn(BigStorageCageOutTask::getEndSlot, Const.TEMPERING_OUT_TARGET_POSITION, Const.ARTIFICIAL_OUT_TARGET_POSITION));
+            if (CollectionUtils.isNotEmpty(scheduleSuccessGlass)) {
+                log.info("3銆佽幏鍙栬皟搴﹀凡瀹屾垚鐨勭幓鐠冧俊鎭痠d:{}", scheduleSuccessGlass);
+                List<UpdateBigStorageCageDTO> storageCageDTOList = scheduleSuccessGlass.stream().map(e -> {
+                    UpdateBigStorageCageDTO storageCageDTO = new UpdateBigStorageCageDTO();
+                    storageCageDTO.setGlassId(e.getGlassId());
+                    storageCageDTO.setTargetSlot(e.getEndSlot());
+                    return storageCageDTO;
+                }).collect(Collectors.toList());
+                bigStorageCageDetailsService.updateBySlot(storageCageDTOList, Const.GLASS_STATE_IN);
+                List<String> scheduleSuccessGlassIds = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+                log.info("4銆佸ぇ鐞嗙墖绗煎嚭鐗囩姸鎬佸凡瀹屾垚宸插畬鎴愮殑鐜荤拑淇℃伅id:{}", scheduleSuccessGlassIds);
+                //鏇存柊鐞嗙墖绗肩幓鐠冨昂瀵�
+                List<Integer> slotList = scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getStartSlot).distinct().collect(Collectors.toList());
+                slotList.addAll(scheduleSuccessGlass.stream().map(BigStorageCageOutTask::getEndSlot).distinct().collect(Collectors.toList()));
+                updateSlotRemainBySlots(slotList);
                 log.info("5銆佸ぇ鐞嗙墖绗艰繘鐗囩洰鏍囨牸瀛愬昂瀵告洿鏂板畬鎴�");
             }
         }
@@ -412,9 +481,10 @@
             log.info("鑾峰彇杩涚墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", inDamageTaskInfoList);
             bigStorageCageFeedTaskService.remove(new LambdaQueryWrapper<BigStorageCageFeedTask>().eq(BigStorageCageFeedTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
             //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佹洿鏂�
-            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
-                    .set(BigStorageCageDetails::getState, Const.GLASS_STATE_DAMAGE).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList())));
+            bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>()
+                    .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_NEW).in(BigStorageCageDetails::getGlassId, inDamageTaskInfoList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList())));
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
             for (BigStorageCageFeedTask bigStorageCageFeedTask : inDamageTaskInfoList) {
                 Damage damage = new Damage();
                 damage.setGlassId(bigStorageCageFeedTask.getGlassId());
@@ -423,7 +493,10 @@
                 damage.setRemark("杩涚鍓嶅崸杞珛");
                 damage.setStatus(2);
                 damageService.insertDamage(damage);
+                slotList.add(bigStorageCageFeedTask.getTargetSlot());
             }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
             log.info("杩涚墖浠诲姟鎵ц瀹屾垚");
         }
         //鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐘舵�佷负鐮存崯鐨勬暟鎹�
@@ -431,15 +504,15 @@
                 .eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_DAMAGE));
         if (CollectionUtils.isNotEmpty(outDamageTaskInfoList)) {
             log.info("鑾峰彇鍑虹墖浠诲姟琛ㄤ腑鐮存崯鐨勭幓鐠冧俊鎭瘂}", outDamageTaskInfoList);
-            bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_IN_DAMAGE));
+            bigStorageCageOutTaskService.remove(new LambdaQueryWrapper<BigStorageCageOutTask>().eq(BigStorageCageOutTask::getTaskState, Const.BIG_STORAGE_OUT_DAMAGE));
             List<String> glassIdList = outDamageTaskInfoList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
             //绉婚櫎閽㈠寲涓嬬墖琛ㄦ暟鎹�
             temperingGlassInfoService.remove(new LambdaQueryWrapper<TemperingGlassInfo>().in(TemperingGlassInfo::getGlassId, glassIdList));
-            //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佹洿鏂�
-            bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
-                    .set(BigStorageCageDetails::getState, Const.GLASS_STATE_DAMAGE).in(BigStorageCageDetails::getGlassId, glassIdList));
+            //鐞嗙墖绗艰鎯呰〃鏁版嵁鐘舵�佸垹闄�
+            bigStorageCageDetailsService.remove(new LambdaQueryWrapper<BigStorageCageDetails>().in(BigStorageCageDetails::getGlassId, glassIdList));
 
             //灏嗙牬鎹熶俊鎭柊澧炲叆鐮存崯琛�
+            List<Integer> slotList = new ArrayList<>();
             for (BigStorageCageOutTask bigStorageCageOutTask : outDamageTaskInfoList) {
                 Damage damage = new Damage();
                 damage.setGlassId(bigStorageCageOutTask.getGlassId());
@@ -448,7 +521,10 @@
                 damage.setRemark("鍑虹墖鍚庡崸杞珛");
                 damage.setStatus(2);
                 damageService.insertDamage(damage);
+                slotList.add(bigStorageCageOutTask.getStartSlot());
             }
+            //鏇存柊鏍煎瓙鍓╀綑瀹藉害
+            updateSlotRemainBySlots(slotList);
             log.info("鍑虹墖浠诲姟鎵ц瀹屾垚");
         }
         Date endDate = new Date();
@@ -596,9 +672,9 @@
             BeanUtils.copyProperties(info, cageDetails);
             //2銆佽幏鍙栫洰鏍囨牸瀛愪俊鎭�
             BigStorageDTO bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info);
-            //3銆佹洿鏂板ぇ鐞嗙墖绗艰〃鍓╀綑瀹藉害锛堟洿鏂板ぇ鐞嗙墖绗煎墿浣欏昂瀵哥Щ鍒拌繘绗煎畬鎴愬悗鎵ц锛�
-//            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - info.getWidth() - glassGap)
-//                    .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
+            //3銆佷复鏃舵洿鏂版牸瀛愮殑鍓╀綑灏哄锛氶槻姝㈢浉閭荤幓鐠冭繘鍚屼竴鏍煎瓙閫犳垚鍓╀綑灏哄涓嶈冻锛岀幓鐠冭秺鐣岀殑鎯呭喌锛屼换鍔″畬鎴愬悗鍐嶆鏇存柊澶х悊鐗囩琛ㄥ墿浣欏搴︼紙鎸夌収绗煎唴鐜荤拑鏁伴噺鏇存柊澶х悊鐗囩鍓╀綑灏哄锛�
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, bigStorageDTO.getWidth() - Math.max(info.getWidth(), info.getHeight()) - glassGap)
+                    .eq(BigStorageCage::getSlot, bigStorageDTO.getSlot()));
             //4銆佹洿鏂拌繘鐗囦换鍔¤〃锛岀洰鏍囨牸瀛愬強鐘舵�侊紙鐘舵�佹敼涓�2 鐢垫皵鎵埌鑷澶勭悊锛�  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
             e.setTargetSlot(bigStorageDTO.getSlot());
             bigStorageCageFeedTaskService.updateById(e);
@@ -609,6 +685,7 @@
             cageDetails.setDeviceId(bigStorageDTO.getDeviceId());
             cageDetails.setGap(glassGap);
             bigStorageCageDetailsService.save(cageDetails);
+
         }
         sendTaskListToPLC(taskList, line);
         return Boolean.TRUE;
@@ -624,6 +701,7 @@
         for (int i = 1; i <= taskList.size(); i++) {
             s7control.writeWord(plcMesObject.getPlcParameter("StartAddToImport" + i).getAddress(), taskList.get(i - 1).getLine());
             s7control.writeWord(plcMesObject.getPlcParameter("TargetAddToImport" + i).getAddress(), taskList.get(i - 1).getTargetSlot());
+            log.info("鍚憄lc鍙戦�佺{}鐗囩幓鐠冨凡瀹屾垚", i);
         }
         int returnData = 0;
         int count = 1;
@@ -634,6 +712,15 @@
         }
     }
 
+    /**
+     * 鍑虹墖涓�娆′粎鐢熸垚涓�杞︾幓鐠�
+     *
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
+     */
     private <T extends BigStorageCageBaseInfo> Boolean computeOutGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
         //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
         List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
@@ -659,7 +746,6 @@
                 bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
                         e.getWidth() * 10, e.getHeight(), 0, 0, 1));
             }
-
         }
         Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
         log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
@@ -669,9 +755,6 @@
         bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
                 .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
                 .in(BigStorageCageDetails::getGlassId, glassIds));
-        //鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄(绉昏嚦鍑虹墖浠诲姟瀹屾垚鍚�)
-//        updateSlotRemain(list, glassIds);
-
         int returnData = 0;
         int count = 1;
         while (returnData == 0) {
@@ -683,46 +766,91 @@
     }
 
     /**
-     * 鏇存柊绗煎瓙鍐呮牸瀛愮殑鍓╀綑灏哄
+     * 鍑虹墖涓�娆$敓鎴愪竴鐐夌幓鐠�
      *
-     * @param taskGlassIds 鏈浠诲姟鍑哄幓鐨勭幓鐠僫ds
-     * @param flag         鏄惁杩涘嚭鐗� true 杩涚墖  false 鍑虹墖
+     * @param list
+     * @param isTempering
+     * @param mesToPLCAddress
+     * @param <T>
+     * @return
      */
-    public void updateSlotRemain(List<String> taskGlassIds, Boolean flag) {
-        //鎸夌収鐜荤拑id鑾峰彇鐜荤拑淇℃伅鍙婄幓鐠冪殑鏍煎瓙鍙�
-        List<BigStorageCageDetails> glassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
-                .in(BigStorageCageDetails::getGlassId, taskGlassIds));
-        //鑾峰彇闇�瑕佸嚭鍘�/杩涚锛堝寘鎷緟鍑哄幓鐨勶級鐨勬墍鏈夌幓鐠冩牸瀛愬彿
-        List<Integer> slotList = glassList.stream().map(BigStorageCageDetails::getSlot).distinct().collect(Collectors.toList());
+    private <T extends BigStorageCageBaseInfo> Boolean computeOutMoreGlassInfo(List<T> list, Boolean isTempering, String mesToPLCAddress) {
+        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+        //鎵撹溅鍓╀綑灏哄
+        Integer remainWidth = carWidth;
+        int trainNumber = 1;
+        int serialNumber = 1;
+        int maxX = 0;
+        for (T e : list) {
+            int maxLength = Math.max((int) e.getWidth(), (int) e.getHeight());
+            if (serialNumber > outCarMaxSize || maxLength > remainWidth) {
+                remainWidth = carWidth;
+                trainNumber = trainNumber + 1;
+                serialNumber = 1;
+                maxX = 0;
+            }
+            remainWidth = remainWidth - maxLength - glassGap;
+            if (isTempering) {
+                int minLength = Math.min((int) e.getWidth(), (int) e.getHeight());
+                if (maxX + minLength <= xMaxSize) {
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.TEMPERING_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight() * 10, trainNumber, serialNumber++, 1));
+                    maxX = Math.max(maxX, e.getXCoordinate());
+                } else {
+                    remainWidth = carWidth - maxLength - glassGap;
+                    trainNumber = trainNumber + 1;
+                    serialNumber = 1;
+                    maxX = e.getXCoordinate();
+                    bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                            e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1));
+                }
+            } else {
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), Const.ARTIFICIAL_OUT_TARGET_POSITION,
+                        e.getWidth() * 10, e.getHeight(), trainNumber, serialNumber++, 1));
+            }
+        }
+        Assert.isFalse(CollectionUtils.isEmpty(bigStorageCageOutTaskList), "鏈幏鍙栧嚭鐗囨暟鎹紝缁撴潫鍑虹墖浠诲姟");
+        log.info("鑾峰彇鍑虹墖浠诲姟鏁版嵁{}鏉★紝鎵ц淇濆瓨", bigStorageCageOutTaskList.size());
+        bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+        List<String> glassIds = bigStorageCageOutTaskList.stream().map(BigStorageCageOutTask::getGlassId).collect(Collectors.toList());
+        log.info("灏嗗嚭鐗囩幓鐠儃}鐜荤拑鐘舵�佹敼涓哄凡鍑虹墖", glassIds);
+        bigStorageCageDetailsService.update(new LambdaUpdateWrapper<BigStorageCageDetails>()
+                .set(BigStorageCageDetails::getState, Const.GLASS_STATE_OUT_ING)
+                .in(BigStorageCageDetails::getGlassId, glassIds));
+        int returnData = 0;
+        int count = 1;
+        while (returnData == 0) {
+            S7object.getinstance().plccontrol.writeWord(mesToPLCAddress, 1);
+            returnData = S7object.getinstance().plccontrol.readWord(mesToPLCAddress, 1).get(0);
+            log.info("宸插悜plc绗瑊}娆″彂閫佸嚭鐗囦换鍔$‘璁わ紝鍦板潃涓猴細{},鍐欏叆鐨勫唴瀹逛负{}", count++, mesToPLCAddress, returnData);
+        }
+        return Boolean.TRUE;
+    }
+
+    public void updateSlotRemainBySlots(List<Integer> slotList) {
         //鑾峰彇鏍煎瓙鍐呮墍鏈夌殑鐜荤拑淇℃伅
         List<BigStorageCageDetails> inSlotGlassList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
                 .in(BigStorageCageDetails::getSlot, slotList).in(BigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL));
-        //鑾峰彇寰呰繘鐗�/鍑哄幓鐨勭幓鐠冧俊鎭�
-        Map<Integer, Double> slotRemainMap = null;
-        if (flag) {
-            slotRemainMap = inSlotGlassList.stream().filter(e -> taskGlassIds.contains(e.getGlassId()))
-                    .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> item.getWidth() + glassGap)));
-        } else {
-            slotRemainMap = inSlotGlassList.stream().filter(e -> !taskGlassIds.contains(e.getGlassId()))
-                    .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> item.getWidth() + glassGap)));
-        }
-        //鏍煎瓙鍐呮湁鐜荤拑鐨勶紝璁$畻涓猴細 鏍煎瓙鐨勫搴� - 锛堢粰瀛愬唴鐜荤拑鐨勫昂瀵�+闂磋窛锛�
-        if (CollectionUtils.isNotEmpty(slotRemainMap)) {
+        Map<Integer, Double> slotRemainMap = new HashMap<>();
+        //鏄惁瀛樺湪鏈夋牸瀛愰潪绌虹殑鐜荤拑
+        if (CollectionUtils.isNotEmpty(inSlotGlassList)) {
+            //瀛樺湪  灏嗘牸瀛愬唴鐨勭幓鐠冨垎鍒繘琛屾洿鏂�
+            slotRemainMap = inSlotGlassList.stream()
+                    .collect(Collectors.groupingBy(BigStorageCageDetails::getSlot, Collectors.summingDouble(item -> Math.max(item.getWidth(), item.getHeight()) + glassGap)));
             slotRemainMap.forEach((e, v) -> {
-                bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth - v)
+                double remainWidth = slotWidth - v >= 0 ? slotWidth - v : 0;
+                bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, remainWidth)
                         .eq(BigStorageCage::getSlot, e));
             });
         }
-        //鍙洿鏂拌繘绗煎畬鎴愮殑鐘舵�侊紝濡傛灉杩涚瀹屾垚锛屾牸瀛愬唴蹇呭畾鏈夌幓鐠冿紝涓嶅瓨鍦ㄥ嚭鐗囧悗鏍煎瓙鍐呮病鏈夌幓鐠冪殑鎯呭喌锛屾墍鏈夋牸瀛愬昂瀵搁噸缃紝鍙兘瀛樺湪浜庡嚭鐗囦换鍔�
-        if (!flag) {
-            Set<Integer> remainSlotList = slotRemainMap.keySet();
-            slotList.removeAll(remainSlotList);
-            if (CollectionUtils.isNotEmpty(slotList)) {
-                bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth)
-                        .in(BigStorageCage::getSlot, slotList));
-            }
+        //杩囨护涓嶅瓨鍦ㄧ幓鐠冪殑鏍煎瓙 灏嗗搴﹂噸缃负鍘熷瀹藉害5000
+        Set<Integer> remainSlotList = slotRemainMap.keySet();
+        slotList.removeAll(remainSlotList);
+        if (CollectionUtils.isNotEmpty(slotList)) {
+            bigStorageCageService.update(new LambdaUpdateWrapper<BigStorageCage>().set(BigStorageCage::getRemainWidth, slotWidth)
+                    .in(BigStorageCage::getSlot, slotList));
         }
-
     }
 
     public Boolean computeIsRun(int line, String glassId) {
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml
index 6dc9dfd..3bb68c2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-cz.yml
@@ -14,6 +14,11 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        pp:
+          url: jdbc:mysql://192.168.1.199: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/CacheVerticalGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml
index b4d7552..25a3889 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-dev.yml
@@ -14,6 +14,11 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        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
   cloud:
     nacos:
       discovery:
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml
index 25593bb..95262e6 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application-prod.yml
@@ -14,6 +14,11 @@
           username: sa
           password: beibo.123/
           driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
+        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/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
index d7124b8..d902299 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -3,7 +3,7 @@
 
 spring:
   profiles:
-    active: cz
+    active: prod
   application:
     name: cacheVerticalGlass
 mybatis-plus:
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index b49e679..2c93d87 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -44,13 +44,15 @@
     </select>
 
     <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
-        SELECT TEMPERING_LAYOUT_ID,
+        SELECT ENGINEER_ID,
+               TEMPERING_LAYOUT_ID,
                COUNT(DISTINCT SLOT) as SLOT_COUNT
         FROM BIG_STORAGE_CAGE_DETAILS
         WHERE STATE = 100
         GROUP BY ENGINEER_ID,
                  TEMPERING_LAYOUT_ID
-        HAVING SLOT_COUNT &gt;= #{count} LIMIT 1
+        HAVING SLOT_COUNT &gt;= #{count}
+        ORDER BY SLOT_COUNT DESC
     </select>
     <select id="queryGlassMaxAndMin" resultMap="slotSequenceDTO">
         SELECT T.*,
@@ -71,4 +73,18 @@
                  INNER JOIN BIG_STORAGE_CAGE T1 ON T.SLOT = T1.SLOT
         ORDER BY T.MAX_SEQUENCE DESC
     </select>
+
+    <update id="updateBySlot">
+        update big_storage_cage_details
+        <set>
+            state = #{state}
+        </set>
+        <where>
+            (glass_id,slot) in (
+            <foreach collection="list" item="item" separator=",">
+                (#{item.glassId}, #{item.targetSlot})
+            </foreach>
+            )
+        </where>
+    </update>
 </mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java
new file mode 100644
index 0000000..700a1c1
--- /dev/null
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/job/push.java
@@ -0,0 +1,54 @@
+package com.mes.job;
+
+import cn.hutool.json.JSONObject;
+
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
+import com.mes.shelfrack.service.ShelfRackService;
+import com.mes.storagetask.entity.request.StorageTaskRequest;
+import com.mes.storagetask.service.StorageTaskService;
+import com.mes.tools.WebSocketServer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Component
+public class push {
+
+    @Autowired
+    private StorageTaskService storageTaskService;
+    @Autowired
+    private ShelfRackService shelfRackService;
+
+
+    @Scheduled(fixedDelay = 2000)
+    public void sendDownWorkstations() {
+        log.info("鍙戦�佷换鍔′俊鎭拰鏋跺瓙淇℃伅");
+        JSONObject jsonObject = new JSONObject();
+
+        List<RawUsageAndShelfRack> rack =  shelfRackService.selectshelf_rack();
+        List<StorageTaskRequest>  tasks =  storageTaskService.Tasks();
+
+        jsonObject.append("rack",rack);
+        jsonObject.append("tasks",tasks);
+        log.info(jsonObject.toString());
+        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("storageTask");
+        if (sendwServer != null) {
+            for (WebSocketServer webserver : sendwServer) {
+                if (webserver != null&&webserver.session.isOpen()) {
+                    log.info("宸插彂閫�");
+                    webserver.sendMessage(String.valueOf(jsonObject));
+                }
+            }
+        }
+    }
+
+
+}
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/entity/LoadPosition.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/entity/LoadPosition.java
index 494c66f..99f32ec 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/entity/LoadPosition.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/loadposition/entity/LoadPosition.java
@@ -1,5 +1,7 @@
 package com.mes.loadposition.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -27,8 +29,8 @@
     /**
      *   
      */
-    @ApiModelProperty(" ")
-    private Long id;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
 
     /**
      *  鏋跺瓙缂栧彿
@@ -58,7 +60,7 @@
      *  浠撳偍浠诲姟缂栧彿
      */
     @ApiModelProperty("浠撳偍浠诲姟缂栧彿")
-    private Long storageTaskId;
+    private Integer storageTaskId;
 
     /**
      *  涓婄墖浣嶇被鍨�
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/controller/RawUsageController.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/controller/RawUsageController.java
index 9f95757..1518f75 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/controller/RawUsageController.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/controller/RawUsageController.java
@@ -1,5 +1,6 @@
 package com.mes.rawusage.controller;
 
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
 import com.mes.utils.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -80,8 +81,8 @@
      */
     @ApiOperation(value = "淇敼", notes = "淇敼鏁版嵁")
     @ApiResponses({@ApiResponse(code = 200, message = "鎿嶄綔鎴愬姛")})
-    @PutMapping
-    public Result update( @RequestBody RawUsage rawUsage) {
+    @PostMapping("/updaterawUsage")
+    public Result updaterawUsage(@RequestBody RawUsage rawUsage) {
         boolean result = rawUsageService.updateById(rawUsage);
         return Result.success(result);
     }
@@ -89,14 +90,30 @@
     /**
      * 鍒犻櫎
      *
-     * @param id
+     * @param
      * @return
      */
     @ApiOperation(value = "鍒犻櫎", notes = "鍒犻櫎鏁版嵁")
-    @DeleteMapping("/{id}")
-    public Result delete(@PathVariable("id") Long id) {
-        int result = rawUsageService.getBaseMapper().deleteById(id);
-        return Result.success(result);
+    @PostMapping("/id")
+    public Result delete(@RequestBody RawUsage rawUsage) {
+         rawUsageService.updateRawPackageAndStorageRack(rawUsage);
+        return Result.success();
     }
 
+    @ApiOperation(value = "鍏ュ簱", notes = "鍏ュ簱")
+    @PostMapping("/inStorage")
+    public Result inStorage(@RequestBody RawUsageAndShelfRack rawUsage) {
+        rawUsageService.inStorage(rawUsage);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍑哄簱", notes = "鍑哄簱")
+    @PostMapping("/outStorage")
+    public Result outStorage(@RequestBody RawUsageAndShelfRack rawUsage) {
+        rawUsageService.outStorage(rawUsage);
+        return Result.success();
+    }
+
+
+
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/entity/RawUsage.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/entity/RawUsage.java
index 4715716..de0b617 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/entity/RawUsage.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/entity/RawUsage.java
@@ -2,6 +2,9 @@
 
 import java.io.Serializable;
 import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -27,8 +30,8 @@
     /**
      *   
      */
-    @ApiModelProperty(" ")
-    private Long id;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
 
     /**
      *  鐜荤拑绫诲瀷
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/RawUsageService.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/RawUsageService.java
index dea687f..900e4a1 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/RawUsageService.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/RawUsageService.java
@@ -2,6 +2,8 @@
 
 import com.mes.rawusage.entity.RawUsage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.shelfrack.entity.ShelfRack;
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
 
 import java.util.List;
 /**
@@ -12,6 +14,23 @@
 
     List<RawUsage> findList(RawUsage params);
 
+    /**
+     * @param raw
+     * 淇敼
+     */
+    void updateRawPackageAndStorageRack(RawUsage raw);
 
+    /**
+     * @param raw
+     * 鍏ュ簱
+     */
+    void inStorage(RawUsageAndShelfRack raw);
+
+
+    /**
+     * @param raw
+     * 鍑哄簱
+     */
+    void outStorage(RawUsageAndShelfRack raw);
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/impl/RawUsageServiceImpl.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/impl/RawUsageServiceImpl.java
index 108908d..69f120f 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/impl/RawUsageServiceImpl.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/rawusage/service/impl/RawUsageServiceImpl.java
@@ -6,9 +6,20 @@
 import com.mes.rawusage.mapper.RawUsageMapper;
 import com.mes.rawusage.entity.RawUsage;
 import com.mes.rawusage.service.RawUsageService;
+import com.mes.shelfrack.entity.ShelfRack;
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
+import com.mes.shelfrack.mapper.ShelfRackMapper;
+import com.mes.storagetask.entity.StorageTask;
+import com.mes.storagetask.mapper.StorageTaskMapper;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+
+import java.lang.reflect.InvocationTargetException;
+import java.time.LocalDateTime;
 import java.util.List;
+
+import static cn.hutool.core.date.DateTime.now;
 
 /**
  * @author system
@@ -19,6 +30,10 @@
 
     @Autowired
     private RawUsageMapper rawUsageMapper;
+    @Autowired
+    private ShelfRackMapper shelfRackMapper;
+    @Autowired
+    private StorageTaskMapper storageTaskMapper;
 
     @Override
     public List<RawUsage> findList(RawUsage params){
@@ -26,6 +41,98 @@
         return rawUsageMapper.selectList(query);
     }
 
+    @Override
+    public void updateRawPackageAndStorageRack(RawUsage raw) {
+        // Step 1: 鏌ヨraw_package_id
+        LambdaQueryWrapper<ShelfRack> queryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
+                .eq(ShelfRack::getNumber, raw.getId());
+        ShelfRack shelfRack = shelfRackMapper.selectOne(queryWrapper);
+        if (shelfRack == null) {
+            throw new RuntimeException("鏈壘鍒颁笌鎸囧畾璐ф灦ID鍏宠仈鐨勫師鏂欏寘淇℃伅");
+        }
+
+
+        // Step 2: 鏇存柊raw_package琛�
+        RawUsage rawUsage=new RawUsage();
+
+        rawUsage.setState("绌洪棽");
+        rawUsage.setId(shelfRack.getRawPackageId());
+        rawUsageMapper.updateById(rawUsage);
+
+        // Step 3: 鏇存柊storage_rack琛�
+
+        ShelfRack rack = new ShelfRack();
+        rack.setState("绌洪棽");
+        rack.setRawPackageId(null);  // 璁剧疆RawPackageId涓虹壒瀹氱殑绌哄�硷紝渚嬪0
+        LambdaQueryWrapper<ShelfRack> queryWrapper2 = Wrappers.lambdaQuery(ShelfRack.class)
+                .eq(ShelfRack::getNumber, raw.getId());
+        shelfRackMapper.update(rack, queryWrapper2);
+
+
+    }
+
+
+
+
+
+    @Override
+    public void inStorage(RawUsageAndShelfRack raw) {
+        RawUsage rawPackage = new RawUsage();
+        BeanUtils.copyProperties(raw,rawPackage);
+        rawPackage.setRawType(raw.getRawThickness() + raw.getColor());
+        rawPackage.setState("浣跨敤涓�");
+        rawPackage.setLeftPieces(rawPackage.getPieces());
+        rawUsageMapper.insert(rawPackage);
+
+        // 鏇存柊鏋惰〃
+        ShelfRack rack = new ShelfRack();
+        rack.setState("浣跨敤涓�");
+        rack.setRawPackageId(rawPackage.getId());  // 璁剧疆RawPackageId涓虹壒瀹氱殑绌哄�硷紝渚嬪0
+        LambdaQueryWrapper<ShelfRack> queryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
+                .eq(ShelfRack::getNumber, raw.getNumber());
+        shelfRackMapper.update(rack, queryWrapper);
+        StorageTask storageTask=new StorageTask();
+        storageTask.setTaskState("绛夊緟涓�");
+        storageTask.setTaskType("浠庝粨浣嶅埌鍚婅浣�");
+        storageTask.setLoadRack(raw.getLoadRack());
+        storageTask.setShelfRack(raw.getNumber());
+        storageTask.setRouteGroup(1);
+        storageTask.setStartTime(now());
+        storageTask.setFinishTime(now());
+        insertTask(storageTask);
+
+
+    }
+
+
+    @Override
+    public void outStorage(RawUsageAndShelfRack raw) {
+        ShelfRack rack = new ShelfRack();
+        rack.setState("绛夊緟鍑哄簱");
+        rack.setRawPackageId(null);  // 璁剧疆RawPackageId涓虹壒瀹氱殑绌哄�硷紝渚嬪0
+        LambdaQueryWrapper<ShelfRack> queryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
+                .eq(ShelfRack::getNumber, raw.getNumber());
+        shelfRackMapper.update(rack, queryWrapper);
+
+
+        StorageTask storageTask=new StorageTask();
+        storageTask.setTaskState("绛夊緟涓�");
+        storageTask.setTaskType("浠庝粨浣嶅埌鍚婅浣�");
+        storageTask.setLoadRack(raw.getLoadRack());
+        storageTask.setShelfRack(raw.getNumber());
+        storageTask.setRouteGroup(1);
+        storageTask.setStartTime(now());
+        storageTask.setFinishTime(now());
+        insertTask(storageTask);
+    }
+
+
+    public void insertTask(StorageTask storageTask) {
+        storageTaskMapper.insert(storageTask);
+
+    }
+
+
 
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java
index cc226f8..91ad4a7 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/controller/ShelfRackController.java
@@ -1,5 +1,6 @@
 package com.mes.shelfrack.controller;
 
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
 import com.mes.utils.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -105,7 +106,7 @@
     @ApiResponses({@ApiResponse(code = 200, message = "鏌ヨ鎴愬姛")})
     @GetMapping("/findshelfrack")
     public Result findshelfrack() {
-        List<Map<String, Object>> result = shelfRackService.selectshelf_rack();
+        List<RawUsageAndShelfRack> result = shelfRackService.selectshelf_rack();
         return Result.success(result);
     }
 
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/ShelfRack.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/ShelfRack.java
index b980e3f..f01efbf 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/ShelfRack.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/ShelfRack.java
@@ -2,6 +2,9 @@
 
 import java.io.Serializable;
 import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -27,8 +30,8 @@
     /**
      *   
      */
-    @ApiModelProperty(" ")
-    private Long id;
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
 
     /**
      *  鏋跺瓙缂栧彿
@@ -46,7 +49,7 @@
      *  鍖呭彿缂栧彿
      */
     @ApiModelProperty("鍖呭彿缂栧彿")
-    private Long rawPackageId;
+    private Integer rawPackageId;
 
     /**
      *  淇敼鏃堕棿
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/request/RawUsageAndShelfRack.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/request/RawUsageAndShelfRack.java
new file mode 100644
index 0000000..2af2aca
--- /dev/null
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/entity/request/RawUsageAndShelfRack.java
@@ -0,0 +1,76 @@
+package com.mes.shelfrack.entity.request;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+
+@EqualsAndHashCode(callSuper = false)
+public class RawUsageAndShelfRack {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("ID")
+    private Integer id;
+
+    @ApiModelProperty("鐜荤拑绫诲瀷")
+    private String rawType;
+
+    @ApiModelProperty("瀹藉害")
+    private Float rawWidth;
+
+    @ApiModelProperty("楂樺害")
+    private Float rawHeight;
+
+    @ApiModelProperty("鍘氬害")
+    private Float rawThickness;
+
+    @ApiModelProperty("棰滆壊")
+    private String color;
+
+    @ApiModelProperty("鎬绘暟閲�")
+    private Integer pieces;
+
+    @ApiModelProperty("鍓╀綑鏁伴噺")
+    private Integer leftPieces;
+
+    @ApiModelProperty("鐗╂枡缂栫爜")
+    private String qrcode;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+
+    private Date createTime;
+
+
+
+    private Date productionTime;
+
+    @ApiModelProperty("鎵规鍙�")
+    private String batchId;
+
+    @ApiModelProperty("鏋跺瓙缂栧彿")
+    private String number;
+
+    @ApiModelProperty("宸ヤ綔鐘舵��")
+    private String state;
+
+    @ApiModelProperty("鍖呭彿缂栧彿")
+    private Integer rawPackageId;
+
+
+    private Date modTime;
+
+    @ApiModelProperty("鍚敤鐘舵��")
+    private String enableState;
+
+    @ApiModelProperty("涓婄墖浣嶇紪鍙�")
+    private String loadRack;
+
+
+}
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java
index bea1293..87bbbfd 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/mapper/ShelfRackMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.shelfrack.entity.ShelfRack;
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
 
 import java.util.List;
 import java.util.Map;
@@ -18,5 +19,5 @@
 public interface ShelfRackMapper extends MPJBaseMapper<ShelfRack> {
 
 
-    List<Map<String, Object>> selectshelf_rack();
+    List<RawUsageAndShelfRack> selectshelf_rack();
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java
index bb0bdb0..39102e0 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/ShelfRackService.java
@@ -2,6 +2,7 @@
 
 import com.mes.shelfrack.entity.ShelfRack;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
 
 import java.util.List;
 import java.util.Map;
@@ -14,6 +15,6 @@
 
     List<ShelfRack> findList(ShelfRack params);
 
-    List<Map<String, Object>> selectshelf_rack();
+    List<RawUsageAndShelfRack> selectshelf_rack();
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java
index 85d4adc..8171037 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/shelfrack/service/impl/ShelfRackServiceImpl.java
@@ -7,6 +7,7 @@
 import com.github.yulichang.toolkit.JoinWrappers;
 import com.mes.common.config.Const;
 import com.mes.rawusage.entity.RawUsage;
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
 import com.mes.shelfrack.mapper.ShelfRackMapper;
 import com.mes.shelfrack.entity.ShelfRack;
 import com.mes.shelfrack.service.ShelfRackService;
@@ -51,7 +52,7 @@
 
 
     @Override
-    public  List<Map<String, Object>> selectshelf_rack() {
+    public  List<RawUsageAndShelfRack> selectshelf_rack() {
         return baseMapper.selectshelf_rack();
     }
 
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java
index 0678559..0157fee 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/controller/StorageTaskController.java
@@ -1,5 +1,7 @@
 package com.mes.storagetask.controller;
 
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
+import com.mes.storagetask.entity.request.StorageTaskRequest;
 import com.mes.utils.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -106,9 +108,22 @@
     @ApiResponses({@ApiResponse(code = 200, message = "鏌ヨ鎴愬姛")})
     @GetMapping("/findTasks")
     public Result findLatestTasks() {
-        List<Map<String, Object>> result = storageTaskService.Tasks();
+        List<StorageTaskRequest> result = storageTaskService.Tasks();
         return Result.success(result);
     }
 
 
+
+    @ApiOperation(value = "浠诲姟鎿嶄綔", notes = "浠诲姟鎿嶄綔")
+    @PostMapping("/taskUpdate")
+    public Result taskUpdate(@RequestBody Map<String, Object> storageTaskMap) {
+
+        StorageTask task = new StorageTask();
+        task.setType((String) storageTaskMap.get("Type")); // 鍋囪Type鏄瓨鍌ㄥ湪Map涓殑涓�涓敭
+        task.setId((int) storageTaskMap.get("id"));
+        storageTaskService.taskUpdate(task);
+        return Result.success();
+    }
+
+
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/StorageTask.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/StorageTask.java
index 612f8e3..e037a41 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/StorageTask.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/StorageTask.java
@@ -2,11 +2,15 @@
 
 import java.io.Serializable;
 import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.apache.xmlbeans.impl.xb.xsdschema.Public;
 import org.springframework.stereotype.Component;
 
 /**
@@ -27,9 +31,8 @@
     /**
      *   
      */
-    @ApiModelProperty(" ")
-    private Long id;
-
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
     /**
      *  浠诲姟绫诲瀷
      */
@@ -72,6 +75,8 @@
     @ApiModelProperty("瀹屾垚鏃堕棿")
     private Date finishTime;
 
+    @ApiModelProperty("鍓嶇浠诲姟绫诲瀷")
+    private String Type;
 
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/request/StorageTaskRequest.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/request/StorageTaskRequest.java
new file mode 100644
index 0000000..9c7dd09
--- /dev/null
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/entity/request/StorageTaskRequest.java
@@ -0,0 +1,77 @@
+package com.mes.storagetask.entity.request;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class StorageTaskRequest {
+
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 浠诲姟绫诲瀷
+     */
+    @ApiModelProperty("浠诲姟绫诲瀷")
+    private String taskType;
+
+
+
+    @ApiModelProperty("鍓嶇浠诲姟绫诲瀷")
+    private String Type;
+
+    /**
+     * 宸ヤ綔鐘舵��
+     */
+    @ApiModelProperty("宸ヤ綔鐘舵��")
+    private String taskState;
+
+    /**
+     * 浠撳偍鏋跺彿
+     */
+    @ApiModelProperty("浠撳偍鏋跺彿")
+    private String shelfRack;
+
+    /**
+     * 涓婄墖浣嶇紪鍙�
+     */
+    @ApiModelProperty("涓婄墖浣嶇紪鍙�")
+    private String loadRack;
+
+    /**
+     * 绾胯矾
+     */
+    @ApiModelProperty("绾胯矾")
+    private Integer routeGroup;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private Date startTime;
+
+    /**
+     * 瀹屾垚鏃堕棿
+     */
+    @ApiModelProperty("瀹屾垚鏃堕棿")
+    private Date finishTime;
+
+    @ApiModelProperty("棰滆壊")
+    private String color;
+
+    @ApiModelProperty("鍘氬害")
+    private Float rawThickness;
+
+
+}
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java
index f2737a1..ca5a765 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/mapper/StorageTaskMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.storagetask.entity.StorageTask;
+import com.mes.storagetask.entity.request.StorageTaskRequest;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -19,6 +20,6 @@
 public interface StorageTaskMapper extends BaseMapper<StorageTask> {
 
 
-    List<Map<String, Object>> selectTasks();
+    List<StorageTaskRequest>  selectTasks();
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java
index bad474f..b46250b 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/StorageTaskService.java
@@ -2,6 +2,7 @@
 
 import com.mes.storagetask.entity.StorageTask;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.mes.storagetask.entity.request.StorageTaskRequest;
 
 import java.util.List;
 import java.util.Map;
@@ -17,5 +18,7 @@
 
     Map<String, Optional<StorageTask>> findLatestTasks();
 
-    List<Map<String, Object>> Tasks();
+    List<StorageTaskRequest>  Tasks();
+
+    void taskUpdate(StorageTask storageTask);
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java
index 04cb2d7..876d202 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/java/com/mes/storagetask/service/impl/StorageTaskServiceImpl.java
@@ -3,6 +3,14 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mes.loadposition.entity.LoadPosition;
+import com.mes.loadposition.mapper.LoadPositionMapper;
+import com.mes.rawusage.entity.RawUsage;
+import com.mes.rawusage.mapper.RawUsageMapper;
+import com.mes.shelfrack.entity.ShelfRack;
+import com.mes.shelfrack.entity.request.RawUsageAndShelfRack;
+import com.mes.shelfrack.mapper.ShelfRackMapper;
+import com.mes.storagetask.entity.request.StorageTaskRequest;
 import com.mes.storagetask.mapper.StorageTaskMapper;
 import com.mes.storagetask.entity.StorageTask;
 import com.mes.storagetask.service.StorageTaskService;
@@ -25,6 +33,13 @@
 
     @Autowired
     private StorageTaskMapper storageTaskMapper;
+    @Autowired
+    private LoadPositionMapper loadPositionMapper;
+    @Autowired
+    private ShelfRackMapper shelfRackMapper;
+    @Autowired
+    private RawUsageMapper rawUsageMapper;
+
 
     @Override
     public List<StorageTask> findList(StorageTask params){
@@ -56,12 +71,97 @@
 
 
     @Override
-    public  List<Map<String, Object>> Tasks() {
+    public   List<StorageTaskRequest>  Tasks() {
         return baseMapper.selectTasks();
     }
 
 
 
+    @Override
+    public void taskUpdate(StorageTask request) {
+        Integer taskId = request.getId();
+        String taskType = request.getTaskType();
+        String Type = request.getType();
+        String taskState = request.getTaskState();
+        String shelfRack = request.getShelfRack();
+        String loadRack = request.getLoadRack();
+
+        if ("閲嶆柊寮�濮�".equals(Type)) {
+            StorageTask storageTask = new StorageTask();
+            storageTask.setTaskState("绛夊緟涓�");
+            LambdaQueryWrapper<StorageTask> queryWrapper = Wrappers.lambdaQuery(StorageTask.class)
+                    .eq(StorageTask::getId, request.getId());
+            storageTaskMapper.update(request,queryWrapper);
+        } else if ("瀹屾垚".equals(Type)) {
+            StorageTask existingTask = storageTaskMapper.selectById(taskId);
+            if (existingTask != null && "姝e湪宸ヤ綔".equals(existingTask.getTaskState())) {
+                if ("浠庝粨浣嶅埌涓婄墖浣�".equals(taskType) || "浠庝粨浣嶅埌鍚婅浣�".equals(taskType)) {
+                    LoadPosition loadPosition = new LoadPosition();
+                    loadPosition.setState("姝e湪浣跨敤");
+                    loadPosition.setStorageTaskId(request.getId());
+                    LambdaQueryWrapper<LoadPosition> queryWrapper = Wrappers.lambdaQuery(LoadPosition.class)
+                            .eq(LoadPosition::getNumber, request.getLoadRack());
+                    loadPositionMapper.update(loadPosition, queryWrapper);
+                    StorageTask storageTask = new StorageTask();
+                    storageTask.setTaskState("姝e湪浣跨敤");
+                    LambdaQueryWrapper<StorageTask> StorageTaskqueryWrapper = Wrappers.lambdaQuery(StorageTask.class)
+                            .eq(StorageTask::getId, request.getId());
+                    storageTaskMapper.update(request,StorageTaskqueryWrapper);
+                } else if ("浠庝笂鐗囦綅鍒颁粨浣�".equals(taskType)) {
+                    LoadPosition loadPosition = new LoadPosition();
+                    loadPosition.setState("浣跨敤涓�");
+                    loadPosition.setStorageTaskId(null);
+                    LambdaQueryWrapper<LoadPosition> queryWrapper = Wrappers.lambdaQuery(LoadPosition.class)
+                            .eq(LoadPosition::getNumber, request.getLoadRack());
+                    loadPositionMapper.update(loadPosition, queryWrapper);
+                    ShelfRack loshelfRack = new ShelfRack();
+                    LambdaQueryWrapper<RawUsage> RawUsagequeryWrapper = Wrappers.lambdaQuery(RawUsage.class)
+                            .eq(RawUsage::getId,loshelfRack.getRawPackageId());
+                    RawUsage RawUsage = rawUsageMapper.selectOne(RawUsagequeryWrapper);
+                    if(RawUsage.getLeftPieces()==0){
+                        loshelfRack.setState("绌洪棽");
+                    }else {
+                        loshelfRack.setState("浣跨敤涓�");
+                    }
+                    LambdaQueryWrapper<ShelfRack> loshelfRackqueryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
+                            .eq(ShelfRack::getNumber, request.getLoadRack());
+                    shelfRackMapper.update(loshelfRack, loshelfRackqueryWrapper);
+                } else if ("浠庡悐瑁呬綅鍒颁粨浣�".equals(taskType)) {
+                    LoadPosition loadPosition = new LoadPosition();
+                    loadPosition.setState("绌洪棽");
+                    loadPosition.setStorageTaskId(null);
+                    LambdaQueryWrapper<LoadPosition> queryWrapper = Wrappers.lambdaQuery(LoadPosition.class)
+                            .eq(LoadPosition::getNumber, request.getLoadRack());
+                    loadPositionMapper.update(loadPosition, queryWrapper);
+                    ShelfRack loshelfRack = new ShelfRack();
+                    LambdaQueryWrapper<RawUsage> RawUsagequeryWrapper = Wrappers.lambdaQuery(RawUsage.class)
+                            .eq(RawUsage::getId,loshelfRack.getRawPackageId());
+                    RawUsage RawUsage = rawUsageMapper.selectOne(RawUsagequeryWrapper);
+                    if(RawUsage.getLeftPieces()==1){
+                        loshelfRack.setEnableState("鍚敤");
+                    }else {
+                        loshelfRack.setEnableState(loshelfRack.getEnableState());
+                    }
+                    loadPosition.setState("浣跨敤涓�");
+                    LambdaQueryWrapper<ShelfRack> loshelfRackqueryWrapper = Wrappers.lambdaQuery(ShelfRack.class)
+                            .eq(ShelfRack::getNumber, request.getLoadRack());
+                    shelfRackMapper.update(loshelfRack, loshelfRackqueryWrapper);
+                }
+                StorageTask storageTask = new StorageTask();
+                storageTask.setTaskState("宸插畬鎴�");
+                LambdaQueryWrapper<StorageTask> StorageTaskqueryWrapper = Wrappers.lambdaQuery(StorageTask.class)
+                        .eq(StorageTask::getId, request.getId());
+                storageTaskMapper.update(storageTask, StorageTaskqueryWrapper);
+            }
+        } else if ("鍒犻櫎".equals(Type)) {
+
+            LambdaQueryWrapper<StorageTask> StorageTaskqueryWrapper = Wrappers.lambdaQuery(StorageTask.class)
+                    .eq(StorageTask::getId, request.getId());
+            storageTaskMapper.delete(StorageTaskqueryWrapper);
+        }
+    }
+
+
 
 
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml
index 0e13316..576b9a9 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/ShelfRackMapper.xml
@@ -2,15 +2,24 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.mes.shelfrack.mapper.ShelfRackMapper">
 
-
-        <select id="selectshelf_rack" resultType="java.util.Map">
-        <![CDATA[
-            SELECT a.number, b.raw_type, b.raw_width, b.raw_height, b.raw_thickness, b.left_pieces, a.mod_time, a.enable_state, b.pieces,
-                   datediff(now(), b.create_time) as rukutime,
-                   concat(if(ROUND(b.left_pieces / b.pieces * 100, 0) < 20, 20, ROUND(b.left_pieces / b.pieces * 100, 0)), '%') as bfb
-            FROM shelf_rack AS a
-                     LEFT JOIN raw_usage AS b ON a.raw_package_id = b.id
-            ]]>
-    </select>
+    <resultMap id="ShelfRackResultMap" type="com.mes.shelfrack.entity.request.RawUsageAndShelfRack">
+        <result property="number" column="number"/>
+        <result property="rawType" column="raw_type"/>
+        <result property="rawWidth" column="raw_width"/>
+        <result property="rawHeight" column="raw_height"/>
+        <result property="rawThickness" column="raw_thickness"/>
+        <result property="enableState" column="enable_state"/>
+        <result property="pieces" column="pieces"/>
+        <result property="createTime" column="createTime"  />
+        <result property="batchId" column="batch_id"/>
+    </resultMap>
+    <select id="selectshelf_rack" resultMap="ShelfRackResultMap">
+    <![CDATA[
+        SELECT a.number, b.raw_type, b.raw_width, b.raw_height, b.raw_thickness, a.enable_state, b.pieces,
+               b.batch_id,DATE_FORMAT(b.create_time, '%Y-%m-%d %H:%i:%s') as createTime
+        FROM shelf_rack AS a
+                 LEFT JOIN raw_usage AS b ON a.raw_package_id = b.id
+        ]]>
+</select>
 
 </mapper>
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml
index 9fb2ca0..a526c7c 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/main/resources/mapper/StorageTaskMapper.xml
@@ -3,8 +3,21 @@
 <mapper namespace="com.mes.storagetask.mapper.StorageTaskMapper">
 
 
+    <resultMap id="StorageTaskRequest" type="com.mes.storagetask.entity.request.StorageTaskRequest">
+        <result property="loadRack" column="load_rack"/>
+        <result property="color" column="color"/>
+        <result property="taskState" column="task_state"/>
+        <result property="shelfRack" column="shelf_rack"/>
+        <result property="startTime" column="start_time"/>
+        <result property="rawThickness" column="raw_thickness"/>
+        <result property="routeGroup" column="route_group"/>
+        <result property="id" column="id"  />
+        <result property="taskType" column="task_type"/>
+    </resultMap>
 
-    <select id="selectTasks" resultType="java.util.Map">
+
+
+    <select id="selectTasks" resultMap="StorageTaskRequest">
         <![CDATA[
         SELECT d.*, g.raw_thickness, g.color
         FROM (
diff --git a/hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java b/hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
index 4f0bd8b..022d334 100644
--- a/hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/GlassStorageModule/src/test/java/mes/GlassStorageModuleApplicationTest.java
@@ -1,6 +1,9 @@
 package mes;
 
 import com.mes.GlassStorageApplication;
+import com.mes.rawusage.entity.RawUsage;
+import com.mes.rawusage.service.RawUsageService;
+import com.mes.shelfrack.entity.ShelfRack;
 import com.mes.shelfrack.service.ShelfRackService;
 import com.mes.storagetask.entity.StorageTask;
 import com.mes.storagetask.service.StorageTaskService;
@@ -30,6 +33,8 @@
     private StorageTaskService storageTaskService;
     @Autowired
     private ShelfRackService shelfRackService;
+    @Autowired
+    private RawUsageService rawUsageService;
 
 
     @Test
@@ -57,6 +62,13 @@
 
 
 
+    @Test
+    public void updateRawPackageAndStorageRack() {
+        RawUsage raw=new RawUsage();
+
+        raw.setId(null);
+        rawUsageService.updateRawPackageAndStorageRack(raw);
+    }
 
 
 
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
index 2c15c6c..f6a69e4 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/downworkstation/controller/DownWorkstationController.java
@@ -77,17 +77,9 @@
         // 璋冪敤 DownWorkstationService 涓殑鏂规硶娓呴櫎鎸囧畾宸ヤ綅ID鐨勪俊鎭�
         int workstationId = (int) requestData.get("workstationId");
 
-        int totalWorkstations = downWorkstationService.getTotalQuantity(workstationId);
-        int downWorkstations = downWorkstationService.getRacksNumber(workstationId);
-
-
-        if (downWorkstations == totalWorkstations) {
             downWorkstationService.clearFlowCardId(workstationId);
             return Result.build(200, "娓呴櫎宸ヤ綅淇℃伅鎴愬姛", 1);
-        } else {
-            // 濡傛灉鎬绘暟閲忓拰钀芥灦鏁伴噺涓嶄竴鑷达紝杩斿洖閿欒鍝嶅簲
-            return Result.build(500, "娓呴櫎宸ヤ綅淇℃伅澶辫触", 1);
-        }
+
 
 
         // 鏋勫缓鍝嶅簲鏁版嵁
diff --git a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
index 841570f..7e31c30 100644
--- a/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
+++ b/hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/DownLoadCacheGlassTask.java
@@ -134,13 +134,15 @@
         log.info("2銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", nearestEmpty);
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
         Assert.isFalse(null == glassInfo, "鐜荤拑淇℃伅涓嶅瓨鍦�");
-        if ("1".equals(requestWord) && (glassInfo.getWidth() > throughWidth || glassInfo.getHeight() > throughHeight)) {
-            log.info("鐜荤拑褰撳墠灏哄瀹斤細{}锛岄珮锛歿}鍙兘鐩撮�氾紝褰撳墠杩涚墖浠诲姟闇�绛夊緟", glassInfo.getWidth(), glassInfo.getHeight());
+        double glassWidth = Math.max(glassInfo.getWidth(), glassInfo.getHeight());
+        double glassHeight = Math.min(glassInfo.getWidth(), glassInfo.getHeight());
+        if ("1".equals(requestWord) && (glassWidth > throughWidth || glassHeight > throughHeight)) {
+            log.info("鐜荤拑褰撳墠灏哄瀹斤細{}锛岄珮锛歿}鍙兘鐩撮�氾紝褰撳墠杩涚墖浠诲姟闇�绛夊緟", glassWidth, glassHeight);
             return;
         }
         Boolean checkFlag = Boolean.FALSE;
         //鐜荤拑灏哄鏄惁璧颁汉宸ヤ笅鐗�
-        if (glassInfo.getWidth() > maxWidth || glassInfo.getHeight() > maxHeight || glassInfo.getWidth() < minWidth || glassInfo.getHeight() < minHeight) {
+        if (glassWidth > maxWidth || glassHeight > maxHeight || glassWidth < minWidth || glassHeight < minHeight) {
             log.info("璇ョ幓鐠冨昂瀵镐笉绗﹀悎瑕佹眰锛岄渶瑕佽蛋浜哄伐涓嬬墖鐩存帴杩涚墖");
         } else {
             log.info("璇ョ幓鐠冨昂瀵搁潪浜哄伐涓嬬墖");
@@ -148,6 +150,7 @@
             DownWorkstation one = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
                     .eq(DownWorkstation::getLayer, glassInfo.getLayer())
                     .eq(DownWorkstation::getFlowCardId, glassInfo.getFlowCardId()));
+            //鏄惁宸茬粡缁戝畾   true锛氬凡缁戝畾    false:鏈粦瀹�
             Boolean isBind = Boolean.FALSE;
             if (null != one) {
                 log.info("璇ユ祦绋嬪崱宸茬粦瀹氭灦瀛�");
@@ -157,7 +160,7 @@
             if (!checkFlag && !isBind) {
                 log.info("璇ョ幓鐠冪殑娴佺▼鍗℃湭缁戝畾鏋跺瓙锛岃幏鍙栨槸鍚︽湁绌烘灦瀛�");
                 List<DownWorkstation> list = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
-                        .isNull(DownWorkstation::getFlowCardId).orderByDesc(DownWorkstation::getWorkstationId));
+                        .and(on -> on.isNull(DownWorkstation::getFlowCardId).or().eq(DownWorkstation::getFlowCardId, "")).orderByDesc(DownWorkstation::getWorkstationId));
                 if (CollectionUtils.isNotEmpty(list)) {
                     log.info("鏈夌┖鏋跺瓙,灏嗘祦绋嬪崱涓庢灦瀛愬ソ缁戝畾锛屾墽琛岃繘鐗囦换鍔� 缁撴潫");
                     //缁戝畾娴佺▼鍗�
@@ -176,28 +179,31 @@
                     endLoop:
                     for (DownGlassInfoDTO e : downGlassInfoDTOList) {
                         List<GlassInfo> glassInfoList = e.getGlassInfoList();
-                        Optional<GlassInfo> glassInfoTempOptional = glassInfoList.stream().filter(item -> item.getWidth() == glassInfo.getWidth() && item.getHeight() == glassInfo.getHeight()
-                                && item.getThickness() == glassInfo.getThickness() && item.getFilmsid().equals(glassInfo.getFilmsid()))
-                                .findFirst();
-                        if (glassInfoTempOptional.isPresent()) {
-                            GlassInfo item = glassInfoTempOptional.get();
-                            //鐜荤拑鏄惁涓哄灞�
-                            checkFlag = multilayerCheck(item, Boolean.FALSE);
-                            if (checkFlag) {
-                                //鐜荤拑鏇挎崲 浠呮浛鎹㈡祦绋嬪崱id鍙婂眰鏁�
-                                String tempFlowCardId = item.getFlowCardId();
-                                Integer tempLayer = item.getLayer();
-                                String flowCardId = glassInfo.getFlowCardId();
-                                Integer layer = glassInfo.getLayer();
-                                log.info("鏇挎崲娴佺▼鍗′俊鎭�,褰撳墠鐜荤拑淇℃伅:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗},鏇挎崲鍚庣幓鐠冧俊鎭�:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗}",
-                                        item, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer);
-                                glassInfo.setFlowCardId(tempFlowCardId);
-                                glassInfo.setLayer(tempLayer);
-                                glassInfoService.updateById(glassInfo);
-                                item.setFlowCardId(flowCardId);
-                                item.setLayer(layer);
-                                glassInfoService.updateById(item);
-                                break endLoop;
+                        List<GlassInfo> glassInfoTempList = glassInfoList.stream().filter(item -> item.getWidth() == glassInfo.getWidth() && item.getHeight() == glassInfo.getHeight()
+                                && item.getThickness() == glassInfo.getThickness() && item.getFilmsid().equals(glassInfo.getFilmsid())).collect(Collectors.toList());
+                        if (CollectionUtils.isNotEmpty(glassInfoTempList)) {
+                            for (GlassInfo item : glassInfoTempList) {
+                                //鐜荤拑鏄惁涓哄灞傦細1銆佸厛鑾峰彇褰撳墠娴佺▼鍗¤惤鏋舵渶澶氱殑灞傛暟锛屽鏋滀负绌猴紝琛ㄦ槑鏈粦瀹氭祦绋嬪崱锛屾湭钀芥灦锛岀劧鍚庢寜鐓ф槸鍚﹀彲缁戝畾鏋跺瓙鍐冲畾鏄惁鏇挎崲銆傦紙鍙拷鐣ヤ笉璁★紝鏈牎楠屼粎鍦ㄥ墠涓�娆¤皟鐢ㄨ捣浣滅敤锛�
+//                                          2銆佸垽鏂惤鏋舵渶澶氱殑灞傛暟鏄惁涓哄綋鍓嶆浛鎹㈢幓鐠冪殑灞傛暟锛屾槸  鍒欒蛋鏇挎崲閫昏緫杩斿洖true
+//                                          3銆佷笉鏄渶澶氱殑灞傛暟锛岃幏鍙栬惤鏋舵渶澶氬眰鏁扮殑鐩稿悓娆″簭鐨勭幓鐠冨昂瀵镐笌褰撳墠鏇挎崲鐜荤拑鐨勫昂瀵告瘮杈冿紝鐩稿悓璧版浛鎹紝鍚﹀垯缁х画寰幆
+//                                          4銆佸崟灞傜幓鐠冪洿鎺ヨ蛋鏇挎崲
+                                checkFlag = multilayerCheck(item, Boolean.FALSE);
+                                if (checkFlag) {
+                                    //鐜荤拑鏇挎崲 浠呮浛鎹㈡祦绋嬪崱id鍙婂眰鏁�
+                                    String tempFlowCardId = item.getFlowCardId();
+                                    Integer tempLayer = item.getLayer();
+                                    String flowCardId = glassInfo.getFlowCardId();
+                                    Integer layer = glassInfo.getLayer();
+                                    log.info("鏇挎崲娴佺▼鍗′俊鎭�,褰撳墠鐜荤拑淇℃伅:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗},鏇挎崲鍚庣幓鐠冧俊鎭�:{}鐨勬祦绋嬪崱鍙穥}鍙婂眰鏁皗}",
+                                            item, glassInfo, flowCardId, layer, tempFlowCardId, tempLayer);
+                                    glassInfo.setFlowCardId(tempFlowCardId);
+                                    glassInfo.setLayer(tempLayer);
+                                    glassInfoService.updateById(glassInfo);
+                                    item.setFlowCardId(flowCardId);
+                                    item.setLayer(layer);
+                                    glassInfoService.updateById(item);
+                                    break endLoop;
+                                }
                             }
                         }
                     }
@@ -210,7 +216,6 @@
         downStorageCageDetails.setState(Const.GLASS_STATE_IN);
         downStorageCageDetails.setSlot(nearestEmpty.getSlot());
         downStorageCageDetailsService.save(downStorageCageDetails);
-
         //        鐢熸垚杩涚墖浠诲姟
         initDownGlassTask(glassInfo, 0, nearestEmpty.getSlot(), Const.GLASS_CACHE_TYPE_IN);
     }
@@ -221,9 +226,9 @@
             log.info("G06銆丟11銆丟13鍒嗗埆涓簕},{}銆亄}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", glassStatus06, glassStatus11, glassStatus13);
             return Boolean.FALSE;
         }
-
         List<DownStorageCageDetails> tempList = downStorageCageDetailsService.list(new LambdaQueryWrapper<DownStorageCageDetails>()
                 .eq(DownStorageCageDetails::getState, Const.GLASS_STATE_IN));
+        log.info("鍑虹墖1銆佺鍐呯殑鐜荤拑淇℃伅鏈夛細{}", tempList);
         //鑾峰彇寰呰繘鐗囩幓鐠�
         DownStorageCageDetails cageDetails = new DownStorageCageDetails();
         if (StringUtils.isNotBlank(glassId)) {
@@ -234,12 +239,15 @@
             cageDetails.setSlot(empty.getSlot());
             tempList.add(cageDetails);
         }
-
-        log.info("绗煎唴鐜荤拑鐨勬暟鎹湁锛歿}", tempList);
+        log.info("鍑虹墖2锛氱鍐呯幓鐠冪殑鏁版嵁(鍖呮嫭寰呰繘鐗�)鏈夛細{}", tempList);
         if (CollectionUtils.isEmpty(tempList)) {
             log.info("绗煎唴娌℃湁鐜荤拑,鏃犳硶鎵ц鍑虹墖");
             return Boolean.FALSE;
         }
+        //浼樺厛璧�08鐗囧彴鐨勭幓鐠冿細璧颁汉宸ヤ笅鐗囨垨鑰�2鍙锋満姊拌噦
+        //1銆�08鍙板繖纰岋紝浠呰蛋1鍙锋満姊拌噦
+        //2銆�08鍙扮┖闂诧紝鍏堣蛋鎵斿伐涓嬬墖鎴�2鍙锋満姊拌噦锛屾棤鐜荤拑鍑虹墖 鍦ㄨ蛋1鍙锋満姊拌噦
+        //鏈烘鑷傝绂佺敤鐨勬儏鍐典笅涓嶈兘缁х画鍚戠鐢ㄧ殑鏈烘鑷傛斁鐜荤拑
         Boolean flag08 = "1".equals(out08Glassstate) ? Boolean.TRUE : Boolean.FALSE;
         if (!flag08) {
             generateTaskByShelf(glassStatus06, glassStatus11, flag08, glassStatus13, tempList, cageDetails, glassId);
@@ -248,7 +256,6 @@
                 return generateTaskByShelf(glassStatus06, glassStatus11, !flag08, glassStatus13, tempList, cageDetails, glassId);
             }
         }
-
         return Boolean.TRUE;
     }
 
@@ -264,7 +271,6 @@
                     log.info("鏋跺瓙宸茬粡鍗犳弧锛屽灞傜幓鐠冩棤娉曟壘鍒板搴旂殑鏍煎瓙锛岄渶鎵ц鏇挎崲鐜荤拑鐨勬搷浣�");
                     return Boolean.FALSE;
                 }
-
             }
             if (downGlassInfoDTO.getLayer().equals(glassInfo.getLayer())) {
                 log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶� 鐩存帴杩涚墖");
@@ -293,7 +299,6 @@
             glassStatus13, List<DownStorageCageDetails> tempList, DownStorageCageDetails cageDetails, String glassId) {
         //鑾峰彇2涓満姊拌噦鑼冨洿鍐呯殑鏋跺瓙缁戝畾鐨勬祦绋嬪崱淇℃伅
         List<Integer> workList = new ArrayList();
-
         if (flag08) {
             if (!"2".equals(glassStatus11)) {
                 workList.addAll(Const.G11_WORK_STATION);
@@ -306,51 +311,59 @@
         List<Integer> workStationAll = Arrays.asList(1, 2, 3, 4, 5, 6);
         List<Integer> offWorkStationList = workStationAll.stream().filter(e -> !workList.contains(e)).collect(Collectors.toList());
         List<DownStorageCageDetails> list = new ArrayList();
+        //鏄惁鏈夌┖鏋跺瓙 true锛氭湁   false:鏃�
         Boolean isEmptyShelf = Boolean.FALSE;
         //瀵圭鍐呯幓鐠冭繘琛岃繃婊わ紝浠呭嚭绗﹀悎閫昏緫鐨勭幓鐠�
         if (CollectionUtils.isNotEmpty(workList)) {
             List<DownWorkstation> downWorkstationList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
                     .eq(DownWorkstation::getEnableState, Const.SLOT_ON).in(DownWorkstation::getWorkstationId, workList));
-//            log.info("鏋跺瓙琚鐢紝鏃犳硶鍑虹墖钀芥灦");
             if (CollectionUtils.isEmpty(downWorkstationList)) {
                 log.info("绗煎瓙琚鐢紝鏃犳硶璧版満姊拌噦涓嬬墖");
                 //璧颁汉宸ヤ笅鐗�
-                if (!"2".equals(glassStatus13)) {
-                    list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
+                if (flag08 && !"2".equals(glassStatus13)) {
+                    list = tempList.stream().filter(item -> {
+                        double firstLength = Math.max(item.getWidth(), item.getHeight());
+                        double secondLength = Math.min(item.getWidth(), item.getHeight());
+                        return firstLength > maxWidth || secondLength > maxHeight;
+                    }).collect(Collectors.toList());
                 }
             } else {
                 //鑾峰彇鍙惤鏋剁殑鐨勬灦瀛愪俊鎭紙鍖呮嫭绌烘灦瀛愶級
-                List<DownWorkstation> workstationsIsNotBind = downWorkstationList.stream().filter(item -> null == (item.getFlowCardId())).collect(Collectors.toList());
-                //灏嗘灦瀛愮殑娴佺▼鍗″彿鍙婂眰鏁颁綔涓簁ey
+                //浠呰幏鍙栫┖鏋跺瓙淇℃伅
+                List<DownWorkstation> workstationsIsNotBind = downWorkstationList.stream().filter(item -> StringUtils.isBlank(item.getFlowCardId())).collect(Collectors.toList());
+                //灏嗘灦瀛愮殑娴佺▼鍗″彿鍙婂眰鏁颁綔涓簁ey  涓嶅瓨鍦ㄧ┖鏋跺瓙鐨勬儏鍐�
                 if (CollectionUtils.isEmpty(workstationsIsNotBind)) {
                     log.info("涓嶅瓨鍦ㄦ湭缁戝畾娴佺▼鍗℃灦瀛�");
                     //绛涢�夊嚭瀵瑰簲鏋跺瓙宸茬粦瀹氭祦绋嬪崱鍙笅鐗囩殑鐜荤拑
                     Map<String, List<DownWorkstation>> listMap = downWorkstationList.stream()
-                            .filter(item -> null != (item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                            .filter(item -> StringUtils.isNotBlank(item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                    //杩囨护绛涢�夎幏鍙栨灦瀛愪笂瀵瑰簲娴佺▼鍗�+灞傛暟鐨勭瀛愬唴鐨勭幓鐠冧俊鎭�
                     list = tempList.stream().filter(item -> listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
                 } else {
                     log.info("瀛樺湪鏈粦瀹氭祦绋嬪崱鏋跺瓙锛岀洿鎺ヨ幏鍙栫鍐呮墍鏈夌幓鐠�,涓旀湭缁戝畾鏋跺瓙鐨勭幓鐠冧俊鎭�");
-                    //鑾峰彇绂佺敤鏋跺瓙鐨勬祦绋嬪彿锛屽皢绗煎唴缁戝畾鏋跺瓙涓旀灦瀛愯绂佺敤鐨勬祦绋嬪崱淇℃伅
-
+                    //鑾峰彇绂佺敤鍙婇潪鏈満姊拌噦鐨勬灦瀛愮殑娴佺▼鍙峰強灞傛暟瀵瑰簲鐨勭幓鐠冧俊鎭�
                     List<DownWorkstation> downWorkstationOffList = downWorkstationService.list(new LambdaQueryWrapper<DownWorkstation>()
                             .and(i -> i.in(DownWorkstation::getWorkstationId, offWorkStationList).or().eq(DownWorkstation::getEnableState, Const.SLOT_OFF)));
-                    //鑾峰彇琚鐢ㄧ殑娴佺▼鍗′俊鎭�
+                    //鑾峰彇琚鐢ㄧ殑娴佺▼鍗′俊鎭� 涓虹┖锛氬皢杩斿洖绗煎唴鐨勬墍鏈夌幓鐠冧俊鎭�
                     if (CollectionUtils.isEmpty(downWorkstationOffList)) {
                         list = tempList;
                     } else {
-                        Map<String, List<DownWorkstation>> listOffMap = downWorkstationOffList.stream().filter(item -> null != (item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
+                        //绗煎唴瀛樺湪鏃犳硶鍑虹墖鐨勭幓鐠冧俊鎭紝杩囨护鏃犳硶鍑虹墖鐨勭幓鐠冧俊鎭紝浠呰幏鍙栧彲鍑虹墖鐨勭幓鐠冧俊鎭�   鏃犳硶鍑虹墖鐨勭幓鐠冧负锛氭湭缁戝畾鏋跺瓙銆佺粦瀹氭灦瀛愯绂佺敤銆侀潪鏈満姊拌噦瀵瑰簲鐨勬灦瀛�
+                        Map<String, List<DownWorkstation>> listOffMap = downWorkstationOffList.stream().filter(item -> StringUtils.isNotBlank(item.getFlowCardId())).collect(Collectors.groupingBy(item -> item.getFlowCardId() + ":" + item.getLayer()));
                         list = tempList.stream().filter(item -> !listOffMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
                     }
+                    //绌烘灦瀛愯〃绀虹疆涓簍rue
                     isEmptyShelf = Boolean.TRUE;
-                    //todo:濡傛灉绂佺敤鏋跺瓙宸茬粦瀹氭祦绋嬪崱锛屽洜涓烘椂闂翠笉纭畾锛岀瀛愬唴鐨勭幓鐠冨彲閲嶆柊缁戝畾鏂版灦瀛�
-//                    list = tempList.stream().filter(item -> !listMap.containsKey(item.getFlowCardId() + ":" + item.getLayer())).collect(Collectors.toList());
-
                 }
             }
         } else {
             if (flag08 && !"2".equals(glassStatus13)) {
                 //鐩存帴璧颁汉宸ヤ笅鐗�
-                list = tempList.stream().filter(item -> item.getWidth() > maxWidth || item.getHeight() > maxHeight).collect(Collectors.toList());
+                list = tempList.stream().filter(item -> {
+                    double firstLength = Math.max(item.getWidth(), item.getHeight());
+                    double secondLength = Math.min(item.getWidth(), item.getHeight());
+                    return firstLength > maxWidth || secondLength > maxHeight;
+                }).collect(Collectors.toList());
             }
         }
         if (CollectionUtils.isEmpty(list)) {
@@ -358,10 +371,12 @@
             return Boolean.FALSE;
         }
         String tempGlassId = null;
-        Boolean isBind = Boolean.FALSE;
+        Boolean isNeedBind = Boolean.FALSE;
 
         for (DownStorageCageDetails item : list) {
-            if (item.getWidth() > maxWidth || item.getHeight() > maxHeight) {
+            double firstLength = Math.max(item.getWidth(), item.getHeight());
+            double secondLength = Math.min(item.getWidth(), item.getHeight());
+            if (firstLength > maxWidth || secondLength > maxHeight) {
                 if (flag08 && !"2".equals(glassStatus13)) {
                     log.info("鐜荤拑瀹藉害鎴栭珮搴﹁秴鍑洪槇鍊硷紝鎵ц浜哄伐涓嬬墖");
                     tempGlassId = item.getGlassId();
@@ -378,7 +393,7 @@
                 //鏋跺瓙閮芥湭缁戝畾娴佺▼鍗★紝鍑虹鍐呭瓙鏁伴噺鏈�澶氬昂瀵告渶澶х殑鐜荤拑id,鏃�  鍒欒繑鍥炴壂鎻忔壂鍒扮殑鐜荤拑id杩涜鍑虹墖
                 tempGlassId = downStorageCageDetailsService.getGlassInfoMaxCount(glassId, offWorkStationList);
 
-                isBind = Boolean.TRUE;
+                isNeedBind = Boolean.TRUE;
                 break loop;
             }
             //灏嗙瀛愬唴鐨勭幓鐠冭繘琛岃繃婊わ紝浠呰幏鍙栨棤娉曡惤鏋剁殑娴佺▼鍗$幓鐠�
@@ -391,7 +406,7 @@
                 if (isEmptyShelf) {
                     //鏋跺瓙閮芥湭缁戝畾娴佺▼鍗★紝鍑虹鍐呭瓙鏁伴噺鏈�澶氬昂瀵告渶澶х殑鐜荤拑id,鏃�  鍒欒繑鍥炴壂鎻忔壂鍒扮殑鐜荤拑id杩涜鍑虹墖
                     tempGlassId = downStorageCageDetailsService.getGlassInfoMaxCount(glassId, offWorkStationList);
-                    isBind = Boolean.TRUE;
+                    isNeedBind = Boolean.TRUE;
                     break loop;
                 }
             }
@@ -409,16 +424,13 @@
                     DownGlassInfoDTO downGlassInfoDTO = downGlassInfoService.queryDownGlassMaxLayer(item.getFlowCardId());
                     if (null == downGlassInfoDTO) {
 //                    鍘嗗彶钀芥灦鐜荤拑鎸夌収鐩稿叧娴佺▼鍗″彇鏁版嵁搴撴湭鎵惧埌鏈�澶氱幓鐠冧俊鎭紝琛ㄦ槑褰撳墠娴佺▼鍗′笅鐨勬湁灞傜殑鐜荤拑鍧囨湭钀芥灦锛岀洿鎺ュ彲鍑哄綋鍓嶇幓鐠�
-                        log.info("");
-                        isBind = Boolean.FALSE;
                         tempGlassId = item.getGlassId();
+                        log.info("褰撳墠娴佺▼鍗′笉瀛樺湪钀芥灦鐨勭幓鐠冿紝鍙洿鎺ュ嚭鐗囪惤鏋讹紝鐜荤拑id:{}", tempGlassId);
                         break loop;
                     }
                     if (downGlassInfoDTO.getLayer().equals(downGlassInfoDTO.getLayer())) {
-                        log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶�,鐩存帴鍑虹墖");
-                        //鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟
                         tempGlassId = item.getGlassId();
-                        isBind = Boolean.FALSE;
+                        log.info("褰撳墠鐜荤拑鐨勬祦绋嬪湪鏋跺瓙涓婅惤鏋舵渶澶�,鐩存帴鍑虹墖锛岀幓鐠僫d:{}", tempGlassId);
                         break loop;
                     }
                     Integer sequence = downGlassInfoService.queryMaxSequence(item.getFlowCardId(), item.getLayer());
@@ -427,10 +439,8 @@
                             .eq(DownGlassInfo::getFlowCardId, downGlassInfoDTO.getFlowCardId())
                             .eq(DownGlassInfo::getLayer, downGlassInfoDTO.getLayer()).eq(DownGlassInfo::getSequence, sequence));
                     if (null != downGlassInfoDTO && downGlassInfo.getWidth() == item.getWidth() && downGlassInfo.getHeight() == item.getHeight()) {
-                        log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔�");
-                        //鏇存柊鐜荤拑鐘舵�侊紝鐢熸垚鍑虹墖浠诲姟
                         tempGlassId = item.getGlassId();
-                        isBind = Boolean.FALSE;
+                        log.info("鐩稿悓娆″簭鐜荤拑瀵瑰簲涓婏紝鍙墽琛岃繘鐗囦换鍔★紝鐜荤拑id:{}", tempGlassId);
                         break loop;
                     }
                 }
@@ -445,7 +455,6 @@
                         List<DownStorageCageDetails> downStorageCageDetails = singleLayerMap.get(e.getFlowCardId() + e.getLayer());
                         if (CollectionUtils.isNotEmpty(downStorageCageDetails)) {
                             tempGlassId = downStorageCageDetails.get(0).getGlassId();
-                            isBind = Boolean.FALSE;
                             break;
                         }
                     }
@@ -457,12 +466,12 @@
             return Boolean.FALSE;
         } else {
             //鎸夌収鍑虹墖鐨勭幓鐠僫d鏇存柊绗煎唴鐨勭幓鐠冪姸鎬佷负宸插嚭鐗�
-            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isBind, cageDetails, workList);
+            return generateDownGlassOutTask(tempGlassId, Const.GLASS_CACHE_TYPE_OUT, isNeedBind, cageDetails, workList);
         }
     }
 
     public Boolean generateDownGlassOutTask(String glassId, Integer taskType, Boolean
-            isBind, DownStorageCageDetails cageDetails, List<Integer> workList) {
+            isNeedBind, DownStorageCageDetails cageDetails, List<Integer> workList) {
         //鎸夌幓鐠僫d鑾峰彇鐜荤拑淇℃伅
         DownStorageCageDetails downStorageCageDetails = null;
         if (glassId.equals(cageDetails.getGlassId())) {
@@ -486,10 +495,10 @@
         }
 
         Integer endCell = null;
-        if (isBind) {
+        if (isNeedBind) {
             //鑾峰彇绌烘灦瀛愪俊鎭紝灏嗙┖鏋跺瓙淇℃伅缁戝畾娴佺▼鍗�
             DownWorkstation emptyDownWorkstation = downWorkstationService.getOne(new LambdaQueryWrapper<DownWorkstation>()
-                    .isNull(DownWorkstation::getFlowCardId).in(DownWorkstation::getWorkstationId, workList).orderByDesc(DownWorkstation::getWorkstationId).last("limit 1"));
+                    .and(on -> on.isNull(DownWorkstation::getFlowCardId).or().eq(DownWorkstation::getFlowCardId, "")).in(DownWorkstation::getWorkstationId, workList).orderByDesc(DownWorkstation::getWorkstationId).last("limit 1"));
             if (null != emptyDownWorkstation) {
                 log.info("鑾峰彇鍒扮┖鏋跺瓙淇℃伅锛岀粦瀹氭祦绋嬪崱");
                 downWorkstationService.updateFlowCardIdAndCount(downStorageCageDetails.getFlowCardId(), emptyDownWorkstation.getWorkstationId(), downStorageCageDetails.getLayer());
@@ -515,7 +524,7 @@
         //鐢熸垚浠诲姟淇℃伅
         DownGlassInfo downGlassInfo = new DownGlassInfo();
         BeanUtils.copyProperties(downStorageCageDetails, downGlassInfo);
-        //todo锛氳惤鏋剁墖搴�
+        //钀芥灦鐗囧簭
         downGlassInfo.setSequence(downGlassInfoService.queryMaxSequence(downGlassInfo.getFlowCardId(), downGlassInfo.getLayer()));
         downGlassInfoService.save(downGlassInfo);
         //鐢熸垚浠诲姟淇℃伅

--
Gitblit v1.8.0