lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java
@@ -33,4 +33,8 @@ BigDecimal computeUtilizationMonth(@Param("productionId") String productionId, @Param("startDate") String startDate, @Param("endDate") String endDate); BigDecimal computeUtilizationMonthTotal(@Param("productionId") String productionId, @Param("startDate") String startDate, @Param("endDate") String endDate); BigDecimal computeUtilizationWeek(@Param("productionId") String productionId, @Param("date") String date); BigDecimal computeUtilizationWeekTotal(@Param("productionId") String productionId, @Param("date") String date); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml
@@ -43,4 +43,29 @@ t4.parent_id = #{productionId} AND t1.the_date BETWEEN #{startDate} AND #{endDate} </select> <select id="computeUtilizationWeek" resultType="java.math.BigDecimal"> SELECT AVG ( t1.process_long ) AS processLong FROM mdc_equipment_statistical_info t1 INNER JOIN mdc_equipment t2 ON t1.equipment_id = t2.equipment_id INNER JOIN mdc_production_equipment t3 ON t2.id = t3.equipment_id AND t3.production_id = #{productionId} WHERE t1.the_date = #{date} </select> <select id="computeUtilizationWeekTotal" resultType="java.math.BigDecimal"> SELECT AVG ( t1.process_long ) AS processLong FROM mdc_equipment_statistical_info t1 INNER JOIN mdc_equipment t2 ON t1.equipment_id = t2.equipment_id INNER JOIN mdc_production_equipment t3 ON t2.id = t3.equipment_id INNER JOIN mdc_production t4 ON t3.production_id = t4.id WHERE t4.parent_id = #{productionId} AND t1.the_date = #{date} </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java
@@ -55,4 +55,20 @@ * @return */ BigDecimal computeUtilizationMonthTotal(String productionId, String startDate, String endDate); /** * * @param productionId * @param date * @return */ BigDecimal computeUtilizationWeek(String productionId, String date); /** * * @param productionId * @param date * @return */ BigDecimal computeUtilizationWeekTotal(String productionId, String date); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java
@@ -118,6 +118,26 @@ } } @Override public BigDecimal computeUtilizationWeek(String productionId, String date) { BigDecimal processLong = this.baseMapper.computeUtilizationWeek(productionId, date); if (processLong != null && processLong.compareTo(BigDecimal.ZERO) > 0) { return processLong.divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP); } else { return BigDecimal.ZERO; } } @Override public BigDecimal computeUtilizationWeekTotal(String productionId, String date) { BigDecimal processLong = this.baseMapper.computeUtilizationWeekTotal(productionId, date); if (processLong != null && processLong.compareTo(BigDecimal.ZERO) > 0) { return processLong.divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP); } else { return BigDecimal.ZERO; } } private List<EquipmentStatisticalInfo> dataHandle(List<MdcEquipmentStatisticalInfo> list) { List<EquipmentStatisticalInfo> result = new ArrayList<>(); list.forEach(item -> { lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java
@@ -15,6 +15,7 @@ import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; public class DateUtils { @@ -1132,6 +1133,28 @@ return dateRanges; } /** * è·åè¿7å¤©æ¥æ æ ¼å¼ä¸º yyyy-MM-dd * @return */ public static List<String> getNearWeek() { // è·åä»å¤©çæ¥æ LocalDate today = LocalDate.now(); // å®ä¹æ¥ææ ¼å¼åå¨ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(STR_DATE); // è·åå¹¶æ ¼å¼ååä¸å¤©çæ¥æ return IntStream.rangeClosed(1, 7) .mapToObj(today::minusDays) .sorted(LocalDate::compareTo) .map(date -> date.format(formatter)) .collect(Collectors.toList()); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/controller/MdcLargeScreenController.java
@@ -41,6 +41,18 @@ return Result.OK(result); } // public Result<?> monthUtilizationTendency(String) @ApiOperation(value = "大å±çæ¿-å¨å©ç¨çè¶å¿", notes = "大å±çæ¿-å¨å©ç¨çè¶å¿") @GetMapping("/weekUtilizationTendency") public Result<?> weekUtilizationTendency(String productionId) { Map<String, Object> result = mdcLargeScreenService.weekUtilizationTendency(productionId); return Result.OK(result); } @ApiOperation(value = "大å±çæ¿-æ¥å©ç¨çè¶å¿", notes = "大å±çæ¿-æ¥å©ç¨çè¶å¿") @GetMapping("/dayUtilizationTendency") public Result<?> dayUtilizationTendency(String productionId) { Map<String, Object> result = mdcLargeScreenService.dayUtilizationTendency(productionId); return Result.OK(result); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationDayDto.javacopy from lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonth.java copy to lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationDayDto.java
Îļþ´Ó lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonth.java ¸´ÖÆ @@ -8,15 +8,15 @@ /** * @Author: Lius * @CreateTime: 2025-03-03 * @CreateTime: 2025-03-04 * @Description: */ @Data @ApiModel(value = "æå©ç¨çresp", description = "æå©ç¨çresp") public class UtilizationMonth { @ApiModel(value = "æ¥å©ç¨çresp", description = "æ¥å©ç¨çresp") public class UtilizationDayDto { @ApiModelProperty(value = "æä»½") private String month; @ApiModelProperty(value = "工段åç§°") private String productionName; @ApiModelProperty(value = "å©ç¨ç") private BigDecimal utilizationRate = BigDecimal.ZERO; lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationRate.java
ÎļþÃû´Ó lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonth.java ÐÞ¸Ä @@ -12,11 +12,11 @@ * @Description: */ @Data @ApiModel(value = "æå©ç¨çresp", description = "æå©ç¨çresp") public class UtilizationMonth { @ApiModel(value = "å©ç¨çresp", description = "å©ç¨çresp") public class UtilizationRate { @ApiModelProperty(value = "æä»½") private String month; @ApiModelProperty(value = "æ¥æ(1æ/2025-03-04)") private String date; @ApiModelProperty(value = "å©ç¨ç") private BigDecimal utilizationRate = BigDecimal.ZERO; lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationRateDto.java
ÎļþÃû´Ó lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationMonthDto.java ÐÞ¸Ä @@ -13,8 +13,8 @@ * @Description: */ @Data @ApiModel(value = "æå©ç¨çresp", description = "æå©ç¨çresp") public class UtilizationMonthDto { @ApiModel(value = "å©ç¨çresp", description = "å©ç¨çresp") public class UtilizationRateDto { /** * 工段id @@ -29,7 +29,7 @@ /** * æå©ç¨ç */ @ApiModelProperty(value = "æå©ç¨ç") private List<UtilizationMonth> utilizationMonthList; @ApiModelProperty(value = "å©ç¨çéå") private List<UtilizationRate> utilizationMonthList; } lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/MdcLargeScreenService.java
@@ -26,4 +26,21 @@ * @return */ Map<String, Object> monthUtilizationTendency(String productionId); /** * 设å¤å¨å©ç¨çè¶å¿ * * @param productionId * @return */ Map<String, Object> weekUtilizationTendency(String productionId); /** * è®¾å¤æ¥å©ç¨ç * * @param productionId * @return */ Map<String, Object> dayUtilizationTendency(String productionId); } lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java
@@ -8,8 +8,9 @@ import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalInfoService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.screen.dto.EquipmentStatusOverview; import org.jeecg.modules.screen.dto.UtilizationMonth; import org.jeecg.modules.screen.dto.UtilizationMonthDto; import org.jeecg.modules.screen.dto.UtilizationDayDto; import org.jeecg.modules.screen.dto.UtilizationRate; import org.jeecg.modules.screen.dto.UtilizationRateDto; import org.jeecg.modules.screen.service.MdcLargeScreenService; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.service.IMdcProductionService; @@ -18,6 +19,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -115,12 +117,12 @@ result.put("dateList", dateList); // è®¡ç®æ¯ä¸ªåç产çæåº¦å©ç¨ç List<UtilizationMonthDto> utilizationMonthDtoList = mdcProductionList.stream() List<UtilizationRateDto> utilizationMonthDtoList = mdcProductionList.stream() .map(mdcProduction -> createUtilizationMonthDto(mdcProduction, dateLists)) .collect(Collectors.toList()); // è®¡ç®æ»åçæåº¦å©ç¨ç UtilizationMonthDto totalUtilizationMonthDto = createTotalUtilizationMonthDto(productionId, dateLists); UtilizationRateDto totalUtilizationMonthDto = createTotalUtilizationMonthDto(productionId, dateLists); utilizationMonthDtoList.add(totalUtilizationMonthDto); result.put("dataList", utilizationMonthDtoList); @@ -128,14 +130,104 @@ } /** * 设å¤å¨å©ç¨çè¶å¿ * * @param productionId * @return */ @Override public Map<String, Object> weekUtilizationTendency(String productionId) { Map<String, Object> result = new HashMap<>(); // è·ååç产å表 List<MdcProduction> mdcProductionList = mdcProductionService.list( new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getParentId, productionId) ); if (mdcProductionList == null || mdcProductionList.isEmpty()) { return result; } // çæå¨èå´ List<String> dateList = DateUtils.getNearWeek(); result.put("dateList", dateList); // è®¡ç®æ¯ä¸ªå·¥æ®µçå©ç¨ç List<UtilizationRateDto> utilizationMonthDtoList = new ArrayList<>(); for (MdcProduction mdcProduction : mdcProductionList) { UtilizationRateDto utilizationRateDto = new UtilizationRateDto(); utilizationRateDto.setProductionId(mdcProduction.getId()); utilizationRateDto.setProductionName(mdcProduction.getProductionName()); List<UtilizationRate> utilizationRates = dateList.stream() .map(date -> { UtilizationRate utilizationMonth = new UtilizationRate(); utilizationMonth.setDate(date); BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationWeek(productionId, date.replaceAll("-", "")); utilizationMonth.setUtilizationRate(utilizationRate); return utilizationMonth; }) .collect(Collectors.toList()); utilizationRateDto.setUtilizationMonthList(utilizationRates); utilizationMonthDtoList.add(utilizationRateDto); } //è®¡ç®æ»åçå©ç¨ç UtilizationRateDto utilizationRateDto = new UtilizationRateDto(); utilizationRateDto.setProductionName("æ»å"); List<UtilizationRate> utilizationRates = dateList.stream() .map(date -> { UtilizationRate utilizationMonth = new UtilizationRate(); utilizationMonth.setDate(date); BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationWeekTotal(productionId, date.replaceAll("-", "")); utilizationMonth.setUtilizationRate(utilizationRate); return utilizationMonth; }) .collect(Collectors.toList()); utilizationRateDto.setUtilizationMonthList(utilizationRates); utilizationMonthDtoList.add(utilizationRateDto); result.put("dataList", utilizationMonthDtoList); return result; } /** * è®¾å¤æ¥å©ç¨ç * * @param productionId * @return */ @Override public Map<String, Object> dayUtilizationTendency(String productionId) { Map<String, Object> result = new HashMap<>(); // è·ååç产å表 List<MdcProduction> mdcProductionList = mdcProductionService.list( new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getParentId, productionId) ); if (mdcProductionList == null || mdcProductionList.isEmpty()) { return result; } List<String> productionList = mdcProductionList.stream().map(MdcProduction::getProductionName).collect(Collectors.toList()); result.put("productionList", productionList); String date = LocalDate.now().minusDays(1).toString().replaceAll("-", ""); List<UtilizationDayDto> utilizationDayDtos = new ArrayList<>(); for (MdcProduction mdcProduction : mdcProductionList) { UtilizationDayDto utilizationDayDto = new UtilizationDayDto(); utilizationDayDto.setProductionName(mdcProduction.getProductionName()); BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationWeekTotal(mdcProduction.getId(), date); utilizationDayDto.setUtilizationRate(utilizationRate); utilizationDayDtos.add(utilizationDayDto); } result.put("dataList", utilizationDayDtos); return result; } /** * å建åç产çæåº¦å©ç¨ç DTO */ private UtilizationMonthDto createUtilizationMonthDto(MdcProduction mdcProduction, List<String[]> dateLists) { UtilizationMonthDto utilizationMonthDto = new UtilizationMonthDto(); private UtilizationRateDto createUtilizationMonthDto(MdcProduction mdcProduction, List<String[]> dateLists) { UtilizationRateDto utilizationMonthDto = new UtilizationRateDto(); utilizationMonthDto.setProductionId(mdcProduction.getId()); utilizationMonthDto.setProductionName(mdcProduction.getProductionName()); List<UtilizationMonth> utilizationMonthList = calculateUtilizationRates(mdcProduction.getId(), dateLists); List<UtilizationRate> utilizationMonthList = calculateUtilizationRates(mdcProduction.getId(), dateLists); utilizationMonthDto.setUtilizationMonthList(utilizationMonthList); return utilizationMonthDto; @@ -144,11 +236,11 @@ /** * å建æ»åçæåº¦å©ç¨ç DTO */ private UtilizationMonthDto createTotalUtilizationMonthDto(String productionId, List<String[]> dateLists) { UtilizationMonthDto utilizationMonthDto = new UtilizationMonthDto(); private UtilizationRateDto createTotalUtilizationMonthDto(String productionId, List<String[]> dateLists) { UtilizationRateDto utilizationMonthDto = new UtilizationRateDto(); utilizationMonthDto.setProductionName("æ»å"); List<UtilizationMonth> utilizationMonthList = calculateUtilizationRatesTotal(productionId, dateLists); List<UtilizationRate> utilizationMonthList = calculateUtilizationRatesTotal(productionId, dateLists); utilizationMonthDto.setUtilizationMonthList(utilizationMonthList); return utilizationMonthDto; @@ -157,11 +249,11 @@ /** * 计ç®åç产çæåº¦å©ç¨ç */ private List<UtilizationMonth> calculateUtilizationRates(String productionId, List<String[]> dateLists) { private List<UtilizationRate> calculateUtilizationRates(String productionId, List<String[]> dateLists) { return dateLists.stream() .map(dates -> { UtilizationMonth utilizationMonth = new UtilizationMonth(); utilizationMonth.setMonth(dates[2]); UtilizationRate utilizationMonth = new UtilizationRate(); utilizationMonth.setDate(dates[2]); BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonth(productionId, dates[0], dates[1]); utilizationMonth.setUtilizationRate(utilizationRate); return utilizationMonth; @@ -172,11 +264,11 @@ /** * è®¡ç®æ»åçæåº¦å©ç¨ç */ private List<UtilizationMonth> calculateUtilizationRatesTotal(String productionId, List<String[]> dateLists) { private List<UtilizationRate> calculateUtilizationRatesTotal(String productionId, List<String[]> dateLists) { return dateLists.stream() .map(dates -> { UtilizationMonth utilizationMonth = new UtilizationMonth(); utilizationMonth.setMonth(dates[2]); UtilizationRate utilizationMonth = new UtilizationRate(); utilizationMonth.setDate(dates[2]); BigDecimal utilizationRate = mdcEquipmentStatisticalInfoService.computeUtilizationMonthTotal(productionId, dates[0], dates[1]); utilizationMonth.setUtilizationRate(utilizationRate); return utilizationMonth;