潘志宝
3 天以前 f853b02cb7b265379eceb2f0e3c38f9d63bb1b21
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
@@ -1,6 +1,7 @@
package com.iailab.module.model.api;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointValueWriteDTO;
import com.iailab.module.model.api.mcs.dto.StScheduleModelOutDTO;
@@ -8,6 +9,7 @@
import com.iailab.module.model.api.mdk.dto.*;
import com.iailab.module.model.common.enums.IsWriteEnum;
import com.iailab.module.model.common.enums.ModelOutResultType;
import com.iailab.module.model.common.enums.OutResultType;
import com.iailab.module.model.mcs.pre.entity.DmModuleEntity;
import com.iailab.module.model.mcs.pre.service.DmModuleService;
import com.iailab.module.model.mcs.pre.service.MmPredictItemService;
@@ -23,12 +25,16 @@
import com.iailab.module.model.mdk.vo.ScheduleResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static com.iailab.module.model.common.enums.ModelOutResultType.D;
/**
 * @author PanZhibao
@@ -66,6 +72,11 @@
    @Autowired
    private DataPointApi dataPointApi;
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    public static final long offset = 60 * 3L;
    /**
     * 按模块预测
@@ -213,7 +224,9 @@
        resp.setScheduleTime(reqDTO.getScheduleTime());
        try {
            log.info("调度计算开始: " + System.currentTimeMillis());
            ScheduleResultVO scheduleResult = scheduleModelHandler.doSchedule(reqDTO.getScheduleCode(), reqDTO.getScheduleTime(), reqDTO.getParams());
            log.info("reqDTO=" + JSON.toJSONString(reqDTO));
            ScheduleResultVO scheduleResult = scheduleModelHandler.doSchedule(reqDTO.getScheduleCode(), reqDTO.getScheduleTime(),
                    reqDTO.getDynamicDataLength(), reqDTO.getDynamicSettings());
            resp.setStatusCode(scheduleResult.getResultCode());
            resp.setResult(scheduleResult.getResult());
            stScheduleRecordService.create(scheduleResult);
@@ -227,6 +240,46 @@
        return resp;
    }
    /**
     * 执行调度模型
     *
     * @param reqDTO
     * @return
     */
    @Override
    public MdkScheduleRespDTO runSchedule(MdkScheduleReqDTO reqDTO) {
        MdkScheduleRespDTO resp = new MdkScheduleRespDTO();
        if (reqDTO.getScheduleTime() == null) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.MILLISECOND, 0);
            calendar.set(Calendar.SECOND, 0);
            reqDTO.setScheduleTime(calendar.getTime());
        }
        resp.setScheduleCode(reqDTO.getScheduleCode());
        resp.setScheduleTime(reqDTO.getScheduleTime());
        String catchKey = "ScheduleResult:" + reqDTO.getScheduleCode();
        try {
            if (redisTemplate.hasKey(catchKey)) {
                log.info("查找调度结果缓存: " + catchKey);
                return JSON.parseObject(JSONObject.toJSONString(redisTemplate.opsForValue().get(catchKey)), MdkScheduleRespDTO.class);
            }
            log.info("调度计算开始: " + System.currentTimeMillis());
            log.info("reqDTO=" + JSON.toJSONString(reqDTO));
            ScheduleResultVO scheduleResult = scheduleModelHandler.doSchedule(reqDTO.getScheduleCode(), reqDTO.getScheduleTime(),
                    reqDTO.getDynamicDataLength(), reqDTO.getDynamicSettings());
            resp.setStatusCode(scheduleResult.getResultCode());
            resp.setResult(scheduleResult.getResult());
            redisTemplate.opsForValue().set(catchKey, JSON.toJSONString(resp), offset, TimeUnit.SECONDS);
            stScheduleSchemeService.updateTime(scheduleResult.getSchemeId(), scheduleResult.getScheduleTime(), scheduleResult.getResultCode());
            log.info("预测计算结束: " + System.currentTimeMillis());
        } catch (Exception ex) {
            log.info("调度计算异常: " + System.currentTimeMillis());
            ex.printStackTrace();
            return resp;
        }
        return resp;
    }
    @Override
    public Boolean scheduleModelOut(MdkScheduleRespDTO dto) {
        String modelId = stScheduleSchemeService.getByCode(dto.getScheduleCode()).getModelId();