From 094a9290c836827bc1f45fd3549e7cd2ea1e1e45 Mon Sep 17 00:00:00 2001
From: qushaowei <qushaowei@163.com>
Date: 星期二, 07 十一月 2023 09:45:36 +0800
Subject: [PATCH] Merge branch 'master' of http://117.34.109.166:18448/r/mdc_430 into develop

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java |  187 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 187 insertions(+), 0 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
new file mode 100644
index 0000000..c7a87ab
--- /dev/null
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java
@@ -0,0 +1,187 @@
+package org.jeecg.modules.mdc.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.YearMonth;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author: LiuS
+ * @create: 2023-10-18 09:25
+ */
+@Service
+public class MdcOverallEquipmentEfficiencyServiceImpl extends ServiceImpl<MdcOverallEquipmentEfficiencyMapper, MdcOverallEquipmentEfficiency> implements IMdcOverallEquipmentEfficiencyService {
+
+    @Resource
+    private IMdcEquipmentService mdcEquipmentService;
+
+    @Resource
+    private IMdcEquipmentOvertimeService mdcEquipmentOvertimeService;
+
+    @Resource
+    private IMdcDeviceCalendarService mdcDeviceCalendarService;
+
+    @Resource
+    private IMdcNoplanCloseService mdcNoplanCloseService;
+
+    @Resource
+    private IMdcPlanCloseService mdcPlanCloseService;
+
+    @Resource
+    private IMdcPassRateService mdcPassRateService;
+
+    @Resource
+    private IMdcStandardProcessDurationService mdcStandardProcessDurationService;
+
+    @Resource
+    private IMdcEquipmentStatisticalShiftInfoService mdcEquipmentStatisticalShiftInfoService;
+
+    /**
+     * 璁$畻璁惧缁煎悎鏁堢巼OEE
+     */
+    @Override
+    public void runningOverallEquipmentEfficiency() {
+        /*
+            OEE = 鏃堕棿寮�鍔ㄧ巼 脳 鎬ц兘寮�鍔ㄧ巼 脳 鍚堟牸鍝佺巼
+            鏃堕棿寮�鍔ㄧ巼 = 锛堣礋鑽锋椂闂� - 闈炶鍒掑仠鏈烘椂闂达級 / 璐熻嵎鏃堕棿 脳 100%
+            鎬ц兘寮�鍔ㄧ巼 = 鍑�寮�鍔ㄦ椂闂� / 寮�鍔ㄦ椂闂� 脳 100%
+            鍚堟牸鍝佺巼 = 鍔犲伐鏁伴噺 - 涓嶅悎鏍兼暟閲� / 鍔犲伐鏁伴噺
+            璐熻嵎鏃堕棿 = 鏃ュ巻宸ヤ綔鏃堕棿 - 璁″垝鍋滄満鏃堕棿
+            闈炶鍒掑仠鏈烘椂闂� = 璐熻嵎鏃堕棿 - 涓昏酱杩愯浆鏃堕棿
+            宸ヤ綔鏃ュ巻鏃堕棿 = 鏃ュ巻鏃堕棿 - 娉曞畾鍋囨棩 - 鍙屼紤鏃� + 鍔犵彮鏃堕棿
+            鍑�寮�鍔ㄦ椂闂� = 鏍囧噯鍔犲伐鏃堕棿 脳 鍔犲伐鏁伴噺
+         */
+        List<MdcOverallEquipmentEfficiency> result = new ArrayList<>();
+        // 鑾峰彇鏈夋晥鏃ユ湡 鏍煎紡 yyyy-MM
+        String validDate = YearMonth.now().minusMonths(1).toString();
+        // 鑾峰彇璁惧鍒楄〃
+        List<MdcEquipment> equipmentList = mdcEquipmentService.list();
+        for (MdcEquipment mdcEquipment : equipmentList) {
+            String equipmentId = mdcEquipment.getEquipmentId();
+            // 鏌ヨ鐝鍒嗙被
+            List<String> shiftSubIdList = mdcDeviceCalendarService.findShiftSort(equipmentId, validDate);
+            // 鏁呴殰鍋滄満鏃堕暱缁熻(鍒嗛挓)
+            BigDecimal breakdownDownDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.BREAKDOWN_DOWN);
+            // 鎹㈠瀷璋冭瘯鏃堕暱缁熻(鍒嗛挓)
+            BigDecimal conversionDebugDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.CONVERSION_DEBUG);
+            // 鐗╂枡鐭己鏃堕暱缁熻(鍒嗛挓)
+            BigDecimal materialShortageDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.MATERIAL_SHORTAGE);
+            // 璁″垝绛変换鍔℃椂闀跨粺璁�(鍒嗛挓)
+            BigDecimal plannedTaskDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.PLANNED_TASK);
+            // 妫�楠屾椂闀跨粺璁�(鍒嗛挓)
+            BigDecimal inspectDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.INSPECT);
+            // 鍏朵粬鏃堕暱缁熻(鍒嗛挓)
+            BigDecimal otherDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.OTHER);
+            // 璁″垝淇濆吇鏃堕暱缁熻(鍒嗛挓)
+            BigDecimal plannedMaintenanceDuration = new BigDecimal("0");
+            // 浼氳/鍩硅鏃堕暱缁熻(鍒嗛挓)
+            BigDecimal conferenceTrainingDuration = new BigDecimal("0");
+            // 鍏跺畠浼戞伅鏃堕暱缁熻(鍒嗛挓)
+            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 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);
+                    }
+                    // 搴熷搧鏁� 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);
+                }
+            }
+        }
+        super.saveBatch(result);
+    }
+}

--
Gitblit v1.9.3