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