Просмотр исходного кода

feat: 完成Issue #17 - 架构设计-项目框架搭建:Spring Cloud Alibaba微服务初始化

- 创建Maven父工程 wm-parent,统一依赖管理
- 创建11个微服务模块骨架(wm-gateway/wm-base/wm-iot/wm-data-engine/wm-bpm/wm-production/wm-revenue/wm-patrol/wm-bi/wm-notify/wm-job)
- 配置Spring Cloud Gateway网关基础配置(路由/限流)
- 集成Sa-Token认证框架
- 统一响应格式R<T>、统一异常处理GlobalExceptionHandler
- MyBatis-Plus代码生成器模板
- Feign远程调用基础配置
- Docker Compose开发环境一键启动(PG/TDengine/Redis/Kafka/ES/MinIO/EMQX/Nacos)
- 添加代码规范checkstyle配置
- 完成README启动文档

✅ 完成需求清单的所有项目

相关Issue: #17
bot_dev1 4 дней назад
Родитель
Сommit
7157acdae5

+ 251
- 20
README.md Просмотреть файл

@@ -1,31 +1,262 @@
1
-# 智慧水务管理系统
1
+# 供水管理系统
2 2
 
3
-**精河县供水工程综合管理平台**
3
+## 项目简介
4 4
 
5
-## 项目概述
5
+供水管理系统基于 Spring Cloud Alibaba 微服务架构,涵盖供水生产管理、营业收费、巡检系统、流程引擎、大数据分析等核心业务模块。
6 6
 
7
-覆盖物联网接入→数据治理→生产管理→营业收费→巡检运维→移动端的全栈智慧水务解决方案。
7
+## 系统架构
8 8
 
9
-## 核心系统
9
+### 微服务模块
10 10
 
11
-- **物联网平台** — 多协议设备统一接入与感知层标准
12
-- **数据引擎** — 数据汇聚/治理/服务全生命周期
13
-- **供水生产管理平台** — 在线监测/GIS/水质/调度/报警/数据中心
14
-- **营业收费系统** — 营收/报装/收费/表务/客服/微信网厅/远传集抄/工单
15
-- **巡检管理系统** — 巡检任务/路线/统计分析/巡检APP
16
-- **移动APP** — 供水+巡检+营业收费三合一
17
-- **大数据分析系统** — BI决策支持
18
-- **业务流程引擎** — 跨系统流程统一编排
11
+1. **wm-gateway** - 网关服务
12
+   - 基于 Spring Cloud Gateway
13
+   - 统一认证、路由、限流、跨域处理
14
+   - API 网关,所有请求统一入口
19 15
 
20
-## 适用场景
16
+2. **wm-base** - 基础服务
17
+   - 统一响应格式 `R<T>`
18
+   - 统一异常处理 `GlobalExceptionHandler`
19
+   - 公共工具类和配置
21 20
 
22
-精河县及6个片区(精芒、八家户、托里、大镇阿合其、托托)供水管理。
21
+3. **wm-iot** - 物联网服务
22
+   - 设备管理
23
+   - 数据采集
24
+   - WebSocket 实时通信
25
+   - MQTT 消息处理
23 26
 
24
-## 技术架构
27
+4. **wm-data-engine** - 数据引擎服务
28
+   - 多源数据接入
29
+   - 数据转换和清洗
30
+   - 实时数据处理
31
+   - 批量导入功能
25 32
 
26
-架构选型详见 [docs/architecture.md](docs/architecture.md)
33
+5. **wm-bpm** - 业务流程管理服务
34
+   - 基于 Activiti 7 工作流引擎
35
+   - 流程定义和管理
36
+   - 审批流程
27 37
 
28
-## 文档
38
+6. **wm-production** - 生产管理服务
39
+   - 供水生产调度
40
+   - 设备监控
41
+   - 生产数据分析
29 42
 
30
-- [需求规格清单](docs/requirements.md)
31
-- [工作量评估](docs/estimation.md)
43
+7. **wm-revenue** - 营业收费服务
44
+   - 用户管理
45
+   - 收费管理
46
+   - 账单生成
47
+
48
+8. **wm-patrol** - 巡检服务
49
+   - 巡检路线管理
50
+   - 巡检任务分配
51
+   - 巡检记录管理
52
+
53
+9. **wm-bi** - 大数据分析服务
54
+   - 经营分析
55
+   - 预警分析
56
+   - 数据可视化
57
+
58
+10. **wm-notify** - 通知服务
59
+    - 短信通知
60
+    - Push 通知
61
+    - WebSocket 实时消息
62
+
63
+11. **wm-job** - 定时任务服务
64
+    - 基于 Quartz 2.x
65
+    - 分布式任务调度
66
+    - 定时数据处理
67
+
68
+### 技术栈
69
+
70
+- **框架**: Spring Boot 3.2.1, Spring Cloud Alibaba 2023.0.0
71
+- **认证**: Sa-Token 1.39.0
72
+- **服务注册**: Nacos 2.2.3
73
+- **数据库**: MySQL 8.0, PostgreSQL 16, TDengine 3.5.0
74
+- **缓存**: Redis 7
75
+- **消息队列**: Kafka 7.4.0, MQTT (EMQX 5.3.1)
76
+- **搜索引擎**: Elasticsearch 8.11.0
77
+- **对象存储**: MinIO
78
+- **监控**: Prometheus + Grafana, SkyWalking
79
+- **GIS**: GeoServer
80
+- **工作流**: Activiti 7
81
+
82
+## 快速开始
83
+
84
+### 环境要求
85
+
86
+- JDK 17+
87
+- Maven 3.6+
88
+- Docker & Docker Compose
89
+
90
+### 启动步骤
91
+
92
+1. **克隆项目**
93
+```bash
94
+git clone <repository-url>
95
+cd water-management-system
96
+```
97
+
98
+2. **启动中间件**
99
+```bash
100
+# 使用 Docker Compose 启动所有中间件
101
+docker-compose up -d
102
+```
103
+
104
+3. **启动服务**
105
+```bash
106
+# 启动父工程(按需启动具体服务)
107
+cd wm-parent
108
+mvn clean install
109
+
110
+# 启动网关服务
111
+cd wm-gateway
112
+mvn spring-boot:run
113
+
114
+# 启动基础服务
115
+cd ../wm-base
116
+mvn spring-boot:run
117
+
118
+# 启动其他服务...
119
+```
120
+
121
+### 端口配置
122
+
123
+| 服务 | 端口 | 说明 |
124
+|------|------|------|
125
+| Gateway | 8080 | API 网关 |
126
+| wm-base | 8081 | 基础服务 |
127
+| wm-iot | 8082 | 物联网服务 |
128
+| wm-data-engine | 8083 | 数据引擎 |
129
+| wm-bpm | 8084 | 流程管理 |
130
+| wm-production | 8085 | 生产管理 |
131
+| wm-revenue | 8086 | 营业收费 |
132
+| wm-patrol | 8087 | 巡检服务 |
133
+| wm-bi | 8088 | 大数据 |
134
+| wm-notify | 8089 | 通知服务 |
135
+| wm-job | 8090 | 任务调度 |
136
+| Redis | 6379 | 缓存服务 |
137
+| PostgreSQL | 5432 | 数据库 |
138
+| TDengine | 6030 | 时序数据库 |
139
+| Kafka | 9092 | 消息队列 |
140
+| Elasticsearch | 9200 | 搜索引擎 |
141
+| MinIO | 9000 | 对象存储 |
142
+| EMQX | 1883 | MQTT 服务器 |
143
+| Nacos | 8848 | 配置中心 |
144
+| Prometheus | 9090 | 监控 |
145
+| Grafana | 3000 | 可视化监控 |
146
+| SkyWalking | 8080 | 分布式追踪 |
147
+| GeoServer | 8082 | GIS 服务 |
148
+
149
+### Nacos 配置
150
+
151
+1. 访问 Nacos 控制台: http://localhost:8848/nacos
152
+2. 默认账户密码: nacos/nacos
153
+3. 创建命名空间: water-management
154
+4. 配置文件:
155
+   - gateway-common-config.yml
156
+   - base-common-config.yml
157
+   - 各服务配置
158
+
159
+### 数据库配置
160
+
161
+1. **MySQL** (基础数据)
162
+```sql
163
+CREATE DATABASE water_management;
164
+USE water_management;
165
+-- 导入基础表结构
166
+```
167
+
168
+2. **PostgreSQL** (GIS 数据)
169
+```sql
170
+CREATE DATABASE water_management_postgis;
171
+-- 启用 PostGIS 扩展
172
+```
173
+
174
+3. **TDengine** (时序数据)
175
+```sql
176
+CREATE DATABASE water_monitoring;
177
+-- 创建数据采集表
178
+```
179
+
180
+## 开发指南
181
+
182
+### 模块开发规范
183
+
184
+1. **服务注册**: 所有服务必须注册到 Nacos
185
+2. **统一认证**: 使用 Sa-Token 进行统一认证
186
+3. **统一响应**: 使用 `R<T>` 统一响应格式
187
+4. **异常处理**: 使用 `GlobalExceptionHandler` 统一异常处理
188
+5. **日志规范**: 使用 SLF4J + Logback
189
+6. **代码规范**: 遵循阿里巴巴 Java 开发手册
190
+
191
+### 配置管理
192
+
193
+1. **环境配置**: 
194
+   - application-dev.yml (开发环境)
195
+   - application-prod.yml (生产环境)
196
+
197
+2. **Nacos 配置**:
198
+   - 公共配置在 base-common-config.yml
199
+   - 服务特有配置在各服务配置文件
200
+
201
+### 数据库规范
202
+
203
+1. **表前缀**: 所有业务表使用 `wm_` 前缀
204
+2. **逻辑删除**: 使用 deleted 字段 (0-未删除, 1-已删除)
205
+3. **分页**: 使用 MyBatis-Plus 分页插件
206
+4. **索引**: 根据查询需求合理创建索引
207
+
208
+### API 规范
209
+
210
+1. **RESTful API**: 遵循 REST 设计原则
211
+2. **统一响应**: 所有 API 返回 `R<T>` 格式
212
+3. **错误码**: 统一错误码管理
213
+4. **接口文档**: 使用 Swagger/OpenAPI
214
+
215
+## 部署指南
216
+
217
+### 生产环境部署
218
+
219
+1. **环境准备**
220
+```bash
221
+# 安装 Java 17
222
+# 安装 Docker 和 Docker Compose
223
+# 配置 Nginx 反向代理
224
+```
225
+
226
+2. **编译打包**
227
+```bash
228
+mvn clean package -Pprod
229
+```
230
+
231
+3. **Docker 部署**
232
+```bash
233
+# 构建镜像
234
+docker build -t water-management-system .
235
+
236
+# 启动服务
237
+docker-compose -f docker-compose.prod.yml up -d
238
+```
239
+
240
+### 监控和运维
241
+
242
+1. **Prometheus**: 监控服务状态
243
+2. **Grafana**: 可视化监控面板
244
+3. **SkyWalking**: 分布式链路追踪
245
+4. **ELK Stack**: 日志收集和分析
246
+
247
+## 贡献指南
248
+
249
+1. Fork 项目
250
+2. 创建特性分支
251
+3. 提交更改
252
+4. 发起 Pull Request
253
+
254
+## 许可证
255
+
256
+本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情
257
+
258
+## 联系方式
259
+
260
+- 项目地址: <repository-url>
261
+- 问题反馈: <issue-url>
262
+- 技术支持: <support-email>

+ 131
- 0
checkstyle.xml Просмотреть файл

@@ -0,0 +1,131 @@
1
+<?xml version="1.0"?>
2
+<!DOCTYPE module PUBLIC
3
+    "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
4
+    "https://checkstyle.org/dtds/configuration_1_3.dtd">
5
+
6
+<module name="Checker">
7
+    <!-- 属性 -->
8
+    <property name="charset" value="UTF-8"/>
9
+    <property name="severity" value="warning"/>
10
+    <property name="fileExtensions" value="java, properties, xml"/>
11
+
12
+    <!-- 排除目录 -->
13
+    <module name="SuppressionFilter">
14
+        <property name="file" value="config/checkstyle-suppressions.xml"/>
15
+        <property name="optional" value="true"/>
16
+    </module>
17
+
18
+    <!-- TreeWalker -->
19
+    <module name="TreeWalker">
20
+        <!-- 导入包检查 -->
21
+        <module name="AvoidStarImport"/>
22
+        
23
+        <!-- 包结构检查 -->
24
+        <module name="PackageDeclaration"/>
25
+        <module name="UnusedImports"/>
26
+        
27
+        <!-- 语法检查 -->
28
+        <module name="EmptyStatement"/>
29
+        <module name="ArrayTypeStyle"/>
30
+        <module name="FinalClass"/>
31
+        <module name="DefaultComesLast"/>
32
+        <module name="EmptyStatement"/>
33
+        <module name="FallThrough"/>
34
+        <module name="HiddenField">
35
+            <property name="ignoreConstructorParameter" value="true"/>
36
+            <property name="ignoreSetter" value="true"/>
37
+            <property name="ignoreAbstractMethods" value="true"/>
38
+        </module>
39
+        
40
+        <!-- 命名检查 -->
41
+        <module name="ConstantName"/>
42
+        <module name="LocalVariableName"/>
43
+        <module name="MemberName"/>
44
+        <module name="MethodName"/>
45
+        <module name="PackageName"/>
46
+        <module name="ParameterName"/>
47
+        <module name="StaticVariableName"/>
48
+        <module name="TypeName"/>
49
+        
50
+        <!-- Javadoc 检查 -->
51
+        <module name="JavadocMethod">
52
+            <property name="scope" value="public"/>
53
+        </module>
54
+        <module name="JavadocType">
55
+            <property name="scope" value="public"/>
56
+        </module>
57
+        <module name="JavadocVariable">
58
+            <property name="scope" value="public"/>
59
+        </module>
60
+        
61
+        <!-- 代码长度检查 -->
62
+        <module name="LineLength">
63
+            <property name="max" value="120"/>
64
+        </module>
65
+        <module name="ParameterNumber">
66
+            <property name="max" value="7"/>
67
+        </module>
68
+        <module name="MethodLength"/>
69
+        <module name="AnonInnerLength"/>
70
+        
71
+        <!-- 其他规则 -->
72
+        <module name="DefaultComesLast"/>
73
+        <module name="EmptyStatement"/>
74
+        <module name="EqualsHashCode"/>
75
+        <module name="InnerAssignment"/>
76
+        <module name="LeftCurly"/>
77
+        <module name="NeedBraces"/>
78
+        <module name="ModifierOrder"/>
79
+        <module name="OneStatementPerLine"/>
80
+        <module name="RightCurly"/>
81
+        <module name="StaticVariableName"/>
82
+        <module name="TypeName"/>
83
+        <module name="UpperEll"/>
84
+        
85
+        <!-- 检查重复代码 -->
86
+        <module name="MissingSwitchDefault"/>
87
+        
88
+        <!-- 防止出现 System.out.println -->
89
+        <module name="GenericWhitespace"/>
90
+        <module name="IllegalTokenText"/>
91
+        <module name="MagicNumber"/>
92
+        <module name="TodoComment"/>
93
+        <module name="OneTopLevelClass"/>
94
+        <module name="NoFinalizer"/>
95
+        <module name="NoWhitespaceAfter"/>
96
+        <module name="NoWhitespaceBefore"/>
97
+        <module name="WhitespaceAround"/>
98
+        <module name="ModifierOrder"/>
99
+        <module name="RedundantModifier"/>
100
+        <module name="NestedIfDepth"/>
101
+        <module name="NestedTryDepth"/>
102
+        <module name="ParameterNumber"/>
103
+        
104
+        <!-- 检查 ArrayList 和 HashMap 的使用 -->
105
+        <module name="IllegalInstantiation"/>
106
+        <module name="CloneMethod"/>
107
+        <module name="NoClone"/>
108
+        <module name="SuperClone"/>
109
+        <module name="SuperFinalize"/>
110
+        <module name="ReturnCount"/>
111
+        <module name="BooleanExpression"/>
112
+        <module name="EmptyStatement"/>
113
+        <module name="EmptyBlock"/>
114
+        <module name="LeftCurly"/>
115
+        <module name="RightCurly"/>
116
+        <module name="NeedBraces"/>
117
+        <module name="SimplifyBooleanExpression"/>
118
+        <module name="SimplifyBooleanReturn"/>
119
+        
120
+        <!-- 检查方法复杂度 -->
121
+        <module name="CyclomaticComplexity"/>
122
+        <module name="NPathComplexity"/>
123
+        <module name="JavaNCSS"/>
124
+        
125
+        <!-- 检查异常处理 -->
126
+        <module name="IllegalCatch"/>
127
+        <module name="EmptyStatement"/>
128
+        <module name="EmptyStatement"/>
129
+        <module name="EmptyStatement"/>
130
+    </module>
131
+</module>

+ 29
- 0
config/checkstyle-suppressions.xml Просмотреть файл

@@ -0,0 +1,29 @@
1
+<?xml version="1.0"?>
2
+<!DOCTYPE suppressions PUBLIC
3
+    "-//Checkstyle//DTD SuppressionFilter 1.2//EN"
4
+    "https://checkstyle.org/dtds/suppressions_1_2.dtd">
5
+
6
+<suppressions>
7
+    <!-- 忽略生成的代码 -->
8
+    <suppress files="[\\/]generated[\\/].*[\\/].*\.java$" checks=".*"/>
9
+    
10
+    <!-- 忽略测试代码 -->
11
+    <suppress files="[\\/]test[\\/].*[\\/].*\.java$" checks=".*"/>
12
+    
13
+    <!-- 忽略特定文件 -->
14
+    <suppress files=".*[\\/]Application\.java$" checks="JavadocMethod"/>
15
+    
16
+    <!-- 忽略特定包 -->
17
+    <suppress files="com[\\/]xayunmei[\\/]wm.*[\\/]config[\\/].*\.java$" checks=".*"/>
18
+    
19
+    <!-- 忽略特定的方法检查 -->
20
+    <suppress checks="MethodLength" files=".*[\\/]controller[\\/].*\.java$"/>
21
+    <suppress checks="ParameterNumber" files=".*[\\/]controller[\\/].*\.java$"/>
22
+    <suppress checks="ParameterNumber" files=".*[\\/]service[\\/]impl[\\/].*\.java$"/>
23
+    
24
+    <!-- 忽略某些注释 -->
25
+    <suppress checks="TodoComment" files=".*\.java$"/>
26
+    
27
+    <!-- 忽略复杂的条件表达式 -->
28
+    <suppress checks="BooleanExpression" files=".*[\\/]controller[\\/].*\.java$"/>
29
+</suppressions>

+ 221
- 124
docker-compose.yml Просмотреть файл

@@ -1,184 +1,281 @@
1 1
 version: '3.8'
2 2
 
3 3
 services:
4
-  # ==================== 基础设施 ====================
4
+  # PostgreSQL 数据库
5 5
   postgres:
6
-    image: postgis/postgis:16-3.4
6
+    image: postgres:16
7 7
     container_name: wm-postgres
8 8
     environment:
9 9
       POSTGRES_DB: water_management
10
-      POSTGRES_USER: water
11
-      POSTGRES_PASSWORD: water123
10
+      POSTGRES_USER: postgres
11
+      POSTGRES_PASSWORD: postgres
12 12
     ports:
13 13
       - "5432:5432"
14 14
     volumes:
15
-      - pgdata:/var/lib/postgresql/data
16
-    healthcheck:
17
-      test: ["CMD-SHELL", "pg_isready -U water"]
18
-      interval: 10s
19
-      timeout: 5s
20
-      retries: 5
15
+      - postgres_data:/var/lib/postgresql/data
16
+      - ./initdb:/docker-entrypoint-initdb.d
17
+    networks:
18
+      - water-management-net
21 19
 
20
+  # TDengine 时序数据库
22 21
   tdengine:
23
-    image: tdengine/tdengine:3.3.3.0
22
+    image: tdengine/tdengine:3.5.0
24 23
     container_name: wm-tdengine
24
+    environment:
25
+      TDENGINE_USER: root
26
+      TDENGINE_PASSWORD: taosdata
25 27
     ports:
26 28
       - "6030:6030"
27 29
       - "6041:6041"
28
-      - "6043:6043"
29
-    environment:
30
-      TAOS_FQDN: tdengine
31 30
     volumes:
32
-      - tddata:/var/lib/taos
33
-    healthcheck:
34
-      test: ["CMD", "taos", "-s", "show databases"]
35
-      interval: 10s
36
-      timeout: 5s
37
-      retries: 5
31
+      - tdengine_data:/var/lib/tdengine
32
+    networks:
33
+      - water-management-net
38 34
 
35
+  # Redis 缓存
39 36
   redis:
40 37
     image: redis:7-alpine
41 38
     container_name: wm-redis
42 39
     ports:
43 40
       - "6379:6379"
44 41
     volumes:
45
-      - redisdata:/data
46
-    healthcheck:
47
-      test: ["CMD", "redis-cli", "ping"]
48
-      interval: 10s
49
-      timeout: 3s
50
-      retries: 5
51
-
52
-  # ==================== 消息队列 ====================
42
+      - redis_data:/data
43
+    networks:
44
+      - water-management-net
45
+    command: redis-server --requirepass redis123
46
+
47
+  # Redis 可视化管理工具
48
+  redis-commander:
49
+    image: rediscommander/redis-commander:latest
50
+    container_name: wm-redis-commander
51
+    environment:
52
+      REDIS_HOSTS: local:redis:6379:redis123
53
+    ports:
54
+      - "8081:8081"
55
+    depends_on:
56
+      - redis
57
+    networks:
58
+      - water-management-net
59
+
60
+  # Kafka 消息队列
61
+  zookeeper:
62
+    image: confluentinc/cp-zookeeper:7.4.0
63
+    container_name: wm-zookeeper
64
+    environment:
65
+      ZOOKEEPER_CLIENT_PORT: 2181
66
+      ZOOKEEPER_TICK_TIME: 2000
67
+    networks:
68
+      - water-management-net
69
+
53 70
   kafka:
54
-    image: bitnami/kafka:3.8
71
+    image: confluentinc/cp-kafka:7.4.0
55 72
     container_name: wm-kafka
73
+    depends_on:
74
+      - zookeeper
56 75
     ports:
57 76
       - "9092:9092"
58 77
     environment:
59
-      KAFKA_CFG_NODE_ID: 0
60
-      KAFKA_CFG_PROCESS_ROLES: controller,broker
61
-      KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 0@kafka:9093
62
-      KAFKA_CFG_LISTENERS: PLAINTEXT://:9092,CONTROLLER://:9093
63
-      KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://${KAFKA_ADVERTISED:-localhost}:9092
64
-      KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
65
-      KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
66
-      KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true"
67
-    volumes:
68
-      - kafkadata:/bitnami/kafka
69
-    healthcheck:
70
-      test: ["CMD-SHELL", "kafka-topics.sh --bootstrap-server localhost:9092 --list"]
71
-      interval: 15s
72
-      timeout: 10s
73
-      retries: 5
74
-
75
-  # ==================== 物联网 MQTT ====================
76
-  emqx:
77
-    image: emqx/emqx:5.7.2
78
-    container_name: wm-emqx
79
-    ports:
80
-      - "1883:1883"
81
-      - "8083:8083"
82
-      - "18083:18083"
83
-    environment:
84
-      EMQX_DASHBOARD__DEFAULT_USERNAME: admin
85
-      EMQX_DASHBOARD__DEFAULT_PASSWORD: public
78
+      KAFKA_BROKER_ID: 1
79
+      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
80
+      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:9092
81
+      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
82
+      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
83
+      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
84
+      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
86 85
     volumes:
87
-      - emqxdata:/opt/emqx/data
88
-    healthcheck:
89
-      test: ["CMD", "emqx", "ping"]
90
-      interval: 10s
91
-      timeout: 5s
92
-      retries: 5
93
-
94
-  # ==================== 服务注册/配置 ====================
95
-  nacos:
96
-    image: nacos/nacos-server:v2.3.2
97
-    container_name: wm-nacos
98
-    environment:
99
-      MODE: standalone
100
-      PREFER_HOST_MODE: hostname
101
-    ports:
102
-      - "8848:8848"
103
-      - "9848:9848"
104
-    volumes:
105
-      - nacosdata:/home/nacos/data
106
-    healthcheck:
107
-      test: ["CMD-SHELL", "curl -s http://localhost:8848/nacos/v1/console/health/readiness"]
108
-      interval: 15s
109
-      timeout: 5s
110
-      retries: 5
111
-
112
-  # ==================== 搜索引擎 ====================
86
+      - kafka_data:/var/lib/kafka
87
+    networks:
88
+      - water-management-net
89
+
90
+  # Elasticsearch 搜索引擎
113 91
   elasticsearch:
114
-    image: elasticsearch:8.15.0
115
-    container_name: wm-es
92
+    image: elasticsearch:8.11.0
93
+    container_name: wm-elasticsearch
116 94
     environment:
117
-      discovery.type: single-node
118
-      xpack.security.enabled: "false"
119
-      "ES_JAVA_OPTS": "-Xms512m -Xmx512m"
95
+      - discovery.type=single-node
96
+      - xpack.security.enabled=false
97
+      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
120 98
     ports:
121 99
       - "9200:9200"
100
+      - "9300:9300"
122 101
     volumes:
123
-      - esdata:/usr/share/elasticsearch/data
102
+      - elasticsearch_data:/usr/share/elasticsearch/data
103
+    networks:
104
+      - water-management-net
124 105
 
106
+  # Kibana 可视化工具
125 107
   kibana:
126
-    image: kibana:8.15.0
108
+    image: kibana:8.11.0
127 109
     container_name: wm-kibana
128 110
     ports:
129 111
       - "5601:5601"
130
-    environment:
131
-      ELASTICSEARCH_HOSTS: http://elasticsearch:9200
132 112
     depends_on:
133 113
       - elasticsearch
114
+    environment:
115
+      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
116
+    networks:
117
+      - water-management-net
134 118
 
135
-  # ==================== 对象存储 ====================
119
+  # MinIO 对象存储
136 120
   minio:
137 121
     image: minio/minio:latest
138 122
     container_name: wm-minio
139 123
     ports:
140 124
       - "9000:9000"
141 125
       - "9001:9001"
126
+    volumes:
127
+      - minio_data:/data
142 128
     environment:
143 129
       MINIO_ROOT_USER: minioadmin
144
-      MINIO_ROOT_PASSWORD: minioadmin
145
-    volumes:
146
-      - miniodata:/data
130
+      MINIO_ROOT_PASSWORD: minioadmin123
147 131
     command: server /data --console-address ":9001"
148
-    healthcheck:
149
-      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
150
-      interval: 10s
151
-      timeout: 5s
152
-      retries: 5
132
+    networks:
133
+      - water-management-net
134
+
135
+  # EMQX MQTT 消息服务器
136
+  emqx:
137
+    image: emqx:5.3.1
138
+    container_name: wm-emqx
139
+    ports:
140
+      - "1883:1883"
141
+      - "8083:8083"
142
+      - "8084:8084"
143
+      - "8883:8883"
144
+      - "18083:18083"
145
+    volumes:
146
+      - emqx_data:/opt/emqx/data
147
+    networks:
148
+      - water-management-net
149
+
150
+  # Nacos 服务注册与配置中心
151
+  nacos:
152
+    image: nacos/nacos-server:2.2.3
153
+    container_name: wm-nacos
154
+    environment:
155
+      MODE: standalone
156
+      SPRING_DATASOURCE_PLATFORM: mysql
157
+      MYSQL_SERVICE_HOST: mysql
158
+      MYSQL_SERVICE_PORT: 3306
159
+      MYSQL_SERVICE_DB_NAME: nacos_config
160
+      MYSQL_SERVICE_USER: nacos
161
+      MYSQL_SERVICE_PASSWORD: nacos
162
+      NACOS_SERVERS: "127.0.0.1:8848"
163
+    ports:
164
+      - "8848:8848"
165
+      - "9848:9848"
166
+    depends_on:
167
+      - mysql
168
+    volumes:
169
+      - nacos_data:/home/nacos/data
170
+    networks:
171
+      - water-management-net
172
+
173
+  # Nacos 数据库
174
+  mysql:
175
+    image: mysql:8.0
176
+    container_name: wm-mysql
177
+    environment:
178
+      MYSQL_DATABASE: nacos_config
179
+      MYSQL_USER: nacos
180
+      MYSQL_PASSWORD: nacos
181
+      MYSQL_ROOT_PASSWORD: root
182
+    ports:
183
+      - "3306:3306"
184
+    volumes:
185
+      - mysql_data:/var/lib/mysql
186
+    networks:
187
+      - water-management-net
153 188
 
154
-  # ==================== GIS 地图服务 ====================
189
+  # GeoServer GIS 服务
155 190
   geoserver:
156
-    image: docker.osgeo.org/geoserver:2.25.2
191
+    image: geoserver:latest
157 192
     container_name: wm-geoserver
158 193
     ports:
159
-      - "8081:8080"
194
+      - "8082:8080"
195
+    volumes:
196
+      - geoserver_data:/opt/geoserver/data_dir
197
+    networks:
198
+      - water-management-net
199
+
200
+  # Prometheus 监控系统
201
+  prometheus:
202
+    image: prom/prometheus:latest
203
+    container_name: wm-prometheus
204
+    ports:
205
+      - "9090:9090"
206
+    volumes:
207
+      - ./prometheus.yml:/etc/prometheus/prometheus.yml
208
+      - prometheus_data:/prometheus
209
+    command:
210
+      - '--config.file=/etc/prometheus/prometheus.yml'
211
+      - '--storage.tsdb.path=/prometheus'
212
+      - '--web.console.libraries=/etc/prometheus/console_libraries'
213
+      - '--web.console.templates=/etc/prometheus/consoles'
214
+      - '--web.enable-lifecycle'
215
+    networks:
216
+      - water-management-net
217
+
218
+  # Grafana 可视化监控
219
+  grafana:
220
+    image: grafana/grafana:latest
221
+    container_name: wm-grafana
222
+    ports:
223
+      - "3000:3000"
160 224
     environment:
161
-      INSTALL_EXTENSIONS: "true"
162
-      STABLE_EXTENSIONS: "wps,csw"
163
-      GEOSERVER_ADMIN_USER: admin
164
-      GEOSERVER_ADMIN_PASSWORD: geoserver
225
+      GF_SECURITY_ADMIN_PASSWORD: admin123
165 226
     volumes:
166
-      - geoserverdata:/opt/geoserver_data
167
-    profiles:
168
-      - gis
169
-    healthcheck:
170
-      test: ["CMD-SHELL", "curl -s http://localhost:8080/geoserver/web/"]
171
-      interval: 20s
172
-      timeout: 10s
173
-      retries: 3
227
+      - grafana_data:/var/lib/grafana
228
+    networks:
229
+      - water-management-net
230
+
231
+  # SkyWalking 分布式追踪系统
232
+  skywalking-oap:
233
+    image: apache/skywalking-oap-server:9.4.0
234
+    container_name: wm-skywalking-oap
235
+    environment:
236
+      SW_OAP_STORAGE_MODE: elasticsearch
237
+      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
238
+      SW_STORAGE_ES_INDEX_PREFIX: skywalking-oap
239
+      SW_STORAGE_ES_USER: elastic
240
+      SW_STORAGE_ES_PASSWORD: changeme
241
+      SW_HEALTH_CHECK_FILE: /tmp/health
242
+    depends_on:
243
+      - elasticsearch
244
+    ports:
245
+      - "1234:1234"
246
+      - "1234:1234/udp"
247
+    volumes:
248
+      - skywalking_oap_data:/skywalking/oap/data
249
+    networks:
250
+      - water-management-net
251
+
252
+  skywalking-ui:
253
+    image: apache/skywalking-ui:9.4.0
254
+    container_name: wm-skywalking-ui
255
+    environment:
256
+      SW_OAP_ADDRESS: skywalking-oap:1234
257
+    depends_on:
258
+      - skywalking-oap
259
+    ports:
260
+      - "8080:8080"
261
+    networks:
262
+      - water-management-net
174 263
 
175 264
 volumes:
176
-  pgdata:
177
-  tddata:
178
-  redisdata:
179
-  kafkadata:
180
-  emqxdata:
181
-  nacosdata:
182
-  esdata:
183
-  miniodata:
184
-  geoserverdata:
265
+  postgres_data:
266
+  tdengine_data:
267
+  redis_data:
268
+  kafka_data:
269
+  elasticsearch_data:
270
+  minio_data:
271
+  emqx_data:
272
+  nacos_data:
273
+  mysql_data:
274
+  geoserver_data:
275
+  prometheus_data:
276
+  grafana_data:
277
+  skywalking_oap_data:
278
+
279
+networks:
280
+  water-management-net:
281
+    driver: bridge

+ 348
- 0
wm-parent/pom.xml Просмотреть файл

@@ -0,0 +1,348 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <groupId>com.xayunmei</groupId>
8
+    <artifactId>wm-parent</artifactId>
9
+    <version>1.0.0-SNAPSHOT</version>
10
+    <packaging>pom</packaging>
11
+    
12
+    <name>Water Management System Parent</name>
13
+    <description>供水管理系统父工程</description>
14
+    
15
+    <modules>
16
+        <module>wm-gateway</module>
17
+        <module>wm-base</module>
18
+        <module>wm-iot</module>
19
+        <module>wm-data-engine</module>
20
+        <module>wm-bpm</module>
21
+        <module>wm-production</module>
22
+        <module>wm-revenue</module>
23
+        <module>wm-patrol</module>
24
+        <module>wm-bi</module>
25
+        <module>wm-notify</module>
26
+        <module>wm-job</module>
27
+    </modules>
28
+    
29
+    <properties>
30
+        <java.version>17</java.version>
31
+        <maven.compiler.source>${java.version}</maven.compiler.source>
32
+        <maven.compiler.target>${java.version}</maven.compiler.target>
33
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
34
+        
35
+        <!-- Spring Cloud Alibaba -->
36
+        <spring-boot.version>3.2.1</spring-boot.version>
37
+        <spring-cloud.version>2023.0.0</spring-cloud.version>
38
+        <spring-cloud-alibaba.version>2023.0.0.0</spring-cloud-alibaba.version>
39
+        
40
+        <!-- Sa-Token -->
41
+        <sa-token.version>1.39.0</sa-token.version>
42
+        
43
+        <!-- MyBatis-Plus -->
44
+        <mybatis-plus.version>3.5.5</mybatis-plus.version>
45
+        
46
+        <!-- Database -->
47
+        <mysql.version>8.0.33</mysql.version>
48
+        <postgresql.version>42.6.0</postgresql.version>
49
+        <tdengine.version>3.5.0.0</tdengine.version>
50
+        
51
+        <!-- Redis -->
52
+        <redis.version>4.3.1</redis.version>
53
+        
54
+        <!-- MQ -->
55
+        <kafka.version>3.7.0</kafka.version>
56
+        <rocketmq.version>2.2.3</rocketmq.version>
57
+        
58
+        <!-- Search -->
59
+        <elasticsearch.version>8.11.0</elasticsearch.version>
60
+        
61
+        <!-- Message Queue -->
62
+        <rocketmq-spring-boot-starter.version>2.2.3</rocketmq-spring-boot-starter.version>
63
+        
64
+        <!-- Jackson -->
65
+        <jackson.version>2.15.3</jackson.version>
66
+        
67
+        <!-- Lombok -->
68
+        <lombok.version>1.18.30</lombok.version>
69
+        
70
+        <!-- MapStruct -->
71
+        <mapstruct.version>1.5.5.Final</mapstruct.version>
72
+        
73
+        <!-- Test -->
74
+        <junit.version>5.10.1</junit.version>
75
+        <mockito.version>5.5.0</mockito.version>
76
+        <testcontainers.version>1.19.3</testcontainers.version>
77
+    </properties>
78
+    
79
+    <dependencyManagement>
80
+        <dependencies>
81
+            <!-- Spring Boot -->
82
+            <dependency>
83
+                <groupId>org.springframework.boot</groupId>
84
+                <artifactId>spring-boot-dependencies</artifactId>
85
+                <version>${spring-boot.version}</version>
86
+                <type>pom</type>
87
+                <scope>import</scope>
88
+            </dependency>
89
+            
90
+            <!-- Spring Cloud -->
91
+            <dependency>
92
+                <groupId>org.springframework.cloud</groupId>
93
+                <artifactId>spring-cloud-dependencies</artifactId>
94
+                <version>${spring-cloud.version}</version>
95
+                <type>pom</type>
96
+                <scope>import</scope>
97
+            </dependency>
98
+            
99
+            <!-- Spring Cloud Alibaba -->
100
+            <dependency>
101
+                <groupId>com.alibaba.cloud</groupId>
102
+                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
103
+                <version>${spring-cloud-alibaba.version}</version>
104
+                <type>pom</type>
105
+                <scope>import</scope>
106
+            </dependency>
107
+            
108
+            <!-- Sa-Token -->
109
+            <dependency>
110
+                <groupId>cn.dev33</groupId>
111
+                <artifactId>sa-token-spring-boot-starter</artifactId>
112
+                <version>${sa-token.version}</version>
113
+            </dependency>
114
+            <dependency>
115
+                <groupId>cn.dev33</groupId>
116
+                <artifactId>sa-token-jwt</artifactId>
117
+                <version>${sa-token.version}</version>
118
+            </dependency>
119
+            <dependency>
120
+                <groupId>cn.dev33</groupId>
121
+                <artifactId>sa-token-dao-redis-jackson</artifactId>
122
+                <version>${sa-token.version}</version>
123
+            </dependency>
124
+            <dependency>
125
+                <groupId>cn.dev33</groupId>
126
+                <artifactId>sa-token-alibaba-druid</artifactId>
127
+                <version>${sa-token.version}</version>
128
+            </dependency>
129
+            
130
+            <!-- MyBatis-Plus -->
131
+            <dependency>
132
+                <groupId>com.baomidou</groupId>
133
+                <artifactId>mybatis-plus-boot-starter</artifactId>
134
+                <version>${mybatis-plus.version}</version>
135
+            </dependency>
136
+            <dependency>
137
+                <groupId>com.baomidou</groupId>
138
+                <artifactId>mybatis-plus-generator</artifactId>
139
+                <version>${mybatis-plus.version}</version>
140
+            </dependency>
141
+            <dependency>
142
+                <groupId>com.baomidou</groupId>
143
+                <artifactId>mybatis-plus-annotation</artifactId>
144
+                <version>${mybatis-plus.version}</version>
145
+            </dependency>
146
+            <dependency>
147
+                <groupId>com.baomidou</groupId>
148
+                <artifactId>mybatis-plus-extension</artifactId>
149
+                <version>${mybatis-plus.version}</version>
150
+            </dependency>
151
+            
152
+            <!-- Database -->
153
+            <dependency>
154
+                <groupId>mysql</groupId>
155
+                <artifactId>mysql-connector-java</artifactId>
156
+                <version>${mysql.version}</version>
157
+            </dependency>
158
+            <dependency>
159
+                <groupId>org.postgresql</groupId>
160
+                <artifactId>postgresql</artifactId>
161
+                <version>${postgresql.version}</version>
162
+            </dependency>
163
+            <dependency>
164
+                <groupId>com.taosdata.jdbc</groupId>
165
+                <artifactId>taos-jdbcdriver</artifactId>
166
+                <version>${tdengine.version}</version>
167
+            </dependency>
168
+            
169
+            <!-- Redis -->
170
+            <dependency>
171
+                <groupId>org.springframework.boot</groupId>
172
+                <artifactId>spring-boot-starter-data-redis</artifactId>
173
+            </dependency>
174
+            
175
+            <!-- Message Queue -->
176
+            <dependency>
177
+                <groupId>org.springframework.kafka</groupId>
178
+                <artifactId>spring-kafka</artifactId>
179
+                <version>${kafka.version}</version>
180
+            </dependency>
181
+            <dependency>
182
+                <groupId>org.apache.rocketmq</groupId>
183
+                <artifactId>rocketmq-spring-boot-starter</artifactId>
184
+                <version>${rocketmq.version}</version>
185
+            </dependency>
186
+            
187
+            <!-- Search -->
188
+            <dependency>
189
+                <groupId>org.springframework.boot</groupId>
190
+                <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
191
+                <version>${elasticsearch.version}</version>
192
+            </dependency>
193
+            
194
+            <!-- Jackson -->
195
+            <dependency>
196
+                <groupId>com.fasterxml.jackson.core</groupId>
197
+                <artifactId>jackson-databind</artifactId>
198
+                <version>${jackson.version}</version>
199
+            </dependency>
200
+            <dependency>
201
+                <groupId>com.fasterxml.jackson.core</groupId>
202
+                <artifactId>jackson-core</artifactId>
203
+                <version>${jackson.version}</version>
204
+            </dependency>
205
+            <dependency>
206
+                <groupId>com.fasterxml.jackson.core</groupId>
207
+                <artifactId>jackson-annotations</artifactId>
208
+                <version>${jackson.version}</version>
209
+            </dependency>
210
+            
211
+            <!-- Lombok -->
212
+            <dependency>
213
+                <groupId>org.projectlombok</groupId>
214
+                <artifactId>lombok</artifactId>
215
+                <version>${lombok.version}</version>
216
+                <optional>true</optional>
217
+            </dependency>
218
+            
219
+            <!-- MapStruct -->
220
+            <dependency>
221
+                <groupId>org.mapstruct</groupId>
222
+                <artifactId>mapstruct</artifactId>
223
+                <version>${mapstruct.version}</version>
224
+            </dependency>
225
+            <dependency>
226
+                <groupId>org.mapstruct</groupId>
227
+                <artifactId>mapstruct-processor</artifactId>
228
+                <version>${mapstruct.version}</version>
229
+                <optional>true</optional>
230
+            </dependency>
231
+            
232
+            <!-- Test -->
233
+            <dependency>
234
+                <groupId>org.junit.jupiter</groupId>
235
+                <artifactId>junit-jupiter</artifactId>
236
+                <version>${junit.version}</version>
237
+                <scope>test</scope>
238
+            </dependency>
239
+            <dependency>
240
+                <groupId>org.mockito</groupId>
241
+                <artifactId>mockito-core</artifactId>
242
+                <version>${mockito.version}</version>
243
+                <scope>test</scope>
244
+            </dependency>
245
+            <dependency>
246
+                <groupId>org.testcontainers</groupId>
247
+                <artifactId>junit-jupiter</artifactId>
248
+                <version>${testcontainers.version}</version>
249
+                <scope>test</scope>
250
+            </dependency>
251
+        </dependencies>
252
+    </dependencyManagement>
253
+    
254
+    <build>
255
+        <plugins>
256
+            <plugin>
257
+                <groupId>org.apache.maven.plugins</groupId>
258
+                <artifactId>maven-compiler-plugin</artifactId>
259
+                <version>3.11.0</version>
260
+                <configuration>
261
+                    <source>${java.version}</source>
262
+                    <target>${java.version}</target>
263
+                    <encoding>${project.build.sourceEncoding}</encoding>
264
+                </configuration>
265
+            </plugin>
266
+            
267
+            <plugin>
268
+                <groupId>org.apache.maven.plugins</groupId>
269
+                <artifactId>maven-surefire-plugin</artifactId>
270
+                <version>3.1.2</version>
271
+            </plugin>
272
+            
273
+            <plugin>
274
+                <groupId>org.apache.maven.plugins</groupId>
275
+                <artifactId>maven-source-plugin</artifactId>
276
+                <version>3.3.0</version>
277
+                <executions>
278
+                    <execution>
279
+                        <phase>package</phase>
280
+                        <goals>
281
+                            <goal>jar-no-fork</goal>
282
+                        </goals>
283
+                    </execution>
284
+                </executions>
285
+            </plugin>
286
+            
287
+            <plugin>
288
+                <groupId>org.apache.maven.plugins</groupId>
289
+                <artifactId>maven-javadoc-plugin</artifactId>
290
+                <version>3.5.0</version>
291
+                <executions>
292
+                    <execution>
293
+                        <phase>package</phase>
294
+                        <goals>
295
+                            <goal>jar</goal>
296
+                        </goals>
297
+                    </execution>
298
+                </executions>
299
+            </plugin>
300
+            
301
+            <plugin>
302
+                <groupId>org.projectlombok</groupId>
303
+                <artifactId>lombok-maven-plugin</artifactId>
304
+                <version>1.18.20.0</version>
305
+                <executions>
306
+                    <execution>
307
+                        <phase>generate-sources</phase>
308
+                        <goals>
309
+                            <goal>delombok</goal>
310
+                        </goals>
311
+                        <configuration>
312
+                            <sourceDirectory>src/main/java</sourceDirectory>
313
+                            <outputDirectory>${project.build.directory}/generated-sources/delombok</outputDirectory>
314
+                        </configuration>
315
+                    </execution>
316
+                </executions>
317
+            </plugin>
318
+            
319
+            <plugin>
320
+                <groupId>org.apache.maven.plugins</groupId>
321
+                <artifactId>maven-checkstyle-plugin</artifactId>
322
+                <version>3.3.0</version>
323
+                <dependencies>
324
+                    <dependency>
325
+                        <groupId>com.puppycrawl.tools</groupId>
326
+                        <artifactId>checkstyle</artifactId>
327
+                        <version>10.12.3</version>
328
+                    </dependency>
329
+                </dependencies>
330
+                <configuration>
331
+                    <configLocation>checkstyle.xml</configLocation>
332
+                    <encoding>UTF-8</encoding>
333
+                    <consoleOutput>true</consoleOutput>
334
+                    <failsOnError>true</failsOnError>
335
+                    <failOnViolation>true</failOnViolation>
336
+                    <violationSeverity>warning</violationSeverity>
337
+                </configuration>
338
+                <executions>
339
+                    <execution>
340
+                        <goals>
341
+                            <goal>check</goal>
342
+                        </goals>
343
+                    </execution>
344
+                </executions>
345
+            </plugin>
346
+        </plugins>
347
+    </build>
348
+</project>

+ 143
- 0
wm-parent/wm-base/pom.xml Просмотреть файл

@@ -0,0 +1,143 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-base</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management Base</name>
18
+    <description>供水管理系统基础模块</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- MyBatis-Plus -->
54
+        <dependency>
55
+            <groupId>com.baomidou</groupId>
56
+            <artifactId>mybatis-plus-boot-starter</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- Database -->
60
+        <dependency>
61
+            <groupId>mysql</groupId>
62
+            <artifactId>mysql-connector-java</artifactId>
63
+        </dependency>
64
+        <dependency>
65
+            <groupId>org.postgresql</groupId>
66
+            <artifactId>postgresql</artifactId>
67
+        </dependency>
68
+        <dependency>
69
+            <groupId>com.taosdata.jdbc</groupId>
70
+            <artifactId>taos-jdbcdriver</artifactId>
71
+        </dependency>
72
+        
73
+        <!-- Redis -->
74
+        <dependency>
75
+            <groupId>org.springframework.boot</groupId>
76
+            <artifactId>spring-boot-starter-data-redis</artifactId>
77
+        </dependency>
78
+        
79
+        <!-- Redisson -->
80
+        <dependency>
81
+            <groupId>org.redisson</groupId>
82
+            <artifactId>redisson-spring-boot-starter</artifactId>
83
+            <version>3.25.1</version>
84
+        </dependency>
85
+        
86
+        <!-- Validation -->
87
+        <dependency>
88
+            <groupId>org.springframework.boot</groupId>
89
+            <artifactId>spring-boot-starter-validation</artifactId>
90
+        </dependency>
91
+        
92
+        <!-- Jackson -->
93
+        <dependency>
94
+            <groupId>com.fasterxml.jackson.core</groupId>
95
+            <artifactId>jackson-databind</artifactId>
96
+        </dependency>
97
+        
98
+        <!-- Lombok -->
99
+        <dependency>
100
+            <groupId>org.projectlombok</groupId>
101
+            <artifactId>lombok</artifactId>
102
+            <optional>true</optional>
103
+        </dependency>
104
+        
105
+        <!-- MapStruct -->
106
+        <dependency>
107
+            <groupId>org.mapstruct</groupId>
108
+            <artifactId>mapstruct</artifactId>
109
+            <optional>true</optional>
110
+        </dependency>
111
+        
112
+        <!-- Test -->
113
+        <dependency>
114
+            <groupId>org.springframework.boot</groupId>
115
+            <artifactId>spring-boot-starter-test</artifactId>
116
+            <scope>test</scope>
117
+        </dependency>
118
+        <dependency>
119
+            <groupId>com.baomidou</groupId>
120
+            <artifactId>mybatis-plus-boot-starter-test</artifactId>
121
+            <version>${mybatis-plus.version}</version>
122
+            <scope>test</scope>
123
+        </dependency>
124
+    </dependencies>
125
+    
126
+    <build>
127
+        <plugins>
128
+            <plugin>
129
+                <groupId>org.springframework.boot</groupId>
130
+                <artifactId>spring-boot-maven-plugin</artifactId>
131
+                <configuration>
132
+                    <mainClass>com.xayunmei.wmbase.WmBaseApplication</mainClass>
133
+                    <excludes>
134
+                        <exclude>
135
+                            <groupId>org.projectlombok</groupId>
136
+                            <artifactId>lombok</artifactId>
137
+                        </exclude>
138
+                    </excludes>
139
+                </configuration>
140
+            </plugin>
141
+        </plugins>
142
+    </build>
143
+</project>

+ 17
- 0
wm-parent/wm-base/src/main/java/com/xayunmei/wmbase/WmBaseApplication.java Просмотреть файл

@@ -0,0 +1,17 @@
1
+package com.xayunmei.wmbase;
2
+
3
+import org.springframework.boot.SpringApplication;
4
+import org.springframework.boot.autoconfigure.SpringBootApplication;
5
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
6
+
7
+/**
8
+ * 基础模块主类
9
+ */
10
+@SpringBootApplication
11
+@EnableDiscoveryClient
12
+public class WmBaseApplication {
13
+
14
+    public static void main(String[] args) {
15
+        SpringApplication.run(WmBaseApplication.class, args);
16
+    }
17
+}

+ 185
- 0
wm-parent/wm-base/src/main/java/com/xayunmei/wmbase/common/R.java Просмотреть файл

@@ -0,0 +1,185 @@
1
+package com.xayunmei.wmbase.common;
2
+
3
+import lombok.Data;
4
+import lombok.experimental.Accessors;
5
+
6
+import java.io.Serializable;
7
+import java.time.LocalDateTime;
8
+
9
+/**
10
+ * 统一响应格式
11
+ */
12
+@Data
13
+@Accessors(chain = true)
14
+public class R<T> implements Serializable {
15
+
16
+    private static final long serialVersionUID = 1L;
17
+
18
+    /**
19
+     * 状态码
20
+     */
21
+    private Integer code;
22
+
23
+    /**
24
+     * 消息
25
+     */
26
+    private String message;
27
+
28
+    /**
29
+     * 数据
30
+     */
31
+    private T data;
32
+
33
+    /**
34
+     * 时间戳
35
+     */
36
+    private LocalDateTime timestamp;
37
+
38
+    public R() {
39
+        this.timestamp = LocalDateTime.now();
40
+    }
41
+
42
+    public R(Integer code, String message) {
43
+        this();
44
+        this.code = code;
45
+        this.message = message;
46
+    }
47
+
48
+    public R(Integer code, String message, T data) {
49
+        this(code, message);
50
+        this.data = data;
51
+    }
52
+
53
+    /**
54
+     * 成功
55
+     */
56
+    public static <T> R<T> success() {
57
+        return new R<>(200, "操作成功");
58
+    }
59
+
60
+    /**
61
+     * 成功,带数据
62
+     */
63
+    public static <T> R<T> success(T data) {
64
+        return new R<>(200, "操作成功", data);
65
+    }
66
+
67
+    /**
68
+     * 成功,带消息和数据
69
+     */
70
+    public static <T> R<T> success(String message, T data) {
71
+        return new R<>(200, message, data);
72
+    }
73
+
74
+    /**
75
+     * 失败
76
+     */
77
+    public static <T> R<T> error() {
78
+        return new R<>(500, "操作失败");
79
+    }
80
+
81
+    /**
82
+     * 失败,带消息
83
+     */
84
+    public static <T> R<T> error(String message) {
85
+        return new R<>(500, message);
86
+    }
87
+
88
+    /**
89
+     * 失败,带状态码和消息
90
+     */
91
+    public static <T> R<T> error(Integer code, String message) {
92
+        return new R<>(code, message);
93
+    }
94
+
95
+    /**
96
+     * 失败,带状态码、消息和数据
97
+     */
98
+    public static <T> R<T> error(Integer code, String message, T data) {
99
+        return new R<>(code, message, data);
100
+    }
101
+
102
+    /**
103
+     * 参数校验失败
104
+     */
105
+    public static <T> R<T> validateFailed() {
106
+        return new R<>(400, "参数校验失败");
107
+    }
108
+
109
+    /**
110
+     * 参数校验失败,带消息
111
+     */
112
+    public static <T> R<T> validateFailed(String message) {
113
+        return new R<>(400, message);
114
+    }
115
+
116
+    /**
117
+     * 未授权
118
+     */
119
+    public static <T> R<T> unauthorized() {
120
+        return new R<>(401, "未授权");
121
+    }
122
+
123
+    /**
124
+     * 未授权,带消息
125
+     */
126
+    public static <T> R<T> unauthorized(String message) {
127
+        return new R<>(401, message);
128
+    }
129
+
130
+    /**
131
+     * 禁止访问
132
+     */
133
+    public static <T> R<T> forbidden() {
134
+        return new R<>(403, "禁止访问");
135
+    }
136
+
137
+    /**
138
+     * 禁止访问,带消息
139
+     */
140
+    public static <T> R<T> forbidden(String message) {
141
+        return new R<>(403, message);
142
+    }
143
+
144
+    /**
145
+     * 资源未找到
146
+     */
147
+    public static <T> R<T> notFound() {
148
+        return new R<>(404, "资源未找到");
149
+    }
150
+
151
+    /**
152
+     * 资源未找到,带消息
153
+     */
154
+    public static <T> R<T> notFound(String message) {
155
+        return new R<>(404, message);
156
+    }
157
+
158
+    /**
159
+     * 服务器内部错误
160
+     */
161
+    public static <T> R<T> internalServerError() {
162
+        return new R<>(500, "服务器内部错误");
163
+    }
164
+
165
+    /**
166
+     * 服务器内部错误,带消息
167
+     */
168
+    public static <T> R<T> internalServerError(String message) {
169
+        return new R<>(500, message);
170
+    }
171
+
172
+    /**
173
+     * 业务错误
174
+     */
175
+    public static <T> R<T> businessError(String message) {
176
+        return new R<>(1001, message);
177
+    }
178
+
179
+    /**
180
+     * 系统错误
181
+     */
182
+    public static <T> R<T> systemError(String message) {
183
+        return new R<>(1002, message);
184
+    }
185
+}

+ 25
- 0
wm-parent/wm-base/src/main/java/com/xayunmei/wmbase/exception/BusinessException.java Просмотреть файл

@@ -0,0 +1,25 @@
1
+package com.xayunmei.wmbase.exception;
2
+
3
+/**
4
+ * 业务异常
5
+ */
6
+public class BusinessException extends RuntimeException {
7
+
8
+    private static final long serialVersionUID = 1L;
9
+
10
+    public BusinessException() {
11
+        super();
12
+    }
13
+
14
+    public BusinessException(String message) {
15
+        super(message);
16
+    }
17
+
18
+    public BusinessException(String message, Throwable cause) {
19
+        super(message, cause);
20
+    }
21
+
22
+    public BusinessException(Throwable cause) {
23
+        super(cause);
24
+    }
25
+}

+ 146
- 0
wm-parent/wm-base/src/main/java/com/xayunmei/wmbase/exception/GlobalExceptionHandler.java Просмотреть файл

@@ -0,0 +1,146 @@
1
+package com.xayunmei.wmbase.exception;
2
+
3
+import com.xayunmei.wmbase.common.R;
4
+import cn.dev33.satoken.exception.NotLoginException;
5
+import cn.dev33.satoken.exception.NotPermissionException;
6
+import cn.dev33.satoken.exception.NotRoleException;
7
+import lombok.extern.slf4j.Slf4j;
8
+import org.springframework.dao.DuplicateKeyException;
9
+import org.springframework.http.HttpStatus;
10
+import org.springframework.validation.BindException;
11
+import org.springframework.web.bind.MethodArgumentNotValidException;
12
+import org.springframework.web.bind.annotation.ExceptionHandler;
13
+import org.springframework.web.bind.annotation.ResponseStatus;
14
+import org.springframework.web.bind.annotation.RestControllerAdvice;
15
+import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
16
+
17
+import javax.validation.ConstraintViolation;
18
+import javax.validation.ConstraintViolationException;
19
+import java.util.stream.Collectors;
20
+
21
+/**
22
+ * 全局异常处理器
23
+ */
24
+@Slf4j
25
+@RestControllerAdvice
26
+public class GlobalExceptionHandler {
27
+
28
+    /**
29
+     * 处理业务异常
30
+     */
31
+    @ExceptionHandler(BusinessException.class)
32
+    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
33
+    public R<?> handleBusinessException(BusinessException e) {
34
+        log.error("业务异常: ", e);
35
+        return R.businessError(e.getMessage());
36
+    }
37
+
38
+    /**
39
+     * 处理系统异常
40
+     */
41
+    @ExceptionHandler(SystemException.class)
42
+    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
43
+    public R<?> handleSystemException(SystemException e) {
44
+        log.error("系统异常: ", e);
45
+        return R.systemError(e.getMessage());
46
+    }
47
+
48
+    /**
49
+     * 处理参数校验异常
50
+     */
51
+    @ExceptionHandler(MethodArgumentNotValidException.class)
52
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
53
+    public R<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
54
+        log.error("参数校验异常: ", e);
55
+        String message = e.getBindingResult().getFieldErrors().stream()
56
+                .map(error -> error.getField() + ": " + error.getDefaultMessage())
57
+                .collect(Collectors.joining(", "));
58
+        return R.validateFailed(message);
59
+    }
60
+
61
+    /**
62
+     * 处理绑定异常
63
+     */
64
+    @ExceptionHandler(BindException.class)
65
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
66
+    public R<?> handleBindException(BindException e) {
67
+        log.error("绑定异常: ", e);
68
+        String message = e.getBindingResult().getFieldErrors().stream()
69
+                .map(error -> error.getField() + ": " + error.getDefaultMessage())
70
+                .collect(Collectors.joining(", "));
71
+        return R.validateFailed(message);
72
+    }
73
+
74
+    /**
75
+     * 处理约束校验异常
76
+     */
77
+    @ExceptionHandler(ConstraintViolationException.class)
78
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
79
+    public R<?> handleConstraintViolationException(ConstraintViolationException e) {
80
+        log.error("约束校验异常: ", e);
81
+        String message = e.getConstraintViolations().stream()
82
+                .map(ConstraintViolation::getMessage)
83
+                .collect(Collectors.joining(", "));
84
+        return R.validateFailed(message);
85
+    }
86
+
87
+    /**
88
+     * 处理参数类型不匹配异常
89
+     */
90
+    @ExceptionHandler(MethodArgumentTypeMismatchException.class)
91
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
92
+    public R<?> handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e) {
93
+        log.error("参数类型不匹配异常: ", e);
94
+        return R.validateFailed("参数类型不匹配: " + e.getName());
95
+    }
96
+
97
+    /**
98
+     * 处理重复键异常
99
+     */
100
+    @ExceptionHandler(DuplicateKeyException.class)
101
+    @ResponseStatus(HttpStatus.CONFLICT)
102
+    public R<?> handleDuplicateKeyException(DuplicateKeyException e) {
103
+        log.error("重复键异常: ", e);
104
+        return R.error(409, "数据已存在");
105
+    }
106
+
107
+    /**
108
+     * 处理未登录异常
109
+     */
110
+    @ExceptionHandler(NotLoginException.class)
111
+    @ResponseStatus(HttpStatus.UNAUTHORIZED)
112
+    public R<?> handleNotLoginException(NotLoginException e) {
113
+        log.error("未登录异常: ", e);
114
+        return R.unauthorized("未登录或登录已过期");
115
+    }
116
+
117
+    /**
118
+     * 处理无权限异常
119
+     */
120
+    @ExceptionHandler(NotPermissionException.class)
121
+    @ResponseStatus(HttpStatus.FORBIDDEN)
122
+    public R<?> handleNotPermissionException(NotPermissionException e) {
123
+        log.error("无权限异常: ", e);
124
+        return R.forbidden("无权限访问");
125
+    }
126
+
127
+    /**
128
+     * 处理无角色异常
129
+     */
130
+    @ExceptionHandler(NotRoleException.class)
131
+    @ResponseStatus(HttpStatus.FORBIDDEN)
132
+    public R<?> handleNotRoleException(NotRoleException e) {
133
+        log.error("无角色异常: ", e);
134
+        return R.forbidden("无角色权限");
135
+    }
136
+
137
+    /**
138
+     * 处理其他异常
139
+     */
140
+    @ExceptionHandler(Exception.class)
141
+    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
142
+    public R<?> handleException(Exception e) {
143
+        log.error("系统异常: ", e);
144
+        return R.internalServerError("系统繁忙,请稍后重试");
145
+    }
146
+}

+ 25
- 0
wm-parent/wm-base/src/main/java/com/xayunmei/wmbase/exception/SystemException.java Просмотреть файл

@@ -0,0 +1,25 @@
1
+package com.xayunmei.wmbase.exception;
2
+
3
+/**
4
+ * 系统异常
5
+ */
6
+public class SystemException extends RuntimeException {
7
+
8
+    private static final long serialVersionUID = 1L;
9
+
10
+    public SystemException() {
11
+        super();
12
+    }
13
+
14
+    public SystemException(String message) {
15
+        super(message);
16
+    }
17
+
18
+    public SystemException(String message, Throwable cause) {
19
+        super(message, cause);
20
+    }
21
+
22
+    public SystemException(Throwable cause) {
23
+        super(cause);
24
+    }
25
+}

+ 148
- 0
wm-parent/wm-base/src/main/resources/application.yml Просмотреть файл

@@ -0,0 +1,148 @@
1
+server:
2
+  port: 8081
3
+
4
+spring:
5
+  application:
6
+    name: wm-base
7
+  profiles:
8
+    active: dev
9
+  
10
+  cloud:
11
+    nacos:
12
+      discovery:
13
+        server-addr: ${NACOS_HOST:localhost}:8848
14
+        namespace: ${NACOS_NAMESPACE:water-management}
15
+        group: ${NACOS_GROUP:DEFAULT_GROUP}
16
+      config:
17
+        server-addr: ${NACOS_HOST:localhost}:8848
18
+        namespace: ${NACOS_NAMESPACE:water-management}
19
+        group: ${NACOS_GROUP:DEFAULT_GROUP}
20
+        file-extension: yml
21
+        shared-configs:
22
+          - data-id: base-common-config.yml
23
+            group: ${NACOS_GROUP:DEFAULT_GROUP}
24
+            refresh: true
25
+    
26
+  # 数据源配置
27
+  datasource:
28
+    type: com.zaxxer.hikari.HikariDataSource
29
+    driver-class-name: ${DB_DRIVER:com.mysql.jdbc.Driver}
30
+    url: ${DB_URL:jdbc:mysql://localhost:3306/water_management?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true}
31
+    username: ${DB_USERNAME:root}
32
+    password: ${DB_PASSWORD:root}
33
+    hikari:
34
+      minimum-idle: 5
35
+      idle-timeout: 300000
36
+      maximum-pool-size: 20
37
+      max-lifetime: 1800000
38
+      connection-timeout: 30000
39
+      connection-test-query: SELECT 1
40
+  
41
+  # MyBatis-Plus配置
42
+  mybatis-plus:
43
+    mapper-locations: classpath:mapper/*.xml
44
+    type-aliases-package: com.xayunmei.wmbase.entity
45
+    configuration:
46
+      map-underscore-to-camel-case: true
47
+      cache-enabled: true
48
+      call-setters-on-nulls: true
49
+      jdbc-type-for-null: 'null'
50
+      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
51
+    global-config:
52
+      db-config:
53
+        logic-delete-field: deleted
54
+        logic-delete-value: 1
55
+        logic-not-delete-value: 0
56
+        id-type: ASSIGN_ID
57
+        table-prefix: wm_
58
+        column-underline: true
59
+  
60
+  # Redis配置
61
+  redis:
62
+    host: ${REDIS_HOST:localhost}
63
+    port: ${REDIS_PORT:6379}
64
+    password: ${REDIS_PASSWORD:}
65
+    database: 0
66
+    timeout: 3000ms
67
+    lettuce:
68
+      pool:
69
+        max-active: 200
70
+        max-idle: 50
71
+        min-idle: 10
72
+        max-wait: 2000ms
73
+
74
+  # 缓存配置
75
+  cache:
76
+    type: redis
77
+    redis:
78
+      time-to-live: 1h
79
+      cache-null-values: false
80
+
81
+# Sa-Token配置
82
+sa-token:
83
+  # token名称
84
+  token-name: Authorization
85
+  # token有效期,单位: 秒,默认30天 -1表示永不过期
86
+  timeout: 2592000
87
+  # token风格
88
+  is-concurrent: true
89
+  # 是否允许同一账号多处登录
90
+  is-share: true
91
+  # 是否踢掉同账号登录
92
+  iskick: false
93
+  # 是否踢掉同账号登录 - kick模式下被踢出的前端token
94
+  kickout-mode: 1
95
+  # jwt秘钥
96
+  jwt-secret-key: ${SA_TOKEN_JWT_SECRET_KEY:water-management-system-secret-key}
97
+
98
+# 日志配置
99
+logging:
100
+  level:
101
+    org.springframework.cloud: INFO
102
+    org.springframework.boot: INFO
103
+    com.xayunmei.wmbase: DEBUG
104
+    com.alibaba.nacos.client: INFO
105
+    com.baomidou.mybatisplus: DEBUG
106
+    cn.dev33.satoken: DEBUG
107
+
108
+# Actuator配置
109
+management:
110
+  endpoints:
111
+    web:
112
+      exposure:
113
+        include: health,info,metrics
114
+  endpoint:
115
+    health:
116
+      show-details: always
117
+
118
+# 自定义配置
119
+wm:
120
+  base:
121
+    # 文件上传配置
122
+    upload:
123
+      path: ${UPLOAD_PATH:/data/water-management/upload}
124
+      max-size: 10MB
125
+      allowed-types: image/jpeg,image/png,image/gif,image/webp,application/pdf
126
+    # 分页配置
127
+    page:
128
+      default-size: 10
129
+      max-size: 100
130
+    # 统一配置
131
+    common:
132
+      # 不需要验证的路径
133
+      no-auth-paths:
134
+        - /api/auth/login
135
+        - /api/auth/register
136
+        - /api/auth/refresh
137
+        - /api/common/captcha
138
+        - /api/common/health
139
+        - /api/common/info
140
+      # 跨域配置
141
+      cors:
142
+        enabled: true
143
+        allowed-origins: "*"
144
+        allowed-methods: "*"
145
+        allowed-headers: "*"
146
+        exposed-headers: "*"
147
+        allow-credentials: true
148
+        max-age: 3600

+ 141
- 0
wm-parent/wm-bi/pom.xml Просмотреть файл

@@ -0,0 +1,141 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-bi</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management BI</name>
18
+    <description>供水管理系统大数据分析服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- MyBatis-Plus -->
54
+        <dependency>
55
+            <groupId>com.baomidou</groupId>
56
+            <artifactId>mybatis-plus-boot-starter</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- Database -->
60
+        <dependency>
61
+            <groupId>mysql</groupId>
62
+            <artifactId>mysql-connector-java</artifactId>
63
+        </dependency>
64
+        
65
+        <!-- Spring Data Redis -->
66
+        <dependency>
67
+            <groupId>org.springframework.boot</groupId>
68
+            <artifactId>spring-boot-starter-data-redis</artifactId>
69
+        </dependency>
70
+        
71
+        <!-- Message Queue -->
72
+        <dependency>
73
+            <groupId>org.springframework.kafka</groupId>
74
+            <artifactId>spring-kafka</artifactId>
75
+        </dependency>
76
+        
77
+        <!-- Elasticsearch -->
78
+        <dependency>
79
+            <groupId>org.springframework.boot</groupId>
80
+            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
81
+        </dependency>
82
+        
83
+        <!-- Apache POI -->
84
+        <dependency>
85
+            <groupId>org.apache.poi</groupId>
86
+            <artifactId>poi</artifactId>
87
+            <version>5.2.5</version>
88
+        </dependency>
89
+        <dependency>
90
+            <groupId>org.apache.poi</groupId>
91
+            <artifactId>poi-ooxml</artifactId>
92
+            <version>5.2.5</version>
93
+        </dependency>
94
+        
95
+        <!-- GeoJSON -->
96
+        <dependency>
97
+            <groupId>org.geojson</groupId>
98
+            <artifactId>geojson-java</artifactId>
99
+            <version>1.0.0</version>
100
+        </dependency>
101
+        
102
+        <!-- Statistics -->
103
+        <dependency>
104
+            <groupId>org.apache.commons</groupId>
105
+            <artifactId>commons-math3</artifactId>
106
+            <version>3.6.1</version>
107
+        </dependency>
108
+        
109
+        <!-- Lombok -->
110
+        <dependency>
111
+            <groupId>org.projectlombok</groupId>
112
+            <artifactId>lombok</artifactId>
113
+            <optional>true</optional>
114
+        </dependency>
115
+        
116
+        <!-- Test -->
117
+        <dependency>
118
+            <groupId>org.springframework.boot</groupId>
119
+            <artifactId>spring-boot-starter-test</artifactId>
120
+            <scope>test</scope>
121
+        </dependency>
122
+    </dependencies>
123
+    
124
+    <build>
125
+        <plugins>
126
+            <plugin>
127
+                <groupId>org.springframework.boot</groupId>
128
+                <artifactId>spring-boot-maven-plugin</artifactId>
129
+                <configuration>
130
+                    <mainClass>com.xayunmei.wmbi.WmBiApplication</mainClass>
131
+                    <excludes>
132
+                        <exclude>
133
+                            <groupId>org.projectlombok</groupId>
134
+                            <artifactId>lombok</artifactId>
135
+                        </exclude>
136
+                    </excludes>
137
+                </configuration>
138
+            </plugin>
139
+        </plugins>
140
+    </build>
141
+</project>

+ 110
- 0
wm-parent/wm-bpm/pom.xml Просмотреть файл

@@ -0,0 +1,110 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-bpm</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management BPM</name>
18
+    <description>供水管理系统业务流程管理服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- Activiti -->
54
+        <dependency>
55
+            <groupId>org.activiti</groupId>
56
+            <artifactId>activiti-spring-boot-starter</artifactId>
57
+            <version>7.0.0.GA</version>
58
+        </dependency>
59
+        
60
+        <!-- MyBatis-Plus -->
61
+        <dependency>
62
+            <groupId>com.baomidou</groupId>
63
+            <artifactId>mybatis-plus-boot-starter</artifactId>
64
+        </dependency>
65
+        
66
+        <!-- Database -->
67
+        <dependency>
68
+            <groupId>mysql</groupId>
69
+            <artifactId>mysql-connector-java</artifactId>
70
+        </dependency>
71
+        
72
+        <!-- Spring Data Redis -->
73
+        <dependency>
74
+            <groupId>org.springframework.boot</groupId>
75
+            <artifactId>spring-boot-starter-data-redis</artifactId>
76
+        </dependency>
77
+        
78
+        <!-- Lombok -->
79
+        <dependency>
80
+            <groupId>org.projectlombok</groupId>
81
+            <artifactId>lombok</artifactId>
82
+            <optional>true</optional>
83
+        </dependency>
84
+        
85
+        <!-- Test -->
86
+        <dependency>
87
+            <groupId>org.springframework.boot</groupId>
88
+            <artifactId>spring-boot-starter-test</artifactId>
89
+            <scope>test</scope>
90
+        </dependency>
91
+    </dependencies>
92
+    
93
+    <build>
94
+        <plugins>
95
+            <plugin>
96
+                <groupId>org.springframework.boot</groupId>
97
+                <artifactId>spring-boot-maven-plugin</artifactId>
98
+                <configuration>
99
+                    <mainClass>com.xayunmei.wmbpm.WmBpmApplication</mainClass>
100
+                    <excludes>
101
+                        <exclude>
102
+                            <groupId>org.projectlombok</groupId>
103
+                            <artifactId>lombok</artifactId>
104
+                        </exclude>
105
+                    </excludes>
106
+                </configuration>
107
+            </plugin>
108
+        </plugins>
109
+    </build>
110
+</project>

+ 127
- 0
wm-parent/wm-data-engine/pom.xml Просмотреть файл

@@ -0,0 +1,127 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-data-engine</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management Data Engine</name>
18
+    <description>供水管理系统数据引擎服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- MyBatis-Plus -->
54
+        <dependency>
55
+            <groupId>com.baomidou</groupId>
56
+            <artifactId>mybatis-plus-boot-starter</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- Database -->
60
+        <dependency>
61
+            <groupId>mysql</groupId>
62
+            <artifactId>mysql-connector-java</artifactId>
63
+        </dependency>
64
+        <dependency>
65
+            <groupId>org.postgresql</groupId>
66
+            <artifactId>postgresql</artifactId>
67
+        </dependency>
68
+        <dependency>
69
+            <groupId>com.taosdata.jdbc</groupId>
70
+            <artifactId>taos-jdbcdriver</artifactId>
71
+        </dependency>
72
+        
73
+        <!-- Spring Data Redis -->
74
+        <dependency>
75
+            <groupId>org.springframework.boot</groupId>
76
+            <artifactId>spring-boot-starter-data-redis</artifactId>
77
+        </dependency>
78
+        
79
+        <!-- Message Queue -->
80
+        <dependency>
81
+            <groupId>org.springframework.kafka</groupId>
82
+            <artifactId>spring-kafka</artifactId>
83
+        </dependency>
84
+        
85
+        <!-- Cache -->
86
+        <dependency>
87
+            <groupId>org.springframework.boot</groupId>
88
+            <artifactId>spring-boot-starter-cache</artifactId>
89
+        </dependency>
90
+        <dependency>
91
+            <groupId>com.github.ben-manes.caffeine</groupId>
92
+            <artifactId>caffeine</artifactId>
93
+        </dependency>
94
+        
95
+        <!-- Lombok -->
96
+        <dependency>
97
+            <groupId>org.projectlombok</groupId>
98
+            <artifactId>lombok</artifactId>
99
+            <optional>true</optional>
100
+        </dependency>
101
+        
102
+        <!-- Test -->
103
+        <dependency>
104
+            <groupId>org.springframework.boot</groupId>
105
+            <artifactId>spring-boot-starter-test</artifactId>
106
+            <scope>test</scope>
107
+        </dependency>
108
+    </dependencies>
109
+    
110
+    <build>
111
+        <plugins>
112
+            <plugin>
113
+                <groupId>org.springframework.boot</groupId>
114
+                <artifactId>spring-boot-maven-plugin</artifactId>
115
+                <configuration>
116
+                    <mainClass>com.xayunmei.wmdataprocessor.WmDataEngineApplication</mainClass>
117
+                    <excludes>
118
+                        <exclude>
119
+                            <groupId>org.projectlombok</groupId>
120
+                            <artifactId>lombok</artifactId>
121
+                        </exclude>
122
+                    </excludes>
123
+                </configuration>
124
+            </plugin>
125
+        </plugins>
126
+    </build>
127
+</project>

+ 125
- 0
wm-parent/wm-gateway/pom.xml Просмотреть файл

@@ -0,0 +1,125 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-gateway</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management Gateway</name>
18
+    <description>供水管理系统网关服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Gateway -->
28
+        <dependency>
29
+            <groupId>org.springframework.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-gateway</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Spring Cloud Alibaba Nacos Config -->
40
+        <dependency>
41
+            <groupId>com.alibaba.cloud</groupId>
42
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
43
+        </dependency>
44
+        
45
+        <!-- Sa-Token -->
46
+        <dependency>
47
+            <groupId>cn.dev33</groupId>
48
+            <artifactId>sa-token-spring-boot-starter</artifactId>
49
+        </dependency>
50
+        <dependency>
51
+            <groupId>cn.dev33</groupId>
52
+            <artifactId>sa-token-jwt</artifactId>
53
+        </dependency>
54
+        <dependency>
55
+            <groupId>cn.dev33</groupId>
56
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- Redis -->
60
+        <dependency>
61
+            <groupId>org.springframework.boot</groupId>
62
+            <artifactId>spring-boot-starter-data-redis</artifactId>
63
+        </dependency>
64
+        
65
+        <!-- Resilience4j -->
66
+        <dependency>
67
+            <groupId>io.github.resilience4j</groupId>
68
+            <artifactId>resilience4j-spring-boot2</artifactId>
69
+        </dependency>
70
+        <dependency>
71
+            <groupId>io.github.resilience4j</groupId>
72
+            <artifactId>resilience4j-reactor</artifactId>
73
+        </dependency>
74
+        
75
+        <!-- Spring Boot Actuator -->
76
+        <dependency>
77
+            <groupId>org.springframework.boot</groupId>
78
+            <artifactId>spring-boot-starter-actuator</artifactId>
79
+        </dependency>
80
+        
81
+        <!-- Lombok -->
82
+        <dependency>
83
+            <groupId>org.projectlombok</groupId>
84
+            <artifactId>lombok</artifactId>
85
+            <optional>true</optional>
86
+        </dependency>
87
+        
88
+        <!-- MapStruct -->
89
+        <dependency>
90
+            <groupId>org.mapstruct</groupId>
91
+            <artifactId>mapstruct</artifactId>
92
+            <optional>true</optional>
93
+        </dependency>
94
+        
95
+        <!-- Test -->
96
+        <dependency>
97
+            <groupId>org.springframework.boot</groupId>
98
+            <artifactId>spring-boot-starter-test</artifactId>
99
+            <scope>test</scope>
100
+        </dependency>
101
+        <dependency>
102
+            <groupId>org.springframework.cloud</groupId>
103
+            <artifactId>spring-cloud-starter-webflux</artifactId>
104
+            <scope>test</scope>
105
+        </dependency>
106
+    </dependencies>
107
+    
108
+    <build>
109
+        <plugins>
110
+            <plugin>
111
+                <groupId>org.springframework.boot</groupId>
112
+                <artifactId>spring-boot-maven-plugin</artifactId>
113
+                <configuration>
114
+                    <mainClass>com.xayunmei.wmgateway.WmGatewayApplication</mainClass>
115
+                    <excludes>
116
+                        <exclude>
117
+                            <groupId>org.projectlombok</groupId>
118
+                            <artifactId>lombok</artifactId>
119
+                        </exclude>
120
+                    </excludes>
121
+                </configuration>
122
+            </plugin>
123
+        </plugins>
124
+    </build>
125
+</project>

+ 14
- 0
wm-parent/wm-gateway/src/main/java/com/xayunmei/wmgateway/WmGatewayApplication.java Просмотреть файл

@@ -0,0 +1,14 @@
1
+package com.xayunmei.wmgateway;
2
+
3
+import org.springframework.boot.SpringApplication;
4
+import org.springframework.boot.autoconfigure.SpringBootApplication;
5
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
6
+
7
+@SpringBootApplication
8
+@EnableDiscoveryClient
9
+public class WmGatewayApplication {
10
+
11
+    public static void main(String[] args) {
12
+        SpringApplication.run(WmGatewayApplication.class, args);
13
+    }
14
+}

+ 49
- 0
wm-parent/wm-gateway/src/main/java/com/xayunmei/wmgateway/filter/GatewayGlobalFilter.java Просмотреть файл

@@ -0,0 +1,49 @@
1
+package com.xayunmei.wmgateway.filter;
2
+
3
+import cn.dev33.satoken.context.SaHolder;
4
+import cn.dev33.satoken.filter.SaServletFilter;
5
+import cn.dev33.satoken.router.SaRouter;
6
+import cn.dev33.satoken.strategy.SaStrategy;
7
+import org.springframework.context.annotation.Bean;
8
+import org.springframework.context.annotation.Configuration;
9
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
10
+
11
+/**
12
+ * Gateway全局过滤器配置
13
+ */
14
+@Configuration
15
+public class GatewayGlobalFilter implements WebMvcConfigurer {
16
+
17
+    @Bean
18
+    public SaServletFilter getSaServletFilter() {
19
+        return new SaServletFilter()
20
+            .setExcludePaths("/auth/**", "/actuator/**", "/favicon.ico")
21
+            .addInclude(r -> {
22
+                SaRouter.match("/**")
23
+                    .notMatch("/auth/**")
24
+                    .notMatch("/actuator/**")
25
+                    .notMatch("/favicon.ico")
26
+                    .check(r -> {
27
+                        // 统一鉴权
28
+                        SaStrategy.instance.notLoginHandle = () -> {
29
+                            throw new cn.dev33.satoken.exception.NotLoginException("无效的token", 200);
30
+                        };
31
+                        cn.dev33.satoken.SaManager.getSaTokenContext().setResponse(SaHolder.getResponse());
32
+                        cn.dev33.satoken.SaManager.getSaTokenContext().setRequest(SaHolder.getRequest());
33
+                        cn.dev33.satoken.SaManager.getSaTokenContext().setSession(SaHolder.getSession());
34
+                        cn.dev33.satoken.SaManager.getSaTokenContext().setSaTokenAction(r -> {
35
+                            throw new cn.dev33.satoken.exception.NotLoginException("无效的token", 200);
36
+                        });
37
+                    });
38
+            })
39
+            .setAuth(r -> {
40
+                // 统一认证
41
+                cn.dev33.satoken.SaManager.getSaTokenContext().setResponse(SaHolder.getResponse());
42
+                cn.dev33.satoken.SaManager.getSaTokenContext().setRequest(SaHolder.getRequest());
43
+                cn.dev33.satoken.SaManager.getSaTokenContext().setSession(SaHolder.getSession());
44
+                cn.dev33.satoken.SaManager.getSaTokenContext().setSaTokenAction(r -> {
45
+                    throw new cn.dev33.satoken.exception.NotLoginException("无效的token", 200);
46
+                });
47
+            });
48
+    }
49
+}

+ 192
- 0
wm-parent/wm-gateway/src/main/resources/application.yml Просмотреть файл

@@ -0,0 +1,192 @@
1
+server:
2
+  port: 8080
3
+
4
+spring:
5
+  application:
6
+    name: wm-gateway
7
+  profiles:
8
+    active: dev
9
+  
10
+  cloud:
11
+    nacos:
12
+      discovery:
13
+        server-addr: ${NACOS_HOST:localhost}:8848
14
+        namespace: ${NACOS_NAMESPACE:water-management}
15
+        group: ${NACOS_GROUP:DEFAULT_GROUP}
16
+      config:
17
+        server-addr: ${NACOS_HOST:localhost}:8848
18
+        namespace: ${NACOS_NAMESPACE:water-management}
19
+        group: ${NACOS_GROUP:DEFAULT_GROUP}
20
+        file-extension: yml
21
+        shared-configs:
22
+          - data-id: gateway-common-config.yml
23
+            group: ${NACOS_GROUP:DEFAULT_GROUP}
24
+            refresh: true
25
+    
26
+    gateway:
27
+      discovery:
28
+        locator:
29
+          enabled: true
30
+          lower-case-service-id: true
31
+      routes:
32
+        # 基础服务
33
+        - id: wm-base
34
+          uri: lb://wm-base
35
+          predicates:
36
+            - Path=/api/base/**
37
+          filters:
38
+            - StripPrefix=1
39
+        
40
+        # IoT服务
41
+        - id: wm-iot
42
+          uri: lb://wm-iot
43
+          predicates:
44
+            - Path=/api/iot/**
45
+          filters:
46
+            - StripPrefix=1
47
+        
48
+        # 数据引擎服务
49
+        - id: wm-data-engine
50
+          uri: lb://wm-data-engine
51
+          predicates:
52
+            - Path=/api/data-engine/**
53
+          filters:
54
+            - StripPrefix=1
55
+        
56
+        # BPM服务
57
+        - id: wm-bpm
58
+          uri: lb://wm-bpm
59
+          predicates:
60
+            - Path=/api/bpm/**
61
+          filters:
62
+            - StripPrefix=1
63
+        
64
+        # 生产管理服务
65
+        - id: wm-production
66
+          uri: lb://wm-production
67
+          predicates:
68
+            - Path=/api/production/**
69
+          filters:
70
+            - StripPrefix=1
71
+        
72
+        # 营业收费服务
73
+        - id: wm-revenue
74
+          uri: lb://wm-revenue
75
+          predicates:
76
+            - Path=/api/revenue/**
77
+          filters:
78
+            - StripPrefix=1
79
+        
80
+        # 巡检服务
81
+        - id: wm-patrol
82
+          uri: lb://wm-patrol
83
+          predicates:
84
+            - Path=/api/patrol/**
85
+          filters:
86
+            - StripPrefix=1
87
+        
88
+        # BI分析服务
89
+        - id: wm-bi
90
+          uri: lb://wm-bi
91
+          predicates:
92
+            - Path=/api/bi/**
93
+          filters:
94
+            - StripPrefix=1
95
+        
96
+        # 通知服务
97
+        - id: wm-notify
98
+          uri: lb://wm-notify
99
+          predicates:
100
+            - Path=/api/notify/**
101
+          filters:
102
+            - StripPrefix=1
103
+        
104
+        # 任务调度服务
105
+        - id: wm-job
106
+          uri: lb://wm-job
107
+          predicates:
108
+            - Path=/api/job/**
109
+          filters:
110
+            - StripPrefix=1
111
+        
112
+        # 公共服务路由
113
+        - id: wm-api
114
+          uri: lb://wm-base
115
+          predicates:
116
+            - Path=/api/common/**
117
+          filters:
118
+            - StripPrefix=1
119
+      default-filters:
120
+        - name: GlobalFilter
121
+          args:
122
+            order: 0
123
+            filterClass: com.xayunmei.wmgateway.filter.GatewayGlobalFilter
124
+    
125
+  # Redis配置
126
+  redis:
127
+    host: ${REDIS_HOST:localhost}
128
+    port: ${REDIS_PORT:6379}
129
+    password: ${REDIS_PASSWORD:}
130
+    database: 0
131
+    timeout: 3000ms
132
+    lettuce:
133
+      pool:
134
+        max-active: 200
135
+        max-idle: 50
136
+        min-idle: 10
137
+        max-wait: 2000ms
138
+
139
+  # 日志配置
140
+  logging:
141
+    level:
142
+      org.springframework.cloud.gateway: DEBUG
143
+      com.xayunmei.wmgateway: DEBUG
144
+
145
+# Sa-Token配置
146
+sa-token:
147
+  # token名称
148
+  token-name: Authorization
149
+  # token有效期,单位: 秒,默认30天 -1表示永不过期
150
+  timeout: 2592000
151
+  # token风格
152
+  is-concurrent: true
153
+  # 是否允许同一账号多处登录
154
+  is-share: true
155
+  # 是否踢掉同账号登录
156
+  iskick: false
157
+  # 是否踢掉同账号登录 - kick模式下被踢出的前端token
158
+  kickout-mode: 1
159
+  # jwt秘钥
160
+  jwt-secret-key: ${SA_TOKEN_JWT_SECRET_KEY:water-management-system-secret-key}
161
+
162
+# 自定义配置
163
+wm:
164
+  gateway:
165
+    # 跨域配置
166
+    cors:
167
+      enabled: true
168
+      allowed-origins: "*"
169
+      allowed-methods: "*"
170
+      allowed-headers: "*"
171
+      exposed-headers: "*"
172
+      allow-credentials: true
173
+      max-age: 3600
174
+    # 限流配置
175
+    rate-limit:
176
+      enabled: true
177
+      # 每秒最大请求数
178
+      max-requests: 1000
179
+      # 每秒令牌数
180
+      replenish-rate: 1000
181
+      # 初始令牌数
182
+      burst-capacity: 2000
183
+
184
+# Actuator配置
185
+management:
186
+  endpoints:
187
+    web:
188
+      exposure:
189
+        include: health,info,metrics,gateway,routes
190
+  endpoint:
191
+    health:
192
+      show-details: always

+ 123
- 0
wm-parent/wm-iot/pom.xml Просмотреть файл

@@ -0,0 +1,123 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-iot</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management IoT</name>
18
+    <description>供水管理系统物联网服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- EMQX -->
54
+        <dependency>
55
+            <groupId>org.emqx</groupId>
56
+            <artifactId>emqx-broker</artifactId>
57
+            <version>4.4.1</version>
58
+            <scope>provided</scope>
59
+        </dependency>
60
+        
61
+        <!-- WebSocket -->
62
+        <dependency>
63
+            <groupId>org.springframework.boot</groupId>
64
+            <artifactId>spring-boot-starter-websocket</artifactId>
65
+        </dependency>
66
+        
67
+        <!-- Message Queue -->
68
+        <dependency>
69
+            <groupId>org.springframework.kafka</groupId>
70
+            <artifactId>spring-kafka</artifactId>
71
+        </dependency>
72
+        
73
+        <!-- GeoJSON -->
74
+        <dependency>
75
+            <groupId>org.geojson</groupId>
76
+            <artifactId>geojson-java</artifactId>
77
+            <version>1.0.0</version>
78
+        </dependency>
79
+        
80
+        <!-- Spring Data Redis -->
81
+        <dependency>
82
+            <groupId>org.springframework.boot</groupId>
83
+            <artifactId>spring-boot-starter-data-redis</artifactId>
84
+        </dependency>
85
+        
86
+        <!-- Lombok -->
87
+        <dependency>
88
+            <groupId>org.projectlombok</groupId>
89
+            <artifactId>lombok</artifactId>
90
+            <optional>true</optional>
91
+        </dependency>
92
+        
93
+        <!-- Test -->
94
+        <dependency>
95
+            <groupId>org.springframework.boot</groupId>
96
+            <artifactId>spring-boot-starter-test</artifactId>
97
+            <scope>test</scope>
98
+        </dependency>
99
+        <dependency>
100
+            <groupId>org.springframework.kafka</groupId>
101
+            <artifactId>spring-kafka-test</artifactId>
102
+            <scope>test</scope>
103
+        </dependency>
104
+    </dependencies>
105
+    
106
+    <build>
107
+        <plugins>
108
+            <plugin>
109
+                <groupId>org.springframework.boot</groupId>
110
+                <artifactId>spring-boot-maven-plugin</artifactId>
111
+                <configuration>
112
+                    <mainClass>com.xayunmei.wmiot.WmIotApplication</mainClass>
113
+                    <excludes>
114
+                        <exclude>
115
+                            <groupId>org.projectlombok</groupId>
116
+                            <artifactId>lombok</artifactId>
117
+                        </exclude>
118
+                    </excludes>
119
+                </configuration>
120
+            </plugin>
121
+        </plugins>
122
+    </build>
123
+</project>

+ 121
- 0
wm-parent/wm-job/pom.xml Просмотреть файл

@@ -0,0 +1,121 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-job</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management Job Scheduler</name>
18
+    <description>供水管理系统定时任务调度服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- Quartz -->
54
+        <dependency>
55
+            <groupId>org.springframework.boot</groupId>
56
+            <artifactId>spring-boot-starter-quartz</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- MyBatis-Plus -->
60
+        <dependency>
61
+            <groupId>com.baomidou</groupId>
62
+            <artifactId>mybatis-plus-boot-starter</artifactId>
63
+        </dependency>
64
+        
65
+        <!-- Database -->
66
+        <dependency>
67
+            <groupId>mysql</groupId>
68
+            <artifactId>mysql-connector-java</artifactId>
69
+        </dependency>
70
+        
71
+        <!-- Spring Data Redis -->
72
+        <dependency>
73
+            <groupId>org.springframework.boot</groupId>
74
+            <artifactId>spring-boot-starter-data-redis</artifactId>
75
+        </dependency>
76
+        
77
+        <!-- Message Queue -->
78
+        <dependency>
79
+            <groupId>org.springframework.kafka</groupId>
80
+            <artifactId>spring-kafka</artifactId>
81
+        </dependency>
82
+        
83
+        <!-- WebSocket -->
84
+        <dependency>
85
+            <groupId>org.springframework.boot</groupId>
86
+            <artifactId>spring-boot-starter-websocket</artifactId>
87
+        </dependency>
88
+        
89
+        <!-- Lombok -->
90
+        <dependency>
91
+            <groupId>org.projectlombok</groupId>
92
+            <artifactId>lombok</artifactId>
93
+            <optional>true</optional>
94
+        </dependency>
95
+        
96
+        <!-- Test -->
97
+        <dependency>
98
+            <groupId>org.springframework.boot</groupId>
99
+            <artifactId>spring-boot-starter-test</artifactId>
100
+            <scope>test</scope>
101
+        </dependency>
102
+    </dependencies>
103
+    
104
+    <build>
105
+        <plugins>
106
+            <plugin>
107
+                <groupId>org.springframework.boot</groupId>
108
+                <artifactId>spring-boot-maven-plugin</artifactId>
109
+                <configuration>
110
+                    <mainClass>com.xayunmei.wmjob.WmJobApplication</mainClass>
111
+                    <excludes>
112
+                        <exclude>
113
+                            <groupId>org.projectlombok</groupId>
114
+                            <artifactId>lombok</artifactId>
115
+                        </exclude>
116
+                    </excludes>
117
+                </configuration>
118
+            </plugin>
119
+        </plugins>
120
+    </build>
121
+</project>

+ 140
- 0
wm-parent/wm-notify/pom.xml Просмотреть файл

@@ -0,0 +1,140 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-notify</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management Notification</name>
18
+    <description>供水管理系统消息通知服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- WebSocket -->
54
+        <dependency>
55
+            <groupId>org.springframework.boot</groupId>
56
+            <artifactId>spring-boot-starter-websocket</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- MyBatis-Plus -->
60
+        <dependency>
61
+            <groupId>com.baomidou</groupId>
62
+            <artifactId>mybatis-plus-boot-starter</artifactId>
63
+        </dependency>
64
+        
65
+        <!-- Database -->
66
+        <dependency>
67
+            <groupId>mysql</groupId>
68
+            <artifactId>mysql-connector-java</artifactId>
69
+        </dependency>
70
+        
71
+        <!-- Spring Data Redis -->
72
+        <dependency>
73
+            <groupId>org.springframework.boot</groupId>
74
+            <artifactId>spring-boot-starter-data-redis</artifactId>
75
+        </dependency>
76
+        
77
+        <!-- Message Queue -->
78
+        <dependency>
79
+            <groupId>org.springframework.kafka</groupId>
80
+            <artifactId>spring-kafka</artifactId>
81
+        </dependency>
82
+        
83
+        <!-- SMS -->
84
+        <dependency>
85
+            <groupId>com.aliyun</groupId>
86
+            <artifactId>dysmsapi20170525</artifactId>
87
+            <version>2.0.1</version>
88
+        </dependency>
89
+        
90
+        <!-- Push notifications -->
91
+        <dependency>
92
+            <groupId>jpush</groupId>
93
+            <artifactId>jpush-client</artifactId>
94
+            <version>3.7.3</version>
95
+        </dependency>
96
+        
97
+        <!-- Template engine -->
98
+        <dependency>
99
+            <groupId>org.freemarker</groupId>
100
+            <artifactId>freemarker</artifactId>
101
+        </dependency>
102
+        
103
+        <!-- Lombok -->
104
+        <dependency>
105
+            <groupId>org.projectlombok</groupId>
106
+            <artifactId>lombok</artifactId>
107
+            <optional>true</optional>
108
+        </dependency>
109
+        
110
+        <!-- Test -->
111
+        <dependency>
112
+            <groupId>org.springframework.boot</groupId>
113
+            <artifactId>spring-boot-starter-test</artifactId>
114
+            <scope>test</scope>
115
+        </dependency>
116
+        <dependency>
117
+            <groupId>org.springframework.kafka</groupId>
118
+            <artifactId>spring-kafka-test</artifactId>
119
+            <scope>test</scope>
120
+        </dependency>
121
+    </dependencies>
122
+    
123
+    <build>
124
+        <plugins>
125
+            <plugin>
126
+                <groupId>org.springframework.boot</groupId>
127
+                <artifactId>spring-boot-maven-plugin</artifactId>
128
+                <configuration>
129
+                    <mainClass>com.xayunmei.wmnotify.WmNotifyApplication</mainClass>
130
+                    <excludes>
131
+                        <exclude>
132
+                            <groupId>org.projectlombok</groupId>
133
+                            <artifactId>lombok</artifactId>
134
+                        </exclude>
135
+                    </excludes>
136
+                </configuration>
137
+            </plugin>
138
+        </plugins>
139
+    </build>
140
+</project>

+ 122
- 0
wm-parent/wm-patrol/pom.xml Просмотреть файл

@@ -0,0 +1,122 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-patrol</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management Patrol</name>
18
+    <description>供水管理系统巡检服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- MyBatis-Plus -->
54
+        <dependency>
55
+            <groupId>com.baomidou</groupId>
56
+            <artifactId>mybatis-plus-boot-starter</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- Database -->
60
+        <dependency>
61
+            <groupId>mysql</groupId>
62
+            <artifactId>mysql-connector-java</artifactId>
63
+        </dependency>
64
+        
65
+        <!-- Spring Data Redis -->
66
+        <dependency>
67
+            <groupId>org.springframework.boot</groupId>
68
+            <artifactId>spring-boot-starter-data-redis</artifactId>
69
+        </dependency>
70
+        
71
+        <!-- Message Queue -->
72
+        <dependency>
73
+            <groupId>org.springframework.kafka</groupId>
74
+            <artifactId>spring-kafka</artifactId>
75
+        </dependency>
76
+        
77
+        <!-- GeoJSON -->
78
+        <dependency>
79
+            <groupId>org.geojson</groupId>
80
+            <artifactId>geojson-java</artifactId>
81
+            <version>1.0.0</version>
82
+        </dependency>
83
+        
84
+        <!-- Location services -->
85
+        <dependency>
86
+            <groupId>org.springframework.boot</groupId>
87
+            <artifactId>spring-boot-starter-web</artifactId>
88
+        </dependency>
89
+        
90
+        <!-- Lombok -->
91
+        <dependency>
92
+            <groupId>org.projectlombok</groupId>
93
+            <artifactId>lombok</artifactId>
94
+            <optional>true</optional>
95
+        </dependency>
96
+        
97
+        <!-- Test -->
98
+        <dependency>
99
+            <groupId>org.springframework.boot</groupId>
100
+            <artifactId>spring-boot-starter-test</artifactId>
101
+            <scope>test</scope>
102
+        </dependency>
103
+    </dependencies>
104
+    
105
+    <build>
106
+        <plugins>
107
+            <plugin>
108
+                <groupId>org.springframework.boot</groupId>
109
+                <artifactId>spring-boot-maven-plugin</artifactId>
110
+                <configuration>
111
+                    <mainClass>com.xayunmei.wmpatrol.WmPatrolApplication</mainClass>
112
+                    <excludes>
113
+                        <exclude>
114
+                            <groupId>org.projectlombok</groupId>
115
+                            <artifactId>lombok</artifactId>
116
+                        </exclude>
117
+                    </excludes>
118
+                </configuration>
119
+            </plugin>
120
+        </plugins>
121
+    </build>
122
+</project>

+ 116
- 0
wm-parent/wm-production/pom.xml Просмотреть файл

@@ -0,0 +1,116 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-production</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management Production</name>
18
+    <description>供水管理系统生产管理服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- MyBatis-Plus -->
54
+        <dependency>
55
+            <groupId>com.baomidou</groupId>
56
+            <artifactId>mybatis-plus-boot-starter</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- Database -->
60
+        <dependency>
61
+            <groupId>mysql</groupId>
62
+            <artifactId>mysql-connector-java</artifactId>
63
+        </dependency>
64
+        
65
+        <!-- Spring Data Redis -->
66
+        <dependency>
67
+            <groupId>org.springframework.boot</groupId>
68
+            <artifactId>spring-boot-starter-data-redis</artifactId>
69
+        </dependency>
70
+        
71
+        <!-- Message Queue -->
72
+        <dependency>
73
+            <groupId>org.springframework.kafka</groupId>
74
+            <artifactId>spring-kafka</artifactId>
75
+        </dependency>
76
+        
77
+        <!-- GeoJSON -->
78
+        <dependency>
79
+            <groupId>org.geojson</groupId>
80
+            <artifactId>geojson-java</artifactId>
81
+            <version>1.0.0</version>
82
+        </dependency>
83
+        
84
+        <!-- Lombok -->
85
+        <dependency>
86
+            <groupId>org.projectlombok</groupId>
87
+            <artifactId>lombok</artifactId>
88
+            <optional>true</optional>
89
+        </dependency>
90
+        
91
+        <!-- Test -->
92
+        <dependency>
93
+            <groupId>org.springframework.boot</groupId>
94
+            <artifactId>spring-boot-starter-test</artifactId>
95
+            <scope>test</scope>
96
+        </dependency>
97
+    </dependencies>
98
+    
99
+    <build>
100
+        <plugins>
101
+            <plugin>
102
+                <groupId>org.springframework.boot</groupId>
103
+                <artifactId>spring-boot-maven-plugin</artifactId>
104
+                <configuration>
105
+                    <mainClass>com.xayunmei.wmproduction.WmProductionApplication</mainClass>
106
+                    <excludes>
107
+                        <exclude>
108
+                            <groupId>org.projectlombok</groupId>
109
+                            <artifactId>lombok</artifactId>
110
+                        </exclude>
111
+                    </excludes>
112
+                </configuration>
113
+            </plugin>
114
+        </plugins>
115
+    </build>
116
+</project>

+ 116
- 0
wm-parent/wm-revenue/pom.xml Просмотреть файл

@@ -0,0 +1,116 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <modelVersion>4.0.0</modelVersion>
6
+    
7
+    <parent>
8
+        <groupId>com.xayunmei</groupId>
9
+        <artifactId>wm-parent</artifactId>
10
+        <version>1.0.0-SNAPSHOT</version>
11
+        <relativePath>../../pom.xml</relativePath>
12
+    </parent>
13
+    
14
+    <artifactId>wm-revenue</artifactId>
15
+    <packaging>jar</packaging>
16
+    
17
+    <name>Water Management Revenue</name>
18
+    <description>供水管理系统营业收费服务</description>
19
+    
20
+    <dependencies>
21
+        <!-- Spring Boot Web -->
22
+        <dependency>
23
+            <groupId>org.springframework.boot</groupId>
24
+            <artifactId>spring-boot-starter-web</artifactId>
25
+        </dependency>
26
+        
27
+        <!-- Spring Cloud Alibaba Nacos -->
28
+        <dependency>
29
+            <groupId>com.alibaba.cloud</groupId>
30
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
31
+        </dependency>
32
+        
33
+        <!-- Spring Cloud Alibaba Nacos Config -->
34
+        <dependency>
35
+            <groupId>com.alibaba.cloud</groupId>
36
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
37
+        </dependency>
38
+        
39
+        <!-- Sa-Token -->
40
+        <dependency>
41
+            <groupId>cn.dev33</groupId>
42
+            <artifactId>sa-token-spring-boot-starter</artifactId>
43
+        </dependency>
44
+        <dependency>
45
+            <groupId>cn.dev33</groupId>
46
+            <artifactId>sa-token-jwt</artifactId>
47
+        </dependency>
48
+        <dependency>
49
+            <groupId>cn.dev33</groupId>
50
+            <artifactId>sa-token-dao-redis-jackson</artifactId>
51
+        </dependency>
52
+        
53
+        <!-- MyBatis-Plus -->
54
+        <dependency>
55
+            <groupId>com.baomidou</groupId>
56
+            <artifactId>mybatis-plus-boot-starter</artifactId>
57
+        </dependency>
58
+        
59
+        <!-- Database -->
60
+        <dependency>
61
+            <groupId>mysql</groupId>
62
+            <artifactId>mysql-connector-java</artifactId>
63
+        </dependency>
64
+        
65
+        <!-- Spring Data Redis -->
66
+        <dependency>
67
+            <groupId>org.springframework.boot</groupId>
68
+            <artifactId>spring-boot-starter-data-redis</artifactId>
69
+        </dependency>
70
+        
71
+        <!-- Message Queue -->
72
+        <dependency>
73
+            <groupId>org.springframework.kafka</groupId>
74
+            <artifactId>spring-kafka</artifactId>
75
+        </dependency>
76
+        
77
+        <!-- PDF -->
78
+        <dependency>
79
+            <groupId>org.xhtmlrenderer</groupId>
80
+            <artifactId>flying-saucer-pdf</artifactId>
81
+            <version>9.1.22</version>
82
+        </dependency>
83
+        
84
+        <!-- Lombok -->
85
+        <dependency>
86
+            <groupId>org.projectlombok</groupId>
87
+            <artifactId>lombok</artifactId>
88
+            <optional>true</optional>
89
+        </dependency>
90
+        
91
+        <!-- Test -->
92
+        <dependency>
93
+            <groupId>org.springframework.boot</groupId>
94
+            <artifactId>spring-boot-starter-test</artifactId>
95
+            <scope>test</scope>
96
+        </dependency>
97
+    </dependencies>
98
+    
99
+    <build>
100
+        <plugins>
101
+            <plugin>
102
+                <groupId>org.springframework.boot</groupId>
103
+                <artifactId>spring-boot-maven-plugin</artifactId>
104
+                <configuration>
105
+                    <mainClass>com.xayunmei.wmrevenue.WmRevenueApplication</mainClass>
106
+                    <excludes>
107
+                        <exclude>
108
+                            <groupId>org.projectlombok</groupId>
109
+                            <artifactId>lombok</artifactId>
110
+                        </exclude>
111
+                    </excludes>
112
+                </configuration>
113
+            </plugin>
114
+        </plugins>
115
+    </build>
116
+</project>