| | |
| | | import org.jeecg.modules.mdc.entity.MdcEquipment; |
| | | import org.jeecg.modules.mdc.entity.MdcOeeInfo; |
| | | import org.jeecg.modules.mdc.mapper.MdcOeeInfoMapper; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentService; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentStatisticalInfoService; |
| | | import org.jeecg.modules.mdc.service.IMdcOeeInfoService; |
| | | import org.jeecg.modules.mdc.service.IMdcPlanCloseService; |
| | | import org.jeecg.modules.mdc.service.*; |
| | | import org.jeecg.modules.mdc.util.DateUtils; |
| | | import org.jeecg.modules.mdc.vo.MdcOeeComputeVo; |
| | | import org.jeecg.modules.mdc.vo.MdcOeeInfoVo; |
| | |
| | | private IMdcEquipmentService mdcEquipmentService; |
| | | |
| | | @Resource |
| | | private IMdcPlanCloseService mdcPlanCloseService; |
| | | private IMdcDowntimeService mdcDowntimeService; |
| | | |
| | | // @Resource |
| | | // private IMdcPartProcessInfoService mdcPartProcessInfoService; |
| | | @Resource |
| | | private IMdcPartProcessInfoService mdcPartProcessInfoService; |
| | | |
| | | @Resource |
| | | private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService; |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void computeOee(MdcOeeComputeVo mdcOeeComputeVo) { |
| | | List<MdcOeeInfo> result = new ArrayList<>(); |
| | | String startDate = mdcOeeComputeVo.getStartDate(); |
| | | String endDate = mdcOeeComputeVo.getEndDate(); |
| | | String startDate = mdcOeeComputeVo.getStartTime(); |
| | | String endDate = mdcOeeComputeVo.getEndTime(); |
| | | List<String> dateList = DateUtils.getDatesStringList(DateUtils.getShortDate(startDate), DateUtils.getShortDate(endDate)); |
| | | if (!dateList.isEmpty()) { |
| | | //获取设备列表 |
| | |
| | | // 工作日历时间(min) --- 按每天24小时算 |
| | | mdcOeeInfo.setCalendarLong(1440); |
| | | // 计划停机时间(min) --- 按维护数据统计当天总时长 |
| | | // Integer planCloseLong = mdcPlanCloseService.findPlanTimeDuration(equipmentId, validDate, CommonConstant.CLOSE_TYPE_1); |
| | | // mdcOeeInfo.setPlanCloseLong(planCloseLong); |
| | | Integer planCloseLong = mdcDowntimeService.findPlanTimeDuration(equipmentId, validDate, CommonConstant.CLOSE_TYPE_0); |
| | | mdcOeeInfo.setPlanCloseLong(planCloseLong); |
| | | // 负荷时间(min) --- 日历工作时间-计划停机时间 |
| | | // Integer loadLong = mdcOeeInfo.getCalendarLong() - planCloseLong; |
| | | // mdcOeeInfo.setLoadLong(loadLong); |
| | | Integer loadLong = mdcOeeInfo.getCalendarLong() - planCloseLong; |
| | | mdcOeeInfo.setLoadLong(loadLong); |
| | | // 非计划停机时间(min) --- 按维护数据统计当天总时长 |
| | | // Integer noPlanCloseLong = mdcPlanCloseService.findPlanTimeDuration(equipmentId, validDate, CommonConstant.CLOSE_TYPE_2); |
| | | // mdcOeeInfo.setNoplanCloseLong(noPlanCloseLong); |
| | | Integer noPlanCloseLong = mdcDowntimeService.findPlanTimeDuration(equipmentId, validDate, CommonConstant.CLOSE_TYPE_1); |
| | | mdcOeeInfo.setNoplanCloseLong(noPlanCloseLong); |
| | | // 开动时间(min) --- 负荷时间-非计划停机时间 |
| | | // int actuateLong = loadLong - noPlanCloseLong; |
| | | // mdcOeeInfo.setActuateLong(actuateLong); |
| | | int actuateLong = loadLong - noPlanCloseLong; |
| | | mdcOeeInfo.setActuateLong(actuateLong); |
| | | // 时间开动率 --- 开动时间/负荷时间 |
| | | // BigDecimal timeActuationRate = new BigDecimal(actuateLong).divide(new BigDecimal(loadLong), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); |
| | | // mdcOeeInfo.setTimeActuationRate(timeActuationRate); |
| | | BigDecimal timeActuationRate = new BigDecimal(actuateLong).divide(new BigDecimal(loadLong), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); |
| | | mdcOeeInfo.setTimeActuationRate(timeActuationRate); |
| | | // 有效运行时间 --- 按需求维护零件加工总时长||系统主轴负载时间 |
| | | Integer effectiveRunLong = 0; |
| | | // Integer totalProcessLong = mdcPartProcessInfoService.selectTotalProcessLong(equipmentId, validDate); |
| | | // if (totalProcessLong == 0) { |
| | | // //查询设备运行时间 |
| | | // effectiveRunLong = mdcEquipmentStatisticalInfoService.selectProcessLong(equipmentId, validDate.replace("-", "")); |
| | | // } else { |
| | | // effectiveRunLong = totalProcessLong; |
| | | // } |
| | | effectiveRunLong = mdcEquipmentStatisticalInfoService.selectProcessLong(equipmentId, validDate.replace("-", "")); |
| | | if (effectiveRunLong == null) { |
| | | effectiveRunLong = 0; |
| | | } |
| | | mdcOeeInfo.setEffectiveRunLong(effectiveRunLong); |
| | | // 性能开动率 --- 有效运行时间/开动时间 |
| | | BigDecimal performanceRate = BigDecimal.ZERO; |
| | | // if (effectiveRunLong != 0 && actuateLong != 0) { |
| | | // performanceRate = new BigDecimal(effectiveRunLong).divide(new BigDecimal(actuateLong), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); |
| | | // } |
| | | mdcOeeInfo.setPerformanceRate(performanceRate); |
| | | if (effectiveRunLong != 0 && actuateLong != 0) { |
| | | performanceRate = new BigDecimal(effectiveRunLong).divide(new BigDecimal(actuateLong), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); |
| | | } |
| | | mdcOeeInfo.setPerformanceRate(performanceRate.compareTo(new BigDecimal(100)) > 0 ? new BigDecimal(100) : performanceRate); |
| | | // 加工零件数量 --- 按维护数据统计当天 |
| | | // Integer processCount = mdcPartProcessInfoService.selectTotalProcessCount(equipmentId, validDate); |
| | | // mdcOeeInfo.setProcessCount(processCount); |
| | | Integer processCount = mdcPartProcessInfoService.selectTotalProcessCount(equipmentId, validDate); |
| | | mdcOeeInfo.setProcessCount(processCount); |
| | | // 合格零件数量 --- 按维护数据统计当天 |
| | | // Integer passCount = mdcPartProcessInfoService.selectTotalPassCount(equipmentId, validDate); |
| | | // mdcOeeInfo.setPassCount(passCount); |
| | | Integer passCount = mdcPartProcessInfoService.selectTotalPassCount(equipmentId, validDate); |
| | | mdcOeeInfo.setPassCount(passCount); |
| | | // 合格率 --- 合格数/加工数 |
| | | BigDecimal passRate = BigDecimal.ZERO; |
| | | // if (processCount != 0 && passCount != 0) { |
| | | // passRate = new BigDecimal(passCount).divide(new BigDecimal(processCount), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); |
| | | // } |
| | | BigDecimal passRate = new BigDecimal("100"); |
| | | if (processCount != 0 && passCount != 0) { |
| | | passRate = new BigDecimal(passCount).divide(new BigDecimal(processCount), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP); |
| | | } |
| | | mdcOeeInfo.setPassRate(passRate); |
| | | // OEE --- 时间开动率 * 性能开动率 * 一次合格率 |
| | | BigDecimal oee = BigDecimal.ZERO; |
| | | // if (!timeActuationRate.equals(BigDecimal.ZERO) && !performanceRate.equals(BigDecimal.ZERO) && !passRate.equals(BigDecimal.ZERO)) { |
| | | // oee = timeActuationRate.multiply(performanceRate).multiply(passRate).divide(new BigDecimal("10000"), 4, RoundingMode.HALF_UP); |
| | | // } |
| | | if (!timeActuationRate.equals(BigDecimal.ZERO) && !performanceRate.equals(BigDecimal.ZERO) && !passRate.equals(BigDecimal.ZERO)) { |
| | | oee = timeActuationRate.multiply(performanceRate).multiply(passRate).divide(new BigDecimal("10000"), 4, RoundingMode.HALF_UP); |
| | | } |
| | | mdcOeeInfo.setOee(oee); |
| | | result.add(mdcOeeInfo); |
| | | } |
| | |
| | | super.saveBatch(result); |
| | | } |
| | | |
| | | @Override |
| | | public BigDecimal findByEquIdAndMonth(List<String> equipmentIdList, String month) { |
| | | return this.baseMapper.findByEquIdAndMonth(equipmentIdList, month); |
| | | } |
| | | |
| | | } |