From 7f0bcd00c556889ba890e5e68c681f1b5d4267e1 Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期四, 19 十二月 2024 18:07:20 +0800
Subject: [PATCH] 预测项状态添加模型结果异常

---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java |   68 +++++++++++++++++++++++++---------
 1 files changed, 50 insertions(+), 18 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 a43780e..bf5be31 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,12 +1,16 @@
 package com.iailab.module.model.mdk.predict;
 
+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.service.MmItemStatusService;
 import com.iailab.module.model.mdk.factory.PredictItemFactory;
 import com.iailab.module.model.mdk.vo.ItemVO;
 import com.iailab.module.model.mdk.vo.PredictResultVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.text.MessageFormat;
 import java.time.Duration;
@@ -32,44 +36,72 @@
     @Autowired
     private PredictResultHandler predictResultHandler;
 
+    @Autowired
+    private MmItemStatusService mmItemStatusService;
 
-    public Map<String, PredictResultVO> predict(List<ItemVO> predictItemList, Date predictTime, int intervalTime) {
-        Map<String, PredictResultVO> result = new HashMap<>();
 
-        PredictResultVO predictResult = new PredictResultVO();
+    /**
+     * 预测处理
+     *
+     * @param predictItemList
+     * @param predictTime
+     * @param intervalTime
+     * @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[]>
+            predictValueMap = new HashMap<>();
+            for (Map.Entry<String, PredictResultVO> entry : predictResultMap.entrySet()) {
+                for (Map.Entry<MmItemOutputEntity, double[]> mmItemOutputEntityEntry : entry.getValue().getPredictMatrixs().entrySet()) {
+                    predictValueMap.put(mmItemOutputEntityEntry.getKey().getId(),mmItemOutputEntityEntry.getValue());
+                }
+            }
+        }
         for (ItemVO predictItem : predictItemList) {
             if (!predictItem.getStatus().equals(ItemStatus.STATUS1.getCode())) {
                 continue;
             }
+            Long totalDur = 0L;
+            ItemRunStatusEnum itemRunStatusEnum = ItemRunStatusEnum.PROCESSING;
             try {
-                PredictItemHandler predictItemHandler = (PredictItemHandler)predictItemFactory.create(predictItem.getId());
-                Instant start = Instant.now();
+                mmItemStatusService.recordStatus(predictItem.getId(), itemRunStatusEnum, totalDur, predictTime);
+                PredictItemHandler predictItemHandler = predictItemFactory.create(predictItem.getId());
+                long start = System.currentTimeMillis();
                 try {
-                    predictResult = predictItemHandler.predict(predictTime, predictItem);
+                    // 预测项开始预测
+                    predictResult = predictItemHandler.predict(predictTime, predictItem, predictValueMap,itemRunStatusEnum);
                 } catch (Exception e) {
-                    e.printStackTrace();
-                    log.error(String.valueOf(e));
+                    continue;
                 }
-                Instant end = Instant.now();
-                Long drtPre = Duration.between(start, end).getSeconds();
-                log.info(MessageFormat.format("预测项:{0},预测时间:{1}秒", predictItem.getItemName(), drtPre));
+                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);
-                predictResultHandler.savePredictResult(predictResult);
-                Instant endSave = Instant.now();
-                Long drtSave = Duration.between(end, endSave).getSeconds();
-                log.info(MessageFormat.format("预测项:{0},保存时间:{1}秒", predictItem.getItemName(),
-                        drtSave));
 
-                result.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);
             } 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);
             }
         }
-        return result;
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3