From 80d5a608f4543a68a30bab5842d9f793702d6b53 Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期三, 23 四月 2025 13:36:47 +0800 Subject: [PATCH] 焦化 异常数据建议生成 --- ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingTraceSuggestServiceImpl.java | 26 ++++++++ ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java | 94 +++++++++++++++++++++++++++--- ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java | 9 ++ ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingTraceSuggestEntity.java | 4 + ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingTraceSuggestService.java | 4 + 5 files changed, 124 insertions(+), 13 deletions(-) diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java index 39ca218..d9ac9c3 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java @@ -117,12 +117,19 @@ @GetMapping("/overview/list") - @Operation(summary = "各工序-概况") + @Operation(summary = "各工序-概况数据") public CommonResult<Map<String,List<CokingOverviewDTO>>> getOverviewList(@RequestParam Map<String, Object> params) { Map<String,List<CokingOverviewDTO>> result = cokingOverviewService.list(params); return success(result); } + @GetMapping("/overview/abnormal-data") + @Operation(summary = "各工序-异常数据") + public CommonResult<List<CokingTraceSuggestEntity>> getAbnormalData(@RequestParam Map<String, Object> params) { + List<CokingTraceSuggestEntity> result = cokingTraceSuggestService.getAbnormalData(params); + return success(result); + } + @GetMapping("/trace-suggest/list") @Operation(summary = "焦化工序-异常溯源及优化建议") public CommonResult<List<CokingTraceSuggestDTO>> getTraceSuggestList(@RequestParam Map<String, Object> params) { diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingTraceSuggestEntity.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingTraceSuggestEntity.java index f4a568c..82c88e2 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingTraceSuggestEntity.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingTraceSuggestEntity.java @@ -3,7 +3,9 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.Date; @@ -14,6 +16,8 @@ * @since 1.0.0 2025-04-16 */ @Data +@AllArgsConstructor +@NoArgsConstructor @TableName("t_coking_trace_suggest") public class CokingTraceSuggestEntity { diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingTraceSuggestService.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingTraceSuggestService.java index 7cc4464..d7ecafb 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingTraceSuggestService.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingTraceSuggestService.java @@ -16,4 +16,8 @@ List<CokingTraceSuggestEntity> list(Map<String, Object> params); void save(CokingTraceSuggestEntity suggestEntity); + + void insert(List<CokingTraceSuggestEntity> suggestEntitieList); + + List<CokingTraceSuggestEntity> getAbnormalData(Map<String, Object> params); } \ No newline at end of file diff --git a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingTraceSuggestServiceImpl.java b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingTraceSuggestServiceImpl.java index 9bb2b19..6da3ddf 100644 --- a/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingTraceSuggestServiceImpl.java +++ b/ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingTraceSuggestServiceImpl.java @@ -1,6 +1,7 @@ package com.iailab.module.ansteel.coking.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iailab.framework.common.util.date.DateUtils; import com.iailab.module.ansteel.coking.dao.CokingTraceSuggestDao; import com.iailab.module.ansteel.coking.entity.CokingTraceSuggestEntity; import com.iailab.module.ansteel.coking.service.CokingTraceSuggestService; @@ -8,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Calendar; import java.util.List; import java.util.Map; @@ -31,7 +33,7 @@ QueryWrapper<CokingTraceSuggestEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("rel_id", relId) .eq(StringUtils.isNotBlank(sugObj), "sug_obj", sugObj) - .orderByAsc("sug_obj"); + .orderByAsc("create_date"); return cokingTraceSuggestDao.selectList(queryWrapper); } @@ -39,4 +41,26 @@ public void save(CokingTraceSuggestEntity suggestEntity) { cokingTraceSuggestDao.insert(suggestEntity); } + + @Override + public void insert(List<CokingTraceSuggestEntity> suggestEntitieList) { + cokingTraceSuggestDao.insert(suggestEntitieList); + } + + @Override + public List<CokingTraceSuggestEntity> getAbnormalData(Map<String, Object> params) { + String processType = (String) params.get("processType"); + String clock = (String) params.get("clock"); + if (StringUtils.isBlank(clock)) { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_YEAR, -1); + clock = DateUtils.format(calendar.getTime(), "yyyy-MM-dd"); + } + + QueryWrapper<CokingTraceSuggestEntity> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("sug_obj", processType) + .eq("clock", clock) + .orderByAsc("create_date"); + return cokingTraceSuggestDao.selectList(queryWrapper); + } } \ No newline at end of file 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 b52cf2a..0f79733 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 @@ -2,19 +2,16 @@ import cn.hutool.core.bean.BeanUtil; import com.iailab.framework.common.util.date.DateUtils; -import com.iailab.module.ansteel.coking.entity.CokingOverviewEntity; -import com.iailab.module.ansteel.coking.entity.CokingProcessConfEntity; -import com.iailab.module.ansteel.coking.entity.CokingTraceChartEntity; -import com.iailab.module.ansteel.coking.entity.CokingTraceReportEntity; -import com.iailab.module.ansteel.coking.service.CokingOverviewService; -import com.iailab.module.ansteel.coking.service.CokingProcessConfService; -import com.iailab.module.ansteel.coking.service.CokingTraceChartService; -import com.iailab.module.ansteel.coking.service.CokingTraceReportService; +import com.iailab.module.ansteel.coking.entity.*; +import com.iailab.module.ansteel.coking.service.*; import com.iailab.module.ansteel.common.enums.ProcessConfDataTypeEnum; import com.iailab.module.ansteel.common.enums.ProcessTypeEnum; import com.iailab.module.data.api.ind.IndItemApi; +import com.iailab.module.data.api.ind.dto.ApiIndItemQueryDTO; import com.iailab.module.data.api.ind.dto.ApiIndItemValueDTO; import com.iailab.module.data.api.point.DataPointApi; +import com.iailab.module.data.api.point.dto.ApiPointValueDTO; +import com.iailab.module.data.api.point.dto.ApiPointValueQueryDTO; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -25,7 +22,6 @@ import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; -import java.util.stream.Stream; /** * 备煤工序-概况 @@ -51,6 +47,8 @@ private CokingTraceReportService cokingTraceReportService; @Resource private CokingTraceChartService cokingTraceChartService; + @Resource + private CokingTraceSuggestService cokingTraceSuggestService; @Override public void run(String processTypes) { @@ -83,6 +81,7 @@ reportEntity.setReportName(ProcessTypeEnum.getEumByCode(processType).getReportName()); reportEntity.setAnalyDate(clock); reportEntity.setClock(clock); + reportEntity.setCreateDate(new Date()); cokingTraceReportService.save(reportEntity); // 整体情况 @@ -138,6 +137,7 @@ // 指标运行趋势 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<>(); indRunTrend.forEach(e -> { CokingTraceChartEntity cokingTraceChartEntity = new CokingTraceChartEntity(); cokingTraceChartEntity.setRelId(relId); @@ -156,15 +156,87 @@ cokingTraceChartEntity.setStartTime(clone.getTime()); cokingTraceChartEntity.setCreateDate(new Date()); cokingTraceChartEntityList.add(cokingTraceChartEntity); + + // 异常数据处理 + suggestEntitieList.addAll(handleAbnormalData(e, cokingTraceChartEntity.getStartTime(), cokingTraceChartEntity.getEndTime(),relId,clock)); }); cokingTraceChartService.insert(cokingTraceChartEntityList); + cokingTraceSuggestService.insert(suggestEntitieList); } } catch (Exception ex) { - logger.error("runCokingOverviewTask运行异常"); - ex.printStackTrace(); + logger.error("runCokingOverviewTask运行异常",ex); } logger.info("runCokingOverviewTask运行完成"); } + + private List<CokingTraceSuggestEntity> handleAbnormalData(CokingProcessConfEntity e, Date startTime, Date endTime, String relId, String clock) { + List<CokingTraceSuggestEntity> suggestEntities = new ArrayList<>(); + switch (ProcessConfDataTypeEnum.getEumByCode(e.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)) { + suggestEntities.add(new CokingTraceSuggestEntity(UUID.randomUUID().toString(),relId,ProcessTypeEnum.getEumByCode(e.getIndType()).getReportName(),e.getIndType()+"_AD",clock,content,new Date())); + } + calendar.add(Calendar.DAY_OF_YEAR,1); + } + 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)) { + 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); + } + break; + default: + break; + + } + return suggestEntities; + } } \ No newline at end of file -- Gitblit v1.9.3