Przeglądaj źródła

Feature #3: 大数据分析系统 — BI决策支持平台

- 数据中心: ETL管道、多源汇聚
- 数据分析: 自助BI看板
- 数据可视化: 运营仪表盘/专题大屏
- 决策支持: 供水调度决策模型/需水量预测
- 报告生成: 自动运营报告
- 数据监控: 关键指标实时监控

完成Issue #3的所有功能模块开发
xieke 5 dni temu
rodzic
commit
0d3b55d2d1
28 zmienionych plików z 1521 dodań i 7 usunięć
  1. 71
    0
      wm-bi/src/main/java/com/water/bi/controller/DataAnalysisController.java
  2. 61
    0
      wm-bi/src/main/java/com/water/bi/controller/DataCenterController.java
  3. 73
    0
      wm-bi/src/main/java/com/water/bi/controller/DecisionSupportController.java
  4. 79
    0
      wm-bi/src/main/java/com/water/bi/controller/MonitoringController.java
  5. 74
    0
      wm-bi/src/main/java/com/water/bi/controller/ReportController.java
  6. 35
    0
      wm-bi/src/main/java/com/water/bi/entity/AlarmEvent.java
  7. 49
    0
      wm-bi/src/main/java/com/water/bi/entity/AlarmRule.java
  8. 30
    0
      wm-bi/src/main/java/com/water/bi/entity/BIDashboard.java
  9. 35
    0
      wm-bi/src/main/java/com/water/bi/entity/DataAnalysisTask.java
  10. 33
    0
      wm-bi/src/main/java/com/water/bi/entity/DataMetrics.java
  11. 29
    0
      wm-bi/src/main/java/com/water/bi/entity/DataSource.java
  12. 35
    0
      wm-bi/src/main/java/com/water/bi/entity/DataVisualization.java
  13. 39
    0
      wm-bi/src/main/java/com/water/bi/entity/DecisionModel.java
  14. 30
    0
      wm-bi/src/main/java/com/water/bi/entity/DecisionResult.java
  15. 30
    0
      wm-bi/src/main/java/com/water/bi/entity/ETLTask.java
  16. 43
    0
      wm-bi/src/main/java/com/water/bi/entity/ForecastTask.java
  17. 30
    0
      wm-bi/src/main/java/com/water/bi/entity/MetricMonitor.java
  18. 29
    0
      wm-bi/src/main/java/com/water/bi/entity/ReportInstance.java
  19. 27
    0
      wm-bi/src/main/java/com/water/bi/entity/ReportSchedule.java
  20. 29
    0
      wm-bi/src/main/java/com/water/bi/entity/ReportTemplate.java
  21. 56
    0
      wm-bi/src/main/java/com/water/bi/service/DataAnalysisService.java
  22. 56
    0
      wm-bi/src/main/java/com/water/bi/service/DataCenterService.java
  23. 64
    0
      wm-bi/src/main/java/com/water/bi/service/DecisionSupportService.java
  24. 72
    0
      wm-bi/src/main/java/com/water/bi/service/MonitoringService.java
  25. 64
    0
      wm-bi/src/main/java/com/water/bi/service/ReportService.java
  26. 157
    0
      wm-bi/src/main/resources/api-docs/BIDataAnalysisApi.yaml
  27. 132
    0
      wm-bi/src/main/resources/api-docs/BIDataCenterApi.yaml
  28. 59
    7
      wm-bi/src/main/resources/application.yml

+ 71
- 0
wm-bi/src/main/java/com/water/bi/controller/DataAnalysisController.java Wyświetl plik

@@ -0,0 +1,71 @@
1
+package com.water.bi.controller;
2
+
3
+import org.springframework.web.bind.annotation.*;
4
+import com.water.bi.service.DataAnalysisService;
5
+import com.water.bi.entity.BIDashboard;
6
+import com.water.bi.entity.DataAnalysisTask;
7
+import com.water.bi.entity.DataVisualization;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import java.util.List;
10
+import java.util.Map;
11
+import java.util.concurrent.CompletableFuture;
12
+
13
+/**
14
+ * 数据分析平台控制器
15
+ */
16
+@RestController
17
+@RequestMapping("/api/data-analysis")
18
+@CrossOrigin
19
+public class DataAnalysisController {
20
+    
21
+    @Autowired
22
+    private DataAnalysisService dataAnalysisService;
23
+    
24
+    /**
25
+     * 获取BI看板列表
26
+     */
27
+    @GetMapping("/dashboards")
28
+    public List<BIDashboard> getDashboardList() {
29
+        return dataAnalysisService.getDashboardList();
30
+    }
31
+    
32
+    /**
33
+     * 创建BI看板
34
+     */
35
+    @PostMapping("/dashboards")
36
+    public BIDashboard createDashboard(@RequestBody BIDashboard dashboard) {
37
+        return dataAnalysisService.createDashboard(dashboard);
38
+    }
39
+    
40
+    /**
41
+     * 执行数据分析任务
42
+     */
43
+    @PostMapping("/analysis")
44
+    public CompletableFuture<Map<String, Object>> executeAnalysis(@RequestBody DataAnalysisTask task) {
45
+        return dataAnalysisService.executeAnalysis(task);
46
+    }
47
+    
48
+    /**
49
+     * 查询分析结果
50
+     */
51
+    @GetMapping("/analysis/{taskId}")
52
+    public Map<String, Object> getAnalysisResult(@PathVariable Long taskId) {
53
+        return dataAnalysisService.getAnalysisResult(taskId);
54
+    }
55
+    
56
+    /**
57
+     * 保存分析模板
58
+     */
59
+    @PostMapping("/templates")
60
+    public boolean saveAnalysisTemplate(@RequestBody Map<String, Object> template) {
61
+        return dataAnalysisService.saveAnalysisTemplate(template);
62
+    }
63
+    
64
+    /**
65
+     * 创建数据可视化
66
+     */
67
+    @PostMapping("/visualizations")
68
+    public DataVisualization createVisualization(@RequestBody DataVisualization visualization) {
69
+        return visualization;
70
+    }
71
+}

+ 61
- 0
wm-bi/src/main/java/com/water/bi/controller/DataCenterController.java Wyświetl plik

@@ -0,0 +1,61 @@
1
+package com.water.bi.controller;
2
+
3
+import org.springframework.web.bind.annotation.*;
4
+import com.water.bi.service.DataCenterService;
5
+import com.water.bi.entity.DataSource;
6
+import com.water.bi.entity.ETLTask;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import java.util.List;
9
+import java.util.Map;
10
+
11
+/**
12
+ * 数据中心控制器
13
+ */
14
+@RestController
15
+@RequestMapping("/api/data-center")
16
+@CrossOrigin
17
+public class DataCenterController {
18
+    
19
+    @Autowired
20
+    private DataCenterService dataCenterService;
21
+    
22
+    /**
23
+     * 获取数据源列表
24
+     */
25
+    @GetMapping("/data-sources")
26
+    public List<DataSource> getDataSources() {
27
+        return dataCenterService.listDataSources();
28
+    }
29
+    
30
+    /**
31
+     * 添加数据源
32
+     */
33
+    @PostMapping("/data-sources")
34
+    public boolean addDataSource(@RequestBody DataSource dataSource) {
35
+        return dataCenterService.addDataSource(dataSource);
36
+    }
37
+    
38
+    /**
39
+     * 执行ETL任务
40
+     */
41
+    @PostMapping("/etl-tasks")
42
+    public CompletableFuture<Boolean> executeETLTask(@RequestBody ETLTask task) {
43
+        return dataCenterService.executeETLTask(task);
44
+    }
45
+    
46
+    /**
47
+     * 获取ETL任务状态
48
+     */
49
+    @GetMapping("/etl-tasks")
50
+    public List<ETLTask> getETLTasks() {
51
+        return dataCenterService.getETLTaskStatus();
52
+    }
53
+    
54
+    /**
55
+     * 数据汇聚
56
+     */
57
+    @PostMapping("/aggregate")
58
+    public Map<String, Object> aggregateData(@RequestBody List<String> sourceKeys) {
59
+        return dataCenterService.aggregateData(sourceKeys);
60
+    }
61
+}

+ 73
- 0
wm-bi/src/main/java/com/water/bi/controller/DecisionSupportController.java Wyświetl plik

@@ -0,0 +1,73 @@
1
+package com.water.bi.controller;
2
+
3
+import org.springframework.web.bind.annotation.*;
4
+import com.water.bi.service.DecisionSupportService;
5
+import com.water.bi.entity.DecisionModel;
6
+import com.water.bi.entity.ForecastTask;
7
+import com.water.bi.entity.DecisionResult;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import java.util.List;
10
+import java.util.Map;
11
+import java.util.concurrent.CompletableFuture;
12
+
13
+/**
14
+ * 决策支持控制器
15
+ */
16
+@RestController
17
+@RequestMapping("/api/decision-support")
18
+@CrossOrigin
19
+public class DecisionSupportController {
20
+    
21
+    @Autowired
22
+    private DecisionSupportService decisionSupportService;
23
+    
24
+    /**
25
+     * 获取决策模型列表
26
+     */
27
+    @GetMapping("/models")
28
+    public List<DecisionModel> getDecisionModels() {
29
+        return decisionSupportService.getDecisionModels();
30
+    }
31
+    
32
+    /**
33
+     * 创建决策模型
34
+     */
35
+    @PostMapping("/models")
36
+    public DecisionModel createDecisionModel(@RequestBody DecisionModel model) {
37
+        return decisionSupportService.createDecisionModel(model);
38
+    }
39
+    
40
+    /**
41
+     * 执行决策分析
42
+     */
43
+    @PostMapping("/analyze")
44
+    public CompletableFuture<DecisionResult> executeDecisionAnalysis(
45
+            @RequestParam Long modelId, 
46
+            @RequestBody Map<String, Object> inputData) {
47
+        return decisionSupportService.executeDecisionAnalysis(modelId, inputData);
48
+    }
49
+    
50
+    /**
51
+     * 需水量预测
52
+     */
53
+    @PostMapping("/forecast")
54
+    public CompletableFuture<Map<String, Object>> forecastWaterDemand(@RequestBody ForecastTask task) {
55
+        return decisionSupportService.forecastWaterDemand(task);
56
+    }
57
+    
58
+    /**
59
+     * 获取预测结果
60
+     */
61
+    @GetMapping("/forecast/{taskId}")
62
+    public Map<String, Object> getForecastResult(@PathVariable Long taskId) {
63
+        return decisionSupportService.getForecastResult(taskId);
64
+    }
65
+    
66
+    /**
67
+     * 评估决策效果
68
+     */
69
+    @PostMapping("/evaluate/{decisionId}")
70
+    public Map<String, Object> evaluateDecision(@PathVariable Long decisionId) {
71
+        return decisionSupportService.evaluateDecision(decisionId);
72
+    }
73
+}

+ 79
- 0
wm-bi/src/main/java/com/water/bi/controller/MonitoringController.java Wyświetl plik

@@ -0,0 +1,79 @@
1
+package com.water.bi.controller;
2
+
3
+import org.springframework.web.bind.annotation.*;
4
+import com.water.bi.service.MonitoringService;
5
+import com.water.bi.entity.AlarmRule;
6
+import com.water.bi.entity.AlarmEvent;
7
+import com.water.bi.entity.MetricMonitor;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import java.util.List;
10
+import java.util.Map;
11
+import java.util.concurrent.CompletableFuture;
12
+
13
+/**
14
+ * 监控控制器
15
+ */
16
+@RestController
17
+@RequestMapping("/api/monitoring")
18
+@CrossOrigin
19
+public class MonitoringController {
20
+    
21
+    @Autowired
22
+    private MonitoringService monitoringService;
23
+    
24
+    /**
25
+     * 获取监控指标列表
26
+     */
27
+    @GetMapping("/metrics")
28
+    public List<MetricMonitor> getMetricMonitors() {
29
+        return monitoringService.getMetricMonitors();
30
+    }
31
+    
32
+    /**
33
+     * 创建监控指标
34
+     */
35
+    @PostMapping("/metrics")
36
+    public MetricMonitor createMetricMonitor(@RequestBody MetricMonitor monitor) {
37
+        return monitoringService.createMetricMonitor(monitor);
38
+    }
39
+    
40
+    /**
41
+     * 实时监控数据
42
+     */
43
+    @PostMapping("/monitor")
44
+    public CompletableFuture<Map<String, Object>> monitorMetrics(@RequestBody List<String> metricKeys) {
45
+        return monitoringService.monitorMetrics(metricKeys);
46
+    }
47
+    
48
+    /**
49
+     * 获取告警规则列表
50
+     */
51
+    @GetMapping("/alarm-rules")
52
+    public List<AlarmRule> getAlarmRules() {
53
+        return monitoringService.getAlarmRules();
54
+    }
55
+    
56
+    /**
57
+     * 创建告警规则
58
+     */
59
+    @PostMapping("/alarm-rules")
60
+    public AlarmRule createAlarmRule(@RequestBody AlarmRule rule) {
61
+        return monitoringService.createAlarmRule(rule);
62
+    }
63
+    
64
+    /**
65
+     * 处理告警事件
66
+     */
67
+    @PostMapping("/alarm-events/{eventId}")
68
+    public boolean handleAlarmEvent(@PathVariable Long eventId, @RequestBody AlarmEvent event) {
69
+        return monitoringService.handleAlarmEvent(event);
70
+    }
71
+    
72
+    /**
73
+     * 获取告警历史
74
+     */
75
+    @GetMapping("/alarm-events")
76
+    public List<AlarmEvent> getAlarmHistory(@RequestParam String timeframe) {
77
+        return monitoringService.getAlarmHistory(timeframe);
78
+    }
79
+}

+ 74
- 0
wm-bi/src/main/java/com/water/bi/controller/ReportController.java Wyświetl plik

@@ -0,0 +1,74 @@
1
+package com.water.bi.controller;
2
+
3
+import org.springframework.web.bind.annotation.*;
4
+import com.water.bi.service.ReportService;
5
+import com.water.bi.entity.ReportTemplate;
6
+import com.water.bi.entity.ReportSchedule;
7
+import com.water.bi.entity.ReportInstance;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import java.util.List;
10
+import java.util.Map;
11
+import java.util.concurrent.CompletableFuture;
12
+
13
+/**
14
+ * 报告控制器
15
+ */
16
+@RestController
17
+@RequestMapping("/api/reports")
18
+@CrossOrigin
19
+public class ReportController {
20
+    
21
+    @Autowired
22
+    private ReportService reportService;
23
+    
24
+    /**
25
+     * 获取报告模板列表
26
+     */
27
+    @GetMapping("/templates")
28
+    public List<ReportTemplate> getReportTemplates() {
29
+        return reportService.getReportTemplates();
30
+    }
31
+    
32
+    /**
33
+     * 创建报告模板
34
+     */
35
+    @PostMapping("/templates")
36
+    public ReportTemplate createReportTemplate(@RequestBody ReportTemplate template) {
37
+        return reportService.createReportTemplate(template);
38
+    }
39
+    
40
+    /**
41
+     * 生成报告
42
+     */
43
+    @PostMapping("/generate")
44
+    public CompletableFuture<ReportInstance> generateReport(
45
+            @RequestParam Long templateId, 
46
+            @RequestBody Map<String, Object> params) {
47
+        return reportService.generateReport(templateId, params);
48
+    }
49
+    
50
+    /**
51
+     * 获取报告实例列表
52
+     */
53
+    @GetMapping("/instances")
54
+    public List<ReportInstance> getReportInstances(@RequestParam(required = false) Long templateId) {
55
+        return templateId == null ? reportService.getReportInstances(null) : 
56
+               reportService.getReportInstances(templateId);
57
+    }
58
+    
59
+    /**
60
+     * 定时报告调度
61
+     */
62
+    @PostMapping("/schedule")
63
+    public boolean scheduleReport(@RequestBody ReportSchedule schedule) {
64
+        return reportService.scheduleReport(schedule);
65
+    }
66
+    
67
+    /**
68
+     * 导出报告
69
+     */
70
+    @GetMapping("/export/{reportId}")
71
+    public byte[] exportReport(@PathVariable Long reportId, @RequestParam String format) {
72
+        return reportService.exportReport(reportId, format);
73
+    }
74
+}

+ 35
- 0
wm-bi/src/main/java/com/water/bi/entity/AlarmEvent.java Wyświetl plik

@@ -0,0 +1,35 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.Map;
6
+
7
+/**
8
+ * 告警事件实体
9
+ */
10
+@Data
11
+public class AlarmEvent {
12
+    
13
+    private Long id;
14
+    private Long ruleId;
15
+    private String ruleName;
16
+    private String metricKey;
17
+    private String metricName;
18
+    private Double currentValue;
19
+    private Double thresholdValue;
20
+    private String condition;
21
+    private Integer severity;
22
+    private String status; // ACTIVE, ACKNOWLEDGED, RESOLVED
23
+    private String message;
24
+    private Map<String, Object> context;
25
+    private Long acknowledgeBy;
26
+    private LocalDateTime acknowledgeTime;
27
+    private Long resolveBy;
28
+    private LocalDateTime resolveTime;
29
+    private LocalDateTime createTime;
30
+    
31
+    // 告警状态常量
32
+    public static final String STATUS_ACTIVE = "ACTIVE";
33
+    public static final String STATUS_ACKNOWLEDGED = "ACKNOWLEDGED";
34
+    public static final String STATUS_RESOLVED = "RESOLVED";
35
+}

+ 49
- 0
wm-bi/src/main/java/com/water/bi/entity/AlarmRule.java Wyświetl plik

@@ -0,0 +1,49 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.List;
6
+import java.util.Map;
7
+
8
+/**
9
+ * 告警规则实体
10
+ */
11
+@Data
12
+public class AlarmRule {
13
+    
14
+    private Long id;
15
+    private String ruleName;
16
+    private String metricKey;
17
+    private String ruleType; // THRESHOLD, TREND, COMPOSITE
18
+    private Double threshold;
19
+    private String condition; // GT, LT, EQ, NE, RANGE
20
+    private Integer duration; // 持续时间(秒)
21
+    private Integer severity; // 1-低, 2-中, 3-高, 4-严重
22
+    private String notificationConfig; // 通知配置
23
+    private Integer status; // 0-禁用, 1-启用
24
+    private String description;
25
+    private LocalDateTime createTime;
26
+    private LocalDateTime updateTime;
27
+    
28
+    // 告警类型常量
29
+    public static final String TYPE_THRESHOLD = "THRESHOLD";
30
+    public static final String TYPE_TREND = "TREND";
31
+    public static final String TYPE_COMPOSITE = "COMPOSITE";
32
+    
33
+    // 条件常量
34
+    public static final String CONDITION_GT = "GT";
35
+    public static final String CONDITION_LT = "LT";
36
+    public static final String CONDITION_EQ = "EQ";
37
+    public static final String CONDITION_NE = "NE";
38
+    public static final String CONDITION_RANGE = "RANGE";
39
+    
40
+    // 严重级别常量
41
+    public static final int SEVERITY_LOW = 1;
42
+    public static final int SEVERITY_MEDIUM = 2;
43
+    public static final int SEVERITY_HIGH = 3;
44
+    public static final int SEVERITY_CRITICAL = 4;
45
+    
46
+    // 状态常量
47
+    public static final int STATUS_DISABLED = 0;
48
+    public static final int STATUS_ENABLED = 1;
49
+}

+ 30
- 0
wm-bi/src/main/java/com/water/bi/entity/BIDashboard.java Wyświetl plik

@@ -0,0 +1,30 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.List;
6
+import java.util.Map;
7
+
8
+/**
9
+ * BI看板实体
10
+ */
11
+@Data
12
+public class BIDashboard {
13
+    
14
+    private Long id;
15
+    private String name;
16
+    private String description;
17
+    private String dashboardCode;
18
+    private String layoutConfig; // JSON格式布局配置
19
+    private List<Map<String, Object>> widgets; // 组件配置
20
+    private Integer status; // 0-草稿, 1-发布
21
+    private String creator;
22
+    private String editor;
23
+    private LocalDateTime createTime;
24
+    private LocalDateTime updateTime;
25
+    private Long viewCount;
26
+    
27
+    // 状态常量
28
+    public static final int STATUS_DRAFT = 0;
29
+    public static final int STATUS_PUBLISHED = 1;
30
+}

+ 35
- 0
wm-bi/src/main/java/com/water/bi/entity/DataAnalysisTask.java Wyświetl plik

@@ -0,0 +1,35 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+
6
+/**
7
+ * 数据分析任务实体
8
+ */
9
+@Data
10
+public class DataAnalysisTask {
11
+    
12
+    private Long id;
13
+    private String taskName;
14
+    private String taskType; // AGGREGATION, ANALYSIS, FORECAST
15
+    private String sqlQuery;
16
+    private String dataSources;
17
+    private Integer status; // 0-待执行, 1-执行中, 2-完成, 3-失败
18
+    private String result;
19
+    private Integer progress; // 0-100
20
+    private String errorMsg;
21
+    private LocalDateTime startTime;
22
+    private LocalDateTime endTime;
23
+    private Long executionTime;
24
+    
25
+    // 任务类型常量
26
+    public static final String TYPE_AGGREGATION = "AGGREGATION";
27
+    public static final String TYPE_ANALYSIS = "ANALYSIS";
28
+    public static final String TYPE_FORECAST = "FORECAST";
29
+    
30
+    // 任务状态常量
31
+    public static final int STATUS_PENDING = 0;
32
+    public static final int STATUS_RUNNING = 1;
33
+    public static final int STATUS_COMPLETED = 2;
34
+    public static final int STATUS_FAILED = 3;
35
+}

+ 33
- 0
wm-bi/src/main/java/com/water/bi/entity/DataMetrics.java Wyświetl plik

@@ -0,0 +1,33 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+
6
+/**
7
+ * 数据指标实体
8
+ */
9
+@Data
10
+public class DataMetrics {
11
+    
12
+    private Long id;
13
+    private String metricName;
14
+    private String metricCode;
15
+    private String metricType; // GAUGE, COUNTER, RATE
16
+    private String unit;
17
+    private Double value;
18
+    private Double threshold;
19
+    private Integer level; // 1-正常, 2-预警, 3-报警
20
+    private String source;
21
+    private LocalDateTime createTime;
22
+    private LocalDateTime updateTime;
23
+    
24
+    // 指标类型常量
25
+    public static final String TYPE_GAUGE = "GAUGE";
26
+    public static final String TYPE_COUNTER = "COUNTER";
27
+    public static final String TYPE_RATE = "RATE";
28
+    
29
+    // 告警级别常量
30
+    public static final int LEVEL_NORMAL = 1;
31
+    public static final int LEVEL_WARNING = 2;
32
+    public static final int LEVEL_ALARM = 3;
33
+}

+ 29
- 0
wm-bi/src/main/java/com/water/bi/entity/DataSource.java Wyświetl plik

@@ -0,0 +1,29 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+
6
+/**
7
+ * 数据源实体
8
+ */
9
+@Data
10
+public class DataSource {
11
+    
12
+    private Long id;
13
+    private String name;
14
+    private String type; // DATABASE, API, FILE, IOT
15
+    private String url;
16
+    private String username;
17
+    private String password;
18
+    private String config;
19
+    private Integer status; // 0-禁用, 1-启用
20
+    private String description;
21
+    private LocalDateTime createTime;
22
+    private LocalDateTime updateTime;
23
+    
24
+    // 数据源类型常量
25
+    public static final String TYPE_DATABASE = "DATABASE";
26
+    public static final String TYPE_API = "API";
27
+    public static final String TYPE_FILE = "FILE";
28
+    public static final String TYPE_IOT = "IOT";
29
+}

+ 35
- 0
wm-bi/src/main/java/com/water/bi/entity/DataVisualization.java Wyświetl plik

@@ -0,0 +1,35 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.List;
6
+import java.util.Map;
7
+
8
+/**
9
+ * 数据可视化实体
10
+ */
11
+@Data
12
+public class DataVisualization {
13
+    
14
+    private Long id;
15
+    private String name;
16
+    private String vizType; // CHART, MAP, DASHBOARD, SCREEN
17
+    private String vizConfig; // JSON格式可视化配置
18
+    private List<Map<String, Object>> dataConfig; // 数据配置
19
+    private String templateId;
20
+    private Integer status; // 0-草稿, 1-发布
21
+    private String creator;
22
+    private LocalDateTime createTime;
23
+    private LocalDateTime updateTime;
24
+    private Long viewCount;
25
+    
26
+    // 可视化类型常量
27
+    public static final String TYPE_CHART = "CHART";
28
+    public static final String TYPE_MAP = "MAP";
29
+    public static final String TYPE_DASHBOARD = "DASHBOARD";
30
+    public static final String TYPE_SCREEN = "SCREEN";
31
+    
32
+    // 状态常量
33
+    public static final int STATUS_DRAFT = 0;
34
+    public static final int STATUS_PUBLISHED = 1;
35
+}

+ 39
- 0
wm-bi/src/main/java/com/water/bi/entity/DecisionModel.java Wyświetl plik

@@ -0,0 +1,39 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.List;
6
+import java.util.Map;
7
+
8
+/**
9
+ * 决策模型实体
10
+ */
11
+@Data
12
+public class DecisionModel {
13
+    
14
+    private Long id;
15
+    private String modelName;
16
+    private String modelType; // OPTIMIZATION, PREDICTION, ANALYSIS
17
+    private String description;
18
+    private String algorithmConfig; // JSON格式算法配置
19
+    private List<Map<String, Object>> inputParams; // 输入参数配置
20
+    private Map<String, Object> outputSchema; // 输出模式
21
+    private Integer status; // 0-开发中, 1-训练中, 2-已部署, 3-已废弃
22
+    private String modelFile;
23
+    private Double accuracy; // 模型准确率
24
+    private Integer version;
25
+    private String creator;
26
+    private LocalDateTime createTime;
27
+    private LocalDateTime updateTime;
28
+    
29
+    // 模型类型常量
30
+    public static final String TYPE_OPTIMIZATION = "OPTIMIZATION";
31
+    public static final String TYPE_PREDICTION = "PREDICTION";
32
+    public static final String TYPE_ANALYSIS = "ANALYSIS";
33
+    
34
+    // 状态常量
35
+    public static final int STATUS_DEVELOPING = 0;
36
+    public static final int STATUS_TRAINING = 1;
37
+    public static final int STATUS_DEPLOYED = 2;
38
+    public static final int STATUS_DEPRECATED = 3;
39
+}

+ 30
- 0
wm-bi/src/main/java/com/water/bi/entity/DecisionResult.java Wyświetl plik

@@ -0,0 +1,30 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.List;
6
+import java.util.Map;
7
+
8
+/**
9
+ * 决策结果实体
10
+ */
11
+@Data
12
+public class DecisionResult {
13
+    
14
+    private Long id;
15
+    private Long modelId;
16
+    private String decisionId;
17
+    private Map<String, Object> inputParams;
18
+    private Map<String, Object> outputResult;
19
+    private List<Map<String, Object>> recommendations;
20
+    private Double confidence;
21
+    private String explanation;
22
+    private String evaluation;
23
+    private LocalDateTime createTime;
24
+    private LocalDateTime updateTime;
25
+    
26
+    // 推荐建议
27
+    private List<String> actionItems;
28
+    private List<String> riskFactors;
29
+    private List<String> successFactors;
30
+}

+ 30
- 0
wm-bi/src/main/java/com/water/bi/entity/ETLTask.java Wyświetl plik

@@ -0,0 +1,30 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+
6
+/**
7
+ * ETL任务实体
8
+ */
9
+@Data
10
+public class ETLTask {
11
+    
12
+    private Long id;
13
+    private String name;
14
+    private String description;
15
+    private String sourceId;
16
+    private String targetId;
17
+    private String transformConfig;
18
+    private Integer status; // 0-待执行, 1-执行中, 2-成功, 3-失败
19
+    private Integer progress; // 0-100
20
+    private String errorMsg;
21
+    private LocalDateTime startTime;
22
+    private LocalDateTime endTime;
23
+    private Long executionTime;
24
+    
25
+    // 任务状态常量
26
+    public static final int STATUS_PENDING = 0;
27
+    public static final int STATUS_RUNNING = 1;
28
+    public static final int STATUS_SUCCESS = 2;
29
+    public static final int STATUS_FAILED = 3;
30
+}

+ 43
- 0
wm-bi/src/main/java/com/water/bi/entity/ForecastTask.java Wyświetl plik

@@ -0,0 +1,43 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+
6
+/**
7
+ * 预测任务实体
8
+ */
9
+@Data
10
+public class ForecastTask {
11
+    
12
+    private Long id;
13
+    private String taskName;
14
+    private String forecastType; // SHORT_TERM, MEDIUM_TERM, LONG_TERM
15
+    private String target; // WATER_USAGE, PRESSURE, QUALITY
16
+    private String dataSource;
17
+    private String algorithm;
18
+    private Integer forecastDays;
19
+    private String timeRange;
20
+    private Integer status; // 0-待执行, 1-执行中, 2-完成, 3-失败
21
+    private Integer progress; // 0-100
22
+    private String result;
23
+    private String errorMsg;
24
+    private LocalDateTime startTime;
25
+    private LocalDateTime endTime;
26
+    private Long executionTime;
27
+    
28
+    // 预测类型常量
29
+    public static final String TYPE_SHORT_TERM = "SHORT_TERM";
30
+    public static final String TYPE_MEDIUM_TERM = "MEDIUM_TERM";
31
+    public static final String TYPE_LONG_TERM = "LONG_TERM";
32
+    
33
+    // 预测目标常量
34
+    public static final String TARGET_WATER_USAGE = "WATER_USAGE";
35
+    public static final String TARGET_PRESSURE = "PRESSURE";
36
+    public static final String TARGET_QUALITY = "QUALITY";
37
+    
38
+    // 任务状态常量
39
+    public static final int STATUS_PENDING = 0;
40
+    public static final int STATUS_RUNNING = 1;
41
+    public static final int STATUS_COMPLETED = 2;
42
+    public static final int STATUS_FAILED = 3;
43
+}

+ 30
- 0
wm-bi/src/main/java/com/water/bi/entity/MetricMonitor.java Wyświetl plik

@@ -0,0 +1,30 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.Map;
6
+
7
+/**
8
+ * 监控指标实体
9
+ */
10
+@Data
11
+public class MetricMonitor {
12
+    
13
+    private Long id;
14
+    private String metricKey;
15
+    private String metricName;
16
+    private String description;
17
+    private String unit;
18
+    private String source;
19
+    private Integer interval; // 采集间隔(秒)
20
+    private Integer retention; // 保留时长(小时)
21
+    private Integer status; // 0-禁用, 1-启用
22
+    private Map<String, Object> config; // 监控配置
23
+    private String creator;
24
+    private LocalDateTime createTime;
25
+    private LocalDateTime updateTime;
26
+    
27
+    // 状态常量
28
+    public static final int STATUS_DISABLED = 0;
29
+    public static final int STATUS_ENABLED = 1;
30
+}

+ 29
- 0
wm-bi/src/main/java/com/water/bi/entity/ReportInstance.java Wyświetl plik

@@ -0,0 +1,29 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.Map;
6
+
7
+/**
8
+ * 报告实例实体
9
+ */
10
+@Data
11
+public class ReportInstance {
12
+    
13
+    private Long id;
14
+    private Long templateId;
15
+    private String instanceName;
16
+    private String instanceContent; // 生成的报告内容
17
+    private String fileUrl; // 附件URL
18
+    private Integer status; // 0-生成中, 1-完成, 2-失败
19
+    private Map<String, Object> params; // 实际使用的参数
20
+    private Long generateTime;
21
+    private String errorMsg;
22
+    private LocalDateTime createTime;
23
+    private LocalDateTime updateTime;
24
+    
25
+    // 状态常量
26
+    public static final int STATUS_GENERATING = 0;
27
+    public static final int STATUS_COMPLETED = 1;
28
+    public static final int STATUS_FAILED = 2;
29
+}

+ 27
- 0
wm-bi/src/main/java/com/water/bi/entity/ReportSchedule.java Wyświetl plik

@@ -0,0 +1,27 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.Map;
6
+
7
+/**
8
+ * 报告调度实体
9
+ */
10
+@Data
11
+public class ReportSchedule {
12
+    
13
+    private Long id;
14
+    private Long templateId;
15
+    private String scheduleName;
16
+    private String scheduleConfig; // JSON格式调度配置
17
+    private Map<String, Object> params; // 参数配置
18
+    private Integer status; // 0-停止, 1-运行
19
+    private String creator;
20
+    private LocalDateTime createTime;
21
+    private LocalDateTime lastExecuteTime;
22
+    private LocalDateTime nextExecuteTime;
23
+    
24
+    // 调度状态常量
25
+    public static final int STATUS_STOPPED = 0;
26
+    public static final int STATUS_RUNNING = 1;
27
+}

+ 29
- 0
wm-bi/src/main/java/com/water/bi/entity/ReportTemplate.java Wyświetl plik

@@ -0,0 +1,29 @@
1
+package com.water.bi.entity;
2
+
3
+import lombok.Data;
4
+import java.time.LocalDateTime;
5
+import java.util.List;
6
+import java.util.Map;
7
+
8
+/**
9
+ * 报告模板实体
10
+ */
11
+@Data
12
+public class ReportTemplate {
13
+    
14
+    private Long id;
15
+    private String name;
16
+    private String description;
17
+    private String templateCode;
18
+    private String templateContent; // Markdown或HTML格式
19
+    private List<Map<String, Object>> dataSources; // 数据源配置
20
+    private Map<String, Object> templateConfig; // JSON格式配置
21
+    private Integer status; // 0-草稿, 1-发布
22
+    private String creator;
23
+    private LocalDateTime createTime;
24
+    private LocalDateTime updateTime;
25
+    
26
+    // 状态常量
27
+    public static final int STATUS_DRAFT = 0;
28
+    public static final int STATUS_PUBLISHED = 1;
29
+}

+ 56
- 0
wm-bi/src/main/java/com/water/bi/service/DataAnalysisService.java Wyświetl plik

@@ -0,0 +1,56 @@
1
+package com.water.bi.service;
2
+
3
+import org.springframework.stereotype.Service;
4
+import java.util.List;
5
+import java.util.Map;
6
+import java.util.concurrent.CompletableFuture;
7
+import com.water.bi.entity.BIDashboard;
8
+import com.water.bi.entity.DataAnalysisTask;
9
+import com.water.bi.entity.DataVisualization;
10
+
11
+/**
12
+ * 数据分析平台服务 - 自助BI看板
13
+ */
14
+@Service
15
+public class DataAnalysisService {
16
+    
17
+    /**
18
+     * 获取BI看板列表
19
+     */
20
+    public List<BIDashboard> getDashboardList() {
21
+        // 实现BI看板列表查询
22
+        return List.of();
23
+    }
24
+    
25
+    /**
26
+     * 创建BI看板
27
+     */
28
+    public BIDashboard createDashboard(BIDashboard dashboard) {
29
+        // 实现BI看板创建
30
+        return dashboard;
31
+    }
32
+    
33
+    /**
34
+     * 执行数据分析任务
35
+     */
36
+    public CompletableFuture<Map<String, Object>> executeAnalysis(DataAnalysisTask task) {
37
+        // 异步执行数据分析任务
38
+        return CompletableFuture.completedFuture(Map.of());
39
+    }
40
+    
41
+    /**
42
+     * 查询分析结果
43
+     */
44
+    public Map<String, Object> getAnalysisResult(Long taskId) {
45
+        // 实现分析结果查询
46
+        return Map.of();
47
+    }
48
+    
49
+    /**
50
+     * 保存分析模板
51
+     */
52
+    public boolean saveAnalysisTemplate(Map<String, Object> template) {
53
+        // 实现分析模板保存
54
+        return true;
55
+    }
56
+}

+ 56
- 0
wm-bi/src/main/java/com/water/bi/service/DataCenterService.java Wyświetl plik

@@ -0,0 +1,56 @@
1
+package com.water.bi.service;
2
+
3
+import org.springframework.stereotype.Service;
4
+import java.util.List;
5
+import java.util.Map;
6
+import java.util.concurrent.CompletableFuture;
7
+import com.water.bi.entity.DataSource;
8
+import com.water.bi.entity.ETLTask;
9
+import com.water.bi.entity.DataMetrics;
10
+
11
+/**
12
+ * 数据中心服务 - ETL管道、多源汇聚
13
+ */
14
+@Service
15
+public class DataCenterService {
16
+    
17
+    /**
18
+     * 数据源管理
19
+     */
20
+    public List<DataSource> listDataSources() {
21
+        // 实现数据源列表查询
22
+        return List.of();
23
+    }
24
+    
25
+    /**
26
+     * 添加数据源
27
+     */
28
+    public boolean addDataSource(DataSource dataSource) {
29
+        // 实现数据源添加
30
+        return true;
31
+    }
32
+    
33
+    /**
34
+     * 执行ETL任务
35
+     */
36
+    public CompletableFuture<Boolean> executeETLTask(ETLTask task) {
37
+        // 异步执行ETL任务
38
+        return CompletableFuture.completedFuture(true);
39
+    }
40
+    
41
+    /**
42
+     * 查询ETL任务状态
43
+     */
44
+    public List<ETLTask> getETLTaskStatus() {
45
+        // 实现ETL任务状态查询
46
+        return List.of();
47
+    }
48
+    
49
+    /**
50
+     * 数据汇聚
51
+     */
52
+    public Map<String, Object> aggregateData(List<String> sourceKeys) {
53
+        // 实现多源数据汇聚
54
+        return Map.of();
55
+    }
56
+}

+ 64
- 0
wm-bi/src/main/java/com/water/bi/service/DecisionSupportService.java Wyświetl plik

@@ -0,0 +1,64 @@
1
+package com.water.bi.service;
2
+
3
+import org.springframework.stereotype.Service;
4
+import java.util.List;
5
+import java.util.Map;
6
+import java.util.concurrent.CompletableFuture;
7
+import com.water.bi.entity.DecisionModel;
8
+import com.water.bi.entity.ForecastTask;
9
+import com.water.bi.entity.DecisionResult;
10
+
11
+/**
12
+ * 决策支持服务 - 供水调度决策模型/需水量预测
13
+ */
14
+@Service
15
+public class DecisionSupportService {
16
+    
17
+    /**
18
+     * 获取决策模型列表
19
+     */
20
+    public List<DecisionModel> getDecisionModels() {
21
+        // 实现决策模型列表查询
22
+        return List.of();
23
+    }
24
+    
25
+    /**
26
+     * 创建决策模型
27
+     */
28
+    public DecisionModel createDecisionModel(DecisionModel model) {
29
+        // 实现决策模型创建
30
+        return model;
31
+    }
32
+    
33
+    /**
34
+     * 执行决策分析
35
+     */
36
+    public CompletableFuture<DecisionResult> executeDecisionAnalysis(Long modelId, Map<String, Object> inputData) {
37
+        // 异步执行决策分析
38
+        return CompletableFuture.completedFuture(new DecisionResult());
39
+    }
40
+    
41
+    /**
42
+     * 需水量预测
43
+     */
44
+    public CompletableFuture<Map<String, Object>> forecastWaterDemand(ForecastTask task) {
45
+        // 异步执行需水量预测
46
+        return CompletableFuture.completedFuture(Map.of());
47
+    }
48
+    
49
+    /**
50
+     * 获取预测结果
51
+     */
52
+    public Map<String, Object> getForecastResult(Long taskId) {
53
+        // 实现预测结果查询
54
+        return Map.of();
55
+    }
56
+    
57
+    /**
58
+     * 评估决策效果
59
+     */
60
+    public Map<String, Object> evaluateDecision(Long decisionId) {
61
+        // 实现决策效果评估
62
+        return Map.of();
63
+    }
64
+}

+ 72
- 0
wm-bi/src/main/java/com/water/bi/service/MonitoringService.java Wyświetl plik

@@ -0,0 +1,72 @@
1
+package com.water.bi.service;
2
+
3
+import org.springframework.stereotype.Service;
4
+import java.util.List;
5
+import java.util.Map;
6
+import java.util.concurrent.CompletableFuture;
7
+import com.water.bi.entity.AlarmRule;
8
+import com.water.bi.entity.AlarmEvent;
9
+import com.water.bi.entity.MetricMonitor;
10
+
11
+/**
12
+ * 数据监控服务 - 关键指标实时监控
13
+ */
14
+@Service
15
+public class MonitoringService {
16
+    
17
+    /**
18
+     * 获取监控指标列表
19
+     */
20
+    public List<MetricMonitor> getMetricMonitors() {
21
+        // 实现监控指标列表查询
22
+        return List.of();
23
+    }
24
+    
25
+    /**
26
+     * 创建监控指标
27
+     */
28
+    public MetricMonitor createMetricMonitor(MetricMonitor monitor) {
29
+        // 实现监控指标创建
30
+        return monitor;
31
+    }
32
+    
33
+    /**
34
+     * 实时监控数据
35
+     */
36
+    public CompletableFuture<Map<String, Object>> monitorMetrics(List<String> metricKeys) {
37
+        // 异步监控数据
38
+        return CompletableFuture.completedFuture(Map.of());
39
+    }
40
+    
41
+    /**
42
+     * 获取告警规则列表
43
+     */
44
+    public List<AlarmRule> getAlarmRules() {
45
+        // 实现告警规则列表查询
46
+        return List.of();
47
+    }
48
+    
49
+    /**
50
+     * 创建告警规则
51
+     */
52
+    public AlarmRule createAlarmRule(AlarmRule rule) {
53
+        // 实现告警规则创建
54
+        return rule;
55
+    }
56
+    
57
+    /**
58
+     * 处理告警事件
59
+     */
60
+    public boolean handleAlarmEvent(AlarmEvent event) {
61
+        // 实现告警事件处理
62
+        return true;
63
+    }
64
+    
65
+    /**
66
+     * 获取告警历史
67
+     */
68
+    public List<AlarmEvent> getAlarmHistory(String timeframe) {
69
+        // 实现告警历史查询
70
+        return List.of();
71
+    }
72
+}

+ 64
- 0
wm-bi/src/main/java/com/water/bi/service/ReportService.java Wyświetl plik

@@ -0,0 +1,64 @@
1
+package com.water.bi.service;
2
+
3
+import org.springframework.stereotype.Service;
4
+import java.util.List;
5
+import java.util.Map;
6
+import java.util.concurrent.CompletableFuture;
7
+import com.water.bi.entity.ReportTemplate;
8
+import com.water.bi.entity.ReportSchedule;
9
+import com.water.bi.entity.ReportInstance;
10
+
11
+/**
12
+ * 报告生成服务 - 自动运营报告
13
+ */
14
+@Service
15
+public class ReportService {
16
+    
17
+    /**
18
+     * 获取报告模板列表
19
+     */
20
+    public List<ReportTemplate> getReportTemplates() {
21
+        // 实现报告模板列表查询
22
+        return List.of();
23
+    }
24
+    
25
+    /**
26
+     * 创建报告模板
27
+     */
28
+    public ReportTemplate createReportTemplate(ReportTemplate template) {
29
+        // 实现报告模板创建
30
+        return template;
31
+    }
32
+    
33
+    /**
34
+     * 生成报告
35
+     */
36
+    public CompletableFuture<ReportInstance> generateReport(Long templateId, Map<String, Object> params) {
37
+        // 异步生成报告
38
+        return CompletableFuture.completedFuture(new ReportInstance());
39
+    }
40
+    
41
+    /**
42
+     * 获取报告实例列表
43
+     */
44
+    public List<ReportInstance> getReportInstances(Long templateId) {
45
+        // 实现报告实例列表查询
46
+        return List.of();
47
+    }
48
+    
49
+    /**
50
+     * 定时报告调度
51
+     */
52
+    public boolean scheduleReport(ReportSchedule schedule) {
53
+        // 实现定时报告调度
54
+        return true;
55
+    }
56
+    
57
+    /**
58
+     * 导出报告
59
+     */
60
+    public byte[] exportReport(Long reportId, String format) {
61
+        // 实现报告导出
62
+        return new byte[0];
63
+    }
64
+}

+ 157
- 0
wm-bi/src/main/resources/api-docs/BIDataAnalysisApi.yaml Wyświetl plik

@@ -0,0 +1,157 @@
1
+openapi: 3.0.0
2
+info:
3
+  title: BI数据分析API
4
+  description: 提供自助BI看板、数据分析等功能
5
+  version: 1.0.0
6
+servers:
7
+  - url: http://localhost:8083/api/data-analysis
8
+    description: 本地开发环境
9
+
10
+paths:
11
+  /dashboards:
12
+    get:
13
+      summary: 获取BI看板列表
14
+      tags: [数据分析]
15
+      responses:
16
+        '200':
17
+          description: BI看板列表
18
+          content:
19
+            application/json:
20
+              schema:
21
+                type: array
22
+                items:
23
+                  $ref: '#/components/schemas/BIDashboard'
24
+    
25
+    post:
26
+      summary: 创建BI看板
27
+      tags: [数据分析]
28
+      requestBody:
29
+        required: true
30
+        content:
31
+          application/json:
32
+            schema:
33
+              $ref: '#/components/schemas/BIDashboard'
34
+      responses:
35
+        '200':
36
+          description: 创建成功
37
+          content:
38
+            application/json:
39
+              schema:
40
+                $ref: '#/components/schemas/BIDashboard'
41
+
42
+  /analysis:
43
+    post:
44
+      summary: 执行数据分析任务
45
+      tags: [数据分析]
46
+      requestBody:
47
+        required: true
48
+        content:
49
+          application/json:
50
+            schema:
51
+              $ref: '#/components/schemas/DataAnalysisTask'
52
+      responses:
53
+        '200':
54
+          description: 任务开始执行
55
+          content:
56
+            application/json:
57
+              schema:
58
+                type: object
59
+
60
+  /templates:
61
+    post:
62
+      summary: 保存分析模板
63
+      tags: [数据分析]
64
+      requestBody:
65
+        required: true
66
+        content:
67
+          application/json:
68
+            schema:
69
+              type: object
70
+      responses:
71
+        '200':
72
+          description: 保存成功
73
+          content:
74
+            application/json:
75
+              schema:
76
+                type: boolean
77
+
78
+  /visualizations:
79
+    post:
80
+      summary: 创建数据可视化
81
+      tags: [数据分析]
82
+      requestBody:
83
+        required: true
84
+        content:
85
+          application/json:
86
+            schema:
87
+              $ref: '#/components/schemas/DataVisualization'
88
+      responses:
89
+        '200':
90
+          description: 创建成功
91
+          content:
92
+            application/json:
93
+              schema:
94
+                $ref: '#/components/schemas/DataVisualization'
95
+
96
+components:
97
+  schemas:
98
+    BIDashboard:
99
+      type: object
100
+      properties:
101
+        id:
102
+          type: integer
103
+          format: int64
104
+        name:
105
+          type: string
106
+        description:
107
+          type: string
108
+        dashboardCode:
109
+          type: string
110
+        layoutConfig:
111
+          type: string
112
+        widgets:
113
+          type: array
114
+          items:
115
+            type: object
116
+        status:
117
+          type: integer
118
+          enum: [0, 1]
119
+
120
+    DataAnalysisTask:
121
+      type: object
122
+      properties:
123
+        id:
124
+          type: integer
125
+          format: int64
126
+        taskName:
127
+          type: string
128
+        taskType:
129
+          type: string
130
+          enum: [AGGREGATION, ANALYSIS, FORECAST]
131
+        sqlQuery:
132
+          type: string
133
+        dataSources:
134
+          type: string
135
+        status:
136
+          type: integer
137
+          enum: [0, 1, 2, 3]
138
+        progress:
139
+          type: integer
140
+          format: int32
141
+
142
+    DataVisualization:
143
+      type: object
144
+      properties:
145
+        id:
146
+          type: integer
147
+          format: int64
148
+        name:
149
+          type: string
150
+        vizType:
151
+          type: string
152
+          enum: [CHART, MAP, DASHBOARD, SCREEN]
153
+        vizConfig:
154
+          type: string
155
+        status:
156
+          type: integer
157
+          enum: [0, 1]

+ 132
- 0
wm-bi/src/main/resources/api-docs/BIDataCenterApi.yaml Wyświetl plik

@@ -0,0 +1,132 @@
1
+openapi: 3.0.0
2
+info:
3
+  title: BI数据中心API
4
+  description: 提供ETL管道、多源汇聚等功能
5
+  version: 1.0.0
6
+servers:
7
+  - url: http://localhost:8083/api/data-center
8
+    description: 本地开发环境
9
+
10
+paths:
11
+  /data-sources:
12
+    get:
13
+      summary: 获取数据源列表
14
+      tags: [数据中心]
15
+      responses:
16
+        '200':
17
+          description: 数据源列表
18
+          content:
19
+            application/json:
20
+              schema:
21
+                type: array
22
+                items:
23
+                  $ref: '#/components/schemas/DataSource'
24
+    
25
+    post:
26
+      summary: 添加数据源
27
+      tags: [数据中心]
28
+      requestBody:
29
+        required: true
30
+        content:
31
+          application/json:
32
+            schema:
33
+              $ref: '#/components/schemas/DataSource'
34
+      responses:
35
+        '200':
36
+          description: 添加成功
37
+          content:
38
+            application/json:
39
+              schema:
40
+                type: boolean
41
+
42
+  /etl-tasks:
43
+    post:
44
+      summary: 执行ETL任务
45
+      tags: [数据中心]
46
+      requestBody:
47
+        required: true
48
+        content:
49
+          application/json:
50
+            schema:
51
+              $ref: '#/components/schemas/ETLTask'
52
+      responses:
53
+        '200':
54
+          description: 任务开始执行
55
+          content:
56
+            application/json:
57
+              schema:
58
+                type: boolean
59
+    get:
60
+      summary: 获取ETL任务状态
61
+      tags: [数据中心]
62
+      responses:
63
+        '200':
64
+          description: 任务状态列表
65
+          content:
66
+            application/json:
67
+              schema:
68
+                type: array
69
+                items:
70
+                  $ref: '#/components/schemas/ETLTask'
71
+
72
+  /aggregate:
73
+    post:
74
+      summary: 数据汇聚
75
+      tags: [数据中心]
76
+      requestBody:
77
+        required: true
78
+        content:
79
+          application/json:
80
+            schema:
81
+              type: array
82
+              items:
83
+                type: string
84
+      responses:
85
+        '200':
86
+          description: 汇聚结果
87
+          content:
88
+            application/json:
89
+              schema:
90
+                type: object
91
+
92
+components:
93
+  schemas:
94
+    DataSource:
95
+      type: object
96
+      properties:
97
+        id:
98
+          type: integer
99
+          format: int64
100
+        name:
101
+          type: string
102
+        type:
103
+          type: string
104
+          enum: [DATABASE, API, FILE, IOT]
105
+        url:
106
+          type: string
107
+        status:
108
+          type: integer
109
+          enum: [0, 1]
110
+        description:
111
+          type: string
112
+
113
+    ETLTask:
114
+      type: object
115
+      properties:
116
+        id:
117
+          type: integer
118
+          format: int64
119
+        name:
120
+          type: string
121
+        sourceId:
122
+          type: string
123
+        targetId:
124
+          type: string
125
+        status:
126
+          type: integer
127
+          enum: [0, 1, 2, 3]
128
+        progress:
129
+          type: integer
130
+          format: int32
131
+        errorMsg:
132
+          type: string

+ 59
- 7
wm-bi/src/main/resources/application.yml Wyświetl plik

@@ -1,17 +1,69 @@
1 1
 server:
2
-  port: 8088
2
+  port: 8083
3 3
 
4 4
 spring:
5 5
   application:
6 6
     name: wm-bi
7 7
   datasource:
8
-    url: jdbc:postgresql://${PG_HOST:127.0.0.1}:5432/water_management
9
-    username: ${PG_USER:water}
10
-    password: ${PG_PASS:water123}
8
+    url: jdbc:postgresql://localhost:5432/wm_bi
9
+    username: postgres
10
+    password: postgres
11
+    driver-class-name: org.postgresql.Driver
12
+  jpa:
13
+    hibernate:
14
+      ddl-auto: update
15
+    show-sql: true
16
+    properties:
17
+      hibernate:
18
+        dialect: org.hibernate.dialect.PostgreSQLDialect
11 19
   cloud:
12 20
     nacos:
13 21
       discovery:
14
-        server-addr: ${NACOS_HOST:127.0.0.1}:8848
22
+        server-addr: localhost:8848
15 23
 
16
-mybatis-plus:
17
-  mapper-locations: classpath*:/mapper/**/*.xml
24
+# 数据采集配置
25
+bi:
26
+  data-collection:
27
+    interval: 30
28
+    batch-size: 100
29
+    thread-pool:
30
+      core-size: 5
31
+      max-size: 10
32
+      queue-capacity: 1000
33
+  
34
+# 报表配置
35
+bi:
36
+  report:
37
+    template-path: /templates
38
+    output-path: /reports
39
+    max-size: 10MB
40
+  
41
+# 监控配置
42
+bi:
43
+  monitoring:
44
+    alert-enabled: true
45
+    alert-cooldown: 300
46
+    metrics-retention: 168h # 7天
47
+
48
+# 缓存配置
49
+spring:
50
+  cache:
51
+    type: redis
52
+  redis:
53
+    host: localhost
54
+    port: 6379
55
+    password: 
56
+    database: 0
57
+    timeout: 10000
58
+    lettuce:
59
+      pool:
60
+        max-active: 8
61
+        max-idle: 8
62
+        min-idle: 0
63
+        max-wait: -1
64
+
65
+# 日志配置
66
+logging:
67
+  level:
68
+    com.water.bi: debug
69
+    org.springframework.web: debug