lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -131,4 +131,7 @@ MdcEquipmentDetailedDto findById(@Param("id") String id); List<MdcEquipment> findByProductionIds(@Param("mdcProductionIds") List<String> mdcProductionIds); List<MdcEquipment> findByProIdsAndTeamCode(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("teamCodeList") List<String> teamCodeList); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -308,4 +308,20 @@ </foreach> </select> <select id="findByProIdsAndTeamCode" resultType="org.jeecg.modules.mdc.entity.MdcEquipment"> SELECT t1.* FROM mdc_equipment t1 LEFT JOIN mdc_production_equipment t2 ON t1.id = t2.equipment_id WHERE t2.production_id IN <foreach collection="mdcProductionIds" item = "productionId" index = "index" open = "(" close= ")" separator = ","> #{productionId} </foreach> AND t1.team_code IN <foreach collection="teamCodeList" item = "teamCode" index = "index" open = "(" close= ")" separator = ","> #{teamCode} </foreach> </select> </mapper> lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -223,4 +223,12 @@ * @return */ List<MdcEquipment> findByProductionIds(List<String> mdcProductionIds); /** * æ ¹æ®äº§çº¿idéååé éå°ç»æ¥è¯¢è®¾å¤å表 * @param allProductionIds * @param teamCodelist * @return */ List<MdcEquipment> findByProIdsAndTeamCode(List<String> allProductionIds, List<String> teamCodelist); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -1020,4 +1020,15 @@ return this.baseMapper.findByProductionIds(mdcProductionIds); } /** * æ ¹æ®äº§çº¿idéååé éå°ç»æ¥è¯¢è®¾å¤å表 * @param mdcProductionIds * @param teamCodeList * @return */ @Override public List<MdcEquipment> findByProIdsAndTeamCode(List<String> mdcProductionIds, List<String> teamCodeList) { return this.baseMapper.findByProIdsAndTeamCode(mdcProductionIds, teamCodeList); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
@@ -5,7 +5,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.dto.ComparativeAnalysisDto; import org.jeecg.modules.mdc.dto.DayUtilizationRateDto; @@ -13,7 +12,6 @@ import org.jeecg.modules.mdc.vo.*; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @@ -131,17 +129,17 @@ // return Result.OK(result);Equipment utilization distribution of each team // } // @ApiOperation(value = "è®¾å¤æçæ¥è¡¨-é éå°ç»ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸", notes = "è®¾å¤æçæ¥è¡¨-é éå°ç»ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸") // @GetMapping("/teamEquipmentEfficiencyAnalyze") // public Result teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) { // Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(teamEquEffVo); // return Result.OK(result); // } @ApiOperation(value = "è®¾å¤æçæ¥è¡¨-é éå°ç»ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸", notes = "è®¾å¤æçæ¥è¡¨-é éå°ç»ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸") @GetMapping("/teamEquipmentEfficiencyAnalyze") public Result<?> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo) { Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(equEffVo); return Result.OK(result); } @ApiOperation(value = "è®¾å¤æçæ¥è¡¨-设å¤ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸", notes = "è®¾å¤æçæ¥è¡¨-设å¤ç»´åº¦åçç»æè®¾å¤å©ç¨åå¸") @GetMapping("/equipmentEfficiencyAnalyze") public Result<?> equipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo) { Map<String, Object> result = mdcEfficiencyReportService.teamEquipmentEfficiencyAnalyze(teamEquEffVo); public Result<?> equipmentEfficiencyAnalyze(EquEffVo equEffVo) { Map<String, Object> result = mdcEfficiencyReportService.equipmentEfficiencyAnalyze(equEffVo); return Result.OK(result); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/EquipmentEfficiencyAnalyzeDto.java
ÎļþÃû´Ó lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquipmentEfficiencyAnalyzeDto.java ÐÞ¸Ä @@ -10,7 +10,7 @@ * @Description: */ @Data public class TeamEquipmentEfficiencyAnalyzeDto { public class EquipmentEfficiencyAnalyzeDto { private String equipmentName; lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/TeamEquEffDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package org.jeecg.modules.mdc.dto; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-03-28 * @Description: */ @Data public class TeamEquEffDto { private String teamCode; /** * å©ç¨ç */ private BigDecimal utilizationRate = BigDecimal.ZERO; /** * çæ¬¡å©ç¨ç */ private BigDecimal shiftUtilizationRate = BigDecimal.ZERO; /** * ä¿®æ£å©ç¨ç */ private BigDecimal amendUtilizationRate = BigDecimal.ZERO; public TeamEquEffDto() { } public TeamEquEffDto(String teamCode, BigDecimal utilizationRate, BigDecimal shiftUtilizationRate, BigDecimal amendUtilizationRate) { this.teamCode = teamCode; this.utilizationRate = utilizationRate; this.shiftUtilizationRate = shiftUtilizationRate; this.amendUtilizationRate = amendUtilizationRate; } public TeamEquEffDto(BigDecimal utilizationRate, BigDecimal shiftUtilizationRate, BigDecimal amendUtilizationRate) { this.utilizationRate = utilizationRate; this.shiftUtilizationRate = shiftUtilizationRate; this.amendUtilizationRate = amendUtilizationRate; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/UtilizationRateAvg.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,9 @@ package org.jeecg.modules.mdc.dto; /** * @Author: Lius * @CreateTime: 2025-03-28 * @Description: */ public class UtilizationRateAvg { } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEfficiencyReportMapper.java
@@ -3,11 +3,12 @@ import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.dto.MdcComAnaDto; import org.jeecg.modules.mdc.dto.MdcEfficiencyDto; import org.jeecg.modules.mdc.dto.TeamEquEffDto; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo; import org.jeecg.modules.mdc.vo.ComparativeAnalysisQueryVo; import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo; import org.jeecg.modules.mdc.vo.MdcEfficiencyReportShiftQueryVo; import org.jeecg.modules.mdc.dto.TeamEquipmentEfficiencyAnalyzeDto; import org.jeecg.modules.mdc.dto.EquipmentEfficiencyAnalyzeDto; import java.math.BigDecimal; import java.util.List; @@ -52,5 +53,7 @@ List<BigDecimal> getEfficiencyRate(@Param("equipmentId") String equipmentId, @Param("date") String date); List<TeamEquipmentEfficiencyAnalyzeDto> teamEquipmentEfficiencyAnalyze(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); List<EquipmentEfficiencyAnalyzeDto> equipmentEfficiencyAnalyze(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); List<TeamEquEffDto> teamEquipmentEfficiencyAnalyze(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEfficiencyReportMapper.xml
@@ -187,7 +187,7 @@ ORDER BY the_date ASC </select> <select id="teamEquipmentEfficiencyAnalyze" resultType="org.jeecg.modules.mdc.dto.TeamEquipmentEfficiencyAnalyzeDto"> <select id="equipmentEfficiencyAnalyze" resultType="org.jeecg.modules.mdc.dto.EquipmentEfficiencyAnalyzeDto"> SELECT t3.equipment_name, t1.utilization_rate AS utilizationRate, @@ -206,4 +206,22 @@ ORDER BY t1.utilization_rate DESC </select> <select id="teamEquipmentEfficiencyAnalyze" resultType="org.jeecg.modules.mdc.dto.TeamEquEffDto"> SELECT t3.team_code AS teamCode, t1.utilization_rate AS utilizationRate, t2.utilization_rate AS shiftUtilizationRate FROM mdc_equipment_statistical_info_month t1 LEFT JOIN mdc_equipment_statistical_shift_info_month t2 ON t1.the_month = t2.the_month AND t1.equipment_id = t2.equipment_id LEFT JOIN mdc_equipment t3 ON t3.equipment_id = t1.equipment_id WHERE t1.equipment_id IN <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach> AND t1.the_month = #{month} </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
@@ -104,5 +104,7 @@ */ List<BigDecimal> getEfficiencyRate(String equipmentId, String date); Map<String, Object> teamEquipmentEfficiencyAnalyze(TeamEquEffVo teamEquEffVo); Map<String, Object> equipmentEfficiencyAnalyze(EquEffVo equEffVo); Map<String, Object> teamEquipmentEfficiencyAnalyze(EquEffVo equEffVo); } 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")); lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/EquEffVo.java
ÎļþÃû´Ó lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/TeamEquEffVo.java ÐÞ¸Ä @@ -8,7 +8,7 @@ * @Description: */ @Data public class TeamEquEffVo { public class EquEffVo { /** * ä¸å¿ @@ -19,6 +19,10 @@ */ private String productionIds; /** * é éå°ç»ID */ private String teamCodes; /** * æä»½ */ private String month;