From faebd4059dc00b516e40190ab386d81073b75345 Mon Sep 17 00:00:00 2001
From: wuyouming666 <2265557248@qq.com>
Date: 星期二, 18 六月 2024 14:00:06 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/HangZhouMes

---
 UI-Project/src/views/User/rolelist.vue                                                                                                       |    6 
 UI-Project/src/views/Returns/returns.vue                                                                                                     |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java          |   25 +
 UI-Project/src/views/Caching/cachingbefore.vue                                                                                               |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java                                                   |    0 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java                                                         |    0 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java                         |    4 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java              |   23 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/PlcStorageCageTask.java                                   |  373 ++++++++---------
 UI-Project/src/views/User/permissions.vue                                                                                                    |   24 -
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java                  |    9 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java                    |   38 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                           |   76 +++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java                  |    5 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java |   34 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml                                                  |    4 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java                                                 |    0 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java                                           |    0 
 UI-Project/src/views/Slicecage/slicecage.vue                                                                                                 |  453 +++++++++++++--------
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java                                        |   20 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java                 |   30 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/common/config/Const.java                                                          |    2 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java                      |    2 
 UI-Project/src/views/PurchaseReturn/purchaseReturn.vue                                                                                       |   64 +-
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/mapper/BigStorageCageDetailsMapper.java            |   23 +
 25 files changed, 773 insertions(+), 446 deletions(-)

diff --git a/UI-Project/src/views/Caching/cachingbefore.vue b/UI-Project/src/views/Caching/cachingbefore.vue
index 0fa7fac..3672600 100644
--- a/UI-Project/src/views/Caching/cachingbefore.vue
+++ b/UI-Project/src/views/Caching/cachingbefore.vue
@@ -37,7 +37,7 @@
   }  
 }); 
 const toggleEnableState = async (row) => {  
-  const newState = row.enable_state === 1 ? 0 : 1;  
+  const newState = row.enable_state === 1 ? 0 : 1;
   // 鍙戦�佽姹傚埌鍚庣鏇存柊鐘舵�侊紙杩欓噷鐪佺暐浜嗗疄闄呯殑璇锋眰閫昏緫锛�  
   const response = await request.post('/cacheGlass/edgStorageCage/updateEdgStorageCage', { id: row.id, enablestate: newState });  
   if (response.code === 200) {
diff --git a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
index da044de..6c8b687 100644
--- a/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
+++ b/UI-Project/src/views/PurchaseReturn/purchaseReturn.vue
@@ -3,49 +3,55 @@
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
 import request from "@/utils/request"
-// import { ref } from 'vue'
 import { ref, onMounted, onBeforeUnmount } from 'vue';  
 import { WebSocketHost ,host} from '@/utils/constants'
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
 const dialogFormVisible = ref(true)
 const dialogFormVisiblea = ref(false)
 const dialogFormVisibleb = ref(false)
-const width = ref(); // 鐢ㄤ簬瀛樺偍process_id鐨勫搷搴斿紡寮曠敤 
-const height = ref(); // 鐢ㄤ簬瀛樺偍process_id鐨勫搷搴斿紡寮曠敤 
+const width = ref();
+const height = ref();
 const adjustedRects = ref([]);
+const adjustedRects2 = ref([]);
 const adjustedRectsa = ref([]);
 const adjustedRectsb = ref([]);
-// 杩涚倝涓�
-
 const socketUrl = `ws://${WebSocketHost}:${host}/api/temperingGlass/api/talk/temperingGlass`;
-// 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
-
 const handleMessage = (data) => {
-  // 鏇存柊 tableData 鐨勬暟鎹�
+// 杩涚倝涓�
   adjustedRects.value =  data.intoGlass[0].map(rect => ({  
-        ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5, // 灏唜鍊奸櫎浠�3  
-        ycoordinate: rect.ycoordinate * 0.5,
-        width: rect.width * 0.4,
-        height: rect.height * 0.4,
+        ...rect, 
+        xcoordinate: rect.xCoordinate * 0.3,
+        ycoordinate: rect.ycoordinate * 0.3,
+        width: rect.width * 0.2,
+        height: rect.height * 0.2,
+        widtha: rect.width,
+        heighta: rect.height,
+      })); 
+  adjustedRects2.value =  data.intoGlass2[0].map(rect => ({  
+        ...rect, 
+        xcoordinate: rect.xCoordinate * 0.3,
+        ycoordinate: rect.ycoordinate * 0.3,
+        width: rect.width * 0.2,
+        height: rect.height * 0.2,
         widtha: rect.width,
         heighta: rect.height,
       })); 
       console.log(data.intoGlass[0]);
+  // 杩涚倝鍓�
       adjustedRectsa.value = data.waitingGlass[0].map(rect => ({  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5, // 灏唜鍊奸櫎浠�3  
+        xcoordinate: rect.xCoordinate * 0.5,
         ycoordinate: rect.ycoordinate * 0.5,
         width: rect.width * 0.4,
         height: rect.height * 0.4,
         widtha: rect.width,
         heighta: rect.height,
         state: rect.state
-      }));  
-      
+      }));
+    // 宸插嚭鐐�
       adjustedRectsb.value = data.outGlass[0].map(rect => ({  
         ...rect, // 澶嶅埗鍘熷瀵硅薄鐨勫叾浠栧睘鎬�  
-        xcoordinate: rect.xCoordinate * 0.5, // 灏唜鍊奸櫎浠�3  
+        xcoordinate: rect.xCoordinate * 0.5,
         ycoordinate: rect.ycoordinate * 0.5,
         width: rect.width * 0.4,
         height: rect.height * 0.4,
@@ -55,18 +61,14 @@
       }));  
 };
 onMounted(() => {
-  // fetchFlowCardId();
-  // fetchTableData(); // 鑾峰彇鏁版嵁
   initializeWebSocket(socketUrl, handleMessage);
 });
-
 onBeforeUnmount(() => {
   console.log("鍏抽棴浜�")
   closeWebSocket();
 });
 </script>
-
-<template> 
+<template>
   <div style="margin-top: 10px;">
      <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisible = true;dialogFormVisiblea = false;dialogFormVisibleb = false;">杩涚倝涓�</el-button>
      <el-button style="margin-left: 15px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true;dialogFormVisible = false;dialogFormVisibleb = false;" >杩涚倝鍓�</el-button>
@@ -75,20 +77,18 @@
     <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;height: 700px;" v-loading="loading">
 <div style="width: 49%;float: left;background-color: #f4f4f5;height: 650px;">
   <el-scrollbar height="630px">
-    <div v-for="(group, groupId) in groupedRects" :key="groupId" style="position: relative;">  
     <div  style="position: relative;width: 1400px;">  
       <div  
-      v-for="(rect, index) in adjustedRects"  
+      v-for="(rect, index) in adjustedRects"
       :key="index"  
-      class="rect"  
+      class="rect"
       :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px`  }"  
     >
      <div  class="centered-text">
     <div >{{ rect.flowcardId }}</div>  
     <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
   </div>
-  </div> 
-   </div>
+  </div>
    </div>
    </el-scrollbar>
   </div>
@@ -96,23 +96,23 @@
   <el-scrollbar height="630px">
     <div  style="position: relative;width: 1400px;">  
       <div  
-      v-for="(rect, index) in adjustedRects"  
+      v-for="(rect, index) in adjustedRects2"
       :key="index"  
-      class="rect"  
+      class="rect"
       :style="{ position: 'absolute',  top: `${rect.ycoordinate}px`, left: `${rect.xcoordinate}px`, width: `${rect.width}px`, height: `${rect.height}px`  }"  
     >
      <div  class="centered-text">
     <div >{{ rect.flowcardId }}</div>  
     <div style="margin-top: 50px;margin-left: -50px;">{{ rect.widtha }}*{{ rect.heighta }}</div>  
   </div>
-  </div> 
+  </div>
    </div>
    </el-scrollbar>
 </div>
-    
    </el-card>
     </div>
 <div v-if="dialogFormVisiblea">
+  <!-- 杩涚倝鍓� -->
   <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
       <el-scrollbar height="630px">
     <div  style="position: relative;width: 1400px;">  
@@ -133,6 +133,7 @@
    </el-card>
 </div>
 <div v-if="dialogFormVisibleb">
+  <!-- 宸插嚭鐐� -->
   <el-card style="flex: 1;margin-left: 10px;margin-top: 10px;margin-right: 10px;" v-loading="loading">
       <el-scrollbar height="630px">
     <div  style="position: relative;width: 1400px;">  
@@ -154,7 +155,6 @@
 </div>
   </div>
 </template>
-
 <style scoped>
 #boxa{
   border: 1px solid rgb(119, 116, 116);
diff --git a/UI-Project/src/views/Returns/returns.vue b/UI-Project/src/views/Returns/returns.vue
index 84df863..f1b1f89 100644
--- a/UI-Project/src/views/Returns/returns.vue
+++ b/UI-Project/src/views/Returns/returns.vue
@@ -795,7 +795,7 @@
               <div id="dt" style="font-size: 15px;">
         <div>
               <el-form-item label="鏁伴噺锛�" :required="true" style="width: 14vw;">
-                <el-input  v-model="number" autocomplete="off" />
+                <el-input placeholder="璇疯緭鍏ユ暟閲�" v-model="number" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index 068a4da..15839b1 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -3,6 +3,7 @@
 import {reactive} from "vue";
 import {useRouter} from "vue-router"
 const router = useRouter()
+import request from "@/utils/request"
 import { WebSocketHost ,host} from '@/utils/constants'
 import { ref, onMounted , onBeforeUnmount} from "vue";
 import { initializeWebSocket, closeWebSocket } from '@/utils/WebSocketService';
@@ -17,8 +18,19 @@
 const tableDatad = ref([])
 const tableDatae = ref([])
 const adjustedRects = ref([]);
-const height = ref([]);
- 
+// const height = ref([]);
+const add = ref(false)
+const flowCardId = ref('');
+const gap = ref('');
+const glassId = ref('');
+const glassType = ref('');
+const height = ref('');
+const sequence = ref('');
+const state = ref('');
+const temperingFeedSequence = ref('');
+const temperingLayoutId = ref('');
+const thickness = ref('');
+const width = ref('');
 const carposition1 = ref(60);
 const carposition2 = ref(220);
 const carposition3 = ref(60);
@@ -49,30 +61,6 @@
  
 const currentPage4 = ref(4)
 const pageSize4 = ref(100)
-
-const dialogForm = () => {
-  ElMessageBox.confirm(
-    '纭畾瑕佹�ュ仠鍚�?',
-    '鎻愮ず',
-    {
-      confirmButtonText: '鏄�',
-      cancelButtonText: '鍚�',
-      type: 'warning',
-    }
-  )
-    .then(() => {
-      ElMessage({
-        type: 'success',
-        message: '鎬ュ仠鎴愬姛锛�',
-      })
-    })
-    .catch(() => {
-      ElMessage({
-        type: 'info',
-        message: '鎬ュ仠澶辫触',
-      })
-    })
-}
  
   var timer=setInterval(() => {
     // console.log(million.value,million1.value);
@@ -175,7 +163,7 @@
     }
     
   }, 1000);
- 
+
 const getTableRow = (row,type) =>{
   switch (type) {
     case 'edit' :{
@@ -189,7 +177,90 @@
     }
   }
 }
- 
+const handleBindRack = (row) => {
+  add.value = true; // 鎵撳紑缁戝畾鏋跺瓙瀵硅瘽妗�
+};
+// 娣诲姞
+const handleConfirm = async () => {
+  try {
+    const response = await request.post('/cacheVerticalGlass/bigStorageCageDetails/insertBigStorageCageDetails', {
+      flowCardId: flowCardId.value,
+      gap: gap.value,
+      glassId: glassId.value,
+      glassType: glassType.value,
+      height: height.value,
+      sequence: sequence.value,
+      state: state.value,
+      temperingFeedSequence: temperingFeedSequence.value,
+      temperingLayoutId: temperingLayoutId.value,
+      thickness: thickness.value,
+      width: width.value,
+    }); 
+    if (response.code == 200) {
+      // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
+      ElMessage.success(response.message);
+      add.value = false;
+     tableData.value = response.data;
+    } else {
+      // 璇锋眰澶辫触锛屾樉绀洪敊璇秷鎭�
+      ElMessage.error(response.msg);
+    }
+  } catch (error) {
+    // 澶勭悊閿欒
+    console.error(error);
+  }
+};
+// 鏄惁绂佺敤
+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);
+      } else {  
+      ElMessage.error(response.message);
+      }  
+  row.enableState = newState;  
+};
+// const tableData = ref([  
+//   // ...鎮ㄧ殑琛ㄦ牸鏁版嵁  
+//   id: 
+//   deviceId slot enableState remainWidth
+
+// ]);  
+ // 鍒犻櫎 
+ const opena = async(row) => {  
+  try {  
+    const confirmResult = await ElMessageBox.confirm(  
+      '鏄惁鍒犻櫎璇ユ潯淇℃伅?',  
+      '鎻愮ず',  
+      {  
+        confirmButtonText: '鏄�',  
+        cancelButtonText: '鍙栨秷',  
+        type: 'warning',  
+      }  
+    );  
+    if (confirmResult === 'confirm') {  
+      // 鐢ㄦ埛鐐瑰嚮浜嗏�滄槸鈥濓紝鐜板湪璋冪敤鍒犻櫎鎺ュ彛  
+      const response = await request.post("/cacheVerticalGlass/bigStorageCageDetails/deleteBigStorageCageDetails", {
+        menuId: row.id,
+    })
+    if (response.code === 200) {
+      ElMessage.success(response.message);
+      } else {  
+        // 鍒犻櫎澶辫触锛屾偍鍙互澶勭悊閿欒鎴栨樉绀洪敊璇俊鎭粰鐢ㄦ埛  
+      ElMessage.error(response.msg);
+        // alert('鍒犻櫎澶辫触锛�' + deleteResponse.message); 
+      }  
+    }  
+  } catch (error) {  
+    // 澶勭悊鍙兘鍑虹幇鐨勯敊璇紝姣斿 ElMessageBox 鎶涘嚭鐨勫紓甯哥瓑  
+    console.error('鍙戠敓閿欒:', error);  
+  }  
+}; 
 
 const socketUrl = `ws://${WebSocketHost}:${host}/api/cacheVerticalGlass/api/talk/slicecage`;
 // 瀹氫箟娑堟伅澶勭悊鍑芥暟锛屾洿鏂� receivedData 鍙橀噺
@@ -278,13 +349,8 @@
  
 <template>
   <div style="height: 700px;">
-    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisible = true">鎵嬪姩杩涚墖</el-button> -->
     <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="primary" @click="dialogFormVisiblea = true">鐞嗙墖绗间俊鎭�</el-button>
     <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="success" @click="dialogFormVisibleb = true">鍑虹墖闃熷垪</el-button>
-    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger">缁堟杩涚墖</el-button> -->
-    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger">缁堟鍑虹墖</el-button> -->
-    <!-- <el-button style="margin-top: 5px;margin-left: 10px;"   id="searchButton" type="danger"  @click="dialogForm">杞�ュ仠</el-button> -->
-    
     <el-card style="flex: 1;margin-left: 10px;margin-top: 5px;" v-loading="loading">
       <div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;max-height: 100px;">
         <el-table height="100%" ref="table" 
@@ -313,7 +379,7 @@
         @selection-change="handleSelectionChange"
         :data="tableDatad" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="bigStorageCageFeedTask.glassId" align="center" label="杩涚墖鐜荤拑ID" min-width="80" />
-          <el-table-column prop="bigStorageCageFeedTask.tragetSlot" align="center" label="鐩爣浣嶇疆" min-width="120" />
+          <el-table-column prop="bigStorageCageFeedTask.targetSlot" align="center" label="鐩爣浣嶇疆" min-width="120" />
           <!-- <el-table-column prop="task_type" align="center" label="浠诲姟绫诲瀷" min-width="120" />娌℃湁杩斿洖瀛楁 -->
           <el-table-column prop="bigStorageCageFeedTask.taskState" align="center" label="浠诲姟鐘舵��" min-width="120">
           <template #default="scope">
@@ -398,152 +464,192 @@
   <div v-show="cell8" style="width: 227px;height: 29px;position: absolute;top:300px;left: 465px;background-color: #409EFF;">
     </div> -->
 </div>
-    
   </div>
-<el-dialog v-model="dialogFormVisible" top="12vh" width="85%" title="璇风‘璁ょ幓鐠冧俊鎭�" >
-  <div style="margin-left: 50px;margin-bottom: 10px;">
-    <div style="display: flex;">
-    <p style="margin-top: 4px;">纭鐘舵��:</p>
-    <el-button style="margin-left: 10px;size: mini;" type="success">鍏佽</el-button>
-    <el-button style="margin-left: 10px;size: mini;" type="danger">涓嶅厑璁�</el-button>
-    <p style="margin-left: 60px;margin-top: 4px;">褰撳墠鐘舵��:</p>
-    <div style="margin-top: 4px; margin-left: 10px;">鎵嬪姩</div>
-    <el-button style="margin-left: 10px;size: mini;" type="primary">鍒囨崲</el-button>
-    <el-input  placeholder="璇疯緭鍏ョ幓鐠僫d" style="width: 180px;size: mini;margin-left: 60px;"></el-input>
-    <el-button style="margin-left: 10px;size: mini;" type="primary">娣诲姞</el-button>
-    <p style="margin-left: 60px;margin-top: 4px;">鐜荤拑id:</p>
-    <el-input  style="width: 180px;size: mini;margin-left: 30px;"></el-input>
-  </div>
-    <div style="display: flex;">
-      <p style="margin-left: 290px;margin-top: 20px;font-weight: bold;">涓婄墖浣�</p>
-      <p style="margin-left: 630px;margin-top: 20px;font-weight: bold;">鎵爜浣�</p>
-    </div>
-    <div style="display: flex;">
-    <div style="margin-top: 20px;">
-      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">褰撳墠淇℃伅</p>
-      <el-form label-position="right" label-width="90px">
-      <el-form-item style="width: 20vw" label="鐜荤拑id锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ幓鐠僫d"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="璁㈠崟缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="鍒楄〃缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ垪琛ㄧ紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="绠卞瓙缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ瀛愮紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="闀匡細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ラ暱"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="瀹斤細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ"></el-input>
-       </el-form-item>
-      </el-form>
+  <el-dialog v-model="add" top="20vh" width="60%" title="娣诲姞鐞嗙墖绗间俊鎭�" >
+    <div style="margin-left: -50px;margin-top: 10px;margin-bottom: 10px;">
+            <el-form  size="mini" label-width="150px">
+      <el-form label-width="150px" label-position="right">
+        <el-row style="margin-top: -15px;margin-bottom: -2px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item label="鐜荤拑ID锛�" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ョ幓鐠僆D" v-model="glassId" autocomplete="off" />
+              </el-form-item>
+              </div></div>
+          </el-col>
+          <el-col :span="9">
+            <div id="dta" style="font-size: 15px;">
+        <div>
+          <el-form-item label="灏忕墖鍦ㄦ牸鍐呯殑椤哄簭锛�" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ュ皬鐗囧湪鏍煎唴鐨勯『搴�" v-model="sequence" autocomplete="off" />
+              </el-form-item></div>
+              </div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item label="娴佺▼鍗″彿锛�" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ユ祦绋嬪崱鍙�" v-model="flowCardId" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+          <el-col :span="9">
+            <div id="dta" style="font-size: 15px;">
+        <div>
+          <el-form-item label="鐜荤拑绫诲瀷锛�" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ョ幓鐠冪被鍨�" v-model="glassType" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item label="瀹斤細" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ュ" v-model="width" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+          <el-col :span="9">
+            <div id="dta" style="font-size: 15px;">
+        <div>
+          <el-form-item label="楂橈細" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ラ珮" v-model="height" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item label="鍘氬害锛�" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ュ帤搴�" v-model="thickness" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+          <el-col :span="9">
+            <div id="dta" style="font-size: 15px;">
+        <div>
+          <el-form-item label="閽㈠寲鐗堝浘ID锛�" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ラ挗鍖栫増鍥綢D" v-model="temperingLayoutId" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item label="閽㈠寲鐗堝浘鐗囧簭锛�" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ラ挗鍖栫増鍥剧墖搴�" v-model="temperingFeedSequence" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+          <el-col :span="9">
+            <div id="dta" style="font-size: 15px;">
+        <div>
+          <el-form-item label="鍚敤鐘舵�侊細" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ュ惎鐢ㄧ姸鎬�" v-model="state" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        <el-row style="margin-top: 10px;">
+          <el-col :span="6">
+              <div id="dt" style="font-size: 15px;">
+        <div>
+          <el-form-item label="鐜荤拑闂撮殭锛�" :required="true" style="width: 20vw;">
+                <el-input placeholder="璇疯緭鍏ョ幓鐠冮棿闅�" v-model="gap" autocomplete="off" />
+              </el-form-item></div></div>
+          </el-col>
+        </el-row>
+        </el-form>
+            </el-form>
+          </div>
+    <template #footer>
+      <div id="dialog-footer">
+        <el-button type="primary" @click="handleConfirm">
+          纭
+        </el-button>
+        <el-button @click="add = false">鍙栨秷</el-button>
       </div>
-    <div style="margin-top: 20px;">
-      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">淇敼淇℃伅</p>
-      <el-form label-position="right" label-width="90px">
-      <el-form-item style="width: 20vw" label="鐜荤拑id锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ幓鐠僫d"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="璁㈠崟缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="鍒楄〃缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ垪琛ㄧ紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="绠卞瓙缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ瀛愮紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="闀匡細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ラ暱"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="瀹斤細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ"></el-input>
-       </el-form-item>
-      </el-form>
-      </div>
-    <div style="margin-top: 20px;">
-      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">淇敼淇℃伅</p>
-      <el-form label-position="right" label-width="90px">
-      <el-form-item style="width: 20vw" label="鐜荤拑id锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ幓鐠僫d"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="璁㈠崟缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="鍒楄〃缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ垪琛ㄧ紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="绠卞瓙缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ瀛愮紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="闀匡細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ラ暱"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="瀹斤細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ"></el-input>
-       </el-form-item>
-      </el-form>
-      </div>
-    <div style="margin-top: 20px;">
-      <p style="margin-top: 10px;margin-left: 100px;margin-bottom: 20px;">褰撳墠淇℃伅</p>
-      <el-form label-position="right" label-width="90px">
-      <el-form-item style="width: 20vw" label="鐜荤拑id锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ幓鐠僫d"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="璁㈠崟缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ヨ鍗曠紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="鍒楄〃缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ垪琛ㄧ紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="绠卞瓙缂栧彿锛�">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ョ瀛愮紪鍙�"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="闀匡細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ラ暱"></el-input>
-       </el-form-item>
-      <el-form-item style="width: 20vw" label="瀹斤細">
-      <el-input style="width: 180px" size="mini" placeholder="璇疯緭鍏ュ"></el-input>
-       </el-form-item>
-      </el-form>
-      </div>
-    </div>
-        </div>
-  <template #footer>
-    <div id="dialog-footer">
-      <el-button type="primary" @click="dialogFormVisible = false">
-        纭
-      </el-button>
-      <el-button @click="dialogFormVisible = false">鍙栨秷</el-button>
-    </div>
-  </template>
-</el-dialog>
-<el-dialog v-model="dialogFormVisiblea" top="10vh" width="85%" title="鐞嗙墖绗间俊鎭�" >
-  <!-- <el-input  placeholder="璇疯緭鍏ュ伐绋嬪彿" style="width: 180px;size: mini;"></el-input> -->
-    <!-- <el-button style="margin-left: 10px;size: mini;" type="primary">鏌ヨ</el-button> -->
-    <el-table  ref="table" style="margin-top: 20px;height: 500px;"
-        @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="id" align="center" label="澶х悊鐗囩琛↖D" min-width="80" />
-          <el-table-column prop="deviceId" align="center" label="鐞嗙墖绗煎彿" min-width="120" />
-          <el-table-column prop="slot" align="center" label="鏍呮牸鍙�" min-width="120" />
+    </template>
+  </el-dialog>
+<el-dialog v-model="dialogFormVisiblea" top="5vh" width="90%" title="鐞嗙墖绗间俊鎭�" >
+    <el-table  
+          :data="tableData" 
+          height="600"
+          @expand-change="handleExpandChange"  
+          row-key="id" 
+          default-expand-all
+          :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" 
+        >  
+          <el-table-column type="expand">  
+            <template #default="props">  
+              <div v-if="props.row.bigStorageCageDetails && props.row.bigStorageCageDetails.length">  
+                <el-table  
+                  :data="props.row.bigStorageCageDetails"  
+                  border
+                  style="width: 100%;margin-left: 20px;"  
+                  row-key="id"  
+                  :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}" 
+                >  
+          <!-- <el-table-column prop="menuName" label="浜岀骇鑿滃崟鏍�" align="center" min-width="140" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"/>   -->
+          <el-table-column prop="glassId" label="鐜荤拑ID" align="center" min-width="100"/>  
+          <el-table-column prop="sequence" align="center" label="灏忕墖鍦ㄦ牸鍐呯殑椤哄簭" min-width="120" />
+          <el-table-column prop="flowCardId" align="center" label="娴佺▼鍗″彿" min-width="120" />
+          <el-table-column prop="glassType" align="center" label="鐜荤拑绫诲瀷" min-width="100" />
+          <el-table-column prop="width" align="center" label="瀹�" min-width="80" />
+          <el-table-column prop="height" align="center" label="楂�" min-width="80" />
+          <el-table-column prop="thickness" align="center" label="鍘氬害" min-width="80" />
+          <el-table-column prop="temperingLayoutId" align="center" label="閽㈠寲鐗堝浘ID" min-width="100" />
+          <el-table-column prop="temperingFeedSequence" align="center" label="閽㈠寲鐗堝浘鐗囧簭" min-width="120" />
           <el-table-column
             align="center"
+            label="鍚敤鐘舵��"
+            min-width="80"
+            prop="state"
+          >
+          <template #default="scope">  
+        <el-tag :type="getStatusType(scope.row.state)">  
+          {{ getStatusText(scope.row.state) }}  
+        </el-tag>  
+      </template> 
+          </el-table-column>
+          <el-table-column prop="gap" align="center" label="鐜荤拑闂撮殭" min-width="80" />
+           <el-table-column fixed="right" label="鎿嶄綔" align="center"  min-width="180">
+            <template #default="scope">
+              <el-button size="mini" type="text" plain @click="handleEdit(scope.row)">鐮存崯</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
+              <el-button size="mini" type="text" plain @click="opena(scope.row)">鍑虹墖</el-button>
+            </template>
+        </el-table-column>
+                </el-table>  
+              </div>  
+            </template>  
+          </el-table-column>  
+          <el-table-column prop="id" label="澶х悊鐗囩琛↖D" align="center" min-width="100"/>  
+          <el-table-column prop="deviceId" align="center" label="鐞嗙墖绗煎彿" min-width="150" />
+          <el-table-column prop="slot" align="center" label="鏍呮牸鍙�" min-width="150" />
+          <el-table-column
+          align="center"
             label="鍚敤鐘舵��"
             min-width="80"
             prop="enableState"
           >
           <template #default="scope">  
-        <el-tag :type="getStatusType(scope.row.enableState)">  
-          {{ getStatusText(scope.row.enableState) }}  
-        </el-tag>  
-      </template> 
+          <el-tag  
+            :type="scope.row.enableState === 1 ? 'success' : 'danger'"  
+            @click="toggleEnableState(scope.row)"  
+          >  
+            {{ scope.row.enableState === 1 ? '鍚敤' : '绂佺敤' }}  
+          </el-tag>  
+        </template> 
           </el-table-column>
           <el-table-column prop="remainWidth" align="center" label="鍓╀綑瀹藉害" min-width="120" />
+          
+       <el-table-column fixed="right" label="鎿嶄綔" align="center">
+            <template #default="scope">
+              <el-button size="mini" type="text" plain  @click="handleBindRack(scope.row)">娣诲姞</el-button>
+            </template>
+        </el-table-column>
         </el-table>
         <div id="demo-pagination-block">
     <el-pagination
@@ -562,23 +668,21 @@
   </div>
 </el-dialog>
 <el-dialog v-model="dialogFormVisibleb" top="10vh" width="85%" title="鍑虹墖闃熷垪" >
-  <div style="display: flex;">
+  <!-- <div style="display: flex;">
   <p style="margin-top: 3px;">闃熷垪鐘舵�侊細</p>
   <p style="margin-top: 3px;">寮�濮�</p>
     <el-button style="margin-left: 10px;size: mini;" type="danger">鍋滄</el-button>
     <el-button style="margin-left: 10px;size: mini;" type="primary">娣诲姞</el-button>
-  </div>
+  </div> -->
     <el-table  ref="table" style="margin-top: 20px;height: 500px;"
         :data="tableDatab" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="id" fixed align="center" label="閽㈠寲灏忕墖淇℃伅琛╥d" min-width="150"/>
-          <!-- <el-table-column prop="glass_id" align="center" label="鐜荤拑id" min-width="120" /> -->
           <el-table-column prop="flowcardId" fixed align="center" label="娴佺▼鍗�" min-width="120" />
           <el-table-column prop="glassType" align="center" label="娴佺▼鍗$幓鐠冪被鍨�" min-width="150" />
           <el-table-column prop="width" align="center" label="瀹�" min-width="80" />
           <el-table-column prop="height" align="center" label="楂�" min-width="80" />
           <el-table-column prop="thickness" align="center" label="鍘氬害" min-width="80" />
           <el-table-column prop="filmsid" align="center" label="鑶滅郴" min-width="80" />
-          <!-- <el-table-column prop="ishorizontal" align="center" label="閽㈠寲鏄惁鎺ュ彈妯斁" min-width="150" /> -->
           <el-table-column
             align="center"
             label="閽㈠寲鏄惁鎺ュ彈妯斁"
@@ -596,7 +700,6 @@
           <el-table-column prop="xCoordinate" align="center" label="x鍧愭爣" min-width="80" />
           <el-table-column prop="yCoordinate" align="center" label="y鍧愭爣" min-width="80" />
           <el-table-column prop="angle" align="center" label="鏃嬭浆瑙掑害锛堥�嗘椂閽堬級" min-width="150" />
-          <!-- <el-table-column prop="state" align="center" label="鐘舵��" min-width="80" /> -->
           <el-table-column
             align="center"
             label="鐘舵��"
@@ -611,7 +714,7 @@
           </el-table-column>
           <el-table-column fixed="right" label="鎿嶄綔" align="center" width="150">
             <template #default="scope">
-              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">娣诲姞</el-button>
+              <el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">鐮存崯</el-button>
               <el-button size="mini" type="text" plain @click="handleBindRacka(scope.row)">鍒犻櫎</el-button>
             </template>
         </el-table-column>
diff --git a/UI-Project/src/views/User/permissions.vue b/UI-Project/src/views/User/permissions.vue
index 637eb78..80cff3d 100644
--- a/UI-Project/src/views/User/permissions.vue
+++ b/UI-Project/src/views/User/permissions.vue
@@ -97,7 +97,6 @@
       parentId: parentId.value,
       url: url.value,
     }); 
- 
     if (response.code == 200) {
       // 缁戝畾鎴愬姛锛屽鐞嗛�昏緫
       ElMessage.success(response.message);
@@ -117,7 +116,7 @@
  const opena = async(row) => {  
   try {  
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鍒犻櫎璇ョ敤鎴�?',  
+      '鏄惁鍒犻櫎璇ヨ彍鍗�?',  
       '鎻愮ず',  
       {  
         confirmButtonText: '鏄�',  
@@ -228,26 +227,7 @@
               <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
             </template>
         </el-table-column>
-        </el-table>  
-       <!-- <el-table height="240" ref="table" 
-        @selection-change="handleSelectionChange"
-        :data="tableData" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="menuName" align="center" label="鑿滃崟鏍�" min-width="180" />
-          <el-table-column align="center" label="閾炬帴" min-width="180">
-            <template #default="scope">  
-             <el-tag v-for="role in scope.row.children">  
-            {{role.url}}  
-           </el-tag>   
-         </template> 
-            </el-table-column>
-          <el-table-column prop="id" align="center" label="鎺掑簭" min-width="180" />
-          <el-table-column fixed="right" label="鎿嶄綔" align="center" width="200">
-            <template #default="scope">
-              <el-button size="mini" type="text" plain @click="adda = true">缂栬緫</el-button>
-              <el-button size="mini" type="text" plain @click="opena(scope.row)">鍒犻櫎</el-button>
-            </template>
-        </el-table-column>
-        </el-table> -->
+        </el-table>
       </div>
     </el-card>
   </div>
diff --git a/UI-Project/src/views/User/rolelist.vue b/UI-Project/src/views/User/rolelist.vue
index 81ec996..abbe82c 100644
--- a/UI-Project/src/views/User/rolelist.vue
+++ b/UI-Project/src/views/User/rolelist.vue
@@ -105,7 +105,7 @@
  const opena = async(row) => {  
   try {  
     const confirmResult = await ElMessageBox.confirm(  
-      '鏄惁鍒犻櫎璇ョ敤鎴�?',  
+      '鏄惁鍒犻櫎璇ヨ鑹�?',  
       '鎻愮ず',  
       {  
         confirmButtonText: '鏄�',  
@@ -200,7 +200,7 @@
               <div id="dt" style="font-size: 15px;">
         <div>
           <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw">
-                <el-input v-model="name" autocomplete="off" />
+                <el-input placeholder="璇疯緭鍏ヨ鑹�" v-model="name" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
@@ -225,7 +225,7 @@
               <div id="dt" style="font-size: 15px;">
         <div>
           <el-form-item label="瑙掕壊锛�" :required="true" style="width: 25vw">
-                <el-input v-model="editingUser.name" autocomplete="off" />
+                <el-input placeholder="璇疯緭鍏ヨ鑹�" v-model="editingUser.name" autocomplete="off" />
               </el-form-item></div></div>
           </el-col>
         </el-row>
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 73763d9..0c6feb0 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
@@ -28,11 +28,13 @@
      * 鍗у紡鐞嗙墖绗艰鎯呰〃鐜荤拑鐘舵��
      * 璇嗗埆鍚庢垚鍔熺姸鎬�100
      * 鍑虹墖浠诲姟101
+     * 浜哄伐涓嬬墖101
      * 鎷胯蛋200
      * 鐮存崯201
      */
     public static final Integer GLASS_STATE_IN = 100;
     public static final Integer GLASS_STATE_OUT = 101;
+    public static final Integer GLASS_STATE_ARTIFICIAL = 102;
     public static final Integer GLASS_STATE_TAKE = 200;
     public static final Integer GLASS_STATE_DAMAGE = 201;
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/controller/DamageController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
similarity index 100%
rename from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/controller/DamageController.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/controller/DamageController.java
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/entity/Damage.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java
similarity index 100%
rename from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/entity/Damage.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/entity/Damage.java
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/mapper/DamageMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
similarity index 100%
rename from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/mapper/DamageMapper.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/service/DamageService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
similarity index 100%
rename from hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/damage/service/DamageService.java
rename to hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
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
new file mode 100644
index 0000000..130e515
--- /dev/null
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -0,0 +1,20 @@
+package com.mes.damage.service.impl;
+
+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 org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author wu
+ * @since 2024-06-13
+ */
+@Service
+public class DamageServiceImpl extends ServiceImpl<DamageMapper, Damage> implements DamageService {
+
+}
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
index 8ec6a5a..9fa339a 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/edgstoragecage/entity/EdgStorageCageDetails.java
@@ -29,7 +29,7 @@
     private Long id;
 
     /**
-     * 璁惧id
+     * 宸ョ▼id
      */
     private String engineerId;
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
index 2c7de7c..9b6ecc4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCage.java
@@ -29,8 +29,8 @@
     /**
      * 澶х悊鐗囩琛╥d
      */
-      @ApiModelProperty(value = "澶х悊鐗囩琛╥d", position = 2)
-      @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "澶х悊鐗囩琛╥d", position = 2)
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     /**
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
index 0acc5f2..490bbbf 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/BigStorageCageDetails.java
@@ -6,13 +6,11 @@
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
 import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
-import java.util.List;
 
 /**
  * <p>
@@ -22,7 +20,6 @@
  * @author zhoush
  * @since 2024-03-27
  */
-@ApiModel(description = "<p> </p>")
 @Api(description = "澶х悊鐗囩璇︽儏")
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -116,6 +113,12 @@
     private Integer gap;
 
     /**
+     * 宸ョ▼鍙�
+     */
+    @ApiModelProperty(value = "宸ョ▼鍙�")
+    private String engineerId;
+
+    /**
      * 杩涚墖浠诲姟
      */
     @ApiModelProperty(value = "杩涚墖浠诲姟", position = 16)
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
new file mode 100644
index 0000000..f22b64b
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/SlotSequenceDTO.java
@@ -0,0 +1,38 @@
+package com.mes.bigstorage.entity.dto;
+
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/13 15:51
+ * @Description:
+ */
+@Data
+public class SlotSequenceDTO {
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private String engineerId;
+
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private Integer temperingLayoutId;
+    /**
+     * 澶х悊鐗囪鎯呬腑鏍煎瓙鍙�
+     */
+    private Integer slot;
+    /**
+     * 鏍煎瓙鍐呯殑鏈�澶у簭鍙�
+     */
+    private Integer maxSequence;
+    /**
+     * 鏍煎瓙鍐呯殑鏈�灏忓簭鍙�
+     */
+    private Integer minSequence;
+
+    /**
+     * 鏍煎瓙鍓╀綑瀹藉害
+     */
+    private Integer remainWidth;
+}
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
new file mode 100644
index 0000000..18d4edb
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingLayoutDTO.java
@@ -0,0 +1,30 @@
+package com.mes.bigstorage.entity.dto;
+
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2024/6/13 15:51
+ * @Description:
+ */
+@Data
+public class TemperingLayoutDTO {
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private String engineerId;
+
+    /**
+     * 閽㈠寲鐗堝浘id
+     */
+    private Integer temperingLayoutId;
+    /**
+     * 褰撳墠鐗堝浘鏁伴噺
+     */
+    private Integer count;
+
+    /**
+     * 褰撳墠鐗堝浘鍗犵敤鏍煎瓙鏁伴噺
+     */
+    private Integer slotCount;
+}
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 3b9bb40..da14719 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
@@ -1,9 +1,12 @@
 package com.mes.bigstorage.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
-import feign.Param;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
@@ -16,4 +19,20 @@
  */
 public interface BigStorageCageDetailsMapper extends MPJBaseMapper<BigStorageCageDetails> {
 
+    /**
+     * 鑾峰彇閽㈠寲鐗堝浘宸茬粡鍒伴綈鐨勫伐绋嬪彿鍙婄増鍥緄d
+     *
+     * @return
+     */
+    TemperingLayoutDTO temperingIsAll();
+
+    /**
+     * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
+     *
+     * @return
+     */
+    TemperingLayoutDTO queryTemperingOccupySlot(@Param(value = "count") int count);
+
+
+    List<SlotSequenceDTO> queryGlassMaxAndMin(@Param(value = "engineerId") String engineerId, @Param(value = "temperingLayoutId") Integer temperingLayoutId);
 }
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 64b7ecb..d0d52d2 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
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
 import com.mes.glassinfo.entity.GlassInfo;
 
 import java.util.List;
@@ -39,4 +41,27 @@
      * @param glassInfo
      */
     BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo);
+
+    /**
+     * 鑾峰彇閽㈠寲鐗堝浘宸茬粡鍒伴綈鐨勫伐绋嬪彿鍙婄増鍥緄d
+     *
+     * @return
+     */
+    TemperingLayoutDTO temperingIsAll();
+
+    /**
+     * 鑾峰彇姣忎釜閽㈠寲鐗堝浘鍗犵敤鐨勬牸瀛愭暟閲�
+     *
+     * @return
+     */
+    TemperingLayoutDTO queryTemperingOccupySlot();
+
+    /**
+     * 鑾峰彇鐗堝浘姣忎釜鏍煎瓙鐨勬渶澶ф渶灏忓簭鍙�
+     *
+     * @param engineerId
+     * @param temperingLayoutId
+     * @return
+     */
+    List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId);
 }
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 ebaec10..13e1d47 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
@@ -7,6 +7,8 @@
 import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
 import com.mes.bigstorage.mapper.BigStorageCageDetailsMapper;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
@@ -20,6 +22,7 @@
 import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.mapper.TemperingGlassInfoMapper;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -48,6 +51,9 @@
     private BigStorageCageService bigStorageCageService;
     @Resource
     private GlassInfoMapper glassInfoMapper;
+
+    @Value("${mes.minCount}")
+    private int minCount;
 
     /**
      * 鏌ヨ杩�/鍑虹墖浠诲姟
@@ -214,19 +220,17 @@
 
     @Override
     public BigStorageDTO queryTargetSlotByTempering(GlassInfo glassInfo) {
-//        MPJLambdaWrapper<BigStorageDTO> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
-//                .selectAll(BigStorageDTO.class)
-//                .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
-//                .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
-//                .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1)
-//                .last("limit 1");
         BigStorageDTO bigStorageDTO = null;
         MPJLambdaWrapper<BigStorageCage> wrapper = new MPJLambdaWrapper<>(BigStorageCage.class)
                 .selectAsClass(BigStorageCage.class, BigStorageDTO.class)
                 .leftJoin(BigStorageCageDetails.class, BigStorageCageDetails::getSlot, BigStorageCage::getSlot)
                 .eq(BigStorageCageDetails::getTemperingLayoutId, glassInfo.getTemperingLayoutId())
-                .eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1)
                 .last("limit 1");
+        if (glassInfo.getTemperingLayoutId() == 0) {
+            wrapper.eq(BigStorageCageDetails::getWidth, glassInfo.getWidth()).eq(BigStorageCageDetails::getHeight, glassInfo.getHeight());
+        } else {
+            wrapper.eq(BigStorageCageDetails::getTemperingFeedSequence, glassInfo.getTemperingFeedSequence() + 1);
+        }
         bigStorageDTO = bigStorageCageService.selectJoinOne(BigStorageDTO.class, wrapper);
         if (null != bigStorageDTO) {
             return bigStorageDTO;
@@ -253,4 +257,20 @@
 
 
     }
+
+    @Override
+    public TemperingLayoutDTO temperingIsAll() {
+        return baseMapper.temperingIsAll();
+    }
+
+
+    @Override
+    public TemperingLayoutDTO queryTemperingOccupySlot() {
+        return baseMapper.queryTemperingOccupySlot(minCount);
+    }
+
+    @Override
+    public List<SlotSequenceDTO> queryGlassMaxAndMin(String engineerId, Integer temperingLayoutId) {
+        return baseMapper.queryGlassMaxAndMin(engineerId, temperingLayoutId);
+    }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
index a9959d5..3ee5490 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragetask/entity/BigStorageCageOutTask.java
@@ -2,16 +2,16 @@
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
-
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+
 /**
  * <p>
- * 
+ *
  * </p>
  *
  * @author zhoush
@@ -24,11 +24,23 @@
 
     private static final long serialVersionUID = 1L;
 
+    public BigStorageCageOutTask() {
+    }
+
+    public BigStorageCageOutTask(String glassId, Integer startSlot, Integer endSlot, Integer trainNumber, Integer serialNumber, Integer taskState) {
+        this.glassId = glassId;
+        this.startSlot = startSlot;
+        this.endSlot = endSlot;
+        this.trainNumber = trainNumber;
+        this.serialNumber = serialNumber;
+        this.taskState = taskState;
+    }
+
     /**
      * 涓婚敭id
      */
-      @ApiModelProperty(value = "涓婚敭id", position = 2)
-      @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭id", position = 2)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     /**
@@ -66,6 +78,5 @@
      */
     @ApiModelProperty(value = "浠诲姟鐘舵��", position = 8)
     private Integer taskState;
-
 
 }
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 02228b4..3e689cb 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
@@ -3,11 +3,14 @@
 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.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.BigStorageDTO;
+import com.mes.bigstorage.entity.dto.SlotSequenceDTO;
+import com.mes.bigstorage.entity.dto.TemperingLayoutDTO;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
-import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.bigstoragetask.entity.BigStorageCageFeedTask;
+import com.mes.bigstoragetask.entity.BigStorageCageOutTask;
 import com.mes.bigstoragetask.service.BigStorageCageFeedTaskService;
 import com.mes.bigstoragetask.service.BigStorageCageOutTaskService;
 import com.mes.common.S7object;
@@ -17,6 +20,7 @@
 import com.mes.edgglasstask.service.EdgGlassTaskInfoService;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.temperingglass.entity.TemperingGlassInfo;
 import com.mes.temperingglass.service.TemperingGlassInfoService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -24,15 +28,12 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
-import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 /**
@@ -42,8 +43,6 @@
 @Slf4j
 public class PlcStorageCageTask {
 
-    @Resource
-    private BigStorageCageService bigStorageCageService;
     @Resource
     private BigStorageCageDetailsService bigStorageCageDetailsService;
     @Resource
@@ -57,148 +56,45 @@
     @Resource
     private TemperingGlassInfoService temperingGlassInfoService;
 
+    private static final String REQUEST_WORD = "1";
+
     @Value("${mes.sequence.order}")
     private boolean sequenceOrder;
 
-    public static boolean bigStorageCageFullAlarm = false;
+    @Value("${mes.slotWidth}")
+    private Integer slotWidth;
 
-    private int line1Time = 0;
-    private int line2Time = 0;
-
-    /**
-     * fixedRate : 涓婁竴涓皟鐢ㄥ紑濮嬪悗鍐嶆璋冪敤鐨勫欢鏃讹紙涓嶇敤绛夊緟涓婁竴娆¤皟鐢ㄥ畬鎴愶級
-     * fixedDelay : 涓婁竴涓皟鐢ㄧ粨鏉熷悗鍐嶆璋冪敤鐨勫欢鏃�
-     */
-//    @Scheduled(fixedDelay = 5000)
-//    public void plcStorageCageTask() throws InterruptedException {
-//
-//        PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
-//        try {
-//
-//            String plcFeedGlassid = "";
-//            String plcFeedReqLine = "0";
-//            if ("1".equals(plcParameterObject.getPlcParameter("D01Request").getValue())) {
-//                plcFeedReqLine = "1";
-//                plcFeedGlassid = plcParameterObject.getPlcParameter("D01ID1").getValue();
-//            }
-//            if ("1".equals(plcParameterObject.getPlcParameter("D04Request").getValue())) {
-//                plcFeedReqLine = "2";
-//                plcFeedGlassid = plcParameterObject.getPlcParameter("D04ID1").getValue();
-//            }
-//            line1Time += 1;
-//            line2Time += 1;
-//
-//            if (!("0".equals(plcFeedReqLine))) {
-//                log.info("1銆丳lc杩涚墖璇锋眰鏃�");
-//                BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
-//                GlassInfo glassInfo = glassInfoService.getById(plcFeedGlassid);
-//                log.info("2銆佹牴鎹幓鐠僫d鑾峰彇鐜荤拑淇℃伅" + glassInfo);
-//                if (bigStorageCageDetailsService.selectGetBoard(plcFeedReqLine) >= 0) {
-//                    BigStorageCageDetails slotInfo = bigStorageCageService.feedGlass(glassInfo, bigStorageCageDetails);
-//                    if (slotInfo != null) {
-//                        int taskType = edgGlassTaskInfoService.judgeTasktype(plcFeedReqLine);
-//                        log.info("3銆佹煡璇换鍔¤〃鍒ゆ柇褰撳墠浠诲姟绫诲瀷涓轰笂杞︾瓑鍒拌繕鏄笂杞﹀惎鍔�" + taskType);
-//                        bigStorageCageFeedTaskService.addFeedTask(slotInfo, Integer.parseInt(plcFeedReqLine), taskType);
-//                        log.info("4銆佹坊鍔犱换鍔″埌浠诲姟琛�");
-//                        bigStorageCageFullAlarm = false;
-//                    } else {
-//                        bigStorageCageFullAlarm = true;
-//                    }
-//                } else {
-//                    log.info("褰撳墠鐜荤拑瀹藉害涓嶅涓婅溅" + glassInfo);
-//                    if (!("1".equals(plcFeedReqLine))) {
-//                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
-//                    } else {
-//                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
-//                    }
-//                }
-//            } else {
-//                List<BigStorageCageFeedTask> bigStorageCageFeedTaskList = bigStorageCageFeedTaskService.querybigStorageCageFeedTask(1);
-//                log.info("5銆佹煡璇换鍔¤〃鏄惁鏈夊凡缁忓畬鎴愮殑杩涚墖浠诲姟" + bigStorageCageFeedTaskList.size());
-//                for (BigStorageCageFeedTask bigStorageCageFeedTask : bigStorageCageFeedTaskList
-//                ) {
-//                    BigStorageCageDetails bigStorageCageDetails = new BigStorageCageDetails();
-//                    bigStorageCageDetails.setId(bigStorageCageFeedTask.getId());
-//                    bigStorageCageDetails.setState(1);
-//                    bigStorageCageDetailsService.updateById(bigStorageCageDetails);
-//                    log.info("6銆佷慨鏀圭悊鐗囩璇︽儏鐜荤拑鐘舵��");
-//                    bigStorageCageFeedTaskService.removeById(bigStorageCageFeedTask);
-//                    log.info("7銆佸垹闄ゅ凡缁忓畬鎴愮殑杩涚墖浠诲姟");
-//                }
-//                //鍚姩闃堝��
-//                if (line1Time >= 300) {
-//                    if ("0".equals(plcParameterObject.getPlcParameter("D05Go").getValue())) {
-//                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
-//                    }
-//                }
-//                if (line2Time >= 300) {
-//                    if ("0".equals(plcParameterObject.getPlcParameter("D02Go").getValue())) {
-//                        S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
-//                    }
-//                }
-//            }
-//
-//            //鏌ヨ鍑虹墖琛ㄦ槸鍚︽湁浠诲姟鏈畬鎴愮殑浠诲姟
-//            List<BigStorageCageOutTask> bigStorageCageOutTask = bigStorageCageOutTaskService.querybigStorageCageOutTask(0);
-//            if (bigStorageCageOutTask.size() == 0) {
-//                boolean result = bigStorageCageService.outGlass();
-//                log.info("8銆佹病鏈夋湭瀹屾垚浠诲姟鏃惰皟鐢ㄥ嚭鐗囨帴鍙�");
-//                if (result == false) {
-//                    temperingGlassInfoService.schedulingTask();
-//                }
-//            }
-//            bigStorageCageOutTaskService.updateOutTask();
-//            log.info("9銆佹牴鎹换鍔¤〃鐘舵�佷慨鏀归挗鍖栧皬鐗囪〃浠诲姟鐘舵��");
-//
-//            //鏉ヤ笉鍙婇�佹椂鐩存帴璧�
-//            String line = Integer.toString(edgGlassTaskInfoService.startTask());
-//
-//            if (!(line.equals(plcFeedReqLine))) {
-//                S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D02Go").getAddress(), 1);
-//            } else {
-//                S7object.getinstance().plccontrol.writetime(plcParameterObject.getPlcParameter("D05Go").getAddress(), 1);
-//            }
-//
-//
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
     @Scheduled(fixedDelay = 5000)
     public void plcToHomeEdgScan() {
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
         String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue();
-        String d01ID1 = plcParameterObject.getPlcParameter("D01ID1").getValue();
+        String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue();
         String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue();
-        String d04ID1 = plcParameterObject.getPlcParameter("D04ID1").getValue();
+        String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue();
         log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧d01涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};鑾峰彇鍒扮殑璇锋眰瀛梔04涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};",
-                d01Request, d01ID1, d04Request, d04ID1);
-        if (!"1".equals(d01Request) && !"1".equals(d04Request)) {
+                d01Request, d01Id, d04Request, d04Id);
+        if (!REQUEST_WORD.equals(d01Request) && !REQUEST_WORD.equals(d04Request)) {
             log.info("涓ゆ潯绾挎湭鏀跺埌杩涚墖浠诲姟锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�");
             return;
         }
-        //        0锛氫笉骞查 锛� 1锛氭潯浠舵弧瓒虫儏鍐典笅绔嬪嵆鍙戣溅
-        String d02GoAdress = plcParameterObject.getPlcParameter("D02Go").getAddress();
-        //        0锛氫笉骞查 锛� 1锛氭潯浠舵弧瓒虫儏鍐典笅绔嬪嵆鍙戣溅
-        String d05GoAdress = plcParameterObject.getPlcParameter("D05Go").getAddress();
         Boolean flag01 = Boolean.FALSE;
         Boolean flag04 = Boolean.FALSE;
         //鎸夌収绾胯矾鍙婄幓鐠僫d鑾峰彇鐩搁偦涓ゅ潡鐜荤拑 鍗ц浆绔嬩笂鐨勭幓鐠�
-        if ("1".equals(d01Request)) {
-            flag01 = judgeGlassTypeStatus(d01ID1, Const.A09_OUT_TARGET_POSITION);
+        if (REQUEST_WORD.equals(d01Request)) {
+            flag01 = judgeGlassTypeStatus(d01Id, Const.A09_OUT_TARGET_POSITION);
         }
-        if ("1".equals(d04Request)) {
-            flag04 = judgeGlassTypeStatus(d04ID1, Const.A10_OUT_TARGET_POSITION);
+        if (REQUEST_WORD.equals(d04Request)) {
+            flag04 = judgeGlassTypeStatus(d04Id, Const.A10_OUT_TARGET_POSITION);
         }
         if (flag01 && flag04) {
             //姣旇緝鏈�鏃╀竴鐗囦换鍔$殑鐗堝浘id鍙婄増搴� 姹傚嚭鍗ц浆绔嬬殑绾胯矾
             Integer startLine = getStartLine();
             //璁$畻鐩爣鏍煎瓙锛屽彂閫佸惎鍔ㄤ换鍔�
-            computeTargetByLine(startLine, d02GoAdress, d05GoAdress);
+            computeTargetByLine(startLine);
         } else if (flag01 || flag04) {
             Integer startLine = flag01.equals(Boolean.TRUE) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
             //璁$畻鐩爣鏍煎瓙锛屽彂閫佸惎鍔ㄤ换鍔�
-            computeTargetByLine(startLine, d02GoAdress, d05GoAdress);
+            computeTargetByLine(startLine);
         } else {
             log.info("涓ゆ潯绾挎湭鏀跺埌杩涚墖浠诲姟锛岀粨鏉熸湰娆℃壂鎻忚繘鍗ц浆绔嬩换鍔�");
         }
@@ -208,21 +104,21 @@
     public void plcToHomeEdgFreeCarTask() {
         PlcParameterObject plcParameterObject = S7object.getinstance().PlcMesObject;
         String freeCar = plcParameterObject.getPlcParameter("freeCar").getValue();
-        if ("1".equals(freeCar)) {
+        if (REQUEST_WORD.equals(freeCar)) {
             log.info("澶ц溅闈炵┖闂�");
             return;
         }
         String d01Request = plcParameterObject.getPlcParameter("D01Request").getValue();
-        String d01ID1 = plcParameterObject.getPlcParameter("D01ID1").getValue();
+        String d01Id = plcParameterObject.getPlcParameter("D01ID1").getValue();
         String d04Request = plcParameterObject.getPlcParameter("D04Request").getValue();
-        String d04ID1 = plcParameterObject.getPlcParameter("D04ID1").getValue();
+        String d04Id = plcParameterObject.getPlcParameter("D04ID1").getValue();
         log.info("1銆佽幏鍙栧埌鐨勮姹傚瓧d01涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};鑾峰彇鍒扮殑璇锋眰瀛梔04涓猴細{}锛岃幏鍙栧埌鐨勬壂鎻廔D涓猴細{};",
-                d01Request, d01ID1, d04Request, d04ID1);
+                d01Request, d01Id, d04Request, d04Id);
         //涓ゆ潯绾块兘鏈夎繘鍗ц浆绔嬩换鍔★紝鐩存帴缁撴潫
         if (Const.BIG_STORAGE_REQUEST_IN.equals(d01Request)
                 && Const.BIG_STORAGE_REQUEST_IN.equals(d04Request)
-                && StringUtils.isNotBlank(d01ID1)
-                && StringUtils.isNotBlank(d04ID1)) {
+                && StringUtils.isNotBlank(d01Id)
+                && StringUtils.isNotBlank(d04Id)) {
             log.info("涓ゆ潯绾块兘瀛樺湪杩涚墖浠诲姟锛岀粨鏉熶换鍔�");
             return;
         }
@@ -232,35 +128,111 @@
             log.info("涓ゆ潯绾垮崸杞珛涓虹┖鎴栬�呮湁杩涚墖浠诲姟鏈畬鎴愶紝缁撴潫浠诲姟");
             return;
         }
-//        0锛氫笉骞查 锛� 1锛氭潯浠舵弧瓒虫儏鍐典笅绔嬪嵆鍙戣溅
-        String d02GoAdress = plcParameterObject.getPlcParameter("D02Go").getAddress();
-        //        0锛氫笉骞查 锛� 1锛氭潯浠舵弧瓒虫儏鍐典笅绔嬪嵆鍙戣溅
-        String d05GoAdress = plcParameterObject.getPlcParameter("D05Go").getAddress();
         String line1 = lineList.get(0);
-        String flagLine = line1.equals(Const.A09_OUT_TARGET_POSITION) ? d01ID1 : d04ID1;
+        String flagLine = line1.equals(Const.A09_OUT_TARGET_POSITION) ? d01Id : d04Id;
         if (lineList.size() == 1) {
-            //鍙戦��
-            if (StringUtils.isNotBlank(flagLine)) {
-                return;
-            }
             //璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
-            computeTargetByLine(Integer.parseInt(flagLine), d02GoAdress, d05GoAdress);
+            computeTargetByLine(Integer.parseInt(flagLine));
+            return;
         }
-        if (StringUtils.isBlank(d01ID1) && StringUtils.isBlank(d04ID1)) {
+        if (StringUtils.isBlank(d01Id) && StringUtils.isBlank(d04Id)) {
             //姣旇緝鏈�鏃╀竴鐗囦换鍔$殑鐗堝浘id鍙婄増搴� 姹傚嚭鍗ц浆绔嬬殑绾胯矾
             Integer line = getStartLine();
             //璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
-            computeTargetByLine(line, d02GoAdress, d05GoAdress);
+            computeTargetByLine(line);
             return;
         }
-        int outLine = StringUtils.isBlank(d01ID1) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
+        int outLine = StringUtils.isBlank(d01Id) ? Const.A09_OUT_TARGET_POSITION : Const.A10_OUT_TARGET_POSITION;
         //璁$畻浠诲姟琛ㄨ繘鐗囨牸瀛� 鍙戦�佽繘鐗囦换鍔�
-        computeTargetByLine(outLine, d02GoAdress, d05GoAdress);
+        computeTargetByLine(outLine);
     }
 
     @Scheduled(fixedDelay = 5000)
     public void plcToHomeEdgOutTask() {
+        //浠诲姟鏁版嵁  鑾峰彇杞﹀瓙瀛樻斁鐜荤拑鏈�澶ф暟閲�  鐜荤拑闂撮殧
+        List<BigStorageCageOutTask> bigStorageCageOutTaskList = new ArrayList<>();
+        //鏄惁鏈夋鍦ㄩ挗鍖栫殑鐜荤拑
+        List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(new LambdaQueryWrapper<TemperingGlassInfo>()
+                .eq(TemperingGlassInfo::getState, Const.TEMPERING_NEW)
+                .orderBy(Boolean.TRUE, sequenceOrder, TemperingGlassInfo::getTemperingFeedSequence));
+        if (CollectionUtils.isNotEmpty(temperingGlassInfoList)) {
+            log.info("鏈夋鍦ㄥ嚭鐗囩殑閽㈠寲浠诲姟");
+            //鎵撹溅鍓╀綑灏哄
+            Integer remainWidth = Const.BIG_STORAGE_WIDTH;
+            for (TemperingGlassInfo e : temperingGlassInfoList) {
+                if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth) {
+                    break;
+                }
+                remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP;
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getState(), Const.A09_OUT_TARGET_POSITION,
+                        0, 0, 1));
+            }
+            bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+            return;
+        }
+        //todo:鏄惁鏈変汉宸ヤ笅鐗囦换鍔�   鏈夌洿鎺ュ嚭
+        //绗煎唴鏄惁鏈変汉宸ヤ笅鐗囩幓鐠� 鏃� 缁撴潫
+        List<BigStorageCageDetails> artificialList = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                .eq(BigStorageCageDetails::getState, Const.GLASS_STATE_ARTIFICIAL).orderByDesc(BigStorageCageDetails::getWidth));
+        if (CollectionUtils.isEmpty(artificialList)) {
+            Integer remainWidth = Const.BIG_STORAGE_WIDTH;
+            for (BigStorageCageDetails e : artificialList) {
+                if (remainWidth < e.getWidth().intValue()) {
+                    break;
+                }
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getSlot(), 0, 0, 0, 1));
+                remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP;
+            }
+            bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+            return;
+        }
 
+        //閽㈠寲浼樺厛锛氳幏鍙栫悊鐗囩  鐜荤拑灏忕墖  鐮存崯琛� 鏁伴噺   鍒ゆ柇绗煎唴鐗堝浘鏄惁鍒伴綈
+        TemperingLayoutDTO temperingLayoutDTO = bigStorageCageDetailsService.temperingIsAll();
+        if (null != temperingLayoutDTO) {
+            //鐜荤拑鍒伴綈
+            //鍒伴綈锛屽皢鐜荤拑灏忕墖鏁版嵁瀛樺叆閽㈠寲灏忕墖琛紝閫昏緫鐢熸垚鍑虹墖浠诲姟  缁撴潫
+            List<BigStorageCageDetails> bigStorageCageDetails = bigStorageCageDetailsService.list(new LambdaQueryWrapper<BigStorageCageDetails>()
+                    .eq(BigStorageCageDetails::getTemperingLayoutId, temperingLayoutDTO.getTemperingLayoutId())
+                    .eq(BigStorageCageDetails::getEngineerId, temperingLayoutDTO.getEngineerId()));
+            List<TemperingGlassInfo> temperingGlassInfos = bigStorageCageDetails.stream().map(e -> {
+                TemperingGlassInfo info = new TemperingGlassInfo();
+                BeanUtils.copyProperties(e, info);
+                return info;
+            }).collect(Collectors.toList());
+            temperingGlassInfoService.saveBatch(temperingGlassInfos);
+
+            //澶ц溅鍓╀綑灏哄
+            Integer remainWidth = Const.BIG_STORAGE_WIDTH;
+            for (TemperingGlassInfo e : temperingGlassInfoList) {
+                if (bigStorageCageOutTaskList.size() > 5 || e.getWidth() > remainWidth) {
+                    break;
+                }
+                remainWidth = remainWidth - e.getWidth().intValue() - Const.BIG_STORAGE_GAP;
+                bigStorageCageOutTaskList.add(new BigStorageCageOutTask(e.getGlassId(), e.getState(), Const.A09_OUT_TARGET_POSITION,
+                        0, 0, 1));
+            }
+            bigStorageCageOutTaskService.saveBatch(bigStorageCageOutTaskList);
+            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);
+                if (first.getMinSequence() == second.getMaxSequence() + 1
+                        && second.getRemainWidth() > Const.BIG_STORAGE_WIDTH - first.getRemainWidth() - Const.BIG_STORAGE_GAP) {
+                    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(),
+                            0, 0, 1)).collect(Collectors.toList());
+                    bigStorageCageOutTaskService.saveBatch(outTasks);
+                    return;
+                }
+            }
+        }
     }
 
 
@@ -276,32 +248,29 @@
         Assert.isFalse(CollectionUtils.isEmpty(edgGlassTaskInfoList), "璇嗗埆鐜荤拑淇℃伅鏈嚭鐜板湪灏哄琛ㄤ腑,鑾峰彇鐩搁偦涓ゅ潡鐜荤拑澶辫触");
         //2銆佽幏鍙栧崸杞珛鍓╀綑瀹藉害
         Map<String, Object> map = bigStorageCageFeedTaskService.getMap(new QueryWrapper<BigStorageCageFeedTask>()
-                .select("cast(5000 - sum(width + 20)  as INT)as remainWidth")
+                .select("cast(" + Const.BIG_STORAGE_WIDTH + " - sum(width + " + Const.BIG_STORAGE_GAP + ")  as INT) as remainWidth")
                 .eq("line", line).eq("task_state", Const.BIG_STORAGE_IN_UP));
-        Integer remainWidth = null == map ? 5000 : Integer.parseInt(map.get("remainWidth") + "");
+        Integer remainWidth = null == map ? Const.BIG_STORAGE_WIDTH : Integer.parseInt(map.get("remainWidth") + "");
         //2銆佽幏鍙栧崸杞珛
         Integer widthFirst = edgGlassTaskInfoList.get(0).getWidth();
         if (edgGlassTaskInfoList.size() == 1) {
             if (remainWidth >= widthFirst) {
                 addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthFirst);
                 return Boolean.FALSE;
-            } else {
-                //璁板綍鏃犳硶鏀句笅鐜荤拑锛屽悗缁垽鏂惎鍔�
-                return Boolean.TRUE;
             }
-        }
-        Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth();
-        if (remainWidth >= widthFirst) {
-            if (remainWidth - widthFirst - Const.BIG_STORAGE_GAP >= widthSecond) {
-                addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthSecond);
-            } else {
-                addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthSecond);
-            }
-            return Boolean.FALSE;
-
         } else {
-            return Boolean.TRUE;
+            Integer widthSecond = edgGlassTaskInfoList.get(1).getWidth();
+            if (remainWidth >= widthFirst) {
+                if (remainWidth - widthFirst - Const.BIG_STORAGE_GAP >= widthSecond) {
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_WAIT, widthSecond);
+                    return Boolean.FALSE;
+                } else {
+                    addFeedTask(glassId, line, Const.BIG_STORAGE_IN_RUN, widthSecond);
+                }
+            }
         }
+        //璁板綍鏃犳硶鏀句笅鐜荤拑锛屽悗缁垽鏂惎鍔�
+        return Boolean.TRUE;
     }
 
     /**
@@ -321,7 +290,7 @@
     /**
      * 鑾峰彇闇�瑕佸惎鍔ㄧ殑绾胯矾锛氫袱鏉$嚎閮藉彲鍚姩 鑾峰彇绗竴鐗囩幓鐠冪増鍥緄d鏈�灏� 鐗堝簭鏈�澶х殑绾胯矾
      *
-     * @return
+     * @return 闇�瑕佸惎鍔ㄧ殑绾胯矾
      */
     public Integer getStartLine() {
         List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
@@ -340,7 +309,7 @@
     /**
      * 璁$畻浠诲姟琛ㄨ繘鐗囩嚎璺殑鐩爣鏍煎瓙锛屽苟鍚姩浠诲姟
      */
-    public boolean computeTargetByLine(Integer line, String d02GoAdress, String d05GoAdress) {
+    public boolean computeTargetByLine(Integer line) {
         //1銆佽幏鍙栦换鍔¤〃涓殑鎵�鏈夌幓鐠冿紙鎸囧畾绾胯矾涓斿凡缁忚繘鍗ц浆绔嬪畬鎴愶級
         List<BigStorageCageFeedTask> taskList = bigStorageCageFeedTaskService.list(new LambdaQueryWrapper<BigStorageCageFeedTask>()
                 .eq(BigStorageCageFeedTask::getLine, line)
@@ -349,43 +318,67 @@
         //2銆佸幓绗煎瓙鍐呮煡鎵炬槸鍚﹀彲浠ョ户缁瓨鏀剧殑绗煎瓙
         List<String> glassIds = taskList.stream().map(BigStorageCageFeedTask::getGlassId).collect(Collectors.toList());
         List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>().in(GlassInfo::getGlassId, glassIds));
-        AtomicReference<Integer> temperingLayoutIdTemp = new AtomicReference<>(0);
-        AtomicReference<Integer> temperingFeedSequenceTemp = new AtomicReference<>(0);
-        AtomicReference<BigStorageDTO> bigStorageDTO = new AtomicReference<>(new BigStorageDTO());
-        Map<String, GlassInfo> glassInfoMap = glassInfos.stream().collect(Collectors.toMap(GlassInfo::getGlassId, p -> p));
+
         List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
-        AtomicBoolean taskFlag = new AtomicBoolean(Boolean.TRUE);
-        taskList.stream().forEach(e -> {
-            BigStorageCageDetails cageDetails = new BigStorageCageDetails();
-            //鎸夌収鐗堝浘淇℃伅鑾峰彇杩涚墖绗煎瓙鏍煎瓙鍙�
+        List<BigStorageCageDetails> temperingList = computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.TRUE);
+        List<BigStorageCageDetails> noTemperingList = computeIsTemperingTargetByLine(glassInfos, taskList, Boolean.FALSE);
+        bigStorageCageDetailsList.addAll(temperingList);
+        bigStorageCageDetailsList.addAll(noTemperingList);
+        //4銆佸湪璇︽儏琛ㄤ腑鍔犲叆杩涚墖鐜荤拑淇℃伅
+        bigStorageCageDetailsService.saveBatch(bigStorageCageDetailsList);
+        return Boolean.TRUE;
+    }
+
+    /**
+     * 鏄惁閽㈠寲鐜荤拑杩涚鐩爣浣嶇疆
+     *
+     * @param glassInfos  褰撴潯绾垮崸杞珛鎵�鏈夌幓鐠�
+     * @param taskList    褰撴潯绾垮崸杞珛鎵�鏈変换鍔�
+     * @param isTempering true 閽㈠寲  false  涓嶉挗鍖�
+     */
+    private List<BigStorageCageDetails> computeIsTemperingTargetByLine(List<GlassInfo> glassInfos, List<BigStorageCageFeedTask> taskList, Boolean isTempering) {
+        Map<String, GlassInfo> glassInfoMap;
+        if (isTempering) {
+            glassInfoMap = glassInfos.stream().filter(e -> e.getTemperingLayoutId() != 0)
+                    .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p));
+        } else {
+            glassInfoMap = glassInfos.stream().filter(e -> e.getTemperingLayoutId() == 0)
+                    .collect(Collectors.toMap(GlassInfo::getGlassId, p -> p));
+        }
+
+        //璁剧疆涓存椂鍙橀噺鎺ュ彈鐗堝浘id锛岀増搴忋�佹牸瀛愬彿鍙婂墿浣欏搴�
+        Integer temperingLayoutIdTemp = 0;
+        Integer temperingFeedSequenceTemp = 0;
+        BigStorageDTO bigStorageDTO = new BigStorageDTO();
+
+        List<BigStorageCageDetails> bigStorageCageDetailsList = new ArrayList<>();
+        for (BigStorageCageFeedTask e : taskList) {
             GlassInfo info = glassInfoMap.get(e.getGlassId());
+            if (info == null) {
+                continue;
+            }
+            BigStorageCageDetails cageDetails = new BigStorageCageDetails();
             BeanUtils.copyProperties(info, cageDetails);
             if (temperingLayoutIdTemp.equals(info.getTemperingLayoutId())
                     && temperingFeedSequenceTemp.equals(info.getTemperingFeedSequence() + 1)
-                    && info.getWidth() <= bigStorageDTO.get().getWidth()) {
-                bigStorageDTO.get().setWidth(bigStorageDTO.get().getWidth() - info.getWidth().intValue() - Const.BIG_STORAGE_GAP);
+                    && info.getWidth() <= bigStorageDTO.getWidth()) {
+                bigStorageDTO.setWidth(bigStorageDTO.getWidth() - info.getWidth().intValue() - Const.BIG_STORAGE_GAP);
             } else {
-                bigStorageDTO.set(bigStorageCageDetailsService.queryTargetSlotByTempering(info));
+                bigStorageDTO = bigStorageCageDetailsService.queryTargetSlotByTempering(info);
             }
-            e.setTargetSlot(bigStorageDTO.get().getSlot());
-            cageDetails.setSlot(bigStorageDTO.get().getSlot());
-            cageDetails.setState(Const.GLASS_STATE_IN);
-            temperingLayoutIdTemp.set(info.getTemperingLayoutId());
-            temperingFeedSequenceTemp.set(info.getTemperingFeedSequence());
-            bigStorageCageDetailsList.add(cageDetails);
-            taskFlag.set(bigStorageCageFeedTaskService.updateById(e));
-            if (!taskFlag.get()) {
-                return;
-            }
-        });
-        //3銆佹洿鏂拌繘鐗囦换鍔¤〃  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
 
-        //4銆佸湪璇︽儏琛ㄤ腑鍔犲叆杩涚墖鐜荤拑淇℃伅
-        bigStorageCageDetailsService.saveBatch(bigStorageCageDetailsList);
-        if (taskFlag.get()) {
-            String lineAddress = line.equals(Const.A09_OUT_TARGET_POSITION) ? d02GoAdress : d05GoAdress;
-//            S7object.getinstance().plccontrol.writeWord(lineAddress, (short) 1);
+            cageDetails.setSlot(bigStorageDTO.getSlot());
+            cageDetails.setState(Const.GLASS_STATE_IN);
+
+            e.setTargetSlot(bigStorageDTO.getSlot());
+            e.setTaskType(Const.BIG_STORAGE_IN_RUN);
+
+            temperingLayoutIdTemp = info.getTemperingLayoutId();
+            temperingFeedSequenceTemp = info.getTemperingFeedSequence();
+            //3銆佹洿鏂拌繘鐗囦换鍔¤〃  閬囧埌闂锛氭棤娉曟壒閲忔洿鏂帮紝鎵归噺鏇存柊鏃犳硶璧版寚瀹氫粠搴�
+            bigStorageCageFeedTaskService.updateById(e);
+            bigStorageCageDetailsList.add(cageDetails);
         }
-        return taskFlag.get();
+        return bigStorageCageDetailsList;
     }
 }
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
index 7209b1f..2a8d5ea 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/application.yml
@@ -12,4 +12,6 @@
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 mes:
   sequence:
-    order: false
\ No newline at end of file
+    order: false
+  minCount: 5
+  slotWidth: 5000
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
new file mode 100644
index 0000000..c016951
--- /dev/null
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.mes.bigstorage.mapper.BigStorageCageDetailsMapper">
+
+    <resultMap id="temperingLayoutDTO" type="com.mes.bigstorage.entity.dto.TemperingLayoutDTO">
+        <result column="engineer_id" property="engineerId"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="count" property="count"/>
+        <result column="slot_count" property="slotCount"/>
+    </resultMap>
+
+    <resultMap id="slotSequenceDTO" type="com.mes.bigstorage.entity.dto.SlotSequenceDTO">
+        <result column="engineer_id" property="engineerId"/>
+        <result column="tempering_layout_id" property="temperingLayoutId"/>
+        <result column="slot" property="slot"/>
+        <result column="max_sequence" property="maxSequence"/>
+        <result column="min_sequence" property="minSequence"/>
+        <result column="remain_width" property="remainWidth"/>
+    </resultMap>
+
+    <select id="temperingIsAll" resultMap="temperingLayoutDTO">
+        SELECT T.ENGINEER_ID,
+               T.TEMPERING_LAYOUT_ID,
+               COUNT(T.TEMPERING_FEED_SEQUENCE) AS COUNT
+        FROM
+            GLASS_INFO T
+            LEFT JOIN DAMAGE T1
+        ON T.ENGINEER_ID = T1.ENGINEER_ID
+            AND T.GLASS_ID = T1.GLASS_ID
+            LEFT JOIN BIG_STORAGE_CAGE_DETAILS T2 ON T.ENGINEER_ID = T2.ENGINEER_ID
+            AND T.GLASS_ID = T2.GLASS_ID
+        WHERE
+            T1.GLASS_ID IS NULL
+          AND T2.GLASS_ID IS NULL
+          AND ( T.ENGINEER_ID
+            , T.TEMPERING_LAYOUT_ID ) IN ( SELECT DISTINCT ENGINEER_ID
+            , TEMPERING_LAYOUT_ID FROM BIG_STORAGE_CAGE_DETAILS WHERE STATE = 100 )
+        GROUP BY
+            T.ENGINEER_ID,
+            T.TEMPERING_LAYOUT_ID
+        HAVING
+            COUNT = 0
+        ORDER BY
+            T.TEMPERING_LAYOUT_ID
+            LIMIT 1
+    </select>
+
+    <select id="queryTemperingOccupySlot" resultMap="temperingLayoutDTO">
+        SELECT 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
+    </select>
+    <select id="queryGlassMaxAndMin" resultMap="slotSequenceDTO">
+        SELECT T.*,
+               T1.REMAIN_WIDTH
+        FROM (
+                 SELECT ENGINEER_ID,
+                        TEMPERING_LAYOUT_ID,
+                        SLOT,
+                        MAX(TEMPERING_FEED_SEQUENCE) AS MAX_SEQUENCE,
+                        MIN(TEMPERING_FEED_SEQUENCE) AS MIN_SEQUENCE
+                 FROM BIG_STORAGE_CAGE_DETAILS
+                 WHERE ENGINEER_ID = #{engineerId}
+                   AND TEMPERING_LAYOUT_ID = #{temperingLayoutId}
+                 GROUP BY ENGINEER_ID,
+                          TEMPERING_LAYOUT_ID,
+                          SLOT
+             ) T
+                 INNER JOIN BIG_STORAGE_CAGE T1 ON T.SLOT = T1.SLOT
+        ORDER BY T.MAX_SEQUENCE DESC
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
index ae11d30..3dacdba 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/test/java/com/mes/CacheVerticalGlassModuleApplicationTest.java
@@ -33,6 +33,11 @@
     }
 
     @Test
+    public void outGlass() {
+        log.info("瀹屾暣璺緞锛歿}", bigStorageCageService.outGlass());
+    }
+
+    @Test
     public void computeTargetByLine() {
 //        log.info("鑾峰彇澶х悊鐗囩淇℃伅锛歿}",bigStorageCageService.querybigStorageCageDetail());
         plcStorageCageTask.computeTargetByLine(2001, "", "");

--
Gitblit v1.8.0