feat:update 3 4
This commit is contained in:
@@ -180,6 +180,29 @@ Markdown 很适合 AI 读写。
|
||||
|
||||
---
|
||||
|
||||
# 落到 JeecgBoot 工单:链路与记录
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
| 工单功能 | 需要让 AI 找到的链路 | 需要沉淀的记录 |
|
||||
|---|---|---|
|
||||
| 工单列表 | 菜单、路由、页面、查询 API、分页参数 | 查询与分页截图 |
|
||||
| 工单详情 | 详情页面、详情接口、字段来源、附件/评论区域 | 字段核对记录 |
|
||||
| 指派负责人 | 前端按钮、后端接口、Service 校验、审计记录 | 指派结果与日志 |
|
||||
| 状态流转 | 状态字典、按钮显隐、流转接口、非法状态处理 | 合法/非法流转记录 |
|
||||
| 权限态 | 菜单按钮权限、接口权限、角色差异 | 无权限账号验证 |
|
||||
| 看板指标 | 统计接口、查询口径、权限过滤、空态展示 | 指标口径与响应 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这页把本模块的三件事合起来:Browser 验证、代码链路索引、Markdown 记录。
|
||||
从这里开始承接第四天项目案例。
|
||||
不要直接让 AI “做工单模块”,先让它按功能链路找页面、接口、权限、状态和数据来源,并把验证证据沉淀下来。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 课堂产出:前端验证清单
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
@@ -190,10 +213,12 @@ Markdown 很适合 AI 读写。
|
||||
| 主流程可操作 | Browser Use 点击、输入、提交 |
|
||||
| 视觉无明显错位 | 截图检查关键视口 |
|
||||
| 代码结论可追溯 | 标注文件、函数、选择器、接口 |
|
||||
| 工单流程可验收 | 列表、详情、指派、状态流转、权限态截图 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这个练习把浏览器能力落到前端交付验收。
|
||||
学员要理解:AI 改完前端之后,浏览器验证会成为标准动作。
|
||||
第四天会把最后一行展开成 JeecgBoot 工单验收记录。
|
||||
-->
|
||||
|
||||
@@ -108,6 +108,8 @@ Trae CLI 企业版也可以嵌入流水线,形成类似能力。
|
||||
| 项目 rules | 规则命中 | 能解释触发原因 |
|
||||
| 测试结果 | 缺口建议 | 能对应关键路径 |
|
||||
| 历史问题 | 回归提醒 | 能指向相似案例 |
|
||||
| 工单权限矩阵 | 权限缺口 | 能对应角色和接口 |
|
||||
| 工单状态流转表 | 非法路径 | 能指出拦截位置 |
|
||||
|
||||
</div>
|
||||
|
||||
@@ -116,6 +118,29 @@ Trae CLI 企业版也可以嵌入流水线,形成类似能力。
|
||||
输入包括 diff、rules、测试结果和历史问题。
|
||||
输出要能落到文件、行号、规则和验证建议。
|
||||
这样审查 Agent 才能进入团队流程。
|
||||
第四天处理工单复杂业务时,要把权限矩阵和状态流转表也放进 Review 输入。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# JeecgBoot 工单承接:哪些任务必须先 Plan
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
| 第 4 天任务 | 为什么不能直接改 | Plan 里必须写清 |
|
||||
|---|---|---|
|
||||
| RBAC 权限矩阵 | 影响菜单、按钮、接口和数据范围 | 角色、权限字符、接口、验收账号 |
|
||||
| 状态流转 | 容易出现越权流转和脏状态 | 状态枚举、合法路径、非法路径 |
|
||||
| 审计日志 | 事后追责依赖日志完整性 | 记录时机、字段、查询方式 |
|
||||
| 异常态 | 代码成功但页面不可用 | 空态、失败态、无权限态、非法状态 |
|
||||
| 看板指标 | 数字错误会误导管理判断 | 指标口径、权限过滤、数据来源 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这页是从第三天进入第四天的桥。
|
||||
前面讲的是 Plan 和 Review 的通用方法。
|
||||
这里明确第四天的 JeecgBoot 工单任务都属于高风险、多链路任务,必须先计划再执行。
|
||||
-->
|
||||
|
||||
---
|
||||
@@ -129,11 +154,14 @@ Trae CLI 企业版也可以嵌入流水线,形成类似能力。
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">04 Agent 分工表</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">05 前端浏览器验证清单</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">06 Plan 与 Review 验收清单</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30">07 JeecgBoot 工单链路索引</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30">08 第 4 天任务 Plan 草案</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
第三天的交付物偏能力体系和工作方式。
|
||||
它承接前两天的代码理解、上下文工程和规则资产化,把 Trae 的产品能力映射到企业研发流程。
|
||||
最后两个交付物用于承接第四天 JeecgBoot 工单复杂业务开发。
|
||||
-->
|
||||
|
||||
---
|
||||
@@ -141,29 +169,33 @@ layout: center
|
||||
class: text-center
|
||||
---
|
||||
|
||||
# 三天课程闭环
|
||||
# 前三天到第四天
|
||||
|
||||
<div class="grid grid-cols-3 gap-4 mt-8 text-left max-w-5xl mx-auto text-sm">
|
||||
<div class="grid grid-cols-4 gap-4 mt-8 text-left max-w-6xl mx-auto text-sm">
|
||||
<div class="p-4 rounded-xl bg-blue-500/10 border border-blue-500/30">
|
||||
<div class="font-bold mb-2">第 1 天</div>
|
||||
用 TRAE 看懂真实代码库
|
||||
用 TRAE 看懂若依权限链路
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30">
|
||||
<div class="font-bold mb-2">第 2 天</div>
|
||||
让 TRAE 按团队规则参与研发
|
||||
把若依经验沉淀成 rules
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-amber-500/10 border border-amber-500/30">
|
||||
<div class="font-bold mb-2">第 3 天</div>
|
||||
把 TRAE 能力接入 Agent 工作方式
|
||||
能力体系 + JeecgBoot 工单承接
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-purple-500/10 border border-purple-500/30">
|
||||
<div class="font-bold mb-2">第 4 天</div>
|
||||
进入权限、审计、异常态与看板开发
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
|
||||
> **最终能力:读得懂 · 问得准 · 查得实 · 改得稳 · 接得上流程**
|
||||
> **第 4 天目标:让工单模块从“能跑通”升级到“可控制、可审计、可验证”。**
|
||||
|
||||
<!--
|
||||
三天课程形成闭环。
|
||||
第一天训练代码理解,第二天训练上下文和规则,第三天训练能力体系和 Agent 工作方式。
|
||||
最终目标是让学员从单次对话体验,走向真实研发流程中的持续使用。
|
||||
第三天不是结束,而是把能力体系接到第四天项目。
|
||||
第一、二天仍以若依为主线,第三天讲 Trae 能力体系,并在后半段把方法迁移到 JeecgBoot 工单。
|
||||
第四天开始处理权限、审计、异常态和看板这些复杂业务开发。
|
||||
-->
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
# 模块 1:RBAC 权限模型设计
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
工单模块不是普通 CRUD。不同角色看到的数据不同、能做的动作不同、承担的责任也不同。
|
||||
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-5 gap-3 mt-8 text-sm">
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-center">管理员</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-center">负责人</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-center">研发</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30 text-center">测试</div>
|
||||
<div class="p-3 rounded-xl bg-gray-500/10 border border-gray-500/30 text-center">只读用户</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
第四天从权限矩阵开始。
|
||||
工单模块看起来像 CRUD,但真实业务里管理员、负责人、研发、测试、只读用户的权限边界完全不同。
|
||||
如果不先设计矩阵,AI 很容易按默认 CRUD 生成所有按钮。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# RBAC 权限矩阵
|
||||
|
||||
<div class="mt-5 text-xs">
|
||||
|
||||
| 功能 | 管理员 | 负责人 | 研发 | 测试 | 只读 |
|
||||
|---|---|---|---|---|---|
|
||||
| 查看列表 | 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 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这张矩阵是课堂产出,不是讲师单方面给答案。
|
||||
AI 可以生成初稿,但最终必须由业务和团队确认。
|
||||
条件允许要写清条件,比如只能编辑自己负责的工单。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 权限矩阵 Prompt
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
```md
|
||||
请基于 JeecgBoot 工单模块设计 RBAC 权限矩阵。
|
||||
|
||||
角色:
|
||||
管理员、负责人、研发、测试、只读用户。
|
||||
|
||||
功能点:
|
||||
查看列表、查看详情、新增、编辑、删除、指派、提交验证、关闭、驳回、查看审计记录、查看看板。
|
||||
|
||||
要求:
|
||||
1. 区分允许、禁止、条件允许。
|
||||
2. 条件允许必须说明条件。
|
||||
3. 每个敏感操作给出验收方式。
|
||||
4. 不要直接生成代码。
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
这里训练学员不要直接让 AI 改代码。
|
||||
先生成矩阵,再确认业务边界,最后才进入权限控制方案。
|
||||
-->
|
||||
@@ -0,0 +1,104 @@
|
||||
# 模块 2:权限控制方案生成
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
权限不是按钮隐藏。工单模块必须同时覆盖菜单权限、按钮权限、接口权限和数据权限。
|
||||
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-4 gap-4 mt-8 text-sm">
|
||||
<div class="p-4 rounded-xl bg-blue-500/10 border border-blue-500/30 text-center">
|
||||
<div class="font-bold">菜单</div>
|
||||
能否进入页面
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-center">
|
||||
<div class="font-bold">按钮</div>
|
||||
能否看到操作
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-amber-500/10 border border-amber-500/30 text-center">
|
||||
<div class="font-bold">接口</div>
|
||||
能否直接调用
|
||||
</div>
|
||||
<div class="p-4 rounded-xl bg-purple-500/10 border border-purple-500/30 text-center">
|
||||
<div class="font-bold">数据</div>
|
||||
能看到哪些工单
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
前端按钮不是安全边界。
|
||||
如果只隐藏删除按钮,但后端删除接口没有权限校验,就是典型漏洞。
|
||||
第四天要把权限闭环做完整。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 工单权限字符建议
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
```md
|
||||
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
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mt-5 p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
|
||||
权限字符必须统一命名,否则前端、后端、菜单配置和 Review 清单会对不上。
|
||||
</div>
|
||||
|
||||
<!--
|
||||
权限字符是工程资产。
|
||||
同一个动作不要一会叫 delete,一会叫 remove,一会叫 ticket:delete。
|
||||
统一命名后,AI 和人才能沿着权限字符追踪前后端实现。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 权限控制方案表
|
||||
|
||||
<div class="mt-5 text-xs">
|
||||
|
||||
| 操作 | 前端入口 | 权限字符 | 后端接口 | 数据权限 | 验收 |
|
||||
|---|---|---|---|---|---|
|
||||
| 新增工单 | 新增按钮 | work:order:add | /workOrder/add | 无 | 无权限账号返回 403 |
|
||||
| 删除工单 | 删除按钮 | work:order:delete | /workOrder/delete | 管理员范围 | 非管理员返回 403 |
|
||||
| 指派工单 | 指派按钮 | work:order:assign | /workOrder/assign | 团队范围 | 研发账号不可指派 |
|
||||
| 状态流转 | 状态按钮 | work:order:transition | /workOrder/transition | 工单可见范围 | 非法角色不能流转 |
|
||||
| 查看看板 | 看板菜单 | work:order:dashboard | /workOrder/dashboard/* | 管理范围 | 只读用户不可访问 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
权限方案必须写清前端入口、权限字符、后端接口、数据权限和验收方式。
|
||||
这样后续 Review 才有依据。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 权限落地检查
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
| 检查项 | 通过标准 |
|
||||
|---|---|
|
||||
| 菜单权限 | 菜单配置有对应权限字符 |
|
||||
| 按钮权限 | 无权限用户看不到敏感按钮 |
|
||||
| 接口权限 | 直接请求敏感接口被拒绝 |
|
||||
| 数据权限 | 不同角色只看到授权范围 |
|
||||
| 验收记录 | 有账号、操作、结果和证据 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
课堂实操时,不要求只看代码。
|
||||
要用不同账号或模拟请求验证:前端不可见只是第一步,后端拒绝才是强制边界。
|
||||
-->
|
||||
@@ -0,0 +1,91 @@
|
||||
# 模块 3:工单状态流转规则实现
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
工单状态不能靠临时 if else。必须先设计状态机,再实现接口和校验。
|
||||
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between mt-12 px-4 text-sm">
|
||||
<div class="text-center flex-1">created<br/><span class="text-xs text-gray-400">已创建</span></div>
|
||||
<div class="text-blue-400">→</div>
|
||||
<div class="text-center flex-1">processing<br/><span class="text-xs text-gray-400">处理中</span></div>
|
||||
<div class="text-blue-400">→</div>
|
||||
<div class="text-center flex-1">pending_verify<br/><span class="text-xs text-gray-400">待验证</span></div>
|
||||
<div class="text-blue-400">→</div>
|
||||
<div class="text-center flex-1">closed<br/><span class="text-xs text-gray-400">已关闭</span></div>
|
||||
</div>
|
||||
|
||||
<div class="mt-8 text-center text-sm text-red-400">pending_verify → rejected → processing</div>
|
||||
|
||||
<!--
|
||||
状态流转是第四天的核心复杂业务。
|
||||
状态值要稳定,中文名可以展示,但代码里要使用明确枚举或字典。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 状态流转表
|
||||
|
||||
<div class="mt-5 text-xs">
|
||||
|
||||
| 当前状态 | 动作 | 目标状态 | 允许角色 | 前置条件 | 失败提示 |
|
||||
|---|---|---|---|---|---|
|
||||
| created | 指派 | processing | 管理员/负责人 | 必须选择指派人 | 请选择指派人 |
|
||||
| processing | 提交验证 | pending_verify | 研发/负责人 | 必须填写处理说明 | 请填写处理说明 |
|
||||
| pending_verify | 关闭 | closed | 测试/负责人 | 验证通过 | 当前工单不可关闭 |
|
||||
| pending_verify | 驳回 | rejected | 测试/负责人 | 必须填写驳回原因 | 请填写驳回原因 |
|
||||
| rejected | 重新处理 | processing | 研发/负责人 | 必须填写处理说明 | 请填写重新处理说明 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
状态流转表要回答当前状态、动作、目标状态、角色、前置条件和失败提示。
|
||||
这张表后续会转成 Service 校验逻辑和测试点。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 非法流转清单
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
| 当前状态 | 尝试动作 | 系统响应 | 验收 |
|
||||
|---|---|---|---|
|
||||
| closed | 重新处理 | 返回非法状态流转 | 状态不变 |
|
||||
| created | 关闭 | 返回非法状态流转 | 页面提示原因 |
|
||||
| processing | 驳回 | 返回非法状态流转 | 状态不变 |
|
||||
| pending_verify | 驳回但无原因 | 返回参数错误 | 提示填写原因 |
|
||||
| 任意状态 | 无权限流转 | 返回权限拒绝 | 不完成操作 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
很多团队只测正常流,不测非法流。
|
||||
第四天必须把非法流转当成设计产物,而不是测试时临时发现。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 状态流转接口契约
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
```md
|
||||
POST /workOrder/assign
|
||||
字段:id、assignee、remark
|
||||
|
||||
POST /workOrder/transition
|
||||
字段:id、action、targetStatus、remark、version
|
||||
|
||||
验收:
|
||||
合法流转成功;非法流转失败;状态不被错误修改;审计日志可查。
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
状态流转不要散落在普通编辑接口里。
|
||||
指派和状态流转建议有明确接口。
|
||||
Service 层负责读取工单、校验权限、校验状态、更新状态、记录日志。
|
||||
-->
|
||||
@@ -0,0 +1,95 @@
|
||||
# 模块 4:审计日志设计
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
工单是多人协作过程。关键动作必须能回答:谁、什么时候、对哪个工单、改了什么、结果如何。
|
||||
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-3 gap-4 mt-8 text-sm">
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-center">指派</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-center">状态变更</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-center">优先级变更</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30 text-center">驳回</div>
|
||||
<div class="p-3 rounded-xl bg-red-500/10 border border-red-500/30 text-center">关闭</div>
|
||||
<div class="p-3 rounded-xl bg-gray-500/10 border border-gray-500/30 text-center">删除</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
审计日志不是一句“修改了工单”。
|
||||
指派、状态变更、优先级变更、驳回、关闭、删除都应该能追溯。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 审计日志字段表
|
||||
|
||||
<div class="mt-5 text-xs">
|
||||
|
||||
| 字段 | 含义 | 示例 |
|
||||
|---|---|---|
|
||||
| ticket_id | 工单 ID | WO-001 |
|
||||
| operator | 操作人 | zhangsan |
|
||||
| action | 操作动作 | assign / transition / edit |
|
||||
| field_name | 字段名 | status / assignee |
|
||||
| before_value | 修改前 | processing |
|
||||
| after_value | 修改后 | pending_verify |
|
||||
| result | 操作结果 | success / fail |
|
||||
| operate_time | 操作时间 | 2026-06-29 10:00 |
|
||||
| remark | 备注 | 提交验证说明 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
字段前后值是审计日志的关键。
|
||||
如果只记录“用户修改了工单”,后续追责和排查都很困难。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 详情页操作记录
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
| 展示字段 | 说明 |
|
||||
|---|---|
|
||||
| 操作时间 | 按时间倒序 |
|
||||
| 操作人 | 当前登录用户 |
|
||||
| 动作 | 指派、提交验证、驳回、关闭 |
|
||||
| 变更内容 | status: processing -> pending_verify |
|
||||
| 备注 | 处理说明、驳回原因 |
|
||||
| 结果 | success / fail |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
审计日志不只是后端写入,还要能在工单详情页被查看。
|
||||
课堂验收时至少完成一次指派、一次提交验证、一次驳回,并能看到三条记录。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 审计日志 SOP
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
```md
|
||||
必须记录:
|
||||
新增、编辑、删除、指派、状态变更、优先级变更、驳回、关闭。
|
||||
|
||||
展示位置:
|
||||
工单详情页操作记录区域。
|
||||
|
||||
事务要求:
|
||||
状态更新和日志写入在同一业务事务内完成。
|
||||
|
||||
验收:
|
||||
执行状态变更、指派、驳回、关闭后,详情页能看到对应审计记录。
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
状态更新成功但日志失败,或者日志成功但状态失败,都会造成追溯问题。
|
||||
所以 Service 层要明确事务边界。
|
||||
-->
|
||||
@@ -0,0 +1,90 @@
|
||||
# 模块 5:异常态与防御性逻辑
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
复杂业务不能只测正常流。权限不足、接口失败、重复提交、非法状态流转都必须有明确处理。
|
||||
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-3 gap-4 mt-8 text-sm">
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-center">空数据</div>
|
||||
<div class="p-3 rounded-xl bg-red-500/10 border border-red-500/30 text-center">接口失败</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-center">权限不足</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30 text-center">重复提交</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-center">非法流转</div>
|
||||
<div class="p-3 rounded-xl bg-gray-500/10 border border-gray-500/30 text-center">工单不存在</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
第三天已经验证基础页面能打开。
|
||||
第四天要进一步补异常态和防御性逻辑。
|
||||
真实问题往往发生在异常流,不在正常流。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 异常态清单
|
||||
|
||||
<div class="mt-5 text-xs">
|
||||
|
||||
| 场景 | 触发条件 | 前端表现 | 后端响应 | 验收 |
|
||||
|---|---|---|---|---|
|
||||
| 空列表 | 查询无结果 | 显示空状态 | 返回空数组 | 不显示报错 |
|
||||
| 接口失败 | 服务异常 | 提示重试 | 5xx 或业务错误 | 页面不崩溃 |
|
||||
| 权限不足 | 无权限操作 | 按钮不可见或提示无权限 | 403 | 不完成操作 |
|
||||
| 重复提交 | 连续点击提交 | 按钮禁用或 loading | 拒绝重复请求 | 只生成一条记录 |
|
||||
| 非法流转 | closed -> processing | 提示非法状态 | 业务错误码 | 状态不变 |
|
||||
| 工单不存在 | 错误 ID | 显示不存在 | 404 或业务错误 | 页面不崩溃 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
异常态要写成表。
|
||||
每个场景都要区分前端表现、后端响应和验收方式。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 最小测试集
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
| 编号 | 场景 | 操作 | 预期 |
|
||||
|---|---|---|---|
|
||||
| E01 | 无权限删除 | 研发账号请求删除接口 | 返回拒绝 |
|
||||
| E02 | 非法状态流转 | closed -> processing | 状态不变 |
|
||||
| E03 | 重复提交验证 | 连续点击提交验证 | 只成功一次 |
|
||||
| E04 | 工单不存在 | 查询错误 ID | 页面不崩 |
|
||||
| E05 | 驳回缺少原因 | remark 为空 | 返回参数错误 |
|
||||
| E06 | 看板无数据 | 无数据范围 | 显示空态 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
课堂时间有限,所以至少覆盖这个最小测试集。
|
||||
它覆盖权限、状态、参数、重复提交、页面异常和看板空态。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 防御性修改边界
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
| 层级 | 修改重点 |
|
||||
|---|---|
|
||||
| 前端 | loading、禁用按钮、空态、错误提示 |
|
||||
| 后端 Controller | 参数校验、权限校验 |
|
||||
| Service | 状态校验、幂等、防重复、事务 |
|
||||
| 审计日志 | 避免重复有效记录 |
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mt-4 p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-sm">
|
||||
不要为了一个工单异常态,重写全局请求库或无关业务模块。
|
||||
</div>
|
||||
|
||||
<!--
|
||||
异常态修复很容易扩散。
|
||||
课堂里要控制边界:只补工单模块相关前端状态、后端校验、Service 状态保护和审计日志。
|
||||
-->
|
||||
@@ -0,0 +1,95 @@
|
||||
# 模块 6:研发效能看板指标开发
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
看板不是图表堆叠。核心是指标口径、数据来源和权限范围。
|
||||
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-3 gap-4 mt-8 text-sm">
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-center">工单总数</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30 text-center">待处理数量</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30 text-center">已关闭数量</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30 text-center">平均关闭周期</div>
|
||||
<div class="p-3 rounded-xl bg-red-500/10 border border-red-500/30 text-center">优先级分布</div>
|
||||
<div class="p-3 rounded-xl bg-gray-500/10 border border-gray-500/30 text-center">状态趋势</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
看板的重点不是图表好看。
|
||||
工单总数怎么算,待处理包含哪些状态,关闭周期从哪里到哪里,都要先讲清楚。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 看板指标字典
|
||||
|
||||
<div class="mt-5 text-xs">
|
||||
|
||||
| 指标 | 含义 | 计算口径 | 数据来源 | 展示 |
|
||||
|---|---|---|---|---|
|
||||
| 工单总数 | 当前工单总量 | 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 | 折线图 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
指标字典是看板开发的第一产物。
|
||||
如果指标口径不清,看板数字就不能用于管理判断。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 看板统计接口契约
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
```md
|
||||
GET /workOrder/dashboard/summary
|
||||
返回:totalCount、pendingCount、closedCount、avgCloseHours
|
||||
|
||||
GET /workOrder/dashboard/status
|
||||
返回:状态分布
|
||||
|
||||
GET /workOrder/dashboard/priority
|
||||
返回:优先级分布
|
||||
|
||||
GET /workOrder/dashboard/trend
|
||||
返回:每日新增、每日关闭
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
<div class="mt-4 p-3 rounded-xl bg-blue-500/10 border border-blue-500/30 text-sm">
|
||||
每个接口必须说明筛选条件、数据范围、统计口径和看板权限。
|
||||
</div>
|
||||
|
||||
<!--
|
||||
看板不要只做前端假数据。
|
||||
至少要设计后端统计接口契约,并说明管理员、负责人、普通用户的数据范围。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 看板页面验收
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
| 验收项 | 预期 |
|
||||
|---|---|
|
||||
| 看板权限 | 无 `work:order:dashboard` 权限不可访问 |
|
||||
| Summary 指标 | 口径符合指标字典 |
|
||||
| 状态分布 | 与列表筛选统计一致 |
|
||||
| 趋势图 | 新增/关闭按日期展示 |
|
||||
| 空数据 | 显示空态,不报 NaN 或 undefined |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
看板页面不是能打开就算完成。
|
||||
验收要看权限、口径、空态和数字是否能解释。
|
||||
-->
|
||||
@@ -0,0 +1,129 @@
|
||||
# 模块 7:阶段代码审查与修复
|
||||
|
||||
<div class="mt-6 text-sm">
|
||||
|
||||
第四天改动涉及权限、状态、审计、异常和看板,必须做阶段 Review。
|
||||
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-2 gap-4 mt-8 text-sm">
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">权限是否闭环</div>
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">状态流转是否完整</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">审计日志是否可查</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">异常态是否覆盖</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">看板口径是否清楚</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">测试是否覆盖关键路径</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
Review 的重点不是格式,也不是变量名。
|
||||
第四天 Review 要检查业务闭环:权限、状态、审计、异常、看板和测试。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# AI Review 输入
|
||||
|
||||
<div class="mt-5 text-sm">
|
||||
|
||||
| 输入材料 | 用途 |
|
||||
|---|---|
|
||||
| 当天 diff | 看实际修改 |
|
||||
| RBAC 权限矩阵 | 判断权限是否正确 |
|
||||
| 状态流转表 | 判断合法和非法路径 |
|
||||
| 审计日志 SOP | 判断是否可追溯 |
|
||||
| 异常态清单 | 判断防御性逻辑 |
|
||||
| 看板指标字典 | 判断统计口径 |
|
||||
| 测试结果 | 判断是否可验收 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
AI Review 不能只给 diff。
|
||||
如果不给业务产物,AI 很难判断代码是否符合业务规则。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 阶段 Review 报告
|
||||
|
||||
<div class="mt-5 text-xs">
|
||||
|
||||
| 等级 | 模块 | 问题 | 风险 | 修复建议 | 验收 |
|
||||
|---|---|---|---|---|---|
|
||||
| P1 | 权限 | 删除接口只隐藏按钮,后端缺少校验 | 可绕过前端删除工单 | 补后端权限校验 | 无权限请求返回 403 |
|
||||
| P1 | 状态 | closed 工单仍可重新处理 | 关闭状态失效 | 禁止 closed -> processing | 接口返回非法状态 |
|
||||
| P2 | 审计 | 指派未记录前后值 | 难以追踪责任 | 记录 old/new assignee | 详情页日志可查 |
|
||||
| P2 | 看板 | 平均关闭周期口径不清 | 管理判断失真 | 明确 create_time 到 close_time | 指标字典更新 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
Review 输出必须结构化。
|
||||
每个问题要有等级、模块、风险、修复建议和验收方式。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 修复记录
|
||||
|
||||
<div class="mt-5 text-xs">
|
||||
|
||||
| Review 编号 | 问题 | 是否成立 | 修改说明 | 验证结果 | 资产沉淀 |
|
||||
|---|---|---|---|---|---|
|
||||
| R01 | 删除接口缺少权限校验 | 是 | 增加后端权限校验 | 无权限请求被拒绝 | 权限检查清单 |
|
||||
| R02 | closed 可重新处理 | 是 | 补非法流转校验 | 状态不变 | 状态流转检查清单 |
|
||||
| R03 | 看板关闭周期口径不清 | 是 | 明确指标口径 | 指标说明已更新 | 看板口径清单 |
|
||||
|
||||
</div>
|
||||
|
||||
<!--
|
||||
Review 不是结束。
|
||||
每个问题都要判断是否成立、记录修改说明、验证结果和是否沉淀资产。
|
||||
-->
|
||||
|
||||
---
|
||||
|
||||
# 第 4 天交付物
|
||||
|
||||
<div class="grid grid-cols-2 gap-3 mt-6 text-sm">
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">01 工单 RBAC 权限矩阵</div>
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">02 工单权限控制方案</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">03 工单状态流转表</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">04 非法流转清单</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">05 工单审计日志 SOP</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">06 异常态与防御性逻辑清单</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30">07 研发效能看板指标字典</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30">08 看板接口验收记录</div>
|
||||
<div class="p-3 rounded-xl bg-red-500/10 border border-red-500/30">09 阶段 Review 报告</div>
|
||||
<div class="p-3 rounded-xl bg-red-500/10 border border-red-500/30">10 修复记录</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
第四天最终交付十个产物。
|
||||
这些产物共同说明:工单模块不只是能运行,还具备权限、状态、审计、异常和指标的工程闭环。
|
||||
-->
|
||||
|
||||
---
|
||||
layout: center
|
||||
class: text-center
|
||||
---
|
||||
|
||||
# 第 4 天总结
|
||||
|
||||
<div class="mt-8 text-lg">
|
||||
让工单模块从“能跑通”升级到“可控制、可审计、可验证、可 Review”。
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-5 gap-3 mt-8 text-sm">
|
||||
<div class="p-3 rounded-xl bg-blue-500/10 border border-blue-500/30">权限矩阵</div>
|
||||
<div class="p-3 rounded-xl bg-emerald-500/10 border border-emerald-500/30">状态机</div>
|
||||
<div class="p-3 rounded-xl bg-amber-500/10 border border-amber-500/30">审计 SOP</div>
|
||||
<div class="p-3 rounded-xl bg-purple-500/10 border border-purple-500/30">异常清单</div>
|
||||
<div class="p-3 rounded-xl bg-red-500/10 border border-red-500/30">Review 闭环</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
第四天的核心不是让 AI 多写代码。
|
||||
核心是让 AI 按规则、证据和验收标准协作,把复杂业务的风险变成可检查、可修复、可沉淀的工程资产。
|
||||
-->
|
||||
Reference in New Issue
Block a user