分析日期:2026-06-01
项目版本:JeecgBoot 3.9.2
本项目是湛江市人力资源和社会保障局的信息化管理系统,基于 JeecgBoot 3.9.2 低代码开发平台进行二次开发。项目核心定制点在于与广东省智慧人社系统的 SSO 单点登录集成和用户数据同步,业务功能页面主要通过 JeecgBoot 的 Online 低代码动态表单机制由后端配置驱动生成。
项目采用前后端分离架构:
jeecg-boot/ — Spring Boot 3.5.5 + Java 17 单体应用jeecgboot-vue3/ — Vue 3 + Vite 6 + Ant Design Vue 4 + TypeScriptzjrs-jeecgBoot/
├── jeecg-boot/ # 后端 Java 项目
│ ├── db/ # 数据库初始化脚本
│ │ ├── jeecgboot-mysql-5.7.sql # MySQL 初始化脚本
│ │ ├── tables_nacos.sql # Nacos 建表脚本
│ │ └── tables_xxl_job.sql # XXL-Job 建表脚本
│ ├── jeecg-boot-base-core/ # 核心基础框架模块
│ ├── jeecg-module-system/ # 系统管理模块
│ │ ├── jeecg-system-api/ # 系统API接口层
│ │ │ ├── jeecg-system-local-api/ # 单体模式API(直接方法调用)
│ │ │ └── jeecg-system-cloud-api/ # 微服务模式API(Feign调用)
│ │ ├── jeecg-system-biz/ # 系统业务逻辑层
│ │ └── jeecg-system-start/ # 启动入口模块
│ ├── jeecg-boot-module/ # 业务功能模块
│ │ ├── jeecg-module-demo/ # 示例模块
│ │ ├── jeecg-module-zjrs/ # ★ 湛江人社定制模块
│ │ └── jeecg-boot-module-airag/ # AI/RAG 集成模块
│ └── jeecg-server-cloud/ # 微服务模块(可选)
│ ├── jeecg-cloud-gateway/ # Spring Cloud Gateway
│ ├── jeecg-cloud-nacos/ # Nacos 注册/配置中心
│ └── jeecg-visual/ # 监控、定时任务等
│
├── jeecgboot-vue3/ # 前端 Vue3 项目
│ ├── src/
│ │ ├── api/ # API 接口定义
│ │ ├── components/ # 公共组件
│ │ │ └── jeecg/ # JeecgBoot 专用组件
│ │ ├── views/
│ │ │ ├── sys/login/RsSSOLogin.vue # ★ 智慧人社SSO登录页
│ │ │ ├── system/ # 系统管理页面
│ │ │ ├── super/ # 动态扩展模块
│ │ │ │ ├── online/ # Online 低代码表单/报表
│ │ │ │ └── airag/ # AI 模块
│ │ │ ├── dashboard/ # 首页仪表盘
│ │ │ └── monitor/ # 系统监控
│ │ ├── store/ # Pinia 状态管理
│ │ ├── router/ # 路由配置
│ │ ├── utils/ # 工具类
│ │ └── hooks/ # 组合式函数
│ └── package.json
│
├── docker-compose.yml # Docker 编排
└── AIWork/ # AI 工作文档
| 层次 | 技术 | 版本 | 说明 |
|---|---|---|---|
| 基础框架 | Spring Boot | 3.5.5 | 使用 jakarta 命名空间(非 javax) |
| JDK | OpenJDK | 17 | 同时支持 21、24、25 |
| ORM | MyBatis-Plus | 3.5.12 | BaseMapper<T> + ServiceImpl<M,T> |
| 认证授权 | Apache Shiro + JWT | 2.0.5 / 4.5.0 | 无状态认证,Redis 缓存权限 |
| 数据库 | 达梦 DM8 | - | 生产环境使用国产达梦数据库 |
| MySQL 8.0 | - | 开发环境使用 MySQL | |
| 连接池 | Druid | 1.2.24 | 支持动态多数据源 |
| 缓存 | Redis | - | 会话缓存、字典缓存、分布式锁 |
| 定时任务 | Quartz | - | JDBC 存储,支持集群模式 |
| JSON | FastJSON | 2.0.57 | 阿里巴巴 JSON 框架 |
| Excel | AutoPoi | 2.0.4 | Excel 导入导出 |
| API文档 | Knife4j | 4.5.0 | OpenAPI v3,@Schema 注解 |
| 文件存储 | MinIO / 阿里云 OSS / 七牛 | - | 通过 jeecg.uploadType 配置切换 |
| 报表 | 积木报表 JimuReport | 2.3.2 | 在线报表设计 |
| BI大屏 | 积木BI JimuBI | 2.3.2 | 仪表盘和大屏设计 |
| AI集成 | JeecgBoot AI Starter | 3.9.2.1 | 支持 DeepSeek、通义千问、智谱等 |
| 微服务 | Spring Cloud + Alibaba | 2025.0.0 / 2023.0.3.3 | 可选,默认单体模式 |
| 数据库迁移 | Flyway | 7.15.0 | 增量 SQL 脚本管理 |
| 短信 | 阿里云/腾讯云 SMS | - | 登录验证、密码修改 |
| 第三方登录 | JustAuth | 1.4.0 | GitHub/企业微信/钉钉/微信 |
| 工具库 | Hutool | 5.8.25 | 通用工具类 |
| 层次 | 技术 | 版本 | 说明 |
|---|---|---|---|
| 框架 | Vue | 3.5.22 | 组合式 API |
| 构建工具 | Vite | 6.3.6 | 快速构建 |
| UI框架 | Ant Design Vue | 4.2.6 | 企业级 UI 组件库 |
| 状态管理 | Pinia | 2.1.7 | 替代 Vuex |
| 路由 | Vue Router | 4.5.1 | HTML5 History 模式 |
| 语言 | TypeScript | 5.9.3 | 类型安全 |
| HTTP | Axios | 1.12.2 | HTTP 请求库 |
| 表格 | VXE-Table | 4.13.31 | 高性能虚拟滚动表格 |
| 图表 | ECharts | 5.6.0 | 数据可视化 |
| 富文本 | TinyMCE | 6.6.2 | 富文本编辑器 |
| 国际化 | Vue I18n | 9.14.5 | 中英文支持 |
| AI流程 | @jeecg/aiflow | 3.9.2-beta | AI 流程编排 |
| 逻辑流 | LogicFlow | 2.1.2 | 流程图绘制引擎 |
| CSS预处理 | Less | 4.4.2 | CSS 预处理器 |
| 微前端 | Qiankun | - | 可选,支持主/子应用模式 |
| 桌面端 | Electron | - | 可选,桌面应用打包 |
| 服务 | 说明 |
|---|---|
| 数据库 | 达梦 DM8(生产)/ MySQL 8.0(开发) |
| Redis | 192.168.0.53:6379,database 6(生产)/ 5(开发) |
| MinIO | 对象存储(可选) |
| Nacos | 微服务注册与配置中心(可选) |
这是整个平台的基石模块,提供认证、AOP切面、工具类、基础Controller等核心能力。
请求流程:
HTTP Request
→ JwtFilter (跨域处理 / 租户上下文 / @IgnoreAuth免认证判断)
→ ShiroRealm (身份认证 / 权限认证)
→ JwtUtil (Token签名HMAC256 / 验证 / 解析)
→ TokenUtils (编程式Token校验)
→ CommonAPI (查询用户/角色/权限)
→ RedisUtil (缓存用户权限信息)
关键特性:
@IgnoreAuth 注解支持免认证接口| 切面 | 注解 | 功能 |
|---|---|---|
| AutoLogAspect | @AutoLog |
自动记录操作日志(方法名、参数、IP、耗时) |
| DictAspect | @Dict |
字典值自动翻译(如 sex:1 → sex_dictText:"男"),支持 Redis 缓存 |
| PermissionDataAspect | @PermissionData |
数据权限控制,根据页面组件注入数据权限规则 |
| SensitiveDataAspect | @SensitiveEncode/Decode |
敏感数据脱敏(手机号、身份证、邮箱等) |
| SignatureCheckAspect | @SignatureCheck |
接口签名校验(X-SIGN + X-TIMESTAMP) |
JeecgController<T, S extends IService<T>> 提供开箱即用的能力:
exportXls() — Excel 导出exportXlsSheet() — 多 Sheet 导出exportXlsForBigData() — 大数据量导出importExcel() — Excel 导入QueryGenerator.initQueryWrapper(entity, request.getParameterMap()) 根据前端请求参数自动构建 MyBatis-Plus 的 QueryWrapper,支持:
MybatisInterceptor 自动注入 createBy/createTime/updateBy/updateTime/sysOrgCodeMybatisPlusSaasConfig 自动在 SQL 中追加租户条件@DynamicTable 注解 + DynamicTableAspect 实现运行时表名切换DynamicDBUtil 支持运行时切换数据源提供完整的后台管理功能,采用标准的 Controller → Service → Mapper 三层架构。
用户(SysUser)
├── 用户-角色(SysUserRole) ───── 角色(SysRole)
│ ├── 角色-权限(SysRolePermission) ── 菜单权限(SysPermission)
│ │ ├── 数据权限规则(SysPermissionDataRule)
│ │ └── 类型: 一级菜单/子菜单/按钮权限
│ └── 角色首页(SysRoleIndex)
├── 用户-部门(SysUserDepart) ─── 部门(SysDepart)
│ ├── 部门权限(SysDepartPermission) ── 菜单权限
│ ├── 部门角色(SysDepartRole)
│ │ ├── 部门角色-权限(SysDepartRolePermission)
│ │ └── 部门角色-用户(SysDepartRoleUser)
│ └── 树形结构(parentId)
├── 用户-租户(SysUserTenant) ─── 租户(SysTenant)
│ └── 租户套餐(SysTenantPack) ── 套餐用户(SysTenantPackUser)
├── 用户-岗位(SysUserPosition)
└── 用户组(SysUgroup) ── 用户组用户(SysUgroupUser)
字典(SysDict)
└── 字典项(SysDictItem) ── 通过 dictId 关联
| 模块 | Controller | 路由 | 核心功能 |
|---|---|---|---|
| 用户管理 | SysUserController | /sys/user |
CRUD、密码管理、冻结/解冻、多租户隔离、Excel导入导出 |
| 角色管理 | SysRoleController | /sys/role |
CRUD、权限分配、角色首页配置、admin角色保护 |
| 菜单权限 | SysPermissionController | /sys/permission |
树形菜单管理、权限编码、数据权限规则、按钮级权限 |
| 字典管理 | SysDictController | /sys/dict |
字典主子表管理、表字典、Redis缓存、多租户隔离 |
| 部门管理 | SysDepartController | /sys/sysDepart |
树形组织架构、部门权限、部门角色、级联删除 |
| 租户管理 | SysTenantController | - | SaaS多租户、租户套餐包、用户-租户关联 |
| 登录认证 | LoginController | /sys |
账号密码登录、手机验证码登录、二维码登录 |
| 第三方登录 | ThirdLoginController | - | GitHub/企业微信/钉钉/微信登录 |
| 系统公告 | SysAnnouncementController | /sys/annountCement |
公告发布与管理 |
| 日志管理 | SysLogController | - | 操作日志、数据日志 |
| 文件管理 | CommonController | - | 通用文件上传下载 |
| 数据源 | SysDataSourceController | - | 多数据源管理 |
| 网关路由 | SysGatewayRouteController | - | 微服务网关路由配置 |
| 编码规则 | SysFillRuleController / SysCheckRuleController | - | 填充规则、校验规则 |
这是本项目的核心定制模块,实现与广东省智慧人社系统的 SSO 单点登录集成和用户数据同步。
jeecg-module-zjrs/
└── src/main/java/org/jeecg/modules/zjrs/sso/
├── config/
│ └── ZjrsConfig.java # SSO 配置(读取 zjrs.sso.* 配置项)
├── controller/
│ └── LoginSSOController.java # SSO 登录控制器
├── entity/
│ └── VRsUsers.java # 外部视图 V_RS_USERS 实体映射
├── job/
│ └── UserInfoJob.java # 定时同步任务(每天凌晨2点)
├── mapper/
│ ├── VRsUsersMapper.java # 视图数据访问接口
│ └── xml/VRsUsersMapper.xml # MyBatis XML 映射
└── service/
├── ILoginSSOService.java # SSO 登录服务接口
├── IVRsUsersService.java # 用户数据服务接口
└── impl/
├── LoginSSOServiceImpl.java # SSO 登录服务实现
└── VRsUsersServiceImpl.java # 用户同步服务实现
1. 外部系统(智慧人社)携带 usertoken 跳转到前端 /rs-sso-login
2. 前端 RsSSOLogin.vue 提取 URL 中的 usertoken 参数
3. 调用后端 POST /zjrs/login/ssoLoginByToken 接口
4. 后端 LoginSSOServiceImpl.ssoLoginByToken 处理:
a. 通过 usertoken 在 V_RS_USERS 视图中查询用户信息
b. 若未找到用户 → 抛出异常"未找到用户信息"
c. 用 loginid 在本地 SysUser 表中查询
d. 若本地不存在 → 自动调用 syncUserToLocal 同步创建
e. 校验用户是否有效(checkUserIsEffective)
f. 生成 JWT Token,存入 Redis
g. 处理并发登录限制(单点登录踢人逻辑)
h. 设置登录租户信息
i. 查询用户所属部门,处理多部门情况
j. 返回完整登录信息(token、userInfo、departs、multi_depart)
5. 前端保存 token 和用户信息,重定向到目标页面
数据流向:V_RS_USERS 视图 → VRsUsersMapper → VRsUsersServiceImpl → SysUser 表
同步规则:
V_RS_USERS 视图提取 loginid、sguserid、contactphone、opernameSysUser 表中按 loginid 查询id、phone、realname、passwordSysUser,设置 username、realname、phone、password、status=1、delFlag=0zjrs.sso.userPwd(默认加密值 cb362cfeefbf3d8d)定时同步任务:UserInfoJob 使用 @Scheduled(cron = "0 0 2 * * ?") 每天凌晨 2:00 自动执行全量同步。
根据 jeecgBaseConfig.firewall.isConcurrent 配置:
| 字段名 | 数据库列名 | 类型 | 说明 |
|---|---|---|---|
| loginid | LOGINID | String | 登录ID(主键) |
| opername | OPERNAME | String | 操作员姓名 |
| contactphone | CONTACTPHONE | String | 联系电话 |
| sguserid | SGUSERID | String | 用户唯一标识ID |
集成 AI 能力,支持多种 AI 模型和服务:
| AI 能力 | 提供商 | 模型 |
|---|---|---|
| AI 对话 | DeepSeek | deepseek-chat |
| AI 文生图 | 通义千问 | wan2.2-t2i-flash |
| AI 图生图 | 通义千问 | wan2.5-i2i-preview |
| AI 语音 | 智谱 | glm-tts |
| AI 视频 | 智谱 | - |
| AI 向量嵌入 | 通义千问 | text-embedding-v1 |
| AI RAG | PostgreSQL pgvector | 本地向量库 |
createApp → createRouter → setupStore(Pinia)
→ i18n → initAppConfigStore → registerPackages(@jeecg/online)
→ registerGlobComp → SSO login → registerSuper(动态模块发现)
→ setupRouter → guards → directives → error handler
→ registerThirdComp(vxe-table, emoji, dayjs)
→ setupElectron → router.isReady() → mount
src/store/modules/permission.ts 中添加registerSuper.ts 使用 import.meta.glob('./**/register.ts') 自动发现并注册模块| Store | ID | 职责 |
|---|---|---|
| user | app-user | 认证Token、用户信息、角色、租户、字典 |
| permission | app-permission | 动态路由、权限编码、后端菜单 |
| app | app | 项目配置、主题、布局设置 |
| locale | app-locale | 国际化语言 |
| multipleTab | app-multiple-tab | 标签页状态 |
src/utils/http/axios/signMd5Utils){ code, result, message, success },code === 200 为成功核心文件:
src/views/sys/login/RsSSOLogin.vue — SSO 登录页面,路由 /rs-sso-loginsrc/views/system/loginmini/SSOLogin.vue — Mini 版 SSO 登录页面src/api/sys/user.ts — API 定义 rsSsoLogin = '/zjrs/login/ssoLoginByToken'路由注册(src/router/routes/index.ts):
export const RsSSOLoginRoute = {
path: '/rs-sso-login',
name: 'RsSSOLoginRoute',
component: () => import('/@/views/sys/login/RsSSOLogin.vue'),
meta: { title: '智慧人社SSO登录', ignoreAuth: true },
};
通过 registerSuper.ts 的 import.meta.glob 自动发现机制,实现模块即插即用:
| 模块 | 功能 |
|---|---|
super/online/ |
Online 低代码表单/报表,支持30+种控件、多种列表模式(默认/ERP/Tab/树形) |
super/airag/ |
AI 模块,包含 AI 应用、聊天、知识库、模型管理、提示词、MCP工具、海报、换装、视频、语音、写作、OCR 等 |
| 环境 | 数据库 | 连接信息 |
|---|---|---|
| 开发 | MySQL 8.0 | 192.168.0.77:3306/jeecg-boot2 |
| 生产 | 达梦 DM8 | 192.168.0.56:5236,Schema: ZJRS_JEECG_BOOT |
当前激活的 Profile 为 dm8(见 application.yml 中 spring.profiles.active: dm8)。
MySQL、PostgreSQL、Oracle 11g+、SQL Server 2017+、MariaDB、DM8(达梦)、KingBase ES(人大金仓),通过 application-{dbtype}.yml Profile 切换。
| 表名 | 说明 |
|---|---|
| sys_user | 用户表 |
| sys_role | 角色表 |
| sys_permission | 菜单权限表 |
| sys_user_role | 用户角色关联表 |
| sys_role_permission | 角色权限关联表 |
| sys_depart | 部门表 |
| sys_user_depart | 用户部门关联表 |
| sys_dict | 字典主表 |
| sys_dict_item | 字典项表 |
| sys_tenant | 租户表 |
| sys_user_tenant | 用户租户关联表 |
| sys_log | 操作日志表 |
| sys_data_log | 数据日志表 |
| sys_announcement | 系统公告表 |
| QRTZ_* | Quartz 定时任务表 |
| V_RS_USERS | ★ 外部视图(智慧人社用户数据源) |
┌─────────────────────────────────────────────────────────────┐
│ 广东省智慧人社系统 │
│ (外部系统) │
└──────────────────────┬──────────────────────────────────────┘
│ usertoken (SSO)
▼
┌─────────────────────────────────────────────────────────────┐
│ 湛江人社管理系统 (zjrs-jeecgBoot) │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ SSO 登录模块 │ │ 用户同步模块 │ │ Online 低代码 │ │
│ │ (zjrs/sso) │ │ (定时任务) │ │ (动态表单/报表) │ │
│ └──────┬──────┘ └──────┬───────┘ └────────┬────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 系统管理模块 (jeecg-module-system) │ │
│ │ 用户/角色/权限/部门/字典/租户/日志/公告/文件... │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 核心基础框架 (jeecg-boot-base-core) │ │
│ │ Shiro+JWT / AOP切面 / 查询生成器 / 工具类... │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 达梦 DM8 │ │ Redis │ │ MinIO │ │ AI 服务 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
usertoken,本系统验证后自动登录或创建本地用户V_RS_USERS 视图同步用户数据到本地 SysUser 表tenantId 实现数据隔离| 定制点 | 位置 | 说明 |
|---|---|---|
| SSO 登录后端 | jeecg-module-zjrs |
与智慧人社系统的 SSO 集成 |
| SSO 登录前端 | RsSSOLogin.vue / SSOLogin.vue |
SSO 登录页面 |
| SSO API 定义 | src/api/sys/user.ts |
rsSsoLogin 接口 |
| SSO 路由 | src/router/routes/index.ts |
/rs-sso-login 路由 |
| 用户同步任务 | UserInfoJob.java |
每日凌晨2点同步 |
| 数据库视图 | V_RS_USERS |
外部用户数据源 |
| 达梦数据库适配 | application-dm8.yml |
国产数据库生产配置 |
| SSO 配置 | zjrs.sso.userPwd |
SSO 用户默认密码 |
Nginx → [Vue3 静态资源]
→ [Spring Boot :8080 /jeecg-boot]
→ [达梦 DM8 :5236]
→ [Redis :6379]
-P SpringCloud 激活)Nginx → [Vue3 静态资源]
→ [Spring Cloud Gateway :9999]
→ [jeecg-system-cloud-start] → [Nacos :8848]
→ [jeecg-demo-cloud-start] → [Sentinel :9000]
→ [XXL-Job :9080]
→ [Monitor :9111]
docker-compose.yml 包含:MySQL (13306)、Redis、PostgreSQL+pgvector、MongoDB、应用容器 (8080)。
org.jeecg.modules.<module-name>.{controller,entity,mapper,mapper.xml,service,service.impl,vo}Sys 前缀、Controller 继承 JeecgController、Service 接口 I<Entity>ServiceResult<T> 封装,Result.OK(data) / Result.error(msg)update-begin/update-end 注释包裹,格式 //update-begin---author:xxx ---date:YYYY-MM-DD for:说明/@/ → src/,/#/ → types/import() 懒加载| 文件 | 位置 | 说明 |
|---|---|---|
| 根 POM | jeecg-boot/pom.xml |
Maven 父项目配置、依赖管理 |
| 应用配置 | jeecg-system-start/src/main/resources/application.yml |
Profile 选择(当前: dm8) |
| 开发环境 | application-dev.yml |
MySQL + Redis 开发配置 |
| 生产环境 | application-dm8.yml |
达梦 DM8 生产配置 |
| 前端配置 | jeecgboot-vue3/package.json |
前端依赖和脚本 |
| 环境变量 | jeecgboot-vue3/.env |
前端基础配置 |
| 开发代理 | jeecgboot-vue3/.env.development |
代理到 localhost:8080 |
| Docker | docker-compose.yml |
容器编排配置 |