From f69452a6d1afcb710880b6ad172663316e3b3610 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期二, 14 一月 2025 11:50:15 +0800
Subject: [PATCH] update

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java | 1052 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 1,008 insertions(+), 44 deletions(-)

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 bf39c27..f6a2e6d 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
@@ -1,22 +1,15 @@
 package org.jeecg.modules.mdc.service.impl;
 
-import com.alipay.api.domain.NewsfeedMediaGiftInfo;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.apache.commons.lang3.StringUtils;
-import org.checkerframework.checker.units.qual.A;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.mdc.dto.*;
-import org.jeecg.modules.mdc.entity.MdcEquipment;
-import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalShiftInfo;
-import org.jeecg.modules.mdc.entity.MdcShiftSub;
-import org.jeecg.modules.mdc.entity.MdcUtilizationRate;
+import org.jeecg.modules.mdc.entity.*;
 import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper;
-import org.jeecg.modules.mdc.service.IMdcEquipmentService;
-import org.jeecg.modules.mdc.service.IMdcShiftSubService;
-import org.jeecg.modules.mdc.service.IMdcUtilizationRateService;
-import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
+import org.jeecg.modules.mdc.service.*;
 import org.jeecg.modules.mdc.util.DateUtils;
+import org.jeecg.modules.mdc.vo.MdcUtilizationRateDto;
 import org.jeecg.modules.mdc.vo.*;
 import org.jeecg.modules.system.entity.MdcProduction;
 import org.jeecg.modules.system.entity.SysDepart;
@@ -26,8 +19,7 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
@@ -58,6 +50,12 @@
 
     @Resource
     private IMdcShiftSubService mdcShiftSubService;
+
+    @Resource
+    private IMdcEquipmentRunningSectionService mdcEquipmentRunningSectionService;
+
+    @Resource
+    private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService;
 
     /**
      * 鍒╃敤鐜囨姤琛�
@@ -99,26 +97,36 @@
         List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
         result.setDates(dates);
 
+        // 鍒╃敤鐜囩瓑绾�
+        List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
+
         if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
             result.setMdcEfficiencyList(listDtos);
         } else {
+
+            List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo);
+            if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
+                vo.setEquipmentIdList(equipmentIdList);
+            } else {
+                result.setMdcEfficiencyList(listDtos);
+                return result;
+            }
+
             // 鏌ヨ鍒╃敤鐜囨暟鎹�
             List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
-            // 鍒╃敤鐜囩瓑绾�
-            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
-
             // 灏佽缁撴灉
             if ("2".equals(vo.getTypeTree())) {
                 // 閮ㄩ棬灞傜骇
                 List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                 // 鏌ヨ鎵�鏈夐儴闂ㄤ俊鎭�
-                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
 
                 for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                     MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
                     mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                     mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                     mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+                    mdcEfficiencyListDto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
                     switch (mdcEquDepDto.getOrgType()) {
                         case "1":
                             mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
@@ -164,9 +172,36 @@
                         }
                     }
                     List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
+                    MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto();
+                    mdcEfficiencyResultDto1.setTheDate("鍚堣");
+                    mdcEfficiencyResultDto.setTheDate("骞冲潎鍊�");
                     for (String date : dates) {
-                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
+                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto));
                     }
+                    mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong());
+                    mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate());
+                    mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate());
+                    mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate());
+                    mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong());
+                    mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong());
+                    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());
+                        }
+                    }
+                    list.add(mdcEfficiencyResultDto1);
+                    list.add(mdcEfficiencyResultDto);
                     mdcEfficiencyListDto.setDataList(list);
                     listDtos.add(mdcEfficiencyListDto);
                 }
@@ -174,13 +209,14 @@
                 // 浜х嚎灞傜骇
                 List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                 // 鏌ヨ鎵�鏈変骇绾夸俊鎭�
-                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
 
                 for (MdcEquProDto mdcEquProDto : equipmentList) {
                     MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
                     mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                     mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                     mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+                    mdcEfficiencyListDto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
                     switch (mdcEquProDto.getOrgType()) {
                         case "1":
                             mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
@@ -225,17 +261,149 @@
                         }
                     }
                     List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
+                    MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto();
+                    mdcEfficiencyResultDto1.setTheDate("鍚堣");
+                    mdcEfficiencyResultDto.setTheDate("骞冲潎鍊�");
                     for (String date : dates) {
-                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
+                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto));
                     }
+                    mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong());
+                    mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate());
+                    mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate());
+                    mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate());
+                    mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong());
+                    mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong());
+                    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());
+                        }
+                    }
+                    list.add(mdcEfficiencyResultDto1);
+                    list.add(mdcEfficiencyResultDto);
                     mdcEfficiencyListDto.setDataList(list);
                     listDtos.add(mdcEfficiencyListDto);
                 }
             }
-
             result.setMdcEfficiencyList(listDtos);
         }
+        // 娣诲姞鍚堣鍊煎拰骞冲潎鍊�
+        result.getDates().add("鍚堣");
+        result.getDates().add("骞冲潎鍊�");
+        MdcEfficiencyListDto sum = new MdcEfficiencyListDto();
+        sum.setLevel1("鍚堣");
+        sum.setLevel2("鍚堣");
+        sum.setLevel3("鍚堣");
+        sum.setEquipmentId("鍚堣");
+        sum.setEquipmentName("鍚堣");
+        sum.setEquipmentType("鍚堣");
+        //璁$畻鍚堣鍊�
+        sum.setDataList(this.calculateTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList));
 
+        MdcEfficiencyListDto avg = new MdcEfficiencyListDto();
+        avg.setLevel1("骞冲潎鍊�");
+        avg.setLevel2("骞冲潎鍊�");
+        avg.setLevel3("骞冲潎鍊�");
+        avg.setEquipmentId("骞冲潎鍊�");
+        avg.setEquipmentName("骞冲潎鍊�");
+        avg.setEquipmentType("骞冲潎鍊�");
+        //璁$畻骞冲潎鍊�
+        avg.setDataList(this.calculateAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList));
+        result.getMdcEfficiencyList().add(sum);
+        result.getMdcEfficiencyList().add(avg);
+        return result;
+    }
+
+    /**
+     * 璁$畻骞冲潎鍊�
+     *
+     * @param mdcEfficiencyList
+     * @param mdcUtilizationRateList
+     * @return
+     */
+    private List<MdcEfficiencyResultDto> calculateAverage(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        List<MdcEfficiencyResultDto> result = new ArrayList<>();
+        List<MdcEfficiencyResultDto> dataList = new ArrayList<>();
+        for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) {
+            dataList.addAll(mdcEfficiencyListDto.getDataList());
+        }
+        dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList()))
+                .forEach((theDate, mert) -> {
+                    mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto(
+                            a.getTheDate(),
+                            a.getProcessLong().add(b.getProcessLong()),
+                            a.getUtilizationRate().add(b.getUtilizationRate()),
+                            a.getStartRate().add(b.getStartRate()),
+                            a.getOpenRate().add(b.getOpenRate()),
+                            a.getOpenLong().add(b.getOpenLong()),
+                            a.getWaitLong().add(b.getWaitLong()),
+                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                });
+        for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) {
+            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));
+            mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
+            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());
+                }
+            }
+        }
+        result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate));
+        return result;
+    }
+
+    /**
+     * 璁$畻鍚堣鍊�
+     *
+     * @param mdcEfficiencyList
+     * @return
+     */
+    private List<MdcEfficiencyResultDto> calculateTotal(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        List<MdcEfficiencyResultDto> result = new ArrayList<>();
+        List<MdcEfficiencyResultDto> dataList = new ArrayList<>();
+        for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) {
+            dataList.addAll(mdcEfficiencyListDto.getDataList());
+        }
+        dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList()))
+                .forEach((theDate, mert) -> {
+                    mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto(
+                            a.getTheDate(),
+                            a.getProcessLong().add(b.getProcessLong()),
+                            a.getUtilizationRate().add(b.getUtilizationRate()),
+                            a.getStartRate().add(b.getStartRate()),
+                            a.getOpenRate().add(b.getOpenRate()),
+                            a.getOpenLong().add(b.getOpenLong()),
+                            a.getWaitLong().add(b.getWaitLong()),
+                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                });
+        for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) {
+            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());
+                }
+            }
+        }
+        result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate));
         return result;
     }
 
@@ -279,26 +447,36 @@
         List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
         result.setDates(dates);
 
+        // 鍒╃敤鐜囩瓑绾�
+        List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl");
+
         if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
             result.setMdcEfficiencyList(listDtos);
         } else {
+            
+            List<String> equipmentIdList = mdcEquipmentService.listEquipmentId(vo);
+            if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
+                vo.setEquipmentIdList(equipmentIdList);
+            } else {
+                result.setMdcEfficiencyList(listDtos);
+                return result;
+            }
             // 鏌ヨ鍒╃敤鐜囨暟鎹�
             List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyPOList(vo);
-            // 鍒╃敤鐜囩瓑绾�
-            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl");
 
             // 灏佽缁撴灉
             if ("2".equals(vo.getTypeTree())) {
                 // 閮ㄩ棬灞傜骇
                 List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                 // 鏌ヨ鎵�鏈夐儴闂ㄤ俊鎭�
-                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
 
                 for (MdcEquDepDto mdcEquDepDto : equipmentList) {
                     MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
                     mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                     mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                     mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+                    mdcEfficiencyListDto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
                     switch (mdcEquDepDto.getOrgType()) {
                         case "1":
                             mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
@@ -344,9 +522,36 @@
                         }
                     }
                     List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
+                    MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto();
+                    mdcEfficiencyResultDto1.setTheDate("鍚堣");
+                    mdcEfficiencyResultDto.setTheDate("骞冲潎鍊�");
                     for (String date : dates) {
-                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
+                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto));
                     }
+                    mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong());
+                    mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate());
+                    mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate());
+                    mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate());
+                    mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong());
+                    mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong());
+                    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());
+                        }
+                    }
+                    list.add(mdcEfficiencyResultDto1);
+                    list.add(mdcEfficiencyResultDto);
                     mdcEfficiencyListDto.setDataList(list);
                     listDtos.add(mdcEfficiencyListDto);
                 }
@@ -354,13 +559,14 @@
                 // 浜х嚎灞傜骇
                 List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                 // 鏌ヨ鎵�鏈変骇绾夸俊鎭�
-                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
 
                 for (MdcEquProDto mdcEquProDto : equipmentList) {
                     MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
                     mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                     mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                     mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+                    mdcEfficiencyListDto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
                     switch (mdcEquProDto.getOrgType()) {
                         case "1":
                             mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
@@ -405,17 +611,149 @@
                         }
                     }
                     List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
+                    MdcEfficiencyResultDto mdcEfficiencyResultDto1 = new MdcEfficiencyResultDto();
+                    mdcEfficiencyResultDto1.setTheDate("鍚堣");
+                    mdcEfficiencyResultDto.setTheDate("骞冲潎鍊�");
                     for (String date : dates) {
-                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
+                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyResultDto));
                     }
+                    mdcEfficiencyResultDto1.setProcessLong(mdcEfficiencyResultDto.getProcessLong());
+                    mdcEfficiencyResultDto.setProcessLong(mdcEfficiencyResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setUtilizationRate(mdcEfficiencyResultDto.getUtilizationRate());
+                    mdcEfficiencyResultDto.setStartRate(mdcEfficiencyResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setStartRate(mdcEfficiencyResultDto.getStartRate());
+                    mdcEfficiencyResultDto.setOpenRate(mdcEfficiencyResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setOpenRate(mdcEfficiencyResultDto.getOpenRate());
+                    mdcEfficiencyResultDto1.setOpenLong(mdcEfficiencyResultDto.getOpenLong());
+                    mdcEfficiencyResultDto.setOpenLong(mdcEfficiencyResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyResultDto1.setWaitLong(mdcEfficiencyResultDto.getWaitLong());
+                    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());
+                        }
+                    }
+                    list.add(mdcEfficiencyResultDto1);
+                    list.add(mdcEfficiencyResultDto);
                     mdcEfficiencyListDto.setDataList(list);
                     listDtos.add(mdcEfficiencyListDto);
                 }
             }
-
             result.setMdcEfficiencyList(listDtos);
         }
+        result.getDates().add("鍚堣");
+        result.getDates().add("骞冲潎鍊�");
+        MdcEfficiencyListDto sum = new MdcEfficiencyListDto();
+        sum.setLevel1("鍚堣");
+        sum.setLevel2("鍚堣");
+        sum.setLevel3("鍚堣");
+        sum.setEquipmentId("鍚堣");
+        sum.setEquipmentName("鍚堣");
+        sum.setEquipmentType("鍚堣");
+        //璁$畻鍚堣鍊�
+        sum.setDataList(this.calculateOpenTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList));
 
+        MdcEfficiencyListDto avg = new MdcEfficiencyListDto();
+        avg.setLevel1("骞冲潎鍊�");
+        avg.setLevel2("骞冲潎鍊�");
+        avg.setLevel3("骞冲潎鍊�");
+        avg.setEquipmentId("骞冲潎鍊�");
+        avg.setEquipmentName("骞冲潎鍊�");
+        avg.setEquipmentType("骞冲潎鍊�");
+        //璁$畻骞冲潎鍊�
+        avg.setDataList(this.calculateOpenAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList));
+        result.getMdcEfficiencyList().add(sum);
+        result.getMdcEfficiencyList().add(avg);
+        return result;
+    }
+
+    /**
+     * 璁$畻骞冲潎鍊�
+     *
+     * @param mdcEfficiencyList
+     * @param mdcUtilizationRateList
+     * @return
+     */
+    private List<MdcEfficiencyResultDto> calculateOpenAverage(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        List<MdcEfficiencyResultDto> result = new ArrayList<>();
+        List<MdcEfficiencyResultDto> dataList = new ArrayList<>();
+        for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) {
+            dataList.addAll(mdcEfficiencyListDto.getDataList());
+        }
+        dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList()))
+                .forEach((theDate, mert) -> {
+                    mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto(
+                            a.getTheDate(),
+                            a.getProcessLong().add(b.getProcessLong()),
+                            a.getUtilizationRate().add(b.getUtilizationRate()),
+                            a.getStartRate().add(b.getStartRate()),
+                            a.getOpenRate().add(b.getOpenRate()),
+                            a.getOpenLong().add(b.getOpenLong()),
+                            a.getWaitLong().add(b.getWaitLong()),
+                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                });
+        for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) {
+            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));
+            mdcEfficiencyResultDto.setCloseLong(mdcEfficiencyResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
+            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());
+                }
+            }
+        }
+        result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate));
+        return result;
+    }
+
+    /**
+     * 璁$畻鍚堣鍊�
+     *
+     * @param mdcEfficiencyList
+     * @param mdcUtilizationRateList
+     * @return
+     */
+    private List<MdcEfficiencyResultDto> calculateOpenTotal(List<MdcEfficiencyListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        List<MdcEfficiencyResultDto> result = new ArrayList<>();
+        List<MdcEfficiencyResultDto> dataList = new ArrayList<>();
+        for (MdcEfficiencyListDto mdcEfficiencyListDto : mdcEfficiencyList) {
+            dataList.addAll(mdcEfficiencyListDto.getDataList());
+        }
+        dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyResultDto::getTheDate, Collectors.toList()))
+                .forEach((theDate, mert) -> {
+                    mert.stream().reduce((a, b) -> new MdcEfficiencyResultDto(
+                            a.getTheDate(),
+                            a.getProcessLong().add(b.getProcessLong()),
+                            a.getUtilizationRate().add(b.getUtilizationRate()),
+                            a.getStartRate().add(b.getStartRate()),
+                            a.getOpenRate().add(b.getOpenRate()),
+                            a.getOpenLong().add(b.getOpenLong()),
+                            a.getWaitLong().add(b.getWaitLong()),
+                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                });
+        for (MdcEfficiencyResultDto mdcEfficiencyResultDto : result) {
+            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());
+                }
+            }
+        }
+        result.sort(Comparator.comparing(MdcEfficiencyResultDto::getTheDate));
         return result;
     }
 
@@ -456,14 +794,25 @@
             vo.setEquipmentIdList(equipmentIds);
         }
 
+        // 鐝鍒╃敤鐜囩瓑绾�
+        List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl");
+
         List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
         result.setDates(dates);
 
         if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
             result.setMdcEfficiencyList(listDtos);
         } else {
-            // 鐝鍒╃敤鐜囩瓑绾�
-            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("bclyl");
+
+            List<String> equipmentIdList = mdcEquipmentService.listEquipmentIdShift(vo);
+            if (equipmentIdList != null && !equipmentIdList.isEmpty()) {
+                vo.setEquipmentIdList(equipmentIdList);
+            } else {
+                result.setMdcEfficiencyList(listDtos);
+                return result;
+            }
+
+
             // 鐝鍒╃敤鐜囨暟鎹�
             List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList = mdcEfficiencyReportMapper.efficiencyShiftSumList(vo);
 
@@ -472,7 +821,7 @@
                 // 閮ㄩ棬灞傜骇
                 List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
                 // 鏌ヨ鎵�鏈夐儴闂ㄤ俊鎭�
-                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+                List<SysDepart> departList = sysDepartService.list(new LambdaQueryWrapper<SysDepart>().ne(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(SysDepart::getDepartOrder));
                 // 鐝鍚嶇О鏄剧ず澶勭悊
                 String shiftSubName = "";
                 if (StringUtils.isBlank(vo.getShiftId())) {
@@ -499,6 +848,7 @@
                     mdcEfficiencyShiftListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
                     mdcEfficiencyShiftListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
                     mdcEfficiencyShiftListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+                    mdcEfficiencyShiftListDto.setEquipmentModel(mdcEquDepDto.getEquipmentModel());
                     mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName);
                     switch (mdcEquDepDto.getOrgType()) {
                         case "1":
@@ -545,9 +895,36 @@
                         }
                     }
                     List<MdcEfficiencyShiftResultDto> list = new ArrayList<>();
+                    MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto();
+                    MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto1 = new MdcEfficiencyShiftResultDto();
+                    mdcEfficiencyShiftResultDto.setTheDate("骞冲潎鍊�");
+                    mdcEfficiencyShiftResultDto1.setTheDate("鍚堣");
                     for (String date : dates) {
-                        list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
+                        list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyShiftResultDto));
                     }
+                    mdcEfficiencyShiftResultDto1.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong());
+                    mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto1.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate());
+                    mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto1.setStartRate(mdcEfficiencyShiftResultDto.getStartRate());
+                    mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto1.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate());
+                    mdcEfficiencyShiftResultDto1.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong());
+                    mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto1.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong());
+                    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());
+                        }
+                    }
+                    list.add(mdcEfficiencyShiftResultDto1);
+                    list.add(mdcEfficiencyShiftResultDto);
                     mdcEfficiencyShiftListDto.setDataList(list);
                     listDtos.add(mdcEfficiencyShiftListDto);
                 }
@@ -555,7 +932,7 @@
                 // 浜х嚎灞傜骇
                 List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
                 // 鏌ヨ鎵�鏈変骇绾夸俊鎭�
-                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()).orderByAsc(MdcProduction::getProductionOrder));
 
                 // 鐝鍚嶇О鏄剧ず澶勭悊
                 String shiftSubName = "";
@@ -583,6 +960,7 @@
                     mdcEfficiencyShiftListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
                     mdcEfficiencyShiftListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
                     mdcEfficiencyShiftListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+                    mdcEfficiencyShiftListDto.setEquipmentModel(mdcEquProDto.getEquipmentModel());
                     mdcEfficiencyShiftListDto.setShiftSubName(shiftSubName);
                     switch (mdcEquProDto.getOrgType()) {
                         case "1":
@@ -628,33 +1006,176 @@
                         }
                     }
                     List<MdcEfficiencyShiftResultDto> list = new ArrayList<>();
+                    MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto();
+                    MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto1 = new MdcEfficiencyShiftResultDto();
+                    mdcEfficiencyShiftResultDto.setTheDate("骞冲潎鍊�");
+                    mdcEfficiencyShiftResultDto1.setTheDate("鍚堣");
                     for (String date : dates) {
-                        list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
+                        list.add(this.efficiencyShiftRate(mdcEquipmentStatisticalShiftInfoList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList, mdcEfficiencyShiftResultDto));
                     }
+                    mdcEfficiencyShiftResultDto1.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong());
+                    mdcEfficiencyShiftResultDto.setProcessLong(mdcEfficiencyShiftResultDto.getProcessLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto1.setUtilizationRate(mdcEfficiencyShiftResultDto.getUtilizationRate());
+                    mdcEfficiencyShiftResultDto.setStartRate(mdcEfficiencyShiftResultDto.getStartRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto1.setStartRate(mdcEfficiencyShiftResultDto.getStartRate());
+                    mdcEfficiencyShiftResultDto.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate().divide(new BigDecimal(dates.size()), 4, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto1.setOpenRate(mdcEfficiencyShiftResultDto.getOpenRate());
+                    mdcEfficiencyShiftResultDto1.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong());
+                    mdcEfficiencyShiftResultDto.setOpenLong(mdcEfficiencyShiftResultDto.getOpenLong().divide(new BigDecimal(dates.size()), 0, RoundingMode.HALF_UP));
+                    mdcEfficiencyShiftResultDto1.setWaitLong(mdcEfficiencyShiftResultDto.getWaitLong());
+                    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());
+                        }
+                    }
+                    list.add(mdcEfficiencyShiftResultDto1);
+                    list.add(mdcEfficiencyShiftResultDto);
                     mdcEfficiencyShiftListDto.setDataList(list);
                     listDtos.add(mdcEfficiencyShiftListDto);
                 }
             }
+//            listDtos.sort(((o1, o2) -> Collator.getInstance(Locale.TRADITIONAL_CHINESE).compare(o1.getLevel3(), o2.getLevel3())));
             result.setMdcEfficiencyList(listDtos);
         }
+        result.getDates().add("鍚堣");
+        result.getDates().add("骞冲潎鍊�");
+        MdcEfficiencyShiftListDto sum = new MdcEfficiencyShiftListDto();
+        sum.setLevel1("鍚堣");
+        sum.setLevel2("鍚堣");
+        sum.setLevel3("鍚堣");
+        sum.setEquipmentId("鍚堣");
+        sum.setEquipmentName("鍚堣");
+        sum.setEquipmentType("鍚堣");
+        sum.setShiftSubName("鍚堣");
+        sum.setDataList(this.calculateShiftTotal(result.getMdcEfficiencyList(), mdcUtilizationRateList));
+        MdcEfficiencyShiftListDto avg = new MdcEfficiencyShiftListDto();
+        avg.setLevel1("骞冲潎鍊�");
+        avg.setLevel2("骞冲潎鍊�");
+        avg.setLevel3("骞冲潎鍊�");
+        avg.setEquipmentId("骞冲潎鍊�");
+        avg.setEquipmentName("骞冲潎鍊�");
+        avg.setEquipmentType("骞冲潎鍊�");
+        avg.setShiftSubName("骞冲潎鍊�");
+        avg.setDataList(this.calculateShiftAverage(result.getMdcEfficiencyList(), mdcUtilizationRateList));
+        result.getMdcEfficiencyList().add(sum);
+        result.getMdcEfficiencyList().add(avg);
+        return result;
+    }
+
+    /**
+     * 璁$畻骞冲潎鍊�
+     *
+     * @param mdcEfficiencyList
+     * @param mdcUtilizationRateList
+     * @return
+     */
+    private List<MdcEfficiencyShiftResultDto> calculateShiftAverage(List<MdcEfficiencyShiftListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        List<MdcEfficiencyShiftResultDto> result = new ArrayList<>();
+        List<MdcEfficiencyShiftResultDto> dataList = new ArrayList<>();
+        for (MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto : mdcEfficiencyList) {
+            dataList.addAll(mdcEfficiencyShiftListDto.getDataList());
+        }
+        dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyShiftResultDto::getTheDate, Collectors.toList()))
+                .forEach((theDate, mert) -> {
+                    mert.stream().reduce((a, b) -> new MdcEfficiencyShiftResultDto(
+                            a.getTheDate(),
+                            a.getProcessLong().add(b.getProcessLong()),
+                            a.getUtilizationRate().add(b.getUtilizationRate()),
+                            a.getStartRate().add(b.getStartRate()),
+                            a.getOpenRate().add(b.getOpenRate()),
+                            a.getOpenLong().add(b.getOpenLong()),
+                            a.getWaitLong().add(b.getWaitLong()),
+                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                });
+        for (MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto : result) {
+            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));
+            mdcEfficiencyShiftResultDto.setCloseLong(mdcEfficiencyShiftResultDto.getCloseLong().divide(new BigDecimal(mdcEfficiencyList.size()), 0, RoundingMode.HALF_UP));
+            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());
+                }
+            }
+        }
+        result.sort(Comparator.comparing(MdcEfficiencyShiftResultDto::getTheDate));
+        return result;
+    }
+
+    /**
+     * 璁$畻鍚堣鍊�
+     *
+     * @param mdcEfficiencyList
+     * @param mdcUtilizationRateList
+     * @return
+     */
+    private List<MdcEfficiencyShiftResultDto> calculateShiftTotal(List<MdcEfficiencyShiftListDto> mdcEfficiencyList, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        List<MdcEfficiencyShiftResultDto> result = new ArrayList<>();
+        List<MdcEfficiencyShiftResultDto> dataList = new ArrayList<>();
+        for (MdcEfficiencyShiftListDto mdcEfficiencyShiftListDto : mdcEfficiencyList) {
+            dataList.addAll(mdcEfficiencyShiftListDto.getDataList());
+        }
+        dataList.parallelStream().collect(Collectors.groupingBy(MdcEfficiencyShiftResultDto::getTheDate, Collectors.toList()))
+                .forEach((theDate, mert) -> {
+                    mert.stream().reduce((a, b) -> new MdcEfficiencyShiftResultDto(
+                            a.getTheDate(),
+                            a.getProcessLong().add(b.getProcessLong()),
+                            a.getUtilizationRate().add(b.getUtilizationRate()),
+                            a.getStartRate().add(b.getStartRate()),
+                            a.getOpenRate().add(b.getOpenRate()),
+                            a.getOpenLong().add(b.getOpenLong()),
+                            a.getWaitLong().add(b.getWaitLong()),
+                            a.getCloseLong().add(b.getCloseLong()))).ifPresent(result::add);
+                });
+        for (MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto : result) {
+            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());
+                }
+            }
+        }
+        result.sort(Comparator.comparing(MdcEfficiencyShiftResultDto::getTheDate));
         return result;
     }
 
 
-    private MdcEfficiencyShiftResultDto efficiencyShiftRate(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) {
+    private MdcEfficiencyShiftResultDto efficiencyShiftRate(List<MdcEquipmentStatisticalShiftInfo> mdcEquipmentStatisticalShiftInfoList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList, MdcEfficiencyShiftResultDto efficiencyShiftResultDto) {
         MdcEfficiencyShiftResultDto mdcEfficiencyShiftResultDto = new MdcEfficiencyShiftResultDto();
         if (mdcEquipmentStatisticalShiftInfoList != null && !mdcEquipmentStatisticalShiftInfoList.isEmpty()) {
             for (MdcEquipmentStatisticalShiftInfo equipmentStatisticalShiftInfo : mdcEquipmentStatisticalShiftInfoList) {
                 if (date.equals(equipmentStatisticalShiftInfo.getTheDate()) && equipmentStatisticalShiftInfo.getEquipmentId().equals(equipmentId)) {
                     mdcEfficiencyShiftResultDto.setTheDate(equipmentStatisticalShiftInfo.getTheDate());
                     mdcEfficiencyShiftResultDto.setProcessLong(equipmentStatisticalShiftInfo.getProcessLong());
-                    mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP));
+                    if (equipmentStatisticalShiftInfo.getTotalLong().compareTo(BigDecimal.ZERO) == 0) {
+                        mdcEfficiencyShiftResultDto.setUtilizationRate(BigDecimal.ZERO);
+                    } else {
+                        mdcEfficiencyShiftResultDto.setUtilizationRate(equipmentStatisticalShiftInfo.getProcessLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, RoundingMode.HALF_UP));
+                    }
                     mdcEfficiencyShiftResultDto.setCloseLong(equipmentStatisticalShiftInfo.getCloseLong());
                     mdcEfficiencyShiftResultDto.setOpenLong(equipmentStatisticalShiftInfo.getOpenLong());
                     mdcEfficiencyShiftResultDto.setWaitLong(equipmentStatisticalShiftInfo.getWaitLong());
-                    mdcEfficiencyShiftResultDto.setOpenRate(equipmentStatisticalShiftInfo.getOpenLong().divide(equipmentStatisticalShiftInfo.getTotalLong(), 6, BigDecimal.ROUND_HALF_UP));
+                    if (equipmentStatisticalShiftInfo.getTotalLong().compareTo(BigDecimal.ZERO) == 0) {
+                        mdcEfficiencyShiftResultDto.setOpenRate(BigDecimal.ZERO);
+                    } 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 (mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && mdcEfficiencyShiftResultDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) {
+                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                             mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                         }
                     }
@@ -675,6 +1196,28 @@
                 }
             }
         }
+        if (StringUtils.isBlank(mdcEfficiencyShiftResultDto.getColor())) {
+            mdcEfficiencyShiftResultDto.setTheDate(date);
+            mdcEfficiencyShiftResultDto.setProcessLong(new BigDecimal("0"));
+            mdcEfficiencyShiftResultDto.setUtilizationRate(new BigDecimal("0"));
+            mdcEfficiencyShiftResultDto.setStartRate(new BigDecimal("0"));
+            mdcEfficiencyShiftResultDto.setOpenRate(new BigDecimal("0"));
+            mdcEfficiencyShiftResultDto.setOpenLong(new BigDecimal("0"));
+            mdcEfficiencyShiftResultDto.setWaitLong(new BigDecimal("0"));
+            mdcEfficiencyShiftResultDto.setCloseLong(new BigDecimal("0"));
+            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
+                    mdcEfficiencyShiftResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
+                }
+            }
+        }
+        efficiencyShiftResultDto.setProcessLong(efficiencyShiftResultDto.getProcessLong().add(mdcEfficiencyShiftResultDto.getProcessLong()));
+        efficiencyShiftResultDto.setUtilizationRate(efficiencyShiftResultDto.getUtilizationRate().add(mdcEfficiencyShiftResultDto.getUtilizationRate()));
+        efficiencyShiftResultDto.setStartRate(efficiencyShiftResultDto.getStartRate().add(mdcEfficiencyShiftResultDto.getStartRate()));
+        efficiencyShiftResultDto.setOpenRate(efficiencyShiftResultDto.getOpenRate().add(mdcEfficiencyShiftResultDto.getOpenRate()));
+        efficiencyShiftResultDto.setOpenLong(efficiencyShiftResultDto.getOpenLong().add(mdcEfficiencyShiftResultDto.getOpenLong()));
+        efficiencyShiftResultDto.setWaitLong(efficiencyShiftResultDto.getWaitLong().add(mdcEfficiencyShiftResultDto.getWaitLong()));
+        efficiencyShiftResultDto.setCloseLong(efficiencyShiftResultDto.getCloseLong().add(mdcEfficiencyShiftResultDto.getCloseLong()));
         return mdcEfficiencyShiftResultDto;
     }
 
@@ -755,10 +1298,10 @@
         }
         result = this.efficiencyStatisticalRate(efficiencyList);
         if (result.getOpenRate().compareTo(new BigDecimal("0")) > 0) {
-            result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP));
+            result.setOpenRate(result.getOpenRate().multiply(new BigDecimal("100")).divide(new BigDecimal(vo.getEquipmentIdList().size()), 2, BigDecimal.ROUND_HALF_UP));
         }
         if (result.getUtilizationRate().compareTo(new BigDecimal("0")) > 0) {
-            result.setUtilizationRate(result.getUtilizationRate().multiply(new BigDecimal(100)).divide(new BigDecimal(equipmentIds.size()), 2, BigDecimal.ROUND_HALF_UP));
+            result.setUtilizationRate(result.getUtilizationRate().multiply(new BigDecimal(100)).divide(new BigDecimal(vo.getEquipmentIdList().size()), 2, BigDecimal.ROUND_HALF_UP));
         }
         if (result.getOpenLong().compareTo(new BigDecimal(0)) > 0 && result.getProcessLong().compareTo(new BigDecimal(0)) > 0) {
             result.setUsedOpenRate(result.getProcessLong().divide(result.getOpenLong(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
@@ -783,7 +1326,7 @@
             }
         } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
             // 鍗曞彴璁惧淇℃伅
-            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
+            vo.setEquipmentIdList(Arrays.asList(vo.getEquipmentId().split(",")));
         } else {
             // 鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
             if ("2".equals(vo.getTypeTree())) {
@@ -808,7 +1351,7 @@
             List<GraphicsDto> graphicsDtos = new ArrayList<>();
             // 鑾峰彇澶╂暟
             long days = ChronoUnit.DAYS.between(LocalDate.parse(vo.getStartTime(), DateTimeFormatter.ofPattern("yyyyMMdd")), LocalDate.parse(vo.getEndTime(), DateTimeFormatter.ofPattern("yyyyMMdd"))) + 1;
-            BigDecimal time = new BigDecimal("24").multiply(new BigDecimal(days));
+            BigDecimal time = new BigDecimal("24").multiply(new BigDecimal(days)).multiply(new BigDecimal("60")).multiply(new BigDecimal("60"));
             for (MdcComAnaDto mdcComAnaDto : resultDtos) {
                 GraphicsDto graphicsDto = new GraphicsDto();
                 graphicsDto.setEquipmentId(mdcComAnaDto.getEquipmentId());
@@ -866,6 +1409,405 @@
         return result;
     }
 
+    /**
+     * 璁惧鏃ュ埄鐢ㄧ巼
+     *
+     * @param vo
+     * @return
+     */
+    @Override
+    public DayUtilizationRateDto dayUtilizationRate(String userId, DayUtilizationRateQueryVo vo) {
+        DayUtilizationRateDto result = new DayUtilizationRateDto();
+        if (StringUtils.isBlank(vo.getEquipmentId())) {
+            List<String> equipmentIds;
+            // 鑾峰彇鐢ㄦ埛鎷ユ湁璁惧鏉冮檺
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+            if (equipmentIds != null && !equipmentIds.isEmpty()) {
+                vo.setEquipmentId(equipmentIds.get(0));
+            }
+        }
+        result.setEquipmentId(vo.getEquipmentId());
+        MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId()));
+        result.setEquipmentName(mdcEquipment.getEquipmentName());
+        List<String> dateList = new ArrayList<>();
+        for (int i = 1; i <= 24 / vo.getTimeType(); i++) {
+            if (i * vo.getTimeType() < 10) {
+                dateList.add("0" + i * vo.getTimeType() + ":00");
+            } else {
+                dateList.add(i * vo.getTimeType() + ":00");
+            }
+        }
+
+        dateList.add(0, "00:00");
+
+        List<DayRateDto> dayRateDtoList = new ArrayList<>();
+        for (int i = 0; i < dateList.size() - 1; i++) {
+            DayRateDto dayRateDto = new DayRateDto();
+            dayRateDto.setDateTime(dateList.get(i + 1));
+            String dateTime = DateUtils.dateConvertion(vo.getDateTime());
+            Date startTime = DateUtils.toDate(dateTime + " " + dateList.get(i) + ":00", DateUtils.STR_DATE_TIME_SMALL);
+            Date endTime = DateUtils.toDate(dateTime + " " + dateList.get(i + 1) + ":00", DateUtils.STR_DATE_TIME_SMALL);
+            List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(vo.getEquipmentId(), startTime.getTime(), endTime.getTime());
+            if (runningSections != null && !runningSections.isEmpty()) {
+                // 鏃堕棿淇
+                runningSections.get(0).setStartTime(startTime);
+                if (runningSections.size() > 1) {
+                    runningSections.get(runningSections.size() - 1).setEndTime(endTime);
+                } else {
+                    runningSections.get(0).setEndTime(endTime);
+                }
+                // 鍒╃敤鐜囪绠�
+                BigDecimal processLong = new BigDecimal("0");
+                for (MdcEquipmentRunningSection runningSection : runningSections) {
+                    if (runningSection.getStatus() == 3) {
+                        long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime());
+                        processLong = processLong.add(new BigDecimal(duration));
+                    }
+                }
+                BigDecimal totalLong = new BigDecimal(vo.getTimeType()).multiply(new BigDecimal("60")).multiply(new BigDecimal("60"));
+                BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP);
+                dayRateDto.setUtilizationRate(utilizationRate);
+            } else {
+                dayRateDto.setUtilizationRate(new BigDecimal("0"));
+            }
+            dayRateDtoList.add(dayRateDto);
+        }
+        dateList.remove(0);
+        result.setDateList(dateList);
+        result.setDayRateDto(dayRateDtoList);
+
+        return result;
+    }
+
+    /**
+     * 璁惧鏃ュ埄鐢ㄧ巼瀵规瘮鍒嗘瀽
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    @Override
+    public DayUtilizationRateDto dayUtilizationRateContrast(String userId, DayUtilizationRateContrastQueryVo vo) {
+        DayUtilizationRateDto result = new DayUtilizationRateDto();
+        if (StringUtils.isBlank(vo.getEquipmentId())) {
+            List<String> equipmentIds;
+            // 鑾峰彇鐢ㄦ埛鎷ユ湁璁惧鏉冮檺
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+            if (equipmentIds != null && !equipmentIds.isEmpty()) {
+                vo.setEquipmentId(equipmentIds.get(0));
+            }
+        }
+        result.setEquipmentId(vo.getEquipmentId());
+        MdcEquipment mdcEquipment = mdcEquipmentService.getOne(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, vo.getEquipmentId()));
+        result.setEquipmentName(mdcEquipment.getEquipmentName());
+        Date start = DateUtils.toDate(vo.getStartDate(), DateUtils.STRDATE);
+        Date end = DateUtils.toDate(vo.getEndDate(), DateUtils.STRDATE);
+        List<String> dateList = DateUtils.getDatesStringLists(start, end);
+        result.setDateList(dateList);
+        List<String> datesStringList = DateUtils.getDatesStringList(start, end);
+        List<DayRateDto> dayRateDtoList = new ArrayList<>();
+        for (String date : datesStringList) {
+            DayRateDto dayRateDto = new DayRateDto();
+            String format = DateUtils.format(DateUtils.toDate(date, DateUtils.STR_DATE), DateUtils.STR_MMDD);
+            dayRateDto.setDateTime(format);
+            Date startTime = DateUtils.toDate(date + " " + vo.getStartTime() + ":00", DateUtils.STR_DATE_TIME_SMALL);
+            Date endTime = DateUtils.toDate(date + " " + vo.getEndTime() + ":00", DateUtils.STR_DATE_TIME_SMALL);
+            List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(vo.getEquipmentId(), startTime.getTime(), endTime.getTime());
+            if (runningSections != null && !runningSections.isEmpty()) {
+                //鏃堕棿淇
+                runningSections.get(0).setStartTime(startTime);
+                if (runningSections.size() > 1) {
+                    runningSections.get(runningSections.size() - 1).setEndTime(endTime);
+                } else {
+                    runningSections.get(0).setEndTime(endTime);
+                }
+                // 鍒╃敤鐜囪绠�
+                BigDecimal processLong = new BigDecimal("0");
+                for (MdcEquipmentRunningSection runningSection : runningSections) {
+                    if (runningSection.getStatus() == 3) {
+                        long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime());
+                        processLong = processLong.add(new BigDecimal(duration));
+                    }
+                }
+                BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime));
+                BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP);
+                dayRateDto.setUtilizationRate(utilizationRate);
+            } else {
+                dayRateDto.setUtilizationRate(new BigDecimal("0"));
+            }
+            dayRateDtoList.add(dayRateDto);
+        }
+        result.setDayRateDto(dayRateDtoList);
+        return result;
+    }
+
+    /**
+     * 璁惧鍒╃敤鐜囧垎娈靛垎鏋�
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    @Override
+    public MdcUtilizationRateDto utilizationRateSectionAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) {
+        MdcUtilizationRateDto result = new MdcUtilizationRateDto();
+        List<MdcUtilizationRateListDto> listDtos = new ArrayList<>();
+        List<String> equipmentIds = new ArrayList<>();
+        if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
+            }
+        } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
+            // 鍗曞彴璁惧淇℃伅
+            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
+        } else {
+            // 鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+        }
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            vo.setEquipmentIdList(equipmentIds);
+        }
+
+        List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
+        List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
+        result.setDates(dates);
+        String startString = vo.getStartTime();
+        String endString = vo.getEndTime();
+
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            result.setMdcEfficiencyList(listDtos);
+        } else {
+            // 鍒╃敤鐜囩瓑绾�
+            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
+
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
+
+                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
+                    MdcUtilizationRateListDto mdcUtilizationRateListDto = new MdcUtilizationRateListDto();
+                    mdcUtilizationRateListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
+                    mdcUtilizationRateListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
+                    mdcUtilizationRateListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+                    //
+                    List<MdcUtilizationResultDto> list = new ArrayList<>();
+                    for (String date : dateList) {
+                        Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL);
+                        Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL);
+                        list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
+                    }
+                    mdcUtilizationRateListDto.setDataList(list);
+                    listDtos.add(mdcUtilizationRateListDto);
+                }
+
+            } else {
+                // 浜х嚎灞傜骇
+                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
+
+                for (MdcEquProDto mdcEquProDto : equipmentList) {
+                    MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+                    //
+                    List<MdcUtilizationResultDto> list = new ArrayList<>();
+                    for (String date : dateList) {
+                        Date startTime = DateUtils.toDate(date + " " + startString + ":00", DateUtils.STR_DATE_TIME_SMALL);
+                        Date endTime = DateUtils.toDate(date + " " + endString + ":00", DateUtils.STR_DATE_TIME_SMALL);
+                        list.add(this.utilizationRate(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+            }
+            result.setMdcEfficiencyList(listDtos);
+        }
+        return result;
+    }
+
+    /**
+     * 璁惧鍒╃敤鐜囪蛋鍔垮垎鏋�
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    @Override
+    public MdcUtilizationRateDto utilizationRateTrendAnalyze(String userId, DayUtilizationRateContrastQueryVo vo) {
+        MdcUtilizationRateDto result = new MdcUtilizationRateDto();
+        List<MdcUtilizationRateListDto> listDtos = new ArrayList<>();
+        List<String> equipmentIds = new ArrayList<>();
+        if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
+            }
+        } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
+            // 鍗曞彴璁惧淇℃伅
+            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
+        } else {
+            // 鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+        }
+
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            vo.setEquipmentIdList(equipmentIds);
+        }
+
+        List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate2(vo.getStartDate()), DateUtils.getShortDate2(vo.getEndDate()));
+        result.setDates(dateList);
+
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            result.setMdcEfficiencyList(listDtos);
+        } else {
+            // 鍒╃敤鐜囩瓑绾�
+            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                List<MdcEquDepDto> equipmentList = mdcEquipmentService.findEquDepList(vo.getEquipmentIdList());
+
+                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
+                    MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+
+                    List<MdcUtilizationResultDto> list = new ArrayList<>();
+                    for (String date : dateList) {
+//                        Date startTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
+//                        Date endTime = DateUtils.toDate(date + " 00:00:00", DateUtils.STR_DATE_TIME_SMALL);
+//                        endTime = DateUtils.addDays(endTime, 1);
+//                        list.add(this.utilizationRate(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), startTime, endTime, date, mdcUtilizationRateList));
+                        list.add(this.utilizationRateTrend(mdcEquDepDto.getEquipmentId(), mdcEquDepDto.getEquipmentName(), mdcEquDepDto.getEquipmentType(), date, mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+
+            } else {
+                // 浜х嚎灞傜骇
+                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
+
+                for (MdcEquProDto mdcEquProDto : equipmentList) {
+                    MdcUtilizationRateListDto mdcEfficiencyListDto = new MdcUtilizationRateListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+                    List<MdcUtilizationResultDto> list = new ArrayList<>();
+                    for (String date : dateList) {
+                        list.add(this.utilizationRateTrend(mdcEquProDto.getEquipmentId(), mdcEquProDto.getEquipmentName(), mdcEquProDto.getEquipmentType(), date, mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+            }
+            result.setMdcEfficiencyList(listDtos);
+        }
+
+        return result;
+    }
+
+    private MdcUtilizationResultDto utilizationRateTrend(String equipmentId, String equipmentName, String equipmentType, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
+        dto.setEquipmentId(equipmentId);
+        dto.setEquipmentName(equipmentName);
+        dto.setEquipmentType(equipmentType);
+        dto.setTheDate(date);
+        MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findMdcEquipmentStatisticalInfo(equipmentId, date);
+        if (mdcEquipmentStatisticalInfo != null) {
+            dto.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("86400"), 6, RoundingMode.HALF_UP));
+        } else {
+            dto.setUtilizationRate(new BigDecimal("0"));
+        }
+        long rate = dto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
+        for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+            if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
+                dto.setColor(mdcUtilizationRate.getRateParameterColor());
+            }
+        }
+        if (StringUtils.isBlank(dto.getColor())) {
+            dto.setColor(mdcUtilizationRateList.get(mdcUtilizationRateList.size() - 1).getRateParameterColor());
+        }
+        return dto;
+    }
+
+    @Override
+    public List<BigDecimal> getEfficiencyRate(String equipmentId, String date) {
+        return mdcEfficiencyReportMapper.getEfficiencyRate(equipmentId, date);
+    }
+
+    private MdcUtilizationResultDto utilizationRate(String equipmentId, String equipmentName, String equipmentType, Date startTime, Date endTime, String date, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        MdcUtilizationResultDto dto = new MdcUtilizationResultDto();
+        dto.setEquipmentId(equipmentId);
+        dto.setEquipmentName(equipmentName);
+        dto.setEquipmentType(equipmentType);
+        dto.setTheDate(date);
+        List<MdcEquipmentRunningSection> runningSections = mdcEquipmentRunningSectionService.listEquipmentRunningSection(equipmentId, startTime.getTime(), endTime.getTime());
+        if (runningSections != null && !runningSections.isEmpty()) {
+            // 鏃堕棿淇
+            runningSections.get(0).setStartTime(startTime);
+            if (runningSections.size() > 1) {
+                runningSections.get(runningSections.size() - 1).setEndTime(endTime);
+            } else {
+                runningSections.get(0).setEndTime(endTime);
+            }
+            // 鍒╃敤鐜囪绠�
+            BigDecimal processLong = new BigDecimal("0");
+            for (MdcEquipmentRunningSection runningSection : runningSections) {
+                if (runningSection.getStatus() == 3) {
+                    long duration = DateUtils.differentSecond(runningSection.getStartTime(), runningSection.getEndTime());
+                    processLong = processLong.add(new BigDecimal(duration));
+                }
+            }
+            BigDecimal totalLong = new BigDecimal(DateUtils.differentSecond(startTime, endTime));
+            BigDecimal utilizationRate = processLong.divide(totalLong, 6, BigDecimal.ROUND_HALF_UP);
+            dto.setUtilizationRate(utilizationRate);
+        } else {
+            dto.setUtilizationRate(new BigDecimal("0"));
+        }
+        long rate = dto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
+        for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+            if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
+                dto.setColor(mdcUtilizationRate.getRateParameterColor());
+            }
+        }
+        if (StringUtils.isBlank(dto.getColor())) {
+            dto.setColor(mdcUtilizationRateList.get(mdcUtilizationRateList.size() - 1).getRateParameterColor());
+        }
+        return dto;
+    }
+
     private StatisticalAnalysisVo efficiencyStatisticalRate(List<MdcEfficiencyDto> efficiencyList) {
         StatisticalAnalysisVo vo = new StatisticalAnalysisVo();
         for (MdcEfficiencyDto mdcEfficiencyDto : efficiencyList) {
@@ -879,7 +1821,7 @@
         return vo;
     }
 
-    private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) {
+    private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList, MdcEfficiencyResultDto efficiencyResultDto) {
         MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
         if (efficiencyList != null && !efficiencyList.isEmpty()) {
             for (MdcEfficiencyDto efficiencyDto : efficiencyList) {
@@ -892,8 +1834,9 @@
                     mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong());
                     mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong());
                     mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong());
+                    long rate = efficiencyDto.getUtilizationRate().multiply(new BigDecimal("100")).longValue();
                     for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
-                        if (efficiencyDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) {
+                        if (rate >= mdcUtilizationRate.getMinimumRange() && rate < mdcUtilizationRate.getMaximumRange()) {
                             mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
                         }
                     }
@@ -914,7 +1857,28 @@
                 }
             }
         }
-
+        if (StringUtils.isBlank(mdcEfficiencyResultDto.getColor())) {
+            mdcEfficiencyResultDto.setTheDate(date);
+            mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setStartRate(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
+            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
+                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
+                }
+            }
+        }
+        efficiencyResultDto.setProcessLong(efficiencyResultDto.getProcessLong().add(mdcEfficiencyResultDto.getProcessLong()));
+        efficiencyResultDto.setUtilizationRate(efficiencyResultDto.getUtilizationRate().add(mdcEfficiencyResultDto.getUtilizationRate()));
+        efficiencyResultDto.setStartRate(efficiencyResultDto.getStartRate().add(mdcEfficiencyResultDto.getStartRate()));
+        efficiencyResultDto.setOpenRate(efficiencyResultDto.getOpenRate().add(mdcEfficiencyResultDto.getOpenRate()));
+        efficiencyResultDto.setOpenLong(efficiencyResultDto.getOpenLong().add(mdcEfficiencyResultDto.getOpenLong()));
+        efficiencyResultDto.setWaitLong(efficiencyResultDto.getWaitLong().add(mdcEfficiencyResultDto.getWaitLong()));
+        efficiencyResultDto.setCloseLong(efficiencyResultDto.getCloseLong().add(mdcEfficiencyResultDto.getCloseLong()));
         return mdcEfficiencyResultDto;
     }
 

--
Gitblit v1.9.3