From 95fa8f7f6e3dbc4f13c0a9b15515f4040fa05f03 Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期六, 26 四月 2025 11:16:46 +0800 Subject: [PATCH] 焦化概况 能流图指标数据 --- ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java | 220 +++++++++++++++++++++--------------------------------- 1 files changed, 85 insertions(+), 135 deletions(-) diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java index de344c6..870e040 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java @@ -20,6 +20,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -40,15 +41,13 @@ @Resource private CokingOverviewService cokingOverviewService; @Resource + private CokingOverviewIndService cokingOverviewIndService; + @Resource private DataPointApi dataPointApi; @Resource private IndItemApi indItemApi; @Resource private CokingTraceReportService cokingTraceReportService; - @Resource - private CokingTraceChartService cokingTraceChartService; - @Resource - private CokingTraceSuggestService cokingTraceSuggestService; @Resource private CokingTraceDataService cokingTraceDataService; @@ -64,8 +63,8 @@ queryParams.setIndType(processType); List<CokingProcessConfEntity> list = cokingProcessConfService.list(queryParams); if (CollectionUtils.isEmpty(list)) { - logger.info("ConfLis is Empty"); - return; + logger.info("ConfList is Empty"); + continue; } Calendar calendar = Calendar.getInstance(); @@ -86,11 +85,17 @@ reportEntity.setCreateDate(new Date()); cokingTraceReportService.save(reportEntity); + // 清理旧数据 + cokingOverviewService.deleteByProcessType(processType, clock); + cokingTraceDataService.deleteByExObj(processType+"_AD", clock); + cokingOverviewIndService.deleteByProcessType(processType, clock); + // 整体情况 // 筛选info_type = 2,按照子工序类型分组 Map<String, List<CokingProcessConfEntity>> processTypeMap = list.stream().filter(e -> e.getInfoType().equals("2")).collect(Collectors.groupingBy(CokingProcessConfEntity::getExt2)); // 结果 <子工序类型,<数据key,数据value>> List<CokingOverviewEntity> result = new ArrayList<>(processTypeMap.size()); + List<CokingTraceDataEntity> exDatalist = new ArrayList<>(); for (Map.Entry<String, List<CokingProcessConfEntity>> entry : processTypeMap.entrySet()) { Map<String,Double> values = new HashMap<>(entry.getValue().size()); @@ -103,27 +108,37 @@ logger.info("PointNo is Empty"); continue; } - Double value = 0.0; - switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) { - case DATAPOINT: - List<String> points = new ArrayList<>(); - points.add(conf.getPointNo()); - Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points); - value = Double.valueOf(pointsRealValue.get(conf.getPointNo()).toString()); - break; - case IND: - List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(conf.getPointNo()); - if (!CollectionUtils.isEmpty(indValues)) { - value = Double.valueOf(indValues.get(indValues.size() - 1).getDataValue().toString()); - } - break; - case MODEL: - break; - default: - break; - } + Double value = getConfValue(conf); + values.put(conf.getExt1(),value); + + // 异常数据处理 + String content = null; + if (value != null) { + if (value.equals(0.0)) { + content = clock + " " + conf.getIndName() + "数据异常(数据为0)"; + }else if (value.compareTo(Double.valueOf(conf.getExt3())) > 0) { + content = clock + " " + conf.getIndName() + "数据异常(超上限)"; + }else if (value.compareTo(Double.valueOf(conf.getExt4())) < 0) { + content = clock + " " + conf.getIndName() + "数据异常(超下限)"; + } + }else { + content = clock + " " + conf.getIndName() + "数据异常(无数据)"; + } + if (StringUtils.isNotBlank(content)) { + CokingTraceDataEntity ctd = new CokingTraceDataEntity(); + ctd.setId(UUID.randomUUID().toString()); + ctd.setRelId(relId); + ctd.setProcess(ProcessTypeEnum.getEumByCode(conf.getIndType()).getReportName()); + ctd.setClock(clock); + ctd.setExObj(processType+"_AD"); + ctd.setExTime(calendar.getTime()); + ctd.setExType(content); + ctd.setCreateDate(new Date()); + exDatalist.add(ctd); + } + } CokingOverviewEntity overviewEntity = new CokingOverviewEntity(); BeanUtil.fillBeanWithMap(values,overviewEntity,true); @@ -133,135 +148,70 @@ overviewEntity.setSubProcessType(entry.getKey()); overviewEntity.setClock(clock); result.add(overviewEntity); - - // 清理旧数据 - cokingOverviewService.deleteByProcessType(processType, clock); - cokingTraceDataService.deleteByExObj(processType, clock); } cokingOverviewService.insert(result); - - // 指标运行趋势 - List<CokingProcessConfEntity> indRunTrend = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList()); - List<CokingTraceChartEntity> cokingTraceChartEntityList = new ArrayList<>(indRunTrend.size()); - // List<CokingTraceSuggestEntity> suggestEntitieList = new ArrayList<>(); - List<CokingTraceDataEntity> exDatalist = new ArrayList<>(indRunTrend.size()); - indRunTrend.forEach(e -> { - CokingTraceChartEntity cokingTraceChartEntity = new CokingTraceChartEntity(); - cokingTraceChartEntity.setRelId(relId); - cokingTraceChartEntity.setName(e.getIndName()); - cokingTraceChartEntity.setClock(clock); - cokingTraceChartEntity.setDataNo(e.getPointNo()); - cokingTraceChartEntity.setDataType(e.getDataType()); - - Calendar clone = (Calendar) calendar.clone(); - cokingTraceChartEntity.setEndTime(clone.getTime()); - if (e.getExt2().equals("month")) { - clone.add(Calendar.MONTH,-1 * Integer.parseInt(e.getExt1())); - } else if (e.getExt2().equals("day")) { - clone.add(Calendar.DAY_OF_YEAR,-1 * Integer.parseInt(e.getExt1())); - } - cokingTraceChartEntity.setStartTime(clone.getTime()); - cokingTraceChartEntity.setCreateDate(new Date()); - cokingTraceChartEntityList.add(cokingTraceChartEntity); - - // 异常数据处理 - exDatalist.addAll(handleAbnormalData(e, cokingTraceChartEntity.getStartTime(), cokingTraceChartEntity.getEndTime(),relId,clock)); - }); - cokingTraceChartService.insert(cokingTraceChartEntityList); - // cokingTraceSuggestService.insert(suggestEntitieList); cokingTraceDataService.insertList(exDatalist); + // 能流图指标数据 + // 筛选info_type = 1 + List<CokingProcessConfEntity> indList = list.stream().filter(e -> e.getInfoType().equals("1")).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(indList)) { + return; + } + List<CokingOverviewIndEntity> overviewIndEntities = new ArrayList<>(indList.size()); + for (CokingProcessConfEntity conf : indList) { + if (StringUtils.isBlank(conf.getDataType())) { + logger.info("DataType is Empty"); + continue; + } + if (StringUtils.isBlank(conf.getPointNo())) { + logger.info("PointNo is Empty"); + continue; + } + Double value = getConfValue(conf); + CokingOverviewIndEntity entity = new CokingOverviewIndEntity(); + entity.setId(UUID.randomUUID().toString()); + entity.setRelId(relId); + entity.setProcessType(processType); + entity.setClock(clock); + entity.setIndCode(conf.getIndCode()); + entity.setIndName(conf.getIndName()); + entity.setIndUnit(conf.getIndUnit()); + if (value != null) { + entity.setIndValue(BigDecimal.valueOf(value)); + } + entity.setCreateDate(new Date()); + overviewIndEntities.add(entity); + } + cokingOverviewIndService.save(overviewIndEntities); } } catch (Exception ex) { logger.error("runCokingOverviewTask运行异常",ex); } logger.info("runCokingOverviewTask运行完成"); - } - private List<CokingTraceDataEntity> handleAbnormalData(CokingProcessConfEntity e, Date startTime, Date endTime, String relId, String clock) { - List<CokingTraceDataEntity> suggestEntities = new ArrayList<>(); - switch (ProcessConfDataTypeEnum.getEumByCode(e.getDataType())) { + private Double getConfValue(CokingProcessConfEntity conf) { + Double value = null; + switch (ProcessConfDataTypeEnum.getEumByCode(conf.getDataType())) { case DATAPOINT: - ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO(); - queryDTO.setPointNo(e.getPointNo()); - queryDTO.setStart(startTime); - queryDTO.setEnd(endTime); - List<ApiPointValueDTO> pointValues = dataPointApi.queryPointHistoryValue(queryDTO); - Map<Date, Double> pointValueMap = pointValues.stream().collect(Collectors.toMap(ApiPointValueDTO::getT, ApiPointValueDTO::getV, (e1, e2) -> e1)); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(startTime); - while (!calendar.getTime().after(endTime)) { - String content = null; - if (pointValueMap.containsKey(calendar.getTime())) { - Double value = pointValueMap.get(calendar.getTime()); - if (value.equals(0.0)) { - content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(数据为0)"; - }else if (value.compareTo(Double.valueOf(e.getExt3())) > 0) { - content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(超上限)"; - }else if (value.compareTo(Double.valueOf(e.getExt4())) < 0) { - content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(超下限)"; - } - }else { - content = DateUtils.format(calendar.getTime()) + " " + e.getIndName() + "数据异常(无数据)"; - } - if (StringUtils.isNotBlank(content)) { - CokingTraceDataEntity ctd = new CokingTraceDataEntity(); - ctd.setId(UUID.randomUUID().toString()); - ctd.setRelId(relId); - ctd.setProcess(ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName()); - ctd.setClock(clock); - ctd.setExObj(e.getIndType()+"_AD"); - ctd.setExTime(calendar.getTime()); - ctd.setExType(content); - suggestEntities.add(ctd); - } - calendar.add(Calendar.DAY_OF_YEAR,1); - } + List<String> points = new ArrayList<>(); + points.add(conf.getPointNo()); + Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points); + value = Double.valueOf(pointsRealValue.get(conf.getPointNo()).toString()); break; case IND: - ApiIndItemQueryDTO query = new ApiIndItemQueryDTO(); - query.setItemNo(e.getPointNo()); - query.setStart(startTime); - query.setEnd(endTime); - List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemHistoryValue(query); - Map<String, Double> indValueMap = indValues.stream().collect(Collectors.toMap(ApiIndItemValueDTO::getDataTime, ind -> Double.valueOf(ind.getDataValue().toString()), (e1, e2) -> e1)); - Calendar intCalendar = Calendar.getInstance(); - intCalendar.setTime(startTime); - while (!intCalendar.getTime().after(endTime)) { - String content = null; - String time = DateUtils.format(intCalendar.getTime()); - if (indValueMap.containsKey(time)) { - Double value = indValueMap.get(time); - if (value.equals(0.0)) { - content = time + " " + e.getIndName() + "数据异常(数据为0)"; - }else if (value.compareTo(Double.valueOf(e.getExt3())) > 0) { - content = time + " " + e.getIndName() + "数据异常(超上限)"; - }else if (value.compareTo(Double.valueOf(e.getExt4())) < 0) { - content = time + " " + e.getIndName() + "数据异常(超下限)"; - } - }else { - content = time + " " + e.getIndName() + "数据异常(无数据)"; - } - if (StringUtils.isNotBlank(content)) { - CokingTraceDataEntity ctd = new CokingTraceDataEntity(); - ctd.setId(UUID.randomUUID().toString()); - ctd.setRelId(relId); - ctd.setProcess(ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName()); - ctd.setClock(clock); - ctd.setExObj(e.getIndType()+"_AD"); - ctd.setExTime(intCalendar.getTime()); - ctd.setExType(content); - suggestEntities.add(ctd); - // suggestEntities.add(new CokingTraceSuggestEntity(UUID.randomUUID().toString(),relId,ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName(),e.getIndType()+"_AD",clock,content,new Date())); - } - intCalendar.add(Calendar.DAY_OF_YEAR,1); + List<ApiIndItemValueDTO> indValues = indItemApi.queryIndItemDefaultValue(conf.getPointNo()); + if (!CollectionUtils.isEmpty(indValues)) { + value = Double.valueOf(indValues.get(indValues.size() - 1).getDataValue().toString()); } + break; + case MODEL: break; default: break; } - return suggestEntities; + return value; } } \ No newline at end of file -- Gitblit v1.9.3