From 83f738105416c9b11e3b7c5246a0980e41b6650e Mon Sep 17 00:00:00 2001
From: zhoushihao <zsh19950802@163.com>
Date: 星期一, 13 十月 2025 16:59:48 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 hangzhoumesParent/moduleService/hollowGlassModule/src/main/java/com/mes/hollow/service/impl/HollowGlassOutRelationInfoServiceImpl.java |  186 ++++++++++++++++++++++++++++++++++++----------
 1 files changed, 144 insertions(+), 42 deletions(-)

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 5099eb5..92fd878 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
@@ -1,10 +1,13 @@
 package com.mes.hollow.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.smallbun.screw.core.util.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.controller.HollowBigStorageCageController;
@@ -12,6 +15,7 @@
 import com.mes.hollow.entity.HollowFormulaDetails;
 import com.mes.hollow.entity.HollowGlassOutRelationInfo;
 import com.mes.hollow.entity.dto.*;
+import com.mes.hollow.entity.request.HollowHistoryTaskRequest;
 import com.mes.hollow.entity.request.HollowTaskRequest;
 import com.mes.hollow.mapper.HollowGlassOutRelationInfoMapper;
 import com.mes.hollow.service.HollowBigStorageCageDetailsService;
@@ -20,6 +24,12 @@
 import com.mes.hollow.service.HollowGlassRelationInfoService;
 import com.mes.hollowqueue.entity.HollowGlassQueueInfo;
 import com.mes.hollowqueue.service.HollowGlassQueueInfoService;
+import com.mes.largenscreen.entity.PieChartVO;
+import com.mes.order.entity.HollowOrderDTO;
+import com.mes.order.entity.OrderDetailsDTO;
+import com.mes.order.service.OrdersService;
+import com.mes.sysconfig.service.SysConfigService;
+import com.mes.tools.DateUtil;
 import com.mes.utils.Blank;
 import com.mes.utils.RedisUtil;
 import freemarker.template.Configuration;
@@ -28,7 +38,9 @@
 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;
 
 import javax.annotation.Resource;
 import java.io.*;
@@ -56,18 +68,30 @@
     HollowFormulaDetailsService hollowFormulaDetailsService;
     @Resource
     HollowGlassRelationInfoService hollowGlassRelationInfoService;
+    @Resource
+    SysConfigService sysConfigService;
+    @Resource
+    OrdersService ordersService;
 
     @Resource
     RedisUtil redisUtil;
 
+//    @Value("${mes.glassGap}")
+//    private Integer glassGap;
+//
+//    @Value("${mes.carWidth}")
+//    private Integer carWidth;
+
     private static final int ID_RATIO = 10;
 
     @Override
+    @Transactional
     public HollowGlassOutRelationInfo receiveTask(HollowTaskRequest request) {
         return childrenTask(request, 0);
     }
 
     @Override
+    @Transactional
     public HollowGlassOutRelationInfo forceOutGlass(HollowTaskRequest request) {
         return childrenTask(request, 1);
     }
@@ -76,6 +100,12 @@
     public Boolean dispatchHollowSwitch(Boolean flag) {
         redisUtil.setCacheObject("dispatchHollowSwitch", flag);
         return redisUtil.getCacheObject("dispatchHollowSwitch");
+    }
+
+    @Override
+    public Boolean priorityHollowSwitch(Boolean flag) {
+        redisUtil.setCacheObject("priorityHollowSwitch", flag);
+        return redisUtil.getCacheObject("priorityHollowSwitch");
     }
 
     @Override
@@ -91,43 +121,45 @@
     }
 
     @Override
-    public List<HollowGlassQueueInfo> appointHollowTaskDetails(String flowCardId, int cell) {
+    public Map<String, List<HollowGlassQueueInfo>> appointHollowTaskDetails(int cell) {
         //鎸夌収娴佺▼鍗″強璺嚎锛屾煡鎵惧搴旂殑浠诲姟淇℃伅
-        HollowGlassOutRelationInfo hollowGlassOutRelationInfo = this.getOne(new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
+        List<HollowGlassOutRelationInfo> hollowGlassOutRelationInfos = this.list(new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
                 .in(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_NEW, Const.HOLLOW_FLOW_CARD_START, Const.HOLLOW_FLOW_CARD_PAUSE)
-                .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId)
-                .eq(HollowGlassOutRelationInfo::getCell, cell).last("limit 1"));
-        if (null == hollowGlassOutRelationInfo) {
-            return new ArrayList<HollowGlassQueueInfo>();
+                .eq(HollowGlassOutRelationInfo::getCell, cell));
+        if (CollectionUtil.isEmpty(hollowGlassOutRelationInfos)) {
+            return null;
         }
+        List<Long> ids = hollowGlassOutRelationInfos.stream()
+                .map(HollowGlassOutRelationInfo::getId) // 鎻愬彇姣忎釜鍏冪礌鐨刬d
+                .collect(Collectors.toList());
         //鎸夌収浠诲姟id鏌ヨ瀵瑰垪琛ㄤ腑鐨勯槦鍒椾俊鎭�
-        return hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>()
-                .eq(HollowGlassQueueInfo::getRelationId, hollowGlassOutRelationInfo.getId()));
+        List<HollowGlassQueueInfo> hollowGlassQueueInfos = hollowGlassQueueInfoService.list(new LambdaQueryWrapper<HollowGlassQueueInfo>()
+                .in(HollowGlassQueueInfo::getRelationId, ids)
+                .orderByAsc(HollowGlassQueueInfo::getId));
+        Map<String, List<HollowGlassQueueInfo>> groupedByFlowCardId = hollowGlassQueueInfos.stream()
+                .collect(Collectors.groupingBy(
+                        HollowGlassQueueInfo::getFlowCardId,
+                        LinkedHashMap::new,
+                        Collectors.toList()
+                ));
+        return groupedByFlowCardId;
     }
 
     @Override
-    public Boolean startTask(String flowCardId, int cell) {
-        log.info("鏌ョ湅璇ユ祦绋嬪崱鏄惁鐢辨鍦ㄦ墽琛岀殑浠诲姟锛屾祦绋嬪崱锛歿}", flowCardId);
-        int taskCount = this.count(new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
-                .in(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_NEW, Const.HOLLOW_FLOW_CARD_START, Const.HOLLOW_FLOW_CARD_PAUSE)
-                .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId));
-        if (taskCount == 0 || taskCount > 1) {
-            log.info("璇ユ祦绋嬪崱涓嶅瓨鍦ㄤ换鍔℃垨鑰呮湁姝e湪鎵ц涓紝鏃犳硶鍐嶆鎵ц");
-            return Boolean.FALSE;
-        }
+    public Boolean startTask(int cell) {
         //鏇存柊浠诲姟鐘舵�佷负寮�濮�
         return this.update(new LambdaUpdateWrapper<HollowGlassOutRelationInfo>()
                 .set(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_START)
-                .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId)
+                .ne(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_SUCCESS)
                 .eq(HollowGlassOutRelationInfo::getCell, cell));
     }
 
     @Override
-    public Boolean pauseTask(String flowCardId, int cell) {
+    public Boolean pauseTask(int cell) {
 //        鏇存柊浠诲姟鐘舵�佷负鏆傚仠
         return this.update(new LambdaUpdateWrapper<HollowGlassOutRelationInfo>()
                 .set(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_PAUSE)
-                .eq(HollowGlassOutRelationInfo::getFlowCardId, flowCardId)
+                .ne(HollowGlassOutRelationInfo::getState, Const.HOLLOW_FLOW_CARD_SUCCESS)
                 .eq(HollowGlassOutRelationInfo::getCell, cell));
     }
 
@@ -173,7 +205,7 @@
             return "浠诲姟鎬诲眰鏁板皬浜�2锛屼笉鐢熸垚鏉庤禌鍏嬫枃浠�";
         }
         //鑾峰彇璁㈠崟鐩稿叧淇℃伅
-        OrderDTO order = baseMapper.queryOrderByFlowCardId(flowCardId);
+        HollowOrderDTO order = ordersService.queryOrderByFlowCardId(flowCardId);
         if (null == order) {
             return "鐢熸垚澶辫触锛岀浉鍏宠鍗曚俊鎭笉瀛樺湪";
         }
@@ -200,14 +232,16 @@
 
         //璁剧疆鏂囦欢绗竴灞傚垪琛ㄦ暟鎹�
         //鏆傛椂鐢熸垚绗煎唴鎵�鏈夌殑鐜荤拑淇℃伅锛堝凡閰嶅鍜屾湭閰嶅鐨勶級
-//        List<HollowGlassRelationInfo> hollowGlassRelationInfos = hollowGlassRelationInfoService.list(new LambdaQueryWrapper<HollowGlassRelationInfo>()
-//                .eq(HollowGlassRelationInfo::getFlowCardId, flowCardId).orderByAsc(HollowGlassRelationInfo::getHollowSequence));
         List<HollowBigStorageCageDetails> hollowGlassRelationInfos = hollowBigStorageCageDetailsService.queryPairGlassList(flowCardId, relationInfo.getTotalLayer(), relationInfo.getTotalPairQuantity(), isOut);
-        Map<Integer, List<HollowBigStorageCageDetails>> listMap = hollowGlassRelationInfos.stream().collect(Collectors.groupingBy(HollowBigStorageCageDetails::getHollowSequence));
-
+        Map<Integer, List<HollowBigStorageCageDetails>> listMap = hollowGlassRelationInfos.stream()
+                .collect(Collectors.groupingBy(HollowBigStorageCageDetails::getHollowSequence,
+                        Collectors.collectingAndThen(Collectors.toList(),
+                                list -> list.stream().sorted(Comparator.comparing(HollowBigStorageCageDetails::getLayer)).collect(Collectors.toList()))));
+        Map<Integer, List<HollowBigStorageCageDetails>> sortListMap = new TreeMap<>();
+        sortListMap.putAll(listMap);
         //璁剧疆闂撮殧鏉挎暟鎹叡鎵�鏈夐厤瀵圭幓鐠冧娇鐢�
         List<LisecHollowGlassAndFrameDetails> glassAndFrameList = new ArrayList<>();
-        listMap.forEach((e, v) -> {
+        sortListMap.forEach((e, v) -> {
             LisecHollowGlassAndFrameDetails glassAndFrame = new LisecHollowGlassAndFrameDetails();
             List<LisecHollowGlassDetails> glassList = new ArrayList<>();
             List<LisecHollowFrameDetails> frameList = new ArrayList<>();
@@ -269,8 +303,6 @@
             glassAndFrameList.add(glassAndFrame);
         });
         details.setGlassAndFrameList(glassAndFrameList);
-
-
         Configuration cfg = new Configuration(new Version("2.3.29"));
         cfg.setClassForTemplateLoading(HollowBigStorageCageController.class, "/templates/");
         // 鍒涘缓Calculator瀹炰緥
@@ -299,6 +331,29 @@
         return "success";
     }
 
+    @Override
+    public Page<HollowGlassOutRelationInfo> queryHollowHistoryTask(HollowHistoryTaskRequest request) {
+        Page<HollowGlassOutRelationInfo> page = new Page<>(request.getPageNo(), request.getPageSize());
+        if (null == request.getBeginDate()) {
+            request.setBeginDate(DateUtil.getBeginDate());
+            request.setEndDate(DateUtil.getEndDate());
+        }
+        LambdaQueryWrapper<HollowGlassOutRelationInfo> wrapper = new LambdaQueryWrapper<HollowGlassOutRelationInfo>()
+                .eq(HollowGlassOutRelationInfo::getCell, request.getCell())
+                .like(StringUtils.isNotBlank(request.getFlowCardId()), HollowGlassOutRelationInfo::getFlowCardId, request.getFlowCardId())
+                .in(CollectionUtil.isNotEmpty(request.getIsForceList()), HollowGlassOutRelationInfo::getIsForce, request.getIsForceList())
+                .in(CollectionUtil.isNotEmpty(request.getStateList()), HollowGlassOutRelationInfo::getState, request.getStateList())
+                .between(HollowGlassOutRelationInfo::getCreateTime, request.getBeginDate(), request.getEndDate())
+                .orderByDesc(HollowGlassOutRelationInfo::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Cacheable(value = "orderDetails", key = "#flowCardId")
+    public OrderDetailsDTO queryProductNameByFlowCardId(String flowCardId) {
+        log.info("鏌ヨ鏁版嵁搴撲竴娆★細{}", flowCardId);
+        return ordersService.queryProductNameByFlowCardId(flowCardId);
+    }
 
     private HollowGlassOutRelationInfo childrenTask(HollowTaskRequest request, int isForce) {
         GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>().eq(GlassInfo::getFlowCardId, request.getFlowCardId()).last("limit 1"));
@@ -328,20 +383,51 @@
                 .queryOutGlassList(request.getFlowCardId(), request.getCell());
         int isPairCount = glassInfo.getTotalLayer() * request.getTotalPairQuantity();
         List<HollowGlassQueueInfo> hollowQueues = new ArrayList<>();
-        loop:
-        for (HollowBigStorageCageDetails queue : hollowBigStorageCageDetailsList) {
-            HollowGlassQueueInfo queueInfo = new HollowGlassQueueInfo();
-            BeanUtils.copyProperties(queue, queueInfo);
-            queueInfo.setRelationId(info.getId());
-            queueInfo.setState(Const.TEMPERING_NEW);
-            queueInfo.setCell(request.getCell());
-            queueInfo.setCreateTime(new Date());
-            queueInfo.setUpdateTime(new Date());
-            hollowQueues.add(queueInfo);
-            if (queue.getIsPair() == 1) {
-                isPairCount -= 1;
-                if (isPairCount == 0) {
-                    break loop;
+        Integer carWidth = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_CAR_WIDTH);
+//        Integer glassGap = sysConfigService.queryConfigValue(ConstSysConfig.HOLLOW_GLASS_GAP);
+        Integer glassGap = hollowGlassRelationInfoService.getGlassGapByThickness(hollowBigStorageCageDetailsList.get(0).getThickness());
+        if (930 == request.getCell()) {
+            Map<Integer, List<HollowBigStorageCageDetails>> listMap = hollowBigStorageCageDetailsList.stream()
+                    .collect(Collectors.groupingBy(HollowBigStorageCageDetails::getHollowSequence));
+            Map<Integer, List<HollowBigStorageCageDetails>> sortListMap = new TreeMap<>();
+            sortListMap.putAll(listMap);
+            for (Map.Entry<Integer, List<HollowBigStorageCageDetails>> entry : sortListMap.entrySet()) {
+                //鍒涘缓闃熷垪鎺ユ敹涓嶆弧瓒虫垚瀵规儏鍐典笅锛氫竴瀵圭幓鐠冨垎鍑犳涓婅溅鐨勬搴忛棶棰�
+                List<HollowGlassQueueInfo> tempList = new ArrayList<>();
+                //鍏堝皢鐜荤拑鎸夌収姝e父椤哄簭鎺掑垪锛岃绠椾竴杞︽渶澶氭斁鍑犲潡锛岀畻濂藉潡鏁颁箣鍚庡皢涓�杞︾殑鐜荤拑鎸夌収鍊掑簭瀛樺偍
+                List<HollowBigStorageCageDetails> reverse = CollectionUtil.reverse(entry.getValue());
+                int remainWidth = carWidth;
+                for (HollowBigStorageCageDetails item : reverse) {
+                    remainWidth = remainWidth - (int) Math.max(item.getWidth(), item.getHeight());
+                    if (remainWidth < 0) {
+                        hollowQueues.addAll(CollectionUtil.reverse(tempList));
+                        tempList = new ArrayList<>();
+                        remainWidth = carWidth - (int) Math.max(item.getWidth(), item.getHeight());
+                    }
+                    HollowGlassQueueInfo queueInfo = HollowBDetailToQueue(item, info.getId(), request.getCell());
+                    tempList.add(queueInfo);
+                    remainWidth = remainWidth - glassGap;
+                }
+                hollowQueues.addAll(CollectionUtil.reverse(tempList));
+                HollowBigStorageCageDetails cageDetails = entry.getValue().get(0);
+                if (cageDetails.getIsPair() == 1) {
+                    isPairCount = isPairCount - cageDetails.getTotalLayer();
+                    if (isPairCount == 0) {
+                        break;
+                    }
+                }
+            }
+
+        } else {
+            loop:
+            for (HollowBigStorageCageDetails item : hollowBigStorageCageDetailsList) {
+                HollowGlassQueueInfo queueInfo = HollowBDetailToQueue(item, info.getId(), request.getCell());
+                hollowQueues.add(queueInfo);
+                if (item.getIsPair() == 1) {
+                    isPairCount = isPairCount - 1;
+                    if (isPairCount == 0) {
+                        break loop;
+                    }
                 }
             }
         }
@@ -355,5 +441,21 @@
         }
         return info;
     }
+
+    private HollowGlassQueueInfo HollowBDetailToQueue(HollowBigStorageCageDetails details, Long taskId, int targetCell) {
+        HollowGlassQueueInfo queueInfo = new HollowGlassQueueInfo();
+        BeanUtils.copyProperties(details, queueInfo);
+        queueInfo.setRelationId(taskId);
+        queueInfo.setState(Const.TEMPERING_NEW);
+        queueInfo.setCell(targetCell);
+        queueInfo.setCreateTime(new Date());
+        queueInfo.setUpdateTime(new Date());
+        return queueInfo;
+    }
+
+    @Override
+    public List<PieChartVO> queryPieChart() {
+        return baseMapper.queryPieChart();
+    }
 }
 

--
Gitblit v1.8.0