鞍钢鲅鱼圈能源管控系统后端代码
dengzedong
2 天以前 80d5a608f4543a68a30bab5842d9f793702d6b53
焦化 异常数据建议生成
已修改5个文件
137 ■■■■■ 文件已修改
ansteel-biz/src/main/java/com/iailab/module/ansteel/api/controller/admin/CokingController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/entity/CokingTraceSuggestEntity.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/CokingTraceSuggestService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/coking/service/impl/CokingTraceSuggestServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java 94 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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) {
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 {
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);
}
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);
    }
}
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;
    }
}