| | |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 单个预测项预测结果 |
| | | * |
| | | * @author PanZhibao |
| | | * @Description |
| | | * @createTime 2024年08月26日 |
| | |
| | | |
| | | private Date predictTime; |
| | | |
| | | private List<MdkPredictDataDTO> predictData; |
| | | @Schema(description = "单个预测项预测结果,KEY为预测项目编码") |
| | | private Map<String, List<MdkPredictDataDTO>> predictData; |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | @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; |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | |
| | | @Schema(description = "预测时间") |
| | | @NotNull(message="预测时间不能为空") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8") |
| | | private Date predictTime; |
| | | |
| | | @Schema(description = "预测模块(管网类型)") |
| | |
| | | |
| | | @Schema(description = "预测项编号") |
| | | private String itemNo; |
| | | |
| | | @Schema(description = "是否返回预测结果") |
| | | private Boolean isResult; |
| | | } |
| | |
| | | } |
| | | 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) { |
| | |
| | | |
| | | 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); |
| | |
| | | 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"; |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | DmModuleEntity info(String id); |
| | | |
| | | DmModuleEntity getModuleByItemId(String itemId); |
| | | |
| | | void updatePredictTime(String id, Date predictTime); |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | 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 |
| | |
| | | |
| | | 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; |
| | |
| | | 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); |
| | |
| | | */ |
| | | public interface PredictItemHandler { |
| | | |
| | | /** |
| | | * 单个预测项预测 |
| | | * |
| | | * @param predictTime |
| | | * @param predictItemDto |
| | | * @return |
| | | * @throws ItemInvokeException |
| | | */ |
| | | PredictResultVO predict(Date predictTime, ItemVO predictItemDto) throws ItemInvokeException; |
| | | } |
| | |
| | | */ |
| | | public interface PredictModelHandler { |
| | | |
| | | /** |
| | | * 根据模型预测 |
| | | * |
| | | * @param predictTime |
| | | * @param predictModel |
| | | * @return |
| | | * @throws ModelInvokeException |
| | | */ |
| | | PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel) throws ModelInvokeException; |
| | | } |
| | |
| | | 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; |
| | |
| | | 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<>(); |
| | | |
| | |
| | | PredictItemHandler predictItemHandler = predictItemFactory.create(predictItem.getId()); |
| | | Instant start = Instant.now(); |
| | | try { |
| | | // 预测项开始预测 |
| | | predictResult = predictItemHandler.predict(predictTime, predictItem); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | |
| | | 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(); |
| | |
| | | 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; |
| | |
| | | @Autowired |
| | | private ItemEntityFactory itemEntityFactory; |
| | | |
| | | @Autowired |
| | | private DataPointApi dataPointApi; |
| | | |
| | | /** |
| | | * convertToPredictData |
| | | * |
| | |
| | | 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(); |
| | |
| | | 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 |
| | | * |
| | |
| | | @Autowired |
| | | private PredictResultHandler predictResultHandler; |
| | | |
| | | /** |
| | | * MergeItem预测 |
| | | * |
| | | * @param predictTime |
| | | * @param predictItemDto |
| | | * @return |
| | | * @throws ItemInvokeException |
| | | */ |
| | | @Override |
| | | public PredictResultVO predict(Date predictTime, ItemVO predictItemDto) |
| | | throws ItemInvokeException { |
| | |
| | | @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); |
| | |
| | | throw new ModelInvokeException(MessageFormat.format("{0},itemId={1}", |
| | | ModelInvokeException.errorGetModelEntity, itemId)); |
| | | } |
| | | for (MmPredictModelEntity predictModel : predictModelList) { |
| | | MmPredictModelEntity predictModel = predictModelList.get(0); |
| | | 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); |
| | | |
| | | } catch (Exception ex) { |
| | | ex.printStackTrace(); |
| | | //预测项预测失败的状态 |
| | |
| | | ItemInvokeException.errorItemFailed, itemId)); |
| | | } |
| | | |
| | | return finalResult; |
| | | return predictResult; |
| | | } |
| | | } |
| | |
| | | |
| | | 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; |
| | |
| | | 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.*; |
| | |
| | | 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"); |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | result.setPredictMatrixs(predictMatrixs); |
| | | result.setModelResult(modelResult); |
| | | result.setPredictTime(predictTime); |
| | | } catch (Exception ex) { |
| | | log.error("IAILModel对象构造失败,modelId=" + modelId); |
| | | log.error(ex.getMessage()); |
| | | log.error("调用发生异常,异常信息为:{}" , ex); |
| | | log.error(ex.getMessage()); |
| | | ex.printStackTrace(); |
| | | |
| | | } |
| | | return result; |
| | | } |
| | |
| | | private String saveIndex; |
| | | |
| | | /** |
| | | * 粒度 |
| | | */ |
| | | private Integer granularity; |
| | | |
| | | /** |
| | | * 预测集合 |
| | | */ |
| | | private List<DataValueVO> predictList; |