From d3df1630ad3e1c71b61d177ee818d5c5c94e97c0 Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期六, 11 十月 2025 18:45:29 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject

---
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/BigStorageCageDetailsService.java                      |    8 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java                                                  |   29 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java                                                     |   21 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java                                 |   10 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml                                         |   11 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java                                          |   62 +-
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/entity/request/LoadGlassRequest.java                    |   22 
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/OptimizeProjectMapper.xml                                                                 |   56 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java                                                  |   26 +
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java                  |    5 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/controller/HollowBigStorageCageHistoryTaskController.java             |    6 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java                         |   22 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java                              |    9 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java                               |   11 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/impl/HollowBigStorageCageHistoryTaskServiceImpl.java          |   13 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java                      |   56 +
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java                                                      |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java                                               |   29 +
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java                                                        |   18 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java                             |   11 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                                       |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageHistoryTaskServiceImpl.java |   18 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java                   |    7 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java             |   10 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/HollowBigStorageCageHistoryTaskService.java                   |    2 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/controller/BigStorageCageDetailsController.java                |   14 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/HollowGlassApplication.java                                                      |    2 
 UI-Project/src/views/EngineerScheduling/engineerScheduling.vue                                                                                           |  248 ++++++++++
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java                            |    5 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-dev.yml                                                                 |   22 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java                                                          |   32 +
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/controller/LoadGlassDeviceTaskHistoryController.java    |   22 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageHistoryTaskService.java          |    2 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java                             |    8 
 hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java                                                          |    5 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java                                            |   12 
 UI-Project/src/router/index.js                                                                                                                           |   14 
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java                                         |   37 +
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java                                             |   38 +
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/controller/BigStorageCageHistoryTaskController.java    |    6 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml                                        |  246 +++++++--
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardGlassInfoDTO.java                                      |    4 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml                                            |  187 +++++--
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java                           |    4 
 44 files changed, 1,143 insertions(+), 231 deletions(-)

diff --git a/UI-Project/src/router/index.js b/UI-Project/src/router/index.js
index 2d25ffc..034f87c 100644
--- a/UI-Project/src/router/index.js
+++ b/UI-Project/src/router/index.js
@@ -273,6 +273,20 @@
       },
     ]
   },
+  
+  /*----------- 宸ョ▼鎺掍骇 ----------------*/
+  {
+    path: 'engineerScheduling',
+    name: 'engineerScheduling',
+    component: () => import('../views/EngineerScheduling/engineerScheduling.vue'),
+    children: [
+      {
+        path: '/EngineerScheduling/engineerScheduling',
+        name: 'engineerScheduling',
+        component: () => import('../views/EngineerScheduling/engineerScheduling.vue')
+      },
+    ]
+  },
         /*----------- 涓┖ ----------------*/
         {
           path: 'hollow',
diff --git a/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue b/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
new file mode 100644
index 0000000..683aa1b
--- /dev/null
+++ b/UI-Project/src/views/EngineerScheduling/engineerScheduling.vue
@@ -0,0 +1,248 @@
+<script lang="ts" setup>
+import { ref, computed, watch, onMounted } from 'vue'
+import { useI18n } from 'vue-i18n'
+import { ElMessage, ElTransfer, ElTabs, ElTabPane, ElButton } from 'element-plus'
+import request from '@/utils/request'
+
+const { t } = useI18n()
+
+const activeTab = ref('cutting1')
+
+// Transfer缁勪欢鎵�闇�鐨勬暟鎹牸寮�
+interface TransferDataItem {
+    key: string
+    label: string
+    projectNo: string
+    projectName: string
+}
+
+// 鎵�鏈夊彲閫夋暟鎹紙宸︿晶锛�
+const dataSource = ref<TransferDataItem[]>([])
+// 宸查�夋暟鎹殑keys锛堝彸渚э級
+const targetKeys = ref<string[]>([])
+
+// 鏍规嵁褰撳墠鏍囩椤佃幏鍙栧彸渚у垪琛ㄦ爣棰�
+const getRightListTitle = computed(() => {
+    switch (activeTab.value) {
+        case 'cutting1':
+            return t('large.countOutOne')
+        case 'cutting2':
+            return t('large.countOutTwo')
+        case 'tempered':
+            return t('large.temp')
+        default:
+            return '宸叉帓浜�'
+    }
+})
+
+// 鑾峰彇宸︿晶鏁版嵁婧�
+const fetchDataSource = async () => {
+    try {
+        // 鏍规嵁褰撳墠鏍囩椤甸�夋嫨涓嶅悓鐨勬帴鍙�
+        const apiUrl = activeTab.value === 'tempered'
+            ? '/cacheVerticalGlass/bigStorageCageDetails/queryEngineer'
+            : '/loadGlass/optimizeProject/queryEngineer';
+
+        const response = await request.post(apiUrl)
+
+        if (response.code === 200) {
+            dataSource.value = response.data.map((item: any) => {
+                const projectNo = activeTab.value === 'tempered' ? item.engineerId : item.projectNo
+                const name = activeTab.value === 'tempered' ? item.engineerId : (item.projectNo + "-" + item.projectName)
+
+                return {
+                    key: projectNo,
+                    label: name,
+                    projectNo: projectNo,
+                    projectName: activeTab.value === 'tempered' ? '' : item.projectName
+                }
+            })
+        } else {
+            ElMessage.error(`鑾峰彇鏁版嵁澶辫触: ${response.message || '鏈煡閿欒'}`)
+        }
+    } catch (error) {
+        console.error('鑾峰彇宸︿晶鏁版嵁澶辫触:', error)
+        ElMessage.error('璇风◢鍚庨噸璇�')
+    }
+}
+
+// 鑾峰彇鍙充晶宸查�夋暟鎹�
+const fetchTargetKeys = async () => {
+    try {
+        // 鏍规嵁褰撳墠鏍囩椤电‘瀹歵ype鍙傛暟
+        let type = 1; // 榛樿鍒囧壊涓�绾�
+        if (activeTab.value === 'cutting2') {
+            type = 2; // 鍒囧壊浜岀嚎
+        } else if (activeTab.value === 'tempered') {
+            type = 3; // 閽㈠寲
+        }
+
+        const response = await request.post('/loadGlass/optimizeProject/engineerScheduling', {
+            type: type
+        })
+
+        if (response.code === 200) {
+            // 瀵逛簬鎵�鏈夋爣绛鹃〉锛屼娇鐢╬rojectNo浣滀负key
+            targetKeys.value = response.data.map((item: any) => item.projectNo)
+
+            // 灏嗗彸渚ф暟鎹坊鍔犲埌dataSource涓紝纭繚Transfer缁勪欢鑳芥壘鍒板搴旂殑椤�
+            response.data.forEach((item: any) => {
+                // 妫�鏌ataSource涓槸鍚﹀凡瀛樺湪璇ラ」
+                const exists = dataSource.value.some(dataItem => dataItem.key === item.projectNo)
+                if (!exists) {
+                    // 濡傛灉涓嶅瓨鍦紝娣诲姞鍒癲ataSource涓�
+                    const newItem: TransferDataItem = {
+                        key: item.projectNo,
+                        label: `${item.projectNo}-${item.projectName || 'null'}`,
+                        projectNo: item.projectNo,
+                        projectName: item.projectName || ''
+                    }
+                    dataSource.value.push(newItem)
+                }
+            })
+        } else {
+            ElMessage.error(`鑾峰彇鏁版嵁澶辫触: ${response.message || '鏈煡閿欒'}`)
+        }
+    } catch (error) {
+        console.error('鑾峰彇鍙充晶鏁版嵁澶辫触:', error)
+        ElMessage.error('璇风◢鍚庨噸璇�')
+    }
+}
+
+// 淇濆瓨鎺掍骇淇℃伅
+const saveScheduling = async () => {
+    try {
+        // 鏍规嵁褰撳墠鏍囩椤电‘瀹歵ype鍙傛暟
+        let type = 1; // 榛樿鍒囧壊涓�绾�
+        if (activeTab.value === 'cutting2') {
+            type = 2; // 鍒囧壊浜岀嚎
+        } else if (activeTab.value === 'tempered') {
+            type = 3; // 閽㈠寲
+        }
+
+        const engineerList = targetKeys.value.map(projectNo => {
+            const dataItem = dataSource.value.find(item => item.key === projectNo)
+            return {
+                projectNo: projectNo,
+                projectName: dataItem ? dataItem.projectName : ''
+            }
+        })
+
+        const response = await request.post(`/loadGlass/optimizeProject/updateEngineerScheduling?type=${type}`, engineerList)
+
+        if (response.code === 200) {
+            ElMessage.success('淇濆瓨鎴愬姛')
+            // 閲嶆柊鍔犺浇鏁版嵁
+            await fetchDataSource()
+            await fetchTargetKeys()
+        } else {
+            ElMessage.error(`淇濆瓨澶辫触: ${response.message || '鏈煡閿欒'}`)
+        }
+    } catch (error) {
+        console.error('淇濆瓨鎺掍骇淇℃伅澶辫触:', error)
+        ElMessage.error('璇风◢鍚庨噸璇�')
+    }
+}
+
+// 閲嶇疆鎺掍骇淇℃伅
+const resetScheduling = async () => {
+    await fetchDataSource()
+    await fetchTargetKeys()
+    ElMessage.info(t('宸插彇娑�'))
+}
+
+// 鐩戝惉鏍囩椤靛垏鎹紝鏍规嵁涓嶅悓鏍囩椤靛姞杞藉搴旂殑鏁版嵁
+watch(activeTab, async (newTab) => {
+    // 閲嶆柊鑾峰彇鏁版嵁
+    await fetchDataSource()
+    await fetchTargetKeys()
+})
+
+
+// 绉婚櫎formatFunc锛屼娇鐢ㄩ粯璁ら厤缃紝Element Plus Transfer缁勪欢榛樿灏变細鏄剧ず鏁伴噺缁熻
+// 濡傛灉闇�瑕佽嚜瀹氫箟鏍囬鏄剧ず锛屽彲浠ラ�氳繃titles灞炴�у鐞�
+
+// 缁勪欢鎸傝浇鏃惰幏鍙栨暟鎹�
+onMounted(async () => {
+    await fetchDataSource()
+    await fetchTargetKeys()
+})
+</script>
+
+<template>
+    <div class="engineer-scheduling-container">
+        <el-tabs v-model="activeTab" class="custom-tabs">
+            <el-tab-pane :label="t('large.countOutOne')" name="cutting1" />
+            <el-tab-pane :label="t('large.countOutTwo')" name="cutting2" />
+            <el-tab-pane :label="t('large.temp')" name="tempered" />
+        </el-tabs>
+
+        <div class="transfer-wrapper">
+            <el-transfer v-model="targetKeys" class="custom-transfer" filterable :data="dataSource"
+                :titles="['寰呮帓浜�', getRightListTitle]" :button-texts="['', '']">
+                <template #right-empty>
+                    <el-empty :image-size="80" description="No data" />
+                </template>
+            </el-transfer>
+
+
+            <div class="transfer-save">
+                <el-button type="primary" @click="saveScheduling">
+                    {{ t('searchOrder.makesure') }}
+                </el-button>
+                <el-button type="primary" @click="resetScheduling">
+                    {{ t('delivery.cancel') }}
+                </el-button>
+            </div>
+        </div>
+    </div>
+</template>
+
+<style scoped>
+.engineer-scheduling-container {
+    padding: 20px;
+    border: 1px solid #dcdfe6;
+    border-radius: 4px;
+    background-color: #fff;
+}
+
+.custom-tabs {
+    margin-bottom: 20px;
+}
+
+::v-deep(.custom-tabs .el-tabs__item) {
+    font-size: 20px;
+}
+
+.transfer-wrapper {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    gap: 20px;
+}
+
+.transfer-save {
+    display: flex;
+    gap: 10px;
+}
+
+/* 鑷畾涔塗ransfer缁勪欢鐨勬牱寮� */
+::v-deep(.el-transfer-panel) {
+    font-size: 16px;
+    width: 350px;
+    height: 440px;
+}
+
+.custom-transfer {
+    --el-transfer-panel-body-height: 400px;
+}
+
+::v-deep(.el-transfer-panel__header) {
+    font-weight: bold;
+    font-size: 18px;
+}
+
+::v-deep(.el-checkbox__label) {
+    font-size: 16px;
+}
+</style>
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
index 93cfed3..8df072d 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/engineering/service/impl/EngineeringServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.engineering.entity.Engineering;
@@ -20,7 +21,7 @@
 
 /**
  * <p>
- *  鏈嶅姟瀹炵幇绫�
+ * 鏈嶅姟瀹炵幇绫�
  * </p>
  *
  * @author wu
@@ -40,7 +41,7 @@
 
     //寮�濮�/鏆傚仠浠诲姟
     @Override
-    public  boolean  changeTask(String projectId, Integer state) {
+    public boolean changeTask(String projectId, Integer state) {
         //鏆傚仠姝e湪杩涜宸ョ▼
 //        LambdaUpdateChainWrapper<Engineering> pauseWrapper = new LambdaUpdateChainWrapper<>(this.getBaseMapper());
 //        pauseWrapper.set(Engineering::getState,0);
@@ -48,8 +49,8 @@
 //        boolean pause = pauseWrapper.update();
         //浣跨敤projectId浣滀负鏉′欢寮�濮嬪伐绋�
         LambdaUpdateChainWrapper<Engineering> wrapper = new LambdaUpdateChainWrapper<>(this.getBaseMapper());
-        wrapper.set(Engineering::getState,state);
-        wrapper.eq(Engineering::getEngineerId,projectId);
+        wrapper.set(Engineering::getState, state);
+        wrapper.eq(Engineering::getEngineerId, projectId);
         boolean pause = wrapper.update();
         return pause;
     }
@@ -66,30 +67,30 @@
             optimizeEngineerings = optimizeProjectMapper.selectList(wrapper);
 
         }
-        List<Engineering> resultList=new ArrayList<>();
+        List<Engineering> resultList = new ArrayList<>();
 // 閬嶅巻鏌ヨ缁撴灉璧嬪��
         if (optimizeEngineerings != null) {
             for (OptimizeProject map : optimizeEngineerings) {
                 // 鍒涘缓涓�涓柊鐨� OptimizeProject 瀵硅薄
                 Engineering engineering = new Engineering();
                 // 灏� Map 涓殑姣忎釜閿�煎鏄犲皠鍒� OptimizeProject 瀵硅薄鐨勭浉搴斿瓧娈典笂
-                engineering.setEngineerId( map.getProjectNo());//宸ョ▼id
-                engineering.setEngineerName( map.getProjectName());//宸ョ▼鍚嶇О
-                engineering.setAvgAvailability( map.getAvgCutPct());//骞冲潎浼樺寲鐜�
-                engineering.setValidAvailability( map.getValidCutPct());//鏈夋晥浼樺寲鐜�
-                engineering.setLastAvailability( map.getLastCutPct());//灏剧墖浼樺寲鐜�
+                engineering.setEngineerId(map.getProjectNo());//宸ョ▼id
+                engineering.setEngineerName(map.getProjectName());//宸ョ▼鍚嶇О
+                engineering.setAvgAvailability(map.getAvgCutPct());//骞冲潎浼樺寲鐜�
+                engineering.setValidAvailability(map.getValidCutPct());//鏈夋晥浼樺寲鐜�
+                engineering.setLastAvailability(map.getLastCutPct());//灏剧墖浼樺寲鐜�
                 engineering.setState(0);//鐘舵��
-                engineering.setGlassTotal( map.getGlassTotal());//灏忕墖鐜荤拑鎬绘暟
-                engineering.setGlassTotalArea( map.getGlassTotalArea());//灏忕墖鎬婚潰绉�
-                engineering.setPlanPatternTotal( map.getRawStockQty());//璁″垝鍘熺墖鎬绘暟
-                engineering.setPlanPatternTotalArea( map.getRawStockArea());//璁″垝鍘熺墖鎬婚潰绉�
-                engineering.setFilmsId( map.getGlassType());//鑶滅郴
-                engineering.setNotes( map.getRemark());//澶囨敞
+                engineering.setGlassTotal(map.getGlassTotal());//灏忕墖鐜荤拑鎬绘暟
+                engineering.setGlassTotalArea(map.getGlassTotalArea());//灏忕墖鎬婚潰绉�
+                engineering.setPlanPatternTotal(map.getRawStockQty());//璁″垝鍘熺墖鎬绘暟
+                engineering.setPlanPatternTotalArea(map.getRawStockArea());//璁″垝鍘熺墖鎬婚潰绉�
+                engineering.setFilmsId(map.getGlassType());//鑶滅郴
+                engineering.setNotes(map.getRemark());//澶囨敞
                 // 灏嗘槧灏勫悗鐨勫璞℃坊鍔犲埌缁撴灉鍒楄〃涓�
                 resultList.add(engineering);
             }
         }
-        log.info("鏌ヨ鍑洪挗鍖栧伐绋嬮泦鍚堜繚瀛樺埌瀹炰綋绫粄}",resultList);
+        log.info("鏌ヨ鍑洪挗鍖栧伐绋嬮泦鍚堜繚瀛樺埌瀹炰綋绫粄}", resultList);
         return resultList;
     }
 
@@ -107,8 +108,9 @@
                 .last("limit 1");
         return engineeringMapper.selectOne(wrapper);
     }
+
     @Override
-    public Engineering selectInitiates(Integer state,Integer cell) {
+    public Engineering selectInitiates(Integer state, Integer cell) {
         //鏌ヨ鏄惁鏈夊紑濮嬩笂鐗囩殑宸ョ▼浠诲姟
         QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
         wrapper.eq("state", state)
@@ -156,24 +158,30 @@
     @Override
     public boolean deleteTask(String engineerId) {
         //鍒犻櫎宸ョ▼琛�
-        QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
-        wrapper.eq("engineer_id", engineerId);
-        return this.remove(wrapper);
+//        QueryWrapper<Engineering> wrapper = new QueryWrapper<>();
+//        wrapper.eq("engineer_id", engineerId);
+//        return this.remove(wrapper);
+        //淇敼宸ョ▼琛ㄧ姸鎬�
+        return this.update(
+                new LambdaUpdateWrapper<Engineering>()
+                        .eq(Engineering::getEngineerId, engineerId)
+                        .set(Engineering::getState, 6)
+        );
     }
 
     @Override
     public boolean changeTasks(Engineering engineering) {
         //鏆傚仠姝e湪杩涜宸ョ▼
         LambdaUpdateChainWrapper<Engineering> pauseWrapper = new LambdaUpdateChainWrapper<>(this.getBaseMapper());
-        pauseWrapper.set(Engineering::getState,0);
-        pauseWrapper.eq(Engineering::getState,1);
-        pauseWrapper.eq(Engineering::getStationCell,engineering.getStationCell());
+        pauseWrapper.set(Engineering::getState, 0);
+        pauseWrapper.eq(Engineering::getState, 1);
+        pauseWrapper.eq(Engineering::getStationCell, engineering.getStationCell());
         pauseWrapper.update();
 
         LambdaUpdateChainWrapper<Engineering> wrapper = new LambdaUpdateChainWrapper<>(this.getBaseMapper());
-        wrapper.set(Engineering::getState,engineering.getState());
-        wrapper.set(Engineering::getStationCell,engineering.getStationCell());
-        wrapper.eq(Engineering::getEngineerId,engineering.getEngineerId());
+        wrapper.set(Engineering::getState, engineering.getState());
+        wrapper.set(Engineering::getStationCell, engineering.getStationCell());
+        wrapper.eq(Engineering::getEngineerId, engineering.getEngineerId());
         return wrapper.update();
     }
 
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java
index 1a5f29e..5fbde43 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/controller/OptimizeProjectController.java
@@ -1,12 +1,14 @@
 package com.mes.pp.controller;
 
 
+import com.baomidou.mybatisplus.extension.api.R;
 import com.mes.pp.entity.OptimizeProject;
 import com.mes.pp.entity.request.OptimizeRequest;
 import com.mes.pp.service.OptimizeProjectService;
 import com.mes.utils.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import liquibase.pro.packaged.O;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -41,6 +43,30 @@
         return Result.build(200, "", glass);
     }
 
+    @ApiOperation("鏌ヨ宸ョ▼淇℃伅")
+    @PostMapping("/queryEngineer") //鏄剧ず宸ョ▼淇℃伅 pp琛�
+    @ResponseBody
+    public Result<List<OptimizeProject>> queryEngineer() {
+        List<OptimizeProject> resultList = optimizeProjectService.queryEngineer();
+        return Result.build(200, "", resultList);
+    }
+
+    @ApiOperation("鏌ヨ宸ョ▼鎺掍骇淇℃伅")
+    @PostMapping("/engineerScheduling") //鏄剧ず宸ョ▼鎺掍骇淇℃伅 engineerScheduling琛�
+    @ResponseBody
+    public Result<List<OptimizeProject>> engineerScheduling(@RequestBody OptimizeProject optimizeProject) {
+        List<OptimizeProject> engineerScheduling = optimizeProjectService.engineerScheduling(optimizeProject);
+        return Result.build(200, "", engineerScheduling);
+    }
+
+    @ApiOperation("鏇存柊宸ョ▼淇℃伅")
+    @PostMapping("/updateEngineerScheduling") //鏇存柊宸ョ▼鎺掍骇淇℃伅 engineerScheduling琛�
+    @ResponseBody
+    public Result<List<OptimizeProject>> updateEngineerScheduling(@RequestParam Integer type, @RequestBody List<OptimizeProject> engineerList) {
+        List<OptimizeProject> resultList = optimizeProjectService.updateEngineerScheduling(type, engineerList);
+        return Result.build(200, "鏇存柊鎴愬姛", resultList);
+    }
+
 //    @ApiOperation("淇濆瓨宸ョ▼淇℃伅")
 //    @PostMapping("/saveProject") //鏄剧ず宸ョ▼閫夋嫨淇℃伅
 //    public Result<List<OptimizeProject>> saveProject(@RequestBody OptimizeRequest optimizeRequest) {
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
index 2449b5f..dc6dd21 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/mapper/OptimizeProjectMapper.java
@@ -4,6 +4,8 @@
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.pp.entity.OptimizeProject;
 import com.mes.pp.entity.request.OptimizeRequest;
+import liquibase.pro.packaged.L;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -18,4 +20,34 @@
 @DS("pp")
 public interface OptimizeProjectMapper extends MPJBaseMapper<OptimizeProject> {
     List<OptimizeProject> saveProject(OptimizeRequest optimizeRequest);
+
+    /**
+     * 鏌ヨ宸ョ▼淇℃伅
+     *
+     * @return
+     */
+    List<OptimizeProject> queryEngineer();
+
+    /**
+     * 鏌ヨ宸ョ▼鎺掍骇淇℃伅
+     *
+     * @param optimizeProject
+     * @return
+     */
+    List<OptimizeProject> engineerScheduling(OptimizeProject optimizeProject);
+
+    /**
+     * 鍒犻櫎宸ョ▼淇℃伅
+     *
+     * @param type
+     */
+    void deleteByType(@Param("type") Integer type);
+
+    /**
+     * 鏇存柊宸ョ▼淇℃伅
+     *
+     * @param projectList
+     */
+    void batchInsert(@Param("list") List<OptimizeProject> projectList);
+
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
index a2d8310..c76c026 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/OptimizeProjectService.java
@@ -40,4 +40,22 @@
      */
     List<OptimizeProject> getDoingTask();
 
+    /**
+     * 鏌ヨ宸ョ▼淇℃伅
+     * @return
+     */
+    List<OptimizeProject> queryEngineer();
+
+    /**
+     * 鏌ヨ宸ョ▼鎺掑簭淇℃伅
+     * @return
+     */
+    List<OptimizeProject> engineerScheduling(OptimizeProject optimizeProject);
+
+    /**
+     * 鏇存柊宸ョ▼鎺掍骇淇℃伅
+     * @return
+     */
+    List<OptimizeProject> updateEngineerScheduling(Integer type , List<OptimizeProject> engineerList);
+
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
index eb13641..dbd645e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/pp/service/impl/OptimizeProjectServiceImpl.java
@@ -15,8 +15,10 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -90,5 +92,32 @@
         return this.list(wrapper);
     }
 
+    @Override
+    public List<OptimizeProject> queryEngineer() {
+        return this.baseMapper.queryEngineer();
+    }
 
+    @Override
+    public List<OptimizeProject> engineerScheduling(OptimizeProject optimizeProject) {
+        return this.baseMapper.engineerScheduling(optimizeProject);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public List<OptimizeProject> updateEngineerScheduling(Integer type , List<OptimizeProject> projectList) {
+        // 1. 鍒犻櫎瀵瑰簲绫诲瀷鐨勬暟鎹�
+        baseMapper.deleteByType(type);
+
+        // 2. 璁剧疆鍊�
+        projectList.forEach(project -> {
+            project.setType(type);
+            project.setState(100);
+            project.setId(null); // 娓呴櫎ID
+        });
+
+        // 3. 鎵归噺鎻掑叆鏂版暟鎹�
+        baseMapper.batchInsert(projectList);
+
+        return projectList;
+    }
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/OptimizeProjectMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/OptimizeProjectMapper.xml
index 0c7707c..4cfc94a 100644
--- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/OptimizeProjectMapper.xml
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/OptimizeProjectMapper.xml
@@ -13,6 +13,14 @@
 
     </resultMap>
 
+    <resultMap id="resultMap" type="com.mes.pp.entity.OptimizeProject">
+        <result property="id" column="id"/>
+        <result property="projectNo" column="project_no"/>
+        <result property="projectName" column="project_name"/>
+        <result property="state" column="state"/>
+        <result property="type" column="type"/>
+    </resultMap>
+
     <select id="saveProject" parameterType="com.mes.pp.entity.request.OptimizeRequest" resultMap="sequenceMap">
         select a.project_no, 1 as glass_type, a.width, a.height, REGEXP_REPLACE(b.glass_thickness, '\\D', '')as glass_thickness, a.heat_layout_sort, 0 as state
         from optimize_detail a
@@ -20,5 +28,53 @@
         where a.project_no = #{projectNo}
     </select>
 
+    <select id="queryEngineer" parameterType="com.mes.pp.entity.OptimizeProject" resultMap="resultMap">
+        select p.project_no,
+               p.project_name
+        from pp.optimize_project p
+        where p.state = 100
+            and p.project_no not in (
+            select es.project_no
+            from north_glass_mes.engineer_scheduling es
+            where es.project_no is not null
+            )
+        order by p.id
+    </select>
+
+    <select id="engineerScheduling" parameterType="com.mes.pp.entity.request.OptimizeRequest" resultMap="resultMap">
+        select es.project_no,
+               es.project_name,
+               es.type
+        from north_glass_mes.engineer_scheduling es
+        where es.state = 100
+        <if test="type != null and type != ''">
+            and es.type = #{type}
+        </if>
+        order by es.id
+    </select>
+
+    <!-- 鏍规嵁绫诲瀷鍒犻櫎engineer_scheduling琛ㄤ腑鐨勬暟鎹� -->
+    <delete id="deleteByType">
+        DELETE FROM north_glass_mes.engineer_scheduling
+        WHERE type = #{type}
+    </delete>
+
+    <!-- 鎵归噺鎻掑叆鏁版嵁鍒癳ngineer_scheduling琛� -->
+    <insert id="batchInsert">
+        INSERT INTO north_glass_mes.engineer_scheduling (
+        project_no,
+        project_name,
+        state,
+        type
+        ) VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.projectNo},
+            #{item.projectName},
+            #{item.state},
+            #{item.type}
+            )
+        </foreach>
+    </insert>
 
 </mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java
index c8717d1..a49c7f9 100644
--- a/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java
+++ b/hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java
@@ -138,10 +138,11 @@
         log.info("浜岀嚎鍗х悊: {}", s7DataWLTwo);
         Boolean oneInkageEntity = s7DataWLOne.getDeviceState();
         int cellFlag = 1;
-        if (!oneInkageEntity  && !Const.OUT_DISABLE.equals(s7DataWLExtraTwo.getD06SlotState())) {
+        if (!oneInkageEntity && !Const.OUT_DISABLE.equals(s7DataWLExtraTwo.getD06SlotState())) {
             cellFlag = 2;
         }
         startOneOpcTaskChild(s7DataWLTwo, 2, cellFlag);
+
     }
 
     private void startOneOpcTaskChild(S7DataWL task, int device, int cellFlag) throws Exception {
@@ -352,7 +353,7 @@
         //鐘舵�佹湁3涓儏鍐碉細0绌洪棽 1蹇欑 2绂佺敤
         //涓ゆ潯绾块兘涓虹鐢ㄥ垯涓嶅嚭鐜荤拑
         if (Const.OUT_DISABLE.equals(oneOutState) && Const.OUT_DISABLE.equals(twoOutState)) {
-            log.info("A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", oneOutState, oneOutState);
+            log.info("璁惧{}:A09銆丄10涓簕},{}闈炶嚜鍔ㄧ姸鎬侊紝鏃犳硶鍑虹墖", deviceId, oneOutState, oneOutState);
             return Boolean.FALSE;
         }
         //鑾峰彇d06鐗囧彴鐘舵��
@@ -382,6 +383,7 @@
                 cell = Const.TWO_OUT_TARGET_POSITION;
             }
         }
+        log.info("{}绾胯矾璁$畻瀹屾垚锛歿}", deviceId, cell);
         if (cellFlag == 2) {
             if (!outChildTask(task, deviceId, cell, startDate)) {
                 cell = cell == Const.ONE_OUT_TARGET_POSITION ? Const.TWO_OUT_TARGET_POSITION : Const.ONE_OUT_TARGET_POSITION;
@@ -398,6 +400,7 @@
 
         //绗煎唴鏄増鍥剧浉宸槸鍚﹁秴杩囬槇鍊�
         boolean flag = queryMaxMinDiffByDevice(threshold, deviceId);
+        log.info("{}闃堝�艰绠楀畬鎴愶細{}", deviceId, flag);
         if (flag) {
             //鍏堟壘鏈�灏忕増鍥剧増搴忕殑鐜荤拑灏忕墖
             EdgStorageCageDetails minEdgDetails = edgStorageCageDetailsService.getOne(new LambdaQueryWrapper<EdgStorageCageDetails>()
@@ -421,15 +424,18 @@
                 );
             }
         }
+        log.info("{}鎸夌収闃堝�兼煡鎵剧粨鏋滐細{}", deviceId, edgStorageCageDetails);
         if (null == edgStorageCageDetails) {
 //        鑾峰彇鍘嗗彶琛ㄤ腑涓婃浠诲姟鏈�鍚庝竴鐗囧昂瀵�
             EdgStorageDeviceTaskHistory edgeData = edgStorageDeviceTaskHistoryService.getOne(new LambdaQueryWrapper<EdgStorageDeviceTaskHistory>()
                     .eq(EdgStorageDeviceTaskHistory::getDeviceId, cell)
                     .in(EdgStorageDeviceTaskHistory::getTaskType, Const.GLASS_CACHE_TYPE_OUT, Const.GLASS_CACHE_TYPE_THROUGH)
                     .orderByDesc(EdgStorageDeviceTaskHistory::getId).last("limit 1"));
+            log.info("{}鑾峰彇涓婃浠诲姟淇℃伅锛歿}", deviceId, edgeData);
             if (null != edgeData) {
                 GlassInfo glassOutInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, edgeData.getGlassIdOut()));
                 //绗煎唴鐨勭幓鐠冪殑灏哄鏄惁鍜屼笂涓�娆′换鍔′竴鑷�
+
                 edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsBySize(deviceId, task.getCurrentCell(), glassOutInfo.getWidth(), glassOutInfo.getHeight(), cell, maxThickness);
                 if (null == edgStorageCageDetails && StringUtils.isNotBlank(task.getGlassIdIn())) {
                     GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
@@ -445,11 +451,13 @@
                 }
             }
         }
+        log.info("{}鑾峰彇鍘嗗彶琛ㄤ腑涓婃浠诲姟鏈�鍚庝竴鐗囧昂瀵革細{}", deviceId, edgStorageCageDetails);
         //鍓嶉潰宸茬粡灏哄闂澶勭悊瀹屾瘯锛屽紑濮嬭绠楁棤鐩稿悓灏哄鐨勬柊鐜荤拑灏忕墖
         if (null == edgStorageCageDetails) {
             edgStorageCageDetails = edgStorageCageDetailsService.queryEdgStorageDetailsByLimitSize(deviceId, Integer.parseInt(task.getCurrentCell().toString()), 0, 0,
                     cell, minOneFirstLength, minOneSecondLength, maxTwoFirstLength, maxTwoSecondLength, maxThickness);
         }
+        log.info("{}寮�濮嬭绠楁棤鐩稿悓灏哄鐨勬柊鐜荤拑灏忕墖锛歿}", deviceId, edgStorageCageDetails);
         if (edgStorageCageDetails == null && StringUtils.isNotBlank(task.getGlassIdIn())) {
             //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄
             GlassInfo glassInInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
@@ -466,6 +474,7 @@
                 log.info("鐩撮�氫换鍔$洰鏍囩嚎璺负{},杩涚墖鐜荤拑灏哄涓簕}*{},涓嶇鍚堝嚭鐗囨潯浠�", cell, maxLength, minLength);
             }
         }
+        log.info("{}鐩撮�氫换鍔★細{}", deviceId, edgStorageCageDetails);
         if (edgStorageCageDetails == null) {
             //鍜屼笂娆′换鍔′笉瀛樺湪鐩稿悓灏哄
             log.info("绗煎唴娌℃湁鐜荤拑浜�");
@@ -477,7 +486,7 @@
             if (3 != task.getTaskState()) {
                 return Boolean.FALSE;
             }
-            log.info("5銆佺洿閫氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails);
+            log.info("5銆亄}鐩撮�氫换鍔�,灏嗙幓鐠冧俊鎭彃鍏ュ崸寮忕悊鐗囩,褰撳墠鐜荤拑淇℃伅:{}", edgStorageCageDetails);
             if (glassInIdOne.equals(task.getGlassIdIn()) || glassInIdTwo.equals(task.getGlassIdIn())) {
                 log.info("鐜荤拑id涓庝笂娆$浉鍚岋紝绂佹杩涚墖");
                 return Boolean.FALSE;
@@ -491,11 +500,7 @@
                 GlassInfo one = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, glassId));
                 BeanUtils.copyProperties(one, edgStorageCageDetails);
             }
-            EdgStorageCage storageCage = edgStorageCageService.getOne(new LambdaQueryWrapper<EdgStorageCage>()
-                    .eq(EdgStorageCage::getDeviceId, deviceId)
-                    .eq(EdgStorageCage::getEnableState, Const.SLOT_ON)
-                    .ge(EdgStorageCage::getRemainWidth, cellLength)
-                    .last("order by abs(slot - " + task.getCurrentCell() + ") limit 1"));
+            EdgStorageCage storageCage = edgStorageCageService.selectNearestEmpty(Integer.parseInt(task.getCurrentCell().toString()), deviceId, Boolean.TRUE);
             Assert.isTrue(null != storageCage, "鏍煎瓙宸叉弧,鏃犳硶鎵ц鐩撮�氫换鍔�");
             log.info("3銆佹煡璇㈠崸寮忕悊鐗囩閲岄潰鐨勭┖鏍�:{}", storageCage);
             edgStorageCageDetails.setSlot(storageCage.getSlot());
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 5e56064..4c11c1d 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
@@ -10,15 +10,13 @@
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
 import com.mes.bigstorage.service.BigStorageCageService;
 import com.mes.common.config.Const;
+import com.mes.pp.entity.OptimizeProject;
 import com.mes.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.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -197,5 +195,13 @@
         String glassId = map.get("glassId");
         return Result.build(200, "鎶ョ牬鎹熸垚鍔�", bigStorageCageDetailsService.bigStorageGlassDamageByGlassId(glassId));
     }
+
+    @ApiOperation("鏌ヨ宸ョ▼寰呮帓浜т俊鎭�")
+    @PostMapping("/queryEngineer") //鏄剧ず宸ョ▼鎺掍骇淇℃伅
+    @ResponseBody
+    public Result<List<BigStorageCageDetails>> queryEngineer() {
+        List<BigStorageCageDetails> result = bigStorageCageDetailsService.queryEngineer();
+        return Result.build(200, "", result);
+    }
 }
 
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 f8690b6..87d5f60 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
@@ -7,6 +7,7 @@
 import com.mes.bigstorage.entity.vo.BigStorageQueryVO;
 import com.mes.bigstoragetask.entity.UpdateBigStorageCageDTO;
 import com.mes.glassinfo.entity.GlassInfo;
+import com.mes.pp.entity.OptimizeProject;
 
 import java.util.List;
 import java.util.Map;
@@ -134,4 +135,11 @@
      * @return
      */
     boolean cancelTemperingTask();
+
+
+    /**
+     * 鏌ヨ宸ョ▼寰呮帓搴忎俊鎭�
+     * @return
+     */
+    List<BigStorageCageDetails> queryEngineer();
 }
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 2a3a54c..2f0ae66 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/service/impl/BigStorageCageDetailsServiceImpl.java
@@ -2,6 +2,7 @@
 
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.toolkit.JoinWrappers;
@@ -28,6 +29,7 @@
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.mapper.GlassInfoMapper;
 import com.mes.glassinfo.service.GlassInfoService;
+import com.mes.pp.entity.OptimizeProject;
 import com.mes.sysconfig.entity.SysConfig;
 import com.mes.sysconfig.service.SysConfigService;
 import com.mes.temperingglass.entity.TemperingGlassInfo;
@@ -568,4 +570,12 @@
     public void updateDeviceIdBySlot(List<Integer> slotList) {
         baseMapper.updateDeviceIdBySlot(slotList);
     }
+
+    @Override
+    public List<BigStorageCageDetails> queryEngineer() {
+        QueryWrapper<BigStorageCageDetails> wrapper = new QueryWrapper<>();
+        wrapper.select("distinct engineer_id")
+                .eq("state", 100);
+        return this.list(wrapper);
+    }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/controller/BigStorageCageHistoryTaskController.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/controller/BigStorageCageHistoryTaskController.java
index 43e8ebb..2435a3e 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/controller/BigStorageCageHistoryTaskController.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/controller/BigStorageCageHistoryTaskController.java
@@ -45,4 +45,10 @@
     public Result<List<RunTime>> queryRunTimes(String days) {
         return Result.success(bigStorageCageHistoryTaskService.queryRunTimes(days));
     }
+
+    @ApiOperation(value = "鏌ヨ澶х悊鐗囩晫闈㈡墍鏈変俊鎭�", notes = "鏌ヨ澶х悊鐗囩晫闈㈡墍鏈変俊鎭�")
+    @GetMapping("/queryAllMessage")
+    public Result<String> queryAllMessage() {
+        return Result.success(bigStorageCageHistoryTaskService.queryAllMessage());
+    }
 }
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageHistoryTaskService.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageHistoryTaskService.java
index afef636..12ed6c0 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageHistoryTaskService.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/BigStorageCageHistoryTaskService.java
@@ -23,5 +23,7 @@
     DailyProductionVO queryBigDailyProduction(BigStorageCageHistoryRequest request);
 
     List<RunTime> queryRunTimes(String days);
+
+    String queryAllMessage();
 }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageHistoryTaskServiceImpl.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageHistoryTaskServiceImpl.java
index e374567..054dc77 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageHistoryTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstoragecagetask/service/impl/BigStorageCageHistoryTaskServiceImpl.java
@@ -10,11 +10,13 @@
 import com.mes.bigstoragecagetask.entity.request.BigStorageCageHistoryRequest;
 import com.mes.bigstoragecagetask.mapper.BigStorageCageHistoryTaskMapper;
 import com.mes.bigstoragecagetask.service.BigStorageCageHistoryTaskService;
+import com.mes.job.OPCPlcSlicecage;
 import com.mes.largenscreen.entity.DailyProductionVO;
 import com.mes.largenscreen.entity.RunTime;
 import com.mes.tools.DateUtil;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.List;
 
@@ -26,6 +28,9 @@
  */
 @Service
 public class BigStorageCageHistoryTaskServiceImpl extends ServiceImpl<BigStorageCageHistoryTaskMapper, BigStorageCageHistoryTask> implements BigStorageCageHistoryTaskService {
+
+    @Resource
+    OPCPlcSlicecage opcPlcSlicecage;
 
     @Override
     public Page<BigStorageCageHistoryTask> queryBigStorageCageHistoryTask(BigStorageCageHistoryRequest request) {
@@ -58,9 +63,20 @@
     }
 
     @Override
-    public List<RunTime> queryRunTimes(String days){
+    public List<RunTime> queryRunTimes(String days) {
         return baseMapper.queryRunTimes(days);
     }
 
+    @Override
+    public String queryAllMessage() {
+        try {
+            opcPlcSlicecage.plcStorageCageTask();
+            return "success";
+        } catch (Exception exception) {
+            exception.printStackTrace();
+        }
+        return "fail";
+    }
+
 }
 
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
index ec636fd..91c11e4 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OPCPlcSlicecage.java
@@ -4,6 +4,8 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.xingshuangs.iot.protocol.s7.serializer.S7Serializer;
 import com.kangaroohy.milo.service.MiloService;
+import com.mes.alarm.entity.ProductAlarmInfo;
+import com.mes.alarm.service.ProductAlarmInfoService;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
 import com.mes.bigstorage.entity.dto.BigStorageSummaryDTO;
 import com.mes.bigstorage.service.BigStorageCageDetailsService;
@@ -72,11 +74,22 @@
     @Resource
     private WebSocketUtils webSocketUtils;
 
-    private JSONObject jsonObject = new JSONObject();
+    @Resource
+    private ProductAlarmInfoService productAlarmInfoService;
 
-    public void queryDataSource1() throws Exception {
-        S7DataDLPOne s7DataDLPOne = s7SerializerDLPOne.read(S7DataDLPOne.class);
-        S7DataDLPTwo s7DataWLTwo = s7SerializerDLPTwo.read(S7DataDLPTwo.class);
+
+    private static final String ALARM_MODULE = "閽㈠寲";
+    private static final String ALARM_TYPE = "閽㈠寲澶х悊鐗�";
+    private static final String ALARM_CODE_SIZE = "sizeSame";
+    private static final String ALARM_CODE_ID = "idSame";
+
+
+    public JSONObject queryDataSource1() throws Exception {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.append("alarmInfo", productAlarmInfoService.list(new LambdaQueryWrapper<ProductAlarmInfo>()
+                .eq(ProductAlarmInfo::getState, Const.LOAD_RAW_GLASS_NEW)
+                .eq(ProductAlarmInfo::getAlarmModule, ALARM_MODULE)
+                .eq(ProductAlarmInfo::getAlarmType, ALARM_TYPE)));
         List<Double> carPostion = new ArrayList<>();
         carPostion.add(0.25);
         carPostion.add(0.5);
@@ -84,6 +97,8 @@
         //鐣岄潰灞曠ず绗煎瓙淇℃伅
         jsonObject.append("bigStorageCageInfos", bigStorageCageDetailsService.querybigStorageCageDetail());
 
+        S7DataDLPOne s7DataDLPOne = s7SerializerDLPOne.read(S7DataDLPOne.class);
+        S7DataDLPTwo s7DataWLTwo = s7SerializerDLPTwo.read(S7DataDLPTwo.class);
         try {
             //杩涚墖浠诲姟鏁版嵁
             List<BigStorageTaskVO> inTaskList = new ArrayList();
@@ -233,10 +248,11 @@
         //褰撳墠鎸囧畾宸ョ▼
         jsonObject.append("temperingEngineerId", redisUtil.getCacheObject("temperingEngineerId"));
 
-
+        return jsonObject;
     }
 
     public void queryDataSource2() throws InterruptedException {
+        JSONObject jsonObject = new JSONObject();
         //鍑虹墖闃熷垪
         List<TemperingGlassInfo> temperingGlassInfoList = temperingGlassInfoService.list(
                 new LambdaQueryWrapper<TemperingGlassInfo>()
@@ -252,9 +268,8 @@
      */
     @Scheduled(fixedDelay = 3000)
     public void plcStorageCageTask() throws Exception {
-        jsonObject = new JSONObject();
         //鏌ヨ浣跨敤鏁版嵁婧�1鏌ヨ鏁版嵁
-        queryDataSource1();
+        JSONObject jsonObject = queryDataSource1();
         //鏌ヨ浣跨敤鏁版嵁婧�2鏌ヨ鏁版嵁
 //            queryDataSource2();
         webSocketUtils.sendToWeb("slicecage", jsonObject);
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
index e10c668..8c21cb2 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageNewTask.java
@@ -9,6 +9,8 @@
 import com.github.yulichang.toolkit.JoinWrappers;
 import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.service.MiloService;
+import com.mes.alarm.entity.ProductAlarmInfo;
+import com.mes.alarm.service.ProductAlarmInfoService;
 import com.mes.base.entity.BigStorageCageBaseInfo;
 import com.mes.bigstorage.entity.BigStorageCage;
 import com.mes.bigstorage.entity.BigStorageCageDetails;
@@ -97,11 +99,28 @@
      */
     private static final Integer THROUGH_SLOT = 920;
 
+
+    @Resource
+    private ProductAlarmInfoService productAlarmInfoService;
+
+    private static final String ALARM_MODULE = "閽㈠寲";
+    private static final String ALARM_TYPE = "閽㈠寲澶х悊鐗�";
+    private static final String ALARM_CODE_SIZE = "sizeSame";
+    private static final String ALARM_CODE_ID = "idSame";
+
     @Resource
     private RedisUtil redisUtil;
 
     @Scheduled(fixedDelay = 1000)
     public void inBigStorageTask() {
+        List<ProductAlarmInfo> alarmInfos = productAlarmInfoService.list(new LambdaQueryWrapper<ProductAlarmInfo>()
+                .eq(ProductAlarmInfo::getState, Const.LOAD_RAW_GLASS_NEW)
+                .eq(ProductAlarmInfo::getAlarmModule, ALARM_MODULE)
+                .eq(ProductAlarmInfo::getAlarmType, ALARM_TYPE));
+        if (CollectionUtil.isNotEmpty(alarmInfos)) {
+            log.info("鐣岄潰鎶ヨ锛岀瓑寰呬汉宸ュ共棰勫鐞�");
+            return;
+        }
         S7DataDLPOne s7DataDLPOne = s7SerializerDLPOne.read(S7DataDLPOne.class);
         log.info("杩涚墖浠诲姟寮�濮媨}", s7DataDLPOne);
         Boolean inkageEntity = s7DataDLPOne.getMesControl();
@@ -155,6 +174,13 @@
             if (entry.getValue() > 1) {
                 log.info("杩涚墖鐜荤拑{}瀛樺湪鐩稿悓锛岀粨鏉熸湰娆′换鍔�", entry.getKey());
                 //鍚憄lc鍙戦�佹姤璀�:鍚屼竴杞﹁繘鐗囩幓鐠冨瓨鍦ㄧ浉鍚�
+                ProductAlarmInfo alarmInfo = new ProductAlarmInfo();
+                alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW);
+                alarmInfo.setAlarmModule(ALARM_MODULE);
+                alarmInfo.setAlarmType(ALARM_TYPE);
+                alarmInfo.setAlarmCode(ALARM_CODE_ID);
+                alarmInfo.setAlarmMessage(entry.getKey());
+                productAlarmInfoService.save(alarmInfo);
                 s7DataDLPOne = new S7DataDLPOne();
                 s7DataDLPOne.setAlarmSignal(2);
                 s7SerializerDLPOne.write(s7DataDLPOne);
@@ -166,6 +192,17 @@
         if (CollectionUtil.isNotEmpty(detailsList)) {
             log.info("鐞嗙墖绗煎瓨鍦ㄧ浉鍚岀殑杩涚墖鐜荤拑{}锛岀粨鏉熸湰娆′换鍔�", detailsList);
             //鍚憄lc鍙戦�佹姤璀�:鐞嗙墖绗煎瓨鍦ㄧ浉鍚岀殑杩涚墖鐜荤拑
+            List<String> sameGlassIds = detailsList.stream()
+                    .map(BigStorageCageDetails::getGlassId)
+                    .collect(Collectors.toList());
+            ProductAlarmInfo alarmInfo = new ProductAlarmInfo();
+            alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW);
+            alarmInfo.setAlarmModule(ALARM_MODULE);
+            alarmInfo.setAlarmType(ALARM_TYPE);
+            alarmInfo.setAlarmCode(ALARM_CODE_ID);
+            alarmInfo.setAlarmMessage(sameGlassIds.toString());
+            productAlarmInfoService.save(alarmInfo);
+
             s7DataDLPOne = new S7DataDLPOne();
             s7DataDLPOne.setAlarmSignal(4);
             s7SerializerDLPOne.write(s7DataDLPOne);
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index 996634b..7851615 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -186,7 +186,7 @@
         damage_temp as (
         select engineer_id, tempering_layout_id, count(*) as damage_count
         from damage
-        where type in(8,9)
+        where type in(8,9) and STATUS = 1
         group by engineer_id, tempering_layout_id
         ),
         result as (
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
index 9523529..0518590 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/job/PlcLoadGlassTask.java
@@ -11,7 +11,6 @@
 import com.mes.pp.service.OptimizeProjectService;
 import com.mes.rawglassdetails.entity.RawGlassStorageDetails;
 import com.mes.rawglassstation.service.RawGlassStorageStationService;
-import com.mes.tools.WebSocketServer;
 import com.mes.tools.WebSocketUtils;
 import com.mes.uppattenusage.entity.UpPattenUsage;
 import com.mes.uppattenusage.service.UpPattenUsageService;
@@ -24,7 +23,6 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -147,7 +145,7 @@
     }
 
 
-    private void loadGlassChild(String redisRequest, int stationCell, String tableName, String webSocketName) {
+    public String loadGlassChild(String redisRequest, int stationCell, String tableName, String webSocketName) {
         try {
             JSONObject jsonObject = new JSONObject();
             //褰撳墠绾胯矾姝e湪鎵ц鐨勫伐绋�
@@ -177,6 +175,7 @@
         } catch (Exception e) {
             e.printStackTrace();
         }
+        return "success";
     }
 
 
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/controller/LoadGlassDeviceTaskHistoryController.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/controller/LoadGlassDeviceTaskHistoryController.java
index 36aa0c8..c1ea1e6 100644
--- a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/controller/LoadGlassDeviceTaskHistoryController.java
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/controller/LoadGlassDeviceTaskHistoryController.java
@@ -2,22 +2,25 @@
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mes.job.PlcLoadGlassTask;
+import com.mes.loadglassdevicetaskhistory.entity.request.LoadGlassRequest;
 import com.mes.opctask.entity.LoadGlassDeviceTaskHistory;
 import com.mes.opctask.entity.request.LoadGlassDeviceTaskHistoryRequest;
 import com.mes.opctask.service.LoadGlassDeviceTaskHistoryService;
-import com.mes.pp.service.OptimizeProjectService;
-import com.mes.uppattenusage.entity.UpPattenUsage;
 import com.mes.utils.Result;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-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 java.util.List;
+import javax.annotation.Resource;
 
 /**
  * <p>
- *  鍓嶇鎺у埗鍣�
+ * 鍓嶇鎺у埗鍣�
  * </p>
  *
  * @author wf
@@ -27,6 +30,8 @@
 @RequestMapping("/loadglassdevicetaskhistory")
 public class LoadGlassDeviceTaskHistoryController {
 
+    @Resource
+    PlcLoadGlassTask plcLoadGlassTask;
     @Autowired
     private LoadGlassDeviceTaskHistoryService loadGlassDeviceTaskHistoryService;
 
@@ -36,5 +41,12 @@
         return Result.build(200, "鏌ヨ鎴愬姛", loadGlassDeviceTaskHistoryService.queryLoadGlassHistoryTask(request));
     }
 
+    @ApiOperation("鏌ヨ绾胯矾鎵�鏈夋暟鎹�")
+    @PostMapping("/queryAllMessage") //鏌ヨ鐜板湪涓婄墖鏈虹殑鐜荤拑淇℃伅
+    public Result<String> queryAllMessage(@RequestBody @Validated LoadGlassRequest request) {
+        return Result.build(200, "鏌ヨ鎴愬姛", plcLoadGlassTask.loadGlassChild(request.getRedisRequest(), request.getStationCell(),
+                request.getTableName(), request.getWebSocketName()));
+    }
+
 }
 
diff --git a/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/entity/request/LoadGlassRequest.java b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/entity/request/LoadGlassRequest.java
new file mode 100644
index 0000000..2afbda7
--- /dev/null
+++ b/hangzhoumesParent/moduleService/LoadGlassModule/src/main/java/com/mes/loadglassdevicetaskhistory/entity/request/LoadGlassRequest.java
@@ -0,0 +1,22 @@
+package com.mes.loadglassdevicetaskhistory.entity.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author : zhoush
+ * @Date: 2025/10/11 11:04
+ * @Description:
+ */
+@Data
+public class LoadGlassRequest {
+
+    @ApiModelProperty(value = "redis鍚嶅瓧锛坙oadGlassRequestOne loadGlassRequestTwo锛�", position = 1)
+    private String redisRequest;
+    @ApiModelProperty(value = "绾胯矾锛�5 6锛�", position = 2)
+    private int stationCell;
+    @ApiModelProperty(value = "绾胯矾琛ㄥ悕锛圠OAD_GLASS_DEVICE_ONE_TASK LOAD_GLASS_DEVICE_TWO_TASK锛�", position = 3)
+    private String tableName;
+    @ApiModelProperty(value = "websocket锛坙oadGlassOne loadGlassTwo锛�", position = 4)
+    private String webSocketName;
+}
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/HollowGlassApplication.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/HollowGlassApplication.java
index d981d97..0a9cc41 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/HollowGlassApplication.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/HollowGlassApplication.java
@@ -4,6 +4,7 @@
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@@ -19,6 +20,7 @@
 @EnableDiscoveryClient
 @MapperScan(basePackages = "com.mes.*.mapper")
 @EnableScheduling
+@EnableCaching
 public class HollowGlassApplication {
 
     public static void main(String[] args) {
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
index 84b8e1f..a768d6a 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java
@@ -2,6 +2,7 @@
 
 
 import com.mes.damage.entity.request.DamageRequest;
+import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.hollow.entity.dto.LackDetailsDTO;
 import com.mes.hollow.entity.vo.HollowAllFlowCardVO;
 import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
@@ -39,11 +40,18 @@
         return Result.success(hollowAllFlowCardVOList);
     }
 
-    @ApiOperation("鏌ヨ鎸囧畾娴佺▼鍗″強灞傛暟鐨勭己鐗囪鎯�")
-    @PostMapping("/queryLackByFlowCard")
-    public Result<List<LackDetailsDTO>> queryLackByFlowCard() {
-        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard();
+    @ApiOperation("鐣岄潰灞曠ず锛氭煡璇㈡祦绋嬪崱銆佸眰鏁扮殑缂虹墖璇︽儏")
+    @PostMapping("/queryAllLackByFlowCard")
+    public Result<List<LackDetailsDTO>> queryAllLackByFlowCard() {
+        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryAllLackByFlowCard();
         return Result.success(lackDetailsList);
+    }
+
+    @ApiOperation("鎸夌収娴佺▼鍗°�佽鍗曞簭鍙枫�佸眰鍙疯幏鍙栫己鐗囩幓鐠冧俊鎭鎯�")
+    @PostMapping("/queryLackGlassByFlowCard")
+    public Result<List<GlassInfo>> queryLackGlassByFlowCard(@RequestBody HollowBigStorageDetailsQueryVO query) {
+        List<GlassInfo> lackGlassList = hollowGlassRelationInfoService.queryLackGlassByFlowCard(query);
+        return Result.success(lackGlassList);
     }
 
 //    @ApiOperation("鏌ヨ鎸囧畾娴佺▼鍗″強灞傛暟鐨勭己鐗囪鎯�")
@@ -52,6 +60,12 @@
 //        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId);
 //        return Result.success(lackDetailsList);
 //    }
+    @ApiOperation("鏌ヨ鎸囧畾娴佺▼鍗$殑缂虹墖璇︽儏")
+    @PostMapping("/queryLackByFlowCard")
+    public Result<Map<Integer,List<LackDetailsDTO>>> queryLackByFlowCard(String flowCardId) {
+        Map<Integer,List<LackDetailsDTO>> lackDetailsMap = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId);
+        return Result.success(lackDetailsMap);
+    }
 
     @ApiOperation("涓┖缂虹墖鐖嗙牬绗兼姤鐮存崯")
     @PostMapping("/hollowBigStorageGlassDamage")
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardGlassInfoDTO.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardGlassInfoDTO.java
index 4c50e7d..f1b5862 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardGlassInfoDTO.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/FlowCardGlassInfoDTO.java
@@ -23,6 +23,10 @@
      */
     private String productName;
     /**
+     * 涓┖鐗囧簭 0 鐩撮��  1 绗煎唴
+     */
+    private int hollowSequence;
+    /**
      * 鑶滅郴
      */
     private String filmsId;
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java
index ee34bb2..5690d91 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java
@@ -15,6 +15,10 @@
      */
     private String flowCardId;
     /**
+     * 鐜荤拑id
+     */
+    private String glassId;
+    /**
      * 娴佺▼鍗�
      */
     private int layer;
@@ -52,6 +56,14 @@
      * /*鐮存崯鐗囨暟
      */
     private Integer damageCount;
+    /**
+     * /*琛ョ墖鏁伴噺
+     */
+    private Integer patchCount;
 
+    /**
+     * 宸ュ簭
+     */
+    private String workingProcedure;
 
 }
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java
index 90de67e..9d62dee 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/vo/HollowBigStorageDetailsQueryVO.java
@@ -33,5 +33,13 @@
      * 浜у搧鍚嶇О
      */
     private String productName;
+    /**
+     * 搴忓彿
+     */
+    private Integer orderSort;
+    /**
+     * 灞�
+     */
+    private Integer layer;
 
 }
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java
index 4c07501..360e8cb 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowBigStorageCageDetailsMapper.java
@@ -7,6 +7,7 @@
 import com.mes.hollow.entity.dto.FlowCardGlassInfoDTO;
 import com.mes.hollow.entity.dto.FlowCardVirtualSlotDTO;
 import com.mes.hollow.entity.dto.UpdateHollowBigStorageCageDTO;
+import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -35,8 +36,16 @@
 
     void updateDeviceIdBySlot(@Param("list") List<Integer> slotList);
 
-    List<HollowBigStorageCageDetails> queryPairGlassList(@Param("flowCardId")String flowCardId, @Param("totalLayer")Integer totalLayer, @Param("totalPairQuantity")Integer totalPairQuantity,@Param("isOut") Integer isOut);
+    List<HollowBigStorageCageDetails> queryPairGlassList(@Param("flowCardId") String flowCardId, @Param("totalLayer") Integer totalLayer, @Param("totalPairQuantity") Integer totalPairQuantity, @Param("isOut") Integer isOut);
 
     List<FlowCardVirtualSlotDTO> queryFlowCardIdsAndLayer();
+
+    /**
+     * 鏌ヨ绗煎唴鐨勭己鐗囪鎯�
+     *
+     * @param query
+     * @return
+     */
+    List<FlowCardGlassInfoDTO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query);
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java
index 3ac8c38..cfa02e0 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassOutRelationInfoMapper.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.mes.hollow.entity.HollowGlassOutRelationInfo;
 import com.mes.hollow.entity.dto.OrderDTO;
+import com.mes.hollow.entity.dto.OrderDetailsDTO;
 import com.mes.largenscreen.entity.PieChartVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,5 +20,13 @@
     OrderDTO queryOrderByFlowCardId(@Param("flowCardId") String flowCardId);
 
     List<PieChartVO> queryPieChart();
+
+    /**
+     * 鎸夌収娴佺▼鍗¤幏鍙栦骇鍝佸悕绉�
+     *
+     * @param flowCardId
+     * @return
+     */
+    OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId);
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
index ea8beea..ea67d25 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java
@@ -1,11 +1,13 @@
 package com.mes.hollow.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.hollow.entity.HollowGlassRelationInfo;
 import com.mes.hollow.entity.dto.HollowGlassDetailsDTO;
 import com.mes.hollow.entity.dto.LackDetailsDTO;
 import com.mes.hollow.entity.dto.OrderDetailsDTO;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.cache.annotation.Cacheable;
 
 import java.util.List;
 
@@ -23,7 +25,7 @@
 
     List<HollowGlassDetailsDTO> queryFlowCardIdLayerGlassInfo(@Param("flowCardId") String flowCardId, @Param("totalLayer") int totalLayer, @Param("layer") int layer);
 
-    List<LackDetailsDTO> queryLackByFlowCard();
+    List<LackDetailsDTO> queryAllLackByFlowCard();
 
     int queryLayerByFlowCardId(@Param("flowCardId") String flowCardId);
 
@@ -35,6 +37,10 @@
      * @param flowCardId
      * @return
      */
-    OrderDetailsDTO queryProductNameByFlowCardId(@Param("flowCardId") String flowCardId,@Param("productName") String productName,@Param("customerName") String customerName);
+    OrderDetailsDTO queryProductNameByFlowCardId(@Param("flowCardId") String flowCardId, @Param("productName") String productName, @Param("customerName") String customerName);
+
+    List<LackDetailsDTO> queryLackByFlowCard(@Param("flowCardId")  String flowCardId);
+
+    List<GlassInfo> queryLackGlassByFlowCard(@Param("flowCardId") String flowCardId, @Param("orderSort") Integer orderSort, @Param("layer") Integer layer);
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java
index a7513c7..8ad47a8 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowBigStorageCageDetailsService.java
@@ -4,6 +4,8 @@
 import com.mes.base.entity.vo.BigStorageVO;
 import com.mes.hollow.entity.HollowBigStorageCageDetails;
 import com.mes.hollow.entity.dto.*;
+import com.mes.hollow.entity.vo.HollowAllFlowCardVO;
+import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
 
 import java.util.List;
 import java.util.Map;
@@ -66,5 +68,7 @@
     Boolean updateHollowStorageCageDisabled(int slot, int enableState);
 
     List<FlowCardVirtualSlotDTO> queryFlowCardIdsAndLayer();
+
+    List<FlowCardGlassInfoDTO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query);
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java
index 9dece11..8a4c171 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassOutRelationInfoService.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.hollow.entity.HollowGlassOutRelationInfo;
+import com.mes.hollow.entity.dto.OrderDetailsDTO;
 import com.mes.hollow.entity.request.HollowHistoryTaskRequest;
 import com.mes.hollow.entity.request.HollowTaskRequest;
 import com.mes.hollowqueue.entity.HollowGlassQueueInfo;
@@ -30,7 +31,7 @@
 
     List<String> hollowTaskList(int cell);
 
-    Map<String, List<HollowGlassQueueInfo>> appointHollowTaskDetails( int cell);
+    Map<String, List<HollowGlassQueueInfo>> appointHollowTaskDetails(int cell);
 
     Boolean startTask(int cell);
 
@@ -45,5 +46,7 @@
     Page<HollowGlassOutRelationInfo> queryHollowHistoryTask(HollowHistoryTaskRequest request);
 
     List<PieChartVO> queryPieChart();
+
+    OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId);
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
index 8ef282f..dcd644b 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java
@@ -2,10 +2,12 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mes.damage.entity.request.DamageRequest;
+import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.hollow.entity.HollowGlassRelationInfo;
 import com.mes.hollow.entity.dto.FlowCardGlassInfoDTO;
 import com.mes.hollow.entity.dto.HollowBigStorageDTO;
 import com.mes.hollow.entity.dto.LackDetailsDTO;
+import com.mes.hollow.entity.dto.OrderDetailsDTO;
 import com.mes.hollow.entity.vo.HollowAllFlowCardVO;
 import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
 
@@ -35,10 +37,11 @@
 
     List<FlowCardGlassInfoDTO> queryHollowAllFlowCardSummary(HollowBigStorageDetailsQueryVO query);
 
-    List<LackDetailsDTO> queryLackByFlowCard();
+    List<LackDetailsDTO> queryAllLackByFlowCard();
 
     int queryLayerByFlowCardId(String flowCardId);
-//    List<LackDetailsDTO> queryLackByFlowCard(String flowCardId);
+
+    Map<Integer,List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId);
 
 
     /**
@@ -50,5 +53,9 @@
     Integer getGlassGapByThickness(Double thickness);
 
     Boolean hollowBigStorageGlassDamage(DamageRequest request);
+
+    OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId, String productName, String customerName);
+
+    List<GlassInfo> queryLackGlassByFlowCard(HollowBigStorageDetailsQueryVO query);
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java
index 357b044..589997e 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowBigStorageCageDetailsServiceImpl.java
@@ -145,6 +145,11 @@
         return baseMapper.queryFlowCardIdsAndLayer();
     }
 
+    @Override
+    public List<FlowCardGlassInfoDTO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query) {
+        return baseMapper.queryHollowAllFlowCard(query);
+    }
+
     private List<HollowBigStorageAndDetailsDTO> hollowBigStorageCageDetailsChild(String glassId, Integer deviceId, Integer slot, int state) {
         //灏嗗搴旀牸瀛愬彿鐨勭幓鐠僫d缃负101
         this.update(new LambdaUpdateWrapper<HollowBigStorageCageDetails>()
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java
index def9384..1a8c6d6 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java
@@ -35,6 +35,7 @@
 import freemarker.template.Version;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -342,6 +343,12 @@
         return this.page(page, wrapper);
     }
 
+    @Override
+    @Cacheable(value = "orderDetails", key = "#flowCardId")
+    public OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId) {
+        log.info("鏌ヨ鏁版嵁搴撲竴娆★細{}", flowCardId);
+        return baseMapper.queryProductNameByFlowCardId(flowCardId);
+    }
 
     private HollowGlassOutRelationInfo childrenTask(HollowTaskRequest request, int isForce) {
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getFlowCardId, request.getFlowCardId()).last("limit 1"));
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
index b8d6dfd..f24eb99 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java
@@ -104,7 +104,9 @@
                     .last("limit 1")
             );
         }
-        Assert.isTrue(null != relationInfoOne, "鐩稿叧娴佺▼鍗℃湭鎵惧埌瀵瑰簲鐨勭粍鍙蜂俊鎭紝鐜荤拑娴佺▼鍗★細{}锛屽簭鍙凤細{}锛屾�诲眰鏁帮細{}锛屽眰鏁帮細{}", flowCardId, glassType, totalLayer, layer);
+        if (null == relationInfoOne) {
+            throw new RuntimeException("鐩稿叧娴佺▼鍗℃湭鎵惧埌瀵瑰簲鐨勭粍鍙蜂俊鎭紝鐜荤拑娴佺▼鍗★細" + flowCardId + "锛屽簭鍙凤細" + glassType + "锛屾�诲眰鏁帮細" + totalLayer + "锛屽眰鏁帮細" + layer);
+        }
         Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH);
         //璇︽儏琛ㄥ唴鑾峰彇鏈粍鏄惁宸茬粡鏈夌幓鐠冨湪绗煎瓙鍐咃紙0琛ㄧず鎻愬墠鍗犵敤锛�
         int taskCount = hollowGlassOutRelationInfoService.count(new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
@@ -304,27 +306,22 @@
     public List<HollowAllFlowCardVO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query) {
         Date startDate = new Date();
         log.info("寮�濮嬫煡璇腑绌烘祦绋嬪崱浠诲姟淇℃伅锛屽紑濮嬫椂闂磠}", startDate);
-        List<HollowBigStorageCageDetails> detailsList = hollowBigStorageCageDetailsService.list(new LambdaQueryWrapper<HollowBigStorageCageDetails>()
-                .eq(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN)
-                .like(StringUtils.isNotBlank(query.getFilmsId()), HollowBigStorageCageDetails::getFilmsId, query.getFilmsId())
-                .like(StringUtils.isNotBlank(query.getFlowCardId()), HollowBigStorageCageDetails::getFlowCardId, query.getFlowCardId())
-                .eq(query.getThickness() != 0, HollowBigStorageCageDetails::getThickness, query.getThickness())
-                .orderByAsc(HollowBigStorageCageDetails::getFlowCardId)
-        );
+        List<FlowCardGlassInfoDTO> detailsList = hollowBigStorageCageDetailsService.queryHollowAllFlowCard(query);
+
         if (CollectionUtil.isEmpty(detailsList)) {
             log.info("绗煎唴鏃犵幓鐠�");
             return new ArrayList<>();
         }
         Date middleDate = new Date();
         log.info("涓┖鐞嗙墖绗艰鎯呮暟鎹凡鏌ヨ瀹屾瘯锛岃�楁椂:{}ms", middleDate.getTime() - startDate.getTime());
-        Map<String, List<HollowBigStorageCageDetails>> listMap = detailsList.stream().collect(Collectors.groupingBy(HollowBigStorageCageDetails::getFlowCardId));
+        Map<String, List<FlowCardGlassInfoDTO>> listMap = detailsList.stream().collect(Collectors.groupingBy(FlowCardGlassInfoDTO::getFlowCardId));
         List<HollowAllFlowCardVO> resultList = new ArrayList<>();
         AtomicInteger pairTotalCount = new AtomicInteger();
         listMap.forEach((e, v) -> {
             HollowAllFlowCardVO hollowAllFlowCardVO = new HollowAllFlowCardVO();
-            HollowBigStorageCageDetails cageDetails = v.get(0);
+            FlowCardGlassInfoDTO cageDetails = v.get(0);
             //鎸夌収娴佺▼鍗¤幏鍙栧搴旂殑浜у搧鍚嶇О
-            OrderDetailsDTO orderDetails = baseMapper.queryProductNameByFlowCardId(cageDetails.getFlowCardId(), query.getProductName(), query.getCustomerName());
+            OrderDetailsDTO orderDetails = this.queryProductNameByFlowCardId(cageDetails.getFlowCardId(), query.getProductName(), query.getCustomerName());
             if (null != orderDetails) {
                 BeanUtils.copyProperties(orderDetails, hollowAllFlowCardVO);
                 hollowAllFlowCardVO.setFlowCardId(e);
@@ -333,12 +330,8 @@
                 } else {
                     hollowAllFlowCardVO.setIsThroughSlot(Boolean.FALSE);
                 }
-                List<FlowCardGlassInfoDTO> flowCardInfoList = hollowBigStorageCageDetailsService.hollowIsAll(e, cageDetails.getTotalLayer(), Boolean.FALSE);
-                log.info("鑾峰彇鍒扮殑娴佺▼鍗′俊鎭负:{}", flowCardInfoList);
-                if (CollectionUtil.isNotEmpty(flowCardInfoList)) {
-                    hollowAllFlowCardVO.setFlowCardGlassInfoDTOList(flowCardInfoList);
-                    pairTotalCount.addAndGet(flowCardInfoList.get(0).getPairCount());
-                }
+                hollowAllFlowCardVO.setFlowCardGlassInfoDTOList(v);
+                pairTotalCount.addAndGet(cageDetails.getPairCount());
                 resultList.add(hollowAllFlowCardVO);
             }
         });
@@ -400,14 +393,20 @@
     }
 
     @Override
-    public List<LackDetailsDTO> queryLackByFlowCard() {
-        List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryLackByFlowCard();
+    public List<LackDetailsDTO> queryAllLackByFlowCard() {
+        List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryAllLackByFlowCard();
         return lackDetailsList;
     }
 
     @Override
     public int queryLayerByFlowCardId(String flowCardId) {
         return baseMapper.queryLayerByFlowCardId(flowCardId);
+    }
+
+    @Override
+    public Map<Integer,List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId) {
+        List<LackDetailsDTO> detailsDTOS = baseMapper.queryLackByFlowCard(flowCardId);
+        return detailsDTOS.stream().collect(Collectors.groupingBy(item -> item.getLayer()));
     }
 
     @Override
@@ -430,7 +429,9 @@
         List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>()
                 .eq(GlassInfo::getFlowCardId, request.getFlowCardId())
                 .eq(GlassInfo::getLayer, request.getLayer())
-                .eq(GlassInfo::getGlassType, request.getGlassType()));
+                .eq(GlassInfo::getGlassType, request.getGlassType())
+                .eq(request.getGlassId() != null, GlassInfo::getGlassId, request.getGlassId())
+        );
         for (GlassInfo glassInfo : glassInfos) {
             //鎺扮墖鎶ョ牬鎹�
             damageService.autoSubmitReport(glassInfo.getGlassId(), request.getLine(), request.getWorkingProcedure(), request.getRemark(), request.getState());
@@ -438,6 +439,21 @@
         return Boolean.TRUE;
     }
 
+    @Override
+    public List<GlassInfo> queryLackGlassByFlowCard(HollowBigStorageDetailsQueryVO query) {
+        return baseMapper.queryLackGlassByFlowCard(query.getFlowCardId(), query.getOrderSort(), query.getLayer());
+    }
+
+    @Override
+    public OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId, String productName, String customerName) {
+        OrderDetailsDTO dto = hollowGlassOutRelationInfoService.queryProductNameByFlowCardId(flowCardId);
+        if ((StringUtils.isBlank(productName) || dto.getProductName().contains(productName)) && (StringUtils.isBlank(customerName) || dto.getCustomerName().contains(customerName))) {
+            return dto;
+        }
+        return null;
+    }
+
+
     private void sortFlowCardIdList(List<HollowAllFlowCardVO> list) {
         Pattern pattern = Pattern.compile("^NG(\\d+)([A-Za-z]+)(\\d+)$");
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/controller/HollowBigStorageCageHistoryTaskController.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/controller/HollowBigStorageCageHistoryTaskController.java
index a4d8f90..4514e39 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/controller/HollowBigStorageCageHistoryTaskController.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/controller/HollowBigStorageCageHistoryTaskController.java
@@ -47,5 +47,11 @@
     public Result<List<RunTime>> queryRunTimes(String days) {
         return Result.success(hollowBigStorageCageHistoryTaskService.queryRunTimes(days));
     }
+
+    @ApiOperation(value = "鏌ヨ涓┖澶х悊鐗囩晫闈㈡墍鏈変俊鎭�", notes = "鏌ヨ涓┖澶х悊鐗囩晫闈㈡墍鏈変俊鎭�")
+    @GetMapping("/queryAllMessage")
+    public Result<String> queryAllMessage() {
+        return Result.success(hollowBigStorageCageHistoryTaskService.queryAllMessage());
+    }
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/HollowBigStorageCageHistoryTaskService.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/HollowBigStorageCageHistoryTaskService.java
index 4fc5fd9..332fbf9 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/HollowBigStorageCageHistoryTaskService.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/HollowBigStorageCageHistoryTaskService.java
@@ -22,5 +22,7 @@
     DailyProductionVO queryHollowDailyProduction(HollowBigStorageCageHistoryRequest request);
 
     List<RunTime> queryRunTimes(String days);
+
+    String queryAllMessage();
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/impl/HollowBigStorageCageHistoryTaskServiceImpl.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/impl/HollowBigStorageCageHistoryTaskServiceImpl.java
index 51a1415..4f297c2 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/impl/HollowBigStorageCageHistoryTaskServiceImpl.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollowtask/service/impl/HollowBigStorageCageHistoryTaskServiceImpl.java
@@ -9,11 +9,13 @@
 import com.mes.hollowtask.entity.request.HollowBigStorageCageHistoryRequest;
 import com.mes.hollowtask.mapper.HollowBigStorageCageHistoryTaskMapper;
 import com.mes.hollowtask.service.HollowBigStorageCageHistoryTaskService;
+import com.mes.job.PushMessageToIndex;
 import com.mes.largenscreen.entity.DailyProductionVO;
 import com.mes.largenscreen.entity.RunTime;
 import com.mes.tools.DateUtil;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.List;
 
@@ -25,6 +27,9 @@
  */
 @Service
 public class HollowBigStorageCageHistoryTaskServiceImpl extends ServiceImpl<HollowBigStorageCageHistoryTaskMapper, HollowBigStorageCageHistoryTask> implements HollowBigStorageCageHistoryTaskService {
+
+    @Resource
+    PushMessageToIndex pushMessageToIndex;
 
     @Override
     public Page<HollowBigStorageCageHistoryTask> queryHollowBigStorageCageHistoryTask(HollowBigStorageCageHistoryRequest request) {
@@ -57,8 +62,14 @@
     }
 
     @Override
-    public List<RunTime> queryRunTimes(String days){
+    public List<RunTime> queryRunTimes(String days) {
         return baseMapper.queryRunTimes(days);
     }
+
+    @Override
+    public String queryAllMessage() {
+        pushMessageToIndex.hollowGlassMessage();
+        return "success";
+    }
 }
 
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
index b7d3dbd..07ae663 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java
@@ -115,7 +115,8 @@
 
     private static final String ALARM_MODULE = "涓┖";
     private static final String ALARM_TYPE = "涓┖澶х悊鐗�";
-    private static final String ALARM_CODE = "sizeSame";
+    private static final String ALARM_CODE_SIZE = "sizeSame";
+    private static final String ALARM_CODE_ID = "idSame";
 
     /**
      * 鐩撮�氭牸瀛�
@@ -131,8 +132,7 @@
         List<ProductAlarmInfo> alarmInfos = productAlarmInfoService.list(new LambdaQueryWrapper<ProductAlarmInfo>()
                 .eq(ProductAlarmInfo::getState, Const.LOAD_RAW_GLASS_NEW)
                 .eq(ProductAlarmInfo::getAlarmModule, ALARM_MODULE)
-                .eq(ProductAlarmInfo::getAlarmType, ALARM_TYPE)
-                .eq(ProductAlarmInfo::getAlarmCode, ALARM_CODE));
+                .eq(ProductAlarmInfo::getAlarmType, ALARM_TYPE));
         if (CollectionUtil.isNotEmpty(alarmInfos)) {
             log.info("鐣岄潰鎶ヨ锛岀瓑寰呬汉宸ュ共棰勫鐞�");
             return;
@@ -179,6 +179,13 @@
         for (Map.Entry<String, Long> entry : glassCountMap.entrySet()) {
             if (entry.getValue() > 1) {
                 log.info("杩涚墖鐜荤拑{}瀛樺湪鐩稿悓锛岀粨鏉熸湰娆′换鍔�", entry.getKey());
+                ProductAlarmInfo alarmInfo = new ProductAlarmInfo();
+                alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW);
+                alarmInfo.setAlarmModule(ALARM_MODULE);
+                alarmInfo.setAlarmType(ALARM_TYPE);
+                alarmInfo.setAlarmCode(ALARM_CODE_ID);
+                alarmInfo.setAlarmMessage(entry.getKey());
+                productAlarmInfoService.save(alarmInfo);
                 //鍚憄lc鍙戦�佹姤璀�:鍚屼竴杞﹁繘鐗囩幓鐠冨瓨鍦ㄧ浉鍚�
                 s7DataZKDLPOne = new S7DataZKDLPOne();
                 s7DataZKDLPOne.setAlramSignal(2);
@@ -191,6 +198,16 @@
         if (CollectionUtil.isNotEmpty(detailsList)) {
             log.info("鐞嗙墖绗煎瓨鍦ㄧ浉鍚岀殑杩涚墖鐜荤拑{}锛岀粨鏉熸湰娆′换鍔�", detailsList);
             //鍚憄lc鍙戦�佹姤璀�:鐞嗙墖绗煎瓨鍦ㄧ浉鍚岀殑杩涚墖鐜荤拑
+            List<String> sameGlassIds = detailsList.stream()
+                    .map(HollowBigStorageCageDetails::getGlassId)
+                    .collect(Collectors.toList());
+            ProductAlarmInfo alarmInfo = new ProductAlarmInfo();
+            alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW);
+            alarmInfo.setAlarmModule(ALARM_MODULE);
+            alarmInfo.setAlarmType(ALARM_TYPE);
+            alarmInfo.setAlarmCode(ALARM_CODE_ID);
+            alarmInfo.setAlarmMessage(sameGlassIds.toString());
+            productAlarmInfoService.save(alarmInfo);
             s7DataZKDLPOne = new S7DataZKDLPOne();
             s7DataZKDLPOne.setAlramSignal(4);
             s7SerializerZKDLPOne.write(s7DataZKDLPOne);
@@ -275,7 +292,7 @@
                     alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW);
                     alarmInfo.setAlarmModule(ALARM_MODULE);
                     alarmInfo.setAlarmType(ALARM_TYPE);
-                    alarmInfo.setAlarmCode(ALARM_CODE);
+                    alarmInfo.setAlarmCode(ALARM_CODE_SIZE);
                     alarmInfo.setAlarmMessage(info.getGlassId());
                     productAlarmInfoService.save(alarmInfo);
                     //閲嶇疆璇︽儏琛ㄦ暟鎹�
@@ -1024,10 +1041,19 @@
                     }
                     baseInfoList = resultList;
                 } else {
-                    //澶т簬鎬诲眰鏁板厛鍙杢otalLyaer鍊嶆暟鏁伴噺鐨勭幓鐠冿紝淇濊瘉澶ц溅涓婄殑鐜荤拑鎴愬浼�
+                    //澶т簬鎬诲眰鏁板厛鍙杢otalLayer鍊嶆暟鏁伴噺鐨勭幓鐠冿紝淇濊瘉澶ц溅涓婄殑鐜荤拑鎴愬浼�
                     int remainCount = templist.size() % totalLayer;
                     if (targetSlot == 930) {
-                        baseInfoList = templist.subList(0, totalLayer);
+                        int tempSequence = templist.get(0).getHollowSequence();
+                        List<T> resultList = new ArrayList<>();
+                        for (int i = 0; i < templist.size(); i++) {
+                            if (tempSequence == list.get(i).getHollowSequence()) {
+                                resultList.add(templist.get(i));
+                            } else {
+                                break;
+                            }
+                        }
+                        baseInfoList = resultList;
                     } else {
                         baseInfoList = templist.subList(0, templist.size() - remainCount);
                     }
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
index 2c460ac..87bb726 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/PushMessageToIndex.java
@@ -336,7 +336,7 @@
         jsonObject.append("bigStorageCageUsageSummary", bigStorageCageUsageSummary);
 
         //缂虹墖璇︽儏
-        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryLackByFlowCard();
+        List<LackDetailsDTO> lackDetailsList = hollowGlassRelationInfoService.queryAllLackByFlowCard();
         jsonObject.append("lackDetailsList", lackDetailsList);
 
         jsonObject.append("alarmInfo", productAlarmInfoService.list(new LambdaQueryWrapper<ProductAlarmInfo>()
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-dev.yml b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-dev.yml
index 18045e8..b9b0000 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-dev.yml
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/application-dev.yml
@@ -5,7 +5,7 @@
       strict: false #璁剧疆涓ユ牸妯″紡,榛樿false涓嶅惎鍔�. 鍚姩鍚庡湪鏈尮閰嶅埌鎸囧畾鏁版嵁婧愭椂鍊欏洖鎶涘嚭寮傚父,涓嶅惎鍔ㄤ細浣跨敤榛樿鏁版嵁婧�.
       datasource:
         northGlassMes:
-          url: jdbc:mysql://127.0.0.1:3306/north_glass_mes?serverTimezone=GMT%2b8
+          url: jdbc:mysql://127.0.0.1:3306/yw_mes?serverTimezone=GMT%2b8
           username: root
           password: beibo.123/
           driver-class-name: com.mysql.cj.jdbc.Driver
@@ -24,23 +24,19 @@
       discovery:
         server-addr: 127.0.0.1:8848
   redis:
-    database: 0
+    database: 1
     host: 127.0.0.1
     port: 6379
     password: 123456
-    kangaroohy:
-      milo:
-        enabled: true
-        primary: default
-        config:
-          default:
-            endpoint: opc.tcp://10.153.19.150:49320
-            security-policy: basic256sha256
-            username: admin
-            password: 1qaz2wsx3edc4rfv
+  cache:
+    type: redis  # 鏄庣‘鎸囧畾缂撳瓨绫诲瀷
+    redis:
+      time-to-live: -1    # 缂撳瓨杩囨湡鏃堕棿
+      cache-null-values: true # 鏄惁缂撳瓨绌哄��
+      use-key-prefix: true    # 浣跨敤key鍓嶇紑
 kangaroohy:
   milo:
-    enabled: true
+    enabled: false
     primary: default
     config:
       default:
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
index d01fb36..ba5ade2 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowBigStorageCageDetailsMapper.xml
@@ -50,77 +50,72 @@
     </update>
 
     <select id="hollowIsAll" resultMap="baseMap">
-        WITH sum_flow_layer_count AS ( SELECT flow_card_id, layer, min( films_id ) AS films_id, min(thickness) as
-        thickness,count(*) AS sum_count FROM hollow_glass_relation_info GROUP BY flow_card_id, layer ),
-        real_flow_layer_count AS ( SELECT flow_card_id, layer, count(*) AS real_count, count(distinct slot) as
-        slot_count FROM
-        hollow_big_storage_cage_details t WHERE state = 100 GROUP BY flow_card_id, layer ),
-        damage_flow_layer_count AS ( SELECT process_id AS flow_card_id, technology_number AS layer, count(*) as
-        damage_count FROM damage where type in(8,9) GROUP BY process_id, technology_number ),
-        lack_flow_layer_count AS (
+        WITH flow_layer_stats AS (
         SELECT
-        t.flow_card_id,
-        t.layer,
-        ifnull((sum_count - real_count - ifnull(damage_count,0)),0) AS lack_count
-        FROM
-        sum_flow_layer_count t
-        left JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id
-        AND t.layer = t1.layer
-        left JOIN damage_flow_layer_count t2 ON t1.flow_card_id = t2.flow_card_id
-        AND t1.layer = t2.layer
+        h.flow_card_id,
+        h.layer,
+        MIN(r.films_id) AS films_id,
+        MIN(r.thickness) AS thickness,
+        COUNT(*) AS sum_count,
+        COUNT(DISTINCT h.slot) AS slot_count,
+        SUM(CASE WHEN h.state = 100 THEN 1 ELSE 0 END) AS real_count
+        FROM hollow_glass_relation_info r
+        LEFT JOIN hollow_big_storage_cage_details h
+        ON r.flow_card_id = h.flow_card_id AND r.layer = h.layer
+        WHERE r.flow_card_id = #{flowCardId}
+        GROUP BY h.flow_card_id, h.layer
         ),
-        layer_one AS ( SELECT * FROM hollow_big_storage_cage_details WHERE layer = 1 AND state = 100 ),
-        layer_two AS ( SELECT * FROM hollow_big_storage_cage_details WHERE layer = 2 AND state = 100),
-        layer_three AS ( SELECT * FROM hollow_big_storage_cage_details WHERE layer = 3 AND state = 100 )
-        ,
-        pair_flow_layer_count AS (
+        damage_stats AS (
         SELECT
-        t.flow_card_id,
-        count(*) AS pair_count
-        FROM
-        layer_one t
-        INNER JOIN layer_two t1 ON t.flow_card_id = t1.flow_card_id
-        AND t.virtual_slot = t1.virtual_slot
-        AND t.sequence = t1.sequence
+        process_id AS flow_card_id,
+        technology_number AS layer,
+        COUNT(*) AS damage_count
+        FROM damage
+        WHERE type IN (8,9) AND process_id = #{flowCardId}
+        GROUP BY process_id, technology_number
+        ),
+        pair_stats AS (
+        SELECT
+        t1.flow_card_id,
+        COUNT(*) AS pair_count
+        FROM hollow_big_storage_cage_details t1
+        INNER JOIN hollow_big_storage_cage_details t2
+        ON t1.flow_card_id = t2.flow_card_id
+        AND t1.virtual_slot = t2.virtual_slot
+        AND t1.sequence = t2.sequence
+        AND t1.layer = 1 AND t2.layer = 2
+        AND t1.state = 100 AND t2.state = 100
         <if test="totalLayer == 3">
-            inner join layer_three t2
-            on t.flow_card_id = t2.flow_card_id and
-            t.virtual_slot = t2.virtual_slot and t.sequence = t2.sequence
+            INNER JOIN hollow_big_storage_cage_details t3
+            ON t1.flow_card_id = t3.flow_card_id
+            AND t1.virtual_slot = t3.virtual_slot
+            AND t1.sequence = t3.sequence
+            AND t3.layer = 3 AND t3.state = 100
         </if>
-        GROUP BY
-        t.flow_card_id
-        ),
-        result_flow_layer_count AS (
+        WHERE t1.flow_card_id = #{flowCardId}
+        GROUP BY t1.flow_card_id
+        )
         SELECT
-        t.flow_card_id,
-        t.layer,
-        t.films_id,
-        t.thickness,
-        sum_count,
-        IFNULL( t3.pair_count, 0 ) AS pair_count,
-        IFNULL( real_count, 0 ) AS real_count,
-        IFNULL( damage_count, 0 ) AS damage_count,
-        IFNULL( lack_count, 0 ) AS lack_count,
-        IFNULL(slot_count,0) AS slot_count
-        FROM
-        sum_flow_layer_count t
-        LEFT JOIN real_flow_layer_count t1 ON t.flow_card_id = t1.flow_card_id
-        AND t.layer = t1.layer
-        LEFT JOIN lack_flow_layer_count t2 ON t.flow_card_id = t2.flow_card_id
-        AND t.layer = t2.layer
-        LEFT JOIN pair_flow_layer_count t3 ON t.flow_card_id = t3.flow_card_id
-        LEFT JOIN damage_flow_layer_count t4 ON t.flow_card_id = t4.flow_card_id
-        AND t.layer = t4.layer
-        ) SELECT
-        *
-        FROM
-        result_flow_layer_count
-        WHERE
-        flow_card_id = #{flowCardId}
+        f.flow_card_id,
+        f.layer,
+        f.films_id,
+        f.thickness,
+        f.sum_count,
+        COALESCE(p.pair_count, 0) AS pair_count,
+        COALESCE(f.real_count, 0) AS real_count,
+        COALESCE(d.damage_count, 0) AS damage_count,
+        (f.sum_count - COALESCE(f.real_count, 0) - COALESCE(d.damage_count, 0)) AS lack_count,
+        f.slot_count
+        FROM flow_layer_stats f
+        LEFT JOIN damage_stats d
+        ON f.flow_card_id = d.flow_card_id AND f.layer = d.layer
+        LEFT JOIN pair_stats p
+        ON f.flow_card_id = p.flow_card_id
+        WHERE 1=1
         <if test="flag == true">
-            and sum_count = pair_count
+            AND f.sum_count = COALESCE(p.pair_count, 0)
         </if>
-        order by layer
+        ORDER BY f.layer;
     </select>
 
     <select id="queryIsAllNeedDispatchVirtualSlot" resultMap="virtualSlotSequenceDTO">
@@ -257,4 +252,129 @@
         where state in (100, 102, 103, 104)
         group by flow_card_id, layer
     </select>
+
+    <select id="queryHollowAllFlowCard" resultType="com.mes.hollow.entity.dto.FlowCardGlassInfoDTO">
+        WITH hollow_flow_temp AS (
+        SELECT DISTINCT flow_card_id
+        FROM hollow_big_storage_cage_details
+        WHERE state = 100
+        <if test="flowCardId != null and flowCardId != ''">
+            AND flow_card_id LIKE CONCAT('%', #{flowCardId}, '%')
+        </if>
+        <if test="filmsId != null and filmsId != ''">
+            AND films_id LIKE CONCAT('%', #{filmsId}, '%')
+        </if>
+        <if test="thickness != 0">
+            AND thickness = #{thickness}
+        </if>
+        ),
+        hollow_details_temp AS (
+        SELECT
+        flow_card_id,
+        glass_id,
+        virtual_slot,
+        sequence,
+        layer,
+        total_layer,
+        hollow_sequence
+        FROM hollow_big_storage_cage_details
+        WHERE state = 100
+        <if test="flowCardId != null and flowCardId != ''">
+            AND flow_card_id LIKE CONCAT('%', #{flowCardId}, '%')
+        </if>
+        <if test="filmsId != null and filmsId != ''">
+            AND films_id LIKE CONCAT('%', #{filmsId}, '%')
+        </if>
+        <if test="thickness != 0">
+            AND thickness = #{thickness}
+        </if>
+        ),
+        hollow_through_temp AS (
+        SELECT
+        flow_card_id,
+        MIN(hollow_sequence) as hollow_sequence,
+        MAX(total_layer) as total_layer
+        FROM hollow_details_temp
+        GROUP BY flow_card_id
+        ),
+        hollow_pair_temp AS (
+        SELECT
+        t1.flow_card_id,
+        COUNT(*) AS pair_count
+        FROM hollow_details_temp t1
+        INNER JOIN hollow_details_temp t2
+        ON t1.flow_card_id = t2.flow_card_id
+        AND t1.virtual_slot = t2.virtual_slot
+        AND t1.sequence = t2.sequence
+        AND t1.layer = 1 AND t2.layer = 2
+        WHERE NOT EXISTS (
+        SELECT 1
+        FROM hollow_through_temp ht
+        WHERE ht.flow_card_id = t1.flow_card_id
+        AND ht.total_layer = 3
+        ) OR EXISTS (
+        SELECT 1
+        FROM hollow_details_temp t3
+        WHERE t3.flow_card_id = t1.flow_card_id
+        AND t3.virtual_slot = t1.virtual_slot
+        AND t3.sequence = t1.sequence
+        AND t3.layer = 3
+        )
+        GROUP BY t1.flow_card_id
+        ),
+        glass_info_temp AS (
+        SELECT
+        gi.id,
+        gi.glass_id,
+        gi.flow_card_id,
+        gi.layer,
+        gi.thickness,
+        gi.filmsId
+        FROM hollow_flow_temp hft
+        INNER JOIN glass_info gi ON hft.flow_card_id = gi.flow_card_id
+        ),
+        damage_ranked AS (
+        SELECT
+        d.glass_id,
+        d.type,
+        d.status,
+        ROW_NUMBER() OVER(PARTITION BY d.glass_id ORDER BY d.id DESC) as rn
+        FROM hollow_flow_temp hft
+        INNER JOIN damage d ON hft.flow_card_id = d.process_id
+        ),
+        damage_latest AS (
+        SELECT
+        glass_id,
+        type,
+        status
+        FROM damage_ranked
+        WHERE rn = 1
+        ),
+        result_temp AS (
+        SELECT
+        t.flow_card_id,
+        t.layer,
+        t.thickness,
+        t.filmsId,
+        COUNT(DISTINCT t.id) as sum_count,
+        COUNT(DISTINCT t1.glass_id) as real_count,
+        COUNT(DISTINCT t.id) - COUNT(DISTINCT t1.glass_id) as lack_count,
+        COUNT(DISTINCT CASE WHEN t2.type IN (7,8) AND t2.status = 1 THEN t.glass_id END) as damage_count
+        FROM glass_info_temp t
+        LEFT JOIN hollow_details_temp t1 ON t.glass_id = t1.glass_id
+        LEFT JOIN damage_latest t2 ON t.glass_id = t2.glass_id
+        GROUP BY t.flow_card_id, t.layer, t.thickness, t.filmsId
+        )
+        SELECT
+        t.*,
+        COALESCE(t1.pair_count, 0) as pair_count,
+        t2.hollow_sequence,
+        t2.total_layer
+        FROM result_temp t
+        LEFT JOIN hollow_pair_temp t1 ON t.flow_card_id = t1.flow_card_id
+        LEFT JOIN hollow_through_temp t2 ON t.flow_card_id = t2.flow_card_id
+        ORDER BY t.flow_card_id
+    </select>
+
+
 </mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml
index 5aeed84..1507b97 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassOutRelationInfoMapper.xml
@@ -39,4 +39,15 @@
             date( hgori.create_time ) = date(
             now())
     </select>
+    <select id="queryProductNameByFlowCardId" resultType="com.mes.hollow.entity.dto.OrderDetailsDTO">
+        select t.product_name, t1.customer_name
+        from sd.order_detail t
+                 inner join sd.order t1 on t.order_id = t1.order_id
+        where (t.order_id, t.order_number) = (
+            select min(order_id) as order_id, min(order_number) as order_number
+            from pp.flow_card
+            where process_id = #{flowCardId}
+        )
+        limit 1
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
index f59fda8..f63ee25 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
@@ -13,10 +13,10 @@
     <resultMap id="lackBaseMap" type="com.mes.hollow.entity.dto.LackDetailsDTO">
         <result column="flow_card_id" property="flowCardId"/>
         <result column="layer" property="layer"/>
-        <result column="order_sort" property="glassType"/>
-        <result column="films_id" property="filmsId"/>
-        <result column="first_length" property="width"/>
-        <result column="second_Length" property="height"/>
+        <result column="glass_type" property="glassType"/>
+        <result column="filmsid" property="filmsId"/>
+        <result column="width" property="width"/>
+        <result column="height" property="height"/>
         <result column="thickness" property="thickness"/>
         <result column="lack_count" property="lackCount"/>
         <result column="damage_count" property="damageCount"/>
@@ -105,59 +105,68 @@
         select *
         from result
     </select>
-    <select id="queryLackByFlowCard" resultMap="lackBaseMap">
-        with flow_card_id_info as (
-            select distinct flow_card_id from hollow_big_storage_cage_details where state = 100
+    <select id="queryAllLackByFlowCard" resultMap="lackBaseMap">
+        WITH flow_card_id_info AS (
+            SELECT DISTINCT flow_card_id
+            FROM hollow_big_storage_cage_details
+            WHERE state = 100
         ),
-             relation_length as (
-                 select flow_card_id,
-                        layer,
-                        order_sort,
-                        tempering_layout_id,
-                        tempering_feed_sequence,
-                        GREATEST(width, height) as first_length,
-                        LEAST(width, height)    as second_Length,
-                        width,
-                        height,
-                        thickness,
-                        films_id
-                 from hollow_glass_relation_info
-                 where flow_card_id in (select flow_card_id from flow_card_id_info)
-                   and tempering_layout_id is null
-                   and tempering_feed_sequence is null
+             glass_temp AS (
+                 SELECT t.*
+                 FROM glass_info t
+                          INNER JOIN flow_card_id_info t1 ON t.flow_card_id = t1.flow_card_id
              ),
-             lack_count_temp as (
-                 select flow_card_id,
-                        layer,
-                        order_sort,
-                        first_length,
-                        films_id,
-                        second_Length,
-                        thickness,
-                        count(*) as lack_count
-                 from relation_length
-                 group by flow_card_id, layer, order_sort, films_id, first_length, second_Length, thickness
+             detail_temp AS (
+                 SELECT t.*
+                 FROM glass_temp t
+                 WHERE NOT EXISTS (
+                         SELECT 1
+                         FROM hollow_big_storage_cage_details t1
+                         WHERE t1.glass_id = t.glass_id
+                           AND t1.state NOT IN (8,9)
+                     )
              ),
-             damage_count_temp as (
-                 select process_id        as flow_card_id,
-                        technology_number as layer,
-                        order_number      as order_sort,
-                        count(1)          as damage_count
-                 from damage
-                 where process_id in (select flow_card_id from flow_card_id_info)
-                   and type in (8, 9)
-                   and status &lt; 3
-                 group by process_id, technology_number, order_number
+             damage_latest AS (
+                 SELECT
+                     dr.glass_id,
+                     dr.type,
+                     dr.status
+                 FROM (
+                          SELECT
+                              t1.glass_id,
+                              t1.type,
+                              t1.status,
+                              ROW_NUMBER() OVER(PARTITION BY t1.glass_id ORDER BY t1.id DESC) as rn
+                          FROM detail_temp t
+                                   INNER JOIN damage t1 ON t.flow_card_id = t1.process_id
+                      ) dr
+                 WHERE dr.rn = 1
              ),
-             result_count as (
-                 select t.*, IFNULL(t1.damage_count, 0) damage_count
-                 from lack_count_temp t
-                          left join damage_count_temp t1 on t.flow_card_id = t1.flow_card_id and t.layer = t1.layer and
-                                                            t.order_sort = t1.order_sort
-                 order by t.flow_card_id, t.layer
+             result_temp AS (
+                 SELECT
+                     t.flow_card_id,
+                     t.layer,
+                     t.glass_type,
+                     t.thickness,
+                     t.filmsId,
+                     t.width,
+                     t.height,
+                     COUNT(DISTINCT t.glass_id) as lack_count,
+                     COUNT(DISTINCT CASE WHEN t1.type IN (7,8) AND t1.status = 1 THEN t.glass_id END) as damage_count
+                 FROM detail_temp t
+                          LEFT JOIN damage_latest t1 ON t.glass_id = t1.glass_id
+                 GROUP BY
+                     t.flow_card_id,
+                     t.layer,
+                     t.glass_type,
+                     t.thickness,
+                     t.filmsId,
+                     t.width,
+                     t.height
              )
-        select *
-        from result_count
+        SELECT *
+        FROM result_temp
+        ORDER BY flow_card_id, layer;
     </select>
     <select id="queryLayerByFlowCardId" resultType="java.lang.Integer">
         select count(distinct layer)
@@ -181,19 +190,75 @@
         )
         limit 1
     </select>
+    <select id="queryLackGlassByFlowCard" resultType="com.mes.glassinfo.entity.GlassInfo">
+        with glass_id_info as (
+        select glass_id,order_sort from hollow_glass_relation_info where flow_card_id=#{flowCardId} and
+        order_sort=#{orderSort} and layer=#{layer} and glass_id is not null
+        ),
+        damage_glass_id as (
+        select glass_id from damage where process_id=#{flowCardId} and order_number=#{orderSort} and
+        technology_number=#{layer} and type=8 and status &lt; 3 and glass_id is not null
+        )
+        select t.* from glass_info t left join glass_id_info t1 on t.glass_id=t1.glass_id
+        left join damage_glass_id t2 on t.glass_id=t2.glass_id
+        where t.flow_card_id=#{flowCardId} and t.glass_type=#{orderSort} and t.layer=#{layer} and t1.glass_id is null
+        and t2.glass_id is null
+    </select>
+    <select id="queryLackByFlowCard" resultType="com.mes.hollow.entity.dto.LackDetailsDTO">
+        with hollow_flow_temp AS (
+            SELECT DISTINCT flow_card_id
+            FROM hollow_big_storage_cage_details
+            WHERE state = 100
+        <if test="flowCardId != null and flowCardId != ''">
+            and flow_card_id = #{flowCardId}
+        </if>
+        )
+           , glass_temp as (
+            select t1.*
+            from hollow_flow_temp t
+                     INNER JOIN glass_info t1 on t.flow_card_id = t1.flow_card_id
+        )
+           , detail_temp as (
+            select t.*
+            from glass_temp t
+                     left join hollow_big_storage_cage_details t1 on t.glass_id = t1.glass_id and t1.state  not in (8,9)
+            where t1.glass_id is null
+        )
+           , damage_ranked AS (
+            SELECT t.flow_card_id,
+                   t.layer,
+                   t.glass_id,
+                   t.glass_type,
+                   t.width,
+                   t.height,
+                   t.filmsId,
+                   t.thickness,
+                   case
+                       when type in (7, 8) and status = 1 then ''
+                       else t1.working_procedure end                                as working_procedure,
+                   ROW_NUMBER() OVER (PARTITION BY t1.glass_id ORDER BY t1.id DESC) as rn
+            FROM detail_temp t
+                     inner join damage t1 on t.glass_id = t1.glass_id
+        )
+           , damage_latest AS (
+            SELECT *
+            FROM damage_ranked
+            WHERE rn = 1
+        )
+        select *
+        from damage_latest
+
+    </select>
 
     <update id="clearDirtyFlowCardData">
-        update hollow_glass_relation_info
-        set glass_id                = null,
-            tempering_layout_id     = null,
-            tempering_feed_sequence = null,
-            engineer_id             = null,
-            state                   = 0
+        update tempering_glass_relation_info
+        set shelf_order = null
+          , state       = 0
         where flow_card_id = #{flowCardId}
           and layer = #{layer}
-          and glass_id not in (
-            select glass_id
-            from hollow_big_storage_cage_details
+          and shelf_order not in (
+            select shelf_order
+            from vertical_sheet_cage_details
             where flow_card_id = #{flowCardId}
               and layer = #{layer}
               and state in (100, 102, 103, 104)

--
Gitblit v1.8.0