| | |
| | | |
| | | import com.baomidou.mybatisplus.core.toolkit.StringUtils; |
| | | import org.jeecg.modules.mdc.entity.EquipmentLog; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipment; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; |
| | | import org.jeecg.modules.mdc.entity.MdcOverallEquipmentEfficiency; |
| | | import org.jeecg.modules.mdc.mapper.MdcHomeMapper; |
| | | import org.jeecg.modules.mdc.service.IEquipmentLogService; |
| | | import org.jeecg.modules.mdc.service.IMdcEquipmentService; |
| | | import org.jeecg.modules.mdc.service.IMdcHomeService; |
| | | import org.jeecg.modules.mdc.util.DateUtils; |
| | | import org.jeecg.modules.mdc.vo.MdcCommonVo; |
| | | import org.jeecg.modules.mdc.vo.MdcEquipmentStatusVo; |
| | | import org.jeecg.modules.mdc.vo.*; |
| | | import org.jeecg.modules.system.entity.MdcProduction; |
| | | import org.jeecg.modules.system.service.IMdcProductionService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | |
| | | @Resource |
| | | private MdcHomeMapper mdcHomeMapper; |
| | | |
| | | @Resource |
| | | private IMdcProductionService mdcProductionService; |
| | | |
| | | /** |
| | | * 设备运行状态统计 |
| | |
| | | MdcCommonVo mdcCommonVo = new MdcCommonVo(); |
| | | mdcCommonVo.setName(mdcProduction.getProductionName()); |
| | | mdcCommonVo.setProductionCode(mdcProduction.getProductionCode()); |
| | | mdcCommonVo.setProductionId(mdcProduction.getId()); |
| | | //获取此层级下设备 |
| | | List<String> equipmentIdList = mdcEquipmentService.getEquipmentIdsProduction(userId, mdcProduction.getId()); |
| | | if (equipmentIdList == null || equipmentIdList.isEmpty()) { |
| | |
| | | if (processCount == null || processCount.compareTo(BigDecimal.ZERO) == 0) { |
| | | mdcCommonVo.setValue("0"); |
| | | } else { |
| | | mdcCommonVo.setValue(processCount.divide(new BigDecimal(86400).multiply(new BigDecimal(equipmentIdList.size())), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toString()); |
| | | mdcCommonVo.setValue(processCount.divide(new BigDecimal("86400").multiply(new BigDecimal(equipmentIdList.size())), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toString()); |
| | | } |
| | | } |
| | | result.add(mdcCommonVo); |
| | |
| | | MdcCommonVo mdcCommonVo = new MdcCommonVo(); |
| | | mdcCommonVo.setName(mdcProduction.getProductionName()); |
| | | mdcCommonVo.setProductionCode(mdcProduction.getProductionCode()); |
| | | mdcCommonVo.setProductionId(mdcProduction.getId()); |
| | | //获取此层级下设备 |
| | | List<String> equipmentIdList = mdcEquipmentService.getEquipmentIdsProduction(userId, mdcProduction.getId()); |
| | | if (equipmentIdList == null || equipmentIdList.isEmpty()) { |
| | |
| | | if (processLong.compareTo(BigDecimal.ZERO) == 0) { |
| | | mdcCommonUtilizationVo.setValue("0"); |
| | | } else { |
| | | mdcCommonUtilizationVo.setValue(processLong.divide(processDay, 4, RoundingMode.HALF_UP).divide(new BigDecimal("86400").multiply(new BigDecimal(equipmentIdList.size())), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toString()); |
| | | mdcCommonUtilizationVo.setValue(processLong.divide(processDay.multiply(new BigDecimal("86400")), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toString()); |
| | | } |
| | | } else { |
| | | mdcCommonUtilizationVo.setValue("0"); |
| | |
| | | result.put("oeeList", oeeList); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 工段级前七天利用率折线图 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getEquipmentDayUtilizationStatistics(String userId, String key) { |
| | | Map<String, Object> result = new HashMap<>(); |
| | | List<String> equipmentIdList = mdcEquipmentService.getEquipmentIdsProduction(userId, key); |
| | | //获取前七天日期集合 |
| | | String start = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-7).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); |
| | | String end = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-1).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); |
| | | if (equipmentIdList != null && !equipmentIdList.isEmpty()) { |
| | | result.put("equipmentIdList", equipmentIdList); |
| | | List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfoList = mdcHomeMapper.getEquipmentSevenUtilizationStatistics(equipmentIdList, start, end); |
| | | List<EquipmentDayUtilizationVo> dataList = new ArrayList<>(); |
| | | if (mdcEquipmentStatisticalInfoList != null && !mdcEquipmentStatisticalInfoList.isEmpty()) { |
| | | for (MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo : mdcEquipmentStatisticalInfoList) { |
| | | EquipmentDayUtilizationVo equipmentDayUtilizationVo = new EquipmentDayUtilizationVo(); |
| | | equipmentDayUtilizationVo.setEquipmentId(mdcEquipmentStatisticalInfo.getEquipmentId()); |
| | | equipmentDayUtilizationVo.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(mdcEquipmentStatisticalInfoList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | if (BigDecimal.ZERO.compareTo(mdcEquipmentStatisticalInfo.getOpenLong()) == -1) { |
| | | equipmentDayUtilizationVo.setOpenRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | equipmentDayUtilizationVo.setStartRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(mdcEquipmentStatisticalInfoList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | dataList.add(equipmentDayUtilizationVo); |
| | | } |
| | | } |
| | | result.put("dataList", dataList); |
| | | } |
| | | /*List<String> dayBetween = DateUtils.getDatesStringList2(start, end); |
| | | List<String> dateList = new ArrayList<>(); |
| | | List<EquipmentDayUtilizationVo> dataList = new ArrayList<>(); |
| | | for (String date : dayBetween) { |
| | | EquipmentDayUtilizationVo equipmentDayUtilizationVo = new EquipmentDayUtilizationVo(); |
| | | String item = date.substring(4); |
| | | if (item.startsWith("0")) { |
| | | item = item.substring(1); |
| | | String sub = item.substring(1); |
| | | if (sub.startsWith("0")) { |
| | | item = item.substring(0, 1) + "月" + sub.substring(1) + "日"; |
| | | } else { |
| | | item = item.substring(0, 1) + "月" + item.substring(1) + "日"; |
| | | } |
| | | } else { |
| | | String sub = item.substring(2); |
| | | if (sub.startsWith("0")) { |
| | | item = item.substring(0, 2) + "月" + sub.substring(2) + "日"; |
| | | } else { |
| | | item = item.substring(0, 2) + "月" + item.substring(2) + "日"; |
| | | } |
| | | } |
| | | dateList.add(item); |
| | | equipmentDayUtilizationVo.setDate(item); |
| | | if (equipmentIdList != null && !equipmentIdList.isEmpty()) { |
| | | //获取前七天利用率数据 |
| | | List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfos = mdcHomeMapper.getEquipmentDayUtilizationStatistics(equipmentIdList, dayBetween); |
| | | if (mdcEquipmentStatisticalInfos != null && !mdcEquipmentStatisticalInfos.isEmpty()) { |
| | | for (MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo : mdcEquipmentStatisticalInfos) { |
| | | if (mdcEquipmentStatisticalInfo.getTheDate().equals(date)) { |
| | | equipmentDayUtilizationVo.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(equipmentIdList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | if (BigDecimal.ZERO.compareTo(mdcEquipmentStatisticalInfo.getOpenLong()) == -1) { |
| | | equipmentDayUtilizationVo.setOpenRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | equipmentDayUtilizationVo.setStartRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(equipmentIdList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | dataList.add(equipmentDayUtilizationVo); |
| | | } |
| | | } else { |
| | | dataList.add(equipmentDayUtilizationVo); |
| | | } |
| | | } |
| | | result.put("dateList", dateList); |
| | | result.put("dataList", dataList);*/ |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 查询设备上月OEE |
| | | */ |
| | | @Override |
| | | public List<MdcOverallEquipmentEfficiency> getEquipmentOEEMonthStatistics(String userId, String key) { |
| | | List<MdcOverallEquipmentEfficiency> result = new ArrayList<>(); |
| | | List<String> equipmentIdList = mdcEquipmentService.getEquipmentIdsProduction(userId, key); |
| | | if (equipmentIdList != null && !equipmentIdList.isEmpty()) { |
| | | String validDate = DateUtils.format(DateUtils.toDate(LocalDate.now().plusMonths(-1).toString(), DateUtils.STR_DATE), DateUtils.STR_YEAR_MONTH); |
| | | result = mdcHomeMapper.getEquipmentOEEMonthStatistics(validDate, equipmentIdList); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 工段级设备效率 |
| | | */ |
| | | @Override |
| | | public MdcHomeEfficiencyVo getEquipmentEfficiencyStatistics(String userId, String key) { |
| | | MdcHomeEfficiencyVo result = new MdcHomeEfficiencyVo(); |
| | | result.setProductionId(key); |
| | | MdcProduction mdcProduction = mdcProductionService.getById(key); |
| | | result.setProductionName(mdcProduction.getProductionName()); |
| | | List<String> equipmentIdList = mdcEquipmentService.getEquipmentIdsProduction(userId, key); |
| | | if (equipmentIdList != null && !equipmentIdList.isEmpty()) { |
| | | // 获取利用率数据 |
| | | String date = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-1).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); |
| | | MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcHomeMapper.getUtilizationByDay(equipmentIdList, date); |
| | | if (mdcEquipmentStatisticalInfo != null) { |
| | | result.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(equipmentIdList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | if (BigDecimal.ZERO.compareTo(mdcEquipmentStatisticalInfo.getOpenLong()) == -1) { |
| | | result.setOpenRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | result.setStartRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).divide(new BigDecimal(equipmentIdList.size()), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | } |
| | | //获取OEE数据 |
| | | String month = DateUtils.format(DateUtils.toDate(LocalDate.now().plusMonths(-1).toString(), DateUtils.STR_DATE), DateUtils.STR_YEAR_MONTH); |
| | | BigDecimal oee = mdcHomeMapper.getOeeByDate(equipmentIdList, month); |
| | | if (oee == null || oee.compareTo(BigDecimal.ZERO) == 0) { |
| | | result.setOverallEquipmentEfficiency(BigDecimal.ZERO); |
| | | } else { |
| | | result.setOverallEquipmentEfficiency(oee.divide(new BigDecimal(equipmentIdList.size()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 设备级效率统计 |
| | | */ |
| | | @Override |
| | | public MdcHomeEfficiencyVo getEquipmentLevelEfficiencyStatistics(String equipmentId) { |
| | | MdcHomeEfficiencyVo result = new MdcHomeEfficiencyVo(); |
| | | String date = DateUtils.format(DateUtils.toDate(LocalDate.now().plusDays(-1).toString(), DateUtils.STR_DATE), DateUtils.STRDATE); |
| | | MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcHomeMapper.getUtilizationByDay(Arrays.asList(equipmentId.split(",")), date); |
| | | if (mdcEquipmentStatisticalInfo != null) { |
| | | result.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | if (BigDecimal.ZERO.compareTo(mdcEquipmentStatisticalInfo.getOpenLong()) == -1) { |
| | | result.setOpenRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | result.setStartRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | } |
| | | //获取OEE数据 |
| | | String month = DateUtils.format(DateUtils.toDate(LocalDate.now().plusMonths(-1).toString(), DateUtils.STR_DATE), DateUtils.STR_YEAR_MONTH); |
| | | BigDecimal oee = mdcHomeMapper.getOeeByDate(Arrays.asList(equipmentId.split(",")), month); |
| | | if (oee == null || oee.compareTo(BigDecimal.ZERO) == 0) { |
| | | result.setOverallEquipmentEfficiency(BigDecimal.ZERO); |
| | | } else { |
| | | result.setOverallEquipmentEfficiency(oee.multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 设备级整年度利用率 |
| | | */ |
| | | @Override |
| | | public Map<String, Object> getEquipmentAnnualEfficiencyStatistics(String equipmentId) { |
| | | Map<String, Object> result = new HashMap<>(); |
| | | Date end = DateUtils.toDate(LocalDate.now().plusMonths(-1).toString(), DateUtils.STR_DATE); |
| | | Date start = DateUtils.toDate(LocalDate.now().plusMonths(-12).toString(), DateUtils.STR_DATE); |
| | | List<String> monthBetween = DateUtils.getMonthBetween(start, end); |
| | | List<String> dateList = new ArrayList<>(); |
| | | List<MdcHomeEquipmentVo> dataList = new ArrayList<>(); |
| | | for (String month : monthBetween) { |
| | | String name = month.substring(month.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月"; |
| | | dateList.add(name); |
| | | //利用率和oee |
| | | MdcHomeEquipmentVo mdcHomeEquipmentVo = new MdcHomeEquipmentVo(); |
| | | mdcHomeEquipmentVo.setMonth(name); |
| | | //利用率 |
| | | Map<String, Object> resultMap = mdcHomeMapper.getUtilizationByMonth(Arrays.asList(equipmentId.split(",")), month.replace("-", "")); |
| | | if (resultMap != null && resultMap.get("processLong") != null) { |
| | | BigDecimal processLong = BigDecimal.valueOf((Double) resultMap.get("processLong")); |
| | | BigDecimal openLong = BigDecimal.valueOf((Double) resultMap.get("openLong")); |
| | | BigDecimal processDay = new BigDecimal((Integer) resultMap.get("processDay")); |
| | | if (BigDecimal.ZERO.compareTo(processLong) == -1) { |
| | | mdcHomeEquipmentVo.setUtilizationRate(processLong.divide(processDay.multiply(new BigDecimal("86400")), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | if (BigDecimal.ZERO.compareTo(openLong) == -1) { |
| | | mdcHomeEquipmentVo.setStartRate(openLong.divide(new BigDecimal("86400"), 4, RoundingMode.HALF_UP).setScale(2, RoundingMode.HALF_UP)); |
| | | mdcHomeEquipmentVo.setOpenRate(processDay.divide(openLong, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //OEE |
| | | BigDecimal oee = mdcHomeMapper.getOeeByDate(Arrays.asList(equipmentId.split(",")), month); |
| | | if (oee != null && !(oee.compareTo(BigDecimal.ZERO) == 0)) { |
| | | mdcHomeEquipmentVo.setOverallEquipmentEfficiency(oee.multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | dataList.add(mdcHomeEquipmentVo); |
| | | } |
| | | result.put("dateList", dateList); |
| | | result.put("dataList", dataList); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 设备级设备列表 |
| | | */ |
| | | @Override |
| | | public List<MdcEquipment> getEquipmentList(String key) { |
| | | return mdcHomeMapper.getEquipmentList(key); |
| | | } |
| | | } |