From 97789ba474555471e0347928e148f5971ad4285a Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期一, 15 十二月 2025 09:49:33 +0800
Subject: [PATCH] 1、 fixbug:中空创建任务查询异常 2、中空线关闭预先送一车逻辑

---
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java |  286 ++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 240 insertions(+), 46 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 5b12e1a..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,9 @@
 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;
 import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.hollow.entity.HollowBigStorageCage;
@@ -15,7 +18,6 @@
 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.HollowGlassDetailsDTO;
 import com.mes.hollow.entity.dto.LackDetailsDTO;
 import com.mes.hollow.entity.vo.HollowAllFlowCardVO;
 import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
@@ -24,16 +26,21 @@
 import com.mes.hollow.service.HollowBigStorageCageService;
 import com.mes.hollow.service.HollowGlassOutRelationInfoService;
 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;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.math.BigInteger;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -58,6 +65,10 @@
     HollowBigStorageCageDetailsService hollowBigStorageCageDetailsService;
     @Resource
     SysConfigService sysConfigService;
+    @Resource
+    DamageService damageService;
+    @Resource
+    OrdersService ordersService;
 //    @Value("${mes.slotWidth}")
 //    private Integer slotWidth;
 //    @Value("${mes.glassGap}")
@@ -67,12 +78,12 @@
 //    private Integer outCarMaxSize;
 
     @Override
-    public HollowBigStorageDTO queryHollowTargetSlot(String flowCardId, double width, double height, int totalLayer, int layer) {
+    public HollowBigStorageDTO queryHollowTargetSlot(String flowCardId, Integer glassType, double width, double height, int totalLayer, int layer) {
+        log.info("鐜荤拑娴佺▼鍗★細{}锛屽簭鍙凤細{}锛屾�诲眰鏁帮細{}锛屽眰鏁帮細{}", flowCardId, glassType, totalLayer, layer);
         //鎸夌収鐜荤拑淇℃伅鑾峰彇鍏崇郴琛ㄤ腑瀵瑰簲鐨勫ぇ鐞嗙墖绗兼牸瀛愬彿
         HollowGlassRelationInfo relationInfoOne = hollowGlassRelationInfoService.getOne(new LambdaQueryWrapper<HollowGlassRelationInfo>()
                 .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId)
-                .eq(HollowGlassRelationInfo::getWidth, width)
-                .eq(HollowGlassRelationInfo::getHeight, height)
+                .eq(HollowGlassRelationInfo::getOrderSort, glassType)
                 .eq(HollowGlassRelationInfo::getTotalLayer, totalLayer)
                 .eq(HollowGlassRelationInfo::getLayer, layer)
                 .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_NEW)
@@ -94,8 +105,7 @@
             //铏氭嫙浣嶇疆琛ㄦ病鏈夋湰宸ョ▼涓嬬殑鎵�鏈夌幓鐠冭櫄鎷熶俊鎭紝鎸夌収鐜荤拑id鐢熸垚鏈伐绋嬩笅鎵�鏈夌幓鐠冪殑铏氭嫙淇℃伅
             relationInfoOne = this.getOne(new LambdaQueryWrapper<HollowGlassRelationInfo>()
                     .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId)
-                    .eq(HollowGlassRelationInfo::getWidth, width)
-                    .eq(HollowGlassRelationInfo::getHeight, height)
+                    .eq(HollowGlassRelationInfo::getOrderSort, glassType)
                     .eq(HollowGlassRelationInfo::getTotalLayer, totalLayer)
                     .eq(HollowGlassRelationInfo::getLayer, layer)
                     .eq(HollowGlassRelationInfo::getState, Const.HOLLOW_RELATION_NEW)
@@ -103,11 +113,27 @@
                     .last("limit 1")
             );
         }
+        if (null == relationInfoOne) {
+            throw new RuntimeException("鐩稿叧娴佺▼鍗℃湭鎵惧埌瀵瑰簲鐨勭粍鍙蜂俊鎭紝鐜荤拑娴佺▼鍗★細" + flowCardId + "锛屽簭鍙凤細" + glassType + "锛屾�诲眰鏁帮細" + totalLayer + "锛屽眰鏁帮細" + layer);
+        }
+        Integer slotMaxHeight = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_MAX_HEIGHT);
         Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH);
+        HollowBigStorageCage storageCage = null;
+        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, 6)
+                    .orderByAsc(HollowBigStorageCage::getMaxThickness).last("limit 1"));
+            HollowBigStorageDTO storageDTO = new HollowBigStorageDTO();
+            BeanUtils.copyProperties(storageCage, storageDTO);
+            BeanUtils.copyProperties(relationInfoOne, storageDTO);
+            return storageDTO;
+        }
+
         //璇︽儏琛ㄥ唴鑾峰彇鏈粍鏄惁宸茬粡鏈夌幓鐠冨湪绗煎瓙鍐咃紙0琛ㄧず鎻愬墠鍗犵敤锛�
         int taskCount = hollowGlassOutRelationInfoService.count(new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
                 .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId));
-        HollowBigStorageCage storageCage = null;
+
         //濡傛灉涓嶅瓨鍦ㄥ垯閫夋嫨绗煎唴鏈敤鐨勬柊鏍煎瓙
         if (taskCount > 0) {
             storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>()
@@ -203,13 +229,13 @@
             return;
         }
         //鎸夌収娴佺▼鍗¤幏鍙栨湰娴佺▼鍗℃渶鍚庝竴灞傛垨绗竴娆$殑鐜荤拑鏁版嵁
-        List<HollowGlassDetailsDTO> glassDetailsDTOS = this.baseMapper.queryFlowCardIdMaxLayerGlassInfo(flowCardId, totalLayer);
+        List<HollowGlassDetailsDTO> glassDetailsDTOS = ordersService.queryFlowCardIdMaxLayerGlassInfo(flowCardId, totalLayer);
         if (CollectionUtil.isEmpty(glassDetailsDTOS)) {
             log.info("褰撳墠娴佺▼鍗℃渶澶栧眰鏁版嵁鏈壘鍒帮紝璇峰湪erp纭鏁版嵁鏃犺锛屾祦绋嬪崱锛歿}锛屾�诲眰鏁皗}", flowCardId, totalLayer);
             return;
         }
         if (totalLayer != layer) {
-            glassDetailsDTOS = this.baseMapper.queryFlowCardIdLayerGlassInfo(flowCardId, totalLayer, layer);
+            glassDetailsDTOS = ordersService.queryFlowCardIdLayerGlassInfo(flowCardId, totalLayer, layer);
         }
         if (CollectionUtil.isEmpty(glassDetailsDTOS)) {
             log.info("褰撳墠娴佺▼鍗℃渶澶栧眰鏁版嵁鏈壘鍒帮紝璇峰湪erp纭鏁版嵁鏃犺锛屾祦绋嬪崱锛歿}锛屾�诲眰鏁皗},灞傛暟{}", flowCardId, totalLayer, layer);
@@ -250,7 +276,8 @@
         //鏂瑰紡浜岋細灏嗙幓鐠冩寜娴佺▼鍗°�佸昂瀵搞�佺増鍥俱�佺増搴� 锛屼紭鍏堝皢鏍煎瓙鍏ㄩ儴琛ュ叏鍚� 渚濇璁$畻鍚庨潰鐨勬牸瀛愬彿
 
         Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH);
-        Integer glassGap = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_GLASS_GAP);
+//        Integer glassGap = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_GLASS_GAP);
+        Integer glassGap = getGlassGapByThickness(glassInfo.getThickness());
         Integer outCarMaxSize = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_OUT_CAR_SIZE);
         List<HollowGlassRelationInfo> relationInfoList = new ArrayList();
         List<List<HollowGlassRelationInfo>> tempHollowList = new ArrayList<>();
@@ -293,43 +320,55 @@
         for (List<HollowGlassRelationInfo> item : tempHollowList) {
             relationInfoList.addAll(item);
         }
-        log.info("鍒嗛厤瀹屾瘯");
-        this.saveBatch(relationInfoList);
+        log.info("鍒嗛厤瀹屾瘯:{}", relationInfoList);
+        try {
+            this.saveBatch(relationInfoList);
+        } catch (Exception e) {
+            log.error("淇濆瓨澶辫触:{}", e);
+        }
     }
 
     @Override
     public List<HollowAllFlowCardVO> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query) {
-        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)
-        );
+        Date startDate = new Date();
+        log.info("寮�濮嬫煡璇腑绌烘祦绋嬪崱浠诲姟淇℃伅锛屽紑濮嬫椂闂磠}", startDate);
+        List<FlowCardGlassInfoDTO> detailsList = hollowBigStorageCageDetailsService.queryHollowAllFlowCard(query);
+
         if (CollectionUtil.isEmpty(detailsList)) {
             log.info("绗煎唴鏃犵幓鐠�");
             return new ArrayList<>();
         }
-        Map<String, List<HollowBigStorageCageDetails>> listMap = detailsList.stream().collect(Collectors.groupingBy(HollowBigStorageCageDetails::getFlowCardId));
+        Date middleDate = new Date();
+        log.info("涓┖鐞嗙墖绗艰鎯呮暟鎹凡鏌ヨ瀹屾瘯锛岃�楁椂:{}ms", middleDate.getTime() - startDate.getTime());
+        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);
-            hollowAllFlowCardVO.setFlowCardId(e);
-            if (cageDetails.getHollowSequence() == 0) {
-                hollowAllFlowCardVO.setIsThroughSlot(Boolean.TRUE);
-            } else {
-                hollowAllFlowCardVO.setIsThroughSlot(Boolean.FALSE);
-            }
+            FlowCardGlassInfoDTO cageDetails = v.get(0);
             //鎸夌収娴佺▼鍗¤幏鍙栧搴旂殑浜у搧鍚嶇О
-            String productName = baseMapper.queryProductNameByFlowCardId(cageDetails.getFlowCardId());
-            hollowAllFlowCardVO.setProductName(productName);
-            List<FlowCardGlassInfoDTO> flowCardInfoList = hollowBigStorageCageDetailsService.hollowIsAll(e, cageDetails.getTotalLayer(), Boolean.FALSE);
-            hollowAllFlowCardVO.setFlowCardGlassInfoDTOList(flowCardInfoList);
-            resultList.add(hollowAllFlowCardVO);
+            OrderDetailsDTO orderDetails = this.queryProductNameByFlowCardId(cageDetails.getFlowCardId(), query.getProductName(), query.getCustomerName());
+            if (null != orderDetails) {
+                BeanUtils.copyProperties(orderDetails, hollowAllFlowCardVO);
+                hollowAllFlowCardVO.setFlowCardId(e);
+                if (cageDetails.getHollowSequence() == 0) {
+                    hollowAllFlowCardVO.setIsThroughSlot(Boolean.TRUE);
+                } else {
+                    hollowAllFlowCardVO.setIsThroughSlot(Boolean.FALSE);
+                }
+                hollowAllFlowCardVO.setFlowCardGlassInfoDTOList(v);
+                pairTotalCount.addAndGet(cageDetails.getPairCount());
+                resultList.add(hollowAllFlowCardVO);
+            }
         });
+        Date endDate = new Date();
+        log.info("瀹㈡埛淇℃伅鏁版嵁宸叉煡璇㈠畬姣曪紝鑰楁椂:{}ms锛屾�昏鑰楁椂锛歿}ms", endDate.getTime() - middleDate.getTime(), endDate.getTime() - startDate.getTime());
+        if (CollectionUtil.isEmpty(resultList)) {
+            return new ArrayList<>();
+        }
+        sortFlowCardIdList(resultList);
+        resultList.get(0).setPairTotalCount(pairTotalCount.get());
         return resultList;
-//        return dtos.stream().collect(Collectors.groupingBy(e -> e.getFlowCardId() + ":" + e.getProductName()));
     }
 
     @Override
@@ -380,21 +419,176 @@
     }
 
     @Override
-    public Map<Integer, List<LackDetailsDTO>> queryLackByFlowCard(String flowCardId) {
-        List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryLackByFlowCard(flowCardId);
-        Map<Integer, List<LackDetailsDTO>> listMap = lackDetailsList.stream().collect(Collectors.groupingBy(LackDetailsDTO::getLayer));
-        return listMap;
+    public List<LackDetailsDTO> queryAllLackByFlowCard() {
+        List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryAllLackByFlowCard();
+        return lackDetailsList;
     }
 
     @Override
     public int queryLayerByFlowCardId(String flowCardId) {
         return baseMapper.queryLayerByFlowCardId(flowCardId);
     }
-    //    @Override
-//    public List<LackDetailsDTO> queryLackByFlowCard(String flowCardId) {
-//        List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryLackByFlowCard(flowCardId);
-//        return lackDetailsList;
-//    }
+
+    @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
+    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) {
+            sysKey = ConstSysConfig.HOLLOW_GLASS_GAP_12;
+        } else if (thickness == 8) {
+            sysKey = ConstSysConfig.HOLLOW_GLASS_GAP_8;
+        } else if (thickness == 10) {
+            sysKey = ConstSysConfig.HOLLOW_GLASS_GAP_10;
+        } else {
+            sysKey = ConstSysConfig.HOLLOW_GLASS_GAP;
+        }
+        return sysConfigService.queryConfigValue(sysKey);
+    }
+
+    @Override
+    public Boolean hollowBigStorageGlassDamage(DamageRequest request) {
+        List<GlassInfo> glassInfos = glassInfoService.list(new LambdaQueryWrapper<GlassInfo>()
+                .eq(GlassInfo::getFlowCardId, request.getFlowCardId())
+                .eq(GlassInfo::getLayer, request.getLayer())
+                .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());
+        }
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public List<LackDetailsDTO> queryLackGlassByFlowCard(HollowBigStorageDetailsQueryVO query) {
+        return baseMapper.queryLackGlassByFlowCard(query.getFlowCardId(), query.getOrderSort(), query.getLayer());
+    }
+
+    @Override
+    public OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId, String productName, String customerName) {
+        OrderDetailsDTO dto = ordersService.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|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()) {
+                log.info("鑾峰彇鍒扮殑娴佺▼鍗′笉绗﹀悎鏍¢獙瑙勫垯:娴佺▼鍗锛歿}锛屾祦绋嬪崱B锛歿}", v1.getFlowCardId(), v2.getFlowCardId());
+                return -1;
+            }
+            // 鎻愬彇閮ㄥ垎
+            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);
+            if (cmp != 0) return cmp;
+            cmp = layer1.compareTo(layer2);
+            if (cmp != 0) return cmp;
+            return seq1.compareTo(seq2);
+        });
+    }
 
 }
 

--
Gitblit v1.8.0