鞍钢鲅鱼圈能源管控系统后端代码
liriming
2 天以前 cb3da951d7bbd9d702a1c4cd77b53f9cd5c31263
ansteel-biz/src/main/java/com/iailab/module/ansteel/job/task/RunCokingMainTask.java
@@ -4,9 +4,13 @@
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.data.api.arc.ArcDataApi;
import com.iailab.module.data.api.arc.dto.ApiArcDataDTO;
import com.iailab.module.data.api.ind.IndItemApi;
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;
@@ -17,6 +21,7 @@
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -34,6 +39,8 @@
    @Resource
    private DataPointApi dataPointApi;
    @Resource
    private ArcDataApi arcDataApi;
    @Resource
    private IndItemApi indItemApi;
    @Resource
    private CokingProcessMainService cokingProcessMainService;
@@ -43,8 +50,27 @@
        logger.info("runCokingMainTask,参数为:{}", processTypes);
        try {
            String[] split = processTypes.split(",");
            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);
            // 当月一号到当前的天数
            int days = calendar.get(Calendar.DAY_OF_MONTH);
            Calendar clone = (Calendar) calendar.clone();
            clone.set(Calendar.DAY_OF_MONTH,1);
            // 当月一号
            String clock_month_1 = DateUtils.format(clone.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
            calendar.add(Calendar.DAY_OF_YEAR, -88);
            // 前90天
            String clock_90 = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
            // 清理旧数据
            cokingProcessMainService.deleteByClock(clock);
            String[] split = processTypes.split(",");
            for (String processType : split) {
                CokingProcessConfEntity queryParams = new CokingProcessConfEntity();
                queryParams.setIndType(processType);
@@ -54,24 +80,11 @@
                    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);
                // 清理旧数据
                cokingProcessMainService.deleteByClock(clock);
                // 主工序指标 筛选info_type = 0
                List<CokingProcessConfEntity> indList = list.stream().filter(e -> e.getInfoType().equals("0")).collect(Collectors.toList());
                if (CollectionUtils.isEmpty(indList)) {
                if (CollectionUtils.isEmpty(list)) {
                    continue;
                }
                List<CokingProcessMainEntity> processMainEntities = new ArrayList<>(indList.size());
                for (CokingProcessConfEntity conf : indList) {
                List<CokingProcessMainEntity> processMainEntities = new ArrayList<>(list.size());
                for (CokingProcessConfEntity conf : list) {
                    if (StringUtils.isBlank(conf.getDataType())) {
                        logger.info("DataType is Empty");
                        continue;
@@ -87,44 +100,42 @@
                    processMainEntity.setInfoType(conf.getInfoType());
                    processMainEntity.setIndCode(conf.getIndCode());
                    processMainEntity.setIndName(conf.getIndName());
                    processMainEntity.setIndUnit(conf.getIndUnit());
                    processMainEntity.setSort(conf.getSort());
                    // 日实际值
                    Double value = getConfValue(conf.getDataType(),conf.getPointNo());
                    processMainEntity.setRealValue(value == null ? BigDecimal.ZERO : BigDecimal.valueOf(value));
                    processMainEntity.setRealValue(value == null ? BigDecimal.valueOf(-2) : BigDecimal.valueOf(value));
                    // 基准值、理论值 来源模型下发结果
                    Double standValue = getConfValue("DATAPOINT",conf.getExt1());
                    processMainEntity.setStandValue(standValue == null ? BigDecimal.ZERO : BigDecimal.valueOf(standValue));
                    processMainEntity.setStandValue(standValue == null ? BigDecimal.valueOf(-2) : BigDecimal.valueOf(standValue));
                    Double theoryValue = getConfValue("DATAPOINT",conf.getExt2());
                    processMainEntity.setTheoryValue(theoryValue == null ? BigDecimal.ZERO : BigDecimal.valueOf(theoryValue));
                    // 计算 月累计
                    calendar.add(Calendar.DAY_OF_YEAR, -29);
                    String clock_30 = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
                    List<CokingProcessMainEntity> historyList_30 = cokingProcessMainService.historyList(clock_30, clock, "day",conf.getIndCode());
                    processMainEntity.setTheoryValue(theoryValue == null ? BigDecimal.valueOf(-2) : BigDecimal.valueOf(theoryValue));
                    // 计算 当月累计 当前自然月
                    List<CokingProcessMainEntity> historyList_30 = cokingProcessMainService.historyList(clock_month_1, clock, "day",processMainEntity.getIndCode());
                    historyList_30.add(processMainEntity);
                    double monthValue = historyList_30.stream().mapToDouble(e -> e.getRealValue().doubleValue()).sum();
                    // 过滤-2,平均值*一号到当天总天数
                    double monthValue = historyList_30.stream().filter(e -> e.getRealValue().compareTo(BigDecimal.valueOf(-2)) != 0).mapToDouble(e -> e.getRealValue().doubleValue()).average().orElse(0.0) * days;
                    processMainEntity.setMonthValue(BigDecimal.valueOf(monthValue));
                    // 计算 历史平均
                    calendar.add(Calendar.DAY_OF_YEAR, -60);
                    String clock_90 = DateUtils.format(calendar.getTime(), DateUtils.FORMAT_YEAR_MONTH_DAY);
                    List<CokingProcessMainEntity> historyList_90 = cokingProcessMainService.historyList(clock_90, clock, "day",conf.getIndCode());
                    List<CokingProcessMainEntity> historyList_90 = cokingProcessMainService.historyList(clock_90, clock, "day",processMainEntity.getIndCode());
                    historyList_90.add(processMainEntity);
                    // 过滤-2
                    historyList_90 = historyList_90.stream().filter(e -> e.getRealValue().compareTo(BigDecimal.valueOf(-2)) != 0).collect(Collectors.toList());
                    double avgValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).average().orElse(0.0);
                    processMainEntity.setAvgValue(BigDecimal.valueOf(avgValue));
                    // 历史最优
                    double baseValue = 0.0;
                    if (Double.valueOf(conf.getExt3()) > 0.0) {
                    if (StringUtils.isNotBlank(conf.getExt3()) && Double.valueOf(conf.getExt3()) > 0.0) {
                        baseValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).max().orElse(0.0);
                    }else {
                        baseValue = historyList_90.stream().mapToDouble(e -> e.getRealValue().doubleValue()).min().orElse(0.0);
                    }
                    processMainEntity.setBaseValue(BigDecimal.valueOf(baseValue));
                    processMainEntities.add(processMainEntity);
                }
                cokingProcessMainService.save(processMainEntities);
            }
        } catch (Exception ex) {
@@ -137,11 +148,15 @@
        Double value = null;
        switch (ProcessConfDataTypeEnum.getEumByCode(dataType)) {
            case DATAPOINT:
                List<String> points = new ArrayList<>();
                points.add(pointNo);
                Map<String, Object> pointsRealValue = dataPointApi.queryPointsRealValue(points);
                if (pointsRealValue.containsKey(pointNo)) {
                    value = Double.valueOf(pointsRealValue.get(pointNo).toString());
                ApiPointValueQueryDTO queryDTO = new ApiPointValueQueryDTO();
                queryDTO.setPointNo(pointNo);
                Calendar calendar = Calendar.getInstance();
                queryDTO.setEnd(calendar.getTime());
                calendar.add(Calendar.DAY_OF_YEAR,-1);
                queryDTO.setStart(calendar.getTime());
                List<ApiPointValueDTO> values = dataPointApi.queryPointHistoryValue(queryDTO);
                if (!CollectionUtils.isEmpty(values)) {
                    value = values.get(values.size() - 1).getV();
                }
                break;
            case IND:
@@ -150,7 +165,11 @@
                    value = Double.valueOf(indValues.get(0).getDataValue().toString());
                }
                break;
            case MODEL:
            case ARC:
                ApiArcDataDTO apiArcDataDTO = arcDataApi.queryArcLastValue(pointNo);
                if (apiArcDataDTO != null) {
                    value = apiArcDataDTO.getArcValue().doubleValue();
                }
                break;
            default:
                break;