Lius
2024-06-18 1279d6eee2934b2765ce4ea1bf3a4d45d931760d
lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOverallEquipmentEfficiencyServiceImpl.java
@@ -21,6 +21,7 @@
import java.math.RoundingMode;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -105,12 +106,17 @@
            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"));
            }
            // 计算加班时间
            // TODO 计算加班时间
            BigDecimal overtime = mdcEquipmentOvertimeService.computeOvertime(equipmentId, validDate);
            mdcOverallEquipmentEfficiency.setOvertime(overtime);
@@ -119,7 +125,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);
@@ -155,7 +161,10 @@
             */
            // 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);
            if (loadTime.compareTo(BigDecimal.ZERO) < 0) {
                loadTime = BigDecimal.ZERO;
            }
            mdcOverallEquipmentEfficiency.setLoadTime(loadTime.divide(new BigDecimal("60"), 1, RoundingMode.HALF_UP));
            // 时间开动率 = 主轴运行时间/负荷时间
@@ -169,8 +178,13 @@
                mdcOverallEquipmentEfficiency.setTimeActuationRate(timeActuationRate);
            }
            BigDecimal processQuantity;
            // 加工零件数(件)  processQuantity
            BigDecimal processQuantity = mdcPassRateService.findProcessQuantity(equipmentId, validDate);
            if ("FANUC".equals(mdcEquipment.getDriveType())) {
                processQuantity = processCountService.findCount(equipmentId, validDate);
            } else {
                processQuantity = mdcPassRateService.findProcessQuantity(equipmentId, validDate);
            }
            mdcOverallEquipmentEfficiency.setProcessQuantity(processQuantity);
            // 标准加工时间(分钟)
@@ -217,7 +231,7 @@
            // 设备综合效率 = 时间开动率 × 性能开动率 × 合格品率
            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);
@@ -264,6 +278,18 @@
        if (mdcOverallEquipmentEfficiencyVo.getEquipmentIdList() == null || mdcOverallEquipmentEfficiencyVo.getEquipmentIdList().isEmpty()) {
            return null;
        }
        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(",")));
        }
        return this.baseMapper.pageList(page, mdcOverallEquipmentEfficiencyVo);
    }
}