lius
2023-08-02 9a07b2f0eeb632f698a87e49d1dcb25ec83fbaa5
设备日利用率
已添加3个文件
已修改4个文件
209 ■■■■■ 文件已修改
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/DayUtilizationRateDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayRateDto.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayUtilizationRateQueryVo.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEfficiencyReportController.java
@@ -8,6 +8,7 @@
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;
import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
import org.jeecg.modules.mdc.vo.*;
import org.springframework.web.bind.annotation.GetMapping;
@@ -15,6 +16,7 @@
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author: LiuS
@@ -79,4 +81,14 @@
        return Result.OK(result);
    }
    @AutoLog(value = "设备效率报表-设备日利用率")
    @ApiOperation(value = "设备效率报表-设备日利用率", notes = "设备效率报表-设备日利用率")
    @GetMapping("/dayUtilizationRate")
    public Result dayUtilizationRate(DayUtilizationRateQueryVo vo) {
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        String userId = user.getId();
        DayUtilizationRateDto result = mdcEfficiencyReportService.dayUtilizationRate(userId, vo);
        return Result.OK(result);
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/dto/DayUtilizationRateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.mdc.dto;
import lombok.Data;
import org.jeecg.modules.mdc.vo.DayRateDto;
import java.util.List;
/**
 * @author: LiuS
 * @create: 2023-08-01 14:44
 */
@Data
public class DayUtilizationRateDto {
    private List<String> dateList;
    private List<DayRateDto> dayRateDto;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/MdcEfficiencyReportService.java
@@ -1,7 +1,10 @@
package org.jeecg.modules.mdc.service;
import org.jeecg.modules.mdc.dto.ComparativeAnalysisDto;
import org.jeecg.modules.mdc.dto.DayUtilizationRateDto;
import org.jeecg.modules.mdc.vo.*;
import java.util.List;
/**
 * @author: LiuS
@@ -53,4 +56,13 @@
     * @return
     */
    ComparativeAnalysisDto comparativeAnalysis(String userId, ComparativeAnalysisQueryVo vo);
    /**
     * è®¾å¤‡æ—¥åˆ©ç”¨çŽ‡åˆ†æ®µè®¡ç®—
     *
     * @param userId
     * @param vo
     * @return
     */
    DayUtilizationRateDto dayUtilizationRate(String userId, DayUtilizationRateQueryVo vo);
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -7,15 +7,9 @@
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.modules.mdc.dto.*;
import org.jeecg.modules.mdc.entity.MdcEquipment;
import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo;
import org.jeecg.modules.mdc.entity.MdcShiftSub;
import org.jeecg.modules.mdc.entity.MdcUtilizationRate;
import org.jeecg.modules.mdc.entity.*;
import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper;
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
import org.jeecg.modules.mdc.service.IMdcShiftSubService;
import org.jeecg.modules.mdc.service.IMdcUtilizationRateService;
import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
import org.jeecg.modules.mdc.service.*;
import org.jeecg.modules.mdc.util.DateUtils;
import org.jeecg.modules.mdc.vo.*;
import org.jeecg.modules.system.entity.MdcProduction;
@@ -58,6 +52,9 @@
    @Resource
    private IMdcShiftSubService mdcShiftSubService;
    @Resource
    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
    /**
     * åˆ©ç”¨çŽ‡æŠ¥è¡¨
@@ -653,8 +650,9 @@
                    mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong());
                    mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong());
                    mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP));
                    long rate = mdcEfficiencyShiftResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                        if (mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) {
                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                            mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                        }
                    }
@@ -866,6 +864,82 @@
        return result;
    }
    /**
     * è®¾å¤‡æ—¥åˆ©ç”¨çއ
     *
     * @param vo
     * @return
     */
    @Override
    public DayUtilizationRateDto dayUtilizationRate(String userId, DayUtilizationRateQueryVo vo) {
        DayUtilizationRateDto result = new DayUtilizationRateDto();
        if (StringUtils.isBlank(vo.getEquipmentId())) {
            List<String> equipmentIds;
            // èŽ·å–ç”¨æˆ·æ‹¥æœ‰è®¾å¤‡æƒé™
            if ("2".equals(vo.getTypeTree())) {
                // éƒ¨é—¨å±‚级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
            } else {
                // äº§çº¿å±‚级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
            }
            if (equipmentIds != null && !equipmentIds.isEmpty()) {
                vo.setEquipmentId(equipmentIds.get(0));
            }
        }
        List<String> dateList = new ArrayList<>();
        for (int i = 1; i <= 24 / vo.getTimeType(); i++) {
            if (i * vo.getTimeType() < 10) {
                dateList.add("0" + i * vo.getTimeType() + ":00");
            } else {
                dateList.add(i * vo.getTimeType() + ":00");
            }
        }
//        result.setDateList(dateList);
        dateList.add(0, "00:00");
        List<DayRateDto> dayRateDtoList = new ArrayList<>();
        for (int i = 0; i < dateList.size() - 1; i++) {
            DayRateDto dayRateDto = new DayRateDto();
            dayRateDto.setDateTime(dateList.get(i + 1));
            String dateTime = DateUtils.dateConvertion(vo.getDateTime());
            Date startTime = DateUtils.toDate(dateTime + " " + dateList.get(i), DateUtils.STR_DATE_TIME_MIN);
            Date endTime = DateUtils.toDate(dateTime + " " + dateList.get(i + 1), DateUtils.STR_DATE_TIME_MIN);
            List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(vo.getEquipmentId(), startTime.getTime(), endTime.getTime());
            if (runningSections != null && !runningSections.isEmpty()) {
                // æ—¶é—´ä¿®æ­£
                runningSections.get(0).setStartTime(startTime);
                if (runningSections.size() > 1) {
                    runningSections.get(runningSections.size() - 1).setEndTime(endTime);
                } else {
                    runningSections.get(0).setEndTime(endTime);
                }
                // åˆ©ç”¨çŽ‡è®¡ç®—
                BigDecimal processLong = new BigDecimal("0");
                for (MdcEquipmentRunningSection runningSection : runningSections) {
                    if (runningSection.getStatus() == 3) {
                        long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime());
                        processLong = processLong.add(new BigDecimal(duration));
                    }
                }
                BigDecimal totalLong = new BigDecimal(vo.getTimeType()).multiply(new BigDecimal("60")).multiply(new BigDecimal("60"));
                BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP);
                dayRateDto.setUtilizationRate(utilizationRate);
            } else {
                dayRateDto.setUtilizationRate(new BigDecimal("0"));
            }
            dayRateDtoList.add(dayRateDto);
        }
        dateList.remove(0);
        result.setDateList(dateList);
        result.setDayRateDto(dayRateDtoList);
        return result;
    }
    private StatisticalAnalysisVo efficiencyStatisticalRate(List<MdcEfficiencyDto> efficiencyList) {
        StatisticalAnalysisVo vo = new StatisticalAnalysisVo();
        for (MdcEfficiencyDto mdcEfficiencyDto : efficiencyList) {
@@ -892,8 +966,9 @@
                    mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong());
                    mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong());
                    mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong());
                    long rate = efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                        if (efficiencyDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) {
                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                            mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                        }
                    }
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/util/DateUtils.java
@@ -1038,4 +1038,23 @@
            return 0;
        }
    }
    /**
     * æ—¥æœŸè½¬æ¢ï¼Œå°†æŽ¥å£è¿”回的20180524转为2018-05-24
     *
     * @param str
     * @return
     */
    public static String dateConvertion(String str) {
        Date parse = null;
        String dateString = "";
        try {
            parse = new SimpleDateFormat("yyyyMMdd").parse(str);
            dateString = new SimpleDateFormat("yyyy-MM-dd").format(parse);
        } catch (ParseException e) {
            dateString = null;
        }
        return dateString;
    }
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayRateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.mdc.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
 * @author: LiuS
 * @create: 2023-08-01 15:28
 */
@Data
public class DayRateDto {
    private String dateTime;
    private BigDecimal utilizationRate;
}
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/DayUtilizationRateQueryVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package org.jeecg.modules.mdc.vo;
import lombok.Data;
/**
 * @author: LiuS
 * @create: 2023-08-01 14:33
 */
@Data
public class DayUtilizationRateQueryVo {
    /**
     * æ—¥æœŸ  ->  20220101
     */
    private String dateTime;
    /**
     * è®¾å¤‡Id
     */
    private String equipmentId;
    /**
     * è®¾å¤‡åç§°
     */
    private String equipmentName;
    /**
     * æ ‘类型    ->  1:车间层级   2:部门层级
     */
    private String typeTree;
    /**
     * æ—¶é—´é—´éš”
     */
    private Integer timeType;
}