From ae1459d90f53ac81177e75790d859c6a12e7ed54 Mon Sep 17 00:00:00 2001
From: wangfei <3597712270@qq.com>
Date: 星期三, 12 十一月 2025 11:09:10 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10105/r/YiWuProject

---
 hangzhoumesParent/common/servicebase/src/main/resources/mapper/OrderMapper.xml                                                      |   28 ++-
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml                  |    8 
 hangzhoumesParent/moduleService/CacheGlassModule/src/main/java/com/mes/job/OpcCacheGlassNewTask.java                                |   16 ++
 UI-Project/src/views/hollow/hollowequipment.vue                                                                                     |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java                                        |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java                                          |    4 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/mapper/HollowGlassRelationInfoMapper.java            |    3 
 UI-Project/src/views/Slicecage/slicecage.vue                                                                                        |   22 ++
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java                               |    5 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java                                |    7 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/entity/dto/LackDetailsDTO.java                       |    4 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcHollowRemoveTask.java                                |    7 -
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/controller/HollowGlassRelationInfoController.java    |    9 +
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcPlcStorageCageHollowTask.java                        |   63 +++++++-
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/HollowGlassRelationInfoService.java          |    2 
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java                                           |    7 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java |   84 ++++++++++++
 hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingGlassCountDTO.java    |    4 
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml                       |   88 ++++++++----
 hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java                                         |    2 
 20 files changed, 296 insertions(+), 71 deletions(-)

diff --git a/UI-Project/src/views/Slicecage/slicecage.vue b/UI-Project/src/views/Slicecage/slicecage.vue
index 4906c35..a3dfa97 100644
--- a/UI-Project/src/views/Slicecage/slicecage.vue
+++ b/UI-Project/src/views/Slicecage/slicecage.vue
@@ -1530,8 +1530,25 @@
     <el-button type="primary" style="margin-left: 10px;margin-bottom: 10px;" @click="fetchxianga">
       {{$t('reportmanage.inquire')}}</el-button>
   </div>
-    <el-table ref="table" style="margin-top: 20px;height: 700px;width: 1770px;" :data="tableDataa" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
-          <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.cagenumber')" min-width="100" />
+<el-table 
+  ref="table" 
+  style="margin-top: 20px; height: 700px; width: 1770px; overflow-y: auto;"  
+  :data="tableDataa" 
+  :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}"
+  virtual-scroll 
+  :virtual-scroll-item-size="50" 
+  :virtual-scroll-offset="100"   
+  :row-height="50"  
+   :border="false"  
+  :lazy="true"     
+  :cell-style="{padding: '8px 0'}"  
+  :show-header-overflow="false"  
+  :show-overflow="false"         
+  :stripe="false"               
+  :selectable="false"           
+  :tooltip-effect="null"         
+>
+  <el-table-column prop="deviceId" align="center" :label="$t('searchOrder.cagenumber')" min-width="100" />
           <el-table-column prop="engineerId" align="center" :label="$t('searchOrder.projectnumber')" min-width="100" />
           <el-table-column prop="layer" align="center" :label="$t('processCard.layer')" min-width="50" />
           <el-table-column prop="slot" align="center" :label="$t('searchOrder.gridnumber')" min-width="150" />
@@ -1642,6 +1659,7 @@
     <el-table  ref="table" style="margin-top: 20px;height: 500px;"
         :data="tableDatagh" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
           <el-table-column prop="engineerId" fixed align="center" :label="$t('searchOrder.projectnumber')" min-width="150"/>
+          <el-table-column prop="engineerName" fixed align="center" :label="$t('large.productname')" min-width="150"/>
           <el-table-column prop="thickness" align="center" :label="$t('basicData.thickness')" min-width="150" />
           <el-table-column prop="filmsId" align="center" :label="$t('basicData.coatingtypes')" min-width="150" />
           <el-table-column prop="temperingLayoutId" align="center" :label="$t('searchOrder.layoutnumber')" min-width="120" />
diff --git a/UI-Project/src/views/hollow/hollowequipment.vue b/UI-Project/src/views/hollow/hollowequipment.vue
index da9b1b5..98817f1 100644
--- a/UI-Project/src/views/hollow/hollowequipment.vue
+++ b/UI-Project/src/views/hollow/hollowequipment.vue
@@ -780,7 +780,7 @@
       <el-table-column prop="workingProcedure" align="center" :label="$t('reportmanage.process')" min-width="80" />
       <el-table-column fixed="right" :label="$t('searchOrder.operate')" align="center">
             <template #default="scope">
-              <el-button type="text" plain  @click="handleBroke(scope.row)">{{ $t('order.dilapidation') }}</el-button>
+              <el-button type="text" plain :disabled="scope.row.glassId==null"  @click="handleBroke(scope.row)">{{ $t('order.dilapidation') }}{{  }}</el-button>
             </template>
       </el-table-column>
       <div style="float: right;margin-bottom: 5px;">
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
index 56ac4c2..7c19797 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/mapper/DamageMapper.java
@@ -3,6 +3,9 @@
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.mes.damage.entity.Damage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -15,4 +18,5 @@
 @DS("northGlassMes")
 public interface DamageMapper extends MPJBaseMapper<Damage> {
 
+    List<Damage> queryUnTempByFlowCardId(@Param("flowCardId") String flowCardId);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
index 054022d..f46bafc 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/DamageService.java
@@ -68,4 +68,6 @@
     void deleteByGlassId(String glassId);
 
     Boolean sendToERP(ReportingWork reportingWork, List<ReportingWorkDetail> reportingWorkDetails, Boolean type);
+
+    List<Damage> queryUnTempByFlowCardId(String flowCardId);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
index 2c4ad7d..3996f10 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/damage/service/impl/DamageServiceImpl.java
@@ -430,4 +430,9 @@
             return false;
         }
     }
+
+    @Override
+    public List<Damage> queryUnTempByFlowCardId(String flowCardId){
+        return baseMapper.queryUnTempByFlowCardId(flowCardId);
+    }
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java
index d4a4757..398d6ee 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/mapper/OrdersMapper.java
@@ -1,9 +1,6 @@
 package com.mes.order.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.mes.order.entity.HollowGlassDetailsDTO;
-import com.mes.order.entity.HollowOrderDTO;
-import com.mes.order.entity.OrderDetailsDTO;
-import com.mes.order.entity.Orders;
+import com.mes.order.entity.*;
 import com.mes.order.entity.dto.OrderDTO;
 
 import java.util.List;
@@ -27,4 +24,6 @@
     List<HollowGlassDetailsDTO> queryFlowCardIdLayerGlassInfo(String flowCardId, int totalLayer, int layer);
 
     OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId);
+
+    List<ProcessCardReport> queryLackByERP(String flowCardId);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java
index e783a1d..19016a7 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/OrdersService.java
@@ -29,4 +29,6 @@
     List<HollowGlassDetailsDTO> queryFlowCardIdLayerGlassInfo(String flowCardId, int totalLayer, int layer);
 
     OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId);
+
+    List<ProcessCardReport> queryLackByERP(String flowCardId);
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java
index f01e222..eba9aed 100644
--- a/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java
+++ b/hangzhoumesParent/common/servicebase/src/main/java/com/mes/order/service/impl/OrdersServiceImpl.java
@@ -68,9 +68,14 @@
     }
 
     @Override
-    @Cacheable(value = "orderDetails", key = "#flowCardId",unless = "#result == null")
+    @Cacheable(value = "orderDetails", key = "#flowCardId", unless = "#result == null")
     public OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId) {
         log.info("鏌ヨ鏁版嵁搴撲竴娆★細{}", flowCardId);
         return baseMapper.queryProductNameByFlowCardId(flowCardId);
     }
+
+    @Override
+    public List<ProcessCardReport> queryLackByERP(String flowCardId) {
+        return baseMapper.queryLackByERP(flowCardId);
+    }
 }
diff --git a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/OrderMapper.xml b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/OrderMapper.xml
index ab29243..26b158e 100644
--- a/hangzhoumesParent/common/servicebase/src/main/resources/mapper/OrderMapper.xml
+++ b/hangzhoumesParent/common/servicebase/src/main/resources/mapper/OrderMapper.xml
@@ -25,8 +25,7 @@
                a.area,
                a.quantity,
                a.create_time,
-               round(ifnull(d.finishNum, 0) / a.quantity * 100) as 'percent',
-                ifnull(d.finishNum, 0)
+               round(ifnull(d.finishNum, 0) / a.quantity * 100) as 'percent', ifnull(d.finishNum, 0)
         from sd.`order` as a
                  LEFT JOIN (
             SELECT sum(c.reporting_work_num) as 'finishNum',order_id
@@ -38,16 +37,15 @@
         ) as d
                            on a.order_id = d.order_id
         where a.warehousing != 2 and a.warehousing >= 0
-        ORDER BY  a.order_id desc
+        ORDER BY a.order_id desc
     </select>
     <select id="queryOrderByFlowCardId" resultType="com.mes.order.entity.HollowOrderDTO">
         select t1.*
         from pp.flow_card t
                  inner join sd.order t1 on t.order_id = t1.order_id
-        where t.process_id = #{flowCardId}
-            limit 1
+        where t.process_id = #{flowCardId} limit 1
     </select>
-    <select id="queryFlowCardIdMaxLayerGlassInfo"  resultMap="baseMapHollowDetail">
+    <select id="queryFlowCardIdMaxLayerGlassInfo" resultMap="baseMapHollowDetail">
         with temp_flow as (SELECT t.process_id,
                                   t.order_id,
                                   t.order_number,
@@ -137,7 +135,21 @@
             select min(order_id) as order_id, min(order_number) as order_number
             from pp.flow_card
             where process_id = #{flowCardId}
-        )
-            limit 1
+        ) limit 1
+    </select>
+    <select id="queryLackByERP" resultType="com.mes.order.entity.ProcessCardReport">
+        select a.*,
+               (b.quantity - b.termination_quantity) as 'quantity',
+                (b.quantity - b.termination_quantity - reporting_work_num) as 'lack_quantity'
+        from order_process_detail as a
+                 inner join pp.flow_card as b
+                            on a.order_id = b.order_id
+                                and a.process_id = b.process_id
+                                and a.order_number = b.order_number
+                                and a.technology_number = b.technology_number
+        where termination_status = 0
+          and a.process_id = #{flowCardId}
+          and a.process = "涓┖"
+          and (b.quantity - b.termination_quantity) > reporting_work_num
     </select>
 </mapper>
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 241b4fe..5d0aad2 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
@@ -122,6 +122,7 @@
     private static final String ALARM_TYPE1 = "涓�绾垮崸寮忕悊鐗囩";
     private static final String ALARM_TYPE2 = "浜岀嚎鍗у紡鐞嗙墖绗�";
     private static final String ALARM_CODE_NOGLASS = "noGlass";
+    private static final String ALARM_CODE_ID = "idSame";
 
     @Scheduled(fixedDelay = 1000)
     public void startOneOpcTask() throws Exception {
@@ -323,6 +324,17 @@
         }
         if (glassInIdOne.equals(task.getGlassIdIn()) || glassInIdTwo.equals(task.getGlassIdIn())) {
             log.info("鐜荤拑id涓庝笂娆$浉鍚岋紝绂佹杩涚墖");
+            ProductAlarmInfo alarmInfo = new ProductAlarmInfo();
+            alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW);
+            alarmInfo.setAlarmModule(ALARM_MODULE);
+            if (deviceId == 1) {
+                alarmInfo.setAlarmType(ALARM_TYPE1);
+            } else {
+                alarmInfo.setAlarmType(ALARM_TYPE2);
+            }
+            alarmInfo.setAlarmCode(ALARM_CODE_ID);
+            alarmInfo.setAlarmMessage(task.getGlassIdIn());
+            productAlarmInfoService.save(alarmInfo);
             Date endDate = new Date();
             log.info("缁撴潫杩涚墖浠诲姟璁惧涓簕}锛岀粨鏉熸椂闂翠负锛歿}锛屽叡鑰楁椂锛歿}ms", deviceId, endDate, endDate.getTime() - startDate.getTime());
             return Boolean.FALSE;
@@ -380,9 +392,9 @@
 
     private boolean outTask(S7DataWL task, int deviceId, int cellFlag) {
         Date startDate = new Date();
-        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdOut()));
+        GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getGlassId, task.getGlassIdIn()));
         if (null == glassInfo && StringUtils.isNotBlank(task.getGlassIdIn())) {
-            log.info("杩涚墖鐜荤拑淇℃伅涓嶅瓨鍦紝鐜荤拑id:{}", task.getGlassIdIn());
+            log.info("鐩撮�氱幓鐠冧俊鎭笉瀛樺湪锛岀幓鐠僫d:{}", task.getGlassIdIn());
             ProductAlarmInfo alarmInfo = new ProductAlarmInfo();
             alarmInfo.setState(Const.LOAD_RAW_GLASS_NEW);
             alarmInfo.setAlarmModule(ALARM_MODULE);
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingGlassCountDTO.java b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingGlassCountDTO.java
index 18316aa..d5d0f7a 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingGlassCountDTO.java
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/java/com/mes/bigstorage/entity/dto/TemperingGlassCountDTO.java
@@ -15,6 +15,10 @@
      */
     private String engineerId;
     /**
+     * 宸ョ▼鍙�
+     */
+    private String engineerName;
+    /**
      * 閽㈠寲鐗堝浘id
      */
     private Integer temperingLayoutId;
diff --git a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
index b87c897..4c2d064 100644
--- a/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
+++ b/hangzhoumesParent/moduleService/CacheVerticalGlassModule/src/main/resources/mapper/BigStorageCageDetailsMapper.xml
@@ -32,6 +32,7 @@
 
     <resultMap id="temperingGlassCount" type="com.mes.bigstorage.entity.dto.TemperingGlassCountDTO">
         <result column="engineer_id" property="engineerId"/>
+        <result column="engineer_name" property="engineerName"/>
         <result column="tempering_layout_id" property="temperingLayoutId"/>
         <result column="films_id" property="filmsId"/>
         <result column="thickness" property="thickness"/>
@@ -166,9 +167,9 @@
 
     <select id="selectTemperingGlassCount" resultMap="temperingGlassCount">
         with glass_info_temp as (
-        select engineer_id, tempering_layout_id, count(*) as total_count
-        from glass_info
-        group by engineer_id, tempering_layout_id
+        select t.engineer_id,t1.engineer_name, t.tempering_layout_id, count(*) as total_count
+        from glass_info t inner join engineering t1 on t.engineer_id=t1.engineer_id
+        group by t.engineer_id, t.tempering_layout_id
         ),
         big_details_temp as (
         select engineer_id, tempering_layout_id, count(*) as real_count, films_id, thickness
@@ -191,6 +192,7 @@
         ),
         result as (
         select t.engineer_id,
+        t1.engineer_name,
         t.tempering_layout_id,
         t.films_id,
         t.thickness,
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 febdd48..d179ad1 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
@@ -61,12 +61,19 @@
 //        return Result.success(lackDetailsList);
 //    }
     @ApiOperation("鏌ヨ鎸囧畾娴佺▼鍗$殑缂虹墖璇︽儏")
-    @PostMapping("/queryLackByFlowCard")
+    @PostMapping("/queryLackByFlowCardByERP")
     public Result<Map<Integer,List<LackDetailsDTO>>> queryLackByFlowCard(String flowCardId) {
         Map<Integer,List<LackDetailsDTO>> lackDetailsMap = hollowGlassRelationInfoService.queryLackByFlowCard(flowCardId);
         return Result.success(lackDetailsMap);
     }
 
+    @ApiOperation("鏌ヨ鎸囧畾娴佺▼鍗$殑缂虹墖璇︽儏")
+    @PostMapping("/queryLackByFlowCard")
+    public Result<Map<Integer,List<LackDetailsDTO>>> queryLackByFlowCardByERP(String flowCardId) {
+        Map<Integer,List<LackDetailsDTO>> lackDetailsMap = hollowGlassRelationInfoService.queryLackByFlowCardByERP(flowCardId);
+        return Result.success(lackDetailsMap);
+    }
+
     @ApiOperation("涓┖缂虹墖鐖嗙牬绗兼姤鐮存崯")
     @PostMapping("/hollowBigStorageGlassDamage")
     public Result<Boolean> hollowBigStorageGlassDamage(@RequestBody DamageRequest request) {
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 5690d91..6a435d2 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
@@ -21,11 +21,11 @@
     /**
      * 娴佺▼鍗�
      */
-    private int layer;
+    private Integer layer;
     /**
      * 娴佺▼鍗�
      */
-    private int glassType;
+    private Integer glassType;
     /**
      * 鑶滅郴
      */
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 d35c61d..f523cf4 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
@@ -4,6 +4,7 @@
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.hollow.entity.HollowGlassRelationInfo;
 import com.mes.hollow.entity.dto.LackDetailsDTO;
+import com.mes.order.entity.ProcessCardReport;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.cache.annotation.Cacheable;
 
@@ -29,5 +30,7 @@
     List<LackDetailsDTO> queryLackByFlowCard(@Param("flowCardId")  String flowCardId);
 
     List<LackDetailsDTO> queryLackGlassByFlowCard(@Param("flowCardId") String flowCardId, @Param("orderSort") Integer orderSort, @Param("layer") Integer layer);
+
+    List<LackDetailsDTO> queryLackByFlowCardByERP(@Param("flowCardIdList") List<ProcessCardReport> flowCardIdList);
 }
 
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 93fd9c3..b3780cf 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
@@ -43,6 +43,8 @@
 
     Map<Integer,List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId);
 
+    Map<Integer,List<LackDetailsDTO>> queryLackByFlowCardByERP(String flowCardId);
+
 
     /**
      * 鎸夌収鍘氬害鑾峰彇鐜荤拑闂撮殭
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 3d508b1..591ee47 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
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.common.config.Const;
 import com.mes.common.config.ConstSysConfig;
+import com.mes.damage.entity.Damage;
 import com.mes.damage.entity.request.DamageRequest;
 import com.mes.damage.service.DamageService;
 import com.mes.glassinfo.entity.GlassInfo;
@@ -27,6 +28,7 @@
 import com.mes.hollow.service.HollowGlassRelationInfoService;
 import com.mes.order.entity.HollowGlassDetailsDTO;
 import com.mes.order.entity.OrderDetailsDTO;
+import com.mes.order.entity.ProcessCardReport;
 import com.mes.order.service.OrdersService;
 import com.mes.sysconfig.service.SysConfigService;
 import lombok.extern.slf4j.Slf4j;
@@ -434,6 +436,88 @@
     }
 
     @Override
+    public Map<Integer, List<LackDetailsDTO>> queryLackByFlowCardByERP(String flowCardId) {
+        List<ProcessCardReport> processCardReports = ordersService.queryLackByERP(flowCardId);
+        if (CollectionUtil.isEmpty(processCardReports)) {
+            return null;
+        }
+        List<HollowBigStorageCageDetails> hollowBigStorageCageDetails = hollowBigStorageCageDetailsService.list(
+                new LambdaQueryWrapper<HollowBigStorageCageDetails>()
+                        .eq(HollowBigStorageCageDetails::getFlowCardId, flowCardId)
+                        .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL)
+        );
+        // 1. 缁熻姣忎釜 (glassType, layer) 缁勫悎鐨勫嚭鐜版鏁�
+        Map<String, Long> typeLayerCountMap = hollowBigStorageCageDetails.stream()
+                .map(detail -> detail.getGlassType() + "_" + detail.getLayer())
+                .collect(Collectors.groupingBy(
+                        key -> key,  // 浠ュ鍚堥敭涓哄垎缁勪緷鎹�
+                        Collectors.counting()  // 缁熻姣忎釜閿殑鍑虹幇娆℃暟
+                ));
+        // 2. 閬嶅巻骞舵寜娆℃暟鍑� quantity锛堥伩鍏嶈礋鏁帮級
+        processCardReports.forEach(report -> {
+            String reportPair = report.getOrderNumber() + "_" + report.getTechnologyNumber();
+            Long count = typeLayerCountMap.getOrDefault(reportPair, 0L);
+            if (count > 0) {
+                int newQuantity = Math.max(0, report.getLackQuantity() - count.intValue());
+                report.setLackQuantity(newQuantity);
+            }
+        });
+        List<LackDetailsDTO> detailsDTOS = baseMapper.queryLackByFlowCardByERP(processCardReports);
+        List<Damage> damages = damageService.queryUnTempByFlowCardId(flowCardId);
+// 1. 鎸�(orderNumber+layer)鍒嗙粍锛屽悓鏃剁紦瀛楧TO鐨勫叾浠栧瓧娈典綔涓烘ā鏉�
+        Map<String, List<Damage>> damageMap = new HashMap<>();
+        Map<String, LackDetailsDTO> dtoTemplateMap = new HashMap<>(); // 瀛樺偍鍒嗙粍瀵瑰簲鐨凞TO妯℃澘
+
+// 1.1 鍒濆鍖杁amage鍒嗙粍鍜孌TO妯℃澘
+        damages.forEach(damage -> {
+            if (damage.getOrderNumber() == null || damage.getTechnologyNumber() == null) {
+                return;
+            }
+            String key = damage.getOrderNumber() + "_" + damage.getTechnologyNumber();
+            damageMap.computeIfAbsent(key, k -> new ArrayList<>()).add(damage);
+        });
+
+        detailsDTOS.forEach(dto -> {
+            if (dto.getGlassType() == null || dto.getLayer() == null) {
+                return;
+            }
+            String key = dto.getGlassType() + "_" + dto.getLayer();
+            // 缂撳瓨绗竴涓狣TO浣滀负妯℃澘锛堝寘鍚叾浠栧瓧娈靛�硷級
+            dtoTemplateMap.putIfAbsent(key, dto);
+        });
+
+// 2. 鍖归厤骞舵洿鏂板師濮婦TO
+        detailsDTOS.forEach(dto -> {
+            if (dto.getGlassType() == null || dto.getLayer() == null) {
+                return;
+            }
+            String key = dto.getGlassType() + "_" + dto.getLayer();
+            List<Damage> damagess = damageMap.get(key);
+            if (damagess != null && !damagess.isEmpty()) {
+                Damage damage = damagess.remove(0);
+                dto.setGlassId(damage.getGlassId());
+                dto.setWorkingProcedure(damage.getWorkingProcedure());
+            }
+        });
+
+// 3. 澶勭悊鍓╀綑damage锛氬鐢ㄥ悓缁凞TO妯℃澘鐨勫叾浠栧瓧娈�
+        damageMap.values().forEach(damagess -> damagess.forEach(damage -> {
+            String key = damage.getOrderNumber() + "_" + damage.getTechnologyNumber();
+            LackDetailsDTO template = dtoTemplateMap.get(key); // 鑾峰彇鍚岀粍妯℃澘
+            if (template == null) return; // 鏃犳ā鏉垮垯璺宠繃锛堢悊璁轰笂涓嶄細鍑虹幇锛�
+
+            LackDetailsDTO newDto = new LackDetailsDTO();
+            // 1. 澶嶅埗妯℃澘涓殑鍏朵粬瀛楁锛堥櫎浜唃lassId鍜寃orkproduce锛�
+            BeanUtils.copyProperties(template, newDto); // 鐢⊿pring鐨勫伐鍏风被澶嶅埗灞炴��
+            // 2. 瑕嗙洊glassId鍜寃orkproduce涓哄綋鍓峝amage鐨勫��
+            newDto.setGlassId(damage.getGlassId());
+            newDto.setWorkingProcedure("鏈煡");
+            detailsDTOS.add(newDto);
+        }));
+        return detailsDTOS.stream().collect(Collectors.groupingBy(item -> item.getLayer()));
+    }
+
+    @Override
     public Integer getGlassGapByThickness(Double thickness) {
         int sysKey = 0;
         if (thickness >= 12) {
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcHollowRemoveTask.java b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcHollowRemoveTask.java
index 78e634c..c79c486 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcHollowRemoveTask.java
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/job/OpcHollowRemoveTask.java
@@ -1,10 +1,6 @@
 package com.mes.job;
 
-import com.github.xingshuangs.iot.common.buff.ByteReadBuff;
-import com.github.xingshuangs.iot.common.buff.EByteBuffFormat;
 import com.github.xingshuangs.iot.protocol.modbus.service.ModbusTcp;
-import com.github.xingshuangs.iot.utils.ByteUtil;
-import com.kangaroohy.milo.model.ReadWriteEntity;
 import com.kangaroohy.milo.service.MiloService;
 import com.mes.hollow.entity.vo.HollowGlassFormulaVO;
 import com.mes.hollow.service.HollowFormulaDetailsService;
@@ -16,9 +12,6 @@
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * @author SNG-015
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 7a890c0..0fb1f76 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
@@ -477,6 +477,20 @@
         }
 
         HollowGlassOutRelationInfo hollowGlassOutRelationInfo = null;
+
+        //鐩撮�氬彴鏈夌幓鐠冩椂灏嗕腑绌哄嚭鐗囬槦鍒椾腑瀵瑰簲鐜荤拑id鐨勬牸瀛愬彿鏇挎崲鏈洿閫氬彴
+        HollowBigStorageCageDetails details = hollowBigStorageCageDetailsService.getOne(new LambdaQueryWrapper<HollowBigStorageCageDetails>()
+                .eq(HollowBigStorageCageDetails::getSlot, THROUGH_SLOT)
+                .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).last("limit 1"));
+        if (details != null) {
+            hollowGlassOutRelationInfo = hollowGlassOutRelationInfoService.getOne(
+                    new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
+                            .eq(HollowGlassOutRelationInfo::getFlowCardId, details.getFlowCardId())
+                            .eq(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_START)
+                            .orderByAsc(HollowGlassOutRelationInfo::getId)
+                            .last("limit 1")
+            );
+        }
         int cell = -1;
         for (Integer i : resultList) {
             if (null == hollowGlassOutRelationInfo) {
@@ -518,14 +532,14 @@
                     .eq(HollowGlassQueueInfo::getState, Const.TEMPERING_NEW)
                     .eq(HollowGlassQueueInfo::getRelationId, hollowGlassOutRelationInfo.getId())
                     .orderByAsc(HollowGlassQueueInfo::getHollowSequence));
-            if (CollectionUtil.isNotEmpty(unFinishHollowQueueList)) {
+            //鎸夌収浠诲姟淇℃伅杩囨护绛涢�夐渶瑕佸嚭鐗囧強璋冨害鐨勭幓鐠冮槦鍒�
+            List<HollowGlassQueueInfo> resultQueue = computeOutHollowQueue(unFinishHollowQueueList, hollowGlassOutRelationInfo);
+            log.info("涓┖鍑虹墖浠诲姟璁$畻鍚庣殑鍑虹墖闃熷垪涓猴細{}", resultQueue);
+            if (CollectionUtil.isNotEmpty(resultQueue)) {
                 //鐩撮�氬彴鏈夌幓鐠冩椂灏嗕腑绌哄嚭鐗囬槦鍒椾腑瀵瑰簲鐜荤拑id鐨勬牸瀛愬彿鏇挎崲鏈洿閫氬彴
-                HollowBigStorageCageDetails details = hollowBigStorageCageDetailsService.getOne(new LambdaQueryWrapper<HollowBigStorageCageDetails>()
-                        .eq(HollowBigStorageCageDetails::getSlot, THROUGH_SLOT)
-                        .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL).last("limit 1"));
                 log.info("涓┖澶х悊鐗囩洿閫氬彴鐜荤拑淇℃伅{}", details);
                 if (details != null) {
-                    unFinishHollowQueueList.stream().forEach(e -> {
+                    resultQueue.stream().forEach(e -> {
                         if (e.getGlassId().equals(details.getGlassId())) {
                             e.setSlot(THROUGH_SLOT);
                             e.setDeviceId(0);
@@ -533,11 +547,9 @@
                         }
                     });
                 }
-
-                List<HollowGlassQueueInfo> infoList = unFinishHollowQueueList.stream().filter(e -> !(e.getSlot() >= 500 && e.getSlot() < 900 && e.getIsPair() != 1)).collect(Collectors.toList());
-                log.info("鏈夋鍦ㄥ嚭鐗囩殑涓┖浠诲姟");
-                Integer isPair = infoList.get(0).getIsPair();
-                hollowOutGlassByIsPair(infoList, hollowGlassOutRelationInfo.getCell(), isPair, hollowGlassOutRelationInfo.getTotalLayer(), hollowGlassOutRelationInfo.getIsForce());
+                log.info("鏈夋鍦ㄥ嚭鐗囩殑涓┖浠诲姟:{}", hollowGlassOutRelationInfo);
+                Integer isPair = resultQueue.get(0).getIsPair();
+                hollowOutGlassByIsPair(resultQueue, hollowGlassOutRelationInfo.getCell(), isPair, hollowGlassOutRelationInfo.getTotalLayer(), hollowGlassOutRelationInfo.getIsForce());
                 Date endDate = new Date();
                 log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
                 return;
@@ -587,6 +599,7 @@
         log.info("澶х悊鐗囩鍑虹墖浠诲姟缁撴潫鏃堕棿锛歿}锛屽叡鑰楁椂锛歿}ms,缁撴潫鎵爜浠诲姟", endDate, endDate.getTime() - startDate.getTime());
         return;
     }
+
 
     @Scheduled(fixedDelay = 1000)
     public void finishInBigStorageTask() throws Exception {
@@ -1065,6 +1078,36 @@
         log.info("鍑虹墖浠诲姟-鏃犲姩浣滄墽琛屽畬鎴�");
     }
 
+    private List<HollowGlassQueueInfo> computeOutHollowQueue(List<HollowGlassQueueInfo> queueInfoList, HollowGlassOutRelationInfo hollowGlassOutRelationInfo) {
+        if (CollectionUtil.isNotEmpty(queueInfoList)) {
+            return new ArrayList<>();
+        }
+        //浠诲姟涓哄己鍒讹紝鍙洿鎺ヨ繑鍥炲師鏈夌殑闃熷垪
+        if (hollowGlassOutRelationInfo.getIsForce() == 1) {
+            return queueInfoList;
+        }
+        log.info("棰嗗彇浠诲姟锛歿}鐨勯槦鍒楋細{}", hollowGlassOutRelationInfo, queueInfoList);
+        // 鎸夋牸瀛愬彿鍒嗙粍
+        Map<Integer, List<HollowGlassQueueInfo>> gridGroups = queueInfoList.stream()
+                .collect(Collectors.groupingBy(HollowGlassQueueInfo::getSlot));
+        List<HollowGlassQueueInfo> resultQueue = new ArrayList<>();
+
+        for (List<HollowGlassQueueInfo> items : gridGroups.values()) {
+            // 鎯呭喌1锛氭牸瀛愬唴鍙湁涓�涓暟鎹笖鏈厤瀵� - 杩囨护鎺�
+            if (items.size() == 1 && 0 == items.get(0).getSlot()) {
+                continue;
+            }
+
+            // 鎯呭喌2锛氭牸瀛愬唴鍏ㄩ儴涓烘湭閰嶅鐨勬暟鎹� - 杩囨护鎺�
+            boolean allUnpaired = items.stream().noneMatch(e -> e.getIsPair() == 1);
+            if (allUnpaired) {
+                continue;
+            }
+            // 鍚﹀垯淇濈暀杩欎釜鏍煎瓙鍐呯殑鎵�鏈夋暟鎹�
+            resultQueue.addAll(items);
+        }
+        return resultQueue;
+    }
 
     private <T extends HollowBigStorageCageBaseInfo> Boolean hollowOutGlassByIsPair(List<T> list,
                                                                                     int targetSlot, int isPair, int totalLayer, int isForce) throws Exception {
diff --git a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
index bdb9005..4d66e4d 100644
--- a/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
+++ b/hangzhoumesParent/moduleService/hollowGlassModule/src/main/resources/mapper/HollowGlassRelationInfoMapper.xml
@@ -72,50 +72,47 @@
              detail_temp AS (
                  SELECT t.*
                  FROM glass_temp t
-                 WHERE NOT EXISTS (
+                 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)
+                           AND t1.state NOT IN (8, 9)
                      )
              ),
              damage_latest AS (
-                 SELECT
-                     dr.glass_id,
-                     dr.type,
-                     dr.status
+                 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
+                          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_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 (8,9) AND t1.status = 1 THEN t.glass_id END) as damage_count
+                 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 (8, 9) 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
+                 GROUP BY t.flow_card_id,
+                          t.layer,
+                          t.glass_type,
+                          t.thickness,
+                          t.filmsId,
+                          t.width,
+                          t.height
              )
         SELECT *
         FROM result_temp
@@ -137,7 +134,7 @@
            , 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)
+                     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 (
@@ -164,6 +161,37 @@
         select *
         from damage_latest
     </select>
+    <select id="queryLackByFlowCardByERP" resultType="com.mes.hollow.entity.dto.LackDetailsDTO">
+        WITH RECURSIVE nums(n) AS (
+        SELECT 1
+        UNION ALL
+        SELECT n + 1 FROM nums WHERE n &lt; (SELECT MAX(quantity) FROM (
+        <foreach collection="flowCardIdList" item="item" separator="UNION ALL">
+            SELECT #{item.lackQuantity} AS quantity
+        </foreach>
+        ) t)
+        )
+        <foreach collection="flowCardIdList" item="item" separator="UNION ALL">
+            SELECT t1.*
+            FROM (
+            SELECT
+            g.flow_card_id AS flowCardId,
+            g.layer AS layer,
+            g.glass_type AS glassType,
+            g.filmsid AS filmsId,
+            g.width AS width,
+            g.height AS height,
+            g.thickness AS thickness
+            FROM glass_info g
+            WHERE g.flow_card_id = #{item.processId}
+            AND g.layer = #{item.technologyNumber}
+            AND g.glass_type = #{item.orderNumber}
+            LIMIT 1
+            ) t1
+            CROSS JOIN nums
+            WHERE nums.n &lt;= #{item.lackQuantity}
+        </foreach>
+    </select>
 
 
     <update id="clearDirtyFlowCardData">

--
Gitblit v1.8.0