Files
TARE-Learn/第 4 天:JeecgBoot 工单复杂业务开发:权限、审计、异常态与看板.md
T
smart 67837df8d0 docs: 更新TRA编程培训课程材料、课件与AI技能交付包
- 新增全套考试卷、评估卷、参考答案与考试培训包模板
- 修正slidev培训课件:调整模块标题、链路图缩放,替换工单示例为通用业务对象
- 修正课堂红线表述为证据红线,将小组作业调整为个人作业要求
- 新增权限、状态流转、审计日志、看板指标四类可复用业务规则块
- 整理AI工程技能交付包,迁移旧资产至客户专属交付包并统一术语
- 新增考试输出模板与TRAE使用记录文档
2026-08-08 11:00:36 +08:00

2818 lines
72 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第 4 天:JeecgBoot 工单复杂业务开发:权限、审计、异常态与看板
# 第 0 部分:从基础功能到复杂业务
---
## Slide 0-1:第 3 天到第 4 天
### PPT 页面内容
```Plain Text
第 3 天:
JeecgBoot 工单基础功能闭环
完成:
需求拆解
接口契约
代码生成 Review
工单列表
工单详情
基础验证
第 4 天:
复杂业务开发与上线前审查
```
### 讲师逐字稿
昨天我们已经把 JeecgBoot 工单模块的基础功能跑通了。
第三天的重点是从需求到基础功能闭环:先把工单需求拆成用户故事和验收标准,再设计字段、接口契约、页面状态,然后借助 JeecgBoot 的代码生成能力得到基础 CRUD,最后对工单列表和工单详情做基础验证。
今天进入第四天,重点完全不同。
第四天不是继续生成 CRUD,也不是把页面字段再调整一遍。
今天要处理真实企业后台最容易出问题的部分:权限、状态流转、审计日志、异常态、防重复提交和看板指标。
也就是说,第三天解决“能跑通”,第四天解决“能不能安全、可控、可审计、可上线前审查”。
---
## Slide 0-2:第四天训练主线
### PPT 页面内容
```Plain Text
今天训练七个动作:
设计 RBAC 权限矩阵
生成权限控制方案
设计工单状态机
补齐审计日志
处理异常态和防御性逻辑
开发研发效能看板
阶段 Review 与修复
```
### 讲师逐字稿
今天的主线有七个动作。
第一,设计 RBAC 权限矩阵。工单模块不是所有人都能做所有操作。
第二,生成权限控制方案。权限不能只停留在按钮隐藏,必须覆盖菜单、按钮、接口和数据权限。
第三,设计工单状态机。工单从创建、处理中、待验证、关闭、驳回,不是随便跳转的。
第四,补齐审计日志。谁在什么时候改了什么字段,必须能追溯。
第五,处理异常态和防御性逻辑。空数据、接口失败、权限不足、重复提交、非法状态流转都要有明确处理。
第六,开发研发效能看板。看板不是炫技图表,而是对工单数据进行指标化管理。
第七,阶段 Review 与修复。今天最后要用 TRAE 对当天复杂业务代码做一次结构化 Review。
---
## Slide 0-3:第四天贯穿案例
### PPT 页面内容
```Plain Text
贯穿案例:
JeecgBoot 工单模块增强
从“能用”
升级到:
可控
可审计
可验证
可统计
可 Review
```
### 讲师逐字稿
第四天仍然使用 JeecgBoot 工单模块。
但今天的目标不是做一个新的模块,而是把第三天的基础工单模块增强到更接近企业真实系统的状态。
一个工单模块只是能查询、能打开详情,还不能算真正可用。
真实系统还要回答几个问题:
谁能新增工单?谁能指派工单?谁能删除工单?谁能关闭工单?
状态能不能乱跳?关闭后的工单能不能重新处理?
指派人变更有没有日志?状态变更有没有前后值?
接口失败时页面会不会崩?重复点击会不会提交两次?
看板指标怎么算?关闭周期的口径是什么?
今天就围绕这些问题展开。
---
## Slide 0-4:第四天不做什么
### PPT 页面内容
```Plain Text
今天不做:
不重新生成基础 CRUD
不大改 JeecgBoot 框架
不追求复杂页面效果
不让 AI 自行决定业务权限
不跳过人工 Review
今天只做:
围绕工单模块补复杂业务闭环
```
### 讲师逐字稿
在正式进入实操之前,先把边界说清楚。
第四天不是让大家重新生成一个工单 CRUD。
第三天已经完成基础功能闭环,今天是在这个基础上补复杂业务能力。
也不要让 AI 大改 JeecgBoot 框架。
JeecgBoot 本身已经提供菜单、权限、代码生成、日志、字典、前后端分层等能力,课堂里要做的是顺着它的体系增强工单模块,而不是绕开框架另起一套。
今天也不追求看板页面多炫。
看板的重点是指标口径和数据来源,不是图表数量。
最重要的是,不让 AI 自己决定业务权限。
AI 可以生成矩阵初稿、列出遗漏项、生成检查清单,但最终谁能删除工单、谁能关闭工单、谁能看审计日志,必须由人确认。
---
## Slide 0-5:课堂工作区与代码落点
### PPT 页面内容
```Plain Text
课堂实操围绕四类文件:
前端页面
前端 API
后端 Controller / Service
权限、日志、状态、看板相关模型
要求:
每个改动都能说清文件位置、业务规则和验收方式
```
### 讲师逐字稿
今天虽然是讲义课,但每个产物都要能落到代码现场。
JeecgBoot 不同版本、不同团队生成目录可能略有差异,所以讲义里不强行绑定唯一目录。
课堂上大家以自己沙箱项目实际生成路径为准。
通常会涉及四类文件。
第一类是前端页面,比如工单列表、详情、表单、看板页面。
第二类是前端 API,比如工单查询、指派、状态流转、审计日志、看板统计接口。
第三类是后端 Controller 和 Service,比如 `WorkOrderController`、`WorkOrderServiceImpl`。
第四类是权限、日志、状态、看板相关模型,比如状态枚举、流转请求 DTO、审计日志实体、看板指标 VO。
今天每个小组做完一个实操,都要回答三个问题:改了哪里、遵守了哪条业务规则、怎么验收。
### 课堂产出
```md
# 第四天课堂工作区记录
## 前端文件
- 工单列表页面:
- 工单详情页面:
- 工单 API:
- 工单看板页面:
## 后端文件
- Controller:
- Service:
- Mapper:
- Entity / DTO / VO:
## 配置与数据
- 菜单权限配置:
- 字典配置:
- 审计日志表:
## 说明
以上路径以课堂沙箱项目实际生成结果为准。
```
---
# 模块 1:RBAC 权限模型设计
---
## Slide 1-1:为什么工单模块必须先做权限矩阵?
### PPT 页面内容
```Plain Text
工单模块不是普通 CRUD
不同角色看到的内容不同
不同角色能做的动作不同
不同角色的数据范围不同
先设计权限矩阵
再生成权限控制方案
```
### 讲师逐字稿
工单模块看起来像一个普通 CRUD,但真实业务里它不是普通 CRUD。
管理员、负责人、研发、测试、只读用户,他们的权限边界完全不同。
研发可以处理自己被指派的工单,但不一定能删除工单。
测试可以创建缺陷工单,也可以验证或驳回,但不一定能指派所有人。
负责人可以查看团队工单、指派、跟踪进度。
只读用户只能查看,不能修改。
所以在写权限代码之前,必须先设计权限矩阵。
如果没有权限矩阵,AI 很容易直接按 CRUD 默认生成新增、编辑、删除按钮,最后变成所有人都能看到或调用敏感操作。
---
## Slide 1-2:工单角色定义
### PPT 页面内容
```Plain Text
建议角色:
管理员
负责人
研发
测试
只读用户
```
### 讲师逐字稿
今天我们先定义五类角色。
管理员拥有全部工单管理权限,可以做配置、删除、看板查看等操作。
负责人负责团队工单,可以查看团队范围内工单、指派工单、推动状态流转、查看看板。
研发负责处理被分配给自己的工单,可以更新处理进度、提交验证、评论。
测试可以创建缺陷工单,可以验证处理结果,可以驳回或建议关闭。
只读用户只查看,不修改。
注意,这里先不用纠结和企业真实组织是否完全一致。课堂上需要一个足够典型的 RBAC 模型,后面才能训练权限矩阵、状态流转和测试点。
---
## Slide 1-3:RBAC 权限矩阵示例
### PPT 页面内容
```Plain Text
权限矩阵必须回答:
谁能看?
谁能改?
谁能删?
谁能指派?
谁能流转状态?
谁能看统计?
```
### 讲师逐字稿
权限矩阵不是写几句“管理员权限最大”。
它必须落到具体功能点。
比如查看列表、查看详情、新增工单、编辑工单、删除工单、指派工单、更新状态、查看审计记录、查看看板。
每个功能点都要明确哪些角色允许,哪些角色不允许。
这张矩阵后面会直接影响前端按钮权限、后端接口权限和测试用例。
### 课堂产出
```md
# 工单模块 RBAC 权限矩阵
| 功能 | 管理员 | 负责人 | 研发 | 测试 | 只读 |
|---|---|---|---|---|---|
| 查看列表 | Y | Y | Y | Y | Y |
| 查看详情 | Y | Y | Y | Y | Y |
| 新增工单 | Y | Y | N | Y | N |
| 编辑工单 | Y | Y | 条件允许 | 条件允许 | N |
| 删除工单 | Y | N | N | N | N |
| 指派工单 | Y | Y | N | N | N |
| 提交验证 | Y | Y | Y | N | N |
| 关闭工单 | Y | Y | N | Y | N |
| 驳回工单 | Y | Y | N | Y | N |
| 查看审计记录 | Y | Y | 条件允许 | 条件允许 | N |
| 查看看板 | Y | Y | N | N | N |
```
---
## Slide 1-4:用 TRAE 生成权限矩阵
### PPT 页面内容
```Plain Text
Prompt 要求:
基于角色
基于功能点
区分允许 / 禁止 / 条件允许
输出验收方式
```
### 讲师逐字稿
这里可以让 TRAE 辅助生成权限矩阵,但不能让它凭空决定业务权限。
更合理的做法是:我们给定角色和功能点,让 TRAE 生成一个初稿,然后人工确认。
AI 可以帮助我们补漏,比如提醒我们“导出”“查看审计记录”“状态流转”也是敏感操作。
但最终谁能做什么,必须由业务和团队确认。
### 推荐 Prompt
```md
请基于 JeecgBoot 工单模块设计 RBAC 权限矩阵。
角色:
管理员、负责人、研发、测试、只读用户。
功能点:
查看列表、查看详情、新增、编辑、删除、指派、提交验证、关闭、驳回、查看审计记录、查看看板。
要求:
1. 区分允许、禁止、条件允许。
2. 条件允许必须说明条件。
3. 每个敏感操作给出验收方式。
4. 不要直接生成代码。
输出:
权限矩阵表 + 不确定点。
```
---
## Slide 1-5:可直接复制到 rules:权限安全
### PPT 页面内容
```Plain Text
权限安全 rules:
敏感操作必须四层校验
权限字符必须有来源或标记为建议
数据权限不得被查询条件替代
每条 rule 都要写清:
适用场景、必须、禁止、验收方式
```
### 讲师逐字稿
这里把权限矩阵进一步沉淀成 rules。
rules 不是写给人看的口号,而是写给 AI 和团队共同执行的约束。
权限相关至少要有三条硬规则。
第一,敏感操作必须四层校验:菜单、按钮、接口、数据范围都要覆盖。
第二,权限字符必须有来源。如果是新建议,要明确标记为建议,不能让 AI 凭空编一个权限字符就当成事实。
第三,数据权限不能被前端查询条件替代。后端必须校验当前用户的数据范围。
后面权限方案、代码修改和 Review 都要回到这些 rules。
### 课堂产出
```md
## 敏感操作必须四层校验
- 级别:硬约束
- 适用场景:新增、编辑、删除、指派、状态流转、查看审计、查看看板。
- 必须:同时覆盖页面/菜单权限、按钮权限、后端接口权限、数据范围权限。
- 禁止:只做页面或按钮控制。
- 验收方式:授权角色能完成;未授权角色前端不可见且直接请求接口失败;越权数据访问失败。
## 权限字符必须有来源或标记为建议
- 必须:来自现有菜单、权限配置、前端权限指令、后端鉴权注解或团队规范。
- 禁止:凭空编造权限字符并当成事实。
- 验收方式:权限字符在前端、菜单配置、后端接口之间一致。
## 数据权限不得被查询条件替代
- 必须:后端统一校验当前用户可访问的数据范围。
- 禁止:只依赖前端传入 userId、deptId、tenantId 或筛选条件。
```
---
# 模块 2:权限控制方案生成
---
## Slide 2-1:权限不是按钮隐藏
### PPT 页面内容
```Plain Text
权限控制四层:
菜单权限
按钮权限
接口权限
数据权限
前端按钮不是安全边界
后端接口才是强制边界
```
### 讲师逐字稿
第二天我们已经讲过:前端按钮权限不是安全边界。
今天在 JeecgBoot 工单模块里要真正落地。
权限控制至少有四层。
菜单权限决定用户能不能进入工单管理页面。
按钮权限决定页面上是否显示新增、编辑、删除、指派、状态变更等按钮。
接口权限决定用户直接调用接口时是否会被后端拒绝。
数据权限决定用户能看到哪些工单数据,比如负责人看团队,研发看自己被指派的工单。
如果只隐藏按钮,但后端接口没有权限校验,那就是典型漏洞。
---
## Slide 2-2:权限字符设计
### PPT 页面内容
```Plain Text
权限字符建议:
work:order:list
work:order:query
work:order:add
work:order:edit
work:order:delete
work:order:assign
work:order:transition
work:order:audit
work:order:dashboard
```
### 讲师逐字稿
权限字符要命名清楚,不能随便写。
建议使用统一格式,比如 `work:order:add`、`work:order:delete`。
这样前端按钮、后端接口、菜单配置、Review 清单都能对齐。
如果权限字符命名混乱,后续排查问题会非常麻烦。
比如页面上叫 `work:order:remove`,后端叫 `work:order:delete`,菜单里又叫 `ticket:delete`,AI 和人都会判断困难。
所以第四天要把权限字符也当成设计产物。
---
## Slide 2-3:权限控制方案表
### PPT 页面内容
```Plain Text
每个敏感操作必须写清:
前端按钮
权限字符
后端接口
后端校验
数据范围
验收方式
```
### 讲师逐字稿
权限控制方案不能停留在“加权限”。
每个敏感操作都要写清楚:前端哪个按钮、使用哪个权限字符、对应哪个后端接口、后端如何校验、是否涉及数据权限、怎么验收。
比如删除工单:
前端有删除按钮,权限字符是 `work:order:delete`。
后端接口是 `/workOrder/delete`。
后端必须校验权限。
验收方式是非管理员账号直接请求接口时返回 403。
这样才是可执行的权限方案。
### 课堂产出
```md
# 工单模块权限控制方案
| 操作 | 前端入口 | 权限字符 | 后端接口 | 后端校验 | 数据权限 | 验收 |
|---|---|---|---|---|---|---|
| 查看列表 | 菜单/列表 | work:order:list | /workOrder/list | 登录校验 | 按角色过滤 | 不同角色数据范围不同 |
| 新增工单 | 新增按钮 | work:order:add | /workOrder/add | 权限注解 | 无 | 无权限账号返回 403 |
| 删除工单 | 删除按钮 | work:order:delete | /workOrder/delete | 权限注解 | 管理员范围 | 非管理员返回 403 |
| 指派工单 | 指派按钮 | work:order:assign | /workOrder/assign | 权限注解 | 团队范围 | 研发账号不可指派 |
| 状态流转 | 状态按钮 | work:order:transition | /workOrder/transition | 权限注解 | 工单可见范围 | 非法角色不能流转 |
```
---
## Slide 2-4:权限 Prompt 模板
### PPT 页面内容
```Plain Text
让 TRAE 输出方案
不要直接改代码
先要表格
再要影响范围
最后才进入代码修改
```
### 讲师逐字稿
权限相关修改一定不要直接让 TRAE 改代码。
先让它输出权限控制方案表。
然后让它说明影响范围,包括前端页面、api 文件、后端 Controller、Service、菜单配置、测试点。
人工确认后,再进入代码修改。
### 推荐 Prompt
```md
请基于工单模块 RBAC 权限矩阵,生成 JeecgBoot 权限控制方案。
要求:
1. 区分菜单权限、按钮权限、接口权限、数据权限。
2. 每个敏感操作都要列出权限字符。
3. 每个接口都要说明是否需要后端权限校验。
4. 不要直接修改代码。
5. 输出影响范围和验收方式。
输出:
权限控制方案表 + 影响范围 + 验收清单。
```
---
## Slide 2-5:JeecgBoot 权限落地检查
### PPT 页面内容
```Plain Text
权限落地检查:
菜单是否配置权限字符
按钮是否绑定权限字符
前端是否只负责显示控制
后端接口是否强制校验
查询是否按数据范围过滤
无权限请求是否返回拒绝
```
### 讲师逐字稿
有了权限控制方案之后,要回到 JeecgBoot 项目里检查落地。
第一,看菜单配置里是否有对应权限字符。
第二,看前端按钮是否绑定了权限字符。
第三,看前端是否只负责显示控制,而不是把按钮隐藏当成最终安全边界。
第四,看后端接口是否做了强制校验。
第五,看列表查询是否按角色做了数据范围过滤。
第六,用无权限账号或模拟请求验证接口是否真的拒绝。
这里要提醒大家,权限最常见的问题不是完全没做,而是只做了一半。
比如前端隐藏了删除按钮,但直接请求删除接口仍然成功。
这种问题必须在第四天被发现并修掉。
### 课堂产出
```md
# JeecgBoot 工单权限落地检查表
| 检查项 | 文件/配置位置 | 当前结果 | 问题 | 修复建议 | 验收 |
|---|---|---|---|---|---|
| 菜单权限字符 | | | | | 菜单权限与按钮权限一致 |
| 新增按钮权限 | | | | | 无权限用户不可见 |
| 删除接口权限 | | | | | 无权限请求返回 403 |
| 指派接口权限 | | | | | 研发账号不可指派 |
| 状态流转接口权限 | | | | | 非法角色不能流转 |
| 列表数据范围 | | | | | 不同角色只能看到授权数据 |
```
---
## Slide 2-6:权限代码修改 Prompt
### PPT 页面内容
```Plain Text
修改前必须给 TRAE:
RBAC 权限矩阵
权限控制方案表
实际文件路径
不做什么
验收命令或验收动作
```
### 讲师逐字稿
到这里才进入代码修改。
如果直接说“帮我补权限”,AI 容易把范围扩大,甚至改到无关模块。
更稳的方式是把权限矩阵、权限控制方案、实际文件路径、禁止事项和验收动作一次性给清楚。
比如只允许它修改工单模块,不允许改全局登录逻辑,不允许改角色模型,不允许删除现有权限字符。
这样 AI 的修改就会收敛。
### 推荐 Prompt
```md
请基于以下材料补齐 JeecgBoot 工单模块权限控制。
输入材料:
1. 工单 RBAC 权限矩阵
2. 工单权限控制方案表
3. 当前工单前端页面、api 文件、后端 Controller、Service 文件路径
4. 当前项目 rules
修改范围:
- 只修改工单模块相关文件
- 不修改登录认证
- 不修改全局角色模型
- 不删除已有权限字符
要求:
1. 前端按钮只做显示控制。
2. 后端敏感接口必须有权限校验。
3. 列表查询要说明数据范围策略。
4. 输出修改文件清单。
5. 输出无权限访问验收步骤。
验收:
管理员可以删除;研发账号不能看到删除按钮;研发账号直接请求删除接口被拒绝。
```
---
## Slide 2-7:rules 要落到这些位置
### PPT 页面内容
```Plain Text
rule 不是单独文件
要落到:
菜单配置
按钮权限
Controller
Service 查询
审计展示
验收记录
```
### 讲师逐字稿
很多团队写了 rules,但代码生成时没有真正用上。
第四天要强调:让 TRAE 改权限前,必须同时给它当前项目 rules、权限矩阵、权限控制方案和实际文件路径。
比如“四层校验”这条 rule,就要落到菜单配置、按钮权限、Controller、Service 查询和验收记录。
“权限字符有来源”这条 rule,要落到菜单表、路由、按钮指令和后端注解。
“数据权限不得被查询条件替代”这条 rule,要落到列表、详情、导出和看板查询。
这样 rule 才不是口号,而是代码修改和 Review 的检查依据。
### 课堂产出
```md
| rule 条款 | 代码落点 | 课堂验收 |
|---|---|---|
| 四层校验 | 菜单配置、按钮权限、Controller、Service 查询 | 无权限账号不可见且接口失败 |
| 权限字符有来源 | 菜单表、路由、按钮指令、后端注解 | 同一字符贯穿前后端 |
| 数据权限后端校验 | 列表、详情、导出、看板查询 | 改请求参数不能越权 |
| 敏感字段最小返回 | 列表接口、详情接口、审计展示 | 不暴露不必要 old/new value |
```
---
# 模块 3:工单状态流转规则实现
---
## Slide 3-1:状态流转不能靠临时 if else
### PPT 页面内容
```Plain Text
工单状态:
已创建
处理中
待验证
已关闭
已驳回
状态流转必须先设计状态机
再实现代码
```
### 讲师逐字稿
工单状态流转是第四天的核心复杂业务。
很多系统一开始用几个 if else 写状态判断,后面状态越来越多,角色越来越多,异常越来越多,最后没人敢改。
所以今天不直接写状态流转代码。
先让 TRAE 帮我们生成状态机设计。
状态机要回答:当前状态是什么,允许什么动作,动作后进入什么状态,谁可以执行,前置条件是什么,非法流转怎么处理。
---
## Slide 3-2:状态枚举设计
### PPT 页面内容
```Plain Text
created:已创建
processing:处理中
pending_verify:待验证
closed:已关闭
rejected:已驳回
```
### 讲师逐字稿
课堂里我们先使用五个状态。
`created` 表示工单刚创建,还没有进入处理。
`processing` 表示已经被指派或开始处理。
`pending_verify` 表示研发处理完成,等待测试或负责人验证。
`closed` 表示已经关闭。
`rejected` 表示验证不通过,被驳回。
状态值要稳定,中文名可以展示,代码里要使用明确枚举或字典,不要到处写魔法字符串。
---
## Slide 3-3:状态流转表
### PPT 页面内容
```Plain Text
状态流转表包含:
当前状态
允许动作
目标状态
允许角色
前置条件
失败提示
```
### 讲师逐字稿
状态流转表是状态机的核心。
比如从 `created` 到 `processing`,动作是指派,允许角色是管理员或负责人,前置条件是必须有指派人。
从 `processing` 到 `pending_verify`,动作是提交验证,通常由研发执行,前置条件是必须填写处理说明。
从 `pending_verify` 到 `closed`,动作是关闭,由测试或负责人执行。
从 `pending_verify` 到 `rejected`,动作是驳回,必须填写驳回原因。
这些规则如果不先写清楚,代码很容易实现错。
### 课堂产出
```md
# 工单状态流转表
| 当前状态 | 允许动作 | 目标状态 | 允许角色 | 前置条件 | 失败提示 |
|---|---|---|---|---|---|
| created | 指派 | processing | 管理员/负责人 | 必须选择指派人 | 请选择指派人 |
| processing | 提交验证 | pending_verify | 研发/负责人 | 必须填写处理说明 | 请填写处理说明 |
| pending_verify | 关闭 | closed | 测试/负责人 | 验证通过 | 当前工单不可关闭 |
| pending_verify | 驳回 | rejected | 测试/负责人 | 必须填写驳回原因 | 请填写驳回原因 |
| rejected | 重新处理 | processing | 研发/负责人 | 必须填写处理说明 | 请填写重新处理说明 |
```
---
## Slide 3-4:非法流转清单
### PPT 页面内容
```Plain Text
非法流转也要设计:
closed -> processing
created -> closed
processing -> rejected
无权限状态变更
缺少必要说明
```
### 讲师逐字稿
很多团队只设计正常流,不设计非法流。
但真实系统里,非法流转更容易出事故。
比如已关闭工单不能随便重新处理。
刚创建的工单不能直接关闭。
处理中不能直接驳回,因为驳回应该发生在待验证阶段。
无权限用户不能改状态。
提交验证必须有处理说明,驳回必须有驳回原因。
这些都要写进非法流转清单。
### 课堂产出
```md
# 工单非法流转清单
| 当前状态 | 尝试动作 | 问题 | 系统响应 | 验收 |
|---|---|---|---|---|
| closed | 重新处理 | 已关闭工单不允许直接重开 | 返回非法状态流转 | 接口失败且状态不变 |
| created | 关闭 | 未处理工单不能关闭 | 返回非法状态流转 | 页面提示原因 |
| processing | 驳回 | 驳回应发生在待验证阶段 | 返回非法状态流转 | 状态不变 |
| pending_verify | 驳回但无原因 | 缺少必要说明 | 返回参数错误 | 提示填写驳回原因 |
```
---
## Slide 3-5:状态流转 Prompt 模板
### PPT 页面内容
```Plain Text
先生成状态机
再生成代码计划
最后再修改代码
```
### 讲师逐字稿
状态流转一定要分三步。
第一步,让 TRAE 生成状态机设计。
第二步,让 TRAE 基于状态机输出代码修改计划。
第三步,人工确认后再让 TRAE 修改代码。
不要一开始就说“帮我实现状态流转”。
### 推荐 Prompt
```md
请为 JeecgBoot 工单模块设计状态流转规则。
状态:
created、processing、pending_verify、closed、rejected。
要求:
1. 输出状态流转表。
2. 输出非法流转清单。
3. 区分允许角色和前置条件。
4. 给出接口设计建议。
5. 给出测试点。
6. 不要直接修改代码。
输出:
状态流转表 + 非法流转清单 + 接口建议 + 测试点。
```
---
## Slide 3-6:状态流转接口设计
### PPT 页面内容
```Plain Text
建议接口:
POST /workOrder/assign
POST /workOrder/transition
transition 入参:
工单 ID
动作
目标状态
说明
版本号或更新时间
```
### 讲师逐字稿
状态流转不要散落在多个编辑接口里。
建议课堂里把指派和状态流转单独设计成明确接口。
指派接口处理 assignee 变化。
状态流转接口处理提交验证、关闭、驳回、重新处理等动作。
入参至少要包含工单 ID、动作、目标状态、说明。
如果项目里已经有乐观锁、版本号或更新时间字段,也可以带上,避免并发修改覆盖。
这里的关键是:状态变化不是普通编辑,它必须经过状态机校验、角色校验、前置条件校验和审计日志记录。
### 课堂产出
```md
# 工单状态流转接口契约
## 指派接口
POST /workOrder/assign
请求:
| 字段 | 必填 | 含义 |
|---|---|---|
| id | Y | 工单 ID |
| assignee | Y | 新指派人 |
| remark | N | 指派说明 |
验收:
指派成功后状态进入 processing,并写入审计日志。
## 状态流转接口
POST /workOrder/transition
请求:
| 字段 | 必填 | 含义 |
|---|---|---|
| id | Y | 工单 ID |
| action | Y | submit_verify / close / reject / reopen |
| targetStatus | Y | 目标状态 |
| remark | 条件必填 | 处理说明、关闭说明或驳回原因 |
| version | N | 并发控制字段 |
验收:
合法流转成功;非法流转失败;状态不被错误修改;审计日志可查。
```
---
## Slide 3-7:状态流转最小实现计划
### PPT 页面内容
```Plain Text
实现顺序:
先定义枚举
再定义流转表
再写校验函数
再接 Service
最后补接口和测试点
```
### 讲师逐字稿
状态流转代码不要一上来就写很多 if else。
课堂里建议采用最小实现计划。
第一,定义状态和动作枚举,避免魔法字符串。
第二,定义流转表,把 allowed from、action、target、roles、required fields 写清楚。
第三,写校验函数,只负责判断当前状态、动作、角色、前置条件是否合法。
第四,在 Service 里调用校验函数,真正更新状态。
第五,记录审计日志。
第六,补接口和测试点。
这种结构的好处是,后续新增状态或动作时,不需要到处找散落的判断。
### 课堂产出
```md
# 状态流转最小实现计划
## 新增或调整
- WorkOrderStatus:状态枚举或字典
- WorkOrderAction:动作枚举或字典
- WorkOrderTransitionRequest:流转请求
- WorkOrderTransitionRule:流转规则
- WorkOrderService.transition:状态流转入口
- WorkOrderAuditLogService.record:审计日志记录
## 修改原则
1. Controller 只接收请求和返回结果,不写复杂状态判断。
2. Service 负责读取工单、校验权限、校验状态、更新状态、记录日志。
3. 非法流转返回明确业务错误。
4. 状态修改和日志记录要在同一业务事务里完成。
## 验收
- created -> processing 成功
- processing -> pending_verify 成功
- pending_verify -> closed 成功
- closed -> processing 被拒绝
- pending_verify 驳回但无原因被拒绝
```
---
## Slide 3-8:可直接复制到 rules:状态流转
### PPT 页面内容
```Plain Text
状态流转 rules:
复杂业务状态必须先建模
非法状态流转必须拒绝且状态不变
验证重点:
合法路径成功
非法路径失败
状态不被错误修改
失败不写成功审计
```
### 讲师逐字稿
状态流转表不是一次性课堂表格。
它应该沉淀成团队 rules,后续遇到审批、发布、上下架、支付、归档等状态型业务都可以复用。
第一条 rule 是复杂业务状态必须先建模。
也就是先产出状态流转表,再进入代码实现,不能直接在代码里堆 if else。
第二条 rule 是非法状态流转必须拒绝且状态不变。
这条非常关键。非法请求失败后,数据库状态不能被改坏,也不能写一条成功审计。
这类 rules 会直接进入后续 Review 和测试清单。
### 课堂产出
```md
## 复杂业务状态必须先建模
- 级别:硬约束
- 适用场景:工单指派、处理、验证、驳回、关闭、重开。
- 必须:先产出状态流转表,列出当前状态、动作、目标状态、允许角色、前置条件、后置动作和验收方式。
- 禁止:直接在代码中堆状态判断而没有状态表。
- 验收方式:每个状态动作都有合法路径和非法路径验证。
## 非法状态流转必须拒绝且状态不变
- 必须:集中校验非法流转;失败时返回明确错误,业务状态不变,不写成功审计。
- 禁止:仅靠前端禁用按钮防止非法流转。
- 验收方式:构造非法状态动作,接口失败且数据库状态不变。
```
---
# 模块 4:审计日志设计
---
## Slide 4-1:为什么工单必须有审计日志?
### PPT 页面内容
```Plain Text
工单是协作过程
必须回答:
谁操作
什么时候操作
对哪个工单
做了什么动作
字段前后值是什么
操作是否成功
```
### 讲师逐字稿
工单模块不是单人填写表单,而是多人协作过程。
一个工单可能被创建、指派、修改优先级、提交验证、驳回、重新处理、关闭。
如果没有审计日志,出了问题很难追溯。
比如一个高优先级工单被改成低优先级,是谁改的?
指派人从张三变成李四,什么时候改的?
测试驳回时原因是什么?
关闭工单时是否有验证说明?
这些都应该进入审计日志。
---
## Slide 4-2:审计日志字段设计
### PPT 页面内容
```Plain Text
审计日志字段:
工单 ID
操作人
操作动作
字段名
修改前
修改后
操作结果
操作时间
```
### 讲师逐字稿
审计日志不是只记录一句“修改了工单”。
至少要记录工单 ID、操作人、操作动作、字段名、修改前、修改后、操作结果和操作时间。
如果是状态流转,还要记录从什么状态变到什么状态。
如果是指派,要记录原指派人和新指派人。
如果是驳回,要记录驳回原因。
审计日志越结构化,后续越容易查询、展示和分析。
### 课堂产出
```md
# 工单审计日志字段表
| 字段 | 含义 | 示例 |
|---|---|---|
| id | 主键 | 178xxx |
| ticket_id | 工单 ID | WO-001 |
| operator | 操作人 | zhangsan |
| action | 操作动作 | assign / transition / edit |
| field_name | 字段名 | status / assignee / priority |
| before_value | 修改前 | processing |
| after_value | 修改后 | pending_verify |
| result | 操作结果 | success / fail |
| operate_time | 操作时间 | 2026-06-29 10:00 |
| remark | 备注 | 提交验证说明 |
```
---
## Slide 4-3:必须记录的操作
### PPT 页面内容
```Plain Text
必须记录:
新增
编辑
删除
指派
状态变更
优先级变更
驳回
关闭
```
### 讲师逐字稿
不是所有字段都要写很复杂的日志,但敏感动作必须记录。
新增、编辑、删除是基础。
指派是协作关键动作,必须记录。
状态变更是工单生命周期核心,必须记录。
优先级变更会影响处理顺序,也应该记录。
驳回和关闭都影响交付结果,更要记录原因。
课堂上可以让 TRAE 帮我们补充哪些操作必须记录,但最终要由团队确认。
---
## Slide 4-4:审计日志 SOP
### PPT 页面内容
```Plain Text
SOP 要写清:
哪些动作记录
记录哪些字段
在哪里展示
如何查询
如何验收
```
### 讲师逐字稿
审计日志最终要形成 SOP。
不要只写“敏感操作要记录日志”。
要写清哪些动作记录,记录哪些字段,在哪里展示,如何查询,怎么验收。
比如工单详情页展示操作记录;状态变更后必须出现一条审计日志;删除失败也要记录失败结果或至少有系统日志可追踪。
### 课堂产出
```md
# 工单审计日志 SOP
## 必须记录的操作
新增、编辑、删除、指派、状态变更、优先级变更、驳回、关闭。
## 必须记录的字段
操作人、操作时间、工单 ID、动作、字段名、修改前、修改后、结果、备注。
## 展示位置
工单详情页操作记录区域。
## 查询方式
按工单 ID 查询审计日志,按时间倒序展示。
## 验收方式
执行状态变更、指派、驳回、关闭后,工单详情页能看到对应审计记录。
```
---
## Slide 4-5:审计日志表与展示
### PPT 页面内容
```Plain Text
审计日志至少要支持:
按工单 ID 查询
按时间倒序
显示动作和操作者
显示字段前后值
显示失败原因或备注
```
### 讲师逐字稿
审计日志不只是后端写一条记录,还要能被业务人员看见。
工单详情页应该有操作记录区域,按时间倒序展示。
每条记录至少显示操作人、操作时间、动作、字段前后值和备注。
如果是失败操作,可以根据团队要求决定是否进入业务审计日志;但至少要在系统日志里可追踪。
课堂上我们优先要求成功的关键业务动作进入审计日志:指派、状态流转、关闭、驳回、优先级变更。
### 课堂产出
```md
# 工单详情页审计记录展示要求
| 展示字段 | 示例 | 说明 |
|---|---|---|
| 操作时间 | 2026-06-29 10:00 | 按时间倒序 |
| 操作人 | zhangsan | 当前登录用户 |
| 动作 | 提交验证 | 从 action 转换成中文 |
| 变更内容 | status: processing -> pending_verify | 字段前后值 |
| 备注 | 已修复,请验证 | 来自 remark |
| 结果 | success | 成功或失败 |
## 验收
完成一次指派、一次提交验证、一次驳回后,详情页能看到三条不同审计记录。
```
---
## Slide 4-6:审计日志代码修改 Prompt
### PPT 页面内容
```Plain Text
要求 TRAE 同时考虑:
写入时机
字段前后值
事务一致性
详情页展示
查询接口
验收数据
```
### 讲师逐字稿
审计日志的 Prompt 要比普通新增功能更细。
如果只说“加操作日志”,AI 可能只加一个注解,或者只写一句字符串。
我们要明确写入时机、字段前后值、事务一致性、详情页展示、查询接口和验收数据。
尤其是状态流转,状态更新成功但审计日志失败,或者审计日志成功但状态更新失败,都会造成追溯问题。
所以 Service 层最好把状态更新和审计记录放在同一事务边界内。
### 推荐 Prompt
```md
请为 JeecgBoot 工单模块补齐审计日志能力。
输入:
- 工单审计日志 SOP
- 状态流转表
- 指派和状态流转接口契约
- 当前 Controller / Service / Entity / Mapper 文件路径
要求:
1. 新增或复用审计日志模型,记录工单 ID、操作人、动作、字段名、修改前、修改后、结果、时间、备注。
2. 指派、状态流转、驳回、关闭必须记录字段前后值。
3. 状态更新和日志写入要说明事务边界。
4. 工单详情页提供审计记录查询和展示。
5. 输出修改文件清单和验收步骤。
不做:
- 不修改全局登录逻辑。
- 不把敏感信息写入日志。
```
---
## Slide 4-7:可直接复制到 rules:审计日志
### PPT 页面内容
```Plain Text
审计日志 rules:
关键业务操作必须写审计
审计和业务写入必须一致
不能只写:
“记录日志”
必须说明:
字段、时机、事务、失败行为、验收方式
```
### 讲师逐字稿
审计 rules 要比“记录日志”具体得多。
关键业务操作必须写审计,适用于创建、编辑关键字段、指派、状态流转、驳回、关闭、删除、导出、权限变更。
审计字段要包含操作人、动作、目标对象、修改前、修改后、来源、请求 ID 或项目里的等价字段。
第二条 rule 是审计和业务写入必须一致。
如果状态更新成功但审计丢了,后续无法追溯。
如果审计写成功但业务失败,也会产生错误记录。
所以必须说明审计写入时机、事务关系、失败处理和验证方式。
### 课堂产出
```md
## 关键业务操作必须写审计
- 级别:硬约束
- 适用场景:创建、编辑关键字段、指派、状态流转、驳回、关闭、删除、导出、权限变更。
- 必须:记录 actor、action、target_id、old_value、new_value、source、request_id、created_at 或项目等价字段。
- 禁止:只记录普通日志而没有业务审计;操作失败后写成功审计。
- 验收方式:执行关键操作后可查询审计记录,字段与实际变更一致。
## 审计和业务写入必须一致
- 必须:明确审计写入时机、事务关系、失败处理和重试策略。
- 禁止:业务成功审计丢失,或审计成功但业务失败。
- 验收方式:模拟业务失败和审计失败,结果符合一致性策略。
```
---
# 模块 5:异常态与防御性逻辑
---
## Slide 5-1:复杂业务不能只测正常流
### PPT 页面内容
```Plain Text
必须覆盖:
空数据
接口失败
权限不足
重复提交
非法状态流转
不存在的工单 ID
并发修改
```
### 讲师逐字稿
第三天我们验证了基础页面能打开、列表能查询、详情能展示。
第四天要进一步补异常态和防御性逻辑。
真实系统里,问题往往不在正常流,而在异常流。
比如列表没有数据时页面是否友好?
接口失败时页面会不会崩?
无权限操作是否返回 403?
用户连续点击提交,会不会创建两条状态变更记录?
已关闭工单再次提交验证,会不会被拒绝?
传入不存在的工单 ID,接口如何响应?
这些都要设计。
---
## Slide 5-2:异常态清单
### PPT 页面内容
```Plain Text
异常态要写成表:
场景
触发条件
系统表现
后端响应
验收方式
```
### 讲师逐字稿
异常态不是一句“做好异常处理”。
要写成清单。
每个场景写清楚触发条件、系统表现、后端响应和验收方式。
前端和后端都要看。
比如权限不足,前端按钮应该不可见,但后端接口也必须返回 403。
比如重复提交,前端可以禁用按钮,后端也应该避免重复状态变更。
### 课堂产出
```md
# 工单异常态与防御性逻辑清单
| 场景 | 触发条件 | 前端表现 | 后端响应 | 验收 |
|---|---|---|---|---|
| 空列表 | 查询无结果 | 显示空状态 | 返回空数组 | 不显示报错 |
| 接口失败 | 服务异常 | 提示重试 | 5xx 或业务错误 | 页面不崩溃 |
| 权限不足 | 无权限操作 | 按钮不可见或提示无权限 | 403 | 不完成操作 |
| 重复提交 | 连续点击提交 | 按钮禁用或 loading | 拒绝重复请求 | 只生成一条记录 |
| 非法流转 | closed -> processing | 提示非法状态 | 业务错误码 | 状态不变 |
| 工单不存在 | 传入错误 ID | 显示不存在 | 404 或业务错误 | 页面不崩溃 |
```
---
## Slide 5-3:防重复提交
### PPT 页面内容
```Plain Text
防重复提交:
前端 loading / 禁用按钮
后端幂等或状态校验
审计日志不重复
用户可理解提示
```
### 讲师逐字稿
防重复提交是工单状态流转里很现实的问题。
比如用户点击“提交验证”,网络慢,又点了一次。
如果系统没有防护,可能产生两条操作记录,甚至触发两次状态变更。
前端可以通过 loading 和禁用按钮减少重复点击。
后端必须通过状态校验或幂等逻辑保证重复请求不会造成错误结果。
审计日志也要避免重复写入无意义记录。
---
## Slide 5-4:异常态 Prompt 模板
### PPT 页面内容
```Plain Text
让 TRAE 先列异常态
再给处理建议
最后给测试点
```
### 讲师逐字稿
异常态可以让 TRAE 辅助补齐。
但要注意顺序。
先让 TRAE 列异常态,不要直接改代码。
再让 TRAE 给处理建议。
最后让 TRAE 生成测试点。
### 推荐 Prompt
```md
请基于 JeecgBoot 工单模块,列出状态流转、指派、删除、查询详情相关的异常态和防御性逻辑。
要求:
1. 覆盖空数据、接口失败、权限不足、重复提交、非法状态流转、工单不存在。
2. 区分前端表现和后端响应。
3. 给出验收方式。
4. 给出测试点。
5. 不要直接修改代码。
输出:
异常态清单 + 防御性逻辑建议 + 测试点。
```
---
## Slide 5-5:异常态最小测试集
### PPT 页面内容
```Plain Text
最小测试集:
无权限删除
非法状态流转
重复提交验证
不存在的工单 ID
驳回缺少原因
看板无数据
```
### 讲师逐字稿
异常态很多,课堂时间有限,所以要有最小测试集。
第四天至少覆盖六类。
第一,无权限删除。前端不显示按钮,后端接口也拒绝。
第二,非法状态流转。比如 closed 工单不能直接重新处理。
第三,重复提交验证。连续点击或重复请求不能产生两次有效状态变更。
第四,不存在的工单 ID。接口要返回明确错误,页面不能崩。
第五,驳回缺少原因。系统应该拒绝,并提示必须填写驳回原因。
第六,看板无数据。页面应该显示空状态,而不是显示 NaN 或报错。
这六类测试能覆盖权限、状态、参数、并发、页面异常和统计口径。
### 课堂产出
```md
# 第四天异常态最小测试集
| 编号 | 场景 | 操作 | 预期结果 | 证据 |
|---|---|---|---|---|
| E01 | 无权限删除 | 研发账号请求删除接口 | 返回 403 或业务拒绝 | 接口响应截图/日志 |
| E02 | 非法状态流转 | closed -> processing | 返回非法流转,状态不变 | 数据库或详情页状态 |
| E03 | 重复提交验证 | 连续点击提交验证 | 只成功一次,只写一条有效审计 | 审计日志 |
| E04 | 工单不存在 | 查询错误 ID | 返回不存在,页面不崩 | 页面截图/响应 |
| E05 | 驳回缺少原因 | pending_verify 驳回但 remark 为空 | 返回参数错误 | 提示信息 |
| E06 | 看板无数据 | 清空筛选条件或无数据范围 | 显示空状态 | 页面截图 |
```
---
## Slide 5-6:防御性代码修改边界
### PPT 页面内容
```Plain Text
防御性修改边界:
前端补状态和提示
后端补校验和错误码
Service 保证状态不变
审计日志避免重复
不引入无关重构
```
### 讲师逐字稿
异常态修复很容易扩散。
比如处理重复提交,AI 可能想引入新的全局请求库、全局锁机制,甚至改很多无关页面。
课堂里要控制边界。
前端主要补 loading、禁用按钮、空状态、错误提示。
后端主要补参数校验、权限校验、状态校验和明确错误码。
Service 要保证失败时状态不变。
审计日志要避免重复写入无意义记录。
不要为了一个工单模块异常态,把整个项目请求封装重写一遍。
### 推荐 Prompt
```md
请基于第四天异常态最小测试集,补齐 JeecgBoot 工单模块防御性逻辑。
修改范围:
- 工单列表、详情、状态流转相关前端页面
- 工单 api
- 工单 Controller / Service
- 工单审计日志写入逻辑
要求:
1. 前端补 loading、禁用按钮、空状态、错误提示。
2. 后端补参数校验、权限校验、状态校验。
3. 非法操作失败后工单状态不能改变。
4. 重复提交不能产生重复有效审计记录。
5. 输出每个异常态的验收步骤。
不做:
- 不重写全局请求库。
- 不修改无关业务模块。
- 不改变既有角色模型。
```
---
## Slide 5-7:可直接复制到 rules:异常态测试
### PPT 页面内容
```Plain Text
测试 rules:
核心逻辑必须有测试或豁免说明
权限必须做正反角色验证
状态流转必须覆盖合法和非法路径
禁止:
只用管理员账号验证
只说“已验证”
只跑正常主链路
```
### 讲师逐字稿
异常态模块最后要沉淀成测试 rules。
第一,核心逻辑必须有测试或豁免说明。
如果没法写自动化测试,也要写清手工验收步骤、证据和剩余风险,不能只说“已验证”。
第二,权限必须做正反角色验证。
至少一个授权角色、一个未授权角色;如果涉及数据范围,还要验证越权数据。
第三,状态流转必须覆盖合法和非法路径。
不能只测从创建到关闭的成功链路,也要构造 closed 重新处理、pending_verify 驳回无原因这类失败路径。
### 课堂产出
```md
## 核心逻辑必须有测试或豁免说明
- 级别:待确认约束
- 适用场景:权限校验、状态流转、审计、看板指标、异常态修复。
- 必须:优先补自动化测试;无法测试时说明原因、风险和手工验收方式。
- 禁止:只说“已验证”但没有命令、样例、截图、接口响应或手工步骤。
## 权限必须做正反角色验证
- 必须:至少验证一个授权角色和一个未授权角色;涉及数据范围时验证越权数据。
- 禁止:只用管理员账号验证。
## 状态流转必须覆盖合法和非法路径
- 必须:每个关键动作至少覆盖一条合法路径和一条非法路径。
- 禁止:只测试从初始状态到成功终态的主链路。
```
---
# 模块 6:研发效能看板指标开发
---
## Slide 6-1:看板不是图表堆叠
### PPT 页面内容
```Plain Text
研发效能看板关注:
工单数量
待处理数量
关闭周期
优先级分布
状态分布
趋势变化
```
### 讲师逐字稿
第四天最后一个业务模块是研发效能看板。
这里要强调:看板不是图表堆叠。
不要为了做图而做图。
看板的核心是指标口径。
工单总数怎么算?待处理数量包含哪些状态?关闭周期从哪个时间算到哪个时间?驳回后重新处理怎么算?优先级分布按当前优先级还是历史优先级?
这些问题不清楚,图表再漂亮也没有意义。
---
## Slide 6-2:指标字典
### PPT 页面内容
```Plain Text
每个指标必须定义:
指标名
含义
计算口径
数据来源
刷新频率
展示方式
```
### 讲师逐字稿
效能看板必须先做指标字典。
每个指标要写清指标名、含义、计算口径、数据来源、刷新频率和展示方式。
比如“平均关闭周期”,它到底是创建时间到关闭时间,还是处理中到关闭时间?
如果工单被驳回又重新处理,要不要扣除等待时间?
课堂里我们先用简化口径:创建时间到关闭时间。
但一定要写清楚,不能让 AI 自己猜。
### 课堂产出
```md
# 工单研发效能看板指标字典
| 指标 | 含义 | 计算口径 | 数据来源 | 展示 |
|---|---|---|---|---|
| 工单总数 | 当前工单总量 | count(*) | work_order | 数字卡片 |
| 待处理数量 | created + processing | 按状态统计 | work_order.status | 数字卡片 |
| 已关闭数量 | closed 数量 | 按状态统计 | work_order.status | 数字卡片 |
| 平均关闭周期 | 创建到关闭平均耗时 | avg(close_time - create_time) | work_order | 数字卡片 |
| 优先级分布 | 各优先级数量 | group by priority | work_order.priority | 饼图 |
| 状态趋势 | 每日新增/关闭 | 按日期聚合 | work_order | 折线图 |
```
---
## Slide 6-3:看板页面设计
### PPT 页面内容
```Plain Text
建议组成:
顶部指标卡
状态分布
优先级分布
趋势图
异常列表
```
### 讲师逐字稿
看板页面可以保持克制。
顶部是几个数字卡片,比如工单总数、待处理数量、已关闭数量、平均关闭周期。
中间可以放状态分布和优先级分布。
下面放趋势图,比如每日新增和每日关闭。
如果还有空间,可以放异常列表,比如超期未处理工单、高优先级未关闭工单。
注意,第四天不是专门做 BI 平台,不要把看板做得过大。
---
## Slide 6-4:看板 Prompt 模板
### PPT 页面内容
```Plain Text
先定义指标
再设计接口
再设计页面
最后验证口径
```
### 讲师逐字稿
让 TRAE 做看板时,顺序很重要。
不要直接说“帮我做个好看的看板”。
先定义指标,再设计接口,再设计页面,最后验证口径。
### 推荐 Prompt
```md
请基于 JeecgBoot 工单模块设计研发效能看板。
要求:
1. 先输出指标字典。
2. 再输出后端统计接口建议。
3. 再输出前端页面结构。
4. 每个指标必须说明计算口径和数据来源。
5. 不要直接生成代码。
输出:
指标字典 + 接口设计 + 页面结构 + 验收方式。
```
---
## Slide 6-5:看板统计接口契约
### PPT 页面内容
```Plain Text
建议接口:
GET /workOrder/dashboard/summary
GET /workOrder/dashboard/status
GET /workOrder/dashboard/priority
GET /workOrder/dashboard/trend
每个接口必须说明:
筛选条件、数据范围、统计口径
```
### 讲师逐字稿
看板不要只做前端假数据。
课堂里至少要设计后端统计接口契约。
可以把接口拆成 summary、status、priority、trend 四类。
summary 返回总量、待处理、已关闭、平均关闭周期。
status 返回状态分布。
priority 返回优先级分布。
trend 返回每日新增和每日关闭趋势。
每个接口都要说明筛选条件和数据范围。
比如负责人看到团队数据,管理员看到全量数据,研发普通账号如果没有看板权限就不能访问。
### 课堂产出
```md
# 工单看板统计接口契约
## GET /workOrder/dashboard/summary
查询参数:
| 字段 | 含义 |
|---|---|
| startDate | 开始日期 |
| endDate | 结束日期 |
| teamId | 团队 ID,可选 |
返回:
| 字段 | 含义 | 口径 |
|---|---|---|
| totalCount | 工单总数 | 时间范围内创建的工单 |
| pendingCount | 待处理数量 | created + processing |
| closedCount | 已关闭数量 | status = closed |
| avgCloseHours | 平均关闭周期 | close_time - create_time |
## GET /workOrder/dashboard/trend
返回:
| 字段 | 含义 |
|---|---|
| date | 日期 |
| createdCount | 当日新增 |
| closedCount | 当日关闭 |
验收:
同一时间范围下,summary 与 status/trend 聚合结果不互相矛盾。
```
---
## Slide 6-6:看板页面验收
### PPT 页面内容
```Plain Text
看板验收看四件事:
权限是否正确
口径是否清楚
空态是否可用
数字是否能解释
```
### 讲师逐字稿
看板页面不是能打开就算完成。
验收时看四件事。
第一,权限是否正确。没有 `work:order:dashboard` 权限的用户不能访问看板接口。
第二,口径是否清楚。每个数字都能回到指标字典。
第三,空态是否可用。没有数据时不能显示 NaN、undefined 或空白图。
第四,数字是否能解释。比如总数、状态分布、趋势数量之间不能明显矛盾。
如果一个看板数字说不清从哪里来,它就不能用于管理判断。
### 课堂产出
```md
# 工单看板验收记录
| 验收项 | 账号/条件 | 预期 | 实际 | 证据 |
|---|---|---|---|---|
| 看板权限 | 只读用户 | 不可访问或无菜单 | | |
| Summary 指标 | 管理员 + 本月 | 口径符合指标字典 | | |
| 状态分布 | 管理员 + 本月 | 与列表筛选统计一致 | | |
| 趋势图 | 管理员 + 本月 | 新增/关闭按日期展示 | | |
| 空数据 | 无数据筛选条件 | 显示空态,不报错 | | |
```
---
## Slide 6-7:可直接复制到 rules:看板指标
### PPT 页面内容
```Plain Text
看板指标 rule:
看板指标必须手工抽样校验
必须有:
含义、公式、过滤条件
时间字段、数据范围、样例数据
禁止:
只验证接口 200
只验证页面有图表
```
### 讲师逐字稿
看板最容易出现“页面很漂亮,但数字说不清”的问题。
所以看板指标也要写成 rules。
每个关键指标必须有含义、公式、过滤条件、时间字段、数据范围,并且用样例数据手工校验。
比如平均关闭周期,至少要拿三条样例工单,人工算一次,再和接口返回对上。
接口返回 200 不代表指标正确,页面有图表也不代表指标可信。
课堂交付时,看板必须同时交付指标字典、接口契约和至少一组手工核对样例。
### 课堂产出
```md
## 看板指标必须手工抽样校验
- 级别:硬约束
- 适用场景:统计卡片、趋势图、分布图、排行、效能指标。
- 必须:每个关键指标有含义、公式、过滤条件、时间字段、数据范围,并用样例数据手工校验。
- 禁止:只验证接口返回 200 或页面有图表。
- 来源证据:指标字典、接口契约、样例数据、数据库查询或列表数据。
- 验收方式:至少一组样例数据的手工计算结果与接口返回一致。
```
---
# 模块 7:阶段代码审查与修复
---
## Slide 7-1:第四天必须做阶段 Review
### PPT 页面内容
```Plain Text
Review 重点:
权限是否闭环
状态流转是否完整
审计日志是否可查
异常态是否覆盖
看板口径是否清楚
测试是否覆盖关键路径
```
### 讲师逐字稿
第四天最后必须做一次阶段 Review。
因为今天改动涉及权限、状态流转、审计日志和看板。
这些不是页面样式问题,而是业务风险问题。
Review 的重点不是格式,也不是变量名,而是业务闭环。
权限有没有前后端闭环?
状态流转有没有非法路径?
审计日志能不能查到字段前后值?
异常态有没有覆盖?
看板指标口径是否清楚?
测试是否覆盖关键路径?
---
## Slide 7-2:AI Review 输入
### PPT 页面内容
```Plain Text
输入材料:
当天 diff
工单 RBAC 权限矩阵
状态流转表
审计日志 SOP
异常态清单
看板指标字典
测试结果
```
### 讲师逐字稿
AI Review 不能只给 diff。
如果只给 diff,AI 只能看代码变化,很难判断业务规则是否正确。
要把今天的关键产物都作为 Review 输入。
包括 RBAC 权限矩阵、状态流转表、审计日志 SOP、异常态清单、看板指标字典和测试结果。
这些材料就是 Review 的依据。
---
## Slide 7-2A:第 4 天要用的三个 Skill
### PPT 页面内容
```Plain Text
三个 Skill:
design-complex-business-module
开工前设计控制面
review-business-delivery
阶段 Review 检查风险
track-review-fix-loop
修复后闭环并沉淀资产
```
### 讲师逐字稿
前三天已经讲过 Skill 的概念。
第四天要让大家看到具体怎么用。
第一个 Skill 是 `design-complex-business-module`,用在开始写代码前,先设计权限、状态、审计、异常态和看板指标。
第二个 Skill 是 `review-business-delivery`,用在阶段 Review 时,检查权限缺口、非法状态流转、审计缺失、异常处理薄弱、看板口径不清和测试缺失。
第三个 Skill 是 `track-review-fix-loop`,用在修复 Review 问题后,把问题状态、修改文件、验证证据和资产沉淀记录下来。
Skill 负责流程和质量门禁;rule 负责长期约束;template 和 checklist 负责稳定输出。
### 课堂产出
```md
| Skill | 什么时候用 | 输入材料 | 输出产物 |
|---|---|---|---|
| design-complex-business-module | 开始写代码前 | 需求、项目规则、现有角色/API/表结构 | RBAC、权限方案、状态表、审计 SOP、异常清单、指标字典 |
| review-business-delivery | 阶段 Review 时 | diff、业务产物、测试结果、验收记录 | 问题清单、证据缺口、待确认项 |
| track-review-fix-loop | 修 Review 后 | Review 报告、修改文件、验证证据 | 修复记录、未闭环事项、资产更新建议 |
```
---
## Slide 7-2B:design-complex-business-module 怎么用
### PPT 页面内容
```Plain Text
用于开工前:
先设计控制面
再进入代码实现
输出:
RBAC、权限方案、状态表、非法流转、
审计 SOP、异常清单、指标字典、接口验收记录
```
### 讲师逐字稿
`design-complex-business-module` 的核心原则是:先设计控制面,再设计代码。
它不是让 AI 直接写实现,而是先把复杂业务应该有的控制资产产出。
课堂里可以把工单需求、项目规则、现有角色、菜单权限、接口、数据表和相似模块作为输入。
如果缺少源码或配置证据,输出必须标记为“建议”或“待确认”,不能让 AI 把推断当成事实。
### 推荐 Prompt
```md
请使用 design-complex-business-module,基于 JeecgBoot 工单模块设计复杂业务控制面。
输入材料:
1. 需求范围:工单权限、状态流转、审计、异常态、看板。
2. 项目规则:security-permission、state-audit、testing、delivery。
3. 现有证据:角色、菜单权限、接口、数据表、相似模块。
输出必须包含:
RBAC 权限矩阵、权限控制方案、状态流转表、非法流转清单、
审计日志 SOP、异常态清单、看板指标字典、看板接口验收记录。
要求:
没有源码或配置证据的内容标记为“建议”或“待确认”。
```
---
## Slide 7-3:阶段 Review 报告模板
### PPT 页面内容
```Plain Text
Review 输出必须包含:
问题等级
模块
问题
触发规则
风险
修复建议
验收方式
```
### 讲师逐字稿
Review 输出必须结构化。
不能只说“建议加强权限”。
要写清问题等级、模块、问题、触发规则、风险、修复建议和验收方式。
比如删除接口只隐藏前端按钮,后端没有权限校验,这就是 P1。
比如审计日志记录了状态变更,但没有记录前后值,这可能是 P2。
比如看板指标没有说明统计口径,这也是 Review 问题。
### 课堂产出
```md
# 第四天阶段 Review 报告
| 等级 | 模块 | 问题 | 触发规则 | 风险 | 修复建议 | 验收 |
|---|---|---|---|---|---|---|
| P1 | 权限 | 删除接口只隐藏按钮,后端缺少权限校验 | 前端按钮不是安全边界 | 可绕过前端删除工单 | 后端补权限注解 | 无权限账号请求返回 403 |
| P1 | 状态流转 | closed 工单仍可重新处理 | 非法流转必须拒绝 | 关闭状态失效 | 禁止 closed -> processing | 接口返回非法状态 |
| P2 | 审计 | 指派未记录前后值 | 敏感操作必须可追溯 | 难以追踪责任 | 记录 old/new assignee | 详情页日志可查 |
| P2 | 看板 | 平均关闭周期口径不清 | 指标必须有口径 | 管理判断失真 | 明确 create_time 到 close_time | 指标字典更新 |
```
---
## Slide 7-3A:review-business-delivery 怎么用
### PPT 页面内容
```Plain Text
用于阶段 Review:
输入不能只有 diff
必须同时给:
业务产物
测试结果
验收记录
项目 rules
输出问题优先,按 P0/P1/P2/P3 排序
```
### 讲师逐字稿
`review-business-delivery` 的作用是防止 AI Review 只做代码风格点评。
第四天 Review 的对象是业务交付,不只是代码 diff。
所以输入材料必须包括当天 diff、RBAC 矩阵、权限控制方案、状态流转表、非法流转清单、审计 SOP、异常态清单、看板指标字典和测试结果。
输出要问题优先,按 P0/P1/P2/P3 排序。
每个问题必须有证据、风险、修复建议和验收方式。
如果缺少证据,就列到“证据缺口”,不能让 AI 猜。
### 推荐 Prompt
```md
请使用 review-business-delivery 对第四天工单模块交付做阶段 Review。
输入材料:
- 当天 diff 或修改文件清单
- RBAC 权限矩阵和权限控制方案
- 状态流转表和非法流转清单
- 审计日志 SOP 和异常态清单
- 看板指标字典和接口验收记录
- 测试命令、接口响应、浏览器验证或手工验收记录
输出格式:
先列问题清单,按 P0/P1/P2/P3 排序;
每个问题必须有证据、风险、修复建议和验收方式;
缺少证据时单独列“证据缺口”,不要猜测。
```
---
## Slide 7-4:修复闭环
### PPT 页面内容
```Plain Text
Review 后必须闭环:
确认问题
生成修复计划
最小修改
运行验证
更新资产
```
### 讲师逐字稿
Review 不是结束,而是修复闭环的开始。
对于 AI Review 提出的每个问题,先确认它是否成立。
成立的问题,再让 TRAE 生成修复计划。
修复时要坚持最小修改,不要借机重构无关代码。
修复后运行验证。
如果这个问题有复用价值,比如“状态流转必须有非法路径测试”,就更新到团队资产库。
---
## Slide 7-5:修复记录模板
### PPT 页面内容
```Plain Text
修复记录必须包含:
Review 问题
是否成立
修改文件
修改说明
验证结果
是否沉淀资产
```
### 讲师逐字稿
第四天最后的产物里要有修复记录。
因为 Review 只发现问题还不够,必须看到问题是否闭环。
每条 Review 问题都要先判断是否成立。
成立的问题记录修改文件和修改说明。
不成立的问题也要说明原因,避免把 AI 的错误判断当成真实问题。
修复后记录验证结果。
如果这个问题有复用价值,就沉淀到资产库,比如权限上线前检查清单、状态流转检查清单、审计日志检查清单。
### 课堂产出
```md
# 第四天修复记录
| Review 编号 | 问题 | 是否成立 | 修改文件 | 修改说明 | 验证结果 | 资产沉淀 |
|---|---|---|---|---|---|---|
| R01 | 删除接口缺少后端权限校验 | 是 | WorkOrderController | 增加权限校验 | 无权限请求被拒绝 | 权限检查清单 |
| R02 | closed 可重新处理 | 是 | WorkOrderService | 补非法流转校验 | closed -> processing 失败 | 状态流转检查清单 |
| R03 | 看板关闭周期口径不清 | 是 | 指标字典/看板接口 | 明确 create_time 到 close_time | 指标说明已更新 | 看板指标口径清单 |
```
---
## Slide 7-5A:track-review-fix-loop 怎么用
### PPT 页面内容
```Plain Text
用于 Review 修复后:
每个问题只能标记为:
成立-已修复
成立-暂不修复
不成立
需确认
未闭环
没有验证证据不能关闭
```
### 讲师逐字稿
`track-review-fix-loop` 负责把 Review 问题真正闭环。
它要求每个问题不能只写“已修复”。
必须判断问题是否成立,列出修改文件或产物,提供验证证据,说明剩余风险,并判断是否要沉淀成资产。
如果没有验证证据,就不能标记为完成,只能标记为未闭环。
如果问题依赖业务决策,就标记为需确认。
如果问题不成立,也要保留原因和证据,不要直接删除。
### 推荐 Prompt
```md
请使用 track-review-fix-loop,把阶段 Review 问题转成修复闭环记录。
输入材料:
- 带编号的 Review 报告
- 修改文件或产物
- 测试输出、接口响应、浏览器截图或手工验收步骤
- 现有 rules、checklists、prompts、examples、skills 目录
每个问题状态只能是:
成立-已修复 / 成立-暂不修复 / 不成立 / 需确认 / 未闭环
输出必须包含:
修复记录、未闭环事项、资产更新建议。
资产类型从 rule、checklist、prompt、command、skill、example 中选择。
```
---
## Slide 7-6:第四天完整实操链路
### PPT 页面内容
```Plain Text
完整链路:
权限矩阵
权限落地
状态机
状态接口
审计日志
异常测试
看板指标
阶段 Review
修复记录
```
### 讲师逐字稿
到这里,第四天形成一条完整链路。
先有权限矩阵,再有权限落地。
先有状态机,再有状态接口和状态校验。
关键动作必须写审计日志。
异常态必须用最小测试集验证。
看板必须先有指标字典,再有接口和页面。
最后通过阶段 Review 发现问题,再用修复记录闭环。
这条链路就是第四天真正要训练的能力。
不是简单地让 AI 写更多代码,而是让 AI 围绕业务规则、工程约束和验收证据工作。
---
# 第 4 天交付验收
---
## Slide 8-1:最后 30 分钟交付验收会
### PPT 页面内容
```Plain Text
最后 30 分钟:
整理权限矩阵
整理状态机
整理审计日志 SOP
整理异常态清单
整理看板指标与接口验收
完成阶段 Review
补齐修复记录
```
### 讲师逐字稿
第四天最后 30 分钟仍然要做交付验收会。
每组整理今天的关键产物。
重点不是谁做的页面更完整,而是谁的业务规则更清楚、验收方式更可执行。
课堂上可以让小组互评。
互评时不要泛泛说“不错”,要检查权限矩阵是否覆盖敏感操作,状态机是否有非法流转,审计日志是否有字段前后值,异常态是否覆盖关键风险,看板指标是否有口径。
### 课堂安排
```md
| 时间 | 动作 | 输出 |
|---|---|---|
| 6 分钟 | 整理 RBAC 与权限方案 | 权限矩阵 + 权限控制方案 |
| 6 分钟 | 整理状态流转 | 状态流转表 + 非法流转清单 |
| 5 分钟 | 整理审计日志 | 审计日志 SOP |
| 5 分钟 | 整理异常态与看板 | 异常态清单 + 指标字典 + 看板接口验收 |
| 5 分钟 | TRAE 阶段 Review | Review 报告 |
| 3 分钟 | 补齐修复记录与资产候选 | 修复记录 + 候选资产 |
```
---
## Slide 8-2:第 4 天交付物
### PPT 页面内容
```Plain Text
第 4 天交付物:
01 工单 RBAC 权限矩阵
02 工单权限控制方案
03 工单状态流转表
04 非法流转清单
05 工单审计日志 SOP
06 异常态与防御性逻辑清单
07 研发效能看板指标字典
08 看板统计接口契约与验收记录
09 阶段 Review 报告
10 修复记录
```
### 讲师逐字稿
第四天最终交付十个产物。
第一,工单 RBAC 权限矩阵。
第二,工单权限控制方案。
第三,工单状态流转表。
第四,非法流转清单。
第五,工单审计日志 SOP。
第六,异常态与防御性逻辑清单。
第七,研发效能看板指标字典。
第八,看板统计接口契约与验收记录。
第九,阶段 Review 报告。
第十,修复记录。
这些产物共同说明:工单模块不只是能运行,还具备权限、状态、审计、异常和指标的工程闭环。
---
## Slide 8-2A:第 4 天资产包目录
### PPT 页面内容
```Plain Text
第 4 天资产包:
rules
skills
templates
checklists
prompts
examples
交付给团队的不是聊天记录
而是可复用工程资产包
```
### 讲师逐字稿
第四天最后要让学员看到:课堂产物不是聊天记录。
真正交付给团队的,是一套可安装、可复用、可审查的工程资产包。
rules 是长期约束,比如权限四层校验、状态先建模、审计一致性、看板手工抽样。
skills 是可触发流程,比如复杂业务设计、阶段 Review、修复闭环。
templates、checklists、prompts 和 examples 是 Skill 运行时会用到的材料。
这样团队下次做审批、报销、发布、合同、库存这些复杂业务模块时,就不需要重新从聊天记录里找经验。
### 课堂产出
```text
ai-dev-assets/
├── rules/
│ ├── security-permission.md
│ ├── state-audit.md
│ ├── testing.md
│ └── delivery.md
├── skills/
│ ├── design-complex-business-module/
│ ├── review-business-delivery/
│ └── track-review-fix-loop/
├── templates/jeecgboot/
├── checklists/jeecgboot/
├── prompts/jeecgboot/
└── examples/jeecgboot/
```
---
## Slide 8-3:交付物验收标准
### PPT 页面内容
```Plain Text
验收标准:
权限可验证
状态可约束
日志可追溯
异常可处理
指标可解释
Review 可闭环
```
### 讲师逐字稿
第四天交付物要有明确验收标准。
权限可验证:无权限账号能被前端和后端同时拦住。
状态可约束:非法状态流转会被拒绝,并且状态不变。
日志可追溯:关键操作能看到操作人、时间、动作和字段前后值。
异常可处理:空数据、接口失败、权限不足、重复提交都有处理。
指标可解释:看板每个指标都有口径和数据来源。
Review 可闭环:Review 问题有等级、有建议、有验证结果。
### 验收表
```md
| 交付物 | 通过标准 |
|---|---|
| RBAC 权限矩阵 | 覆盖角色、功能点、允许/禁止/条件允许 |
| 权限控制方案 | 覆盖菜单、按钮、接口、数据权限和验收 |
| 状态流转表 | 有当前状态、动作、目标状态、角色、前置条件 |
| 非法流转清单 | 覆盖关闭后重开、越权流转、缺少说明等场景 |
| 审计日志 SOP | 明确动作、字段、展示位置、查询方式、验收 |
| 异常态清单 | 覆盖空、错、无权限、重复提交、非法状态 |
| 看板指标字典 | 每个指标有含义、口径、数据来源、展示方式 |
| 看板接口验收记录 | 接口契约、数据范围、空态和权限验证完整 |
| Review 报告 | 有等级、模块、问题、风险、建议、验收 |
| 修复记录 | 每个 Review 问题有成立判断、修改说明和验证结果 |
```
---
## Slide 8-4:第四天课程总结
### PPT 页面内容
```Plain Text
第 3 天:
让工单模块能跑通
第 4 天:
让工单模块能审查、能控制、能上线前验证
核心能力:
复杂业务不是让 AI 多写代码
而是让 AI 按规则、证据和验收标准协作
```
### 讲师逐字稿
第四天结束后,大家应该形成一个关键认识:
复杂业务不是让 AI 多写代码。
复杂业务的关键,是让 AI 按规则、证据和验收标准协作。
权限要有矩阵。
状态要有状态机。
审计要有 SOP。
异常要有清单。
看板要有指标字典。
Review 要有结构化报告和修复闭环。
这就是第四天和第三天的区别。
第三天让工单模块能跑通。
第四天让工单模块能审查、能控制、能上线前验证。
---
# 第 4 天最终资产目录建议
```Plain Text
ai-dev-assets/
├── prompts/jeecgboot/
│ ├── RBAC权限矩阵生成.prompt.md
│ ├── 权限控制方案生成.prompt.md
│ ├── 状态流转设计.prompt.md
│ ├── 异常态补齐.prompt.md
│ ├── 看板指标设计.prompt.md
│ ├── 看板接口验收.prompt.md
│ ├── 阶段Review.prompt.md
│ └── 修复记录生成.prompt.md
├── templates/jeecgboot/
│ ├── RBAC权限矩阵.template.md
│ ├── 权限控制方案.template.md
│ ├── 状态流转表.template.md
│ ├── 审计日志SOP.template.md
│ ├── 异常态清单.template.md
│ ├── 看板指标字典.template.md
│ ├── 看板接口验收记录.template.md
│ ├── 阶段Review报告.template.md
│ └── 修复记录.template.md
├── checklists/jeecgboot/
│ ├── 权限上线前检查清单.md
│ ├── 状态流转检查清单.md
│ ├── 审计日志检查清单.md
│ ├── 异常态检查清单.md
│ ├── 看板指标口径检查清单.md
│ ├── 看板接口验收清单.md
│ └── Review修复闭环检查清单.md
└── examples/jeecgboot/
├── 权限遗漏反例.md
├── 非法状态流转反例.md
├── 审计日志缺失反例.md
├── 看板指标口径不清反例.md
└── Review未闭环反例.md
```
## 讲师收束话术
今天我们没有把 JeecgBoot 工单模块当成一个简单 CRUD 来讲。
我们把它当成一个真实企业后台功能来处理。
真实企业后台的复杂度,往往不在页面字段,而在权限边界、状态规则、审计追溯、异常防御和指标口径。
TRAE 在这里的价值,不是替我们拍脑袋决定业务规则,而是帮助我们把规则结构化,把风险列出来,把验收标准写清楚,把 Review 和修复闭环跑起来。
这就是第四天要带走的能力。