From 5e0640513226d9d9f2d766c075f79832c9d290ba Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 09 九月 2026 13:45:44 +0800
Subject: [PATCH] feat(bi): 新增BI决策支持KPI历史快照与预测功能

---
 yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/controller/admin/decision/DecisionForecastController.java |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/controller/admin/decision/DecisionForecastController.java b/yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/controller/admin/decision/DecisionForecastController.java
index 2f003bb..580ba22 100644
--- a/yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/controller/admin/decision/DecisionForecastController.java
+++ b/yudao-module-bi/src/main/java/cn/iocoder/yudao/module/bi/controller/admin/decision/DecisionForecastController.java
@@ -48,13 +48,32 @@
     }
 
     @PostMapping("/generate")
-    @Operation(summary = "鐢熸垚棰勬祴锛堝崰浣嶏級")
+    @Operation(summary = "鐢熸垚棰勬祴锛堟敮鎸佹寚瀹氭ā鍨嬶級")
     @PreAuthorize("@ss.hasPermission('bi:decision:kpi:query')")
-    public CommonResult<Boolean> generateForecast(@RequestParam("forecastCode") String forecastCode) {
-        forecastService.generateForecast(forecastCode, LocalDateTime.now());
+    public CommonResult<Boolean> generateForecast(@RequestParam("forecastCode") String forecastCode,
+                                                  @RequestParam(value = "model", required = false) String model,
+                                                  @RequestParam(value = "window", required = false, defaultValue = "12") Integer window,
+                                                  @RequestParam(value = "period", required = false, defaultValue = "7") Integer period) {
+        if (model == null || model.isBlank()) {
+            forecastService.generateForecast(forecastCode, LocalDateTime.now());
+        } else {
+            forecastService.generateForecast(forecastCode, model, window, period, LocalDateTime.now());
+        }
         return success(true);
     }
 
+    @PostMapping("/generate-from-kpi")
+    @Operation(summary = "鍩轰簬KPI鍘嗗彶蹇収鐢熸垚棰勬祴锛堣礋鑽�/浜ч噺/閲囪喘/鍥炴锛�")
+    @PreAuthorize("@ss.hasPermission('bi:decision:kpi:query')")
+    public CommonResult<Integer> generateKpiForecast(@RequestParam("kpiCode") String kpiCode,
+                                                     @RequestParam(value = "model", required = false) String model,
+                                                     @RequestParam(value = "window", required = false, defaultValue = "12") Integer window,
+                                                     @RequestParam(value = "period", required = false, defaultValue = "7") Integer period,
+                                                     @RequestParam(value = "periods", required = false, defaultValue = "30") Integer periods,
+                                                     @RequestParam(value = "intervalMinutes", required = false, defaultValue = "360") Integer intervalMinutes) {
+        return success(forecastService.generateKpiForecast(kpiCode, model, window, period, periods, intervalMinutes));
+    }
+
     @PostMapping("/generate-work-order")
     @Operation(summary = "璐熻嵎棰勬祴鑱斿姩鍒涘缓鐢熶骇宸ュ崟")
     @PreAuthorize("@ss.hasPermission('bi:decision-forecast:generate-work-order')")

--
Gitblit v1.9.3