zenglf
2023-09-28 f84d9e69907cb678150eaa6393fd74cf042fcca4
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -1,18 +1,18 @@
package org.jeecg.modules.mdc.service.impl;
import com.alipay.api.domain.NewsfeedMediaGiftInfo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.A;
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.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.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.mdc.vo.MdcUtilizationRateDto;
import org.jeecg.modules.system.entity.MdcProduction;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.service.IMdcProductionService;
@@ -21,7 +21,13 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @author: LiuS
@@ -44,6 +50,12 @@
    @Resource
    private IMdcProductionService mdcProductionService;
    @Resource
    private IMdcShiftSubService mdcShiftSubService;
    @Resource
    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
    /**
     * 利用率报表
@@ -98,7 +110,7 @@
                // 部门层级
                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                // 查询所有部门信息
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartName));
                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -278,7 +290,7 @@
                // 部门层级
                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                // 查询所有部门信息
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartName));
                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
@@ -449,10 +461,261 @@
            result.setMdcEfficiencyList(listDtos);
        } else {
            // 班次利用率等级
            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl");
            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl");
            // 班次利用率数据
            List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo);
            // 封装结果
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                // 查询所有部门信息
                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartName));
                // 班次名称显示处理
                String shiftSubName = "";
                if (StringUtils.isBlank(vo.getShiftId())) {
                    // 合并设备每天所有班次的数据
                    shiftSubName = "全部";
                } else {
                    List<MdcShiftSub> mdcShiftSubList = new ArrayList<>();
                    if (StringUtils.isBlank(vo.getShiftSubId())) {
                        // 拼接所选班制下的所有班次名称
                        mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, vo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1"));
                        mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId())).collect(Collectors.toList());
                    } else {
                        // 设置当前选择的班次名称
                        mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getId, vo.getShiftSubId()).eq(MdcShiftSub::getShiftSubStatus, "1"));
                        mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId()) && mdcEquipmentShiftRateVo.getShiftSubId().equals(vo.getShiftSubId())).collect(Collectors.toList());
                    }
                    List<String> shiftSubNames = mdcShiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList());
                    shiftSubName = String.join(",", shiftSubNames);
                }
                // 合并同一天多班次数据
                mdcEquipmentStatisticalShiftInfoList = this.handleEfficiencyShiftList(mdcEquipmentStatisticalShiftInfoList);
                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                    MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto = new MdcEfficiencyShiftListDto();
                    mdcEfficiencyShiftListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                    mdcEfficiencyShiftListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                    mdcEfficiencyShiftListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
                    mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName);
                    switch (mdcEquDepDto.getOrgType()) {
                        case "1":
                            mdcEfficiencyShiftListDto.setLevel1(mdcEquDepDto.getDepartName());
                            break;
                        case "2":
                            mdcEfficiencyShiftListDto.setLevel2(mdcEquDepDto.getDepartName());
                            break;
                        case "3":
                            mdcEfficiencyShiftListDto.setLevel3(mdcEquDepDto.getDepartName());
                            break;
                        default:
                    }
                    SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null);
                    if (sysDepart != null) {
                        switch (sysDepart.getOrgType()) {
                            case "1":
                                mdcEfficiencyShiftListDto.setLevel1(sysDepart.getDepartName());
                                break;
                            case "2":
                                mdcEfficiencyShiftListDto.setLevel2(sysDepart.getDepartName());
                                break;
                            case "3":
                                mdcEfficiencyShiftListDto.setLevel3(sysDepart.getDepartName());
                                break;
                            default:
                        }
                        if (StringUtils.isNotEmpty(sysDepart.getParentId())) {
                            departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> {
                                switch (depart1.getOrgType()) {
                                    case "1":
                                        mdcEfficiencyShiftListDto.setLevel1(depart1.getDepartName());
                                        break;
                                    case "2":
                                        mdcEfficiencyShiftListDto.setLevel2(depart1.getDepartName());
                                        break;
                                    case "3":
                                        mdcEfficiencyShiftListDto.setLevel3(depart1.getDepartName());
                                        break;
                                    default:
                                }
                            });
                        }
                    }
                    List<MdcEfficiencyShiftResultDto> list = new ArrayList<>();
                    for (String date : dates) {
                        list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
                    }
                    mdcEfficiencyShiftListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyShiftListDto);
                }
            } else {
                // 产线层级
                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                // 查询所有产线信息
                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
                // 班次名称显示处理
                String shiftSubName = "";
                if (StringUtils.isBlank(vo.getShiftId())) {
                    // 合并设备每天所有班次的数据
                    shiftSubName = "全部";
                } else {
                    List<MdcShiftSub> mdcShiftSubList = new ArrayList<>();
                    if (StringUtils.isBlank(vo.getShiftSubId())) {
                        // 拼接所选班制下的所有班次名称
                        mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getShiftId, vo.getShiftId()).eq(MdcShiftSub::getShiftSubStatus, "1"));
                        mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId())).collect(Collectors.toList());
                    } else {
                        // 设置当前选择的班次名称
                        mdcShiftSubList = mdcShiftSubService.list(new LambdaQueryWrapper<MdcShiftSub>().eq(MdcShiftSub::getId, vo.getShiftSubId()).eq(MdcShiftSub::getShiftSubStatus, "1"));
                        mdcEquipmentStatisticalShiftInfoList = mdcEquipmentStatisticalShiftInfoList.stream().filter(mdcEquipmentShiftRateVo -> mdcEquipmentShiftRateVo.getShiftId().equals(vo.getShiftId()) && mdcEquipmentShiftRateVo.getShiftSubId().equals(vo.getShiftSubId())).collect(Collectors.toList());
                    }
                    List<String> shiftSubNames = mdcShiftSubList.stream().map(MdcShiftSub::getShiftSubName).collect(Collectors.toList());
                    shiftSubName = String.join(",", shiftSubNames);
                }
                // 合并同一天多班次数据
                mdcEquipmentStatisticalShiftInfoList = this.handleEfficiencyShiftList(mdcEquipmentStatisticalShiftInfoList);
                for (MdcEquProDto mdcEquProDto : equipmentList) {
                    MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto = new MdcEfficiencyShiftListDto();
                    mdcEfficiencyShiftListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                    mdcEfficiencyShiftListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                    mdcEfficiencyShiftListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName);
                    switch (mdcEquProDto.getOrgType()) {
                        case "1":
                            mdcEfficiencyShiftListDto.setLevel1(mdcEquProDto.getProductionName());
                            break;
                        case "2":
                            mdcEfficiencyShiftListDto.setLevel2(mdcEquProDto.getProductionName());
                            break;
                        case "3":
                            mdcEfficiencyShiftListDto.setLevel3(mdcEquProDto.getProductionName());
                            break;
                        default:
                    }
                    MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null);
                    if (mdcProduction != null) {
                        switch (mdcProduction.getOrgType()) {
                            case "1":
                                mdcEfficiencyShiftListDto.setLevel1(mdcProduction.getProductionName());
                                break;
                            case "2":
                                mdcEfficiencyShiftListDto.setLevel2(mdcProduction.getProductionName());
                                break;
                            case "3":
                                mdcEfficiencyShiftListDto.setLevel3(mdcProduction.getProductionName());
                                break;
                            default:
                        }
                        if (StringUtils.isNotEmpty(mdcProduction.getParentId())) {
                            productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> {
                                switch (production1.getOrgType()) {
                                    case "1":
                                        mdcEfficiencyShiftListDto.setLevel1(production1.getProductionName());
                                        break;
                                    case "2":
                                        mdcEfficiencyShiftListDto.setLevel2(production1.getProductionName());
                                        break;
                                    case "3":
                                        mdcEfficiencyShiftListDto.setLevel3(production1.getProductionName());
                                        break;
                                    default:
                                }
                            });
                        }
                    }
                    List<MdcEfficiencyShiftResultDto> list = new ArrayList<>();
                    for (String date : dates) {
                        list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
                    }
                    mdcEfficiencyShiftListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyShiftListDto);
                }
            }
            result.setMdcEfficiencyList(listDtos);
        }
        return result;
    }
    private MdcEfficiencyShiftResultDto efficiencyShiftRate(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) {
        MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto();
        if (mdcEquipmentStatisticalShiftInfoList != null && !mdcEquipmentStatisticalShiftInfoList.isEmpty()) {
            for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) {
                if (date.equals(equipmentStatisticalShiftInfo.getTheDate()) && equipmentStatisticalShiftInfo.getEquipmentId().equals(equipmentId)) {
                    mdcEfficiencyShiftResultDto.setTheDate(equipmentStatisticalShiftInfo.getTheDate());
                    mdcEfficiencyShiftResultDto.setProcessLong(equipmentStatisticalShiftInfo.getProcessLong());
                    mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP));
                    mdcEfficiencyShiftResultDto.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong());
                    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 (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                            mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                        }
                    }
                }
            }
        } else {
            mdcEfficiencyShiftResultDto.setTheDate(date);
            mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0"));
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                }
            }
        }
        if (StringUtils.isBlank(mdcEfficiencyShiftResultDto.getColor())) {
            mdcEfficiencyShiftResultDto.setTheDate(date);
            mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0"));
            mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0"));
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                }
            }
        }
        return mdcEfficiencyShiftResultDto;
    }
    /**
     * 合并同一天同班次数据
     *
     * @param mdcEquipmentStatisticalShiftInfoList
     * @return
     */
    private List<MdcEquipmentStatisticalShiftInfo> handleEfficiencyShiftList(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList) {
        List<MdcEquipmentStatisticalShiftInfo> result = new ArrayList<>();
        Map<String, MdcEquipmentStatisticalShiftInfo> map = new HashMap<>();
        for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) {
            if (map.containsKey(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate())) {
                MdcEquipmentStatisticalShiftInfo vo = map.get(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate());
                vo.setProcessLong(vo.getProcessLong().add(equipmentStatisticalShiftInfo.getProcessLong()));
                vo.setOpenLong(vo.getOpenLong().add(equipmentStatisticalShiftInfo.getOpenLong()));
                vo.setWaitLong(vo.getWaitLong().add(equipmentStatisticalShiftInfo.getWaitLong()));
                vo.setCloseLong(vo.getCloseLong().add(equipmentStatisticalShiftInfo.getCloseLong()));
                vo.setTotalLong(vo.getTotalLong().add(equipmentStatisticalShiftInfo.getTotalLong()));
            } else {
                map.put(equipmentStatisticalShiftInfo.getEquipmentId() + "_" + equipmentStatisticalShiftInfo.getTheDate(), equipmentStatisticalShiftInfo);
            }
        }
        for (String s : map.keySet()) {
            result.add(map.get(s));
        }
        return result;
    }
@@ -506,15 +769,487 @@
        }
        result = this.efficiencyStatisticalRate(efficiencyList);
        if (result.getOpenRate().compareTo(new BigDecimal("0")) > 0) {
            result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP));
            result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(vo.getEquipmentIdList().size()), 2, BigDecimal.ROUND_HALF_UP));
        }
        if (result.getUtilizationRate().compareTo(new BigDecimal("0")) > 0) {
            result.setUtilizationRate(result.getUtilizationRate().multiply(new BigDecimal(100)).divide(new BigDecimal(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP));
            result.setUtilizationRate(result.getUtilizationRate().multiply(new BigDecimal(100)).divide(new BigDecimal(vo.getEquipmentIdList().size()), 2, BigDecimal.ROUND_HALF_UP));
        }
        if (result.getOpenLong().compareTo(new BigDecimal(0)) > 0 && result.getProcessLong().compareTo(new BigDecimal(0)) > 0) {
            result.setUsedOpenRate(result.getProcessLong().divide(result.getOpenLong(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
        }
        return result;
    }
    /**
     * 对比分析
     */
    @Override
    public ComparativeAnalysisDto comparativeAnalysis(String userId, ComparativeAnalysisQueryVo vo) {
        ComparativeAnalysisDto result = new ComparativeAnalysisDto();
        List<String> equipmentIds = new ArrayList<>();
        if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
            } else {
                // 产线层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
            }
        } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
            // 单台设备信息
            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
        } else {
            // 查询用户拥有的所有设备信息
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
            } else {
                // 产线层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
            }
        }
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            vo.setEquipmentIdList(equipmentIds);
        }
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            return result;
        }
        // 查询原始数据
        List<MdcComAnaDto> resultDtos = mdcEfficiencyReportMapper.comparativeAnalysis(vo);
        if (resultDtos != null && !resultDtos.isEmpty()) {
            // 组装图形和仪表数据
            List<GraphicsDto> graphicsDtos = new ArrayList<>();
            // 获取天数
            long days = ChronoUnit.DAYS.between(LocalDate.parse(vo.getStartTime(), DateTimeFormatter.ofPattern("yyyyMMdd")), LocalDate.parse(vo.getEndTime(), DateTimeFormatter.ofPattern("yyyyMMdd"))) + 1;
            BigDecimal time = new BigDecimal("24").multiply(new BigDecimal(days)).multiply(new BigDecimal("60")).multiply(new BigDecimal("60"));
            for (MdcComAnaDto mdcComAnaDto : resultDtos) {
                GraphicsDto graphicsDto = new GraphicsDto();
                graphicsDto.setEquipmentId(mdcComAnaDto.getEquipmentId());
                graphicsDto.setCloseLong(mdcComAnaDto.getCloseLong());
                graphicsDto.setOpenLong(mdcComAnaDto.getOpenLong());
                // 24小时利用率 = 加工时间/24
                graphicsDto.setUtilizationRate(mdcComAnaDto.getProcessLong().divide(time, 6, BigDecimal.ROUND_HALF_UP));
                // 开机率 = 开机时间 / 24
                graphicsDto.setOpenRate(mdcComAnaDto.getOpenLong().divide(time, 6, BigDecimal.ROUND_HALF_UP));
                graphicsDtos.add(graphicsDto);
            }
            result.setGraphics(graphicsDtos);
            List<UtilizationRateDto> tops = new ArrayList<>();
            List<UtilizationRateDto> lasts = new ArrayList<>();
            graphicsDtos.stream().sorted(Comparator.comparing(GraphicsDto::getUtilizationRate)).limit(5).forEach(graphicsDto -> {
                UtilizationRateDto utilizationRateDto = new UtilizationRateDto();
                utilizationRateDto.setEquipmentId(graphicsDto.getEquipmentId());
                utilizationRateDto.setUtilizationRate(graphicsDto.getUtilizationRate());
                lasts.add(utilizationRateDto);
            });
            graphicsDtos.stream().sorted(Comparator.comparing(GraphicsDto::getUtilizationRate).reversed()).limit(5).forEach(graphicsDto -> {
                UtilizationRateDto utilizationRateDto = new UtilizationRateDto();
                utilizationRateDto.setEquipmentId(graphicsDto.getEquipmentId());
                utilizationRateDto.setUtilizationRate(graphicsDto.getUtilizationRate());
                tops.add(utilizationRateDto);
            });
            MeterDto meterDto = new MeterDto();
            meterDto.setTops(tops);
            meterDto.setLasts(lasts);
            result.setMeters(meterDto);
            // 组装饼图数据
            PieChartDto pieChartDto = new PieChartDto();
            BigDecimal openLong = new BigDecimal("0");
            BigDecimal closeLong = new BigDecimal("0");
            BigDecimal waitLong = new BigDecimal("0");
            BigDecimal processLong = new BigDecimal("0");
            for (MdcComAnaDto resultDto : resultDtos) {
                openLong = openLong.add(resultDto.getOpenLong());
                closeLong = closeLong.add(resultDto.getCloseLong());
                waitLong = waitLong.add(resultDto.getWaitLong());
                processLong = processLong.add(resultDto.getProcessLong());
            }
            // 开机率 = 开机时长 / (24 × 天数 × 个数)
            pieChartDto.setOpenRate(openLong.divide(time.multiply(new BigDecimal(resultDtos.size())), 6, BigDecimal.ROUND_HALF_UP));
            // 关机率 = 1 - 开机率
            pieChartDto.setCloseRate(new BigDecimal("1").subtract(pieChartDto.getOpenRate()));
            // 加工率 = 加工时间 / (24 × 天数 × 个数)
            pieChartDto.setProcessRate(processLong.divide(time.multiply(new BigDecimal(resultDtos.size())), 6, BigDecimal.ROUND_HALF_UP));
            // 待机率 = 开机率 - 加工率
            pieChartDto.setWaitRate(pieChartDto.getOpenRate().subtract(pieChartDto.getProcessRate()));
            result.setPieCharts(pieChartDto);
        }
        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));
            }
        }
        result.setEquipmentId(vo.getEquipmentId());
        MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId()));
        result.setEquipmentName(mdcEquipment.getEquipmentName());
        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");
            }
        }
        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) + ":00", DateUtils.STR_DATE_TIME_SMALL);
            Date endTime = DateUtils.toDate(dateTime + " " + dateList.get(i + 1) + ":00", DateUtils.STR_DATE_TIME_SMALL);
            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;
    }
    /**
     * 设备日利用率对比分析
     *
     * @param userId
     * @param vo
     * @return
     */
    @Override
    public DayUtilizationRateDto dayUtilizationRateContrast(String userId, DayUtilizationRateContrastQueryVo 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));
            }
        }
        result.setEquipmentId(vo.getEquipmentId());
        MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId()));
        result.setEquipmentName(mdcEquipment.getEquipmentName());
        Date start = DateUtils.toDate(vo.getStartDate(), DateUtils.STRDATE);
        Date end = DateUtils.toDate(vo.getEndDate(), DateUtils.STRDATE);
        List<String> dateList = DateUtils.getDatesStringLists(start, end);
        result.setDateList(dateList);
        List<String> datesStringList = DateUtils.getDatesStringList(start, end);
        List<DayRateDto> dayRateDtoList = new ArrayList<>();
        for (String date : datesStringList) {
            DayRateDto dayRateDto = new DayRateDto();
            String format = DateUtils.format(DateUtils.toDate(date, DateUtils.STR_DATE), DateUtils.STR_MMDD);
            dayRateDto.setDateTime(format);
            Date startTime = DateUtils.toDate(date + " " + vo.getStartTime() + ":00", DateUtils.STR_DATE_TIME_SMALL);
            Date endTime = DateUtils.toDate(date + " " + vo.getEndTime() + ":00", DateUtils.STR_DATE_TIME_SMALL);
            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(DateUtils.differentSecond(startTime, endTime));
                BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP);
                dayRateDto.setUtilizationRate(utilizationRate);
            } else {
                dayRateDto.setUtilizationRate(new BigDecimal("0"));
            }
            dayRateDtoList.add(dayRateDto);
        }
        result.setDayRateDto(dayRateDtoList);
        return result;
    }
    /**
     * 设备利用率分段分析
     *
     * @param userId
     * @param vo
     * @return
     */
    @Override
    public MdcUtilizationRateDto utilizationRateSectionAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) {
        MdcUtilizationRateDto result = new MdcUtilizationRateDto();
        List<MdcUtilizationRateListDto> listDtos = new ArrayList<>();
        List<String> equipmentIds = new ArrayList<>();
        if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
            } else {
                // 产线层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
            }
        } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
            // 单台设备信息
            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
        } else {
            // 查询用户拥有的所有设备信息
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
            } else {
                // 产线层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
            }
        }
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            vo.setEquipmentIdList(equipmentIds);
        }
        List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
        List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
        result.setDates(dates);
        String startString = vo.getStartTime();
        String endString = vo.getEndTime();
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            // 利用率等级
            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                    MdcUtilizationRateListDto mdcUtilizationRateListDto = new MdcUtilizationRateListDto();
                    mdcUtilizationRateListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                    mdcUtilizationRateListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                    mdcUtilizationRateListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
                    //
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    for (String date : dateList) {
                        Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL);
                        Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL);
                        list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
                    }
                    mdcUtilizationRateListDto.setDataList(list);
                    listDtos.add(mdcUtilizationRateListDto);
                }
            } else {
                // 产线层级
                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                for (MdcEquProDto mdcEquProDto : equipmentList) {
                    MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto();
                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    //
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    for (String date : dateList) {
                        Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL);
                        Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL);
                        list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
                    }
                    mdcEfficiencyListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyListDto);
                }
            }
            result.setMdcEfficiencyList(listDtos);
        }
        return result;
    }
    /**
     * 设备利用率走势分析
     *
     * @param userId
     * @param vo
     * @return
     */
    @Override
    public MdcUtilizationRateDto utilizationRateTrendAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) {
        MdcUtilizationRateDto result = new MdcUtilizationRateDto();
        List<MdcUtilizationRateListDto> listDtos = new ArrayList<>();
        List<String> equipmentIds = new ArrayList<>();
        if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
            } else {
                // 产线层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
            }
        } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
            // 单台设备信息
            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
        } else {
            // 查询用户拥有的所有设备信息
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
            } else {
                // 产线层级
                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
            }
        }
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            vo.setEquipmentIdList(equipmentIds);
        }
        List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
        result.setDates(dateList);
        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
            result.setMdcEfficiencyList(listDtos);
        } else {
            // 利用率等级
            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
            if ("2".equals(vo.getTypeTree())) {
                // 部门层级
                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                    MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto();
                    mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                    mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                    mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    for (String date : dateList) {
                        Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
                        Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
                        endTime = DateUtils.addDays(endTime, 1);
                        list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
                    }
                    mdcEfficiencyListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyListDto);
                }
            } else {
                // 产线层级
                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                for (MdcEquProDto mdcEquProDto : equipmentList) {
                    MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto();
                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    for (String date : dateList) {
                        Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
                        Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
                        endTime = DateUtils.addDays(endTime, 1);
                        list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
                    }
                    mdcEfficiencyListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyListDto);
                }
            }
            result.setMdcEfficiencyList(listDtos);
        }
        return result;
    }
    private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
        MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
        dto.setEquipmentId(equipmentId);
        dto.setEquipmentName(equipmentName);
        dto.setEquipmentType(equipmentType);
        dto.setTheDate(date);
        List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(equipmentId, 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(DateUtils.differentSecond(startTime, endTime));
            BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP);
            dto.setUtilizationRate(utilizationRate);
        } else {
            dto.setUtilizationRate(new BigDecimal("0"));
        }
        long rate = dto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
        for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
            if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                dto.setColor(mdcUtilizationRate.getRateParameterColor());
            }
        }
        if (StringUtils.isBlank(dto.getColor())) {
            dto.setColor(mdcUtilizationRateList.get(mdcUtilizationRateList.size() - 1).getRateParameterColor());
        }
        return dto;
    }
    private StatisticalAnalysisVo efficiencyStatisticalRate(List<MdcEfficiencyDto> efficiencyList) {
@@ -543,12 +1278,12 @@
                    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());
                        }
                    }
                }
            }
        } else {
@@ -566,7 +1301,21 @@
                }
            }
        }
        if (StringUtils.isBlank(mdcEfficiencyResultDto.getColor())) {
            mdcEfficiencyResultDto.setTheDate(date);
            mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0"));
            mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0"));
            mdcEfficiencyResultDto.setStartRate(new BigDecimal("0"));
            mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0"));
            mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
            mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
            mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                }
            }
        }
        return mdcEfficiencyResultDto;
    }