urbanops · tech-sharing

城市运营全域平台
技术架构全景解析

业务架构 × 技术架构 × 系统架构 × 部署架构 — 一次讲透全域平台。

架构组platform infra · 60 min + Q&A

agenda.yaml

今日路线图

01项目概述与业务架构全景~6min
02业务布局:园林 · 工单 · BPM · 全局~10min
03系统架构总览 & 模块依赖关系~6min
04技术架构分层 & 基础设施层~6min
05核心技术栈 & 数据存储策略~6min
06数据流 & 模块调用逻辑~6min
07安全架构 & 可观测性~6min
08部署架构 & 后续演进规划~6min
09总结 & Q&A~5min

// overview

UrbanOps 全域平台:
智慧城市运营管理底座

基于 RuoYi-Vue-Pro 演进而来,面向城市园林绿化、工单调度、流程协同的综合运营管理平台。模块化单体架构向微服务演进中。

17
Maven 模块
7
激活业务模块
15
框架 Starter
10+
数据库支持
3.5.5
Spring Boot

后端技术基石

Java 17 · Spring Boot 3.5.5 · MyBatis Plus 3.5.14 · Spring Security 6.x · Flowable 7.0 · Redisson 3.51 · SkyWalking 9.5 · RocketMQ · Vert.x + MQTT · PF4J 插件框架

前端生态 & 核心能力

Vue3 + Element Plus / Vben 双管理后台 · uni-app 移动端 · 大屏报表设计器 · 多租户 SaaS · IoT 设备接入 · 代码生成器 · Spring AI 集成

business · architecture

业务架构全景:
四大核心域 + 两大支撑域

🌳

智慧园林管理

树木资产管理、巡检计划、养护计划、绩效评估、物料出入库、机械成本核算

Garden巡检养护绩效
📋

工单调度系统

事件上报、工单流转、物料明细、附件管理、地理位置编码、园林事件映射

Workorder事件物料
🔄

工作流引擎

Flowable 驱动,仿钉钉/飞书 + BPMN 双设计器,会签、或签、转办、委派、加签全覆盖

BPMFlowable审批
🌐

全局业务管理

问题上报、道路信息、工单提交详情、流程路径想法、跨模块数据聚合

Global道路问题
⚙️

系统管理

用户/角色/菜单/部门/岗位管理、租户与套餐、字典、通知公告、应用管理

SystemRBAC多租户
🏗️

基础设施

代码生成、文件存储、定时任务、配置管理、消息队列、API 日志、监控追踪

Infra代码生成监控

garden · smart-greening

核心业务:智慧园林管理

覆盖园林绿化全生命周期——从资产登记到巡检养护,从绩效评估到成本核算。

管理端
🌲

树木资产管理

古树名木 / 变更日志

📅

巡检计划管理

计划制定 / 明细配置

🔧

养护计划管理

养护任务 / 执行跟踪

📊

绩效管理

指标定义 / 专家评定

📦

物料管理

物料类型 / 出入库

💰

机械成本

折旧 / 租赁核算

移动端
📱

首页概览

数据汇总

📍

GPS 定位

位置上报

巡检提交

现场打卡

🛠️

养护提交

任务执行

📝

变更记录

树木变更

定时任务

自动生成巡检/养护计划

数据权限

按区域隔离园林数据

时间区间

灵活配置任务执行周期

防重复提交

计划明细幂等性保证

workorder · dispatch

工单调度:事件驱动 + 流程闭环

工单核心实体模型

📋 MainInfo — 工单主信息
📎 Attachment — 附件管理
📦 MaterialDetail — 物料明细
🎯 EventInfo — 事件信息
🔗 EventMappingInfo — 事件映射
🌳 GardenRef — 园林业务关联

工单处理流程

📝

事件上报

🔍

工单生成

👤

人员指派

🔧

现场处理

📋

结果反馈

审核结单

WorkorderModule → GardenModule (Feign API) · EventMapping 策略 · GeoCode 位置服务 · 数据权限隔离

bpm · flowable-engine

工作流引擎:同时支持
「轻量配置」与「深度编排」

SIMPLE 设计器

仿钉钉/飞书体验,拖拽搭建表单流程,10 分钟完成配置

✦ 拖拽式表单设计
✦ 审批节点可视化配置
✦ 抄送人 / 条件分支
✦ 超时审批 / 自动提醒

BPMN 设计器

基于 BPMN 2.0 标准,适配复杂多层级审批及自动化场景

✦ 会签 / 或签 / 依次审批
✦ 转办 / 委派 / 加签 / 减签
✦ 并行 / 包容 / 路由分支
✦ 父子流程 / 触发节点

Flowable 7.0

核心流程引擎

信创数据库兼容

DM8 / KingBase / OpenGauss

动态表单

节点级只读/编辑/隐藏权限

global · system · infra

业务支撑域:
公共服务与系统管理

🌐 Global 全局模块

问题上报管理

公共问题发现 → 流转到工单系统

道路信息管理

道路基础数据维护

工单提交详情

跨模块工单数据聚合视图

流程路径想法

流程优化建议收集

⚙️ System + Infra 模块

RBAC 权限体系

用户 → 角色 → 菜单 → 按钮权限 · 数据权限

SaaS 多租户

租户管理 · 套餐配置 · 数据隔离 · 透明化封装

代码生成器

一键生成 Java · Vue · SQL · 接口文档

消息通知中心

短信 · 邮件 · 站内信 · 多通道

tech-stack · layers

技术栈七层全景

前端
Vue 3Element PlusVben Adminuni-appTypeScript
网关 & 接入
Vert.xMQTTHTTP/2TCPWebSocket
业务框架
Spring Boot 3.5Spring SecurityFlowable 7QuartzSpring AIPF4J
数据层
MyBatis PlusDruidMySQL 8Redis SentinelRedissonDynamic DS
消息 & 集成
RocketMQKafkaRabbitMQJustAuthUAA SSOS3
可观测性
SkyWalkingSBA AdminOpenTracingActuatorKnife4j
部署 & DevOps
Dockerdocker-composeEclipse Temurin 21MavenGit

architecture · system-overview

系统架构总览 — 五层全景

接入层 CLIENT LAYER Vue 3 Web uni-app 小程序 IoT 设备 第三方系统 网关与接入 GATEWAY LAYER UrbanOps Server :48081 IoT 网关 :8092 (独立部署) UAA SSO :28201 业务模块层 BUSINESS MODULES system用户·权限·租户 garden园林养护·巡检 workorder工单·调度 bpmFlowable 流程 gloabl全域运营 API 契约层: garden-api · workorder-api (接口定义 + Feign 风格调用) 基础设施层 INFRASTRUCTURE: 15个Spring Boot Starter (Web · Security · MyBatis · Redis · MQ · Job · Excel · WebSocket · Monitor · Protection · Tenant · DataPermission · IP · Test) 数据层: MySQL 8 · Redis Sentinel · RocketMQ · Kafka · RabbitMQ · S3 · Druid · Redisson

modules · dependency-graph

模块依赖关系图

urbanops-dependencies (BOM) urbanops-framework common · web · security · mybatis · redis · mq · job · excel · websocket · monitor · protection · tenant · data-permission · ip · test module-infra module-system module-gloabl module-bpm module-garden module-workorder module-api (契约层) IoT 网关 (独立进程 :8092) 核心业务域 基础服务 独立部署 API 契约调用

architecture · layers

技术架构五层模型

从用户端到底层基础设施,清晰分层、逐级解耦。

接入层
🖥️

Web Admin

Vue3 + Element Plus

📱

Mobile App

uni-app 跨端

📊

大屏展示

GoView 可视化

🔗

开放 API

第三方对接

网关层
🔐

认证鉴权

Spring Security + Token

🚪

路由转发

Nginx / Gateway

⚖️

负载均衡

多实例分发

🛡️

安全防护

XSS / CSRF / SQL注入

服务层
🌳

Garden

园林管理

📋

Workorder

工单调度

🔄

BPM

工作流

🌐

Global

全局服务

⚙️

System

系统管理

🏗️

Infra

基础设施

中间件
🗄️

MySQL

OLTP

Redis

缓存/锁

📨

RocketMQ

消息队列

🔍

Elasticsearch

全文检索

📡

TDengine

时序数据

backend · layered

后端分层架构:
Controller → Service → DAL 三层解耦

controller/

接收请求、参数校验、VO 转换

admin/app/VO 对象@Valid

service/

业务逻辑编排、事务管理、策略模式

接口+实现@Transactional策略Listener

dal/

数据访问层:MySQL Mapper + Redis Cache

mysql/redis/dataobject/

convert/

MapStruct 对象转换层,编译期生成高性能映射代码

api/

模块间 Feign 接口定义 + DTO,实现跨模块调用

mq/ + job/

异步消息(producer/consumer)+ 定时任务调度

framework/

模块内框架代码:数据权限配置、Web 配置、操作日志等

framework · starters

基础设施层:
15 个 Spring Boot Starter

将通用能力抽象为可复用的 Starter 组件,所有业务模块按需引入。

🌐

web

全局异常处理 · 统一返回 · CORS · Swagger

🔐

security

Spring Security · Token 鉴权 · SSO

🗄️

mybatis

MyBatis Plus · 多数据源 · 联表查询

redis

Redisson · 分布式锁 · 缓存策略

📨

mq

RocketMQ 集成 · 消息幂等 · 重试

🛡️

protection

分布式锁 · 幂等 · 限流 · 熔断

📊

monitor

SkyWalking · Admin · 日志中心

job

Quartz 定时任务 · 执行日志

📝

excel

FastExcel 导入导出

🔌

websocket

实时通信 · Token 校验 · 集群

🏢

biz-tenant

多租户数据隔离 · 透明封装

🔒

biz-data-permission

数据权限 · 行级过滤

tech-stack · ecosystem

核心技术栈全景

核心框架

Spring Boot 3.5.5Spring MVC 6.xSpring Security 6.x
🗄️

持久层

MyBatis Plus 3.5.14Druid 1.2.27Dynamic-DS 4.3.1

缓存 & 锁

Redis 7.xRedisson 3.51Lock4j 2.2.7
📨

消息队列

RocketMQSpring-RocketMQRedis Stream
🔄

工作流

Flowable 7.0.1BPMN 2.0SIMPLE 设计器
📡

IoT & 通信

Vert.x 4.5.13Netty 4.2.4MQTT 1.2.5
🔍

可观测性

SkyWalking 9.5Admin 3.5.2OpenTracing
📋

API 文档

Springdoc 2.8.11Knife4j 4.5.0Swagger 3
🔌

插件 & 工具

PF4J 0.9.0MapStruct 1.6.3Hutool 5.8+6.0
🧪

测试

JUnit 5Mockito 5.xJedis-Mock
🗄️

多数据库

MySQL 8.xDM8KingBaseOpenGauss
🐳

部署运维

DockerK8sJenkinsHarbor

data-flow · communication

数据流与通信架构

UrbanOps Server核心业务处理引擎 MySQL 8主从 + Druid 连接池 Redis Sentinel缓存 · 分布式锁 · Token MQ 消息队列RocketMQ · Kafka · RabbitMQ IoT 网关 :8092Vert.x · MQTT · TCP IoT 设备层传感器 · GPS · 控制器 对象存储 S3文件 · 图片 · 附件 Flowable 7工作流引擎 Quartz 调度定时任务集群 WebSocket实时消息推送

database · strategy

数据存储策略:
多数据源 + 多数据库 + 读写分离

Dynamic-Datasource 多数据源

一主多从读写分离
@DS 注解切换数据源
Druid 连接池监控

Redis 缓存体系

○ Redisson 分布式锁 · 幂等键
○ Redis Stream 轻量 MQ
○ Token 存储 & 在线用户管理

多数据库兼容矩阵

MySQL 5.7/8.0+ — 主力库
达梦 DM8 — 国产信创
人大金仓 KingBase 8.6 — 信创
OpenGauss 5.1 — 华为开源
Oracle / PostgreSQL / SQL Server
TDengine 3.7 — IoT 时序数据

数据隔离策略

SaaS 多租户:共享数据表 + tenant_id 字段隔离,biz-tenant Starter 透明拦截 SQL

invocation · communication

模块调用逻辑:三种通信通道

Feign API
System → Dept APISystem → User APIWorkorder → Garden APIGarden → System API
▼ 同步调用 · 模块间 RPC · 请求/响应模式 ▼
MQ 消息
SMS Producer → ConsumerMail Producer → ConsumerEvent → 多消费者RocketMQ TopicRedis Stream
▼ 异步解耦 · 事件驱动 · 最终一致性 ▼
直接依赖
Server → All ModulesWorkorder → Garden ServiceBPM → System UserGarden → Infra File

api/ 包设计

每个模块暴露 Feign 接口 + DTO,其他模块引入依赖即可调用,编译期类型安全。

mq/ 包设计

Producer 发送消息,Consumer 消费处理。SMS / Mail 异步发送,不解耦主流程。

service/ 直接注入

同模块内 Service 互相注入。跨模块通过 api 包或直接依赖。

async · event-driven

异步消息与事件驱动

RocketMQ 消息架构

📤 Producer → Topic
📥 Consumer 拉取并处理
🔄 消费失败自动重试
⚡ 顺序消息: 全局/分区有序
🔒 事务消息: 分布式事务最终一致性

典型异步场景

📧 SMS → MQ → 消费者推送
📨 邮件 → MQ → 消费者投递
🔔 站内信 → Redis Stream 广播
📋 操作日志 → 异步记录
🔄 工单事件 → 通知园林模块

定时任务 (Quartz)

巡检计划自动生成 · 养护计划定时创建 · 数据统计报表 · 超时任务自动处理

服务保障 (Protection)

@Lock4j 分布式锁防并发 · @Idempotent 幂等性 · @RateLimiter 限流保护 · 熔断降级

security · auth-flow

安全与认证架构

客户端Web / 小程序 / App Security Filter Chain API 签名校验 限流 & 幂等 Token 认证 权限校验 数据脱敏 操作日志 认证与授权中心 JWT TokenRedis 存储 · 自动续期 UAA SSOOAuth2 · 单点登录 JustAuth 社交登录钉钉 · 企业微信 · 小程序 · 公众号 多租户数据隔离 (SaaS) 部门/用户级数据权限 (RBAC + Data Scope) 授权通过 业务模块: garden · workorder · bpm · gloabl · infra · system AJ Captcha滑块验证 API 加密AES 算法

security · auth · tenant

安全与权限体系详解

🔐 认证体系

  • Spring Security 6.x 核心
  • Token + Redis 无状态会话
  • OAuth2 授权码模式
  • 多终端(Web / App / 小程序)
  • SSO 单点登录
  • 社交登录(JustAuth)

🛡️ 授权体系

  • RBAC:用户 → 角色 → 菜单
  • 按钮级别权限控制
  • 动态菜单加载
  • Redis 缓存权限信息
  • 数据权限:行级过滤
  • 部门数据范围隔离

🏢 多租户

  • tenant_id 字段隔离
  • MyBatis 拦截器自动注入
  • 租户套餐权限定制
  • 每个租户独立菜单/角色
  • 透明化封装无侵入
SystemModule → Security Starter → Token + Redis → @PreAuthorize → DataPermission AOP → SQL Interceptor

observability · monitoring

可观测性与监控体系

📝 日志体系

Logback + SkyWalking Logback Appender,TraceId 自动注入

操作日志登录日志API 访问日志错误日志

📊 指标监控

Spring Boot Admin + Druid SQL 监控 + Redis 监控面板

JVM 指标连接池QPS/RT慢 SQL

🔍 链路追踪

Apache SkyWalking 9.5 分布式追踪,服务拓扑自动发现

调用链拓扑图慢端点告警

Monitor Starter 集成

SkyWalking · Admin Client · OpenTracing · 日志中心 · 一键接入

保护机制

分布式锁 (Lock4j) · 幂等性保证 · 限流降级 · 异常全局处理 · 错误码统一管理

deployment · docker

部署架构 — Docker 容器化

Docker Host urbanops-serverEclipse Temurin 21 JRE-Xms512m -Xmx512m Port 48081 Actuator /actuator 包含所有业务模块 (fat JAR) SpringDoc /v3/api-docs · Knife4j iot-gateway-server独立部署 · Vert.x 引擎 Port 8092 协议: MQTT · HTTP · TCP 设备接入 · 数据采集 HTTP RPC → Server :48080 MySQL 8:3306主从读写分离 Redis Sentinel:26379高可用集群 RocketMQ:9876 Kafka:9092 urbanops-admin (前端 Nginx) :8080 可观测性: SkyWalking Agent · Spring Boot Admin · OpenTracing · Actuator · 日志采集 PF4J 插件目录: ../plugins (动态扩展) fat JAR 独立进程 数据服务 消息中间件

deployment · ci-cd

CI/CD 流水线与运维监控

🚀

CI 持续集成

  • Jenkins Pipeline
  • Maven 多模块构建
  • 单元测试 + 代码扫描
  • Docker 镜像构建
  • 推送 Harbor 私有仓库
☸️

容器编排

  • Kubernetes 集群
  • Deployment 滚动更新
  • Service 服务发现
  • ConfigMap 配置管理
  • Ingress 流量入口
📊

运维监控

  • Prometheus + Grafana
  • SkyWalking 链路追踪
  • ELK 日志收集
  • AlertManager 告警
  • Admin 应用监控

Dockerfile — 多阶段构建

urbanops-server/Dockerfile
# Stage 1: 构建
FROM maven:3.9-eclipse-temurin-17 AS builder
COPY . /app && WORKDIR /app
RUN mvn clean package -DskipTests

# Stage 2: 运行
FROM eclipse-temurin:17-jre
COPY --from=builder /app/urbanops-server/target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

roadmap · planning

后续扩展规划

Phase 1 · 近期

🏗️ 架构夯实

  • 完善 IoT 设备接入能力
  • 会员中心 (Member) 激活
  • 支付系统 (Pay) 集成
  • 微信公众号 (MP) 接入
  • 数据报表与大屏 (Report)
  • 提升单元测试覆盖率
Phase 3 · 远期

🌐 平台化 & 智能化

  • 多租户 SaaS 化运营
  • 开放平台 & API 市场
  • 低代码/无代码搭建
  • PF4J 插件生态
  • 边缘计算 + IoT 规模化
  • 数据中台 & 智能决策
Q2 2025

物联网接入打通

MQTT 协议适配 · 设备影子 · TDengine 时序存储

Q3 2025

业务模块激活

Member + Pay + MP + Report 模块上线,补齐业务闭环

Q4 2025

微服务演进

核心域拆分 · Spring Cloud 迁移 · 服务独立部署

evolution · target-architecture

架构演进目标:微服务全景

目标微服务架构

Nginx Gateway Nacos
garden-serviceworkorder-servicebpm-servicesystem-serviceiot-gateway (已有)
SentinelSeataSkyWalking

1 · 业务驱动架构

智慧园林 + 工单调度 + 流程协同,三大核心域支撑城市运营。

2 · 分层清晰可扩展

15 个 Starter 组件化,模块间 Feign API + MQ 双通道解耦。

3 · 信创全栈兼容

MySQL / DM8 / KingBase / OpenGauss 多数据库无缝切换。

4 · 可观测性内置

SkyWalking + Admin + 日志中心,三大支柱保障系统可靠。

5 · 渐进式演进

模块化先行 → API 契约驱动 → 渐进式拆分 → 独立部署验证。

6 · IoT 独立先行

IoT 网关已实现独立部署,为后续微服务化积累了宝贵经验。

?

Questions & Discussion

感谢聆听 · 欢迎交流

#urbanops#spring-boot#microservices#smart-garden#cloud-native