| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.StringUtils; |
| | | import com.sun.org.apache.bcel.internal.generic.NEW; |
| | | import org.jeecg.common.api.CommonAPI; |
| | | import org.jeecg.common.constant.CommonConstant; |
| | | import org.jeecg.common.util.TranslateDictTextUtils; |
| | | import org.jeecg.modules.eam.constant.EquipmentMaintenanceStatus; |
| | | import org.jeecg.modules.eam.constant.EquipmentOperationTagEnum; |
| | | import org.jeecg.modules.eam.constant.EquipmentRepairStatus; |
| | | import org.jeecg.modules.eam.constant.MaintenanceCategoryEnum; |
| | | import org.jeecg.modules.mdc.constant.MdcConstant; |
| | | import org.jeecg.modules.mdc.entity.Equipment; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipment; |
| | | import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; |
| | | import org.jeecg.modules.mdc.dto.EamEquipmentExtendDto; |
| | | import org.jeecg.modules.mdc.entity.*; |
| | | import org.jeecg.modules.mdc.mapper.MdcBoardMapper; |
| | | import org.jeecg.modules.mdc.service.*; |
| | | import org.jeecg.modules.mdc.util.DateUtils; |
| | | import org.jeecg.modules.mdc.vo.MdcBoardEquRealTImeVo; |
| | | import org.jeecg.modules.mdc.vo.MdcBoardRateVo; |
| | | import org.jeecg.modules.mdc.vo.MdcEquipmentStatusVo; |
| | | import org.jeecg.modules.mdcJc.service.IMdcJcRcJobreportService; |
| | | import org.jeecg.modules.system.entity.MdcProduction; |
| | | import org.jeecg.modules.system.service.IMdcProductionService; |
| | | import org.joda.time.LocalDateTime; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @Resource |
| | | private IMdcJcRcJobreportService mdcJcRcJobreportService; |
| | | |
| | | @Resource |
| | | private CommonAPI commonAPI; |
| | | |
| | | @Resource |
| | | private IEquipmentLogService equipmentLogService; |
| | | |
| | | @Resource |
| | | private IEquipmentWorkLineService equipmentWorkLineService; |
| | | |
| | | @Resource |
| | | private MdcBoardMapper mdcBoardMapper; |
| | | |
| | | @Resource |
| | | private IMdcDeviceCalendarService mdcDeviceCalendarService; |
| | | |
| | | /** |
| | | * 设备状态 |
| | | */ |
| | |
| | | if (StringUtils.isBlank(productionId)) { |
| | | MdcProduction mdcProduction = mdcProductionService.getOne(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getParentId, "")); |
| | | productionId = mdcProduction.getId(); |
| | | result.put("productionName", mdcProduction.getProductionName()); |
| | | } else { |
| | | MdcProduction mdcProduction = mdcProductionService.getById(productionId); |
| | | result.put("productionName", mdcProduction.getProductionName()); |
| | | } |
| | | List<String> proIds = mdcProductionService.findChildByProId(productionId); |
| | | if (proIds == null || proIds.isEmpty()) { |
| | |
| | | LocalDate now = LocalDate.now(); |
| | | Date startDate = DateUtils.toDate(now.plusDays(-15).toString(), DateUtils.STR_DATE); |
| | | Date endDate = DateUtils.toDate(now.plusDays(-1).toString(), DateUtils.STR_DATE); |
| | | String start = DateUtils.format(startDate, DateUtils.STR_DATE); |
| | | String end = DateUtils.format(endDate, DateUtils.STR_DATE); |
| | | List<String> dateList = DateUtils.getDatesStringList(startDate, endDate); |
| | | List<String> dates = new ArrayList<>(); |
| | | List<MdcBoardRateVo> dataList = new ArrayList<>(); |
| | | for (String date : dateList) { |
| | | MdcBoardRateVo mdcBoardRateVo = new MdcBoardRateVo(); |
| | | String s = date.substring(5, 10); |
| | | dates.add(s); |
| | | mdcBoardRateVo.setDate(s); |
| | | // TEEP 开机率 开动率 |
| | | MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquipmentAndDate(equipmentIdList, date.replaceAll("-", "")); |
| | | mdcBoardRateVo.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); |
| | | mdcBoardRateVo.setOpenRate(mdcEquipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); |
| | | if (mdcEquipmentStatisticalInfo.getOpenLong().compareTo(BigDecimal.ZERO) > 0) { |
| | | mdcBoardRateVo.setStartRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(mdcEquipmentStatisticalInfo.getOpenLong(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); |
| | | } |
| | | // OEE |
| | | BigDecimal oee = mdcOeeInfoService.findByEquIdsAndDate(equipmentIdList, date); |
| | | if (oee != null) { |
| | | mdcBoardRateVo.setOee(oee.setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | dataList.add(mdcBoardRateVo); |
| | | } |
| | | List<String> dates = dateList.stream().map(date -> date.substring(5, 10)).collect(Collectors.toList()); |
| | | result.put("dateList", dates); |
| | | Map<String, MdcBoardRateVo> statisticsMap = new LinkedHashMap<>(); |
| | | dateList.forEach(date -> { |
| | | statisticsMap.put(date, new MdcBoardRateVo(date.substring(5, 10))); |
| | | }); |
| | | |
| | | // TEEP 开机率 开动率 |
| | | List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquipmentAndDate(equipmentIdList, start.replaceAll("-", ""), end.replaceAll("-", "")); |
| | | if (mdcEquipmentStatisticalInfo != null && !mdcEquipmentStatisticalInfo.isEmpty()) { |
| | | mdcEquipmentStatisticalInfo.forEach(equipmentStatisticalInfo -> { |
| | | String date = DateUtils.format(DateUtils.toDate(equipmentStatisticalInfo.getTheDate(), DateUtils.STRDATE), DateUtils.STR_DATE); |
| | | if (statisticsMap.containsKey(date)) { |
| | | MdcBoardRateVo mdcBoardRateVo = statisticsMap.get(date); |
| | | if (equipmentStatisticalInfo.getProcessLong().compareTo(BigDecimal.ZERO) > 0) { |
| | | mdcBoardRateVo.setUtilizationRate(equipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); |
| | | } |
| | | if (equipmentStatisticalInfo.getOpenLong().compareTo(BigDecimal.ZERO) > 0) { |
| | | mdcBoardRateVo.setOpenRate(equipmentStatisticalInfo.getOpenLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); |
| | | } |
| | | if (equipmentStatisticalInfo.getOpenLong().compareTo(BigDecimal.ZERO) > 0) { |
| | | mdcBoardRateVo.setStartRate(equipmentStatisticalInfo.getProcessLong().multiply(new BigDecimal("100")).divide(equipmentStatisticalInfo.getOpenLong(), 2, RoundingMode.HALF_UP)); |
| | | } |
| | | statisticsMap.put(date, mdcBoardRateVo); |
| | | } |
| | | }); |
| | | } |
| | | // OEE |
| | | List<MdcOeeInfo> oeeInfo = mdcOeeInfoService.findByEquIdsAndDate(equipmentIdList, start, end); |
| | | if (oeeInfo != null && !oeeInfo.isEmpty()) { |
| | | oeeInfo.forEach(mdcOeeInfo -> { |
| | | if (statisticsMap.containsKey(mdcOeeInfo.getTheDate())) { |
| | | MdcBoardRateVo mdcBoardRateVo = statisticsMap.get(mdcOeeInfo.getTheDate()); |
| | | if (mdcOeeInfo.getOee().compareTo(BigDecimal.ZERO) > 0) { |
| | | mdcBoardRateVo.setOee(mdcOeeInfo.getOee().setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | statisticsMap.put(mdcOeeInfo.getTheDate(), mdcBoardRateVo); |
| | | } |
| | | }); |
| | | } |
| | | List<MdcBoardRateVo> dataList = new ArrayList<>(statisticsMap.values()); |
| | | result.put("dataList", dataList); |
| | | return result; |
| | | } |
| | |
| | | LocalDate now = LocalDate.now(); |
| | | Date startDate = DateUtils.toDate(now.plusDays(-7).toString(), DateUtils.STR_DATE); |
| | | Date endDate = DateUtils.toDate(now.plusDays(-1).toString(), DateUtils.STR_DATE); |
| | | String start = DateUtils.format(startDate, DateUtils.STR_DATE); |
| | | String end = DateUtils.format(endDate, DateUtils.STR_DATE); |
| | | List<String> dayBetween = DateUtils.getDatesStringList(startDate, endDate); |
| | | List<String> dateList = new ArrayList<>(); |
| | | List<MdcBoardRateVo> dataList = new ArrayList<>(); |
| | | for (String date : dayBetween) { |
| | | MdcBoardRateVo mdcBoardRateVo = new MdcBoardRateVo(); |
| | | String s = date.substring(5, 10); |
| | | dateList.add(s); |
| | | mdcBoardRateVo.setDate(s); |
| | | // TEEP |
| | | MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquIdAndDate(equipmentId, date.replaceAll("-", "")); |
| | | mdcBoardRateVo.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); |
| | | // OEE |
| | | BigDecimal oee = mdcOeeInfoService.findByEquIdAndDate(equipmentId, date); |
| | | if (oee != null) { |
| | | mdcBoardRateVo.setOee(oee.setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | dataList.add(mdcBoardRateVo); |
| | | } |
| | | List<String> dateList = dayBetween.stream().map(date -> date.substring(5, 10)).collect(Collectors.toList()); |
| | | result.put("dateList", dateList); |
| | | Map<String, MdcBoardRateVo> statisticsMap = new LinkedHashMap<>(); |
| | | dayBetween.forEach(date -> { |
| | | statisticsMap.put(date, new MdcBoardRateVo(date.substring(5, 10))); |
| | | }); |
| | | // TEEP |
| | | List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquIdAndDate(equipmentId, start.replaceAll("-", ""), end.replaceAll("-", "")); |
| | | if (mdcEquipmentStatisticalInfo != null && !mdcEquipmentStatisticalInfo.isEmpty()) { |
| | | mdcEquipmentStatisticalInfo.forEach(equipmentStatisticalInfo -> { |
| | | String date = DateUtils.format(DateUtils.toDate(equipmentStatisticalInfo.getTheDate(), DateUtils.STRDATE), DateUtils.STR_DATE); |
| | | if (statisticsMap.containsKey(date)) { |
| | | MdcBoardRateVo mdcBoardRateVo = statisticsMap.get(date); |
| | | if (equipmentStatisticalInfo.getProcessLong().compareTo(BigDecimal.ZERO) > 0) { |
| | | mdcBoardRateVo.setUtilizationRate(equipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); |
| | | } |
| | | statisticsMap.put(date, mdcBoardRateVo); |
| | | } |
| | | }); |
| | | } |
| | | // OEE |
| | | List<MdcOeeInfo> oeeInfo = mdcOeeInfoService.findByEquIdAndDate(equipmentId, start, end); |
| | | if (oeeInfo != null && !oeeInfo.isEmpty()) { |
| | | oeeInfo.forEach(mdcOeeInfo -> { |
| | | if (statisticsMap.containsKey(mdcOeeInfo.getTheDate())) { |
| | | MdcBoardRateVo mdcBoardRateVo = statisticsMap.get(mdcOeeInfo.getTheDate()); |
| | | if (mdcOeeInfo.getOee().compareTo(BigDecimal.ZERO) > 0) { |
| | | mdcBoardRateVo.setOee(mdcOeeInfo.getOee().setScale(2, RoundingMode.HALF_UP)); |
| | | } |
| | | statisticsMap.put(mdcOeeInfo.getTheDate(), mdcBoardRateVo); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | List<MdcBoardRateVo> dataList = new ArrayList<>(statisticsMap.values()); |
| | | result.put("dataList", dataList); |
| | | return result; |
| | | } |
| | |
| | | return result; |
| | | } |
| | | |
| | | // /** |
| | | // * 设备产品合格率 |
| | | // */ |
| | | // @Override |
| | | // public Map<String, Object> passRate(String equipmentId) { |
| | | // Map<String, Object> result = new HashMap<>(); |
| | | // LocalDate now = LocalDate.now(); |
| | | // Date start = DateUtils.toDate(now.plusMonths(-6).toString(), DateUtils.STR_DATE); |
| | | // Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE); |
| | | // List<String> monthBetween = DateUtils.getMonthBetween(start, end); |
| | | // List<String> dateList = new ArrayList<>(); |
| | | // for (String month : monthBetween) { |
| | | // String name = month.substring(month.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "月"; |
| | | // dateList.add(name); |
| | | // MdcBoardRateVo mdcBoardRateVo = new MdcBoardRateVo(); |
| | | // // 合格率 |
| | | // |
| | | // } |
| | | // return result; |
| | | // } |
| | | /** |
| | | * 设备实时信息 |
| | | */ |
| | | @Override |
| | | public MdcBoardEquRealTImeVo equipmentRealTimeDetail(String equipmentId) { |
| | | MdcBoardEquRealTImeVo mdcBoardEquRealTImeVo = mdcEquipmentService.getByEquipmentId(equipmentId); |
| | | if (mdcBoardEquRealTImeVo == null) { |
| | | return new MdcBoardEquRealTImeVo(); |
| | | } |
| | | //设备管理员翻译 |
| | | String realName = commonAPI.translateDictFromTable("sys_user", "realname", "username", mdcBoardEquRealTImeVo.getEquipmentManager()); |
| | | mdcBoardEquRealTImeVo.setEquipmentManager(realName); |
| | | mdcBoardEquRealTImeVo.setAlarm("无"); |
| | | if (mdcBoardEquRealTImeVo.getOperation() != null) { |
| | | switch (mdcBoardEquRealTImeVo.getOperation()) { |
| | | case 1: |
| | | case 2: |
| | | mdcBoardEquRealTImeVo.setOporationDict("待机"); |
| | | break; |
| | | case 3: |
| | | mdcBoardEquRealTImeVo.setOporationDict("运行"); |
| | | break; |
| | | case 22: |
| | | mdcBoardEquRealTImeVo.setOporationDict("报警"); |
| | | // 查询报警号 |
| | | EquipmentLog equipmentLog = equipmentLogService.findAlarmByEquId(equipmentId); |
| | | if (equipmentLog != null && StringUtils.isNotBlank(equipmentLog.getAlarm())) { |
| | | mdcBoardEquRealTImeVo.setAlarm(equipmentLog.getAlarm()); |
| | | } |
| | | break; |
| | | default: |
| | | mdcBoardEquRealTImeVo.setOporationDict("关机"); |
| | | break; |
| | | } |
| | | } else { |
| | | mdcBoardEquRealTImeVo.setOporationDict("关机"); |
| | | mdcBoardEquRealTImeVo.setOperation(0); |
| | | } |
| | | //设备运行数据 |
| | | Map<String, Object> mapData = equipmentWorkLineService.getDataList(mdcBoardEquRealTImeVo.getSaveTableName()); |
| | | if (mapData != null) { |
| | | if (mapData.containsKey("Sequencenumber")) { |
| | | Object object = mapData.get("Sequencenumber"); |
| | | mdcBoardEquRealTImeVo.setSequenceNumber(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString()); |
| | | } |
| | | if (mapData.containsKey("spindlespeed")) { |
| | | Object object = mapData.get("spindlespeed"); |
| | | mdcBoardEquRealTImeVo.setSpindleSpeed(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString()); |
| | | } |
| | | if (mapData.containsKey("spindleload")) { |
| | | Object object = mapData.get("spindleload"); |
| | | mdcBoardEquRealTImeVo.setSpindleLoad(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString()); |
| | | } |
| | | if (mapData.containsKey("spindlebeilv")) { |
| | | Object object = mapData.get("spindlebeilv"); |
| | | mdcBoardEquRealTImeVo.setSpindlebeilv(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString()); |
| | | } |
| | | if (mapData.containsKey("feedbeilv")) { |
| | | Object object = mapData.get("feedbeilv"); |
| | | mdcBoardEquRealTImeVo.setFeedbeilv(object == null || "关机".equals(mdcBoardEquRealTImeVo.getOporationDict()) ? "" : object.toString()); |
| | | } |
| | | } |
| | | // 维保状态 |
| | | EamEquipmentExtendDto eamEquipmentExtendDto = mdcBoardMapper.findEquExtend(equipmentId); |
| | | mdcBoardEquRealTImeVo.setMaintenanceStatus("正常"); |
| | | mdcBoardEquRealTImeVo.setReportRepairStatus("无"); |
| | | if (eamEquipmentExtendDto != null) { |
| | | if (!EquipmentRepairStatus.NORMAL.name().equals(eamEquipmentExtendDto.getRepairStatus())) { |
| | | mdcBoardEquRealTImeVo.setMaintenanceStatus("维修"); |
| | | } else { |
| | | if (EquipmentMaintenanceStatus.UNDER_INSPECTION.name().equals(eamEquipmentExtendDto.getMaintenanceStatus()) || EquipmentMaintenanceStatus.INSPECTION_CONFIRM.name().equals(eamEquipmentExtendDto.getMaintenanceStatus())) { |
| | | mdcBoardEquRealTImeVo.setMaintenanceStatus("点检"); |
| | | } else if (EquipmentMaintenanceStatus.UNDER_MAINTENANCE.name().equals(eamEquipmentExtendDto.getMaintenanceStatus()) || EquipmentMaintenanceStatus.WAIT_CONFIRM.name().equals(eamEquipmentExtendDto.getMaintenanceStatus())) { |
| | | mdcBoardEquRealTImeVo.setMaintenanceStatus("周报"); |
| | | } |
| | | } |
| | | } |
| | | // 报修情况 |
| | | String repairStatus = mdcBoardMapper.findReportRepairStatus(equipmentId); |
| | | if (repairStatus != null) { |
| | | String reportRepair = commonAPI.translateDict("report_repair_status", repairStatus); |
| | | mdcBoardEquRealTImeVo.setReportRepairStatus(reportRepair); |
| | | } else { |
| | | mdcBoardEquRealTImeVo.setReportRepairStatus("无"); |
| | | } |
| | | // 班次 |
| | | String shift = mdcDeviceCalendarService.findShiftByEquId(equipmentId); |
| | | if (StringUtils.isNotBlank(shift)) { |
| | | mdcBoardEquRealTImeVo.setShift(shift); |
| | | } |
| | | // 点检 保养 |
| | | Date nextInspection = mdcBoardMapper.findInsOrMain(equipmentId, MaintenanceCategoryEnum.POINT_INSPECTION.name()); |
| | | if (nextInspection != null) { |
| | | mdcBoardEquRealTImeVo.setNextInspection(nextInspection); |
| | | } |
| | | Date nextMaintenance = mdcBoardMapper.findInsOrMain(equipmentId, MaintenanceCategoryEnum.WEEK_MAINTENANCE.name()); |
| | | if (nextMaintenance != null) { |
| | | mdcBoardEquRealTImeVo.setNextMaintenance(nextMaintenance); |
| | | } |
| | | return mdcBoardEquRealTImeVo; |
| | | } |
| | | |
| | | } |