From 435c2e83b4caefee5676fedfd7a27d7b0362693d Mon Sep 17 00:00:00 2001 From: Lius <Lius2225@163.com> Date: 星期五, 27 九月 2024 15:19:32 +0800 Subject: [PATCH] update --- lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java | 243 ++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 214 insertions(+), 29 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 60c496c..10f3bdf 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,23 +5,29 @@ 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 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.Collections; -import java.util.List; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; /** * @author: LiuS @@ -54,11 +60,20 @@ @Resource private IMdcEquipmentStatisticalShiftInfoService mdcEquipmentStatisticalShiftInfoService; + @Resource + private IProcessCountService processCountService; + + @Resource + private IMdcProductionService mdcProductionService; + + @Resource + private IMdcProcessQuantityService mdcProcessQuantityService; + /** * 璁$畻璁惧缁煎悎鏁堢巼OEE */ @Override - public void runningOverallEquipmentEfficiency() { + public void runningOverallEquipmentEfficiency(String dateTime) { /* OEE = 鏃堕棿寮�鍔ㄧ巼 脳 鎬ц兘寮�鍔ㄧ巼 脳 鍚堟牸鍝佺巼 鏃堕棿寮�鍔ㄧ巼 = 锛堣礋鑽锋椂闂� - 闈炶鍒掑仠鏈烘椂闂达級 / 璐熻嵎鏃堕棿 脳 100% @@ -72,6 +87,17 @@ 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(); for (MdcEquipment mdcEquipment : equipmentList) { @@ -83,16 +109,23 @@ mdcOverallEquipmentEfficiency.setEquipmentName(mdcEquipment.getEquipmentName()); mdcOverallEquipmentEfficiency.setEquipmentModel(mdcEquipment.getEquipmentModel()); mdcOverallEquipmentEfficiency.setValidDate(validDate); + // +// mdcOverallEquipmentEfficiency.setProductionName(); // 鏌ヨ鐝埗鍒嗙被 List<String> shiftSubIdList = mdcDeviceCalendarService.findShiftSort(equipmentId, validDate); if (shiftSubIdList != null && !shiftSubIdList.isEmpty()) { String shift = String.join(",", shiftSubIdList); mdcOverallEquipmentEfficiency.setShift(shift); + } else { + mdcOverallEquipmentEfficiency.setShift("鏃�"); } - BigDecimal shiftTimeCount = mdcDeviceCalendarService.computeShiftTimeCount(equipmentId, validDate); - mdcOverallEquipmentEfficiency.setShiftTimeCount(shiftTimeCount); + if (StringUtils.isEmpty(mdcOverallEquipmentEfficiency.getShift())) { + mdcOverallEquipmentEfficiency.setShiftTimeCount(BigDecimal.ZERO); + } else { + mdcOverallEquipmentEfficiency.setShiftTimeCount(new BigDecimal("8")); + } // 璁$畻鍔犵彮鏃堕棿 BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(equipmentId, validDate); @@ -103,7 +136,7 @@ mdcOverallEquipmentEfficiency.setActualWorkDayCount(actualWorkDayCount); // 鏈堝害瀹為檯鐝骇鎬绘椂闂�(鍒嗛挓) - mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().add(overtime)); + mdcOverallEquipmentEfficiency.setMonthActualWorkDayTimeCount(mdcOverallEquipmentEfficiency.getShiftTimeCount().multiply(actualWorkDayCount).multiply(new BigDecimal("60")).add(overtime)); // 鏁呴殰鍋滄満鏃堕暱缁熻(鍒嗛挓) BigDecimal breakdownDownDuration = mdcNoplanCloseService.findNoplanTimeDuration(equipmentId, validDate, MdcConstant.BREAKDOWN_DOWN); @@ -139,35 +172,73 @@ */ // mdcOverallEquipmentEfficiency.getShiftTimeCount() - plannedMaintenanceDuration - conferenceTrainingDuration - otherRestDuration // 璐熻嵎鏃堕棿(鍒嗛挓) - BigDecimal loadTime = mdcOverallEquipmentEfficiency.getShiftTimeCount().subtract(plannedMaintenanceDuration).subtract(conferenceTrainingDuration).subtract(otherRestDuration); + BigDecimal loadTime = mdcOverallEquipmentEfficiency.getMonthActualWorkDayTimeCount().subtract(plannedMaintenanceDuration).subtract(conferenceTrainingDuration).subtract(otherRestDuration).add(overtime); + 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); 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); + timeActuationRate = spindleRunDuration.divide(loadTime, 4, RoundingMode.HALF_UP); mdcOverallEquipmentEfficiency.setTimeActuationRate(timeActuationRate); } + + BigDecimal processQuantity; // 鍔犲伐闆朵欢鏁�(浠�) 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)); + if ("FANUC".equals(mdcEquipment.getDriveType())) { + processQuantity = processCountService.findCount(equipmentId, validDate); } else { - mdcOverallEquipmentEfficiency.setStandardProcessDuration(BigDecimal.ZERO); + processQuantity = mdcPassRateService.findProcessQuantity(equipmentId, validDate); + } + mdcOverallEquipmentEfficiency.setProcessQuantity(processQuantity); + + // 鏍囧噯鍔犲伐鏃堕棿(鍒嗛挓) + BigDecimal standardProcessDuration = mdcStandardProcessDurationService.findByEquipmentId(equipmentId, validDate); + mdcOverallEquipmentEfficiency.setStandardProcessDuration(standardProcessDuration); + + 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)); + } + mdcOverallEquipmentEfficiency.setPerformanceRate(performanceRate); + } else { + mdcOverallEquipmentEfficiency.setPerformanceRate(BigDecimal.ZERO); + } + } else { + // 锛堟棫锛夋�ц兘寮�鍔ㄧ巼 = 涓昏酱杩愯鏃堕棿/璐熻嵎鏃堕棿 + // 锛堟棫锛夋�ц兘寮�鍔ㄧ巼 = 鐝鍐呰繍琛屾椂闂�/涓昏酱杩愯鏃堕棿 + // 鏌ヨ璁惧鍔犲伐鏁伴噺鍜屾爣鍑嗗姞宸ユ椂闂�(鍒嗛挓) + 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 { +// +// } + } - // 鎬ц兘寮�鍔ㄧ巼 = 涓昏酱杩愯鏃堕棿/璐熻嵎鏃堕棿 - // 鏌ヨ涓昏酱杩愯鏃堕棿(鍒嗛挓) - BigDecimal spindleRunDuration = mdcEquipmentStatisticalShiftInfoService.findSpindleRunDuration(equipmentId, validDate); - 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); @@ -177,10 +248,11 @@ } else { mdcOverallEquipmentEfficiency.setPassRate((processQuantity.subtract(unqualifiedQuantity)).divide(processQuantity, 4, RoundingMode.HALF_UP)); } + // 璁惧缁煎悎鏁堢巼 = 鏃堕棿寮�鍔ㄧ巼 脳 鎬ц兘寮�鍔ㄧ巼 脳 鍚堟牸鍝佺巼 - mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(timeActuationRate.multiply(mdcOverallEquipmentEfficiency.getPerformanceRate()).multiply(mdcOverallEquipmentEfficiency.getPassRate())); + mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(timeActuationRate.multiply(mdcOverallEquipmentEfficiency.getPerformanceRate()).multiply(mdcOverallEquipmentEfficiency.getPassRate()).setScale(4, RoundingMode.HALF_UP)); if (mdcOverallEquipmentEfficiency.getOverallEquipmentEfficiency().compareTo(BigDecimal.ZERO) == 0) { - mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(BigDecimal.ONE); + mdcOverallEquipmentEfficiency.setOverallEquipmentEfficiency(BigDecimal.ZERO); } result.add(mdcOverallEquipmentEfficiency); @@ -227,6 +299,119 @@ if (mdcOverallEquipmentEfficiencyVo.getEquipmentIdList() == null || mdcOverallEquipmentEfficiencyVo.getEquipmentIdList().isEmpty()) { return null; } - return this.baseMapper.pageList(page, mdcOverallEquipmentEfficiencyVo); + if (StringUtils.isNotEmpty(mdcOverallEquipmentEfficiencyVo.getEquipmentType())) { + mdcOverallEquipmentEfficiencyVo.setEquipmentTypeList(Arrays.asList(mdcOverallEquipmentEfficiencyVo.getEquipmentType().split(","))); + } + if (StringUtils.isNotEmpty(mdcOverallEquipmentEfficiencyVo.getDeviceCategory())) { + mdcOverallEquipmentEfficiencyVo.setDeviceCategoryList(Arrays.asList(mdcOverallEquipmentEfficiencyVo.getDeviceCategory().split(","))); + } + if (StringUtils.isNotEmpty(mdcOverallEquipmentEfficiencyVo.getDeviceLevel())) { + mdcOverallEquipmentEfficiencyVo.setDeviceLevelList(Arrays.asList(mdcOverallEquipmentEfficiencyVo.getDeviceLevel().split(","))); + } + if (StringUtils.isNotEmpty(mdcOverallEquipmentEfficiencyVo.getDriveType())) { + mdcOverallEquipmentEfficiencyVo.setDriveTypeList(Arrays.asList(mdcOverallEquipmentEfficiencyVo.getDriveType().split(","))); + } + 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.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); + } + } + 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<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, equipmentType, mdcProduction.getId()); + if (oee != null) { + oeeStatisticsChartVo.setValue(oee); + } + 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