From 078e94627c72eb6cada22a6e5478b003cff57f4c Mon Sep 17 00:00:00 2001
From: Lius <Lius2225@163.com>
Date: 星期二, 31 十二月 2024 11:11:24 +0800
Subject: [PATCH] update

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java |  199 +++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 174 insertions(+), 25 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 9c4526c..441a6a1 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
@@ -5,25 +5,30 @@
 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.common.constant.CommonConstant;
 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.jeecg.modules.mdc.vo.OeeStatisticsChartVo;
+import org.jeecg.modules.mdc.vo.OeeStatisticsVo;
+import org.jeecg.modules.system.entity.MdcProduction;
+import org.jeecg.modules.system.service.IMdcProductionService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.time.YearMonth;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author: LiuS
@@ -59,10 +64,17 @@
     @Resource
     private IProcessCountService processCountService;
 
+    @Resource
+    private IMdcProductionService mdcProductionService;
+
+    @Resource
+    private IMdcProcessQuantityService mdcProcessQuantityService;
+
     /**
      * 璁$畻璁惧缁煎悎鏁堢巼OEE
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void runningOverallEquipmentEfficiency(String dateTime) {
         /*
             OEE = 鏃堕棿寮�鍔ㄧ巼 脳 鎬ц兘寮�鍔ㄧ巼 脳 鍚堟牸鍝佺巼
@@ -79,17 +91,13 @@
         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);
-            }
+        }
+        try {
+            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();
@@ -100,6 +108,8 @@
             mdcOverallEquipmentEfficiency.setEquipmentName(mdcEquipment.getEquipmentName());
             mdcOverallEquipmentEfficiency.setEquipmentModel(mdcEquipment.getEquipmentModel());
             mdcOverallEquipmentEfficiency.setValidDate(validDate);
+            //
+//            mdcOverallEquipmentEfficiency.setProductionName();
 
             // 鏌ヨ鐝埗鍒嗙被
             List<String> shiftSubIdList = mdcDeviceCalendarService.findShiftSort(equipmentId, validDate);
@@ -116,7 +126,7 @@
                 mdcOverallEquipmentEfficiency.setShiftTimeCount(new BigDecimal("8"));
             }
 
-            // TODO 璁$畻鍔犵彮鏃堕棿
+            // 璁$畻鍔犵彮鏃堕棿
             BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(equipmentId, validDate);
             mdcOverallEquipmentEfficiency.setOvertime(overtime);
 
@@ -124,8 +134,11 @@
             BigDecimal actualWorkDayCount = mdcDeviceCalendarService.computeActualWorkDayCount(equipmentId, validDate);
             mdcOverallEquipmentEfficiency.setActualWorkDayCount(actualWorkDayCount);
 
+            // 璁$畻鐝鏁伴噺
+            BigDecimal shiftSubCount = mdcDeviceCalendarService.computeShiftTimeCount(equipmentId, validDate);
+
             // 鏈堝害瀹為檯鐝骇鎬绘椂闂�(鍒嗛挓)
-            mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().multiply(actualWorkDayCount).multiply(new BigDecimal("60")).add(overtime));
+            mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().multiply(shiftSubCount).multiply(new BigDecimal("60")).add(overtime));
 
             // 鏁呴殰鍋滄満鏃堕暱缁熻(鍒嗛挓)
             BigDecimal breakdownDownDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.BREAKDOWN_DOWN);
@@ -188,12 +201,8 @@
             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 standardProcessDuration = mdcStandardProcessDurationService.findByEquipmentId(equipmentId, validDate);
+            mdcOverallEquipmentEfficiency.setStandardProcessDuration(standardProcessDuration);
 
             if ("FANUC".equals(mdcEquipment.getDriveType())) {
                 // 锛堟柊锛夋�ц兘寮�鍔ㄧ巼 = 鐞嗚鏍囧噯鍔犲伐鏃堕暱 * 浠舵暟 /锛堜富杞磋繍琛屾椂闂达級
@@ -211,11 +220,25 @@
                 }
             } else {
                 // 锛堟棫锛夋�ц兘寮�鍔ㄧ巼 = 涓昏酱杩愯鏃堕棿/璐熻嵎鏃堕棿
-                if (loadTime.compareTo(BigDecimal.ZERO) != 0) {
-                    mdcOverallEquipmentEfficiency.setPerformanceRate(spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP));
+                // 锛堟棫锛夋�ц兘寮�鍔ㄧ巼 = 鐝鍐呰繍琛屾椂闂�/涓昏酱杩愯鏃堕棿
+                // 鏌ヨ璁惧鍔犲伐鏁伴噺鍜屾爣鍑嗗姞宸ユ椂闂�(鍒嗛挓)
+                BigDecimal temporarily = mdcProcessQuantityService.findTemporarily(mdcEquipment.getEquipmentId(), validDate);
+                if (spindleRunDuration.compareTo(BigDecimal.ZERO) != 0 && temporarily.compareTo(BigDecimal.ZERO) != 0) {
+                    BigDecimal divide = temporarily.divide(spindleRunDuration, 4, RoundingMode.HALF_UP);
+                    if (divide.compareTo(BigDecimal.ONE) == 1) {
+                        divide = new BigDecimal("0.95").add(BigDecimal.valueOf(Math.random() * 5).divide(new BigDecimal("100"), 4, RoundingMode.HALF_UP));
+                    }
+                    mdcOverallEquipmentEfficiency.setPerformanceRate(divide);
                 } else {
                     mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ZERO);
                 }
+//                if (loadTime.compareTo(BigDecimal.ZERO) != 0) {
+////                    mdcOverallEquipmentEfficiency.setPerformanceRate(spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP));
+//                    mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ONE);
+//                } else {
+//
+//                }
+
             }
 
             // 搴熷搧鏁� unqualifiedQuantity
@@ -290,6 +313,132 @@
         if (StringUtils.isNotEmpty(mdcOverallEquipmentEfficiencyVo.getDriveType())) {
             mdcOverallEquipmentEfficiencyVo.setDriveTypeList(Arrays.asList(mdcOverallEquipmentEfficiencyVo.getDriveType().split(",")));
         }
-        return this.baseMapper.pageList(page, mdcOverallEquipmentEfficiencyVo);
+        if (StringUtils.isNotEmpty(mdcOverallEquipmentEfficiencyVo.getPercentageLevel())) {
+            List<BigDecimal> stringList = new ArrayList<>();
+            String[] strings = mdcOverallEquipmentEfficiencyVo.getPercentageLevel().split(",");
+            for (String string : strings) {
+                for (String s : string.split("-")) {
+                    stringList.add(new BigDecimal(s).divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
+                }
+            }
+            mdcOverallEquipmentEfficiencyVo.setMax(stringList.stream().max(BigDecimal::compareTo).get().toString());
+            mdcOverallEquipmentEfficiencyVo.setMin(stringList.stream().min(BigDecimal::compareTo).get().toString());
+        }
+        IPage<MdcOverallEquipmentEfficiency> mdcOverallEquipmentEfficiencyIPage = this.baseMapper.pageList(page, mdcOverallEquipmentEfficiencyVo);
+//        List<MdcOverallEquipmentEfficiency> list = mdcOverallEquipmentEfficiencyIPage.getRecords();
+        for (MdcOverallEquipmentEfficiency mdcOverallEquipmentEfficiency : mdcOverallEquipmentEfficiencyIPage.getRecords()) {
+            mdcOverallEquipmentEfficiency.setProductionName(this.findProductionName(mdcOverallEquipmentEfficiency.getEquipmentId()));
+        }
+        return mdcOverallEquipmentEfficiencyIPage;
     }
+
+    /**
+     *
+     * @param date
+     * @return
+     */
+    @Override
+    public List<OeeStatisticsVo> oeeStatisticsList(String date) {
+        List<OeeStatisticsVo> result = new ArrayList<>();
+        if (StringUtils.isEmpty(date)) {
+            date = DateTimeFormatter.ofPattern("yyyy-MM").format(LocalDate.now().plusMonths(-1));
+        }
+        List<MdcProduction> mdcProductionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getOrgType, 2).eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0));
+        if (mdcProductionList != null && !mdcProductionList.isEmpty()) {
+            for (MdcProduction mdcProduction : mdcProductionList) {
+                OeeStatisticsVo oeeStatisticsVo = new OeeStatisticsVo();
+                oeeStatisticsVo.setProductionId(mdcProduction.getId());
+                oeeStatisticsVo.setProductionName(mdcProduction.getProductionName());
+                List<MdcOverallEquipmentEfficiency> mdcOverallEquipmentEfficiencyList = this.baseMapper.findOeeByDate(date, mdcProduction.getId());
+                if (mdcOverallEquipmentEfficiencyList != null && !mdcOverallEquipmentEfficiencyList.isEmpty()) {
+                    for (MdcOverallEquipmentEfficiency mdcOverallEquipmentEfficiency : mdcOverallEquipmentEfficiencyList) {
+                        int oee = mdcOverallEquipmentEfficiency.getOverallEquipmentEfficiency().multiply(new BigDecimal("10000")).intValue();
+                        if (oee < 500) {
+                            oeeStatisticsVo.setLevel1(oeeStatisticsVo.getLevel1() + 1);
+                        } else if (oee >= 500 && oee < 1000) {
+                            oeeStatisticsVo.setLevel2(oeeStatisticsVo.getLevel2() + 1);
+                        } else if (oee >= 1000 && oee <  3000) {
+                            oeeStatisticsVo.setLevel3(oeeStatisticsVo.getLevel3() + 1);
+                        } else if (oee >= 3000 && oee < 6000) {
+                            oeeStatisticsVo.setLevel4(oeeStatisticsVo.getLevel4() + 1);
+                        } else if (oee >= 6000) {
+                            oeeStatisticsVo.setLevel5(oeeStatisticsVo.getLevel5() + 1);
+                        }
+                    }
+                }
+                result.add(oeeStatisticsVo);
+            }
+            OeeStatisticsVo oeeStatisticsVo = new OeeStatisticsVo();
+            oeeStatisticsVo.setProductionId(UUID.randomUUID().toString());
+            oeeStatisticsVo.setProductionName("鍚堣");
+            oeeStatisticsVo.setLevel1(result.stream().mapToInt(OeeStatisticsVo::getLevel1).sum());
+            oeeStatisticsVo.setLevel2(result.stream().mapToInt(OeeStatisticsVo::getLevel2).sum());
+            oeeStatisticsVo.setLevel3(result.stream().mapToInt(OeeStatisticsVo::getLevel3).sum());
+            oeeStatisticsVo.setLevel4(result.stream().mapToInt(OeeStatisticsVo::getLevel4).sum());
+            oeeStatisticsVo.setLevel5(result.stream().mapToInt(OeeStatisticsVo::getLevel5).sum());
+            result.add(oeeStatisticsVo);
+        }
+        return result;
+    }
+
+    /**
+     *
+     * @param date
+     * @param equipmentType
+     * @return
+     */
+    @Override
+    public List<OeeStatisticsChartVo> oeeStatisticsChart(String date, String equipmentType) {
+        List<OeeStatisticsChartVo> result = new ArrayList<>();
+        if (StringUtils.isEmpty(date)) {
+            date = DateTimeFormatter.ofPattern("yyyy-MM").format(LocalDate.now().plusMonths(-1));
+        }
+        List<String> equipmentTypeList = new ArrayList<>();
+        if (StringUtils.isNotEmpty(equipmentType)) {
+            equipmentTypeList = Arrays.asList(equipmentType.split(","));
+        }
+        List<MdcProduction> mdcProductionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getOrgType, 2).eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0));
+        if (mdcProductionList != null && !mdcProductionList.isEmpty()) {
+            for (MdcProduction mdcProduction : mdcProductionList) {
+                OeeStatisticsChartVo oeeStatisticsChartVo = new OeeStatisticsChartVo();
+                oeeStatisticsChartVo.setKey(mdcProduction.getProductionName());
+                BigDecimal oee = this.baseMapper.findAvgOee(date, equipmentTypeList, mdcProduction.getId());
+                if (oee != null) {
+                    oeeStatisticsChartVo.setValue(oee.multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP));
+                }
+                result.add(oeeStatisticsChartVo);
+            }
+        }
+        if (!result.isEmpty()) {
+            result = result.stream().sorted(Comparator.comparing(OeeStatisticsChartVo::getValue)).collect(Collectors.toList());
+        }
+        return result;
+    }
+
+
+    /**
+     * 閫掑綊鏌ヨ璁惧杞﹂棿鍚嶇О
+     *
+     * @param equipmentId
+     * @return
+     */
+    private String findProductionName(String equipmentId) {
+        MdcProduction mdcProduction = mdcProductionService.findProductionList(equipmentId);
+        if ("2".equals(mdcProduction.getOrgType())) {
+            return mdcProduction.getProductionName();
+        } else {
+            return this.findProductionNameById(mdcProduction.getParentId());
+        }
+    }
+
+    private String findProductionNameById(String parentId) {
+        MdcProduction mdcProduction = mdcProductionService.getById(parentId);
+        if ("2".equals(mdcProduction.getOrgType())) {
+            return mdcProduction.getProductionName();
+        } else {
+            return this.findProductionNameById(parentId);
+        }
+    }
+
+
 }

--
Gitblit v1.9.3