From 1178da30ca701da465bf7bc1342b539b2df03c7d Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期五, 20 十二月 2024 13:52:35 +0800
Subject: [PATCH] predictItem MODELRESULTERROR

---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/enums/ItemRunStatusEnum.java               |    3 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java                  |    5 +
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java               |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java      |    6 +-
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictItemHandler.java                |    2 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModuleHandler.java              |   28 ++++++---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemNormalHandlerImpl.java |    4 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java                                |   40 +++++++------
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemMergeHandlerImpl.java  |    3 
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/exception/ModelResultErrorException.java    |   51 +++++++++++++++++
 10 files changed, 108 insertions(+), 36 deletions(-)

diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
index 21864c0..f593686 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java
@@ -150,27 +150,31 @@
     @Override
     public MdkPredictItemRespDTO predictItem(MdkPredictReqDTO reqDTO) {
         MdkPredictItemRespDTO resp = new MdkPredictItemRespDTO();
-
         try {
-            log.info("预测计算开始: " + System.currentTimeMillis());
-            Map<String, List<MdkPredictDataDTO>> predictData = new HashMap<>();
-            ItemVO predictItem = itemEntityFactory.getItemByItemNo(reqDTO.getItemNo());
-            PredictItemHandler predictItemHandler = predictItemFactory.create(predictItem.getId());
-            PredictResultVO predictResult = predictItemHandler.predict(reqDTO.getPredictTime(), predictItem,null,null);
-            Map<String, List<DataValueVO>> resultMap = predictResultHandler.convertToPredictData(predictResult);
-            if (!CollectionUtils.isEmpty(resultMap)) {
-                for (Map.Entry<String, List<DataValueVO>> entry : resultMap.entrySet()) {
-                    List<MdkPredictDataDTO>  data = ConvertUtils.sourceToTarget(entry.getValue(), MdkPredictDataDTO.class);
-                    predictData.put(entry.getKey(), data);
-                }
+
+            ItemVO itemByItemNo = mmPredictItemService.getItemByItemNo(reqDTO.getItemNo());
+            List<ItemVO> predictItemList = new ArrayList<>();
+            predictItemList.add(itemByItemNo);
+            Map<String, PredictResultVO> predictResultMap = new HashMap<>(predictItemList.size());
+            predictModuleHandler.predict(predictItemList, reqDTO.getPredictTime(), 0,predictResultMap);
+
+            Map<String, List<MdkPredictDataDTO>> itemPredictData = new HashMap<>();
+
+            Map<String, List<DataValueVO>> predictLists = predictResultHandler.convertToPredictData2(predictResultMap.get(reqDTO.getItemNo()));
+            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);
             }
-            resp.setPredictData(predictData);
-            resp.setItemId(predictItem.getId());
+            resp.setItemId(reqDTO.getItemNo());
             resp.setPredictTime(reqDTO.getPredictTime());
-            log.info("预测计算结束: " + System.currentTimeMillis());
-        } catch (Exception ex) {
-            log.info("预测计算异常: " + System.currentTimeMillis(), ex);
-            return resp;
+            resp.setPredictData(itemPredictData);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }
 
         return resp;
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/exception/ModelResultErrorException.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/exception/ModelResultErrorException.java
new file mode 100644
index 0000000..99bfe58
--- /dev/null
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/common/exception/ModelResultErrorException.java
@@ -0,0 +1,51 @@
+package com.iailab.module.model.common.exception;
+
+/**
+ * 模型结果错误异常
+ */
+public class ModelResultErrorException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+
+    private String msg;
+    private int code = 200;
+
+    public ModelResultErrorException(String msg) {
+		super(msg);
+		this.msg = msg;
+	}
+
+	public ModelResultErrorException(String msg, Throwable e) {
+		super(msg, e);
+		this.msg = msg;
+	}
+
+	public ModelResultErrorException(String msg, int code) {
+		super(msg);
+		this.msg = msg;
+		this.code = code;
+	}
+
+	public ModelResultErrorException(String msg, int code, Throwable e) {
+		super(msg, e);
+		this.msg = msg;
+		this.code = code;
+	}
+
+	public String getMsg() {
+		return msg;
+	}
+
+	public void setMsg(String msg) {
+		this.msg = msg;
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+
+
+}
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java
index 871679f..0fb5c26 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/dto/MmPredictItemDTO.java
@@ -32,4 +32,9 @@
     private List<MmModelParamEntity> mmModelParamList;
 
     private List<MmItemResultEntity> mmItemResultList;
+
+    /**
+     * 计算预测项真实数据点
+     */
+    private String pointId;
 }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/enums/ItemRunStatusEnum.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/enums/ItemRunStatusEnum.java
index f9eb810..c593110 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/enums/ItemRunStatusEnum.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mcs/pre/enums/ItemRunStatusEnum.java
@@ -14,7 +14,8 @@
     PROCESSING(1, "处理中"),
     SUCCESS(2, "成功"),
     FAIL(3, "失败"),
-    MODELRESULTERROR(4, "模型结果异常");
+    MODELRESULTERROR(4, "模型结果异常"),
+    MODELRESULTSAVEERROR(5, "模型结果保存异常");
 
     private Integer code;
     private String desc;
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictItemHandler.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictItemHandler.java
index 2ce4fe7..2c4cf78 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictItemHandler.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictItemHandler.java
@@ -23,5 +23,5 @@
      * @return
      * @throws ItemInvokeException
      */
-    PredictResultVO predict(Date predictTime, ItemVO predictItemDto, Map<String, double[]> predictValueMap, ItemRunStatusEnum itemRunStatusEnum) throws ItemInvokeException;
+    PredictResultVO predict(Date predictTime, ItemVO predictItemDto, Map<String, double[]> predictValueMap) throws ItemInvokeException;
 }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java
index a6c11eb..4eee9fe 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/PredictModelHandler.java
@@ -22,5 +22,5 @@
      * @return
      * @throws ModelInvokeException
      */
-    PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel,String itemName, ItemRunStatusEnum itemRunStatusEnum) throws ModelInvokeException;
+    PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel,String itemName) throws ModelInvokeException;
 }
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..034a6c8 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,5 +1,6 @@
 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;
@@ -72,28 +73,37 @@
                 long start = System.currentTimeMillis();
                 try {
                     // 预测项开始预测
-                    predictResult = predictItemHandler.predict(predictTime, predictItem, predictValueMap,itemRunStatusEnum);
+                    predictResult = predictItemHandler.predict(predictTime, 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}",
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemMergeHandlerImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemMergeHandlerImpl.java
index dd8b826..2d412ec 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemMergeHandlerImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemMergeHandlerImpl.java
@@ -60,7 +60,7 @@
      * @throws ItemInvokeException
      */
     @Override
-    public PredictResultVO predict(Date predictTime, ItemVO predictItemDto, Map<String, double[]> predictValueMap, ItemRunStatusEnum itemRunStatusEnum)
+    public PredictResultVO predict(Date predictTime, ItemVO predictItemDto, Map<String, double[]> predictValueMap)
             throws ItemInvokeException {
         PredictResultVO predictResult = new PredictResultVO();
         ItemPredictStatus itemStatus = ItemPredictStatus.PREDICTING;
@@ -135,6 +135,7 @@
 //                }
 //                predictResult.setPredictMatrix(matrix);
 //            }
+            log.info("计算预测模型结果:" + predictResultMat);
             predictResult.setPredictId(itemId);
             predictResult.setPredictMatrix(predictResultMat);
             predictResult.setPredictTime(predictTime);
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemNormalHandlerImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemNormalHandlerImpl.java
index cb54cce..025ce4e 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemNormalHandlerImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictItemNormalHandlerImpl.java
@@ -39,7 +39,7 @@
      * @throws ItemInvokeException
      */
     @Override
-    public PredictResultVO predict(Date predictTime, ItemVO predictItemDto, Map<String, double[]> predictValueMap, ItemRunStatusEnum itemRunStatusEnum) throws ItemInvokeException {
+    public PredictResultVO predict(Date predictTime, ItemVO predictItemDto, Map<String, double[]> predictValueMap) throws ItemInvokeException {
         PredictResultVO predictResult = new PredictResultVO();
         String itemId = predictItemDto.getId();
         try {
@@ -48,7 +48,7 @@
                 throw new ModelInvokeException(MessageFormat.format("{0},itemId={1}",
                         ModelInvokeException.errorGetModelEntity, itemId));
             }
-            predictResult = predictModelHandler.predictByModel(predictTime, predictModel,predictItemDto.getItemName(),itemRunStatusEnum);
+            predictResult = predictModelHandler.predictByModel(predictTime, predictModel,predictItemDto.getItemName());
             predictResult.setPredictId(itemId);
         } catch (Exception ex) {
             throw new ItemInvokeException(MessageFormat.format("{0},itemId={1}",
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java
index f2c3cef..19c8582 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/mdk/predict/impl/PredictModelHandlerImpl.java
@@ -6,6 +6,7 @@
 import com.iail.model.IAILModel;
 import com.iailab.module.model.common.enums.CommonConstant;
 import com.iailab.module.model.common.enums.OutResultType;
+import com.iailab.module.model.common.exception.ModelResultErrorException;
 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.MmPredictModelEntity;
@@ -56,7 +57,7 @@
      * @throws ModelInvokeException
      */
     @Override
-    public synchronized PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel,String itemName, ItemRunStatusEnum itemRunStatusEnum) throws ModelInvokeException {
+    public synchronized PredictResultVO predictByModel(Date predictTime, MmPredictModelEntity predictModel,String itemName) throws ModelInvokeException {
         PredictResultVO result = new PredictResultVO();
         if (predictModel == null) {
             throw new ModelInvokeException("modelEntity is null");
@@ -100,8 +101,7 @@
             HashMap<String, Object> modelResult = DllUtils.run(newModelBean, param2Values, predictModel.getMpkprojectid());
             if (!modelResult.containsKey(CommonConstant.MDK_STATUS_CODE) || !modelResult.containsKey(CommonConstant.MDK_RESULT) ||
                     !modelResult.get(CommonConstant.MDK_STATUS_CODE).toString().equals(CommonConstant.MDK_STATUS_100)) {
-                itemRunStatusEnum = ItemRunStatusEnum.MODELRESULTERROR;
-                throw new RuntimeException("模型结果异常:" + modelResult);
+                throw new ModelResultErrorException("模型结果异常:" + modelResult);
             }
             modelResult = (HashMap<String, Object>) modelResult.get(CommonConstant.MDK_RESULT);
             //打印结果

--
Gitblit v1.9.3