From 680a66f5aad3dc6fc41251db8ee2e8a263a34fb7 Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期五, 28 三月 2025 14:20:47 +0800 Subject: [PATCH] 班组综合利用率图表接口 --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 101 insertions(+), 8 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 fde18f5..0d7ebe1 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 @@ -4,6 +4,7 @@ import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.mdc.dto.*; import org.jeecg.modules.mdc.entity.*; import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper; @@ -15,6 +16,7 @@ import org.jeecg.modules.system.entity.SysDepart; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysDepartService; +import org.jeecg.modules.system.service.ISysDictService; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -24,6 +26,7 @@ import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -53,6 +56,9 @@ @Resource private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService; + + @Resource + private ISysDictService sysDictService; /** * 鍒╃敤鐜囨姤琛� @@ -1739,28 +1745,115 @@ /** * 鐝粍鍚勮澶囩患鍚堝埄鐢ㄧ巼 * - * @param teamEquEffVo + * @param equEffVo * @return */ @Override - public Map<String, Object> teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) { + public Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo) { Map<String, Object> result = new HashMap<>(); List<String> mdcProductionIds = new ArrayList<>(); - if (StringUtils.isEmpty(teamEquEffVo.getProductionIds())) { - mdcProductionIds.add(teamEquEffVo.getProductionId()); + if (StringUtils.isBlank(equEffVo.getProductionIds())) { + mdcProductionIds.add(equEffVo.getProductionId()); } else { - mdcProductionIds.addAll(Arrays.asList(teamEquEffVo.getProductionIds().split(","))); + mdcProductionIds.addAll(Arrays.asList(equEffVo.getProductionIds().split(","))); } List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds); List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds); if (equipmentList != null && !equipmentList.isEmpty()) { List<String> equipmentIdList = equipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList()); - List<TeamEquipmentEfficiencyAnalyzeDto> dataList = mdcEfficiencyReportMapper.teamEquipmentEfficiencyAnalyze(equipmentIdList, teamEquEffVo.getMonth()); + List<EquipmentEfficiencyAnalyzeDto> dataList = mdcEfficiencyReportMapper.equipmentEfficiencyAnalyze(equipmentIdList, equEffVo.getMonth()); result.put("dataList", dataList); - List<String> equipmentNameList = dataList.stream().map(TeamEquipmentEfficiencyAnalyzeDto::getEquipmentName).collect(Collectors.toList()); + List<String> equipmentNameList = dataList.stream().map(EquipmentEfficiencyAnalyzeDto::getEquipmentName).collect(Collectors.toList()); result.put("equipmentNameList", equipmentNameList); } return result; + } + + @Override + public Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) { + Map<String, Object> result = new HashMap<>(); + // 1. 澶勭悊鐢熶骇ID + List<String> mdcProductionIds = StringUtils.isBlank(equEffVo.getProductionIds()) + ? Collections.singletonList(equEffVo.getProductionId()) + : Arrays.asList(equEffVo.getProductionIds().split(",")); + + List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds); + if (allProductionIds.isEmpty()) { + return result; // 鎻愬墠杩斿洖绌虹粨鏋� + } + + // 2. 鑾峰彇璁惧鍒楄〃 + List<MdcEquipment> equipmentList = StringUtils.isNotBlank(equEffVo.getTeamCodes()) + ? mdcEquipmentService.findByProIdsAndTeamCode(allProductionIds, Arrays.asList(equEffVo.getTeamCodes().split(","))) + : mdcEquipmentService.findByProductionIds(allProductionIds); + + if (equipmentList.isEmpty()) { + return result; + } + + // 3. 鏁版嵁澶勭悊 + List<String> equipmentIdList = equipmentList.stream() + .map(MdcEquipment::getEquipmentId) + .collect(Collectors.toList()); + + List<TeamEquEffDto> dataList = mdcEfficiencyReportMapper + .teamEquipmentEfficiencyAnalyze(equipmentIdList, equEffVo.getMonth()); + + if (dataList.isEmpty()) { + return result; + } + + // 4. 鍒嗙粍璁$畻骞冲潎鍊� + Map<String, TeamEquEffDto> grouped = dataList.stream() + .collect(Collectors.groupingBy( + TeamEquEffDto::getTeamCode, + Collectors.collectingAndThen( + Collectors.toList(), + this::calculateAverages // 鎻愬彇璁$畻鏂规硶 + ))); + + // 5. 瀛楀吀杞崲 + Map<String, String> dictMap = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_MDC_STAFF_TEAM) + .stream() + .collect(Collectors.toMap(DictModel::getValue, DictModel::getText)); + + List<TeamEquEffDto> resultList = grouped.entrySet().stream() + .map(entry -> buildResultDto(entry, dictMap))// 鎻愬彇鏋勫缓鏂规硶 + .sorted(Comparator.comparing(TeamEquEffDto::getUtilizationRate).reversed()) + .collect(Collectors.toList()); + + result.put("dataList", resultList); + result.put("teamCodeList", resultList.stream() + .map(TeamEquEffDto::getTeamCode) + .collect(Collectors.toList())); + + return result; + + } + + // 鎻愬彇鐨勫钩鍧囧�艰绠楁柟娉� + private TeamEquEffDto calculateAverages(List<TeamEquEffDto> items) { + BigDecimal size = new BigDecimal(items.size()); + return new TeamEquEffDto( + calculateAverage(items, TeamEquEffDto::getUtilizationRate, size), + calculateAverage(items, TeamEquEffDto::getShiftUtilizationRate, size), + calculateAverage(items, TeamEquEffDto::getAmendUtilizationRate, size) + ); + } + + // 閫氱敤鐨勫钩鍧囧�艰绠� + private BigDecimal calculateAverage(List<TeamEquEffDto> items, Function<TeamEquEffDto, BigDecimal> mapper, BigDecimal size) { + return items.stream() + .map(mapper) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(size, 2, RoundingMode.HALF_UP); + } + + // 鏋勫缓缁撴灉DTO + private TeamEquEffDto buildResultDto(Map.Entry<String, TeamEquEffDto> entry, Map<String, String> dictMap) { + TeamEquEffDto dto = entry.getValue(); + dto.setTeamCode(dictMap.getOrDefault(entry.getKey(), entry.getKey())); + return dto; } private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) { @@ -1787,7 +1880,7 @@ } } BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime)); - BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP); + BigDecimal utilizationRate = processLong.divide(totalLong, 6, RoundingMode.HALF_UP); dto.setUtilizationRate(utilizationRate); } else { dto.setUtilizationRate(new BigDecimal("0")); -- Gitblit v1.9.3