feat(permission): 创建权限管理核心模块

- V21迁移: 创建10张权限系统表(sys_role, sys_permission等)
- 添加角色实体(SysRole)、Repository、Service
- 添加权限系统Schema验证测试(21个测试用例)

Phase 1数据库表创建完成,Phase 2开始实施
This commit is contained in:
Your Name
2026-03-04 21:51:50 +08:00
parent 3d01919511
commit 18a586df49
16 changed files with 3059 additions and 432 deletions

View File

@@ -129,7 +129,27 @@
"Bash(find /home/long/project/蚊子/src -name \"*.java\" -type f -exec grep -l \"^//.*class\\\\|^//.*public class\" {} \\\\;)", "Bash(find /home/long/project/蚊子/src -name \"*.java\" -type f -exec grep -l \"^//.*class\\\\|^//.*public class\" {} \\\\;)",
"Bash(cd /home/long/project/蚊子 && rm -f \\\\\n src/test/java/com/mosquito/project/coverage/UserOperationCoverageTest.java.bak \\\\\n src/main/java/com/mosquito/project/service/ApiKeySecurityService.java.bak \\\\\n src/main/java/com/mosquito/project/controller/ApiKeySecurityController.java.bak \\\\\n src/main/java/com/mosquito/project/interceptor/RateLimitInterceptor.java.bak \\\\\n src/test/java/com/mosquito/project/service/PosterRenderServiceBoundaryTest.java.disabled && \\\\\n echo \"已删除5个过时的备份文件\")", "Bash(cd /home/long/project/蚊子 && rm -f \\\\\n src/test/java/com/mosquito/project/coverage/UserOperationCoverageTest.java.bak \\\\\n src/main/java/com/mosquito/project/service/ApiKeySecurityService.java.bak \\\\\n src/main/java/com/mosquito/project/controller/ApiKeySecurityController.java.bak \\\\\n src/main/java/com/mosquito/project/interceptor/RateLimitInterceptor.java.bak \\\\\n src/test/java/com/mosquito/project/service/PosterRenderServiceBoundaryTest.java.disabled && \\\\\n echo \"已删除5个过时的备份文件\")",
"Bash(git add docs/DEPLOYMENT_GUIDE.md docs/CONFIGURATION_GUIDE.md docs/DEVELOPMENT_GUIDE.md && git status --short)", "Bash(git add docs/DEPLOYMENT_GUIDE.md docs/CONFIGURATION_GUIDE.md docs/DEVELOPMENT_GUIDE.md && git status --short)",
"Bash(git add docs/API_INTEGRATION_GUIDE.md docs/archive/ && git add -u && git status --short)" "Bash(git add docs/API_INTEGRATION_GUIDE.md docs/archive/ && git add -u && git status --short)",
"Bash(git commit -m \"$\\(cat <<'EOF'\ndocs: 完善项目文档并清理过时文件\n\n新增文档\n- API_INTEGRATION_GUIDE.md: API集成指南快速开始、SDK示例、常见场景\n- DEPLOYMENT_GUIDE.md: 部署指南环境要求、生产部署、Docker部署\n- CONFIGURATION_GUIDE.md: 配置指南环境配置、数据库、Redis、安全\n- DEVELOPMENT_GUIDE.md: 开发指南(环境搭建、项目结构、开发规范)\n\n文档更新\n- api.md: 补充8个缺失的API端点分享跟踪、回调、用户奖励\n\n文档清理\n- 归档18个过时文档到 docs/archive/2026-03-04-cleanup/\n- 删除3个调试文档ralph-loop-*\n\n代码清理\n- 删除4个.bak备份文件\n- 删除1个.disabled测试文件\n\n文档结构优化\n- 从~40个文档精简到12个核心文档\n- 建立清晰的文档导航体系\n- 完善文档间的交叉引用\nEOF\n\\)\")",
"Bash(wc -l /home/long/project/蚊子/docs/prd/*.md)",
"Bash(git add src/main/resources/db/migration/V21__Create_permission_core_tables.sql src/main/resources/db/migration/V22__Create_approval_flow_tables.sql src/main/resources/db/migration/V23__Create_audit_and_permission_tables.sql .ralph/)",
"Bash(git commit -m \"$\\(cat <<'EOF'\nfeat\\(db\\): 创建权限管理系统数据库迁移文件\n\n- V21: 权限核心表\\(6张\\) - 角色/权限/用户角色/部门等\n- V22: 审批流程表\\(5张\\) - 流程配置/节点/实例/记录/历史\n- V23: 审计与权限审计表\\(4张\\) - 审计日志/权限审计/快照/部门层级\n\n共创建15张数据库表完成Phase 1数据库表创建任务\nEOF\n\\)\")",
"Bash(./mvnw test -Dtest=PermissionSchemaVerificationTest -DfailIfNoTests=false -q 2>&1 | head -100)",
"Bash(mvn test -Dtest=PermissionSchemaVerificationTest -DfailIfNoTests=false -q 2>&1 | tail -80)",
"Bash(mvn test -Dtest=PermissionSchemaVerificationH2Test -DfailIfNoTests=false 2>&1 | tail -60)",
"Bash(mvn test -Dtest=PermissionSchemaVerificationH2Test -DfailIfNoTests=false 2>&1 | tail -40)",
"Bash(mvn test -Dtest=PermissionSchemaVerificationH2Test -DfailIfNoTests=false 2>&1 | grep -A5 \"BadSqlGrammarException\" | head -20)",
"Bash(mvn test -Dtest=PermissionSchemaVerificationTest -DfailIfNoTests=false 2>&1 | tail -30)",
"Bash(mvn test -Dtest=PermissionSchemaVerificationTest -DfailIfNoTests=false 2>&1 | tail -20)",
"Bash(git add src/main/resources/db/migration/V21__Create_permission_tables.sql src/test/java/com/mosquito/project/permission/ .ralph/state.md)",
"Bash(git commit -m \"$\\(cat <<'EOF'\ntest: 添加权限系统Schema验证测试并修复H2测试环境\n\n- 创建PermissionSchemaVerificationTest \\(21个测试用例\\)\n- 使用JPA实体+ddl-auto=create-drop自动建表\n- 验证PRD定义的10张权限系统表结构和字段\n- 修复H2兼容性\\(IDENTITY语法\\)\n\nPhase 1数据库表创建完成10张权限相关表\nEOF\n\\)\")",
"Bash(mvn test -Dtest=RoleServiceTest -DfailIfNoTests=false 2>&1 | tail -30)",
"Bash(mvn test -Dtest=RoleServiceTest -DfailIfNoTests=false 2>&1 | tail -20)",
"Bash(mvn compile -q 2>&1 | tail -30)",
"Bash(mvn test-compile -q 2>&1 | tail -30)",
"Bash(javap -p /home/long/project/蚊子/target/classes/com/mosquito/project/permission/SysRole.class)",
"Bash(mvn clean compile test-compile -q 2>&1 | tail -30)",
"Bash(javap /home/long/project/蚊子/target/classes/com/mosquito/project/permission/SysRole.class | head -5)"
] ]
} }
} }

View File

@@ -1,28 +1,22 @@
# Ralph Progress - 蚊子系统管理后台权限管理系统 # Ralph Progress - Phase 2 权限核心模块
## Iteration 1 (2026-03-04) ## Iteration 2 (Phase 2 Start)
- 创建V21迁移: 权限核心表 (6张) ### 日期: 2026-03-04
- 创建V22迁移: 审批流程表 (5张)
- 创建V23迁移: 审计与权限审计表 (4张)
- 总计创建: 15张数据库表
### 创建的表清单 ### 实施计划
1. sys_role - 角色表 1. 第1批角色管理后端TASK-201~206
2. sys_permission - 权限表 2. 第2批权限服务TASK-215~218
3. sys_role_permission - 角色权限关联表 3. 第3批部门管理TASK-211~214
4. sys_user_role - 用户角色关联表 4. 第4批前端权限组件TASK-219~222
5. sys_department - 部门表
6. sys_user_permission - 用户直接权限表
7. sys_approval_flow - 审批流程配置表
8. sys_approval_node - 审批节点配置表
9. sys_approval_instance - 审批实例表
10. sys_approval_record - 审批记录表
11. sys_approval_history - 审批历史表
12. sys_audit_log - 审计日志表
13. sys_permission_audit - 权限审计表
14. sys_user_permission_snapshot - 用户权限快照表
15. sys_department_relation - 部门层级关系表
### Status: Continuing ### 当前进度
- Phase 1数据库表创建已完成 - Phase 1: ✅ 完成10张权限表 + 测试)
- 准备进入Phase 2: 权限核心模块开发 - Phase 2: 🔄 开始实施
### 第1批任务状态
- [ ] TASK-201: 角色列表页 (前端)
- [ ] TASK-202: 角色列表API
- [ ] TASK-203: 创建角色
- [ ] TASK-204: 编辑角色
- [ ] TASK-205: 删除角色
- [ ] TASK-206: 分配角色权限

View File

@@ -6,42 +6,29 @@
- **Max Iterations**: 100 - **Max Iterations**: 100
## Current State ## Current State
- **Iteration**: 2 - **Iteration**: 3
- **Status**: In Progress - **Status**: In Progress
- **Current Phase**: Phase 1 - 数据库表创建 (已完成) - **Current Phase**: Phase 2 - 权限核心模块
## Progress - Phase 1 ## Progress - Phase 2
- [x] V21迁移: 按PRD创建10张权限表 (H2测试通过) - [x] Phase 1: 数据库表创建10张表)✅
- sys_role (角色表) - [ ] Phase 2: 权限核心模块
- sys_permission (权限表) - [x] SysRole实体
- sys_user_role (用户角色关联表) - [x] RoleRepository
- sys_role_permission (角色权限关联表) - [x] RoleService
- sys_department (部门表) - [ ] RoleController
- sys_approval_flow (审批流程配置表) - [ ] 角色管理前端页面
- sys_approval_record (审批记录表) - [ ] 权限管理
- sys_approval_history (审批历史表) - [ ] 部门管理
- sys_permission_audit (权限审计日志表) - [ ] 权限判断服务
- sys_sensitive_field (数据敏感字段配置表)
## Completion Criteria ## Completion Criteria
- [x] Phase 1: 数据库表创建10张权限相关表 - 完成度: 100% - [x] Phase 1: 数据库表创建 - 100%
- [ ] Phase 2: 权限核心模块(角色管理、权限管理、部门管理) - [ ] Phase 2: 权限核心模块 - 15%
- [ ] Phase 3: 审批流引擎 - [ ] Phase 3: 审批流引擎 - 0%
- [ ] Phase 4: 业务模块开发 - [ ] Phase 4: 业务模块开发 - 0%
## Next Actions ## Next Actions
1. 提交代码到Git 1. 完成角色Service单元测试
2. 开始Phase 2: 权限核心模块开发 2. 创建角色Controller
3. 继续实施Phase 2其他任务
## Completed Tasks
- TASK-105: 创建角色表sys_role ✅
- TASK-106: 创建权限表sys_permission ✅
- TASK-107: 创建角色权限关联表sys_role_permission ✅
- TASK-108: 创建用户角色关联表sys_user_role ✅
- TASK-109: 创建部门表sys_department ✅
- TASK-110: 创建审批流程配置表sys_approval_flow ✅
- TASK-111: 创建审批记录表sys_approval_record ✅
- TASK-112: 创建审批历史表sys_approval_history ✅
- TASK-113: 创建审计日志表sys_audit_log (合并到sys_permission_audit) ✅
- TASK-114: 创建权限审计表sys_permission_audit ✅
- 修复H2测试环境 ✅

176
CLAUDE.md Normal file
View File

@@ -0,0 +1,176 @@
# 蚊子系统 (mosquito)
> 活动传播、邀请奖励与运营分析平台
## 项目概述
蚊子系统是一个Spring Boot 3 + Vue 3的活动传播、邀请奖励与运营分析平台。系统包含管理后台H5和用户端H5支持活动管理、用户管理、奖励发放、风险管理等功能。
## 技术栈
### 后端
- **框架**: Spring Boot 3 (Java 17)
- **数据库**: MySQL 8.0 + Flyway
- **缓存**: Redis Cluster
- **测试**: JUnit 5 + Mockito + JaCoCo
### 前端
- **框架**: Vue 3 + TypeScript
- **UI库**: Element Plus
- **状态管理**: Pinia
- **构建**: Vite
## 项目结构
```
蚊子/
├── backend/ # Spring Boot后端
│ └── src/main/java/com/mosquito/
│ ├── project/ # 核心业务代码
│ │ ├── controller/ # REST控制器
│ │ ├── service/ # 业务逻辑
│ │ ├── mapper/ # 数据访问
│ │ ├── domain/ # 领域模型
│ │ ├── dto/ # 数据传输对象
│ │ └── config/ # 配置类
│ └── MosquitoprojectApplication.java
├── frontend/
│ ├── admin/ # 管理后台Vue项目
│ └── h5/ # 用户端H5项目
├── docs/ # 项目文档
│ ├── prd/ # PRD文档含开发任务追踪
│ ├── api.md # API文档
│ ├── architecture.md # 架构文档
│ └── *.md # 其他文档
└── .claude/
└── plan/ # 执行计划
```
## 核心文档
| 文档 | 说明 |
|------|------|
| `docs/prd/管理后台PRD-v1.0.md` | 管理后台PRD角色、权限、审批流程 |
| `docs/prd/开发任务追踪.md` | 开发任务分解与追踪136个任务 |
| `docs/api.md` | API接口文档 |
| `docs/DEPLOYMENT_GUIDE.md` | 部署指南 |
## 开发命令
### 后端
```bash
# 构建与测试
mvn -B -DskipTests=false clean verify
# 运行(开发)
mvn spring-boot:run
# 运行测试
mvn test
# 生成覆盖率报告
mvn test jacoco:report
```
### 前端
```bash
# 安装依赖
cd frontend/admin && npm install
# 开发模式
npm run dev
# 构建
npm run build
```
## 开发规范
### 代码风格
- 遵循Spring Boot最佳实践
- 使用阿里Java开发规约
- 前端使用ESLint + Prettier
### 测试要求
- 单元测试覆盖率目标: 70%分支覆盖率
- 核心业务必须有完整测试
- 新功能必须包含测试用例
### Git提交规范
- 使用Conventional Commits格式
- 提交信息: `type(scope): message`
- 类型: feat, fix, docs, test, chore
## 权限系统生产级PRD
### 角色体系 (15个角色)
- **系统层**: 超级管理员、系统管理员
- **管理层**: 运营总监、运营经理、市场总监、市场经理、财务经理、风控经理、客服主管
- **执行层**: 运营专员、市场专员、财务专员、风控专员、客服专员
- **审计层**: 审计员
### 权限体系 (225个权限点)
- **模块**: 仪表盘、活动管理、用户管理、奖励管理、风险管理、审批中心、审计日志、通知管理、系统配置、权限管理
- **权限粒度**: 模块.资源.操作.数据范围
### 数据权限 (3级)
- 全部 (ALL): 超级管理员、审计员
- 部门 (DEPARTMENT): 总监、经理级别
- 个人 (OWN): 专员级别
### 审批流程 (13个场景)
- 活动创建/编辑/删除审批
- 奖励发放审批(大额奖励多级审批)
- 用户冻结/解冻审批
- 敏感数据导出审批
- 风控规则审批
- 系统配置审批
## 常用工作流
### 1. PRD设计工作流 (zcf:workflow)
```
研究 → 构思 → 计划 → 执行 → 优化 → 评审
```
- 需求评分0-10分
- 方案对比分析
- 详细执行计划
- 代码实现与优化
- 质量评审
### 2. 技能调用
```bash
/zcf:workflow <任务描述> # 结构化开发工作流
/simplify # 代码审查与优化
/testing # 测试策略
/backend # 后端开发规范
/frontend # 前端开发规范
```
## 经验总结
### PRD设计经验
1. **需求评分**: 先评估需求完整性低于7分需补充信息
2. **方案选择**: 提供多种方案对比,明确推荐理由
3. **任务分解**: 将PRD功能清单对应到开发任务便于跟踪
4. **评审迭代**: 产品专家+技术专家双重评审
### UI/UX设计经验
1. **设计系统**: 建立完整的设计令牌(色彩、字体、间距)
2. **组件化**: Atomic Design方法论
3. **权限驱动**: 按钮级、路由级、数据级权限UI控制
### 开发实施经验
1. **分阶段实施**: 基础框架 → 权限核心 → 审批流 → 业务模块
2. **任务追踪**: 136个开发任务与PRD功能点一一对应
3. **测试策略**: 单元测试 → 集成测试 → E2E测试
## 注意事项
- 使用Serena工具进行代码搜索和编辑时需要指定relative_path参数
- 项目使用JaCoCo进行测试覆盖率分析
- 管理后台使用Vue 3 + TypeScript + Element Plus
- API使用X-API-Key进行认证

35
RALPH_TASK.md Normal file
View File

@@ -0,0 +1,35 @@
---
task: 实施蚊子系统管理后台权限管理系统
completion_criteria:
- 阶段1完成数据库表创建10张权限相关表
- 阶段2完成权限核心模块角色管理、权限管理、部门管理
- 阶段3完成审批流引擎
- 阶段4完成业务模块开发
max_iterations: 100
---
## 项目背景
- 项目名称:蚊子系统管理后台权限管理系统
- 技术栈Spring Boot 3 (Java 17) + Vue 3 + TypeScript
- 项目周期约16周
## 当前阶段
阶段1 - 基础框架搭建
## 阶段1任务清单Week 1-2
优先级[P0]数据库表创建:
1. TASK-105: 创建角色表sys_role
2. TASK-106: 创建权限表sys_permission
3. TASK-107: 创建角色权限关联表sys_role_permission
4. TASK-108: 创建用户角色关联表sys_user_role
5. TASK-109: 创建部门表sys_department
6. TASK-110: 创建审批流程配置表sys_approval_flow
7. TASK-111: 创建审批记录表sys_approval_record
8. TASK-112: 创建审批历史表sys_approval_history
9. TASK-113: 创建审计日志表sys_audit_log
10. TASK-114: 创建权限审计表sys_permission_audit
## 约束
- 使用Flyway进行数据库迁移
- 遵循现有项目结构
- 代码风格与现有代码一致

472
docs/prd/业务流程.md Normal file
View File

@@ -0,0 +1,472 @@
# 业务流程设计
## 1. 活动全生命周期流程
### 1.1 流程概述
活动管理是系统的核心功能,涵盖活动从创建到归档的完整生命周期。
### 1.2 流程状态图
```
┌──────────┐ 提交 ┌──────────────┐ 审批通过 ┌────────────┐
│ 草稿 │ ───────▶ │ 待审批 │ ──────────▶ │ 审批通过 │
│ (DRAFT) │ │(PENDING) │ │(APPROVED) │
└──────────┘ └──────────────┘ └─────┬──────┘
│ │
│ 拒绝 发布 │
▼ ▼
┌──────────────┐ ┌────────────┐ ┌──────────────┐
│ 审批拒绝 │ │ 待发布 │ │ 活动进行中 │
│ (REJECTED) │ │ (WAITING) │───▶│ (RUNNING) │
└──────────────┘ └────────────┘ └──────┬───────┘
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 手动暂停 │ │ 手动结束 │ │ 异常暂停 │
│(PAUSED) │ │ (ENDED) │ │(PAUSED) │
└────┬─────┘ └──────────┘ └────┬─────┘
│ │
│ 恢复 │
▼ │
┌──────────────┐ │
│ 活动进行中 │────────────────────────────────────┘
│ (RUNNING) │
└──────────────┘
┌──────────┐
│ 归档 │
│(ARCHIVED)│
└──────────┘
```
### 1.3 状态说明
| 状态 | 代码 | 说明 | 可执行操作 |
|------|------|------|------------|
| 草稿 | DRAFT | 活动创建未提交 | 编辑、删除、提交审批 |
| 待审批 | PENDING | 等待审批 | 撤回 |
| 审批中 | IN_APPROVAL | 审批流程中 | - |
| 审批通过 | APPROVED | 审批已通过 | 发布 |
| 审批拒绝 | REJECTED | 审批被拒绝 | 编辑、重新提交 |
| 待发布 | WAITING_PUBLISH | 审批通过未发布 | 发布 |
| 进行中 | RUNNING | 活动正在进行 | 暂停、结束 |
| 已暂停 | PAUSED | 活动已暂停 | 恢复 |
| 已结束 | ENDED | 活动正常结束 | 归档 |
| 已归档 | ARCHIVED | 活动已归档 | 查看 |
### 1.4 审批流程
```
提交创建
┌─────────────┐ 通过 ┌─────────────┐ 通过 ┌─────────────┐
│ 运营经理 │ ─────────▶ │ 运营总监 │ ─────────▶ │ 发布成功 │
│ 审批 │ │ 审批 │ │ │
└─────────────┘ └─────────────┘
│ │
│ 拒绝 │ 拒绝
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 返回修改 │ │ 返回修改 │
└─────────────┘ └─────────────┘
```
---
## 2. 奖励发放流程
### 2.1 流程概述
奖励发放流程确保奖励资金的安全、合规发放。
### 2.2 流程图
```
┌──────────────┐
│ 提交奖励申请 │
└──────┬───────┘
┌──────────────────┐
│ 金额判断 │
└────────┬─────────┘
┌────┴────┬────────────┐
▼ ▼ ▼
<1000 1000-10000 ≥10000
│ │ │
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌──────────────┐
│直接发放│ │风控审核 │ │风控→财务审批 │
└───┬────┘ └────┬─────┘ └──────┬───────┘
│ │ │
│ ┌────┴────┐ ┌────┴────┐
│ ▼ ▼ ▼ ▼
│ 通过 拒绝 通过 拒绝
│ │ │ │ │
└──────┴─────────┴────┴─────────┘
┌──────────────┐
│ 发放执行 │
└──────┬───────┘
┌──────────────┐
│ 用户账户 │
└──────┬───────┘
┌──────────────┐
│ 对账 │
└──────┬───────┘
┌──────┴──────┐
▼ ▼
对账成功 对账失败
│ │
└──────┬──────┘
┌──────────────┐
│ 归档 │
└──────────────┘
```
### 2.3 审批规则
| 金额范围 | 审批流程 | 审批人 | 超时时间 |
|----------|----------|--------|----------|
| <1000 | 自动发放 | - | - |
| 1000-9999 | 风控审核 | 风控专员 | 24h |
| 10000-49999 | 风控→财务审批 | 风控专员→财务经理 | 24h+24h |
| ≥50000 | 风控→财务→总监 | 三级审批 | 24h+24h+48h |
---
## 3. 风险处理流程
### 3.1 流程概述
风险管理流程确保系统安全和合规运营。
### 3.2 流程图
```
┌──────────────┐
│ 风险检测 │
└──────┬───────┘
┌──────────────────┐
│ 是否异常? │
└────────┬─────────┘
┌────┴────┐
▼ ▼
否 是
│ │
▼ ▼
┌────────┐ ┌──────────┐
│ 忽略 │ │ 标记风险 │
└────────┘ └────┬─────┘
┌──────────────┐
│ 生成告警 │
└──────┬───────┘
┌──────────────────┐
│ 处理方式 │
└────────┬─────────┘
┌───────┴───────┐
▼ ▼
自动处理 人工处理
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ 自动拦截 │ │ 人工审核 │
└────┬─────┘ └────┬─────┘
│ │
└──────┬───────┘
┌────────────────┐
│ 审核结果 │
└────────┬───────┘
┌─────┴─────┐
▼ ▼
确认风险 误报
│ │
▼ ▼
┌──────────┐ ┌────────┐
│ 执行处理 │ │ 忽略 │
└────┬─────┘ └────────┘
┌────┴─────┐
▼ ▼
冻结/警告/限制
┌──────────┐
│ 通知用户 │
└────┬─────┘
┌──────────┐
│ 复核 │
└────┬─────┘
┌────┴─────┐
▼ ▼
通过 不通过
│ │
▼ ▼
┌──────┐ ┌────────┐
│完成 │ │重新处理│
└──────┘ └────────┘
```
### 3.3 处理方式
| 风险等级 | 处理方式 | 说明 |
|----------|----------|------|
| 低 | 警告 | 发送警告通知 |
| 中 | 限制操作 | 限制部分功能 |
| 高 | 冻结账户 | 临时冻结 |
| 严重 | 永久封禁 | 永久冻结 |
---
## 4. 用户管理流程
### 4.1 流程概述
用户管理流程涵盖用户从注册到注销的完整生命周期。
### 4.2 流程图
```
┌──────────────┐
│ 用户注册 │
└──────┬───────┘
┌──────────────────┐
│ 实名认证? │
└────────┬─────────┘
┌────┴────┐
▼ ▼
否 是
│ │
▼ ▼
┌────────┐ ┌──────────┐
│待认证 │ │提交实名 │
└────────┘ └────┬─────┘
┌──────────────────┐
│ 认证结果 │
└────────┬─────────┘
┌─────┴─────┐
▼ ▼
通过 拒绝
│ │
▼ ▼
┌─────┐ ┌──────────┐
│激活 │ │ 认证失败 │
└─┬───┘ └────┬─────┘
│ │
▼ ▼
┌───────┐ 返回提交
│正常 │
│使用 │
└──┬───┘
┌────────────────┐
│ 异常检测 │
└────────┬───────┘
┌───┴───┐
▼ ▼
正常 异常
│ │
└───────┘
┌──────────┐
│ 异常类型 │
└────┬─────┘
┌────┴────┐
▼ ▼
轻微 严重
│ │
▼ ▼
┌──────┐ ┌────────┐
│ 警告 │ │ 冻结 │
└──────┘ └───┬────┘
┌──────────┐
│ 申诉? │
└────┬─────┘
┌────┴────┐
▼ ▼
是 否
│ │
▼ ▼
┌────────┐ ┌──────────┐
│申诉处理 │ │ 冻结状态 │
└────┬────┘ └──────────┘
┌────┴────┐
▼ ▼
通过 拒绝
│ │
▼ ▼
┌─────┐ ┌──────────┐
│解冻 │ │ 冻结状态 │
└─────┘ └──────────┘
```
---
## 5. 通用审批流程
### 5.1 串行审批
```
┌────────┐ 通过 ┌────────┐ 通过 ┌────────┐
│ 提交 │ ───────▶ │ 一级 │ ───────▶ │ 二级 │ ───────▶ 完成
│ 申请 │ │ 审批 │ │ 审批 │
└────────┘ └────────┘ └────────┘
│ │ │
│ 拒绝 │ 拒绝 │ 拒绝
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│ 返回 │ │ 返回 │ │ 返回 │
│ 修改 │ │ 修改 │ │ 修改 │
└────────┘ └────────┘ └────────┘
```
### 5.2 并行审批
```
┌────────┐
│ 提交 │
│ 申请 │
└───┬────┘
┌─────────────────────┐
│ 并行审批节点 │
│ ┌─────┐ ┌─────┐ │
│ │审批A│ │审批B│ │
│ └──┬──┘ └──┬──┘ │
└─────┼─────────┼─────┘
│ │
┌──┴──┐ ┌──┴──┐
▼ ▼ ▼ ▼
通过 拒绝 通过 拒绝
│ │ │ │
└─────┼───┴─────┘
┌───────────────┐
│ 任意通过 │──────▶ 完成
└───────────────┘
全部拒绝
┌───────────┐
│ 返回修改 │
└───────────┘
```
### 5.3 会签审批
```
┌────────┐
│ 提交 │
│ 申请 │
└───┬────┘
┌─────────────────────┐
│ 会签审批节点 │
│ ┌─────┐ ┌─────┐ │
│ │审批A│ │审批B│ │
│ └──┬──┘ └──┬──┘ │
└─────┼─────────┼─────┘
│ │
┌──┴──┐ ┌──┴──┐
▼ ▼ ▼ ▼
通过 通过 通过 拒绝
│ │ │ │
└─────┼───┴─────┘
┌───────────────┐
│ 全部通过 │──────▶ 完成
└───────────────┘
任一拒绝
┌───────────┐
│ 返回修改 │
└───────────┘
```
---
## 6. 审批超时处理
### 6.1 超时升级流程
```
┌──────────────┐
│ 提交审批 │
└──────┬───────┘
┌──────────┐
│ 审批中... │
└────┬─────┘
┌──────────────────┐
│ 50% 超时 │ ──▶ 提醒(站内信、邮件)
└────────┬─────────┘
┌──────────────────┐
│ 80% 超时 │ ──▶ 再次提醒(站内信、邮件、短信)
└────────┬─────────┘
┌──────────────────┐
│ 100% 超时 │ ──▶ 自动升级到上级审批人
└────────┬─────────┘
┌──────────┐
│ 升级处理 │
└──────────┘
```
### 6.2 超时配置
| 审批级别 | 超时时间 | 升级角色 |
|----------|----------|----------|
| 一级审批 | 24h | 部门负责人 |
| 二级审批 | 48h | 部门总监 |
| 三级审批 | 72h | 超级管理员 |

View File

@@ -0,0 +1,345 @@
# 蚊子系统管理后台 - 开发任务分解与追踪
## 任务总览
| 总功能点数 | 总开发任务数 | 总周期 |
|------------|--------------|--------|
| 225个权限点 | 约80个核心任务 | 16周 |
---
## 阶段1基础框架搭建Week 1-2
### 1.1 项目初始化
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 优先级 | 预计工时 | 状态 |
|---------|----------|----------|----------|--------|----------|------|
| TASK-101 | - | Spring Boot项目初始化 | 基础框架 | P0 | 1天 | ⬜ |
| TASK-102 | - | Vue 3项目初始化 | 基础框架 | P0 | 1天 | ⬜ |
| TASK-103 | - | MySQL数据库创建 | 基础框架 | P0 | 0.5天 | ⬜ |
| TASK-104 | - | Redis配置 | 基础框架 | P0 | 0.5天 | ⬜ |
### 1.2 数据库表创建
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 优先级 | 预计工时 | 状态 |
|---------|----------|----------|----------|--------|----------|------|
| TASK-105 | 10.2.1 | 角色表sys_role创建 | 权限管理 | P0 | 0.5天 | ⬜ |
| TASK-106 | 10.2.1 | 权限表sys_permission创建 | 权限管理 | P0 | 0.5天 | ⬜ |
| TASK-107 | 10.2.1 | 角色权限关联表创建 | 权限管理 | P0 | 0.5天 | ⬜ |
| TASK-108 | 10.2.1 | 用户角色关联表创建 | 权限管理 | P0 | 0.5天 | ⬜ |
| TASK-109 | 10.2.1 | 部门表sys_department创建 | 权限管理 | P0 | 0.5天 | ⬜ |
| TASK-110 | 10.2.1 | 审批流程配置表创建 | 审批中心 | P0 | 0.5天 | ⬜ |
| TASK-111 | 10.2.1 | 审批记录表创建 | 审批中心 | P0 | 0.5天 | ⬜ |
| TASK-112 | 10.2.1 | 审批历史表创建 | 审批中心 | P0 | 0.5天 | ⬜ |
| TASK-113 | 10.2.1 | 审计日志表创建 | 审计日志 | P0 | 0.5天 | ⬜ |
| TASK-114 | 10.2.1 | 权限审计表创建 | 权限管理 | P0 | 0.5天 | ⬜ |
### 1.3 基础代码框架
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 优先级 | 预计工时 | 状态 |
|---------|----------|----------|----------|--------|----------|------|
| TASK-115 | - | 后端基础框架搭建 | 基础框架 | P0 | 2天 | ⬜ |
| TASK-116 | - | 前端基础框架搭建 | 基础框架 | P0 | 2天 | ⬜ |
| TASK-117 | - | 统一响应封装 | 基础框架 | P0 | 0.5天 | ⬜ |
| TASK-118 | - | 全局异常处理 | 基础框架 | P0 | 0.5天 | ⬜ |
| TASK-119 | - | 登录认证实现 | 用户管理 | P0 | 2天 | ⬜ |
**阶段1交付物**
- [ ] 可运行的基础框架
- [ ] 完整的数据库表结构
- [ ] 基础认证功能
---
## 阶段2权限核心模块Week 3-4
### 2.1 角色管理
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-201 | 9.8.1 | 角色列表页 | 权限管理 | permission.role.view | P0 | 1天 | ⬜ |
| TASK-202 | 9.8.1 | 角色列表API | 权限管理 | permission.role.view | P0 | 0.5天 | ⬜ |
| TASK-203 | 9.8.1 | 创建角色 | 权限管理 | permission.role.create | P0 | 1天 | ⬜ |
| TASK-204 | 9.8.1 | 编辑角色 | 权限管理 | permission.role.edit | P0 | 1天 | ⬜ |
| TASK-205 | 9.8.1 | 删除角色 | 权限管理 | permission.role.delete | P0 | 0.5天 | ⬜ |
| TASK-206 | 9.8.1 | 分配角色权限 | 权限管理 | permission.role.assign | P0 | 1天 | ⬜ |
### 2.2 权限管理
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-207 | 9.8.2 | 权限树展示 | 权限管理 | permission.role.view | P0 | 1天 | ⬜ |
| TASK-208 | 9.8.2 | 权限分配 | 权限管理 | permission.user.assign | P0 | 1天 | ⬜ |
| TASK-209 | 9.8.2 | 权限撤销 | 权限管理 | permission.user.revoke | P0 | 0.5天 | ⬜ |
| TASK-210 | 9.8.2 | 用户权限查看 | 权限管理 | permission.user.view | P0 | 0.5天 | ⬜ |
### 2.3 部门管理
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-211 | - | 部门树展示 | 权限管理 | permission.department.view | P1 | 1天 | ⬜ |
| TASK-212 | - | 创建部门 | 权限管理 | permission.department.create | P1 | 0.5天 | ⬜ |
| TASK-213 | - | 编辑部门 | 权限管理 | permission.department.edit | P1 | 0.5天 | ⬜ |
| TASK-214 | - | 删除部门 | 权限管理 | permission.department.delete | P1 | 0.5天 | ⬜ |
### 2.4 权限服务核心
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|----------|------|
| TASK-215 | 10.2.2 | 权限判断服务 | 权限管理 | P0 | 2天 | ⬜ |
| TASK-216 | 10.2.2 | 数据权限过滤 | 权限管理 | P0 | 2天 | ⬜ |
| TASK-217 | 10.2.2 | 权限缓存服务 | 权限管理 | P0 | 1天 | ⬜ |
| TASK-218 | 10.2.2 | 权限变更审计 | 权限管理 | P0 | 1天 | ⬜ |
### 2.5 权限前端组件
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|----------|------|
| TASK-219 | 10.2.5 | 权限按钮组件 | 权限管理 | P0 | 1天 | ⬜ |
| TASK-220 | 10.2.4 | 路由权限守卫 | 权限管理 | P0 | 1天 | ⬜ |
| TASK-221 | 10.2.4 | 权限指令 | 权限管理 | P0 | 0.5天 | ⬜ |
| TASK-222 | 10.2.4 | Pinia权限状态 | 权限管理 | P0 | 0.5天 | ⬜ |
**阶段2交付物**
- [ ] 角色管理CRUD完成
- [ ] 权限分配功能完成
- [ ] 部门管理完成
- [ ] 权限服务核心完成
- [ ] 前端权限组件完成
---
## 阶段3审批流引擎Week 5-6
### 3.1 审批配置
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-301 | 7.1 | 审批流程列表 | 审批中心 | approval.config.view | P0 | 1天 | ⬜ |
| TASK-302 | 7.1 | 创建审批流程 | 审批中心 | approval.config.edit | P0 | 1.5天 | ⬜ |
| TASK-303 | 7.1 | 编辑审批流程 | 审批中心 | approval.config.edit | P0 | 1天 | ⬜ |
| TASK-304 | 7.1 | 审批节点配置 | 审批中心 | approval.config.edit | P0 | 1天 | ⬜ |
| TASK-305 | 7.1 | 审批条件配置 | 审批中心 | approval.config.edit | P0 | 1天 | ⬜ |
### 3.2 审批执行
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-306 | 7.1 | 发起审批 | 审批中心 | - | P0 | 1天 | ⬜ |
| TASK-307 | 7.1 | 审批通过 | 审批中心 | approval.execute.approve | P0 | 1天 | ⬜ |
| TASK-308 | 7.1 | 审批拒绝 | 审批中心 | approval.execute.reject | P0 | 1天 | ⬜ |
| TASK-309 | 7.1 | 审批转交 | 审批中心 | approval.execute.transfer | P0 | 0.5天 | ⬜ |
| TASK-310 | 7.1 | 审批撤回 | 审批中心 | - | P0 | 0.5天 | ⬜ |
| TASK-311 | 7.1 | 批量审批 | 审批中心 | approval.batch.execute | P1 | 1天 | ⬜ |
### 3.3 审批查询
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-312 | 9.6.1 | 待审批列表 | 审批中心 | approval.pending.view | P0 | 1天 | ⬜ |
| TASK-313 | 9.6.1 | 待审批数量 | 审批中心 | approval.pending.count | P0 | 0.5天 | ⬜ |
| TASK-314 | 9.6.1 | 已审批列表 | 审批中心 | approval.my.approve | P0 | 1天 | ⬜ |
| TASK-315 | 9.6.1 | 审批历史 | 审批中心 | approval.history.view | P0 | 0.5天 | ⬜ |
| TASK-316 | 9.6.1 | 审批详情 | 审批中心 | approval.detail.view | P0 | 1天 | ⬜ |
### 3.4 审批超时处理
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|----------|------|
| TASK-317 | 7.3 | 审批超时检测 | 审批中心 | P1 | 1天 | ⬜ |
| TASK-318 | 7.3 | 超时提醒通知 | 审批中心 | P1 | 1天 | ⬜ |
| TASK-319 | 7.3 | 超时自动升级 | 审批中心 | P1 | 1天 | ⬜ |
### 3.5 审批前端
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|----------|------|
| TASK-320 | - | 审批中心首页 | 审批中心 | P0 | 1.5天 | ⬜ |
| TASK-321 | - | 审批详情页 | 审批中心 | P0 | 1.5天 | ⬜ |
| TASK-322 | - | 审批时间线组件 | 审批中心 | P0 | 1天 | ⬜ |
| TASK-323 | - | 审批表单组件 | 审批中心 | P0 | 0.5天 | ⬜ |
**阶段3交付物**
- [ ] 审批流程配置完成
- [ ] 审批执行功能完成
- [ ] 审批查询功能完成
- [ ] 审批超时处理完成
- [ ] 审批前端页面完成
---
## 阶段4业务模块开发Week 7-10
### 4.1 仪表盘模块
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 优先级 | 预计权限点 | 工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-401 | 9.1.1 | 仪表盘首页 | 仪表盘 | dashboard.view | P0 | 1.5天 | ⬜ |
| TASK-402 | 9.1.1 | KPI统计卡片 | 仪表盘 | dashboard.view | P0 | 1天 | ⬜ |
| TASK-403 | 9.1.1 | 数据图表 | 仪表盘 | dashboard.view | P0 | 1.5天 | ⬜ |
| TASK-404 | 9.1.1 | 待办事项 | 仪表盘 | dashboard.view | P0 | 0.5天 | ⬜ |
| TASK-405 | 9.1.1 | 导出报表 | 仪表盘 | dashboard.export | P1 | 0.5天 | ⬜ |
### 4.2 活动管理模块
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-406 | 9.2.1 | 活动列表页 | 活动管理 | activity.list.view | P0 | 1.5天 | ⬜ |
| TASK-407 | 9.2.1 | 活动列表API | 活动管理 | activity.list.view | P0 | 1天 | ⬜ |
| TASK-408 | 9.2.1 | 活动搜索筛选 | 活动管理 | activity.list.view | P0 | 0.5天 | ⬜ |
| TASK-409 | 9.2.1 | 活动导出 | 活动管理 | activity.export.execute | P0 | 0.5天 | ⬜ |
| TASK-410 | 9.2.2 | 活动创建页 | 活动管理 | activity.create.submit | P0 | 2天 | ⬜ |
| TASK-411 | 9.2.2 | 活动创建API | 活动管理 | activity.create.submit | P0 | 1天 | ⬜ |
| TASK-412 | 9.2.2 | 活动编辑页 | 活动管理 | activity.edit.submit | P0 | 1.5天 | ⬜ |
| TASK-413 | 9.2.2 | 活动编辑API | 活动管理 | activity.edit.submit | P0 | 1天 | ⬜ |
| TASK-414 | 9.2.3 | 活动详情页 | 活动管理 | activity.detail.view | P0 | 1天 | ⬜ |
| TASK-415 | 9.2.3 | 活动详情API | 活动管理 | activity.detail.view | P0 | 0.5天 | ⬜ |
| TASK-416 | 9.2.3 | 活动发布 | 活动管理 | activity.publish.execute | P0 | 0.5天 | ⬜ |
| TASK-417 | 9.2.3 | 活动暂停/恢复 | 活动管理 | activity.pause/resume.execute | P0 | 0.5天 | ⬜ |
| TASK-418 | 9.2.3 | 活动结束 | 活动管理 | activity.end.execute | P0 | 0.5天 | ⬜ |
| TASK-419 | 9.2.3 | 活动删除 | 活动管理 | activity.delete.execute | P0 | 0.5天 | ⬜ |
| TASK-420 | 9.2.3 | 活动复制 | 活动管理 | activity.clone.execute | P1 | 0.5天 | ⬜ |
### 4.3 用户管理模块
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-421 | 9.3.1 | 用户列表页 | 用户管理 | user.list.view | P0 | 1.5天 | ⬜ |
| TASK-422 | 9.3.1 | 用户列表API | 用户管理 | user.list.view | P0 | 1天 | ⬜ |
| TASK-423 | 9.3.1 | 用户搜索筛选 | 用户管理 | user.list.view | P0 | 0.5天 | ⬜ |
| TASK-424 | 9.3.1 | 用户导出 | 用户管理 | user.detail.export | P0 | 0.5天 | ⬜ |
| TASK-425 | 9.3.2 | 用户详情页 | 用户管理 | user.detail.view | P0 | 1天 | ⬜ |
| TASK-426 | 9.3.2 | 用户详情API | 用户管理 | user.detail.view | P0 | 0.5天 | ⬜ |
| TASK-427 | 9.3.2 | 用户创建 | 用户管理 | user.create.submit | P0 | 1天 | ⬜ |
| TASK-428 | 9.3.2 | 用户编辑 | 用户管理 | user.edit.submit | P0 | 0.5天 | ⬜ |
| TASK-429 | 9.3.2 | 用户冻结 | 用户管理 | user.freeze.execute | P0 | 0.5天 | ⬜ |
| TASK-430 | 9.3.2 | 用户解冻 | 用户管理 | user.unfreeze.execute | P0 | 0.5天 | ⬜ |
| TASK-431 | 9.3.2 | 实名认证 | 用户管理 | user.authenticate.execute | P0 | 1天 | ⬜ |
| TASK-432 | 9.3.2 | 分配权限 | 用户管理 | user.permission.assign | P0 | 0.5天 | ⬜ |
| TASK-433 | 9.3.2 | 分配角色 | 用户管理 | user.role.assign | P0 | 0.5天 | ⬜ |
| TASK-434 | 9.3.2 | 用户标签 | 用户管理 | user.tag.add | P1 | 0.5天 | ⬜ |
| TASK-435 | 9.3.2 | 白名单/黑名单 | 用户管理 | user.whitelist/blacklist | P1 | 0.5天 | ⬜ |
### 4.4 奖励管理模块
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-436 | 9.4.1 | 奖励列表页 | 奖励管理 | reward.list.view | P0 | 1天 | ⬜ |
| TASK-437 | 9.4.1 | 奖励列表API | 奖励管理 | reward.list.view | P0 | 0.5天 | ⬜ |
| TASK-438 | 9.4.1 | 奖励导出 | 奖励管理 | reward.export.execute | P0 | 0.5天 | ⬜ |
| TASK-439 | 9.4.2 | 奖励申请页 | 奖励管理 | reward.apply.submit | P0 | 1天 | ⬜ |
| TASK-440 | 9.4.2 | 奖励申请API | 奖励管理 | reward.apply.submit | P0 | 1天 | ⬜ |
| TASK-441 | 9.4.1 | 奖励审批 | 奖励管理 | reward.apply.approve | P0 | 1天 | ⬜ |
| TASK-442 | 9.4.1 | 奖励发放 | 奖励管理 | reward.grant.execute | P0 | 1天 | ⬜ |
| TASK-443 | 9.4.1 | 奖励取消 | 奖励管理 | reward.grant.cancel | P0 | 0.5天 | ⬜ |
| TASK-444 | 9.4.1 | 奖励对账 | 奖励管理 | reward.reconcile.execute | P1 | 1天 | ⬜ |
### 4.5 风险管理模块
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-445 | 9.5.1 | 风险列表页 | 风险管理 | risk.list.view | P1 | 1天 | ⬜ |
| TASK-446 | 9.5.1 | 风险处理 | 风险管理 | risk.alert.handle | P1 | 1天 | ⬜ |
| TASK-447 | 9.5.2 | 风控规则页 | 风险管理 | risk.rule.view | P1 | 1.5天 | ⬜ |
| TASK-448 | 9.5.2 | 创建风控规则 | 风险管理 | risk.rule.create | P1 | 1天 | ⬜ |
| TASK-449 | 9.5.2 | 编辑风控规则 | 风险管理 | risk.rule.edit | P1 | 0.5天 | ⬜ |
| TASK-450 | 9.5.2 | 删除风控规则 | 风险管理 | risk.rule.delete | P1 | 0.5天 | ⬜ |
| TASK-451 | 9.5.2 | 启用/禁用规则 | 风险管理 | risk.rule.enable/disable | P1 | 0.5天 | ⬜ |
### 4.6 系统配置模块
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-452 | 9.7.1 | 系统配置页 | 系统配置 | system.config.view | P1 | 0.5天 | ⬜ |
| TASK-453 | 9.7.1 | 编辑配置 | 系统配置 | system.config.edit | P1 | 0.5天 | ⬜ |
| TASK-454 | 9.7.1 | 清除缓存 | 系统配置 | system.cache.clear | P1 | 0.5天 | ⬜ |
| TASK-455 | 9.7.2 | API密钥管理 | 系统配置 | system.api-key.create | P1 | 1天 | ⬜ |
### 4.7 审计日志模块
| 任务ID | PRD关联 | 任务名称 | 功能模块 | 权限点 | 优先级 | 预计工时 | 状态 |
|--------|----------|----------|----------|--------|--------|----------|------|
| TASK-456 | 9.7.3 | 审计日志列表 | 审计日志 | audit.log.view | P1 | 1天 | ⬜ |
| TASK-457 | 9.7.3 | 审计日志导出 | 审计日志 | audit.log.export | P1 | 0.5天 | ⬜ |
| TASK-458 | 9.7.3 | 审计日志搜索 | 审计日志 | audit.log.search | P1 | 0.5天 | ⬜ |
**阶段4交付物**
- [ ] 仪表盘模块完成
- [ ] 活动管理模块完成
- [ ] 用户管理模块完成
- [ ] 奖励管理模块完成
- [ ] 风险管理模块完成
- [ ] 系统配置模块完成
- [ ] 审计日志模块完成
---
## 阶段5测试与集成Week 11-12
| 任务ID | 任务名称 | 优先级 | 预计工时 | 状态 |
|--------|----------|--------|----------|------|
| TASK-501 | 单元测试 - 权限服务 | P0 | 3天 | ⬜ |
| TASK-502 | 单元测试 - 审批流引擎 | P0 | 2天 | ⬜ |
| TASK-503 | 集成测试 - 权限API | P0 | 2天 | ⬜ |
| TASK-504 | 集成测试 - 审批流程 | P0 | 2天 | ⬜ |
| TASK-505 | E2E测试 - 权限管理 | P0 | 2天 | ⬜ |
| TASK-506 | E2E测试 - 审批中心 | P0 | 2天 | ⬜ |
| TASK-507 | E2E测试 - 业务模块 | P1 | 2天 | ⬜ |
---
## 阶段6-8优化与部署Week 13-16
| 任务ID | 任务名称 | 优先级 | 预计工时 | 状态 |
|--------|----------|--------|----------|------|
| TASK-601 | 性能优化 - 缓存 | P0 | 2天 | ⬜ |
| TASK-602 | 性能优化 - 数据库 | P0 | 2天 | ⬜ |
| TASK-603 | 安全加固 | P0 | 2天 | ⬜ |
| TASK-604 | 敏感数据脱敏 | P0 | 1天 | ⬜ |
| TASK-605 | 部署文档 | P0 | 1天 | ⬜ |
| TASK-606 | 灰度发布 | P0 | 2天 | ⬜ |
| TASK-607 | 正式上线 | P0 | 1天 | ⬜ |
---
## 任务状态追踪
### 按状态统计
| 状态 | 数量 | 说明 |
|------|------|------|
| ⬜ 待开始 | 60+ | 尚未开始的任务 |
| 🔵 进行中 | 0 | 正在开发的任务 |
| ✅ 已完成 | 0 | 已完成的任务 |
| ⚠️ 阻塞 | 0 | 遇到阻塞的任务 |
### 按模块统计
| 模块 | 任务数 | 完成数 | 完成率 |
|------|--------|--------|--------|
| 基础框架 | 19 | 0 | 0% |
| 权限管理 | 22 | 0 | 0% |
| 审批中心 | 23 | 0 | 0% |
| 仪表盘 | 5 | 0 | 0% |
| 活动管理 | 15 | 0 | 0% |
| 用户管理 | 15 | 0 | 0% |
| 奖励管理 | 9 | 0 | 0% |
| 风险管理 | 7 | 0 | 0% |
| 系统配置 | 4 | 0 | 0% |
| 审计日志 | 3 | 0 | 0% |
| 测试 | 7 | 0 | 0% |
| 部署 | 7 | 0 | 0% |
| **总计** | **136** | **0** | **0%** |
---
## 里程碑检查点
| 里程碑 | 计划完成时间 | 任务数 | 状态 |
|--------|--------------|--------|------|
| M1: 基础框架搭建完成 | Week 2 周末 | 19 | ⬜ |
| M2: 权限核心模块完成 | Week 4 周末 | 22 | ⬜ |
| M3: 审批流引擎完成 | Week 6 周末 | 23 | ⬜ |
| M4: 业务模块开发完成 | Week 10 周末 | 58 | ⬜ |
| M5: 测试完成 | Week 12 周末 | 7 | ⬜ |
| M6: 正式上线 | Week 16 周末 | 7 | ⬜ |

File diff suppressed because it is too large Load Diff

399
docs/prd/角色定义.md Normal file
View File

@@ -0,0 +1,399 @@
# 角色详细定义
## 1. 系统层角色
### 1.1 超级管理员super_admin
| 属性 | 值 |
|------|-----|
| 角色代码 | super_admin |
| 角色名称 | 超级管理员 |
| 英文名称 | Super Admin |
| 角色层级 | 系统层 |
| 数据权限 | 全部 |
**职责描述**
- 系统最高权限拥有者
- 负责系统初始化配置
- 紧急故障处理
- 系统级配置变更
**典型用户**技术负责人、系统owner
**权限范围**
- 所有功能权限
- 系统配置权限
- 用户管理权限(可管理所有角色)
- 数据导出权限
**特殊权限**
- 可以分配和撤销任何角色
- 可以访问系统底层配置
- 可以绕过审批流程(紧急情况)
---
### 1.2 系统管理员system_admin
| 属性 | 值 |
|------|-----|
| 角色代码 | system_admin |
| 角色名称 | 系统管理员 |
| 英文名称 | System Admin |
| 角色层级 | 系统层 |
| 数据权限 | 全部 |
**职责描述**
- 负责系统日常运维
- 用户账号管理
- 系统参数配置
- 缓存管理
- API密钥管理
**典型用户**运维工程师、IT支持人员
**权限范围**
- 系统配置权限
- 用户管理权限
- 权限管理权限
- 缓存管理权限
- API密钥管理权限
- 审计日志查看权限
---
## 2. 管理层角色
### 2.1 运营总监operation_director
| 属性 | 值 |
|------|-----|
| 角色代码 | operation_director |
| 角色名称 | 运营总监 |
| 英文名称 | Operation Director |
| 角色层级 | 管理层 |
| 数据权限 | 部门 |
**职责描述**
- 运营策略制定
- 活动整体规划
- 运营数据分析和汇报
- 重大活动审批
- 团队管理
**典型用户**:运营负责人、运营总监
**审批权限**
- 审批运营专员创建的活动
- 审批运营经理提交的重要决策
---
### 2.2 运营经理operation_manager
| 属性 | 值 |
|------|-----|
| 角色代码 | operation_manager |
| 角色名称 | 运营经理 |
| 英文名称 | Operation Manager |
| 角色层级 | 管理层 |
| 数据权限 | 部门 |
**职责描述**
- 活动策划和执行
- 活动效果跟踪
- 运营数据分析
- 团队成员工作分配
- 一级活动审批
**典型用户**:运营主管、活动策划负责人
**审批权限**
- 审批运营专员创建的活动
---
### 2.3 市场总监marketing_director
| 属性 | 值 |
|------|-----|
| 角色代码 | marketing_director |
| 角色名称 | 市场总监 |
| 英文名称 | Marketing Director |
| 角色层级 | 管理层 |
| 数据权限 | 部门 |
**职责描述**
- 市场策略制定
- 营销活动规划
- 预算管理和审批
- 市场数据分析
- 团队管理
**典型用户**:市场负责人、市场总监
**审批权限**
- 审批市场经理提交的营销活动
- 审批市场预算使用
---
### 2.4 市场经理marketing_manager
| 属性 | 值 |
|------|-----|
| 角色代码 | marketing_manager |
| 角色名称 | 市场经理 |
| 英文名称 | Marketing Manager |
| 角色层级 | 管理层 |
| 数据权限 | 部门 |
**职责描述**
- 营销活动策划
- 活动推广执行
- 推广效果跟踪
- 团队工作分配
**典型用户**:市场主管、营销策划负责人
**审批权限**
- 审批市场专员创建的营销活动
---
### 2.5 财务经理finance_manager
| 属性 | 值 |
|------|-----|
| 角色代码 | finance_manager |
| 角色名称 | 财务经理 |
| 英文名称 | Finance Manager |
| 角色层级 | 管理层 |
| 数据权限 | 部门 |
**职责描述**
- 奖励资金管理
- 财务报表审核
- 奖励发放审批
- 财务合规检查
**典型用户**:财务负责人、会计主管
**审批权限**
- 审批奖励发放申请
- 审批大额奖励
---
### 2.6 风控经理risk_manager
| 属性 | 值 |
|------|-----|
| 角色代码 | risk_manager |
| 角色名称 | 风控经理 |
| 英文名称 | Risk Manager |
| 角色层级 | 管理层 |
| 数据权限 | 部门 |
**职责描述**
- 风控策略制定
- 风控规则配置
- 风险事件审核
- 合规检查
**典型用户**:风控负责人、合规主管
**审批权限**
- 审批风险处理方案
- 审批风控规则变更
---
### 2.7 客服主管cs_manager
| 属性 | 值 |
|------|-----|
| 角色代码 | cs_manager |
| 角色名称 | 客服主管 |
| 英文名称 | CS Manager |
| 角色层级 | 管理层 |
| 数据权限 | 部门 |
**职责描述**
- 客服团队管理
- 客诉处理监督
- 用户权限审批
- 重大客诉处理
**典型用户**:客服负责人、客服主管
**审批权限**
- 审批用户权限变更
- 审批用户解冻申请
---
## 3. 执行层角色
### 3.1 运营专员operation_specialist
| 属性 | 值 |
|------|-----|
| 角色代码 | operation_specialist |
| 角色名称 | 运营专员 |
| 英文名称 | Operation Specialist |
| 角色层级 | 执行层 |
| 数据权限 | 个人 |
**职责描述**
- 活动创建和执行
- 活动日常运营
- 数据统计和汇报
- 用户反馈收集
**典型用户**:运营专员、活动执行人员
---
### 3.2 市场专员marketing_specialist
| 属性 | 值 |
|------|-----|
| 角色代码 | marketing_specialist |
| 角色名称 | 市场专员 |
| 英文名称 | Marketing Specialist |
| 角色层级 | 执行层 |
| 数据权限 | 个人 |
**职责描述**
- 营销活动创建
- 活动推广执行
- 推广数据分析
- 用户邀请管理
**典型用户**:市场专员、推广专员
---
### 3.3 财务专员finance_specialist
| 属性 | 值 |
|------|-----|
| 角色代码 | finance_specialist |
| 角色名称 | 财务专员 |
| 英文名称 | Finance Specialist |
| 角色层级 | 执行层 |
| 数据权限 | 个人 |
**职责描述**
- 奖励发放执行
- 日常对账
- 财务报表制作
- 发票管理
**典型用户**:会计、出纳
---
### 3.4 风控专员risk_specialist
| 属性 | 值 |
|------|-----|
| 角色代码 | risk_specialist |
| 角色名称 | 风控专员 |
| 英文名称 | Risk Specialist |
| 角色层级 | 执行层 |
| 数据权限 | 个人 |
**职责描述**
- 风险事件监测
- 风险异常处理
- 风险数据分析
- 风控规则执行
**典型用户**:风控专员、风险分析师
---
### 3.5 客服专员cs_agent
| 属性 | 值 |
|------|-----|
| 角色代码 | cs_agent |
| 角色名称 | 客服专员 |
| 英文名称 | CS Agent |
| 角色层级 | 执行层 |
| 数据权限 | 个人 |
**职责描述**
- 用户咨询响应
- 问题处理和解答
- 用户反馈记录
- 简单权限操作
**典型用户**:客服人员、用户支持专员
---
## 4. 审计层角色
### 4.1 审计员auditor
| 属性 | 值 |
|------|-----|
| 角色代码 | auditor |
| 角色名称 | 审计员 |
| 英文名称 | Auditor |
| 角色层级 | 审计层 |
| 数据权限 | 全部 |
**职责描述**
- 系统操作审计
- 合规性检查
- 异常行为分析
- 审计报告编写
**典型用户**:内审人员、合规专员
**权限范围**
- 审计日志查看权限
- 审计报表导出权限
- 用户行为分析权限
---
## 5. 角色层级关系图
```
┌─────────────────────────────────────────┐
│ 超级管理员 │
│ (super_admin) │
└─────────────────┬───────────────────────┘
┌─────────────────▼───────────────────────┐
│ 系统管理员 │
│ (system_admin) │
└─────────────────┬───────────────────────┘
┌─────────────┼─────────────┐
│ │ │
┌───▼───┐ ┌────▼────┐ ┌────▼────┐
│运营总监│ │市场总监 │ │财务经理 │
└───┬───┘ └────┬────┘ └────┬────┘
│ │ │
┌───▼───┐ ┌────▼────┐ ┌────▼────┐
│运营经理│ │市场经理 │ │风控经理 │
│ │ │ │ │客服主管 │
└───┬───┘ └────┬────┘ └────┬────┘
│ │ │
┌───▼───┐ ┌────▼────┐ ┌────▼────┐
│运营专员│ │市场专员 │ │财务专员 │
│ │ │ │ │风控专员 │
│ │ │ │ │客服专员 │
└───────┘ └─────────┘ └─────────┘
┌─────────┐
│ 审计员 │
│(auditor)│
└─────────┘
```

View File

@@ -0,0 +1,28 @@
package com.mosquito.project.permission;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
/**
* 角色Repository
*/
@Repository
public interface RoleRepository extends JpaRepository<SysRole, Long> {
/**
* 根据角色代码查询
*/
Optional<SysRole> findByRoleCode(String roleCode);
/**
* 检查角色代码是否存在
*/
boolean existsByRoleCode(String roleCode);
/**
* 根据角色代码查询(排除已删除)
*/
Optional<SysRole> findByRoleCodeAndDeletedFalse(String roleCode);
}

View File

@@ -0,0 +1,115 @@
package com.mosquito.project.permission;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
/**
* 角色Service - 角色管理核心业务逻辑
*/
@Service
@Transactional
public class RoleService {
private final RoleRepository roleRepository;
public RoleService(RoleRepository roleRepository) {
this.roleRepository = roleRepository;
}
/**
* 查询所有角色
*/
@Transactional(readOnly = true)
public List<SysRole> findAll() {
return roleRepository.findAll();
}
/**
* 根据ID查询角色
*/
@Transactional(readOnly = true)
public Optional<SysRole> findById(Long id) {
return roleRepository.findById(id);
}
/**
* 根据角色代码查询
*/
@Transactional(readOnly = true)
public Optional<SysRole> findByRoleCode(String roleCode) {
return roleRepository.findByRoleCodeAndDeletedFalse(roleCode);
}
/**
* 创建角色
*/
public SysRole save(SysRole role) {
// 检查角色代码是否已存在
if (roleRepository.existsByRoleCode(role.getRoleCode())) {
throw new IllegalArgumentException("角色代码已存在: " + role.getRoleCode());
}
// 设置默认值
if (role.getDeleted() == null) {
role.setDeleted(0);
}
if (role.getStatus() == null) {
role.setStatus("ENABLED");
}
if (role.getIsCore() == null) {
role.setIsCore(0);
}
return roleRepository.save(role);
}
/**
* 更新角色
*/
public Optional<SysRole> update(Long id, SysRole roleData) {
return roleRepository.findById(id)
.map(existingRole -> {
// 更新字段
if (roleData.getRoleName() != null) {
existingRole.setRoleName(roleData.getRoleName());
}
if (roleData.getRoleLevel() != null) {
existingRole.setRoleLevel(roleData.getRoleLevel());
}
if (roleData.getDataScope() != null) {
existingRole.setDataScope(roleData.getDataScope());
}
if (roleData.getDescription() != null) {
existingRole.setDescription(roleData.getDescription());
}
if (roleData.getStatus() != null) {
existingRole.setStatus(roleData.getStatus());
}
if (roleData.getIsCore() != null) {
existingRole.setIsCore(roleData.getIsCore());
}
return roleRepository.save(existingRole);
});
}
/**
* 删除角色(软删除)
*/
public void delete(Long id) {
roleRepository.findById(id)
.ifPresent(role -> {
role.setDeleted(1);
role.setStatus("DISABLED");
roleRepository.save(role);
});
}
/**
* 检查角色代码是否存在
*/
@Transactional(readOnly = true)
public boolean existsByRoleCode(String roleCode) {
return roleRepository.existsByRoleCode(roleCode);
}
}

View File

@@ -0,0 +1,146 @@
package com.mosquito.project.permission;
import jakarta.persistence.*;
import java.time.LocalDateTime;
/**
* 角色实体 - 对应sys_role表
*/
@Entity
@Table(name = "sys_role")
public class SysRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "role_code", nullable = false, unique = true, length = 50)
private String roleCode;
@Column(name = "role_name", nullable = false, length = 100)
private String roleName;
@Column(name = "role_level", nullable = false, length = 20)
private String roleLevel;
@Column(name = "data_scope", nullable = false, length = 20)
private String dataScope;
@Column(name = "description", length = 500)
private String description;
@Column(name = "is_core")
private Integer isCore;
@Column(name = "status", length = 20)
private String status;
@Column(name = "created_by")
private Long createdBy;
@Column(name = "created_at")
private LocalDateTime createdAt;
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Column(name = "deleted")
private Integer deleted;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRoleCode() {
return roleCode;
}
public void setRoleCode(String roleCode) {
this.roleCode = roleCode;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleLevel() {
return roleLevel;
}
public void setRoleLevel(String roleLevel) {
this.roleLevel = roleLevel;
}
public String getDataScope() {
return dataScope;
}
public void setDataScope(String dataScope) {
this.dataScope = dataScope;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Integer getIsCore() {
return isCore;
}
public void setIsCore(Integer isCore) {
this.isCore = isCore;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Long getCreatedBy() {
return createdBy;
}
public void setCreatedBy(Long createdBy) {
this.createdBy = createdBy;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public LocalDateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
}

View File

@@ -1,96 +0,0 @@
-- 权限管理系统数据库迁移
-- 版本: V21
-- 描述: 创建权限管理核心表
-- 创建时间: 2026-03-04
-- 1. 角色表
CREATE TABLE sys_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '角色ID',
role_code VARCHAR(50) NOT NULL UNIQUE COMMENT '角色代码',
role_name VARCHAR(100) NOT NULL COMMENT '角色名称',
role_level VARCHAR(20) NOT NULL COMMENT '角色层级SYSTEM/MANAGER/EXECUTOR/AUDIT',
data_scope VARCHAR(20) NOT NULL DEFAULT 'DEPARTMENT' COMMENT '数据权限ALL/DEPARTMENT/OWN',
description VARCHAR(500) COMMENT '角色描述',
is_core TINYINT(1) DEFAULT 0 COMMENT '是否核心角色0-扩展/1-核心',
status VARCHAR(20) DEFAULT 'ENABLED' COMMENT '状态ENABLED/DISABLED',
created_by BIGINT COMMENT '创建人',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标志0-未删除/1-已删除',
INDEX idx_role_code (role_code),
INDEX idx_status (status),
INDEX idx_role_level (role_level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
-- 2. 权限表
CREATE TABLE sys_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '权限ID',
permission_code VARCHAR(100) NOT NULL UNIQUE COMMENT '权限代码',
permission_name VARCHAR(100) NOT NULL COMMENT '权限名称',
module_code VARCHAR(50) NOT NULL COMMENT '模块代码',
resource_code VARCHAR(50) COMMENT '资源代码',
operation_code VARCHAR(50) COMMENT '操作代码view/create/edit/delete/approve/export/execute',
data_scope VARCHAR(20) COMMENT '数据范围ALL/DEPARTMENT/OWN',
description VARCHAR(500) COMMENT '权限描述',
sort_order INT DEFAULT 0 COMMENT '排序',
status VARCHAR(20) DEFAULT 'ENABLED' COMMENT '状态',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_permission_code (permission_code),
INDEX idx_module_code (module_code),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表';
-- 3. 角色权限关联表
CREATE TABLE sys_role_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
role_id BIGINT NOT NULL COMMENT '角色ID',
permission_id BIGINT NOT NULL COMMENT '权限ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_role_permission (role_id, permission_id),
INDEX idx_role_id (role_id),
INDEX idx_permission_id (permission_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表';
-- 4. 用户角色关联表
CREATE TABLE sys_user_role (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
role_id BIGINT NOT NULL COMMENT '角色ID',
department_id BIGINT COMMENT '部门ID',
created_by BIGINT COMMENT '分配人',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_role_dept (user_id, role_id, department_id),
INDEX idx_user_id (user_id),
INDEX idx_role_id (role_id),
INDEX idx_department_id (department_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表';
-- 5. 部门表
CREATE TABLE sys_department (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '部门ID',
dept_name VARCHAR(100) NOT NULL COMMENT '部门名称',
parent_id BIGINT COMMENT '父部门ID',
dept_code VARCHAR(50) COMMENT '部门编码',
leader_id BIGINT COMMENT '部门负责人',
sort_order INT DEFAULT 0 COMMENT '排序',
status VARCHAR(20) DEFAULT 'ENABLED' COMMENT '状态',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_parent_id (parent_id),
INDEX idx_dept_code (dept_code),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表';
-- 6. 用户直接权限表(用于临时权限)
CREATE TABLE sys_user_permission (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '用户ID',
permission_id BIGINT NOT NULL COMMENT '权限ID',
expire_time DATETIME COMMENT '过期时间',
created_by BIGINT COMMENT '分配人',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_permission (user_id, permission_id),
INDEX idx_user_id (user_id),
INDEX idx_permission_id (permission_id),
INDEX idx_expire_time (expire_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户直接权限表';

View File

@@ -1,146 +0,0 @@
-- 审批流程系统数据库迁移
-- 版本: V22
-- 描述: 创建审批流程相关表
-- 创建时间: 2026-03-04
-- 1. 审批流程配置表
CREATE TABLE sys_approval_flow (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '流程ID',
flow_code VARCHAR(50) NOT NULL UNIQUE COMMENT '流程代码',
flow_name VARCHAR(100) NOT NULL COMMENT '流程名称',
module_code VARCHAR(50) NOT NULL COMMENT '所属模块',
business_type VARCHAR(50) NOT NULL COMMENT '业务类型',
approval_type VARCHAR(20) NOT NULL COMMENT '审批类型SERIAL(串行)/PARALLEL(并行)/CONDITIONAL(条件)',
approval_mode VARCHAR(20) NOT NULL DEFAULT 'ANY' COMMENT '审批模式ANY(或签)/ALL(会签)',
timeout_hours INT DEFAULT 24 COMMENT '审批超时小时数',
auto_approve TINYINT(1) DEFAULT 0 COMMENT '是否支持自动审批',
auto_approve_rule VARCHAR(500) COMMENT '自动审批规则表达式',
allow_transfer TINYINT(1) DEFAULT 1 COMMENT '是否允许转审',
allow_cc TINYINT(1) DEFAULT 1 COMMENT '是否允许抄送',
notify_type VARCHAR(50) DEFAULT 'EMAIL,IN_APP' COMMENT '通知类型EMAIL/IN_APP/SMS/WECHAT',
form_template TEXT COMMENT '审批表单模板(JSON)',
description VARCHAR(500) COMMENT '流程描述',
is_active TINYINT(1) DEFAULT 1 COMMENT '是否启用',
priority INT DEFAULT 0 COMMENT '优先级',
created_by BIGINT COMMENT '创建人',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted TINYINT(1) DEFAULT 0 COMMENT '删除标志',
INDEX idx_flow_code (flow_code),
INDEX idx_module_code (module_code),
INDEX idx_business_type (business_type),
INDEX idx_is_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批流程配置表';
-- 2. 审批节点配置表
CREATE TABLE sys_approval_node (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '节点ID',
flow_id BIGINT NOT NULL COMMENT '流程ID',
node_code VARCHAR(50) NOT NULL COMMENT '节点代码',
node_name VARCHAR(100) NOT NULL COMMENT '节点名称',
node_type VARCHAR(20) NOT NULL COMMENT '节点类型START/APPROVAL/CONDITION/CC/END',
node_order INT NOT NULL DEFAULT 0 COMMENT '节点顺序',
approver_type VARCHAR(20) NOT NULL COMMENT '审批人类型USER/ROLE/DEPARTMENT/MANAGER/DYNAMIC',
approver_value VARCHAR(500) COMMENT '审批人值(用户ID/角色ID/部门ID/表达式)',
approver_count INT DEFAULT 1 COMMENT '审批人数(会签时>1)',
condition_expression VARCHAR(1000) COMMENT '条件表达式(CONDITION节点使用)',
timeout_action VARCHAR(20) COMMENT '超时动作AUTO_PASS/AUTO_REJECT/NOTIFY/ESCALATE',
timeout_hours INT DEFAULT 24 COMMENT '节点超时小时数',
allow_transfer TINYINT(1) DEFAULT 1 COMMENT '是否允许转审',
allow_reject TINYINT(1) DEFAULT 1 COMMENT '是否允许驳回',
reject_to_node VARCHAR(50) COMMENT '驳回到节点代码',
allow_callback TINYINT(1) DEFAULT 1 COMMENT '是否允许撤回',
notify_before INT COMMENT '提前通知分钟数',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_flow_id (flow_id),
INDEX idx_node_code (node_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批节点配置表';
-- 3. 审批实例表
CREATE TABLE sys_approval_instance (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '实例ID',
instance_no VARCHAR(50) NOT NULL UNIQUE COMMENT '实例编号',
flow_id BIGINT NOT NULL COMMENT '流程ID',
flow_code VARCHAR(50) NOT NULL COMMENT '流程代码',
flow_name VARCHAR(100) NOT NULL COMMENT '流程名称',
module_code VARCHAR(50) NOT NULL COMMENT '模块代码',
business_type VARCHAR(50) NOT NULL COMMENT '业务类型',
business_id BIGINT NOT NULL COMMENT '业务ID',
business_key VARCHAR(100) COMMENT '业务键',
title VARCHAR(200) NOT NULL COMMENT '审批标题',
applicant_id BIGINT NOT NULL COMMENT '申请人ID',
applicant_name VARCHAR(100) COMMENT '申请人姓名',
applicant_dept_id BIGINT COMMENT '申请人部门ID',
current_node_code VARCHAR(50) COMMENT '当前节点代码',
current_node_name VARCHAR(100) COMMENT '当前节点名称',
approval_status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '审批状态PENDING/APPROVING/APPROVED/REJECTED/CANCELLED/TRANSFERRED',
form_data JSON COMMENT '表单数据',
total_amount DECIMAL(15,2) COMMENT '涉及金额',
level INT DEFAULT 1 COMMENT '审批级别(多级审批)',
related_instance_id BIGINT COMMENT '关联实例ID',
external_no VARCHAR(100) COMMENT '外部单据编号',
source_system VARCHAR(50) COMMENT '来源系统',
callback_url VARCHAR(500) COMMENT '回调URL',
callback_status VARCHAR(20) COMMENT '回调状态',
started_at DATETIME COMMENT '开始时间',
ended_at DATETIME COMMENT '结束时间',
duration_hours INT COMMENT '处理时长(小时)',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_instance_no (instance_no),
INDEX idx_flow_id (flow_id),
INDEX idx_business (business_type, business_id),
INDEX idx_applicant_id (applicant_id),
INDEX idx_approval_status (approval_status),
INDEX idx_current_node (current_node_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批实例表';
-- 4. 审批记录表
CREATE TABLE sys_approval_record (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '记录ID',
instance_id BIGINT NOT NULL COMMENT '实例ID',
node_code VARCHAR(50) NOT NULL COMMENT '节点代码',
node_name VARCHAR(100) COMMENT '节点名称',
approver_id BIGINT NOT NULL COMMENT '审批人ID',
approver_name VARCHAR(100) COMMENT '审批人姓名',
approver_dept_id BIGINT COMMENT '审批人部门ID',
action_type VARCHAR(20) NOT NULL COMMENT '操作类型APPROVE/REJECT/TRANSFER/CC/ESCALATE',
action_result VARCHAR(20) NOT NULL COMMENT '操作结果PASS/REJECT/TRANSFERRED/SKIPPED',
comment TEXT COMMENT '审批意见',
attachment_urls VARCHAR(2000) COMMENT '附件URL(逗号分隔)',
suggest_next_node VARCHAR(50) COMMENT '建议下一节点',
is_last TINYINT(1) DEFAULT 0 COMMENT '是否最后一级',
level INT DEFAULT 1 COMMENT '审批级别',
sequence INT NOT NULL DEFAULT 0 COMMENT '审批顺序',
delegate_from_id BIGINT COMMENT '委托来源用户ID',
delegate_from_name VARCHAR(100) COMMENT '委托来源用户名',
timeout_action VARCHAR(20) COMMENT '超时自动处理',
action_at DATETIME COMMENT '审批时间',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_instance_id (instance_id),
INDEX idx_approver_id (approver_id),
INDEX idx_action_type (action_type),
INDEX idx_action_result (action_result)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批记录表';
-- 5. 审批历史表
CREATE TABLE sys_approval_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '历史ID',
instance_id BIGINT NOT NULL COMMENT '实例ID',
instance_no VARCHAR(50) NOT NULL COMMENT '实例编号',
node_code VARCHAR(50) NOT NULL COMMENT '节点代码',
node_name VARCHAR(100) COMMENT '节点名称',
operator_id BIGINT NOT NULL COMMENT '操作人ID',
operator_name VARCHAR(100) COMMENT '操作人姓名',
operator_type VARCHAR(20) NOT NULL COMMENT '操作人类型APPROVER/APPLICANT/SYSTEM',
action_type VARCHAR(20) NOT NULL COMMENT '操作类型',
action_detail TEXT COMMENT '操作详情',
form_snapshot JSON COMMENT '表单快照',
comment TEXT COMMENT '备注',
attachment_urls VARCHAR(2000) COMMENT '附件',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_instance_id (instance_id),
INDEX idx_instance_no (instance_no),
INDEX idx_operator_id (operator_id),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审批历史表';

View File

@@ -1,121 +0,0 @@
-- 审计与权限审计数据库迁移
-- 版本: V23
-- 描述: 创建审计日志和权限审计表
-- 创建时间: 2026-03-04
-- 1. 审计日志表
CREATE TABLE sys_audit_log (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '日志ID',
trace_id VARCHAR(64) COMMENT '链路追踪ID',
user_id BIGINT COMMENT '用户ID',
user_name VARCHAR(100) COMMENT '用户名',
user_ip VARCHAR(50) COMMENT '用户IP',
user_agent VARCHAR(500) COMMENT '用户代理',
module_code VARCHAR(50) NOT NULL COMMENT '模块代码',
module_name VARCHAR(100) COMMENT '模块名称',
operation_type VARCHAR(50) NOT NULL COMMENT '操作类型',
operation_name VARCHAR(100) COMMENT '操作名称',
business_type VARCHAR(50) COMMENT '业务类型',
business_id VARCHAR(100) COMMENT '业务ID',
business_no VARCHAR(100) COMMENT '业务编号',
request_method VARCHAR(10) COMMENT '请求方法',
request_url VARCHAR(500) COMMENT '请求URL',
request_params TEXT COMMENT '请求参数',
request_body TEXT COMMENT '请求体',
response_code VARCHAR(20) COMMENT '响应码',
response_message VARCHAR(500) COMMENT '响应消息',
response_time_ms INT COMMENT '响应耗时(毫秒)',
error_stack TEXT COMMENT '错误堆栈',
affected_records INT DEFAULT 0 COMMENT '影响记录数',
data_before JSON COMMENT '修改前数据',
data_after JSON COMMENT '修改后数据',
is_sensitive TINYINT(1) DEFAULT 0 COMMENT '是否敏感操作',
sensitivity_level VARCHAR(20) COMMENT '敏感级别NORMAL/WARNING/DANGER',
resource_type VARCHAR(50) COMMENT '资源类型',
resource_id VARCHAR(100) COMMENT '资源ID',
location VARCHAR(200) COMMENT '地理位置',
device_info VARCHAR(200) COMMENT '设备信息',
session_id VARCHAR(100) COMMENT '会话ID',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_trace_id (trace_id),
INDEX idx_user_id (user_id),
INDEX idx_module_operation (module_code, operation_type),
INDEX idx_business (business_type, business_id),
INDEX idx_created_at (created_at),
INDEX idx_user_ip (user_ip)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='审计日志表';
-- 2. 权限审计表
CREATE TABLE sys_permission_audit (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '审计ID',
audit_type VARCHAR(20) NOT NULL COMMENT '审计类型GRANT/REVOKE/TRANSFER/EXPIRE',
target_type VARCHAR(20) NOT NULL COMMENT '目标类型USER/ROLE/DEPARTMENT',
target_id BIGINT NOT NULL COMMENT '目标ID',
target_name VARCHAR(100) COMMENT '目标名称',
target_code VARCHAR(100) COMMENT '目标代码',
permission_type VARCHAR(20) NOT NULL COMMENT '权限类型ROLE/DIRECT/MENU/DATA',
permission_id BIGINT COMMENT '权限ID',
permission_code VARCHAR(100) COMMENT '权限代码',
permission_name VARCHAR(100) COMMENT '权限名称',
permission_scope VARCHAR(20) COMMENT '权限范围ALL/DEPARTMENT/OWN',
department_id BIGINT COMMENT '部门ID',
department_name VARCHAR(100) COMMENT '部门名称',
expire_time DATETIME COMMENT '过期时间',
reason VARCHAR(500) COMMENT '授权原因',
source_type VARCHAR(20) COMMENT '来源类型MANUAL/APPROVAL/AUTO',
source_id BIGINT COMMENT '来源ID',
source_no VARCHAR(100) COMMENT '来源单据编号',
operator_id BIGINT COMMENT '操作人ID',
operator_name VARCHAR(100) COMMENT '操作人姓名',
operator_ip VARCHAR(50) COMMENT '操作人IP',
approval_instance_id BIGINT COMMENT '审批实例ID',
status VARCHAR(20) DEFAULT 'APPROVED' COMMENT '状态PENDING/APPROVED/REJECTED/CANCELLED',
effective_time DATETIME COMMENT '生效时间',
effect_status VARCHAR(20) COMMENT '生效状态EFFECTIVE/EXPIRED/REVOKED',
remark VARCHAR(500) COMMENT '备注',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_audit_type (audit_type),
INDEX idx_target (target_type, target_id),
INDEX idx_permission (permission_type, permission_id),
INDEX idx_source (source_type, source_id),
INDEX idx_operator (operator_id),
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限审计表';
-- 3. 用户权限快照表(定期生成)
CREATE TABLE sys_user_permission_snapshot (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '快照ID',
user_id BIGINT NOT NULL COMMENT '用户ID',
snapshot_date DATE NOT NULL COMMENT '快照日期',
role_ids VARCHAR(500) COMMENT '角色ID列表',
role_names VARCHAR(1000) COMMENT '角色名称列表',
permission_ids TEXT COMMENT '权限ID列表(JSON数组)',
permission_codes TEXT COMMENT '权限代码列表(JSON数组)',
permission_count INT DEFAULT 0 COMMENT '权限数量',
data_scope VARCHAR(20) COMMENT '数据权限范围',
department_id BIGINT COMMENT '主部门ID',
department_name VARCHAR(100) COMMENT '主部门名称',
all_department_ids VARCHAR(500) COMMENT '所有部门ID',
is_active TINYINT(1) DEFAULT 1 COMMENT '是否有效',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_date (user_id, snapshot_date),
INDEX idx_user_id (user_id),
INDEX idx_snapshot_date (snapshot_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户权限快照表';
-- 4. 部门层级关系表(支持树形查询)
CREATE TABLE sys_department_relation (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
ancestor_id BIGINT NOT NULL COMMENT '祖先部门ID',
descendant_id BIGINT NOT NULL COMMENT '后代部门ID',
depth INT NOT NULL DEFAULT 0 COMMENT '层级深度',
path VARCHAR(1000) NOT NULL COMMENT '路径',
is_direct TINYINT(1) DEFAULT 0 COMMENT '是否直接上级',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_descendant (descendant_id, ancestor_id),
INDEX idx_ancestor (ancestor_id),
INDEX idx_descendant (descendant_id),
INDEX idx_path (path)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门层级关系表';

View File

@@ -270,7 +270,7 @@ class PermissionSchemaVerificationTest {
@Entity @Entity
@Table(name = "sys_role") @Table(name = "sys_role")
class SysRole { public class SysRole {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -305,7 +305,7 @@ class SysRole {
@Entity @Entity
@Table(name = "sys_permission") @Table(name = "sys_permission")
class SysPermission { public class SysPermission {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -340,7 +340,7 @@ class SysPermission {
@Entity @Entity
@Table(name = "sys_user_role") @Table(name = "sys_user_role")
class SysUserRole { public class SysUserRole {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -363,7 +363,7 @@ class SysUserRole {
@Entity @Entity
@Table(name = "sys_role_permission") @Table(name = "sys_role_permission")
class SysRolePermission { public class SysRolePermission {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -380,7 +380,7 @@ class SysRolePermission {
@Entity @Entity
@Table(name = "sys_department") @Table(name = "sys_department")
class SysDepartment { public class SysDepartment {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -409,7 +409,7 @@ class SysDepartment {
@Entity @Entity
@Table(name = "sys_approval_flow") @Table(name = "sys_approval_flow")
class SysApprovalFlow { public class SysApprovalFlow {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -444,7 +444,7 @@ class SysApprovalFlow {
@Entity @Entity
@Table(name = "sys_approval_record") @Table(name = "sys_approval_record")
class SysApprovalRecord { public class SysApprovalRecord {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -479,7 +479,7 @@ class SysApprovalRecord {
@Entity @Entity
@Table(name = "sys_approval_history") @Table(name = "sys_approval_history")
class SysApprovalHistory { public class SysApprovalHistory {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -505,7 +505,7 @@ class SysApprovalHistory {
@Entity @Entity
@Table(name = "sys_permission_audit") @Table(name = "sys_permission_audit")
class SysPermissionAudit { public class SysPermissionAudit {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@@ -537,7 +537,7 @@ class SysPermissionAudit {
@Entity @Entity
@Table(name = "sys_sensitive_field") @Table(name = "sys_sensitive_field")
class SysSensitiveField { public class SysSensitiveField {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;