From 4e3b8155722b66e25df3c6fd42cc586b68dea391 Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期五, 06 六月 2025 13:55:39 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassRelationInfoServiceImpl.java |  180 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 161 insertions(+), 19 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 89e1602..a26d6b8 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
@@ -6,30 +6,34 @@
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mes.common.config.Const;
+import com.mes.common.config.ConstSysConfig;
 import com.mes.glassinfo.entity.GlassInfo;
 import com.mes.glassinfo.service.GlassInfoService;
 import com.mes.hollow.entity.HollowBigStorageCage;
 import com.mes.hollow.entity.HollowBigStorageCageDetails;
+import com.mes.hollow.entity.HollowGlassOutRelationInfo;
 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.dto.*;
+import com.mes.hollow.entity.vo.HollowAllFlowCardVO;
 import com.mes.hollow.entity.vo.HollowBigStorageDetailsQueryVO;
 import com.mes.hollow.mapper.HollowGlassRelationInfoMapper;
 import com.mes.hollow.service.HollowBigStorageCageDetailsService;
 import com.mes.hollow.service.HollowBigStorageCageService;
+import com.mes.hollow.service.HollowGlassOutRelationInfoService;
 import com.mes.hollow.service.HollowGlassRelationInfoService;
+import com.mes.sysconfig.service.SysConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigInteger;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -49,14 +53,18 @@
     @Resource
     HollowGlassRelationInfoService hollowGlassRelationInfoService;
     @Resource
+    HollowGlassOutRelationInfoService hollowGlassOutRelationInfoService;
+    @Resource
     HollowBigStorageCageDetailsService hollowBigStorageCageDetailsService;
-    @Value("${mes.slotWidth}")
-    private Integer slotWidth;
-    @Value("${mes.glassGap}")
-    private Integer glassGap;
-
-    @Value("${mes.outCarMaxSize}")
-    private Integer outCarMaxSize;
+    @Resource
+    SysConfigService sysConfigService;
+//    @Value("${mes.slotWidth}")
+//    private Integer slotWidth;
+//    @Value("${mes.glassGap}")
+//    private Integer glassGap;
+//
+//    @Value("${mes.outCarMaxSize}")
+//    private Integer outCarMaxSize;
 
     @Override
     public HollowBigStorageDTO queryHollowTargetSlot(String flowCardId, double width, double height, int totalLayer, int layer) {
@@ -72,9 +80,18 @@
                 .last("limit 1")
         );
         if (relationInfoOne == null) {
+            //鏌ョ湅mes鏄惁鏈夊搴旂殑娴佺▼鍗′俊鎭�
+            int count = hollowGlassRelationInfoService.count(new LambdaQueryWrapper<HollowGlassRelationInfo>()
+                    .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId)
+                    .eq(HollowGlassRelationInfo::getLayer, layer));
+            if (count == 0) {
+                generateHollowGlassInfo(flowCardId, totalLayer, layer);
+            } else {
+                //姣旇緝鍏崇郴琛ㄥ強涓┖鐞嗙墖绗艰鎯呰〃鐨勬祦绋嬪崱鏁版嵁锛屽鐞嗚剰鏁版嵁锛氬皢涓嶅湪绗煎唴鐨勬祦绋嬪崱鍖归厤鏁版嵁鑱屼綅绌�
+                this.baseMapper.clearDirtyFlowCardData(flowCardId, layer);
+            }
             //鐞嗙墖绗煎叧绯昏〃涓病鏈夊搴旂殑鏁版嵁锛屾煡鐪嬬悊鐗囩铏氭嫙浣嶇疆琛ㄦ槸鍚︽湁鏈伐绋嬩笅鐨勬墍鏈夌幓鐠冭櫄鎷熶俊鎭�
             //铏氭嫙浣嶇疆琛ㄦ病鏈夋湰宸ョ▼涓嬬殑鎵�鏈夌幓鐠冭櫄鎷熶俊鎭紝鎸夌収鐜荤拑id鐢熸垚鏈伐绋嬩笅鎵�鏈夌幓鐠冪殑铏氭嫙淇℃伅
-            generateHollowGlassInfo(flowCardId, totalLayer, layer);
             relationInfoOne = this.getOne(new LambdaQueryWrapper<HollowGlassRelationInfo>()
                     .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId)
                     .eq(HollowGlassRelationInfo::getWidth, width)
@@ -86,14 +103,29 @@
                     .last("limit 1")
             );
         }
+        Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH);
         //璇︽儏琛ㄥ唴鑾峰彇鏈粍鏄惁宸茬粡鏈夌幓鐠冨湪绗煎瓙鍐咃紙0琛ㄧず鎻愬墠鍗犵敤锛�
+        int taskCount = hollowGlassOutRelationInfoService.count(new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
+                .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId));
+        HollowBigStorageCage storageCage = null;
+        //濡傛灉涓嶅瓨鍦ㄥ垯閫夋嫨绗煎唴鏈敤鐨勬柊鏍煎瓙
+        if (taskCount > 0) {
+            storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>()
+                    .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth)
+                    .le(HollowBigStorageCage::getMinThickness, relationInfoOne.getThickness())
+                    .ge(HollowBigStorageCage::getMaxThickness, relationInfoOne.getThickness())
+                    .orderByAsc(HollowBigStorageCage::getMaxThickness).last("limit 1"));
+            HollowBigStorageDTO storageDTO = new HollowBigStorageDTO();
+            BeanUtils.copyProperties(storageCage, storageDTO);
+            BeanUtils.copyProperties(relationInfoOne, storageDTO);
+            return storageDTO;
+        }       //璇︽儏琛ㄥ唴鑾峰彇鏈粍鏄惁宸茬粡鏈夌幓鐠冨湪绗煎瓙鍐咃紙0琛ㄧず鎻愬墠鍗犵敤锛�
         List<HollowBigStorageCageDetails> hollowDetailsList = hollowBigStorageCageDetailsService.list(new LambdaQueryWrapper<HollowBigStorageCageDetails>()
                 .eq(HollowBigStorageCageDetails::getFlowCardId, relationInfoOne.getFlowCardId())
                 .eq(HollowBigStorageCageDetails::getTotalLayer, totalLayer)
                 .eq(HollowBigStorageCageDetails::getLayer, layer)
                 .eq(HollowBigStorageCageDetails::getVirtualSlot, relationInfoOne.getVirtualSlot())
                 .in(HollowBigStorageCageDetails::getState, Const.GLASS_STATE_IN_ALL_ZERO));
-        HollowBigStorageCage storageCage = null;
         //濡傛灉涓嶅瓨鍦ㄥ垯閫夋嫨绗煎唴鏈敤鐨勬柊鏍煎瓙
         if (CollectionUtil.isEmpty(hollowDetailsList)) {
             storageCage = hollowBigStorageCageService.getOne(new LambdaQueryWrapper<HollowBigStorageCage>()
@@ -165,7 +197,7 @@
     public void generateHollowGlassInfo(String flowCardId, int totalLayer, int layer) {
 
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getFlowCardId, flowCardId)
-                .eq(GlassInfo::getLayer, layer).last("limit 1"));
+                .eq(GlassInfo::getLayer, layer).orderByDesc(GlassInfo::getId).last("limit 1"));
         if (null == glassInfo) {
             log.info("褰撳墠娴佺▼鍗′俊鎭负瀵煎叆mes绯荤粺娴佺▼鍗★細{}锛屽眰鏁皗}", flowCardId, layer);
             return;
@@ -216,6 +248,11 @@
 //        List<HollowBigStorageCage> hollowSlotList = HollowBigStorageCageService.list(new LambdaQueryWrapper<HollowBigStorageCage>()
 //                .eq(HollowBigStorageCage::getEnableState, Const.SLOT_ON).eq(HollowBigStorageCage::getRemainWidth, slotWidth));
         //鏂瑰紡浜岋細灏嗙幓鐠冩寜娴佺▼鍗°�佸昂瀵搞�佺増鍥俱�佺増搴� 锛屼紭鍏堝皢鏍煎瓙鍏ㄩ儴琛ュ叏鍚� 渚濇璁$畻鍚庨潰鐨勬牸瀛愬彿
+
+        Integer slotWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_SLOT_WIDTH);
+//        Integer glassGap = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_GLASS_GAP);
+        Integer glassGap = getGlassGapByThickness(tempGlassList.get(0).getThickness());
+        Integer outCarMaxSize = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_OUT_CAR_SIZE);
         List<HollowGlassRelationInfo> relationInfoList = new ArrayList();
         List<List<HollowGlassRelationInfo>> tempHollowList = new ArrayList<>();
         int slotNumber = 1;
@@ -262,7 +299,7 @@
     }
 
     @Override
-    public Map<String, List<FlowCardGlassInfoDTO>> queryHollowAllFlowCard(HollowBigStorageDetailsQueryVO query) {
+    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())
@@ -272,7 +309,44 @@
         );
         if (CollectionUtil.isEmpty(detailsList)) {
             log.info("绗煎唴鏃犵幓鐠�");
-            return new HashMap<>();
+            return new ArrayList<>();
+        }
+        Map<String, List<HollowBigStorageCageDetails>> listMap = detailsList.stream().collect(Collectors.groupingBy(HollowBigStorageCageDetails::getFlowCardId));
+        List<HollowAllFlowCardVO> resultList = new ArrayList<>();
+        listMap.forEach((e, v) -> {
+            HollowAllFlowCardVO hollowAllFlowCardVO = new HollowAllFlowCardVO();
+            HollowBigStorageCageDetails cageDetails = v.get(0);
+            //鎸夌収娴佺▼鍗¤幏鍙栧搴旂殑浜у搧鍚嶇О
+            OrderDetailsDTO orderDetails = baseMapper.queryProductNameByFlowCardId(cageDetails.getFlowCardId());
+            if (null != orderDetails) {
+                BeanUtils.copyProperties(orderDetails, hollowAllFlowCardVO);
+            }
+            hollowAllFlowCardVO.setFlowCardId(e);
+            if (cageDetails.getHollowSequence() == 0) {
+                hollowAllFlowCardVO.setIsThroughSlot(Boolean.TRUE);
+            } else {
+                hollowAllFlowCardVO.setIsThroughSlot(Boolean.FALSE);
+            }
+            List<FlowCardGlassInfoDTO> flowCardInfoList = hollowBigStorageCageDetailsService.hollowIsAll(e, cageDetails.getTotalLayer(), Boolean.FALSE);
+            hollowAllFlowCardVO.setFlowCardGlassInfoDTOList(flowCardInfoList);
+            resultList.add(hollowAllFlowCardVO);
+        });
+        sortFlowCardIdList(resultList);
+        return resultList;
+    }
+
+    @Override
+    public List<FlowCardGlassInfoDTO> queryHollowAllFlowCardSummary(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)
+        );
+        if (CollectionUtil.isEmpty(detailsList)) {
+            log.info("绗煎唴鏃犵幓鐠�");
+            return null;
         }
         Map<String, List<HollowBigStorageCageDetails>> listMap = detailsList.stream().collect(Collectors.groupingBy(HollowBigStorageCageDetails::getFlowCardId));
         List<FlowCardGlassInfoDTO> dtos = new ArrayList<>();
@@ -280,7 +354,32 @@
             HollowBigStorageCageDetails cageDetails = v.get(0);
             dtos.addAll(hollowBigStorageCageDetailsService.hollowIsAll(e, cageDetails.getTotalLayer(), Boolean.FALSE));
         });
-        return dtos.stream().collect(Collectors.groupingBy(FlowCardGlassInfoDTO::getFlowCardId));
+        Map<String, FlowCardGlassInfoDTO> result = dtos.stream()
+                .collect(Collectors.toMap(
+                        FlowCardGlassInfoDTO::getFlowCardId,
+                        dto -> {
+                            FlowCardGlassInfoDTO newDto = new FlowCardGlassInfoDTO();
+                            newDto.setFlowCardId(dto.getFlowCardId());
+                            newDto.setSumCount(dto.getSumCount());
+                            newDto.setPairCount(dto.getPairCount());
+                            newDto.setRealCount(dto.getRealCount());
+                            newDto.setLayer(dto.getLayer());
+                            newDto.setSlotCount(dto.getSlotCount());
+                            return newDto;
+                        },
+                        (dto1, dto2) -> {
+                            dto1.setRealCount(dto1.getRealCount() + dto2.getRealCount()); // 绱姞 realCount
+                            dto1.setLayer(Math.max(dto1.getLayer(), dto2.getLayer())); // 绱姞 鏈�澶у眰鏁�
+                            dto1.setSlotCount(dto1.getSlotCount() + dto2.getSlotCount());
+                            return dto1; // 杩斿洖鍚堝苟鍚庣殑瀵硅薄
+                        }
+                ));
+        List<FlowCardGlassInfoDTO> resultList = new ArrayList<>(result.values());
+        List<FlowCardGlassInfoDTO> sortedList = resultList.stream()
+                .sorted(Comparator.comparing(FlowCardGlassInfoDTO::getRealCount).reversed()  // 绗竴涓瓧娈靛�掑簭
+                        .thenComparing(FlowCardGlassInfoDTO::getSumCount, Comparator.reverseOrder()))  // 绗簩涓瓧娈靛�掑簭
+                .collect(Collectors.toList());
+        return sortedList;
     }
 
     @Override
@@ -294,11 +393,54 @@
     public int queryLayerByFlowCardId(String flowCardId) {
         return baseMapper.queryLayerByFlowCardId(flowCardId);
     }
+
+    @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 List<LackDetailsDTO> queryLackByFlowCard(String flowCardId) {
 //        List<LackDetailsDTO> lackDetailsList = this.baseMapper.queryLackByFlowCard(flowCardId);
 //        return lackDetailsList;
 //    }
 
+    private void sortFlowCardIdList(List<HollowAllFlowCardVO> list) {
+        Pattern pattern = Pattern.compile("^NG(\\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("鑾峰彇鍒扮殑娴佺▼鍗′笉绗﹀悎鏍¢獙瑙勫垯");
+            }
+
+            // 鎻愬彇閮ㄥ垎
+            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));
+
+            // 浼樺厛绾ф帓搴�
+            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