鞍钢鲅鱼圈能源管控系统后端代码
dengzedong
18 小时以前 95fa8f7f6e3dbc4f13c0a9b15515f4040fa05f03
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingOverviewTask.java
@@ -2,17 +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.CokingTraceReportEntity;
import com.iailab.module.ansteel.coking.service.CokingOverviewService;
import com.iailab.module.ansteel.coking.service.CokingProcessConfService;
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;
@@ -21,6 +20,7 @@
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@@ -41,11 +41,15 @@
    @Resource
    private CokingOverviewService cokingOverviewService;
    @Resource
    private CokingOverviewIndService cokingOverviewIndService;
    @Resource
    private DataPointApi dataPointApi;
    @Resource
    private IndItemApi indItemApi;
    @Resource
    private CokingTraceReportService cokingTraceReportService;
    @Resource
    private CokingTraceDataService cokingTraceDataService;
    @Override
    public void run(String processTypes) {
@@ -59,16 +63,18 @@
                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();
                calendar.set(Calendar.MILLISECOND, 0);
                calendar.set(Calendar.SECOND, 0);
                calendar.set(Calendar.MINUTE, 0);
                calendar.set(Calendar.HOUR_OF_DAY, 0);
                calendar.add(Calendar.DAY_OF_YEAR, -1);
                String clock = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
                // 插入溯源报告
                // 溯源报告
                CokingTraceReportEntity reportEntity = new CokingTraceReportEntity();
                String relId = UUID.randomUUID().toString();
                reportEntity.setId(relId);
@@ -76,12 +82,20 @@
                reportEntity.setReportName(ProcessTypeEnum.getEumByCode(processType).getReportName());
                reportEntity.setAnalyDate(clock);
                reportEntity.setClock(clock);
                reportEntity.setCreateDate(new Date());
                cokingTraceReportService.save(reportEntity);
                // 按照子工序类型分组
                Map<String, List<CokingProcessConfEntity>> processTypeMap = list.stream().collect(Collectors.groupingBy(CokingProcessConfEntity::getExt2));
                // 清理旧数据
                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());
@@ -94,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);
@@ -126,12 +150,68 @@
                    result.add(overviewEntity);
                }
                cokingOverviewService.insert(result);
                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.printStackTrace();
            logger.error("runCokingOverviewTask运行异常",ex);
        }
        logger.info("runCokingOverviewTask运行完成");
    }
    private Double getConfValue(CokingProcessConfEntity conf) {
        Double value = null;
        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;
        }
        return value;
    }
}