潘志宝
2024-11-13 4f171763ce5ee065a704e5d08fcbd5a3379dec85
返回预测结果
已修改17个文件
281 ■■■■■ 文件已修改
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/dto/MdkPredictItemRespDTO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/dto/MdkPredictModuleRespDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/dto/MdkPredictReqDTO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonConstant.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/DmModuleService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemResultService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/DmModuleServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemResultServiceImpl.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictItemHandler.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemMergeHandlerImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemNormalHandlerImpl.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/vo/PredictResultVO.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/dto/MdkPredictItemRespDTO.java
@@ -5,8 +5,11 @@
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 单个预测项预测结果
 *
 * @author PanZhibao
 * @Description
 * @createTime 2024年08月26日
@@ -19,5 +22,6 @@
    private Date predictTime;
    private List<MdkPredictDataDTO> predictData;
    @Schema(description = "单个预测项预测结果,KEY为预测项目编码")
    private Map<String, List<MdkPredictDataDTO>> predictData;
}
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/dto/MdkPredictModuleRespDTO.java
@@ -1,5 +1,6 @@
package com.iailab.module.model.api.mdk.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -15,9 +16,11 @@
@Data
public class MdkPredictModuleRespDTO {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date predictTime;
    private String moduleType;
    @Schema(description = "模块预测结果,KEY为预测项目编码")
    private Map<String, MdkPredictItemRespDTO> predictItemRespMap;
}
iailab-module-model/iailab-module-model-api/src/main/java/com/iailab/module/model/api/mdk/dto/MdkPredictReqDTO.java
@@ -1,5 +1,6 @@
package com.iailab.module.model.api.mdk.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -17,6 +18,7 @@
    @Schema(description = "预测时间")
    @NotNull(message="预测时间不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date predictTime;
    @Schema(description = "预测模块(管网类型)")
@@ -24,4 +26,7 @@
    @Schema(description = "预测项编号")
    private String itemNo;
    @Schema(description = "是否返回预测结果")
    private Boolean isResult;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
@@ -99,34 +99,32 @@
                }
                List<ItemVO> predictItemList = mmPredictItemService.getByModuleId(module.getId());
                Map<String, PredictResultVO> predictResultMap = predictModuleHandler.predict(predictItemList, reqDTO.getPredictTime(), intervalTime);
                // 更新Module时间
                dmModuleService.updatePredictTime(module.getId(), reqDTO.getPredictTime());
//                for (Map.Entry<String, PredictResultVO> entry : predictResultMap.entrySet()) {
//                    for (Map.Entry<String, List<DataValueVO>> dataListEntry : entry.getValue().getPredictLists().entrySet()) {
//                        List<MdkPredictDataDTO> predictData = dataListEntry.getValue().stream().map(t -> {
//                            MdkPredictDataDTO dto1 = new MdkPredictDataDTO();
//                            dto1.setDataTime(t.getDataTime());
//                            dto1.setDataValue(t.getDataValue());
//                            return dto1;
//                        }).collect(Collectors.toList());
//                        MdkPredictItemRespDTO itemResp = new MdkPredictItemRespDTO();
//                        itemResp.setItemId(dataListEntry.getKey());
//                        itemResp.setPredictData(predictData);
//                        predictItemRespMap.put(entry.getKey(), itemResp);
//                    }
//                }
                if (reqDTO.getIsResult() == null || !reqDTO.getIsResult()) {
                    return resp;
                }
//                for (Map.Entry<String, PredictResultVO> entry : predictResultMap.entrySet()) {
//                    List<MdkPredictDataDTO> predictData = entry.getValue().getPredictList().stream().map(t-> {
//                        MdkPredictDataDTO dto1 = new MdkPredictDataDTO();
//                        dto1.setDataTime(t.getDataTime());
//                        dto1.setDataValue(t.getDataValue());
//                        return dto1;
//                    }).collect(Collectors.toList());
//                    MdkPredictItemRespDTO itemResp = new MdkPredictItemRespDTO();
//                    itemResp.setItemId(entry.getValue().getPredictId());
//                    itemResp.setPredictData(predictData);
//                    predictItemRespMap.put(entry.getKey(), itemResp);
//                }
                for (Map.Entry<String, PredictResultVO> entry : predictResultMap.entrySet()) {
                    MdkPredictItemRespDTO itemResp = new MdkPredictItemRespDTO();
                    itemResp.setItemId(entry.getKey());
                    itemResp.setPredictTime(reqDTO.getPredictTime());
                    Map<String, List<MdkPredictDataDTO>> itemPredictData = new HashMap<>();
                    Map<String, List<DataValueVO>> predictLists = predictResultHandler.convertToPredictData2(entry.getValue());
                    for (Map.Entry<String, List<DataValueVO>> dataListEntry : predictLists.entrySet()) {
                        List<MdkPredictDataDTO> predictData = dataListEntry.getValue().stream().map(t -> {
                            MdkPredictDataDTO dto1 = new MdkPredictDataDTO();
                            dto1.setDataTime(t.getDataTime());
                            dto1.setDataValue(t.getDataValue());
                            return dto1;
                        }).collect(Collectors.toList());
                        itemPredictData.put(dataListEntry.getKey(), predictData);
                    }
                    itemResp.setPredictData(itemPredictData);
                    predictItemRespMap.put(entry.getKey(), itemResp);
                }
            }
            log.info("预测计算结束: " + System.currentTimeMillis());
        } catch (Exception ex) {
@@ -149,14 +147,15 @@
        try {
            log.info("预测计算开始: " + System.currentTimeMillis());
            List<MdkPredictDataDTO> predictData = new ArrayList<>();
            Map<String, List<MdkPredictDataDTO>> predictData = new HashMap<>();
            ItemVO predictItem = itemEntityFactory.getItemByItemNo(reqDTO.getItemNo());
            PredictItemHandler predictItemHandler = (PredictItemHandler)predictItemFactory.create(predictItem.getId());
            PredictItemHandler predictItemHandler = predictItemFactory.create(predictItem.getId());
            PredictResultVO predictResult = predictItemHandler.predict(reqDTO.getPredictTime(), predictItem);
            Map<String, List<DataValueVO>> resultMap = predictResultHandler.convertToPredictData(predictResult);
            if (!CollectionUtils.isEmpty(resultMap)) {
                for (Map.Entry<String, List<DataValueVO>> entry : resultMap.entrySet()) {
                    predictData = ConvertUtils.sourceToTarget(entry.getValue(), MdkPredictDataDTO.class);
                    List<MdkPredictDataDTO>  data = ConvertUtils.sourceToTarget(entry.getValue(), MdkPredictDataDTO.class);
                    predictData.put(entry.getKey(), data);
                }
            }
            resp.setPredictData(predictData);
@@ -164,7 +163,7 @@
            resp.setPredictTime(reqDTO.getPredictTime());
            log.info("预测计算结束: " + System.currentTimeMillis());
        } catch (Exception ex) {
            log.info("预测计算异常: " + System.currentTimeMillis(),ex);
            log.info("预测计算异常: " + System.currentTimeMillis(), ex);
            return resp;
        }
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/enums/CommonConstant.java
@@ -15,4 +15,10 @@
    BigDecimal ZERO_VALUE = new BigDecimal("0");
    String MDK_SUFFIX = ".miail";
    String MDK_RESULT = "result";
    String MDK_STATUS_CODE = "status_code";
    String MDK_STATUS_100 = "100";
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/DmModuleService.java
@@ -4,6 +4,7 @@
import com.iailab.module.model.mcs.pre.entity.DmModuleEntity;
import com.iailab.module.model.mcs.pre.vo.DmModulePageReqVO;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -30,4 +31,6 @@
    DmModuleEntity info(String id);
    DmModuleEntity getModuleByItemId(String itemId);
    void updatePredictTime(String id, Date predictTime);
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/MmItemResultService.java
@@ -1,6 +1,5 @@
package com.iailab.module.model.mcs.pre.service;
import com.iailab.module.data.api.point.dto.ApiPointDTO;
import com.iailab.module.model.mcs.pre.entity.MmItemResultEntity;
import com.iailab.module.model.mdk.vo.DataValueVO;
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/DmModuleServiceImpl.java
@@ -86,7 +86,16 @@
        params.put("moduletype", moduletype);
        QueryWrapper<DmModuleEntity> wrapper = getWrapper(params);
        return dmModuleDao.selectList(wrapper);
    }
    @Override
    public void updatePredictTime(String id, Date predictTime) {
        DmModuleEntity entity = dmModuleDao.selectById(id);
        if (entity == null) {
            return;
        }
        entity.setPredicttime(predictTime);
        dmModuleDao.updateById(entity);
    }
    @Override
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/service/impl/MmItemResultServiceImpl.java
@@ -75,9 +75,9 @@
            List<DataValueVO> lastVoList = new ArrayList<>();
            int size = entry.getValue().size();
            t = t > 0 ? t : 0;
            t = Math.max(t, 0);
            int n = "n".equals(nIndex) ? size : Integer.parseInt(nIndex);
            int length = (n - t) > 0 ? (n - t) : 0; //预测完不变的数据长度
            int length = Math.max((n - t), 0); //预测完不变的数据长度
            if (size >= n) {
                for (int i = 0; i < (size - length); i ++) {
                    int index = length + i;
@@ -112,41 +112,7 @@
            params.put("STARTTIME", importList.get(0).getDatatime());
            params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
            mmItemResultDao.deletePredictValue(params);
        }
//        Map<String, Object> params = new HashMap(4);
//        params.put("TABLENAME", T_MM_ITEM_RESULT);
//        params.put("OUTPUTID", importList.get(0).getOutputid());
//        params.put("STARTTIME", importList.get(0).getDatatime());
//        params.put("ENDTIME", importList.get(importList.size() - 1).getDatatime());
//        mmItemResultDao.deletePredictValue(params);
//        int num1 = importList.size() / max_group_count;
//        int num2 = importList.size() % max_group_count;
//        if (num2 != 0) {
//            num1++;
//        }
//
//        List<MmItemResultEntity> tempList;
//        //先删除已经存在的数据,再插入新数据
//        for (int i = 0; i < num1; i++) {
//            int startIndex = max_group_count * i;
//            int count = max_group_count;
//            if (num2!=0 && i == num1 - 1) {
//                count = num2;
//            }
//            tempList = new ArrayList<>();
//            //获取某个索引范围内的对象集合
//            for (int j = startIndex; j < startIndex + count; j++) {
//                tempList.add(importList.get(j));
//            }
//            Map<String, Object> map2 = new HashMap<>(2);
//            map2.put("TABLENAME", T_MM_ITEM_RESULT);
//            map2.put("list", tempList);
//            mmItemResultDao.savePredictValue(map2);
//        }
        mmItemResultDao.insertBatch(importList,max_group_count);
        Map<String, Object> map3 = new HashMap<>(2);
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictItemHandler.java
@@ -13,5 +13,13 @@
 */
public interface PredictItemHandler {
    /**
     * 单个预测项预测
     *
     * @param predictTime
     * @param predictItemDto
     * @return
     * @throws ItemInvokeException
     */
    PredictResultVO predict(Date predictTime, ItemVO predictItemDto) throws ItemInvokeException;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java
@@ -13,5 +13,13 @@
 */
public interface PredictModelHandler {
    /**
     * 根据模型预测
     *
     * @param predictTime
     * @param predictModel
     * @return
     * @throws ModelInvokeException
     */
    PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel) throws ModelInvokeException;
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java
@@ -1,6 +1,5 @@
package com.iailab.module.model.mdk.predict;
import com.iailab.module.model.mcs.pre.entity.MmItemStatusEntity;
import com.iailab.module.model.mcs.pre.enums.ItemRunStatusEnum;
import com.iailab.module.model.mcs.pre.enums.ItemStatus;
import com.iailab.module.model.mcs.pre.service.MmItemStatusService;
@@ -39,6 +38,14 @@
    private MmItemStatusService mmItemStatusService;
    /**
     * 预测处理
     *
     * @param predictItemList
     * @param predictTime
     * @param intervalTime
     * @return
     */
    public Map<String, PredictResultVO> predict(List<ItemVO> predictItemList, Date predictTime, int intervalTime) {
        Map<String, PredictResultVO> result = new HashMap<>();
@@ -53,6 +60,7 @@
                PredictItemHandler predictItemHandler = predictItemFactory.create(predictItem.getId());
                Instant start = Instant.now();
                try {
                    // 预测项开始预测
                    predictResult = predictItemHandler.predict(predictTime, predictItem);
                } catch (Exception e) {
                    e.printStackTrace();
@@ -63,9 +71,12 @@
                log.info(MessageFormat.format("预测项:{0},预测时间:{1}秒", predictItem.getItemName(), drtPre));
                totalDur = totalDur + drtPre;
                predictResult.setGranularity(predictItem.getGranularity());
                predictResult.setT(intervalTime);
                predictResult.setSaveIndex(predictItem.getSaveIndex());
                predictResult.setLt(1);
                // 保存预测结果
                predictResultHandler.savePredictResult(predictResult);
                Instant endSave = Instant.now();
                Long drtSave = Duration.between(end, endSave).getSeconds();
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictResultHandler.java
@@ -1,9 +1,6 @@
package com.iailab.module.model.mdk.predict;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.iailab.module.data.api.point.DataPointApi;
import com.iailab.module.data.api.point.dto.ApiPointDTO;
import com.iailab.module.data.enums.DataPointFreqEnum;
import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
import com.iailab.module.model.mcs.pre.service.MmItemResultService;
import com.iailab.module.model.mdk.factory.ItemEntityFactory;
@@ -25,9 +22,6 @@
    @Autowired
    private ItemEntityFactory itemEntityFactory;
    @Autowired
    private DataPointApi dataPointApi;
    /**
     * convertToPredictData
     *
@@ -45,8 +39,6 @@
        Map<MmItemOutputEntity, double[]> predictMatrixs = predictResult.getPredictMatrixs();
        HashMap<String,List<DataValueVO>> predictLists = new HashMap<>();
        for (Map.Entry<MmItemOutputEntity, double[]> entry : predictMatrixs.entrySet()) {
            ApiPointDTO point = dataPointApi.getInfoById(entry.getKey().getPointid());
            Integer pointMinfreq = DataPointFreqEnum.getEumByCode(point.getMinfreqid()).getValue();
            Integer rows = entry.getValue().length;
            List<DataValueVO> predictDataList = new ArrayList<>();
            Calendar calendar = Calendar.getInstance();
@@ -57,14 +49,39 @@
                predictData.setDataValue(Double.valueOf(entry.getValue()[i]));
                predictDataList.add(predictData);
                calendar.add(Calendar.SECOND, pointMinfreq);
                calendar.add(Calendar.SECOND, predictResult.getGranularity());
            }
            resultMap.put(entry.getKey().getId(), predictDataList);
            predictLists.put(entry.getKey().getResultstr(), predictDataList);
        }
        predictResult.setPredictLists(predictLists);
        return resultMap;
    }
    public Map<String, List<DataValueVO>> convertToPredictData2(PredictResultVO predictResult) {
        Map<String, List<DataValueVO>> predictLists = new HashMap<>();
        if (!CollectionUtils.isEmpty(predictResult.getPredictList())) {
            return predictLists;
        }
        Map<MmItemOutputEntity, double[]> predictMatrixs = predictResult.getPredictMatrixs();
        for (Map.Entry<MmItemOutputEntity, double[]> entry : predictMatrixs.entrySet()) {
            Integer rows = entry.getValue().length;
            List<DataValueVO> predictDataList = new ArrayList<>();
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictResult.getPredictTime());
            for (Integer i = 0; i < rows; i++) {
                DataValueVO predictData = new DataValueVO();
                predictData.setDataTime(calendar.getTime());
                predictData.setDataValue(Double.valueOf(entry.getValue()[i]));
                predictDataList.add(predictData);
                calendar.add(Calendar.SECOND, predictResult.getGranularity());
            }
            predictLists.put(entry.getKey().getResultstr(), predictDataList);
        }
        return predictLists;
    }
    /**
     * savePredictResult
     *
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemMergeHandlerImpl.java
@@ -41,6 +41,14 @@
    @Autowired
    private PredictResultHandler predictResultHandler;
    /**
     * MergeItem预测
     *
     * @param predictTime
     * @param predictItemDto
     * @return
     * @throws ItemInvokeException
     */
    @Override
    public PredictResultVO predict(Date predictTime, ItemVO predictItemDto)
            throws ItemInvokeException {
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemNormalHandlerImpl.java
@@ -34,13 +34,20 @@
    @Autowired
    private PredictModelHandler predictModelHandler;
    /**
     * NormalItem预测
     *
     * @param predictTime
     * @param predictItemDto
     * @return
     * @throws ItemInvokeException
     */
    @Override
    public PredictResultVO predict(Date predictTime, ItemVO predictItemDto)
            throws ItemInvokeException{
        String itemId = predictItemDto.getId();
        PredictResultVO finalResult = new PredictResultVO();
        PredictResultVO predictResult = new PredictResultVO();
        List<PredictResultVO> predictResultList = new ArrayList<>();
        String itemId = predictItemDto.getId();
        predictResult.setPredictId(itemId);
        try {
            // 获取预测项模型
            List<MmPredictModelEntity> predictModelList = mmPredictModelService.getActiveModelByItemId(itemId);
@@ -48,17 +55,8 @@
                throw new ModelInvokeException(MessageFormat.format("{0},itemId={1}",
                        ModelInvokeException.errorGetModelEntity, itemId));
            }
            for (MmPredictModelEntity predictModel : predictModelList) {
                predictResult = predictModelHandler.predictByModel(predictTime, predictModel);
                predictResult.setPredictId(itemId);
                predictResultList.add(predictResult);
            }
            /*Calendar calendar = Calendar.getInstance();
            calendar.setTime(predictTime);
            calendar.add(Calendar.MINUTE, predictResult.getPredictMatrix().length - 1);
            Timestamp endTime = new Timestamp(calendar.getTime().getTime());*/
            finalResult = predictResultList.get(0);
            MmPredictModelEntity predictModel = predictModelList.get(0);
            predictResult = predictModelHandler.predictByModel(predictTime, predictModel);
        } catch (Exception ex) {
            ex.printStackTrace();
            //预测项预测失败的状态
@@ -66,6 +64,6 @@
                    ItemInvokeException.errorItemFailed, itemId));
        }
        return finalResult;
        return predictResult;
    }
}
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java
@@ -2,16 +2,13 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.iail.IAILMDK;
import com.iail.model.IAILModel;
import com.iailab.module.model.mcs.pre.controller.admin.MmItemOutputController;
import com.iailab.module.model.common.enums.CommonConstant;
import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
import com.iailab.module.model.mcs.pre.entity.MmModelArithSettingsEntity;
import com.iailab.module.model.mcs.pre.entity.MmModelResultstrEntity;
import com.iailab.module.model.mcs.pre.entity.MmPredictModelEntity;
import com.iailab.module.model.mcs.pre.service.MmItemOutputService;
import com.iailab.module.model.mcs.pre.service.MmModelArithSettingsService;
import com.iailab.module.model.mcs.pre.service.MmModelResultstrService;
import com.iailab.module.model.mdk.common.enums.TypeA;
import com.iailab.module.model.mdk.common.exceptions.ModelInvokeException;
import com.iailab.module.model.mdk.predict.PredictModelHandler;
@@ -21,7 +18,6 @@
import com.iailab.module.model.mpk.common.utils.DllUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Component;
import java.util.*;
@@ -39,15 +35,21 @@
    private MmModelArithSettingsService mmModelArithSettingsService;
    @Autowired
    private MmModelResultstrService mmModelResultstrService;
    @Autowired
    private MmItemOutputService mmItemOutputService;
    @Autowired
    private SampleConstructor sampleConstructor;
    /**
     * 根据模型预测,返回预测结果
     *
     * @param predictTime
     * @param predictModel
     * @return
     * @throws ModelInvokeException
     */
    @Override
    public PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel) throws ModelInvokeException {
    public synchronized PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel) throws ModelInvokeException {
        PredictResultVO result = new PredictResultVO();
        if (predictModel == null) {
            throw new ModelInvokeException("modelEntity is null");
@@ -70,10 +72,10 @@
            int portLength = sampleDataList.size();
            Object[] param2Values = new Object[portLength + 2];
            for (int i = 0; i < portLength; i++) {
                param2Values[i]=sampleDataList.get(i).getMatrix();
                param2Values[i] = sampleDataList.get(i).getMatrix();
            }
            param2Values[portLength] = newModelBean.getDataMap().get("models");
            param2Values[portLength+1] = settings;
            param2Values[portLength + 1] = settings;
            log.info("#######################预测模型 " + predictModel.getItemid() + " ##########################");
            JSONObject jsonObjNewModelBean = new JSONObject();
@@ -84,13 +86,12 @@
            log.info(String.valueOf(jsonObjParam2Values));
            //IAILMDK.run
//            HashMap<String, Object> modelResult = IAILMDK.run(newModelBean, param2Values);
            HashMap<String, Object> modelResult = DllUtils.run(newModelBean, param2Values, predictModel.getMpkprojectid());
            if(!modelResult.containsKey("status_code") || !modelResult.containsKey("result") || Integer.parseInt(modelResult.get("status_code").toString()) != 100) {
            if (!modelResult.containsKey(CommonConstant.MDK_STATUS_CODE) || !modelResult.containsKey(CommonConstant.MDK_RESULT) ||
                    !modelResult.get(CommonConstant.MDK_STATUS_CODE).toString().equals(CommonConstant.MDK_STATUS_100)) {
                throw new RuntimeException("模型结果异常:" + modelResult);
            }
            modelResult = (HashMap<String, Object>) modelResult.get("result");
            modelResult = (HashMap<String, Object>) modelResult.get(CommonConstant.MDK_RESULT);
            //打印结果
            JSONObject jsonObjResult = new JSONObject();
            jsonObjResult.put("result", modelResult);
@@ -99,7 +100,7 @@
            List<MmItemOutputEntity> ItemOutputList = mmItemOutputService.getByItemid(predictModel.getItemid());
            log.info("模型计算完成:modelId=" + modelId + modelResult);
            Map<MmItemOutputEntity,double[]> predictMatrixs = new HashMap<>(ItemOutputList.size());
            Map<MmItemOutputEntity, double[]> predictMatrixs = new HashMap<>(ItemOutputList.size());
            for (MmItemOutputEntity outputEntity : ItemOutputList) {
                String resultStr = outputEntity.getResultstr();
@@ -111,8 +112,8 @@
                        for (int i = 0; i < temp.length; i++) {
                            temp1[i] = temp[i].doubleValue();
                        }
                        predictMatrixs.put(outputEntity,temp1);
                    }else if (outputEntity.getResultType() == 2) {
                        predictMatrixs.put(outputEntity, temp1);
                    } else if (outputEntity.getResultType() == 2) {
                        // 二维数组
                        Double[][] temp = (Double[][]) modelResult.get(resultStr);
                        Double[] temp2 = temp[outputEntity.getResultIndex()];
@@ -120,20 +121,17 @@
                        for (int i = 0; i < temp2.length; i++) {
                            temp1[i] = temp2[i].doubleValue();
                        }
                        predictMatrixs.put(outputEntity,temp1);
                        predictMatrixs.put(outputEntity, temp1);
                    }
                }
            }
            result.setPredictMatrixs(predictMatrixs);
            result.setModelResult(modelResult);
            result.setPredictTime(predictTime);
        } catch (Exception ex) {
            log.error("IAILModel对象构造失败,modelId=" + modelId);
            log.error("调用发生异常,异常信息为:{}", ex);
            log.error(ex.getMessage());
            log.error("调用发生异常,异常信息为:{}" , ex);
            ex.printStackTrace();
        }
        return result;
    }
iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/vo/PredictResultVO.java
@@ -35,7 +35,7 @@
    /**
     * 统一预测入口的预测类型(循环调用、手动调用) Map<MmItemOutputEntity,double[]>
     */
    private Map<MmItemOutputEntity,double[]> predictMatrixs;
    private Map<MmItemOutputEntity, double[]> predictMatrixs;
    /**
     * 时间间隔 (当前预测时间 与 上一次预测时间 相差的分钟数;系统计算得出)
@@ -53,13 +53,18 @@
    private String saveIndex;
    /**
     * 粒度
     */
    private Integer granularity;
    /**
     * 预测集合
     */
    private List<DataValueVO> predictList;
    /**
     * 预测集合
     */
    private HashMap<String,List<DataValueVO>> predictLists;
    private HashMap<String, List<DataValueVO>> predictLists;
    /**
     * 模型结果