Lius
2025-03-04 61bd1f27cb0f83890bfcd9aec6257eda13c0fc4d
看板周利用率,日利用率
已重命名2个文件
已修改8个文件
已复制1个文件
269 ■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/controller/MdcLargeScreenController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationDayDto.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationRate.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/dto/UtilizationRateDto.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/MdcLargeScreenService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/screen/service/impl/MdcLargeScreenServiceImpl.java 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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.java
copy 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;