From 2e0e42583419225b5dd38e97594de82accd594ad Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期二, 31 十二月 2024 17:23:29 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/api/MdkApiImpl.java |  117 ++++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 72 insertions(+), 45 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 a5d05a8..221133c 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
@@ -1,16 +1,13 @@
 package com.iailab.module.model.api;
 
 import com.alibaba.fastjson.JSON;
-import com.iailab.framework.common.util.object.ConvertUtils;
 import com.iailab.module.model.api.mdk.MdkApi;
 import com.iailab.module.model.api.mdk.dto.*;
-import com.iailab.framework.common.pojo.CommonResult;
 import com.iailab.module.model.mcs.pre.entity.DmModuleEntity;
 import com.iailab.module.model.mcs.pre.service.DmModuleService;
 import com.iailab.module.model.mcs.pre.service.MmPredictItemService;
-import com.iailab.module.model.mdk.factory.ItemEntityFactory;
-import com.iailab.module.model.mdk.factory.PredictItemFactory;
-import com.iailab.module.model.mdk.predict.PredictItemHandler;
+import com.iailab.module.model.mcs.sche.service.StScheduleRecordService;
+import com.iailab.module.model.mcs.sche.service.StScheduleSchemeService;
 import com.iailab.module.model.mdk.predict.PredictModuleHandler;
 import com.iailab.module.model.mdk.predict.PredictResultHandler;
 import com.iailab.module.model.mdk.schedule.ScheduleModelHandler;
@@ -24,14 +21,8 @@
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
-
-import static com.iailab.framework.common.pojo.CommonResult.error;
-import static com.iailab.framework.common.pojo.CommonResult.success;
 
 /**
  * @author PanZhibao
@@ -53,16 +44,16 @@
     private PredictModuleHandler predictModuleHandler;
 
     @Autowired
-    private ItemEntityFactory itemEntityFactory;
-
-    @Autowired
-    private PredictItemFactory predictItemFactory;
-
-    @Autowired
     private PredictResultHandler predictResultHandler;
 
     @Autowired
     private ScheduleModelHandler scheduleModelHandler;
+
+    @Autowired
+    private StScheduleRecordService stScheduleRecordService;
+
+    @Autowired
+    private StScheduleSchemeService stScheduleSchemeService;
 
     /**
      * 按模块预测
@@ -73,6 +64,9 @@
     @Override
     public MdkPredictModuleRespDTO predictModule(MdkPredictReqDTO reqDTO) {
         MdkPredictModuleRespDTO resp = new MdkPredictModuleRespDTO();
+        resp.setPredictTime(reqDTO.getPredictTime());
+        resp.setModuleType(reqDTO.getModuleType());
+
         Map<String, MdkPredictItemRespDTO> predictItemRespMap = new HashMap<>();
         try {
             if (reqDTO.getPredictTime() == null) {
@@ -81,6 +75,11 @@
             if (reqDTO.getModuleType() == null) {
                 throw new Exception("ModuleType不能为空");
             }
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(reqDTO.getPredictTime());
+            calendar.set(Calendar.MILLISECOND, 0);
+            calendar.set(Calendar.SECOND, 0);
+            reqDTO.setPredictTime(calendar.getTime());
             log.info("预测参数:" + JSON.toJSONString(reqDTO));
             MdkPredictModuleRespDTO result = new MdkPredictModuleRespDTO();
             result.setPredictTime(reqDTO.getPredictTime());
@@ -93,17 +92,38 @@
                     intervalTime = (int) (reqDTO.getPredictTime().getTime() - module.getPredicttime().getTime()) / (1000 * 60);
                 }
                 List<ItemVO> predictItemList = mmPredictItemService.getByModuleId(module.getId());
-                Map<String, PredictResultVO> predictResultMap = predictModuleHandler.predict(predictItemList, reqDTO.getPredictTime(), intervalTime);
+                Map<String, PredictResultVO> predictResultMap = new HashMap<>(predictItemList.size());
+                // 分组,先运行normal预测项,再将结果传递给merge预测项
+                List<ItemVO> normalItems = predictItemList.stream().filter(e -> e.getItemType().equals("NormalItem")).collect(Collectors.toList());
+                if (!CollectionUtils.isEmpty(normalItems)) {
+                    predictModuleHandler.predict(normalItems, reqDTO.getPredictTime(), intervalTime, predictResultMap);
+                    List<ItemVO> mergeItems = predictItemList.stream().filter(e -> e.getItemType().equals("MergeItem")).collect(Collectors.toList());
+                    if (!CollectionUtils.isEmpty(mergeItems)) {
+                        predictModuleHandler.predict(mergeItems, reqDTO.getPredictTime(), intervalTime, predictResultMap);
+                    }
+                }
+                // 更新Module时间
+                dmModuleService.updatePredictTime(module.getId(), reqDTO.getPredictTime());
+                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);
+                    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);
                 }
             }
@@ -125,26 +145,31 @@
     @Override
     public MdkPredictItemRespDTO predictItem(MdkPredictReqDTO reqDTO) {
         MdkPredictItemRespDTO resp = new MdkPredictItemRespDTO();
-
         try {
-            log.info("预测计算开始: " + System.currentTimeMillis());
-            List<MdkPredictDataDTO> predictData = new ArrayList<>();
-            ItemVO predictItem = itemEntityFactory.getItemByItemNo(reqDTO.getItemNo());
-            PredictItemHandler 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);
-                }
+
+            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;
@@ -176,8 +201,10 @@
         resp.setScheduleTime(reqDTO.getScheduleTime());
         try {
             log.info("调度计算开始: " + System.currentTimeMillis());
-            ScheduleResultVO scheduleResult = scheduleModelHandler.doSchedule(reqDTO.getModelCode(), reqDTO.getScheduleTime());
+            ScheduleResultVO scheduleResult = scheduleModelHandler.doSchedule(reqDTO.getScheduleCode(), reqDTO.getScheduleTime());
             resp.setResult(scheduleResult.getResult());
+            stScheduleRecordService.create(scheduleResult);
+            stScheduleSchemeService.updateTime(scheduleResult.getSchemeId(), scheduleResult.getScheduleTime());
             log.info("预测计算结束: " + System.currentTimeMillis());
         } catch (Exception ex) {
             log.info("调度计算异常: " + System.currentTimeMillis());

--
Gitblit v1.9.3