Lius
2 天以前 2d31ce3309c2396f8bd3e197715a23bebc7c03fb
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -17,7 +17,6 @@
import org.jeecg.modules.system.service.IMdcProductionService;
import org.jeecg.modules.system.service.ISysDepartService;
import org.jeecg.modules.system.service.ISysDictService;
import org.jeecg.modules.system.vo.MdcProOptionsVo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -60,6 +59,9 @@
    @Resource
    private ISysDictService sysDictService;
    @Resource
    private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService;
    /**
     * 利用率报表
@@ -196,11 +198,26 @@
                    mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong());
                    mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                            mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                            mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor());
                    // 计算利用率百分比(转为long类型)
                    long utilizationRatePercent = mdcEfficiencyResultDto.getUtilizationRate()
                            .multiply(new BigDecimal("100"))
                            .longValue();
                    // 增加空指针判断,避免NPE
                    if (mdcUtilizationRateList != null) {
                        for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                            long minRange = rateInfo.getMinimumRange();
                            long maxRange = rateInfo.getMaximumRange();
                            // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                            boolean isInRange = utilizationRatePercent >= minRange
                                    && (utilizationRatePercent < maxRange
                                    || (maxRange == 100 && utilizationRatePercent == maxRange));
                            if (isInRange) {
                                mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                                mdcEfficiencyResultDto1.setColor(rateInfo.getRateParameterColor());
                                break; // 找到匹配项后立即退出循环,提升效率
                            }
                        }
                    }
                    list.add(mdcEfficiencyResultDto1);
@@ -284,11 +301,26 @@
                    mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong());
                    mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                            mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                            mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor());
                    // 计算利用率百分比(转为long类型)
                    long utilizationRatePercent = mdcEfficiencyResultDto.getUtilizationRate()
                            .multiply(new BigDecimal("100"))
                            .longValue();
                    // 增加空指针判断,避免NPE
                    if (mdcUtilizationRateList != null) {
                        for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                            long minRange = rateInfo.getMinimumRange();
                            long maxRange = rateInfo.getMaximumRange();
                            // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                            boolean isInRange = utilizationRatePercent >= minRange
                                    && (utilizationRatePercent < maxRange
                                    || (maxRange == 100 && utilizationRatePercent == maxRange));
                            if (isInRange) {
                                mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                                mdcEfficiencyResultDto1.setColor(rateInfo.getRateParameterColor());
                                break; // 找到匹配项后立即退出循环,提升效率
                            }
                        }
                    }
                    list.add(mdcEfficiencyResultDto1);
@@ -359,10 +391,25 @@
            mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
            mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
            mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
            long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
            // 计算利用率百分比(转为long类型)
            long utilizationRatePercent = mdcEfficiencyResultDto.getUtilizationRate()
                    .multiply(new BigDecimal("100"))
                    .longValue();
            // 增加空指针判断,避免NPE
            if (mdcUtilizationRateList != null) {
                for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                    long minRange = rateInfo.getMinimumRange();
                    long maxRange = rateInfo.getMaximumRange();
                    // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                    boolean isInRange = utilizationRatePercent >= minRange
                            && (utilizationRatePercent < maxRange
                            || (maxRange == 100 && utilizationRatePercent == maxRange));
                    if (isInRange) {
                        mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                        break; // 找到匹配项后立即退出循环,提升效率
                    }
                }
            }
        }
@@ -398,10 +445,25 @@
            mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
            mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
            mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
            long rate = mdcEfficiencyResultDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
            // 计算利用率百分比(转为long类型)
            long utilizationRatePercent = mdcEfficiencyResultDto.getUtilizationRate()
                    .multiply(new BigDecimal("100"))
                    .longValue();
            // 增加空指针判断,避免NPE
            if (mdcUtilizationRateList != null) {
                for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                    long minRange = rateInfo.getMinimumRange();
                    long maxRange = rateInfo.getMaximumRange();
                    // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                    boolean isInRange = utilizationRatePercent >= minRange
                            && (utilizationRatePercent < maxRange
                            || (maxRange == 100 && utilizationRatePercent == maxRange));
                    if (isInRange) {
                        mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                        break; // 找到匹配项后立即退出循环,提升效率
                    }
                }
            }
        }
@@ -544,11 +606,26 @@
                    mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong());
                    mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue();
                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                            mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                            mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor());
                    // 计算利用率百分比(转为long类型)
                    long utilizationRatePercent = mdcEfficiencyResultDto.getUtilizationRate()
                            .multiply(new BigDecimal("100"))
                            .longValue();
                    // 增加空指针判断,避免NPE
                    if (mdcUtilizationRateList != null) {
                        for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                            long minRange = rateInfo.getMinimumRange();
                            long maxRange = rateInfo.getMaximumRange();
                            // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                            boolean isInRange = utilizationRatePercent >= minRange
                                    && (utilizationRatePercent < maxRange
                                    || (maxRange == 100 && utilizationRatePercent == maxRange));
                            if (isInRange) {
                                mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                                mdcEfficiencyResultDto1.setColor(rateInfo.getRateParameterColor());
                                break; // 找到匹配项后立即退出循环,提升效率
                            }
                        }
                    }
                    list.add(mdcEfficiencyResultDto1);
@@ -632,11 +709,26 @@
                    mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    mdcEfficiencyResultDto1.setCloseLong(mdcEfficiencyResultDto.getCloseLong());
                    mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue();
                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                            mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                            mdcEfficiencyResultDto1.setColor(mdcUtilizationRate.getRateParameterColor());
                    // 计算利用率百分比(转为long类型)
                    long utilizationRatePercent = mdcEfficiencyResultDto.getUtilizationRate()
                            .multiply(new BigDecimal("100"))
                            .longValue();
                    // 增加空指针判断,避免NPE
                    if (mdcUtilizationRateList != null) {
                        for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                            long minRange = rateInfo.getMinimumRange();
                            long maxRange = rateInfo.getMaximumRange();
                            // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                            boolean isInRange = utilizationRatePercent >= minRange
                                    && (utilizationRatePercent < maxRange
                                    || (maxRange == 100 && utilizationRatePercent == maxRange));
                            if (isInRange) {
                                mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                                mdcEfficiencyResultDto1.setColor(rateInfo.getRateParameterColor());
                                break; // 找到匹配项后立即退出循环,提升效率
                            }
                        }
                    }
                    list.add(mdcEfficiencyResultDto1);
@@ -706,10 +798,25 @@
            mdcEfficiencyResultDto.setWaitLong(mdcEfficiencyResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
            mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
            mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
            long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue();
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
            // 计算利用率百分比(转为long类型)
            long utilizationRatePercent = mdcEfficiencyResultDto.getUtilizationRate()
                    .multiply(new BigDecimal("100"))
                    .longValue();
            // 增加空指针判断,避免NPE
            if (mdcUtilizationRateList != null) {
                for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                    long minRange = rateInfo.getMinimumRange();
                    long maxRange = rateInfo.getMaximumRange();
                    // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                    boolean isInRange = utilizationRatePercent >= minRange
                            && (utilizationRatePercent < maxRange
                            || (maxRange == 100 && utilizationRatePercent == maxRange));
                    if (isInRange) {
                        mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                        break; // 找到匹配项后立即退出循环,提升效率
                    }
                }
            }
        }
@@ -746,10 +853,25 @@
            mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
            mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
            mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
            long rate = mdcEfficiencyResultDto.getStartRate().multiply(new BigDecimal("100")).longValue();
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
            // 计算利用率百分比(转为long类型)
            long utilizationRatePercent = mdcEfficiencyResultDto.getUtilizationRate()
                    .multiply(new BigDecimal("100"))
                    .longValue();
            // 增加空指针判断,避免NPE
            if (mdcUtilizationRateList != null) {
                for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                    long minRange = rateInfo.getMinimumRange();
                    long maxRange = rateInfo.getMaximumRange();
                    // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                    boolean isInRange = utilizationRatePercent >= minRange
                            && (utilizationRatePercent < maxRange
                            || (maxRange == 100 && utilizationRatePercent == maxRange));
                    if (isInRange) {
                        mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                        break; // 找到匹配项后立即退出循环,提升效率
                    }
                }
            }
        }
@@ -915,11 +1037,26 @@
                    mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    mdcEfficiencyShiftResultDto1.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong());
                    mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.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());
                            mdcEfficiencyShiftResultDto1.setColor(mdcUtilizationRate.getRateParameterColor());
                    // 计算利用率百分比(转为long类型)
                    long utilizationRatePercent = mdcEfficiencyShiftResultDto.getUtilizationRate()
                            .multiply(new BigDecimal("100"))
                            .longValue();
                    // 增加空指针判断,避免NPE
                    if (mdcUtilizationRateList != null) {
                        for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                            long minRange = rateInfo.getMinimumRange();
                            long maxRange = rateInfo.getMaximumRange();
                            // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                            boolean isInRange = utilizationRatePercent >= minRange
                                    && (utilizationRatePercent < maxRange
                                    || (maxRange == 100 && utilizationRatePercent == maxRange));
                            if (isInRange) {
                                mdcEfficiencyShiftResultDto.setColor(rateInfo.getRateParameterColor());
                                mdcEfficiencyShiftResultDto1.setColor(rateInfo.getRateParameterColor());
                                break; // 找到匹配项后立即退出循环,提升效率
                            }
                        }
                    }
                    list.add(mdcEfficiencyShiftResultDto1);
@@ -1025,11 +1162,26 @@
                    mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
                    mdcEfficiencyShiftResultDto1.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong());
                    mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.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());
                            mdcEfficiencyShiftResultDto1.setColor(mdcUtilizationRate.getRateParameterColor());
                    // 计算利用率百分比(转为long类型)
                    long utilizationRatePercent = mdcEfficiencyShiftResultDto.getUtilizationRate()
                            .multiply(new BigDecimal("100"))
                            .longValue();
                    // 增加空指针判断,避免NPE
                    if (mdcUtilizationRateList != null) {
                        for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                            long minRange = rateInfo.getMinimumRange();
                            long maxRange = rateInfo.getMaximumRange();
                            // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                            boolean isInRange = utilizationRatePercent >= minRange
                                    && (utilizationRatePercent < maxRange
                                    || (maxRange == 100 && utilizationRatePercent == maxRange));
                            if (isInRange) {
                                mdcEfficiencyShiftResultDto.setColor(rateInfo.getRateParameterColor());
                                mdcEfficiencyShiftResultDto1.setColor(rateInfo.getRateParameterColor());
                                break; // 找到匹配项后立即退出循环,提升效率
                            }
                        }
                    }
                    list.add(mdcEfficiencyShiftResultDto1);
@@ -1099,10 +1251,25 @@
            mdcEfficiencyShiftResultDto.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
            mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
            mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.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());
            // 计算利用率百分比(转为long类型)
            long utilizationRatePercent = mdcEfficiencyShiftResultDto.getUtilizationRate()
                    .multiply(new BigDecimal("100"))
                    .longValue();
            // 增加空指针判断,避免NPE
            if (mdcUtilizationRateList != null) {
                for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                    long minRange = rateInfo.getMinimumRange();
                    long maxRange = rateInfo.getMaximumRange();
                    // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                    boolean isInRange = utilizationRatePercent >= minRange
                            && (utilizationRatePercent < maxRange
                            || (maxRange == 100 && utilizationRatePercent == maxRange));
                    if (isInRange) {
                        mdcEfficiencyShiftResultDto.setColor(rateInfo.getRateParameterColor());
                        break; // 找到匹配项后立即退出循环,提升效率
                    }
                }
            }
        }
@@ -1139,10 +1306,25 @@
            mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
            mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.HALF_UP));
            mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(mdcEfficiencyList.size()), 4, RoundingMode.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());
            // 计算利用率百分比(转为long类型)
            long utilizationRatePercent = mdcEfficiencyShiftResultDto.getUtilizationRate()
                    .multiply(new BigDecimal("100"))
                    .longValue();
            // 增加空指针判断,避免NPE
            if (mdcUtilizationRateList != null) {
                for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                    long minRange = rateInfo.getMinimumRange();
                    long maxRange = rateInfo.getMaximumRange();
                    // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                    boolean isInRange = utilizationRatePercent >= minRange
                            && (utilizationRatePercent < maxRange
                            || (maxRange == 100 && utilizationRatePercent == maxRange));
                    if (isInRange) {
                        mdcEfficiencyShiftResultDto.setColor(rateInfo.getRateParameterColor());
                        break; // 找到匹配项后立即退出循环,提升效率
                    }
                }
            }
        }
@@ -1171,10 +1353,25 @@
                    } else {
                        mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.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());
                    // 计算利用率百分比(转为long类型)
                    long utilizationRatePercent = mdcEfficiencyShiftResultDto.getUtilizationRate()
                            .multiply(new BigDecimal("100"))
                            .longValue();
                    // 增加空指针判断,避免NPE
                    if (mdcUtilizationRateList != null) {
                        for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                            long minRange = rateInfo.getMinimumRange();
                            long maxRange = rateInfo.getMaximumRange();
                            // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                            boolean isInRange = utilizationRatePercent >= minRange
                                    && (utilizationRatePercent < maxRange
                                    || (maxRange == 100 && utilizationRatePercent == maxRange));
                            if (isInRange) {
                                mdcEfficiencyShiftResultDto.setColor(rateInfo.getRateParameterColor());
                                break; // 找到匹配项后立即退出循环,提升效率
                            }
                        }
                    }
                }
@@ -1191,6 +1388,7 @@
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    break;
                }
            }
        }
@@ -1206,6 +1404,7 @@
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    break;
                }
            }
        }
@@ -1611,10 +1810,17 @@
                    mdcUtilizationRateListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
                    //
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findMdcEquipmentStatisticalInfo(mdcEquDepDto.getEquipmentId(), dateList.get(0), dateList.get(dateList.size() - 1));
                    Map<String, MdcEquipmentStatisticalInfo> map = mdcEquipmentStatisticalInfo.stream()
                            .collect(Collectors.toMap(MdcEquipmentStatisticalInfo::getTheDate, m -> m));
                    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));
                        if ("00:00".equals(startString) && "23:59".equals(endString)) {
                            list.add(this.utilizationRateTrend(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), date, mdcUtilizationRateList, map));
                        } else {
                            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);
@@ -1631,10 +1837,17 @@
                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    //
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findMdcEquipmentStatisticalInfo(mdcEquProDto.getEquipmentId(), dateList.get(0), dateList.get(dateList.size() - 1));
                    Map<String, MdcEquipmentStatisticalInfo> map = mdcEquipmentStatisticalInfo.stream()
                            .collect(Collectors.toMap(MdcEquipmentStatisticalInfo::getTheDate, m -> m));
                    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));
                        if ("00:00".equals(startString) && "23:59".equals(endString)) {
                            list.add(this.utilizationRateTrend(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), date, mdcUtilizationRateList, map));
                        } else {
                            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);
@@ -1702,11 +1915,11 @@
                    mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findMdcEquipmentStatisticalInfo(mdcEquDepDto.getEquipmentId(), dateList.get(0), dateList.get(dateList.size() - 1));
                    Map<String, MdcEquipmentStatisticalInfo> map = mdcEquipmentStatisticalInfo.stream()
                            .collect(Collectors.toMap(MdcEquipmentStatisticalInfo::getTheDate, m -> m));
                    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));
                        list.add(this.utilizationRateTrend(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), date, mdcUtilizationRateList, map));
                    }
                    mdcEfficiencyListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyListDto);
@@ -1722,11 +1935,11 @@
                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
                    List<MdcUtilizationResultDto> list = new ArrayList<>();
                    List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findMdcEquipmentStatisticalInfo(mdcEquProDto.getEquipmentId(), dateList.get(0), dateList.get(dateList.size() - 1));
                    Map<String, MdcEquipmentStatisticalInfo> map = mdcEquipmentStatisticalInfo.stream()
                            .collect(Collectors.toMap(MdcEquipmentStatisticalInfo::getTheDate, m -> m));
                    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));
                        list.add(this.utilizationRateTrend(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), date, mdcUtilizationRateList, map));
                    }
                    mdcEfficiencyListDto.setDataList(list);
                    listDtos.add(mdcEfficiencyListDto);
@@ -1736,6 +1949,45 @@
        }
        return result;
    }
    private MdcUtilizationResultDto utilizationRateTrend(String equipmentId, String equipmentName, String equipmentType, String date, List<MdcUtilizationRate> mdcUtilizationRateList, Map<String, MdcEquipmentStatisticalInfo> map) {
        MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
        dto.setEquipmentId(equipmentId);
        dto.setEquipmentName(equipmentName);
        dto.setEquipmentType(equipmentType);
        dto.setTheDate(date);
        if (map.containsKey(date.replaceAll("-", ""))) {
            MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = map.get(date.replaceAll("-", ""));
            dto.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("86400"), 6, RoundingMode.HALF_UP));
        } else {
            dto.setUtilizationRate(new BigDecimal("0"));
        }
        // 计算利用率百分比(转为long类型)
        long utilizationRatePercent = dto.getUtilizationRate()
                .multiply(new BigDecimal("100"))
                .longValue();
        // 增加空指针判断,避免NPE
        if (mdcUtilizationRateList != null) {
            for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                long minRange = rateInfo.getMinimumRange();
                long maxRange = rateInfo.getMaximumRange();
                // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                boolean isInRange = utilizationRatePercent >= minRange
                        && (utilizationRatePercent < maxRange
                        || (maxRange == 100 && utilizationRatePercent == maxRange));
                if (isInRange) {
                    dto.setColor(rateInfo.getRateParameterColor());
                    break; // 找到匹配项后立即退出循环,提升效率
                }
            }
        }
        if (StringUtils.isBlank(dto.getColor())) {
            dto.setColor(mdcUtilizationRateList.get(mdcUtilizationRateList.size() - 1).getRateParameterColor());
        }
        return dto;
    }
    @Override
@@ -2108,10 +2360,25 @@
        } 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());
        // 计算利用率百分比(转为long类型)
        long utilizationRatePercent = dto.getUtilizationRate()
                .multiply(new BigDecimal("100"))
                .longValue();
        // 增加空指针判断,避免NPE
        if (mdcUtilizationRateList != null) {
            for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                long minRange = rateInfo.getMinimumRange();
                long maxRange = rateInfo.getMaximumRange();
                // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                boolean isInRange = utilizationRatePercent >= minRange
                        && (utilizationRatePercent < maxRange
                        || (maxRange == 100 && utilizationRatePercent == maxRange));
                if (isInRange) {
                    dto.setColor(rateInfo.getRateParameterColor());
                    break; // 找到匹配项后立即退出循环,提升效率
                }
            }
        }
        if (StringUtils.isBlank(dto.getColor())) {
@@ -2146,10 +2413,25 @@
                    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 (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                            mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    // 计算利用率百分比(转为long类型)
                    long utilizationRatePercent = efficiencyDto.getUtilizationRate()
                            .multiply(new BigDecimal("100"))
                            .longValue();
                    // 增加空指针判断,避免NPE
                    if (mdcUtilizationRateList != null) {
                        for (MdcUtilizationRate rateInfo : mdcUtilizationRateList) {
                            long minRange = rateInfo.getMinimumRange();
                            long maxRange = rateInfo.getMaximumRange();
                            // 简化条件判断:处于[min, max)区间,或刚好是100%的特殊情况
                            boolean isInRange = utilizationRatePercent >= minRange
                                    && (utilizationRatePercent < maxRange
                                    || (maxRange == 100 && utilizationRatePercent == maxRange));
                            if (isInRange) {
                                mdcEfficiencyResultDto.setColor(rateInfo.getRateParameterColor());
                                break; // 找到匹配项后立即退出循环,提升效率
                            }
                        }
                    }
                }
@@ -2166,6 +2448,7 @@
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    break;
                }
            }
        }
@@ -2181,6 +2464,7 @@
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    break;
                }
            }
        }