已修改5个文件
已删除1个文件
685 ■■■■■ 文件已修改
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamReportRepairController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/InspectionOrderGenerateJob.java 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/WeekMaintenanceOrderGenerateJob.java 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java 383 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamReportRepairController.java
@@ -136,7 +136,7 @@
    public Result<?> abolishBatch(@RequestParam(name = "ids", required = true) String ids) {
        List<EamReportRepair> eamReportRepairs = eamReportRepairService.listByIds(Arrays.asList(ids.split(",")));
        eamReportRepairs.forEach(eamReportRepair -> {
            if(ReportRepairEnum.ABOLISH.name().equals(eamReportRepair.getReportStatus())) {
            if(ReportRepairEnum.WAIT_REPAIR.name().equals(eamReportRepair.getReportStatus())) {
                eamReportRepair.setReportStatus(ReportRepairEnum.ABOLISH.name());
            }
        });
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/InspectionOrderGenerateJob.java
@@ -13,7 +13,6 @@
import org.jeecg.modules.eam.service.IEamInspectionOrderService;
import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
import org.jeecg.modules.mdc.util.ThrowableUtil;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecg.modules.quartz.entity.SysQuartzLog;
import org.jeecg.modules.quartz.service.IQuartzJobService;
@@ -24,7 +23,6 @@
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.Date;
@@ -54,7 +52,6 @@
     * @throws JobExecutionException
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //任务日志
        SysQuartzLog quartzLog = new SysQuartzLog();
@@ -69,59 +66,57 @@
         */
        List<EamMaintenanceStandard> standardList = eamMaintenanceStandardService.queryListByCategory(MaintenanceCategoryEnum.POINT_INSPECTION.name());
        if (CollectionUtil.isEmpty(standardList)) {
            log.warn("没有配置任何周保标准,任务结束");
            log.warn("没有配置任何点检标准,任务结束");
            return;
        }
        //当前日期
        LocalDate now = LocalDate.now();
        try {
            for (EamMaintenanceStandard standard : standardList) {
                if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) {
                    log.error("点检标准周期设置错误,请先配置标准周期, standard:{}", standard);
                    continue;
                }
                if (standard.getInitialDate() == null) {
                    //设置初始日期为前一天
                    standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1)));
                }
                LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate());
                if (standard.getLastGenerateTime() != null) {
                    generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime());
                }
                //加周期
                do {
                    //初始日期设置的比较早,或任务长时间没执行,必须周期到今天才会生成工单
                    generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
                } while (now.isAfter(generateDate));
                if(!now.isEqual(generateDate)) {
                    //还未到生成日期,跳过执行
                    continue;
                }
                //获取保养项明细
                List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
                if(CollectionUtil.isEmpty(standardDetailList)) {
                    log.error("点检标准没有保养明细,请先配置保养明细, standard:{}", standard);
                    continue;
                }
                //开始生成
                EamInspectionOrderRequest request = new EamInspectionOrderRequest();
                request.setEquipmentId(standard.getEquipmentId());
                request.setStandardId(standard.getId());
                request.setInspectionDate(DateUtils.localDateToDate(generateDate));
                request.setExpirationTime(DateUtils.localDateToDate(generateDate.plusDays(standard.getMaintenancePeriod())));
                request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.INSPECTION_ORDER_CODE_RULE);
                request.setOrderNum(codeSeq);
                List<EamInspectionOrderDetail> collect = standardDetailList.stream().map(EamInspectionOrderDetail::new).collect(Collectors.toList());
                request.setTableDetailList(collect);
                eamInspectionOrderService.addInspectionOrder(request);
        for (EamMaintenanceStandard standard : standardList) {
            if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) {
                log.error("点检标准周期设置错误,请先配置标准周期, standard:{}", standard);
                continue;
            }
            quartzLog.setIsSuccess(0);
        } catch (Exception e) {
            log.error("周保过生成执行定时任务失败,{}", e.getMessage(), e);
            quartzLog.setIsSuccess(-1);
            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
            if (standard.getInitialDate() == null) {
                //设置初始日期为前一天
                standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1)));
            }
            LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate());
            if (standard.getLastGenerateTime() != null) {
                generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime());
            }
            //加周期
            do {
                //初始日期设置的比较早,或任务长时间没执行,必须周期到今天才会生成工单
                generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
            } while (now.isAfter(generateDate));
            if(!now.isEqual(generateDate)) {
                //还未到生成日期,跳过执行
                continue;
            }
            //获取保养项明细
            List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
            if(CollectionUtil.isEmpty(standardDetailList)) {
                log.error("点检标准没有保养明细,请先配置保养明细, standard:{}", standard);
                continue;
            }
            //开始生成
            EamInspectionOrderRequest request = new EamInspectionOrderRequest();
            request.setEquipmentId(standard.getEquipmentId());
            request.setStandardId(standard.getId());
            request.setInspectionDate(DateUtils.localDateToDate(generateDate));
            request.setExpirationTime(DateUtils.localDateToDate(generateDate.plusDays(standard.getMaintenancePeriod())));
            request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
            String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.INSPECTION_ORDER_CODE_RULE);
            request.setOrderNum(codeSeq);
            List<EamInspectionOrderDetail> collect = standardDetailList.stream().map(EamInspectionOrderDetail::new).collect(Collectors.toList());
            request.setTableDetailList(collect);
            try {
                eamInspectionOrderService.addInspectionOrder(request);
            } catch (Exception e) {
                log.error("点检生成执行定时任务失败,{}", e.getMessage(), e);
            }
        }
        quartzLog.setIsSuccess(0);
        long endTime = System.currentTimeMillis();
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        sysQuartzLogService.save(quartzLog);
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/job/WeekMaintenanceOrderGenerateJob.java
@@ -13,7 +13,6 @@
import org.jeecg.modules.eam.service.IEamMaintenanceStandardDetailService;
import org.jeecg.modules.eam.service.IEamMaintenanceStandardService;
import org.jeecg.modules.eam.service.IEamWeekMaintenanceOrderService;
import org.jeecg.modules.mdc.util.ThrowableUtil;
import org.jeecg.modules.quartz.entity.QuartzJob;
import org.jeecg.modules.quartz.entity.SysQuartzLog;
import org.jeecg.modules.quartz.service.IQuartzJobService;
@@ -24,7 +23,6 @@
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.util.Date;
@@ -54,7 +52,6 @@
     * @throws JobExecutionException
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //任务日志
        SysQuartzLog quartzLog = new SysQuartzLog();
@@ -74,53 +71,51 @@
        }
        //当前日期
        LocalDate now = LocalDate.now();
        try {
            for (EamMaintenanceStandard standard : standardList) {
                if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) {
                    log.error("周保标准周期设置错误,请先配置标准周期, standard:{}", standard);
                    continue;
                }
                if (standard.getInitialDate() == null) {
                    //设置初始日期为前一天
                    standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1)));
                }
                LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate());
                if (standard.getLastGenerateTime() != null) {
                    generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime());
                }
                //加周期
                do {
                    //初始日期设置的比较早,或任务长时间没执行,必须周期到今天才会生成工单
                    generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
                } while (now.isAfter(generateDate));
                if(!now.isEqual(generateDate)) {
                    //还未到生成日期,跳过执行
                    continue;
                }
                //获取保养项明细
                List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
                if(CollectionUtil.isEmpty(standardDetailList)) {
                    log.error("周保标准没有保养明细,请先配置保养明细, standard:{}", standard);
                    continue;
                }
                //开始生成
                EamWeekMaintenanceRequest request = new EamWeekMaintenanceRequest();
                request.setEquipmentId(standard.getEquipmentId());
                request.setStandardId(standard.getId());
                request.setMaintenanceDate(DateUtils.localDateToDate(generateDate));
                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.WEEK_MAINTENANCE_CODE_RULE);
                request.setOrderNum(codeSeq);
                request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
                List<EamWeekMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamWeekMaintenanceOrderDetail::new).collect(Collectors.toList());
                request.setTableDetailList(collect);
                eamWeekMaintenanceOrderService.addWeekMaintenance(request);
        for (EamMaintenanceStandard standard : standardList) {
            if (standard.getMaintenancePeriod() == null || standard.getMaintenancePeriod() < 1) {
                log.error("周保标准周期设置错误,请先配置标准周期, standard:{}", standard);
                continue;
            }
            quartzLog.setIsSuccess(0);
        } catch (Exception e) {
            log.error("周保过生成执行定时任务失败,{}", e.getMessage(), e);
            quartzLog.setIsSuccess(-1);
            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
            if (standard.getInitialDate() == null) {
                //设置初始日期为前一天
                standard.setInitialDate(DateUtils.localDateToDate(now.minusDays(1)));
            }
            LocalDate generateDate = DateUtils.dateToLocalDate(standard.getInitialDate());
            if (standard.getLastGenerateTime() != null) {
                generateDate = DateUtils.dateToLocalDate(standard.getLastGenerateTime());
            }
            //加周期
            do {
                //初始日期设置的比较早,或任务长时间没执行,必须周期到今天才会生成工单
                generateDate = generateDate.plusDays(standard.getMaintenancePeriod());
            } while (now.isAfter(generateDate));
            if(!now.isEqual(generateDate)) {
                //还未到生成日期,跳过执行
                continue;
            }
            //获取保养项明细
            List<EamMaintenanceStandardDetail> standardDetailList = eamMaintenanceStandardDetailService.selectByStandardId(standard.getId());
            if(CollectionUtil.isEmpty(standardDetailList)) {
                log.error("周保标准没有保养明细,请先配置保养明细, standard:{}", standard);
                continue;
            }
            //开始生成
            EamWeekMaintenanceRequest request = new EamWeekMaintenanceRequest();
            request.setEquipmentId(standard.getEquipmentId());
            request.setStandardId(standard.getId());
            request.setMaintenanceDate(DateUtils.localDateToDate(generateDate));
            String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(BusinessCodeConst.WEEK_MAINTENANCE_CODE_RULE);
            request.setOrderNum(codeSeq);
            request.setCreationMethod(OrderCreationMethodEnum.AUTO.name());
            List<EamWeekMaintenanceOrderDetail> collect = standardDetailList.stream().map(EamWeekMaintenanceOrderDetail::new).collect(Collectors.toList());
            request.setTableDetailList(collect);
            try {
                eamWeekMaintenanceOrderService.addWeekMaintenance(request);
            } catch (Exception e) {
                log.error("周保生成执行定时任务失败,{}", e.getMessage(), e);
            }
        }
        quartzLog.setIsSuccess(0);
        long endTime = System.currentTimeMillis();
        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
        sysQuartzLogService.save(quartzLog);
lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamInspectionOrderServiceImpl.java
@@ -663,7 +663,9 @@
        List<EamInspectionOrderDetail> eamInspectionOrderDetails = eamInspectionOrderDetailService
                .list(new QueryWrapper<EamInspectionOrderDetail>()
                        .eq("order_id", eamInspectionOrder.getId()).eq("report_flag", "1").eq("inspection_result", "2"));
        eamReportRepairService.reportRepairFromInspection(eamInspectionOrder.getEquipmentId(), eamInspectionOrder.getOperator(), eamInspectionOrderDetails);
        if (!eamInspectionOrderDetails.isEmpty()) {
            eamReportRepairService.reportRepairFromInspection(eamInspectionOrder.getEquipmentId(), eamInspectionOrder.getOperator(), eamInspectionOrderDetails);
        }
    }
    /**
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
ÎļþÒÑɾ³ý
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
@@ -198,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);
@@ -286,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);
@@ -361,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; // æ‰¾åˆ°åŒ¹é…é¡¹åŽç«‹å³é€€å‡ºå¾ªçŽ¯ï¼Œæå‡æ•ˆçŽ‡
                    }
                }
            }
        }
@@ -400,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; // æ‰¾åˆ°åŒ¹é…é¡¹åŽç«‹å³é€€å‡ºå¾ªçŽ¯ï¼Œæå‡æ•ˆçŽ‡
                    }
                }
            }
        }
@@ -546,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);
@@ -634,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);
@@ -708,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; // æ‰¾åˆ°åŒ¹é…é¡¹åŽç«‹å³é€€å‡ºå¾ªçŽ¯ï¼Œæå‡æ•ˆçŽ‡
                    }
                }
            }
        }
@@ -748,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; // æ‰¾åˆ°åŒ¹é…é¡¹åŽç«‹å³é€€å‡ºå¾ªçŽ¯ï¼Œæå‡æ•ˆçŽ‡
                    }
                }
            }
        }
@@ -917,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);
@@ -1027,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);
@@ -1101,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; // æ‰¾åˆ°åŒ¹é…é¡¹åŽç«‹å³é€€å‡ºå¾ªçŽ¯ï¼Œæå‡æ•ˆçŽ‡
                    }
                }
            }
        }
@@ -1141,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; // æ‰¾åˆ°åŒ¹é…é¡¹åŽç«‹å³é€€å‡ºå¾ªçŽ¯ï¼Œæå‡æ•ˆçŽ‡
                    }
                }
            }
        }
@@ -1173,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; // æ‰¾åˆ°åŒ¹é…é¡¹åŽç«‹å³é€€å‡ºå¾ªçŽ¯ï¼Œæå‡æ•ˆçŽ‡
                            }
                        }
                    }
                }
@@ -1193,6 +1388,7 @@
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    break;
                }
            }
        }
@@ -1208,6 +1404,7 @@
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    break;
                }
            }
        }
@@ -1766,11 +1963,25 @@
        } 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();
        long rate = dto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
        for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
            if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                dto.setColor(mdcUtilizationRate.getRateParameterColor());
                // ç®€åŒ–条件判断:处于[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())) {
@@ -2149,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())) {
@@ -2187,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; // æ‰¾åˆ°åŒ¹é…é¡¹åŽç«‹å³é€€å‡ºå¾ªçŽ¯ï¼Œæå‡æ•ˆçŽ‡
                            }
                        }
                    }
                }
@@ -2207,6 +2448,7 @@
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    break;
                }
            }
        }
@@ -2222,6 +2464,7 @@
            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                    break;
                }
            }
        }