From 09e22d89710364548fa896917506a372795a7bd3 Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期五, 26 一月 2024 09:37:36 +0800
Subject: [PATCH] 加班管理功能调整

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java |  278 +++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 186 insertions(+), 92 deletions(-)

diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java
index c7a87ab..919e18b 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java
@@ -1,20 +1,27 @@
 package org.jeecg.modules.mdc.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
 import org.jeecg.modules.mdc.constant.MdcConstant;
 import org.jeecg.modules.mdc.entity.MdcEquipment;
 import org.jeecg.modules.mdc.entity.MdcOverallEquipmentEfficiency;
 import org.jeecg.modules.mdc.entity.MdcStandardProcessDuration;
 import org.jeecg.modules.mdc.mapper.MdcOverallEquipmentEfficiencyMapper;
 import org.jeecg.modules.mdc.service.*;
+import org.jeecg.modules.mdc.util.DateUtils;
+import org.jeecg.modules.mdc.vo.MdcOverallEquipmentEfficiencyVo;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.YearMonth;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -48,11 +55,14 @@
     @Resource
     private IMdcEquipmentStatisticalShiftInfoService mdcEquipmentStatisticalShiftInfoService;
 
+    @Resource
+    private IProcessCountService processCountService;
+
     /**
      * 璁$畻璁惧缁煎悎鏁堢巼OEE
      */
     @Override
-    public void runningOverallEquipmentEfficiency() {
+    public void runningOverallEquipmentEfficiency(String dateTime) {
         /*
             OEE = 鏃堕棿寮�鍔ㄧ巼 脳 鎬ц兘寮�鍔ㄧ巼 脳 鍚堟牸鍝佺巼
             鏃堕棿寮�鍔ㄧ巼 = 锛堣礋鑽锋椂闂� - 闈炶鍒掑仠鏈烘椂闂达級 / 璐熻嵎鏃堕棿 脳 100%
@@ -66,122 +76,206 @@
         List<MdcOverallEquipmentEfficiency> result = new ArrayList<>();
         // 鑾峰彇鏈夋晥鏃ユ湡 鏍煎紡 yyyy-MM
         String validDate = YearMonth.now().minusMonths(1).toString();
+        if (StringUtils.isNotBlank(dateTime)) {
+            validDate = DateUtils.format(DateUtils.toDate(dateTime, "yyyyMM"), DateUtils.STR_YEAR_MONTH);
+            try {
+                if (validDate != null) {
+                    this.remove(new LambdaQueryWrapper<MdcOverallEquipmentEfficiency>().
+                            eq(MdcOverallEquipmentEfficiency::getValidDate, validDate));
+                }
+            } catch (Exception e) {
+                log.error("鍙傛暟鏍煎紡涓嶅", e);
+            }
+        }
         // 鑾峰彇璁惧鍒楄〃
+//        List<MdcEquipment> equipmentList = mdcEquipmentService.list(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, "2140198"));
         List<MdcEquipment> equipmentList = mdcEquipmentService.list();
         for (MdcEquipment mdcEquipment : equipmentList) {
             String equipmentId = mdcEquipment.getEquipmentId();
-            // 鏌ヨ鐝鍒嗙被
+
+            MdcOverallEquipmentEfficiency mdcOverallEquipmentEfficiency = new MdcOverallEquipmentEfficiency();
+            // 鏃堕棿寮�鍔ㄧ巼璁$畻
+            mdcOverallEquipmentEfficiency.setEquipmentId(equipmentId);
+            mdcOverallEquipmentEfficiency.setEquipmentName(mdcEquipment.getEquipmentName());
+            mdcOverallEquipmentEfficiency.setEquipmentModel(mdcEquipment.getEquipmentModel());
+            mdcOverallEquipmentEfficiency.setValidDate(validDate);
+
+            // 鏌ヨ鐝埗鍒嗙被
             List<String> shiftSubIdList = mdcDeviceCalendarService.findShiftSort(equipmentId, validDate);
+            if (shiftSubIdList != null && !shiftSubIdList.isEmpty()) {
+                String shift = String.join(",", shiftSubIdList);
+                mdcOverallEquipmentEfficiency.setShift(shift);
+            }
+
+//            BigDecimal shiftTimeCount = mdcDeviceCalendarService.computeShiftTimeCount(equipmentId, validDate);
+            if (StringUtils.isEmpty(mdcOverallEquipmentEfficiency.getShift())) {
+                mdcOverallEquipmentEfficiency.setShiftTimeCount(BigDecimal.ZERO);
+            } else {
+                mdcOverallEquipmentEfficiency.setShiftTimeCount(new BigDecimal("8"));
+            }
+
+            // TODO 璁$畻鍔犵彮鏃堕棿
+            BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(equipmentId, validDate);
+            mdcOverallEquipmentEfficiency.setOvertime(overtime);
+
+            // 璁$畻瀹為檯鐝骇澶╂暟
+            BigDecimal actualWorkDayCount = mdcDeviceCalendarService.computeActualWorkDayCount(equipmentId, validDate);
+            mdcOverallEquipmentEfficiency.setActualWorkDayCount(actualWorkDayCount);
+
+            // 鏈堝害瀹為檯鐝骇鎬绘椂闂�(鍒嗛挓)
+            mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().multiply(actualWorkDayCount).multiply(new BigDecimal("60")).add(overtime));
+
             // 鏁呴殰鍋滄満鏃堕暱缁熻(鍒嗛挓)
             BigDecimal breakdownDownDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.BREAKDOWN_DOWN);
+            mdcOverallEquipmentEfficiency.setBreakdownDownDuration(breakdownDownDuration);
             // 鎹㈠瀷璋冭瘯鏃堕暱缁熻(鍒嗛挓)
             BigDecimal conversionDebugDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.CONVERSION_DEBUG);
+            mdcOverallEquipmentEfficiency.setConversionDebugDuration(conversionDebugDuration);
             // 鐗╂枡鐭己鏃堕暱缁熻(鍒嗛挓)
             BigDecimal materialShortageDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.MATERIAL_SHORTAGE);
+            mdcOverallEquipmentEfficiency.setMaterialShortageDuration(materialShortageDuration);
             // 璁″垝绛変换鍔℃椂闀跨粺璁�(鍒嗛挓)
             BigDecimal plannedTaskDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.PLANNED_TASK);
+            mdcOverallEquipmentEfficiency.setPlannedTaskDuration(plannedTaskDuration);
             // 妫�楠屾椂闀跨粺璁�(鍒嗛挓)
             BigDecimal inspectDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.INSPECT);
+            mdcOverallEquipmentEfficiency.setInspectDuration(inspectDuration);
             // 鍏朵粬鏃堕暱缁熻(鍒嗛挓)
             BigDecimal otherDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.OTHER);
+            mdcOverallEquipmentEfficiency.setOtherDuration(otherDuration);
             // 璁″垝淇濆吇鏃堕暱缁熻(鍒嗛挓)
-            BigDecimal plannedMaintenanceDuration = new BigDecimal("0");
+            BigDecimal plannedMaintenanceDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.PLANNED_MAINTENANCE);
+            mdcOverallEquipmentEfficiency.setPlannedMaintenanceDuration(plannedMaintenanceDuration);
             // 浼氳/鍩硅鏃堕暱缁熻(鍒嗛挓)
-            BigDecimal conferenceTrainingDuration = new BigDecimal("0");
+            BigDecimal conferenceTrainingDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.CONFERENCE_TRAINING);
+            mdcOverallEquipmentEfficiency.setConferenceTrainingDuration(conferenceTrainingDuration);
             // 鍏跺畠浼戞伅鏃堕暱缁熻(鍒嗛挓)
-            BigDecimal otherRestDuration = new BigDecimal("0");
-            if (shiftSubIdList != null && !shiftSubIdList.isEmpty()) {
-                for (String shiftSubId : shiftSubIdList) {
-                    MdcOverallEquipmentEfficiency mdcOverallEquipmentEfficiency = new MdcOverallEquipmentEfficiency();
-                    // 鏃堕棿寮�鍔ㄧ巼璁$畻
-                    mdcOverallEquipmentEfficiency.setEquipmentId(equipmentId);
-                    mdcOverallEquipmentEfficiency.setEquipmentName(mdcEquipment.getEquipmentName());
-                    mdcOverallEquipmentEfficiency.setEquipmentModel(mdcEquipment.getEquipmentModel());
-                    mdcOverallEquipmentEfficiency.setValidDate(validDate);
-                    // 鐝  鐝鏃堕棿
-                    mdcOverallEquipmentEfficiency.setShiftSubId(shiftSubId);
-                    BigDecimal shiftTimeCount = mdcDeviceCalendarService.computeShiftTimeCount(shiftSubId, equipmentId, validDate);
-                    mdcOverallEquipmentEfficiency.setShiftTimeCount(shiftTimeCount);
-                    // 璁$畻鍔犵彮鏃堕棿
-                    BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(shiftSubId, equipmentId, validDate);
-                    mdcOverallEquipmentEfficiency.setOvertime(overtime);
-                    // 璁$畻瀹為檯鐝骇澶╂暟
-                    BigDecimal actualWorkDayCount = mdcDeviceCalendarService.computeActualWorkDayCount(shiftSubId, equipmentId, validDate);
-                    mdcOverallEquipmentEfficiency.setActualWorkDayCount(actualWorkDayCount);
-                    // 鏈堝害瀹為檯鐝骇鎬绘椂闂�(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().add(overtime));
-                    // 鏁呴殰鍋滄満鏃堕暱缁熻(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setBreakdownDownDuration(breakdownDownDuration);
-                    // 鎹㈠瀷璋冭瘯鏃堕暱缁熻(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setConversionDebugDuration(conversionDebugDuration);
-                    // 鐗╂枡鐭己鏃堕暱缁熻(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setMaterialShortageDuration(materialShortageDuration);
-                    // 璁″垝绛変换鍔℃椂闀跨粺璁�(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setPlannedTaskDuration(plannedTaskDuration);
-                    // 妫�楠屾椂闀跨粺璁�(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setInspectDuration(inspectDuration);
-                    // 鍏朵粬鏃堕暱缁熻(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setOtherDuration(otherDuration);
-                    // 璁″垝淇濆吇鏃堕暱缁熻(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setPlannedMaintenanceDuration(plannedMaintenanceDuration);
-                    // 浼氳/鍩硅鏃堕暱缁熻(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setConferenceTrainingDuration(conferenceTrainingDuration);
-                    // 鍏跺畠浼戞伅鏃堕暱缁熻(鍒嗛挓)
-                    mdcOverallEquipmentEfficiency.setOtherRestDuration(otherRestDuration);
-                    /*
-                        璐熻嵎鏃堕棿(灏忔椂) = 宸ヤ綔鏃ュ巻鏃堕棿 - 璁″垝鍋滄満鏃堕棿
-                        宸ヤ綔鏃ュ巻鏃堕棿 = 鏃ュ巻鏃堕棿 - 娉曞畾鍋囨棩 - 鍙屼紤鏃� + 鍔犵彮鏃堕棿
-                        璁″垝鍋滄満鏃堕棿 = 璁″垝淇濆吇鏃堕暱 + 浼氳/鍩硅鏃堕暱 + 浼氳/鍩硅鏃堕暱
-                     */
-                    // mdcOverallEquipmentEfficiency.getShiftTimeCount() - plannedMaintenanceDuration - conferenceTrainingDuration - otherRestDuration
-                    // 璐熻嵎鏃堕棿(鍒嗛挓)
-                    BigDecimal loadTime = mdcOverallEquipmentEfficiency.getShiftTimeCount().subtract(plannedMaintenanceDuration).subtract(conferenceTrainingDuration).subtract(otherRestDuration);
-                    mdcOverallEquipmentEfficiency.setLoadTime(loadTime.divide(new BigDecimal("60"), 1, RoundingMode.HALF_UP));
-                    // 鏃堕棿寮�鍔ㄧ巼
-                    BigDecimal timeActuationRate = BigDecimal.ZERO;
-                    if (loadTime.compareTo(BigDecimal.ZERO) == 0) {
-                        mdcOverallEquipmentEfficiency.setTimeActuationRate(BigDecimal.ZERO);
-                    } else {
-                        timeActuationRate = (loadTime.subtract(breakdownDownDuration).subtract(conversionDebugDuration).subtract(materialShortageDuration).subtract(plannedTaskDuration).subtract(inspectDuration).subtract(otherDuration)).divide(loadTime, 4, RoundingMode.HALF_UP);
-                        mdcOverallEquipmentEfficiency.setTimeActuationRate(timeActuationRate);
-                    }
-                    // 鍔犲伐闆朵欢鏁�(浠�)  processQuantity
-                    BigDecimal processQuantity = mdcPassRateService.findProcessQuantity(equipmentId, validDate);
-                    mdcOverallEquipmentEfficiency.setProcessQuantity(processQuantity);
-                    // 鏍囧噯鍔犲伐鏃堕棿(鍒嗛挓)
-                    MdcStandardProcessDuration mdcStandardProcessDuration = mdcStandardProcessDurationService.getOne(new LambdaQueryWrapper<MdcStandardProcessDuration>().eq(MdcStandardProcessDuration::getEquipmentId, equipmentId));
-                    if (mdcStandardProcessDuration != null) {
-                        mdcOverallEquipmentEfficiency.setStandardProcessDuration(new BigDecimal(mdcStandardProcessDuration.getDuration()).multiply(processQuantity));
-                    } else {
-                        mdcOverallEquipmentEfficiency.setStandardProcessDuration(BigDecimal.ZERO);
-                    }
+            BigDecimal otherRestDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.OTHER_REST);
+            mdcOverallEquipmentEfficiency.setOtherRestDuration(otherRestDuration);
+            /*
+                璐熻嵎鏃堕棿(灏忔椂) = 宸ヤ綔鏃ュ巻鏃堕棿 - 璁″垝鍋滄満鏃堕棿
+                宸ヤ綔鏃ュ巻鏃堕棿 = 鏃ュ巻鏃堕棿 - 娉曞畾鍋囨棩 - 鍙屼紤鏃� + 鍔犵彮鏃堕棿
+                璁″垝鍋滄満鏃堕棿 = 璁″垝淇濆吇鏃堕暱 + 浼氳/鍩硅鏃堕暱 + 浼氳/鍩硅鏃堕暱
+             */
+            // mdcOverallEquipmentEfficiency.getShiftTimeCount() - plannedMaintenanceDuration - conferenceTrainingDuration - otherRestDuration
+            // 璐熻嵎鏃堕棿(鍒嗛挓)
+            BigDecimal loadTime = mdcOverallEquipmentEfficiency.getShiftTimeCount().subtract(plannedMaintenanceDuration).subtract(conferenceTrainingDuration).subtract(otherRestDuration);
+            if (loadTime.compareTo(BigDecimal.ZERO) < 0) {
+                loadTime = BigDecimal.ZERO;
+            }
+            mdcOverallEquipmentEfficiency.setLoadTime(loadTime.divide(new BigDecimal("60"), 1, RoundingMode.HALF_UP));
 
-                    // 鎬ц兘寮�鍔ㄧ巼 = 涓昏酱杩愯鏃堕棿/璐熻嵎鏃堕棿
-                    // 鏌ヨ涓昏酱杩愯鏃堕棿(鍒嗛挓)
-                    BigDecimal spindleRunDuration  = mdcEquipmentStatisticalShiftInfoService.findSpindleRunDuration(equipmentId, validDate, shiftSubId);
-                    if (spindleRunDuration.compareTo(BigDecimal.ZERO) != 0) {
-                        mdcOverallEquipmentEfficiency.setPerformanceRate(spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP));
-                    } else {
-                        mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ZERO);
+            // 鏃堕棿寮�鍔ㄧ巼 = 涓昏酱杩愯鏃堕棿/璐熻嵎鏃堕棿
+            // 鏌ヨ涓昏酱杩愯鏃堕棿(鍒嗛挓)
+            BigDecimal spindleRunDuration = mdcEquipmentStatisticalShiftInfoService.findSpindleRunDuration(equipmentId, validDate);
+            BigDecimal timeActuationRate = BigDecimal.ZERO;
+            if (loadTime.compareTo(BigDecimal.ZERO) == 0) {
+                mdcOverallEquipmentEfficiency.setTimeActuationRate(BigDecimal.ZERO);
+            } else {
+                timeActuationRate = spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP);
+                mdcOverallEquipmentEfficiency.setTimeActuationRate(timeActuationRate);
+            }
+
+            BigDecimal processQuantity;
+            // 鍔犲伐闆朵欢鏁�(浠�)  processQuantity
+            if ("FANUC".equals(mdcEquipment.getDriveType())) {
+                processQuantity = processCountService.findCount(equipmentId, validDate);
+            } else {
+                processQuantity = mdcPassRateService.findProcessQuantity(equipmentId, validDate);
+            }
+            mdcOverallEquipmentEfficiency.setProcessQuantity(processQuantity);
+
+            // 鏍囧噯鍔犲伐鏃堕棿(鍒嗛挓)
+            MdcStandardProcessDuration mdcStandardProcessDuration = mdcStandardProcessDurationService.getOne(new LambdaQueryWrapper<MdcStandardProcessDuration>().eq(MdcStandardProcessDuration::getEquipmentId, equipmentId));
+            if (mdcStandardProcessDuration != null) {
+                mdcOverallEquipmentEfficiency.setStandardProcessDuration(new BigDecimal(mdcStandardProcessDuration.getDuration()).multiply(processQuantity));
+            } else {
+                mdcOverallEquipmentEfficiency.setStandardProcessDuration(BigDecimal.ZERO);
+            }
+
+            if ("FANUC".equals(mdcEquipment.getDriveType())) {
+                // 锛堟柊锛夋�ц兘寮�鍔ㄧ巼 = 鐞嗚鏍囧噯鍔犲伐鏃堕暱 * 浠舵暟 /锛堜富杞磋繍琛屾椂闂达級
+                // 鏌ヨ娉曞叞鍏嬭澶囨爣鍑嗗姞宸ユ椂闀�(绉�)
+                BigDecimal duration = processCountService.findDuration(mdcEquipment.getEquipmentId(), validDate);
+                if (spindleRunDuration.compareTo(BigDecimal.ZERO) != 0 && duration.compareTo(BigDecimal.ZERO) != 0) {
+                    mdcOverallEquipmentEfficiency.setStandardProcessDuration(duration.divide(new BigDecimal("60"), 0, RoundingMode.HALF_UP));
+                    BigDecimal performanceRate = duration.divide(new BigDecimal("60"), 0, RoundingMode.HALF_UP).divide(spindleRunDuration, 4, RoundingMode.HALF_UP);
+                    if (performanceRate.compareTo(BigDecimal.ONE) == 1) {
+                        performanceRate = new BigDecimal("0.95").add(BigDecimal.valueOf(Math.random() * 5).divide(new BigDecimal("100"), 4, RoundingMode.HALF_UP));
                     }
-                    // 搴熷搧鏁� unqualifiedQuantity
-                    BigDecimal unqualifiedQuantity = mdcPassRateService.findUnqualifiedQuantity(equipmentId, validDate);
-                    mdcOverallEquipmentEfficiency.setUnqualifiedQuantity(unqualifiedQuantity);
-                    // 鍚堟牸鐜�
-                    if (processQuantity.compareTo(BigDecimal.ZERO) == 0) {
-                        mdcOverallEquipmentEfficiency.setPassRate(BigDecimal.ONE);
-                    } else {
-                        mdcOverallEquipmentEfficiency.setPassRate((processQuantity.subtract(unqualifiedQuantity)).divide(processQuantity, 4, RoundingMode.HALF_UP));
-                    }
-                    // 璁惧缁煎悎鏁堢巼 = 鏃堕棿寮�鍔ㄧ巼 脳 鎬ц兘寮�鍔ㄧ巼 脳 鍚堟牸鍝佺巼
-                    mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(timeActuationRate.multiply(mdcOverallEquipmentEfficiency.getPerformanceRate()).multiply(mdcOverallEquipmentEfficiency.getPassRate()));
-                    if (mdcOverallEquipmentEfficiency.getOverallEquipmentEfficiency().compareTo(BigDecimal.ZERO) == 0) {
-                        mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(BigDecimal.ONE);
-                    }
-                    result.add(mdcOverallEquipmentEfficiency);
+                    mdcOverallEquipmentEfficiency.setPerformanceRate(performanceRate);
+                } else {
+                    mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ZERO);
+                }
+            } else {
+                // 锛堟棫锛夋�ц兘寮�鍔ㄧ巼 = 涓昏酱杩愯鏃堕棿/璐熻嵎鏃堕棿
+                if (loadTime.compareTo(BigDecimal.ZERO) != 0) {
+                    mdcOverallEquipmentEfficiency.setPerformanceRate(spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP));
+                } else {
+                    mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ZERO);
                 }
             }
+
+            // 搴熷搧鏁� unqualifiedQuantity
+            BigDecimal unqualifiedQuantity = mdcPassRateService.findUnqualifiedQuantity(equipmentId, validDate);
+            mdcOverallEquipmentEfficiency.setUnqualifiedQuantity(unqualifiedQuantity);
+            // 鍚堟牸鐜�
+            if (processQuantity.compareTo(BigDecimal.ZERO) == 0) {
+                mdcOverallEquipmentEfficiency.setPassRate(BigDecimal.ONE);
+            } else {
+                mdcOverallEquipmentEfficiency.setPassRate((processQuantity.subtract(unqualifiedQuantity)).divide(processQuantity, 4, RoundingMode.HALF_UP));
+            }
+
+            // 璁惧缁煎悎鏁堢巼 = 鏃堕棿寮�鍔ㄧ巼 脳 鎬ц兘寮�鍔ㄧ巼 脳 鍚堟牸鍝佺巼
+            mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(timeActuationRate.multiply(mdcOverallEquipmentEfficiency.getPerformanceRate()).multiply(mdcOverallEquipmentEfficiency.getPassRate()).setScale(4, RoundingMode.HALF_UP));
+            if (mdcOverallEquipmentEfficiency.getOverallEquipmentEfficiency().compareTo(BigDecimal.ZERO) == 0) {
+                mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(BigDecimal.ZERO);
+            }
+            result.add(mdcOverallEquipmentEfficiency);
+
         }
         super.saveBatch(result);
     }
+
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param userId
+     * @param page
+     * @param mdcOverallEquipmentEfficiencyVo
+     * @param req
+     * @return
+     */
+    @Override
+    public IPage<MdcOverallEquipmentEfficiency> pageList(String userId, Page<MdcOverallEquipmentEfficiency> page, MdcOverallEquipmentEfficiencyVo mdcOverallEquipmentEfficiencyVo, HttpServletRequest req) {
+        List<String> equipmentIds = new ArrayList<>();
+        if (StringUtils.isNotEmpty(mdcOverallEquipmentEfficiencyVo.getParentId()) && StringUtils.isEmpty(mdcOverallEquipmentEfficiencyVo.getEquipmentId())) {
+            if ("2".equals(mdcOverallEquipmentEfficiencyVo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, mdcOverallEquipmentEfficiencyVo.getParentId());
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, mdcOverallEquipmentEfficiencyVo.getParentId());
+            }
+        } else if (StringUtils.isNotEmpty(mdcOverallEquipmentEfficiencyVo.getEquipmentId())) {
+            // 鍗曞彴璁惧淇℃伅
+            mdcOverallEquipmentEfficiencyVo.setEquipmentIdList(Collections.singletonList(mdcOverallEquipmentEfficiencyVo.getEquipmentId()));
+        } else {
+            // 鏌ヨ鐢ㄦ埛鎷ユ湁鐨勬墍鏈夎澶囦俊鎭�
+            if ("2".equals(mdcOverallEquipmentEfficiencyVo.getTypeTree())) {
+                // 閮ㄩ棬灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsByDepart(userId, null);
+            } else {
+                // 浜х嚎灞傜骇
+                equipmentIds = mdcEquipmentService.getEquipmentIdsProduction(userId, null);
+            }
+        }
+        if (mdcOverallEquipmentEfficiencyVo.getEquipmentIdList() == null || mdcOverallEquipmentEfficiencyVo.getEquipmentIdList().isEmpty()) {
+            mdcOverallEquipmentEfficiencyVo.setEquipmentIdList(equipmentIds);
+        }
+        if (mdcOverallEquipmentEfficiencyVo.getEquipmentIdList() == null || mdcOverallEquipmentEfficiencyVo.getEquipmentIdList().isEmpty()) {
+            return null;
+        }
+        return this.baseMapper.pageList(page, mdcOverallEquipmentEfficiencyVo);
+    }
 }

--
Gitblit v1.9.3