From 271fed395d4d3e4ab8cdb44ccf466859ba485e46 Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期四, 09 一月 2025 17:45:33 +0800
Subject: [PATCH] Merge branch 'master' of http://dlindusit.com:53929/r/iailab-plat

---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java |   54 +++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java
index bf5be31..76d88ec 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java
@@ -1,8 +1,10 @@
 package com.iailab.module.model.mdk.predict;
 
+import com.iailab.module.model.common.exception.ModelResultErrorException;
 import com.iailab.module.model.mcs.pre.entity.MmItemOutputEntity;
 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.enums.PredGranularityEnum;
 import com.iailab.module.model.mcs.pre.service.MmItemStatusService;
 import com.iailab.module.model.mdk.factory.PredictItemFactory;
 import com.iailab.module.model.mdk.vo.ItemVO;
@@ -13,12 +15,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.text.MessageFormat;
-import java.time.Duration;
-import java.time.Instant;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author PanZhibao
@@ -49,7 +46,6 @@
      * @return
      */
     public void predict(List<ItemVO> predictItemList, Date predictTime, int intervalTime,Map<String, PredictResultVO> predictResultMap) {
-        PredictResultVO predictResult;
         Map<String, double[]> predictValueMap = null;
         if (!CollectionUtils.isEmpty(predictResultMap)) {
             // 将predictResultMap处理成Map<outPutId, double[]>
@@ -61,46 +57,66 @@
             }
         }
         for (ItemVO predictItem : predictItemList) {
+            // 根据item粒度处理预测时间
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(predictTime);
+            calendar.set(Calendar.MILLISECOND, 0);
+            calendar.set(Calendar.SECOND, 0);
+            if (PredGranularityEnum.H1.getCode().equals(predictItem.getGranularity())) {
+                calendar.set(Calendar.MINUTE,0);
+            }else if (PredGranularityEnum.D1.getCode().equals(predictItem.getGranularity())) {
+                calendar.set(Calendar.MINUTE,0);
+                calendar.set(Calendar.HOUR_OF_DAY,0);
+            }
+            PredictResultVO predictResult;
             if (!predictItem.getStatus().equals(ItemStatus.STATUS1.getCode())) {
                 continue;
             }
             Long totalDur = 0L;
             ItemRunStatusEnum itemRunStatusEnum = ItemRunStatusEnum.PROCESSING;
             try {
-                mmItemStatusService.recordStatus(predictItem.getId(), itemRunStatusEnum, totalDur, predictTime);
+                mmItemStatusService.recordStatus(predictItem.getId(), itemRunStatusEnum, totalDur, calendar.getTime());
                 PredictItemHandler predictItemHandler = predictItemFactory.create(predictItem.getId());
                 long start = System.currentTimeMillis();
                 try {
                     // 预测项开始预测
-                    predictResult = predictItemHandler.predict(predictTime, predictItem, predictValueMap,itemRunStatusEnum);
+                    predictResult = predictItemHandler.predict(calendar.getTime(), predictItem, predictValueMap);
+                } catch (ModelResultErrorException e) {
+                    itemRunStatusEnum = ItemRunStatusEnum.MODELRESULTERROR;
+                    continue;
                 } catch (Exception e) {
+                    itemRunStatusEnum = ItemRunStatusEnum.FAIL;
                     continue;
                 }
                 long end = System.currentTimeMillis();
                 Long drtPre = end - start;
                 log.info(MessageFormat.format("预测项:{0},预测时间:{1}ms", predictItem.getItemName(), drtPre));
                 totalDur = totalDur + drtPre;
-
                 predictResult.setGranularity(predictItem.getGranularity());
                 predictResult.setT(intervalTime);
                 predictResult.setSaveIndex(predictItem.getSaveIndex());
                 predictResult.setLt(1);
+                predictResultMap.put(predictItem.getItemNo(), predictResult);
 
                 // 保存预测结果
-                predictResultHandler.savePredictResult(predictResult);
-                long endSave = System.currentTimeMillis();
-                Long drtSave = endSave - end;
-                log.info(MessageFormat.format("预测项:{0},保存时间:{1}ms", predictItem.getItemName(),
-                        drtSave));
-                totalDur = totalDur + drtSave;
-                predictResultMap.put(predictItem.getItemNo(), predictResult);
+                try {
+                    predictResultHandler.savePredictResult(predictResult);
+                } catch (Exception e) {
+                    itemRunStatusEnum = ItemRunStatusEnum.MODELRESULTSAVEERROR;
+                    throw new RuntimeException("模型结果保存异常,result:" + predictResult);
+                }
+                itemRunStatusEnum = ItemRunStatusEnum.SUCCESS;
+//                long endSave = System.currentTimeMillis();
+//                Long drtSave = endSave - end;
+//                log.info(MessageFormat.format("预测项:{0},保存时间:{1}ms", predictItem.getItemName(),
+//                        drtSave));
+//                totalDur = totalDur + drtSave;
             } catch (Exception e) {
                 e.printStackTrace();
                 log.error(MessageFormat.format("预测项编号:{0},预测项名称:{1},预测失败:{2} 预测时刻:{3}",
                         predictItem.getId(), predictItem.getItemName(), e.getMessage(), predictTime));
-                itemRunStatusEnum = ItemRunStatusEnum.FAIL;
             } finally {
-                mmItemStatusService.recordStatus(predictItem.getId(), itemRunStatusEnum, totalDur, predictTime);
+                mmItemStatusService.recordStatus(predictItem.getId(), itemRunStatusEnum, totalDur, calendar.getTime());
             }
         }
     }

--
Gitblit v1.9.3