From 632a346f1fd07ab659bfc68e70bd6e254b0e8c51 Mon Sep 17 00:00:00 2001
From: lius <Lius2225@163.com>
Date: 星期三, 19 七月 2023 16:10:55 +0800
Subject: [PATCH] 统计分析接口

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEfficiencyReportServiceImpl.java |  547 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 496 insertions(+), 51 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 de8846c..f7c0b2d 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,11 +1,10 @@
 package org.jeecg.modules.mdc.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import net.sf.saxon.expr.Component;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.apache.commons.lang3.StringUtils;
-import org.jeecg.modules.mdc.dto.MdcEfficiencyDto;
-import org.jeecg.modules.mdc.dto.MdcEfficiencyListDto;
-import org.jeecg.modules.mdc.dto.MdcEfficiencyResultDto;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.mdc.dto.*;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
 import org.jeecg.modules.mdc.entity.MdcUtilizationRate;
 import org.jeecg.modules.mdc.mapper.MdcEfficiencyReportMapper;
@@ -13,13 +12,16 @@
 import org.jeecg.modules.mdc.service.IMdcUtilizationRateService;
 import org.jeecg.modules.mdc.service.MdcEfficiencyReportService;
 import org.jeecg.modules.mdc.util.DateUtils;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyReportQueryVo;
-import org.jeecg.modules.mdc.vo.MdcEfficiencyVo;
+import org.jeecg.modules.mdc.vo.*;
+import org.jeecg.modules.system.entity.MdcProduction;
+import org.jeecg.modules.system.entity.SysDepart;
+import org.jeecg.modules.system.service.IMdcProductionService;
+import org.jeecg.modules.system.service.ISysDepartService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author: LiuS
@@ -36,6 +38,12 @@
 
     @Resource
     private IMdcUtilizationRateService mdcUtilizationRateService;
+
+    @Resource
+    private ISysDepartService sysDepartService;
+
+    @Resource
+    private IMdcProductionService mdcProductionService;
 
     /**
      * 鍒╃敤鐜囨姤琛�
@@ -70,58 +78,495 @@
                 equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
             }
         }
-        vo.setEquipmentIdList(equipmentIds);
-
-        // 鏌ヨ鍒╃敤鐜囨暟鎹�
-        List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
-        // 鍒╃敤鐜囩瓑绾�
-        List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("lyl");
-
-        //灏佽缁撴灉
-        List<MdcEfficiencyDto> equipmentList = efficiencyList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MdcEfficiencyDto::getEquipmentId))), ArrayList::new));
-
-        List<String> dates = DateUtils.getDatesStringList2(DateUtils.getShortDate2(vo.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
-
-        for (MdcEfficiencyDto mdcEfficiencyDto : equipmentList) {
-            MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
-            mdcEfficiencyListDto.setEquipmentId(mdcEfficiencyDto.getEquipmentId());
-            mdcEfficiencyListDto.setEquipmentName(mdcEfficiencyDto.getEquipmentName());
-            mdcEfficiencyListDto.setEquipmentType(mdcEfficiencyDto.getEquipmentType());
-            List<MdcEfficiencyResultDto> list = new ArrayList<>();
-            for (String date : dates) {
-                list.add(this.efficiencyRate(efficiencyList, date, mdcEfficiencyDto, mdcUtilizationRateList));
-            }
-            mdcEfficiencyListDto.setList(list);
-            listDtos.add(mdcEfficiencyListDto);
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            vo.setEquipmentIdList(equipmentIds);
         }
 
-        result.setLists(listDtos);
+        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<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()));
+
+                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
+                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+                    switch (mdcEquDepDto.getOrgType()) {
+                        case "1":
+                            mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
+                            break;
+                        case "2":
+                            mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName());
+                            break;
+                        case "3":
+                            mdcEfficiencyListDto.setLevel3(mdcEquDepDto.getDepartName());
+                            break;
+                        default:
+                    }
+
+                    SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null);
+                    if (sysDepart != null) {
+                        switch (sysDepart.getOrgType()) {
+                            case "1":
+                                mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName());
+                                break;
+                            case "2":
+                                mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName());
+                                break;
+                            case "3":
+                                mdcEfficiencyListDto.setLevel3(sysDepart.getDepartName());
+                                break;
+                            default:
+                        }
+                        if (StringUtils.isNotEmpty(sysDepart.getParentId())) {
+                            departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> {
+                                switch (depart1.getOrgType()) {
+                                    case "1":
+                                        mdcEfficiencyListDto.setLevel1(depart1.getDepartName());
+                                        break;
+                                    case "2":
+                                        mdcEfficiencyListDto.setLevel2(depart1.getDepartName());
+                                        break;
+                                    case "3":
+                                        mdcEfficiencyListDto.setLevel3(depart1.getDepartName());
+                                        break;
+                                    default:
+                                }
+                            });
+                        }
+                    }
+                    List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    for (String date : dates) {
+                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+            } else {
+                // 浜х嚎灞傜骇
+                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
+                // 鏌ヨ鎵�鏈変骇绾夸俊鎭�
+                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+
+                for (MdcEquProDto mdcEquProDto : equipmentList) {
+                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+                    switch (mdcEquProDto.getOrgType()) {
+                        case "1":
+                            mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
+                            break;
+                        case "2":
+                            mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName());
+                            break;
+                        case "3":
+                            mdcEfficiencyListDto.setLevel3(mdcEquProDto.getProductionName());
+                            break;
+                        default:
+                    }
+                    MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null);
+                    if (mdcProduction != null) {
+                        switch (mdcProduction.getOrgType()) {
+                            case "1":
+                                mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName());
+                                break;
+                            case "2":
+                                mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName());
+                                break;
+                            case "3":
+                                mdcEfficiencyListDto.setLevel3(mdcProduction.getProductionName());
+                                break;
+                            default:
+                        }
+                        if (StringUtils.isNotEmpty(mdcProduction.getParentId())) {
+                            productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> {
+                                switch (production1.getOrgType()) {
+                                    case "1":
+                                        mdcEfficiencyListDto.setLevel1(production1.getProductionName());
+                                        break;
+                                    case "2":
+                                        mdcEfficiencyListDto.setLevel2(production1.getProductionName());
+                                        break;
+                                    case "3":
+                                        mdcEfficiencyListDto.setLevel3(production1.getProductionName());
+                                        break;
+                                    default:
+                                }
+                            });
+                        }
+                    }
+                    List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    for (String date : dates) {
+                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+            }
+
+            result.setMdcEfficiencyList(listDtos);
+        }
 
         return result;
     }
 
-    private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, MdcEfficiencyDto mdcEfficiencyDto, List<MdcUtilizationRate> mdcUtilizationRateList) {
-        MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
-        for (MdcEfficiencyDto efficiencyDto : efficiencyList) {
-            if (date.equals(efficiencyDto.getTheDate()) && efficiencyDto.getEquipmentId().equals(mdcEfficiencyDto.getEquipmentId())) {
-                mdcEfficiencyResultDto.setTheDate(efficiencyDto.getTheDate());
-                mdcEfficiencyResultDto.setProcessLong(efficiencyDto.getProcessLong());
-                mdcEfficiencyResultDto.setUtilizationRate(efficiencyDto.getUtilizationRate());
-                mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate());
-                mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate());
-                mdcEfficiencyResultDto.setOpenRate(efficiencyDto.getOpenRate());
-                mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong());
-                mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong());
-                mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong());
-                for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
-                    if (efficiencyDto.getUtilizationRate().longValue() * 100 > mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 <= mdcUtilizationRate.getMaximumRange()) {
-                        mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
-                    }
-                }
-
+    /**
+     * 寮�鏈虹巼鎶ヨ〃
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    @Override
+    public MdcEfficiencyVo efficiencyPOList(String userId, MdcEfficiencyReportQueryVo vo) {
+        MdcEfficiencyVo result = new MdcEfficiencyVo();
+        List<MdcEfficiencyListDto> 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.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
+        result.setDates(dates);
+
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            result.setMdcEfficiencyList(listDtos);
+        } else {
+            // 鏌ヨ鍒╃敤鐜囨暟鎹�
+            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()));
+
+                for (MdcEquDepDto mdcEquDepDto : equipmentList) {
+                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquDepDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquDepDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquDepDto.getEquipmentType());
+                    switch (mdcEquDepDto.getOrgType()) {
+                        case "1":
+                            mdcEfficiencyListDto.setLevel1(mdcEquDepDto.getDepartName());
+                            break;
+                        case "2":
+                            mdcEfficiencyListDto.setLevel2(mdcEquDepDto.getDepartName());
+                            break;
+                        case "3":
+                            mdcEfficiencyListDto.setLevel3(mdcEquDepDto.getDepartName());
+                            break;
+                        default:
+                    }
+
+                    SysDepart sysDepart = departList.stream().filter(depart -> depart.getId().equals(mdcEquDepDto.getParentId())).findAny().orElse(null);
+                    if (sysDepart != null) {
+                        switch (sysDepart.getOrgType()) {
+                            case "1":
+                                mdcEfficiencyListDto.setLevel1(sysDepart.getDepartName());
+                                break;
+                            case "2":
+                                mdcEfficiencyListDto.setLevel2(sysDepart.getDepartName());
+                                break;
+                            case "3":
+                                mdcEfficiencyListDto.setLevel3(sysDepart.getDepartName());
+                                break;
+                            default:
+                        }
+                        if (StringUtils.isNotEmpty(sysDepart.getParentId())) {
+                            departList.stream().filter(depart -> depart.getId().equals(sysDepart.getParentId())).findAny().ifPresent(depart1 -> {
+                                switch (depart1.getOrgType()) {
+                                    case "1":
+                                        mdcEfficiencyListDto.setLevel1(depart1.getDepartName());
+                                        break;
+                                    case "2":
+                                        mdcEfficiencyListDto.setLevel2(depart1.getDepartName());
+                                        break;
+                                    case "3":
+                                        mdcEfficiencyListDto.setLevel3(depart1.getDepartName());
+                                        break;
+                                    default:
+                                }
+                            });
+                        }
+                    }
+                    List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    for (String date : dates) {
+                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquDepDto.getEquipmentId(), mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+            } else {
+                // 浜х嚎灞傜骇
+                List<MdcEquProDto> equipmentList = mdcEquipmentService.findEquProList(vo.getEquipmentIdList());
+                // 鏌ヨ鎵�鏈変骇绾夸俊鎭�
+                List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().ne(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_1.toString()));
+
+                for (MdcEquProDto mdcEquProDto : equipmentList) {
+                    MdcEfficiencyListDto mdcEfficiencyListDto = new MdcEfficiencyListDto();
+                    mdcEfficiencyListDto.setEquipmentId(mdcEquProDto.getEquipmentId());
+                    mdcEfficiencyListDto.setEquipmentName(mdcEquProDto.getEquipmentName());
+                    mdcEfficiencyListDto.setEquipmentType(mdcEquProDto.getEquipmentType());
+                    switch (mdcEquProDto.getOrgType()) {
+                        case "1":
+                            mdcEfficiencyListDto.setLevel1(mdcEquProDto.getProductionName());
+                            break;
+                        case "2":
+                            mdcEfficiencyListDto.setLevel2(mdcEquProDto.getProductionName());
+                            break;
+                        case "3":
+                            mdcEfficiencyListDto.setLevel3(mdcEquProDto.getProductionName());
+                            break;
+                        default:
+                    }
+                    MdcProduction mdcProduction = productionList.stream().filter(production -> production.getId().equals(mdcEquProDto.getParentId())).findAny().orElse(null);
+                    if (mdcProduction != null) {
+                        switch (mdcProduction.getOrgType()) {
+                            case "1":
+                                mdcEfficiencyListDto.setLevel1(mdcProduction.getProductionName());
+                                break;
+                            case "2":
+                                mdcEfficiencyListDto.setLevel2(mdcProduction.getProductionName());
+                                break;
+                            case "3":
+                                mdcEfficiencyListDto.setLevel3(mdcProduction.getProductionName());
+                                break;
+                            default:
+                        }
+                        if (StringUtils.isNotEmpty(mdcProduction.getParentId())) {
+                            productionList.stream().filter(production -> production.getId().equals(mdcProduction.getParentId())).findAny().ifPresent(production1 -> {
+                                switch (production1.getOrgType()) {
+                                    case "1":
+                                        mdcEfficiencyListDto.setLevel1(production1.getProductionName());
+                                        break;
+                                    case "2":
+                                        mdcEfficiencyListDto.setLevel2(production1.getProductionName());
+                                        break;
+                                    case "3":
+                                        mdcEfficiencyListDto.setLevel3(production1.getProductionName());
+                                        break;
+                                    default:
+                                }
+                            });
+                        }
+                    }
+                    List<MdcEfficiencyResultDto> list = new ArrayList<>();
+                    for (String date : dates) {
+                        list.add(this.efficiencyRate(efficiencyList, date, mdcEquProDto.getEquipmentId(), mdcUtilizationRateList));
+                    }
+                    mdcEfficiencyListDto.setDataList(list);
+                    listDtos.add(mdcEfficiencyListDto);
+                }
+            }
+
+            result.setMdcEfficiencyList(listDtos);
+        }
+
+        return result;
+    }
+
+    /**
+     * 鐝鍒╃敤鐜囨姤琛�
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    @Override
+    public MdcEfficiencyShiftVo efficiencyShiftList(String userId, MdcEfficiencyReportShiftQueryVo vo) {
+        MdcEfficiencyShiftVo result = new MdcEfficiencyShiftVo();
+        List<MdcEfficiencyShiftListDto> 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.getStartTime()), DateUtils.getShortDate2(vo.getEndTime()));
+        result.setDates(dates);
+
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            result.setMdcEfficiencyList(listDtos);
+        } else {
+            // 鐝鍒╃敤鐜囩瓑绾�
+            List<MdcUtilizationRate> mdcUtilizationRateList = mdcUtilizationRateService.listByType("kdl");
+
+        }
+
+        return result;
+    }
+
+    /**
+     * 缁熻鍒嗘瀽鍒楄〃
+     *
+     * @param userId
+     * @param vo
+     * @return
+     */
+    @Override
+    public StatisticalAnalysisVo dayStatisticalRate(String userId, MdcEfficiencyReportQueryVo vo) {
+        StatisticalAnalysisVo result = new StatisticalAnalysisVo();
+        List<String> equipmentIds = new ArrayList<>();
+        if (StringUtils.isNotEmpty(vo.getParentId()) && StringUtils.isEmpty(vo.getEquipmentId())) {
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, vo.getParentId());
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, vo.getParentId());
+            }
+        } else if (StringUtils.isNotEmpty(vo.getEquipmentId())) {
+            // 鍗曞彴璁惧淇℃伅
+            vo.setEquipmentIdList(Collections.singletonList(vo.getEquipmentId()));
+        } else {
+            // 鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
+            if ("2".equals(vo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+        }
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            vo.setEquipmentIdList(equipmentIds);
+        }
+        if (vo.getEquipmentIdList() == null || vo.getEquipmentIdList().isEmpty()) {
+            return result;
+        }
+
+        if (!StringUtils.isNotEmpty(vo.getDateTime())) {
+            throw new JeecgBootException("璇疯緭鍏ユ煡璇㈡潯浠舵椂闂�");
+        }
+        vo.setStartTime(vo.getDateTime());
+        vo.setEndTime(vo.getDateTime());
+        List<MdcEfficiencyDto> efficiencyList = mdcEfficiencyReportMapper.efficiencyList(vo);
+        if (efficiencyList == null || efficiencyList.isEmpty()) {
+            return result;
+        }
+        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));
+        }
+        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));
+        }
+        if (result.getOpenLong().compareTo(new BigDecimal(0)) > 0 && result.getProcessLong().compareTo(new BigDecimal(0)) > 0) {
+            result.setUsedOpenRate(result.getProcessLong().divide(result.getOpenLong(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
+        }
+        return result;
+    }
+
+    private StatisticalAnalysisVo efficiencyStatisticalRate(List<MdcEfficiencyDto> efficiencyList) {
+        StatisticalAnalysisVo vo = new StatisticalAnalysisVo();
+        for (MdcEfficiencyDto mdcEfficiencyDto : efficiencyList) {
+            vo.setUtilizationRate(vo.getUtilizationRate().add(mdcEfficiencyDto.getUtilizationRate()));
+            vo.setOpenRate(vo.getOpenRate().add(mdcEfficiencyDto.getOpenRate()));
+            vo.setOpenLong(vo.getOpenLong().add(mdcEfficiencyDto.getOpenLong()));
+            vo.setProcessLong(vo.getProcessLong().add(mdcEfficiencyDto.getProcessLong()));
+            vo.setWaitLong(vo.getWaitLong().add(mdcEfficiencyDto.getWaitLong()));
+            vo.setCloseLong(vo.getCloseLong().add(mdcEfficiencyDto.getCloseLong()));
+        }
+        return vo;
+    }
+
+    private MdcEfficiencyResultDto efficiencyRate(List<MdcEfficiencyDto> efficiencyList, String date, String equipmentId, List<MdcUtilizationRate> mdcUtilizationRateList) {
+        MdcEfficiencyResultDto mdcEfficiencyResultDto = new MdcEfficiencyResultDto();
+        if (efficiencyList != null && !efficiencyList.isEmpty()) {
+            for (MdcEfficiencyDto efficiencyDto : efficiencyList) {
+                if (date.equals(efficiencyDto.getTheDate()) && efficiencyDto.getEquipmentId().equals(equipmentId)) {
+                    mdcEfficiencyResultDto.setTheDate(efficiencyDto.getTheDate());
+                    mdcEfficiencyResultDto.setProcessLong(efficiencyDto.getProcessLong());
+                    mdcEfficiencyResultDto.setUtilizationRate(efficiencyDto.getUtilizationRate());
+                    mdcEfficiencyResultDto.setStartRate(efficiencyDto.getStartRate());
+                    mdcEfficiencyResultDto.setOpenRate(efficiencyDto.getOpenRate());
+                    mdcEfficiencyResultDto.setOpenLong(efficiencyDto.getOpenLong());
+                    mdcEfficiencyResultDto.setWaitLong(efficiencyDto.getWaitLong());
+                    mdcEfficiencyResultDto.setCloseLong(efficiencyDto.getCloseLong());
+                    for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+                        if (efficiencyDto.getUtilizationRate().longValue() * 100 >= mdcUtilizationRate.getMinimumRange() && efficiencyDto.getUtilizationRate().longValue() * 100 < mdcUtilizationRate.getMaximumRange()) {
+                            mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
+                        }
+                    }
+
+                }
+            }
+        } else {
+            mdcEfficiencyResultDto.setTheDate(date);
+            mdcEfficiencyResultDto.setProcessLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setUtilizationRate(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setStartRate(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setOpenRate(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setOpenLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setWaitLong(new BigDecimal("0"));
+            mdcEfficiencyResultDto.setCloseLong(new BigDecimal("0"));
+            for (MdcUtilizationRate mdcUtilizationRate : mdcUtilizationRateList) {
+                if (0 >= mdcUtilizationRate.getMinimumRange() && 0 < mdcUtilizationRate.getMaximumRange()) {
+                    mdcEfficiencyResultDto.setColor(mdcUtilizationRate.getRateParameterColor());
+                }
+            }
+        }
+
         return mdcEfficiencyResultDto;
     }
 

--
Gitblit v1.9.3