From 2d31ce3309c2396f8bd3e197715a23bebc7c03fb Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期一, 01 九月 2025 21:47:35 +0800
Subject: [PATCH] 处理利用率范围区间问题

---
 /dev/null                                                                                            |  110 ------------
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java |  383 ++++++++++++++++++++++++++++++++++-------
 2 files changed, 313 insertions(+), 180 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
deleted file mode 100644
index 8468390..0000000
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
+++ /dev/null
@@ -1,110 +0,0 @@
-//package org.jeecg.modules.mdc.job;
-//
-//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.commons.lang.StringUtils;
-//import org.jeecg.common.constant.CommonConstant;
-//import org.jeecg.modules.mdc.dto.MdcEquipmentWaitSectionDto;
-//import org.jeecg.modules.mdc.entity.MdcDowntime;
-//import org.jeecg.modules.mdc.entity.MdcEquipmentOvertime;
-//import org.jeecg.modules.mdc.entity.MdcEquipmentRunningSection;
-//import org.jeecg.modules.mdc.service.IMdcDowntimeService;
-//import org.jeecg.modules.mdc.service.IMdcEquipmentRunningSectionService;
-//import org.jeecg.modules.mdc.util.DateUtils;
-//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;
-//import org.jeecg.modules.quartz.service.ISysQuartzLogService;
-//import org.jeecg.modules.system.service.ISysAnnouncementService;
-//import org.quartz.*;
-//
-//import javax.annotation.Resource;
-//import java.util.Date;
-//import java.util.List;
-//import java.util.stream.Collectors;
-//
-///**
-// * @Author: Lius
-// * @CreateTime: 2025-03-12
-// * @Description: 鎵弿鍋滄満浠诲姟
-// */
-//@PersistJobDataAfterExecution
-//@DisallowConcurrentExecution
-//@Slf4j
-//public class ScanDowntimeJob implements Job {
-//
-//    /**
-//     * 鑻ュ弬鏁板彉閲忓悕淇敼 QuartzJobController涓篃闇�瀵瑰簲淇敼  鏃堕棿锛� yyyyMMdd 渚嬶細 20230414
-//     */
-//    private String parameter;
-//
-//    public void setParameter(String parameter) {
-//        this.parameter = parameter;
-//    }
-//
-//    @Resource
-//    private IQuartzJobService quartzJobService;
-//
-//    @Resource
-//    private ISysAnnouncementService sysAnnouncementService;
-//
-//    @Resource
-//    private ISysQuartzLogService sysQuartzLogService;
-//
-//    @Resource
-//    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
-//
-//    @Resource
-//    private IMdcDowntimeService mdcDowntimeService;
-//
-//    @Override
-//    public void execute(JobExecutionContext context) throws JobExecutionException {
-//        SysQuartzLog quartzLog = new SysQuartzLog();
-//        quartzLog.setCreateTime(new Date());
-//        List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName());
-//        if (byJobClassName != null && !byJobClassName.isEmpty()) {
-//            quartzLog.setJobId(byJobClassName.get(0).getId());
-//        }
-//        quartzLog.setParams(this.parameter);
-//        log.info("瀹氭椂鎵弿寰呮満鏃堕暱瓒�20鍒嗛挓璁惧浠诲姟 ScanDowntimeJob start!  鏃堕棿:{}, 鍙傛暟锛歿}", DateUtils.getNow(), this.parameter);
-//        long startTime = System.currentTimeMillis();
-//        try {
-//            String date = "";
-//            if (StringUtils.isNotBlank(this.parameter)) {
-//                date = DateUtils.format(DateUtils.toDate(this.parameter, DateUtils.STRDATE), DateUtils.STR_DATE);
-//
-//            } else {
-//                date = DateUtils.format(DateUtils.getNow(), DateUtils.STR_DATE);
-//            }
-//            mdcDowntimeService.remove(new LambdaQueryWrapper<MdcDowntime>().eq(MdcDowntime::getTheDate, date).eq(MdcDowntime::getStatus, CommonConstant.DOWNTIME_STATUS_0));
-//
-//            List<MdcEquipmentWaitSectionDto> mdcEquipmentRunningSections = mdcEquipmentRunningSectionService.findWaitList(date);
-//
-//            if (mdcEquipmentRunningSections != null && !mdcEquipmentRunningSections.isEmpty()) {
-//                String finalDate = date;
-//                List<MdcDowntime> downtimeList = mdcEquipmentRunningSections.stream().map(mdcEquipmentWaitSectionDto -> {
-//                    MdcDowntime downtime = new MdcDowntime();
-//                    downtime.setEquipmentId(mdcEquipmentWaitSectionDto.getEquipmentId());
-//                    downtime.setEquipmentName(mdcEquipmentWaitSectionDto.getEquipmentName());
-//                    downtime.setTheDate(finalDate);
-//                    downtime.setStartDate(mdcEquipmentWaitSectionDto.getStartTime());
-//                    downtime.setEndDate(mdcEquipmentWaitSectionDto.getEndTime());
-//                    return downtime;
-//                }).collect(Collectors.toList());
-//                if (!downtimeList.isEmpty()) {
-//                    mdcDowntimeService.saveBatch(downtimeList);
-//                }
-//            }
-//            quartzLog.setIsSuccess(0);
-//        } catch (Exception e) {
-//            quartzLog.setIsSuccess(-1);
-//            quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
-//            // 鍙戦�佹秷鎭�氱煡
-//            sysAnnouncementService.jobSendMessage("瀹氭椂鎵弿寰呮満鏃堕暱瓒�20鍒嗛挓璁惧浠诲姟", quartzLog.getExceptionDetail());
-//        }
-//        long endTime = System.currentTimeMillis();
-//        quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
-//        sysQuartzLogService.save(quartzLog);
-//    }
-//}
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
index 983d677..99105f7 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java
+++ b/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());
+                    // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+                    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());
+                    // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+                    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());
+            // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+            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());
+            // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+            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());
+                    // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+                    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());
+                    // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+                    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());
+            // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+            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());
+            // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+            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());
+                    // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+                    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());
+                    // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+                    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());
+            // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+            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());
+            // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+            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());
+                    // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+                    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"));
         }
+        // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+        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());
+        // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+        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());
+                    // 璁$畻鍒╃敤鐜囩櫨鍒嗘瘮锛堣浆涓簂ong绫诲瀷锛�
+                    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;
                 }
             }
         }

--
Gitblit v1.9.3