From 5cd4558fb1a7178653d77e1a982e6f26d06b5db5 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期一, 31 三月 2025 17:39:00 +0800
Subject: [PATCH] 中心综合利用率趋势接口

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java |  123 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 123 insertions(+), 0 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
index 8733675..631c938 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -1931,6 +1931,129 @@
         return result;
     }
 
+    @Override
+    public Map<String, Object> comprehensiveRateAnalyze(String userId, EquEffVo vo) {
+        Map<String, Object> result = new HashMap<>();
+        // 1. 鏃ユ湡澶勭悊
+        LocalDate now = LocalDate.now();
+        Date start = DateUtils.toDate(now.plusMonths(-12).toString(), DateUtils.STR_DATE);
+        Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE);
+
+        List<String> monthBetween = DateUtils.getMonthBetween(start, end);
+        List<String> dateList = monthBetween.stream()
+                .map(date -> date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "鏈�")
+                .collect(Collectors.toList());
+        result.put("dateList", dateList);
+
+        // 1. 澶勭悊鐢熶骇ID
+        List<String> mdcProductionIds = StringUtils.isBlank(vo.getProductionIds())
+                ? Collections.singletonList(vo.getProductionId())
+                : Arrays.asList(vo.getProductionIds().split(","));
+
+        List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds);
+        if (allProductionIds.isEmpty()) {
+            return result; // 鎻愬墠杩斿洖绌虹粨鏋�
+        }
+        //鏁版嵁鏉冮檺杩囨护
+        allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds);
+        // 2. 鑾峰彇璁惧鍒楄〃
+        List<MdcEquipment> equipmentList = StringUtils.isNotBlank(vo.getEquipmentType())
+                ? mdcEquipmentService.findByProIdsAndType(allProductionIds, Arrays.asList(vo.getEquipmentType().split(",")))
+                : mdcEquipmentService.findByProductionIds(allProductionIds);
+
+        if (equipmentList.isEmpty()) {
+            return result;
+        }
+
+        // 3. 鏁版嵁澶勭悊
+        List<String> equipmentIdList = equipmentList.stream()
+                .map(MdcEquipment::getEquipmentId)
+                .collect(Collectors.toList());
+        String startStr = monthBetween.get(0).replaceAll("-", "");
+        String endStr = monthBetween.get(monthBetween.size() - 1).replaceAll("-", "");
+        List<ComRateDto> comRateDtoList = mdcEfficiencyReportMapper.comprehensiveRateAnalyze(equipmentIdList, startStr, endStr);
+        if (comRateDtoList.isEmpty()) {
+            return result; // 鎻愬墠杩斿洖绌虹粨鏋�
+        }
+        List<ComRateDto> dataList = new ArrayList<>();
+        Map<String, ComRateDto> map = comRateDtoList.stream().collect(Collectors.toMap(ComRateDto::getTheMonth, comRateDto -> comRateDto));
+        monthBetween.forEach(date -> {
+            String d = date.replaceAll("-", "");
+            String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "鏈�";
+            if (map.containsKey(d)) {
+                ComRateDto comRateDto = map.get(d);
+                comRateDto.setTheMonth(month);
+                comRateDto.setUtilizationRate(comRateDto.getUtilizationRate().setScale(2, RoundingMode.HALF_UP));
+                comRateDto.setShiftUtilizationRate(comRateDto.getShiftUtilizationRate() != null ? comRateDto.getShiftUtilizationRate().setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO);
+                comRateDto.setAmendUtilizationRate(comRateDto.getAmendUtilizationRate().setScale(2, RoundingMode.HALF_UP));
+                comRateDto.setProcessLong(comRateDto.getProcessLong().divide(new BigDecimal("3600"), 2, RoundingMode.HALF_UP));
+                dataList.add(comRateDto);
+            } else {
+                ComRateDto comRateDto = new ComRateDto();
+                comRateDto.setTheMonth(month);
+                dataList.add(comRateDto);
+            }
+        });
+        result.put("dataList", dataList);
+
+        if (StringUtils.isNotBlank(vo.getShiftId())) {
+            List<MdcShiftSub> shiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, vo.getShiftId()));
+            if (shiftSubList == null || shiftSubList.isEmpty()) {
+                return result;
+            }
+            List<String> shiftSubNameList = shiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList());
+            result.put("shiftSubList", shiftSubNameList);
+
+            List<ComShiftRateDto> comShiftRateDtoList = mdcEfficiencyReportMapper.comprehensiveShiftRateAnalyze(equipmentIdList, startStr, endStr, vo.getShiftId());
+            Map<String, List<ComShiftRateDto>> groupMap;
+            if (comShiftRateDtoList != null && !comShiftRateDtoList.isEmpty()) {
+                groupMap = comShiftRateDtoList.stream().collect(Collectors.groupingBy(ComShiftRateDto::getShiftSub));
+            } else {
+                groupMap = new HashMap<>();
+            }
+            List<ComShiftDto> shiftDataList = new ArrayList<>();
+            shiftSubList.forEach(mdcShiftSub -> {
+                ComShiftDto comShiftDto = new ComShiftDto();
+                comShiftDto.setShiftSubName(mdcShiftSub.getShiftSubName());
+                if (groupMap.containsKey(mdcShiftSub.getId())) {
+                    List<ComShiftRateDto> csrd = groupMap.get(mdcShiftSub.getId());
+                    Map<String, ComShiftRateDto> collect = csrd.stream().collect(Collectors.toMap(ComShiftRateDto::getTheMonth, comShiftRateDto -> comShiftRateDto));
+                    List<ComShiftChildDto> comShiftChildDtoList = new ArrayList<>();
+                    monthBetween.forEach(date -> {
+                        String d = date.replaceAll("-", "");
+                        String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "鏈�";
+                        if (collect.containsKey(d)) {
+                            ComShiftRateDto comShiftRateDto = collect.get(d);
+                            ComShiftChildDto comShiftChildDto = new ComShiftChildDto();
+                            comShiftChildDto.setMonth(month);
+                            comShiftChildDto.setUtilizationRate(comShiftRateDto.getUtilizationRate().setScale(2, RoundingMode.HALF_UP));
+                            comShiftChildDtoList.add(comShiftChildDto);
+                        } else {
+                            ComShiftChildDto comShiftChildDto = new ComShiftChildDto();
+                            comShiftChildDto.setMonth(month);
+                            comShiftChildDtoList.add(comShiftChildDto);
+                        }
+                    });
+                    comShiftDto.setDataList(comShiftChildDtoList);
+                } else {
+                    List<ComShiftChildDto> comShiftChildDtoList = new ArrayList<>();
+                    monthBetween.forEach(date -> {
+                        String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "鏈�";
+                        ComShiftChildDto comShiftChildDto = new ComShiftChildDto();
+                        comShiftChildDto.setMonth(month);
+                        comShiftChildDtoList.add(comShiftChildDto);
+                    });
+                    comShiftDto.setDataList(comShiftChildDtoList);
+                }
+                shiftDataList.add(comShiftDto);
+            });
+
+            result.put("shiftDataList", shiftDataList);
+        }
+
+        return result;
+    }
+
     // 鎻愬彇鐨勫钩鍧囧�艰绠楁柟娉�
     private TeamEquEffDto calculateAverages(List<TeamEquEffDto> items) {
         BigDecimal size = new BigDecimal(items.size());

--
Gitblit v1.9.3