| | |
| | | // 月度实际班产总时间(分钟) |
| | | 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 = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.PLANNED_MAINTENANCE); |
| | | mdcOverallEquipmentEfficiency.setPlannedMaintenanceDuration(plannedMaintenanceDuration); |
| | | // 会议/培训时长统计(分钟) |
| | | BigDecimal conferenceTrainingDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.CONFERENCE_TRAINING); |
| | | mdcOverallEquipmentEfficiency.setConferenceTrainingDuration(conferenceTrainingDuration); |
| | | // 其它休息时长统计(分钟) |
| | | BigDecimal otherRestDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.OTHER_REST); |
| | | mdcOverallEquipmentEfficiency.setOtherRestDuration(otherRestDuration); |
| | | // // 故障停机时长统计(分钟) |
| | | // 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 = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.PLANNED_MAINTENANCE); |
| | | // mdcOverallEquipmentEfficiency.setPlannedMaintenanceDuration(plannedMaintenanceDuration); |
| | | // // 会议/培训时长统计(分钟) |
| | | // BigDecimal conferenceTrainingDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.CONFERENCE_TRAINING); |
| | | // mdcOverallEquipmentEfficiency.setConferenceTrainingDuration(conferenceTrainingDuration); |
| | | // // 其它休息时长统计(分钟) |
| | | // BigDecimal otherRestDuration = mdcPlanCloseService.findPlanTimeDuration(actualWorkDayCount, MdcConstant.OTHER_REST); |
| | | // mdcOverallEquipmentEfficiency.setOtherRestDuration(otherRestDuration); |
| | | /* |
| | | 负荷时间(小时) = 工作日历时间 - 计划停机时间 |
| | | 工作日历时间 = 日历时间 - 法定假日 - 双休日 + 加班时间 |
| | |
| | | */ |
| | | // mdcOverallEquipmentEfficiency.getShiftTimeCount() - plannedMaintenanceDuration - conferenceTrainingDuration - 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)); |
| | | // 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)); |
| | | |
| | | // 时间开动率 = 主轴运行时间/负荷时间 |
| | | // 查询主轴运行时间(分钟) |
| | | 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 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); |
| | | // 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); |
| | | // } |
| | | |
| | | // 标准加工时间(分钟) |
| | | 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)); |
| | | } |
| | | 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); |
| | | } |
| | | } |
| | | // 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 { |
| | | // // (旧)性能开动率 = 主轴运行时间/负荷时间 |
| | | // 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); |
| | | } |
| | | // 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); |
| | | |
| | | } |