From 994b07344c976abcb33ff5eaecd685f6461be5ea Mon Sep 17 00:00:00 2001
From: ZengTao <2773468879@qq.com>
Date: 星期三, 17 十二月 2025 11:24:54 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java |  104 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 94 insertions(+), 10 deletions(-)

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 a7ef8c9..03ac794 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;
@@ -120,7 +122,7 @@
         if (Math.min(width, height) > slotMaxHeight) {
             storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>()
                     .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth)
-                    .eq(HollowBigStorageCage::getDeviceId, 5)
+                    .eq(HollowBigStorageCage::getDeviceId, 6)
                     .orderByAsc(HollowBigStorageCage::getMaxThickness).last("limit 1"));
             HollowBigStorageDTO storageDTO = new HollowBigStorageDTO();
             BeanUtils.copyProperties(storageCage, storageDTO);
@@ -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) {
@@ -479,23 +563,23 @@
 
 
     private void sortFlowCardIdList(List<HollowAllFlowCardVO> list) {
-        Pattern pattern = Pattern.compile("^NG(\\d+)([A-Za-z]+)(\\d+)$");
+        Pattern pattern = Pattern.compile("^(NG|R)(\\d+)([A-Za-z]+)(\\d+)$");
 
         list.sort((v1, v2) -> {
             Matcher m1 = pattern.matcher(v1.getFlowCardId());
             Matcher m2 = pattern.matcher(v2.getFlowCardId());
 
             if (!m1.find() || !m2.find()) {
-                throw new IllegalArgumentException("鑾峰彇鍒扮殑娴佺▼鍗′笉绗﹀悎鏍¢獙瑙勫垯");
+                log.info("鑾峰彇鍒扮殑娴佺▼鍗′笉绗﹀悎鏍¢獙瑙勫垯:娴佺▼鍗锛歿}锛屾祦绋嬪崱B锛歿}", v1.getFlowCardId(), v2.getFlowCardId());
+                return -1;
             }
-
             // 鎻愬彇閮ㄥ垎
-            BigInteger order1 = new BigInteger(m1.group(1));
-            BigInteger order2 = new BigInteger(m2.group(1));
-            String layer1 = m1.group(2);
-            String layer2 = m2.group(2);
-            BigInteger seq1 = new BigInteger(m1.group(3));
-            BigInteger seq2 = new BigInteger(m2.group(3));
+            BigInteger order1 = new BigInteger(m1.group(2));
+            BigInteger order2 = new BigInteger(m2.group(2));
+            String layer1 = m1.group(3);
+            String layer2 = m2.group(3);
+            BigInteger seq1 = new BigInteger(m1.group(4));
+            BigInteger seq2 = new BigInteger(m2.group(4));
 
             // 浼樺厛绾ф帓搴�
             int cmp = order1.compareTo(order2);

--
Gitblit v1.8.0