lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
@@ -120,26 +120,30 @@ // return Result.OK(result); // } // @ApiOperation(value = "è®¾å¤æçæ¥è¡¨-çç»ç»¼åå©ç¨çç»è®¡åæ", notes = "è®¾å¤æçæ¥è¡¨-综åå©ç¨çç»è®¡åæ") // @GetMapping("/teamComprehensiveRateAnalyze") // public Result teamComprehensiveRateAnalyze(DayUtilizationRateContrastQueryVo vo) { // LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // String userId = user.getId(); // MdcUtilizationRateDto result = mdcEfficiencyReportService.teamComprehensiveRateAnalyze(userId, vo); // return Result.OK(result);Equipment utilization distribution of each team // } @ApiOperation(value = "è®¾å¤æçæ¥è¡¨-çç»ç»¼åå©ç¨çç»è®¡åæ", notes = "è®¾å¤æçæ¥è¡¨-综åå©ç¨çç»è®¡åæ") @GetMapping("/teamEfficiencyAnalyzeByMonth") public Result<?> teamEfficiencyAnalyzeByMonth(EquEffVo equEffVo) { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); Map<String, Object> result = mdcEfficiencyReportService.teamEfficiencyAnalyzeByMonth(userId, equEffVo); return Result.OK(result); } @ApiOperation(value = "è®¾å¤æçæ¥è¡¨-é éå°ç»ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸", notes = "è®¾å¤æçæ¥è¡¨-é éå°ç»ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸") @GetMapping("/teamEquipmentEfficiencyAnalyze") public Result<?> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) { Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(equEffVo); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(userId, equEffVo); return Result.OK(result); } @ApiOperation(value = "è®¾å¤æçæ¥è¡¨-设å¤ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸", notes = "è®¾å¤æçæ¥è¡¨-设å¤ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸") @GetMapping("/equipmentEfficiencyAnalyze") public Result<?> equipmentEfficiencyAnalyze(EquEffVo equEffVo) { Map<String, Object> result = mdcEfficiencyReportService.equipmentEfficiencyAnalyze(equEffVo); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); Map<String, Object> result = mdcEfficiencyReportService.equipmentEfficiencyAnalyze(userId, equEffVo); return Result.OK(result); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthChildDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package org.jeecg.modules.mdc.dto; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-03-28 * @Description: */ @Data public class TeamEquEffMonthChildDto { private String month; private BigDecimal utilizationRate = BigDecimal.ZERO; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffMonthDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package org.jeecg.modules.mdc.dto; import lombok.Data; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-03-28 * @Description: */ @Data public class TeamEquEffMonthDto { private String productionName; private List<TeamEquEffMonthChildDto> dataList; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
@@ -104,7 +104,9 @@ */ List<BigDecimal> getEfficiencyRate(String equipmentId, String date); Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo); Map<String, Object> equipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo); Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo); Map<String, Object> teamEquipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo); Map<String, Object> teamEfficiencyAnalyzeByMonth(String userId, EquEffVo equEffVo); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -17,6 +17,7 @@ import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysDepartService; import org.jeecg.modules.system.service.ISysDictService; import org.jeecg.modules.system.vo.MdcProOptionsVo; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -1749,7 +1750,7 @@ * @return */ @Override public Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo) { public Map<String, Object> equipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) { Map<String, Object> result = new HashMap<>(); List<String> mdcProductionIds = new ArrayList<>(); if (StringUtils.isBlank(equEffVo.getProductionIds())) { @@ -1758,6 +1759,8 @@ mdcProductionIds.addAll(Arrays.asList(equEffVo.getProductionIds().split(","))); } List<String> allProductionIds = mdcProductionService.findChildren(mdcProductionIds); //æ°æ®æéè¿æ»¤ allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds); if (equipmentList != null && !equipmentList.isEmpty()) { List<String> equipmentIdList = equipmentList.stream().map(MdcEquipment::getEquipmentId).collect(Collectors.toList()); @@ -1770,7 +1773,7 @@ } @Override public Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) { public Map<String, Object> teamEquipmentEfficiencyAnalyze(String userId, EquEffVo equEffVo) { Map<String, Object> result = new HashMap<>(); // 1. å¤çç产ID List<String> mdcProductionIds = StringUtils.isBlank(equEffVo.getProductionIds()) @@ -1781,7 +1784,8 @@ if (allProductionIds.isEmpty()) { return result; // æåè¿åç©ºç»æ } //æ°æ®æéè¿æ»¤ allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); // 2. è·å设å¤å表 List<MdcEquipment> equipmentList = StringUtils.isNotBlank(equEffVo.getTeamCodes()) ? mdcEquipmentService.findByProIdsAndTeamCode(allProductionIds, Arrays.asList(equEffVo.getTeamCodes().split(","))) @@ -1831,6 +1835,102 @@ } @Override public Map<String, Object> teamEfficiencyAnalyzeByMonth(String userId, EquEffVo equEffVo) { Map<String, Object> result = new HashMap<>(); // 1. æ¥æå¤ç LocalDate now = LocalDate.now(); Date start = DateUtils.toDate(now.plusMonths(-6).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); // 2. è·åäº§çº¿æ°æ® List<MdcProduction> mdcProductions = mdcProductionService.findMdcPros(userId, equEffVo.getProductionId()); // 3. åå§åç»æé List<TeamEquEffMonthDto> utilizationRateList = new ArrayList<>(); List<TeamEquEffMonthDto> shiftUtilizationRateList = new ArrayList<>(); List<TeamEquEffMonthDto> amendUtilizationRateList = new ArrayList<>(); // 4. å¤çæ¯ä¸ªäº§çº¿ mdcProductions.forEach(mdcProduction -> { // 4.1 è·åä¸çº§äº§çº¿å¹¶è¿æ»¤ List<String> allProductionIds = mdcProductionService.recursionChildren(mdcProduction.getId()); // æ°æ®æéè¿æ»¤ allProductionIds = mdcProductionService.findProIdsByUId(userId, allProductionIds); // 4.2 è·å设å¤å表 List<MdcEquipment> equipmentList = mdcEquipmentService.findByProductionIds(allProductionIds); if (equipmentList == null || equipmentList.isEmpty()) { return; } //æåidéå List<String> equipmentIdList = equipmentList.stream() .map(MdcEquipment::getEquipmentId) .collect(Collectors.toList()); TeamEquEffMonthDto urDto = new TeamEquEffMonthDto(); TeamEquEffMonthDto surDto = new TeamEquEffMonthDto(); TeamEquEffMonthDto aurDto = new TeamEquEffMonthDto(); urDto.setProductionName(mdcProduction.getProductionName()); surDto.setProductionName(mdcProduction.getProductionName()); aurDto.setProductionName(mdcProduction.getProductionName()); List<TeamEquEffMonthChildDto> urDataList = new ArrayList<>(); List<TeamEquEffMonthChildDto> surDataList = new ArrayList<>(); List<TeamEquEffMonthChildDto> aurDataList = new ArrayList<>(); monthBetween.forEach(date -> { TeamEquEffMonthChildDto urCDto = new TeamEquEffMonthChildDto(); TeamEquEffMonthChildDto surCDto = new TeamEquEffMonthChildDto(); TeamEquEffMonthChildDto aurCDto = new TeamEquEffMonthChildDto(); String month = date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"; urCDto.setMonth(month); surCDto.setMonth(month); aurCDto.setMonth(month); List<TeamEquEffDto> dataList = mdcEfficiencyReportMapper.teamEquipmentEfficiencyAnalyze(equipmentIdList, date.replaceAll("-", "")); if (dataList != null && !dataList.isEmpty()) { // 计ç®å¹³åå¼ BigDecimal ur = dataList.stream() .map(TeamEquEffDto::getUtilizationRate) .reduce(BigDecimal.ZERO, BigDecimal::add) .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); //å©ç¨ç urCDto.setUtilizationRate(ur); //çæ¬¡å©ç¨ç BigDecimal sur = dataList.stream() .map(TeamEquEffDto::getShiftUtilizationRate) .reduce(BigDecimal.ZERO, BigDecimal::add) .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); surCDto.setUtilizationRate(sur); //å»é¤æ é24å°æ¶å©ç¨ç BigDecimal aur = dataList.stream() .map(TeamEquEffDto::getAmendUtilizationRate) .reduce(BigDecimal.ZERO, BigDecimal::add) .divide(BigDecimal.valueOf(dataList.size()), 2, RoundingMode.HALF_UP); aurCDto.setUtilizationRate(aur); } urDataList.add(urCDto); surDataList.add(surCDto); aurDataList.add(aurCDto); }); urDto.setDataList(urDataList); surDto.setDataList(surDataList); aurDto.setDataList(aurDataList); utilizationRateList.add(urDto); shiftUtilizationRateList.add(surDto); amendUtilizationRateList.add(aurDto); }); result.put("utilizationRateList", utilizationRateList); result.put("shiftUtilizationRateList", shiftUtilizationRateList); result.put("amendUtilizationRateList", amendUtilizationRateList); return result; } // æåçå¹³åå¼è®¡ç®æ¹æ³ private TeamEquEffDto calculateAverages(List<TeamEquEffDto> items) { BigDecimal size = new BigDecimal(items.size()); lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java
@@ -59,4 +59,6 @@ List<MdcProduction> loadProductionOptions(@Param("userId") String userId, @Param("productionId") String productionId); List<String> findTeamValue(@Param("userId") String userId, @Param("productionList") List<String> productionList); List<String> findProIdsByUId(@Param("userId") String userId, @Param("allProductionIds") List<String> allProductionIds); } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml
@@ -111,6 +111,7 @@ AND t1.org_type = '2' </otherwise> </choose> ORDER BY t1.production_order </select> <select id="findTeamValue" resultType="java.lang.String"> @@ -124,4 +125,17 @@ #{productionId} </foreach> </select> <select id="findProIdsByUId" resultType="java.lang.String"> SELECT pro_id FROM mdc_user_production WHERE pro_id IN <foreach collection="allProductionIds" item = "productionId" index = "index" open = "(" close= ")" separator = ","> #{productionId} </foreach> AND user_id = #{userId} </select> </mapper> lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java
@@ -158,6 +158,8 @@ */ List<MdcProOptionsVo> loadProductionOptions(String userId, String productionId); List<MdcProduction> findMdcPros(String userId, String productionId); /** * * @param userId @@ -165,4 +167,12 @@ * @return */ List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId); /** * * @param userId * @param allProductionIds * @return */ List<String> findProIdsByUId(String userId, List<String> allProductionIds); } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
@@ -567,6 +567,11 @@ } @Override public List<MdcProduction> findMdcPros(String userId, String productionId) { return this.baseMapper.loadProductionOptions(userId, productionId); } @Override public List<MdcProOptionsVo> loadTeamOptions(String userId, String productionId) { List<MdcProOptionsVo> result = new ArrayList<>(); List<String> productionList = this.findChildren(Arrays.asList(productionId.split(","))); @@ -590,6 +595,11 @@ return result; } @Override public List<String> findProIdsByUId(String userId, List<String> allProductionIds) { return this.baseMapper.findProIdsByUId(userId, allProductionIds); } /** * æå¼ ç¶èç¹ å 以ä¸çmdcæ è®° * @param parentId