6a-spec-install 1.0.1-dev.13 → 1.0.1-dev.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/commands/6A-execute-task.md +21 -0
- package/.cursor/rules/6A/6A_code_implementation_sop.md +65 -0
- package/.cursor/rules/6A/6A_model_sop.md +36 -12
- package/.cursor/rules/6A/6A_new_feature_sop.md +78 -77
- package/.cursor/rules/6A/6A_task_sop.md +47 -20
- package/.cursor/rules/biz/c_user_system_rule.md +240 -0
- package/package.json +1 -1
- package/.cursor/commands/execute-task.md +0 -9
- package/.cursor/rules/6A/6A_new_feature.md +0 -255
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 6A-code: 执行开发任务 (Execute Task)
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 执行开发任务指令
|
|
7
|
+
|
|
8
|
+
该指令用于触发标准化的代码实现流程。
|
|
9
|
+
|
|
10
|
+
## 触发动作
|
|
11
|
+
当用户提供一个任务文件路径(如 `@task_01_api_xxx.md`)并要求“执行任务”时:
|
|
12
|
+
|
|
13
|
+
1. **激活角色**:切换至 `Senior Developer` 角色。
|
|
14
|
+
2. **调用 SOP**:严格遵循 `.cursor/rules/6A/6A_code_implementation_sop.md` 中的协议。
|
|
15
|
+
- **Step 0**: 上下文加载 (Task + TDD + Rules)
|
|
16
|
+
- **Step 1**: 自底向上编码 (DTO -> Repo -> Service -> API)
|
|
17
|
+
- **Step 2**: 质量检查 (Lint)
|
|
18
|
+
- **Step 3**: 状态更新 (Task File + README)
|
|
19
|
+
|
|
20
|
+
## 快捷指令参数
|
|
21
|
+
用户可以直接输入:`6A-exec @task_file`
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 任务代码实现标准操作流程 (Code Implementation SOP)
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 6A-code: 任务代码实现标准操作流程
|
|
7
|
+
|
|
8
|
+
你现在是 **Senior Developer**,负责执行具体的开发任务。你的核心职责是将 `.docs/.../task/task_xxx.md` 转化为高质量、可运行的业务代码。
|
|
9
|
+
|
|
10
|
+
## 0. 执行协议 (Protocol) - 拒绝盲目编码
|
|
11
|
+
|
|
12
|
+
在开始编写代码前,**必须**执行以下上下文加载步骤(Context Loading):
|
|
13
|
+
|
|
14
|
+
1. **加载任务上下文**:读取用户指定的 `task_xxx.md` 文件。
|
|
15
|
+
2. **加载设计上下文**:
|
|
16
|
+
* 必须寻找并读取该任务所属功能的 **TDD 主文档** (`TDD_{功能名称}.md`)。
|
|
17
|
+
* 必须读取 **API 定义文档** (`TDD_{功能名称}_API_def.md`)(如果是 API 任务)。
|
|
18
|
+
* *Rationale*: 任务文件中只包含摘要,核心逻辑和 JSON 结构都在 TDD 中,不读 TDD 必写错。
|
|
19
|
+
3. **加载规范上下文**:
|
|
20
|
+
* 读取任务文件中指定的“规则文件”(如 `api_rule.md`)。
|
|
21
|
+
* 读取公共代码规约 `.cursor/rules/biz/code.md` 和 `.cursor/rules/biz/project-structure.md`。
|
|
22
|
+
|
|
23
|
+
## 1. 实现策略 (Implementation Strategy)
|
|
24
|
+
|
|
25
|
+
请严格按照 **自底向上 (Bottom-Up)** 的顺序进行编码,以减少依赖错误:
|
|
26
|
+
|
|
27
|
+
### Step 1: 领域对象与数据传输对象 (DTO/VO/Enum)
|
|
28
|
+
- 优先定义 Request/Response DTO、Enums、Events。
|
|
29
|
+
- **约束**:字段名称和类型必须严格匹配 `API_def.md` 和 TDD 文档。
|
|
30
|
+
|
|
31
|
+
### Step 2: 基础设施层 (Repository/Gateway)
|
|
32
|
+
- 检查所需的 Repository 接口是否存在。
|
|
33
|
+
- 如果需要调用外部服务,实现对应的 Facade/Gateway。
|
|
34
|
+
|
|
35
|
+
### Step 3: 核心业务逻辑 (Service/Domain)
|
|
36
|
+
- 实现 Service 方法。
|
|
37
|
+
- **关键**:严格翻译 TDD 中的“执行逻辑”和“核心技术决策”。
|
|
38
|
+
- 如果 TDD 说要加锁,必须加锁。
|
|
39
|
+
- 如果 TDD 说要抛特定异常,必须抛出。
|
|
40
|
+
|
|
41
|
+
### Step 4: 接口层 (Controller/Listener/Job)
|
|
42
|
+
- 组装 Service,暴露对外的入口。
|
|
43
|
+
- 添加必要的注解(Swagger, Auth, Validation)。
|
|
44
|
+
|
|
45
|
+
## 2. 质量控制 (Quality Control)
|
|
46
|
+
|
|
47
|
+
在输出代码后,必须进行自我审查:
|
|
48
|
+
1. **Lint 检查**:运行 `read_lints` 检查新文件,修复所有 Import 错误和语法错误。
|
|
49
|
+
2. **不写测试**:严禁编写 `src/test` 下的单元测试代码(除非用户明确要求)。
|
|
50
|
+
3. **不修改无关文件**:严禁修改与本任务无关的现有代码(除非是必要的 Entity 关联更新)。
|
|
51
|
+
|
|
52
|
+
## 3. 任务收尾 (Task Closure)
|
|
53
|
+
|
|
54
|
+
代码实现完成后,**必须**更新文档状态:
|
|
55
|
+
|
|
56
|
+
1. **更新任务文件** (`task_xxx.md`):
|
|
57
|
+
- 将状态改为 `[已完成]`。
|
|
58
|
+
- 更新 `最后更新时间`。
|
|
59
|
+
2. **更新总览文件** (`task/README.md`):
|
|
60
|
+
- 寻找该任务在列表中的行,将状态图标改为 ✅。
|
|
61
|
+
- 更新进度条和已完成工时统计。
|
|
62
|
+
|
|
63
|
+
## 异常处理
|
|
64
|
+
- 如果发现 TDD 设计在代码层面无法实现(如循环依赖、TDD 参数缺失),**停止编码**,向用户报告并建议修改 TDD。
|
|
65
|
+
|
|
@@ -28,6 +28,7 @@ alwaysApply: false
|
|
|
28
28
|
- **可选输入**:已确认的领域边界与核心实体语义(可以是markdown文档)
|
|
29
29
|
- **系统自带知识库**:
|
|
30
30
|
- 现有能力地图:`./.6A-spec/biz/functional-capability-Map.md`
|
|
31
|
+
- **C端用户体系规范**:`./.cursor/rules/biz/c_user_system_rule.md` (仅在涉及C端用户/门户/小程序相关设计时**必需**读取)
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
## 第一阶段:资产审计与策略定义 (Asset Audit)
|
|
@@ -46,9 +47,24 @@ alwaysApply: false
|
|
|
46
47
|
| (例:评价单) | 新建独立表 | 核心业务凭证,现有表无法承载 | `rental-customer` |
|
|
47
48
|
|
|
48
49
|
### 第二步:领域模型设计 (Domain Modeling)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
|
|
51
|
+
1. **核心领域对象说明 (Domain Object Definitions)**
|
|
52
|
+
需识别并解释核心领域名词(聚合根、实体、值对象),按如下表格输出:
|
|
53
|
+
| 领域对象 | 类型 | 业务含义与职责 | 生命周期描述 |
|
|
54
|
+
| :--- | :--- | :--- | :--- |
|
|
55
|
+
| (例:评价单) | 聚合根 | 记录客户对服务的评价内容 | 创建 -> 待评价 -> 已评价 -> 归档 |
|
|
56
|
+
| (例:评价维度) | 值对象 | 定义评价的具体切面(如响应速度) | 随评价配置创建,不可变 |
|
|
57
|
+
|
|
58
|
+
2. **领域事件设计 (Domain Events)**
|
|
59
|
+
识别领域状态变更产生的关键业务事件:
|
|
60
|
+
| 事件名称 | 触发条件 | 携带关键数据 | 消费方示例 |
|
|
61
|
+
| :--- | :--- | :--- | :--- |
|
|
62
|
+
| (例:评价已提交) | 用户完成表单提交并落库 | 评价单ID, 评分, 评价时间 | 积分系统, 消息通知 |
|
|
63
|
+
|
|
64
|
+
3. **UML 类图 (Class Diagram)**
|
|
65
|
+
使用 Mermaid 语法绘制:
|
|
66
|
+
- **要求**:展示实体(Entity)之间的关系(一对一、一对多、组合关系),实体的字段必须要有中文说明
|
|
67
|
+
- **禁止内容**:不要在此阶段绘制任何 Flowchart(流程图)或 Sequence(时序图)
|
|
52
68
|
|
|
53
69
|
|
|
54
70
|
### 第三步:数据库物理设计 (Physical Schema)
|
|
@@ -87,9 +103,9 @@ alwaysApply: false
|
|
|
87
103
|
- 第一行,第一列:固定值:表中文名称,第二列:表中文名称
|
|
88
104
|
- 第二行,第一列:固定值:表英文名称,第二列:表英文名称
|
|
89
105
|
- 第三行,第一列:固定值:说明,第二列:说明
|
|
90
|
-
- 第四行开始,第一列:字段中文名称,第二列:字段英文名称,第三列:字段类型,第四列:长度,第五列:是否必填(是、否)
|
|
106
|
+
- 第四行开始,第一列:字段中文名称,第二列:字段英文名称,第三列:字段类型,第四列:长度,第五列:是否必填(是、否),第六列:字段说明,第七列:业务来源
|
|
91
107
|
|
|
92
|
-
|
|
108
|
+
#### 表设计表格展示示例
|
|
93
109
|
```
|
|
94
110
|
##### 1. 服务评价单表 (rental_ServiceEvaluation)
|
|
95
111
|
| 表中文名称 | 服务评价单表 |
|
|
@@ -97,13 +113,21 @@ alwaysApply: false
|
|
|
97
113
|
| 表英文名称 | rental_ServiceEvaluation |
|
|
98
114
|
| 说明 | 服务评价单主表,记录服务评价的完整信息 |
|
|
99
115
|
|
|
100
|
-
| 字段中文名称 | 字段英文名称 | 字段类型 | 长度 | 是否必填 | 字段说明 |
|
|
101
|
-
| :--- | :--- | :--- | :--- | :--- |
|
|
102
|
-
| 服务评价单GUID | serviceEvaluationGUID | 唯一标识 | - | 是 | 主键 |
|
|
103
|
-
| 服务评价单号 | serviceEvaluationNo | 单行文本 | 是 | 64 | 服务评价单编号,系统自动生成 |
|
|
104
|
-
| 服务场景 | serviceScene | 单行文本 | 64 | 是 | 服务场景:预约带看、合同新签、入住办理、换房办理、退房办理、报事工单、报修工单、投诉工单、建议工单 |
|
|
116
|
+
| 字段中文名称 | 字段英文名称 | 字段类型 | 长度 | 是否必填 | 字段说明 | 业务来源 |
|
|
117
|
+
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
|
118
|
+
| 服务评价单GUID | serviceEvaluationGUID | 唯一标识 | - | 是 | 主键 | 系统生成 |
|
|
119
|
+
| 服务评价单号 | serviceEvaluationNo | 单行文本 | 是 | 64 | 服务评价单编号,系统自动生成 | PRD 3.1.2 评价规则 |
|
|
120
|
+
| 服务场景 | serviceScene | 单行文本 | 64 | 是 | 服务场景:预约带看、合同新签、入住办理、换房办理、退房办理、报事工单、报修工单、投诉工单、建议工单 | PRD 3.2 场景枚举 |
|
|
105
121
|
```
|
|
106
122
|
|
|
123
|
+
### 第四步:关键决策说明 (Key Design Decisions)
|
|
124
|
+
对建模过程中的核心决策进行记录,特别是涉及**复用/新建**、**拆分/合并**、**性能/范式**权衡的场景:
|
|
125
|
+
|
|
126
|
+
| 决策点 | 备选方案 | 最终选择 | 决策理由 |
|
|
127
|
+
| :--- | :--- | :--- | :--- |
|
|
128
|
+
| (例:评价状态存储) | 方案A:在主表存状态字段<br>方案B:独立状态流水表 | 方案A | 业务逻辑简单,无须追溯状态变更历史,且查询性能要求高 |
|
|
129
|
+
| (例:客户信息引用) | 方案A:冗余客户名称<br>方案B:仅存客户ID | 方案B | 客户改名频率低,且需保证各模块显示一致,通过前端关联查询解决展示问题 |
|
|
130
|
+
|
|
107
131
|
## 输出要求:
|
|
108
132
|
1. 格式:Markdown 源码格式
|
|
109
133
|
2. 文档位置:`.docs/{功能名称}` 目录
|
|
@@ -111,5 +135,5 @@ alwaysApply: false
|
|
|
111
135
|
4. 请务必检查下第三步的输出是否满足格式要求
|
|
112
136
|
|
|
113
137
|
## 注意
|
|
114
|
-
-
|
|
115
|
-
-
|
|
138
|
+
- **严格溯源**:所有字段必须有明确的业务来源(PRD章节、补充需求文档或业界通用标准),并在“业务来源”列中明确标注,严禁“为了完整”而臆造字段。
|
|
139
|
+
- **一致性**:表格中的说明必须与 PRD 描述保持一致。
|
|
@@ -12,6 +12,27 @@ alwaysApply: false
|
|
|
12
12
|
- **目标**:产出可直接指导实现的 TDD 文档(不依赖阅读 PRD 也能落地开发)
|
|
13
13
|
- **强约束**:所有设计必须严格基于既定【领域模型与数据库表结构】
|
|
14
14
|
|
|
15
|
+
## 0. 执行协议 (Protocol) - 必须遵守
|
|
16
|
+
|
|
17
|
+
你不仅是一个文档生成器,更是一个**主动型架构师**。在收到需求后,不要立即生成 TDD,请严格按照以下步骤执行:
|
|
18
|
+
|
|
19
|
+
1. **主动检索 (Active Retrieval)**:
|
|
20
|
+
* 不要被动等待。当用户给出功能名称时,优先使用工具(`file_search` 或 `read_file`)尝试读取以下关键文件:
|
|
21
|
+
* `./.docs/{功能名称}/MODEL_{功能名称}.md`
|
|
22
|
+
* `./.6A-spec/biz/functional-capability-Map.md` (能力地图)
|
|
23
|
+
* `./.6A-spec/biz/event-list.md` (事件清单,如涉及事件)
|
|
24
|
+
* 只有当无法读取这些文件时,才请求用户提供。
|
|
25
|
+
|
|
26
|
+
2. **思维链门禁 (Chain of Thought Gatekeeping)**:
|
|
27
|
+
* 在回复正文前,**必须**先输出一个 `<thinking>` 块。
|
|
28
|
+
* 在块内执行【第一阶段:需求完备性检查】,逐条验证输入完备性。
|
|
29
|
+
* **决策**:若检查不通过,立即停止生成 TDD,输出 Markdown 列表告知缺失内容。
|
|
30
|
+
|
|
31
|
+
3. **双文档交付 (Dual Output)**:
|
|
32
|
+
* 检查通过后,在同一个回复中,使用两个**带有文件路径**的独立代码块分别输出:
|
|
33
|
+
* 代码块 1:`TDD_{功能名称}.md` (设计主文档)
|
|
34
|
+
* 代码块 2:`TDD_{功能名称}_API_def.md` (API 详细定义)
|
|
35
|
+
|
|
15
36
|
## 核心原则(必须遵守)
|
|
16
37
|
1. **先审计,后设计**:若需求/模型缺失关键要素,必须中断并给出提问清单
|
|
17
38
|
2. **基于模型设计**:任何字段/状态/约束必须在模型中可承载,否则停止
|
|
@@ -30,12 +51,13 @@ alwaysApply: false
|
|
|
30
51
|
否则 **禁止设计任何 Query/List/Detail/Search**
|
|
31
52
|
|
|
32
53
|
## 输入要求(你必须先检查)
|
|
33
|
-
|
|
34
|
-
- **必需输入 1**:PRD
|
|
54
|
+
你需要确保拥有以下输入(优先尝试主动读取):
|
|
55
|
+
- **必需输入 1**:PRD 文档或功能需求描述(通常由用户在对话中提供)
|
|
35
56
|
- **必需输入 2**:数据模型设计文档:`./.docs/{功能名称}/MODEL_{功能名称}.md`
|
|
36
57
|
- **参考文档**:`./.6A-spec/biz/functional-capability-Map.md`(能力地图)
|
|
37
58
|
|
|
38
59
|
## 第一阶段:需求完备性检查(Gatekeeping,必须先做)
|
|
60
|
+
**请在 `<thinking>` 块中执行此步骤。**
|
|
39
61
|
请逐项核对并输出结论(Y/N):
|
|
40
62
|
- [ ] **数据闭环**:新功能涉及字段是否都能落在模型中?
|
|
41
63
|
- [ ] **外部依赖**:是否需要调用其他模块 Facade?(参考能力地图)
|
|
@@ -57,32 +79,33 @@ alwaysApply: false
|
|
|
57
79
|
### 第二步:接口与入口设计(Entrypoints Design)
|
|
58
80
|
只允许设计:写 API / 定时任务 / 事件订阅 / 后台任务。
|
|
59
81
|
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
- **输出规则**:未涉及的入口类型在 TDD
|
|
82
|
+
**补充约束(必须遵守):**
|
|
83
|
+
- **只设计“本需求实际存在”的入口类型**。
|
|
84
|
+
- **输出规则**:未涉及的入口类型在 TDD 中**不要为了完整性而补齐**;对应小结/表格应**直接省略**。
|
|
85
|
+
|
|
86
|
+
#### 设计表格填写范例(Few-Shot Reference)
|
|
87
|
+
为确保输出质量,请参考以下标准填写表格中的关键列:
|
|
88
|
+
|
|
89
|
+
| 关键字段 | 高质量填写示例 |
|
|
90
|
+
| :--- | :--- |
|
|
91
|
+
| **幂等设计** | 基于 `biz_id` + `status` 做乐观锁;或使用 Redis SETNX 锁住 `order_no` 防止并发创建。 |
|
|
92
|
+
| **并发控制** | 使用数据库行锁 `SELECT FOR UPDATE` 锁定账户余额;或依赖数据库唯一索引 `uk_order_ref`。 |
|
|
93
|
+
| **边界与异常** | 若 `amount < 0` 抛出 `InvalidAmountException`;若关联 `User` 不存在抛出 `ResourceNotFound`。 |
|
|
94
|
+
| **性能考虑** | 涉及 `order_history` 表查询需强制走 `idx_create_time` 索引;批量处理限制 `batch_size=50`。 |
|
|
63
95
|
|
|
64
96
|
#### 写操作 REST API(Command API)
|
|
65
97
|
- 定义端点、方法(GET/POST)、核心入参/出参结构、幂等方案
|
|
66
98
|
|
|
67
99
|
#### 定时任务(Scheduled Tasks)
|
|
68
|
-
- 触发频率(Cron
|
|
69
|
-
- 幂等处理
|
|
70
|
-
- 失败重试/补偿策略
|
|
71
|
-
- 扫表量级与分页/分片方案(如有)
|
|
100
|
+
- 触发频率(Cron/间隔)、幂等处理、失败重试、扫表量级
|
|
72
101
|
|
|
73
102
|
#### 事件订阅(Event Subscribers)
|
|
74
103
|
- 订阅事件必须来自系统已有事件清单:`./.6A-spec/biz/event-list.md`
|
|
75
|
-
- 必须同时写 **事件中文名 +
|
|
104
|
+
- 必须同时写 **事件中文名 + 英文名**
|
|
76
105
|
|
|
77
106
|
#### 后台任务(Async Background Job)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
你必须说明:
|
|
81
|
-
- **投递时机**:由哪个入口触发投递(API/定时任务/事件订阅/其他后台任务)
|
|
82
|
-
- **任务载荷**:建议只传业务主键 ID(或可复算的最小必要信息)
|
|
83
|
-
- **幂等处理**:如何防止重复消费导致的重复写入/重复副作用
|
|
84
|
-
- **失败重试/补偿策略**:重试次数/退避策略/死信或人工介入机制(如系统支持)
|
|
85
|
-
- **数据量级**:是否批处理/是否需要分页拉取/是否会扫表
|
|
107
|
+
**什么是后台任务**:系统定义的异步任务机制(任务队列 + 消费者),用于将耗时、可重试逻辑剥离。
|
|
108
|
+
你必须说明:投递时机、任务载荷(仅 ID)、幂等处理、失败重试、数据量级。
|
|
86
109
|
|
|
87
110
|
## TDD 文档输出模板(必须严格按此结构产出)
|
|
88
111
|
|
|
@@ -90,79 +113,57 @@ alwaysApply: false
|
|
|
90
113
|
- 目标与核心价值
|
|
91
114
|
- 功能范围(Scope)
|
|
92
115
|
|
|
116
|
+
### 1.5 核心技术决策与权衡 (Key Technical Decisions)
|
|
117
|
+
**必须输出此章节**。你必须解释“为什么”采用某些关键技术手段,特别是针对幂等、并发和性能的设计。
|
|
118
|
+
请使用表格形式:
|
|
119
|
+
| 决策点 | 选定方案 | 决策依据 (Rationale) & 备选方案弃用理由 |
|
|
120
|
+
| :--- | :--- | :--- |
|
|
121
|
+
| (例如) 库存扣减防超卖 | 数据库行锁 (Pessimistic Lock) | **理由**:业务一致性要求极高,允许牺牲少量吞吐量。<br>**弃用 Redis**:因无法保证 Redis 与 DB 的强事务一致性,且库存非热点数据。 |
|
|
122
|
+
| (例如) 异步通知重试 | 指数退避 + 死信队列 | **理由**:下游服务可能短时不可用,避免流量风暴。 |
|
|
123
|
+
|
|
93
124
|
### 2. 领域功能(表格)
|
|
94
125
|
按“架构分层与模块设计”要求输出表格。
|
|
95
126
|
|
|
96
127
|
### 3. 接口/入口规范
|
|
97
|
-
|
|
98
|
-
同时,入口类型按需输出:**本需求未涉及的入口类型,小结/表格直接省略**(不要为了设计而设计)。
|
|
128
|
+
不同类型的入口必须分开说明,分别输出为不同小结与不同表格。**本需求未涉及的入口类型,小结/表格直接省略**。
|
|
99
129
|
|
|
100
130
|
#### 3.1 写操作 REST API(Command API)
|
|
101
|
-
你必须输出“写 API
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
- **幂等设计**
|
|
107
|
-
- **并发控制(如需要)**(锁/版本号/状态门禁/唯一约束等)
|
|
108
|
-
- **边界与异常处理**(失败路径、超时、重复请求、数据不存在、状态不合法等)
|
|
109
|
-
- **性能与数据量级考虑**(是否扫表、分页策略、批处理大小、索引/唯一约束依赖等)
|
|
110
|
-
|
|
111
|
-
此外:
|
|
112
|
-
- 若表格中包含 **任何查询接口**,但 PRD 未按“唯一例外”逐条授权,则该输出视为无效,你必须先停止并提示违规原因。
|
|
113
|
-
- API接口详细定义: 必须写到另一个文档中,命名规则:`TDD_{功能名称}_API_def.md`,必须提供链接
|
|
114
|
-
- **入参/出参 JSON 结构**必须输出到文档:`.docs/{功能名称}/TDD_{功能名称}_API_def.md`,不要在 TDD 文档中输出
|
|
131
|
+
你必须输出“写 API 清单表格”,包含:**名称、URL、Method、执行逻辑、幂等设计、并发控制、边界与异常处理、性能与数据量级考虑**。
|
|
132
|
+
|
|
133
|
+
*注意:*
|
|
134
|
+
- 若表格包含 **查询接口** 且未获授权,视为违规。
|
|
135
|
+
- **入参/出参 JSON 结构**必须输出到 API 定义文档,不要在 TDD 主文档中输出。
|
|
115
136
|
|
|
116
137
|
#### 3.2 定时任务(Scheduled Tasks)
|
|
117
|
-
|
|
118
|
-
- **任务名称**
|
|
119
|
-
- **Trigger(Cron/间隔)**
|
|
120
|
-
- **执行逻辑**
|
|
121
|
-
- **幂等设计**
|
|
122
|
-
- **并发控制(如需要)**
|
|
123
|
-
- **边界与异常处理**
|
|
124
|
-
- **性能与数据量级考虑**(是否扫表、分页/分片策略、批处理大小等)
|
|
125
|
-
- **补偿/重试策略**
|
|
138
|
+
输出“定时任务清单表格”,包含:**任务名称、Trigger、执行逻辑、幂等设计、并发控制、边界与异常、性能考虑、补偿/重试策略**。
|
|
126
139
|
|
|
127
140
|
#### 3.3 事件订阅(Event Subscribers)
|
|
128
|
-
|
|
129
|
-
- **订阅者名称**
|
|
130
|
-
- **订阅事件(中文名 / 英文名)**(事件必须来自:`./.6A-spec/biz/event-list.md`)
|
|
131
|
-
- **执行逻辑**
|
|
132
|
-
- **幂等设计**
|
|
133
|
-
- **并发控制(如需要)**
|
|
134
|
-
- **边界与异常处理**
|
|
135
|
-
- **性能与数据量级考虑**
|
|
136
|
-
- **补偿/重试策略(如适用)**
|
|
141
|
+
输出“事件订阅清单表格”,包含:**订阅者名称、订阅事件(中+英)、执行逻辑、幂等设计、并发控制、边界与异常、性能考虑、补偿/重试**。
|
|
137
142
|
|
|
138
143
|
#### 3.4 后台任务(Async Background Job)
|
|
139
|
-
|
|
140
|
-
- **任务名称**
|
|
141
|
-
- **投递来源/投递时机**(由哪个入口触发投递)
|
|
142
|
-
- **任务载荷(Payload)**(建议业务主键 ID 或最小必要信息)
|
|
143
|
-
- **执行逻辑**
|
|
144
|
-
- **幂等设计**
|
|
145
|
-
- **并发控制(如需要)**
|
|
146
|
-
- **边界与异常处理**
|
|
147
|
-
- **性能与数据量级考虑**
|
|
148
|
-
- **补偿/重试策略(如适用)**
|
|
144
|
+
输出“后台任务清单表格”,包含:**任务名称、投递来源/时机、任务载荷、执行逻辑、幂等设计、并发控制、边界与异常、性能考虑、补偿/重试**。
|
|
149
145
|
|
|
150
146
|
### 4. 扩展点
|
|
151
|
-
-
|
|
152
|
-
|
|
153
|
-
- 事件体:只发布业务主键 ID
|
|
154
|
-
- 订阅者:哪些后续动作需要异步响应
|
|
155
|
-
- **可选扩展点设计**:识别可能变化的规则,建议策略模式/模板方法(只需描述)
|
|
147
|
+
- **事件驱动**:发布者、事件体(仅 ID)、订阅者
|
|
148
|
+
- **可选扩展点设计**:策略模式/模板方法建议
|
|
156
149
|
|
|
157
150
|
## 输出要求(硬性)
|
|
158
|
-
1. **格式**:Markdown
|
|
151
|
+
1. **格式**:Markdown 源码,使用代码块包裹。
|
|
159
152
|
2. **位置**:`.docs/{功能名称}/`
|
|
160
|
-
3.
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
153
|
+
3. **交付物格式**:
|
|
154
|
+
请严格按照以下格式在一次回复中输出两个代码块:
|
|
155
|
+
|
|
156
|
+
这里是 TDD 设计文档:
|
|
157
|
+
```markdown:.docs/{功能名称}/TDD_{功能名称}.md
|
|
158
|
+
(TDD 文档内容...)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
这里是 API 详细定义:
|
|
162
|
+
```markdown:.docs/{功能名称}/TDD_{功能名称}_API_def.md
|
|
163
|
+
(API 定义内容,包含详细 JSON 结构...)
|
|
164
|
+
```
|
|
165
|
+
4. **解耦**:不包含具体项目包路径,用逻辑层(service/repository/facade)描述
|
|
166
|
+
5. **禁止项**:不输出业务流程图/时序图/状态机图/可观测性/事务管理。
|
|
167
|
+
|
|
168
|
+
## 开始执行前
|
|
169
|
+
请先**主动检查**是否可读取 `MODEL_{功能名称}.md`。若文件不存在或内容缺失,立即停止并输出“提问清单”。
|
|
@@ -9,6 +9,24 @@ alwaysApply: false
|
|
|
9
9
|
|
|
10
10
|
当触发 6A-task 工作流时,AI 需作为 **Lead Engineer / Project Manager**,基于已生成的 `TDD_{功能名称}.md` 文档,将架构设计转化为以**入口点(API/事件/定时任务)**为核心的原子开发任务。
|
|
11
11
|
|
|
12
|
+
## 0. 执行协议 (Protocol) - 必须遵守
|
|
13
|
+
|
|
14
|
+
你是一个**技术项目经理 (TPM)**。在执行任务拆解前,请严格遵守:
|
|
15
|
+
|
|
16
|
+
1. **主动检索 (Active Retrieval)**:
|
|
17
|
+
* 当用户指定 `{功能名称}` 时,优先尝试读取 `.docs/{功能名称}/TDD_{功能名称}.md`。
|
|
18
|
+
* 如果找不到 TDD 文档,**立即停止**并报错,提示用户先完成 TDD 设计。
|
|
19
|
+
|
|
20
|
+
2. **思维链门禁 (Chain of Thought Gatekeeping)**:
|
|
21
|
+
* 在输出任务列表前,**必须**先输出 `<thinking>` 块。
|
|
22
|
+
* **Check**: TDD 是否包含清晰的“接口列表”、“定时任务列表”、“事件订阅列表”?
|
|
23
|
+
* **Check**: 所有的入口点是否都有对应的“执行逻辑”描述?
|
|
24
|
+
* **Decision**: 若 TDD 内容严重缺失(如只有标题无逻辑),拒绝拆解,要求用户先完善 TDD。
|
|
25
|
+
|
|
26
|
+
3. **依赖分析 (Dependency Analysis)**:
|
|
27
|
+
* 在 `<thinking>` 块中,分析任务间的依赖关系(例如:退款任务依赖于支付查询接口)。
|
|
28
|
+
* 基于依赖关系生成合理的**开发顺序**,而不是简单的线性排列。
|
|
29
|
+
|
|
12
30
|
## 核心原则
|
|
13
31
|
1. **纵向拆解**:一个任务即一个完整的功能入口,包含其关联的枚举、 DTO、Service、Repository,gateway 等所有逻辑实现
|
|
14
32
|
2. **职责完备**:在执行某个任务时,AI 应根据需要自动创建或修改涉及的模型与逻辑,而不是拆分成多个任务
|
|
@@ -59,10 +77,19 @@ alwaysApply: false
|
|
|
59
77
|
|
|
60
78
|
### 2. 预计工时(小时)
|
|
61
79
|
- 预计:X 小时
|
|
62
|
-
-
|
|
80
|
+
- **评估基准 (Baseline)**:
|
|
81
|
+
- 简单 CRUD 接口:0.5 - 1h
|
|
82
|
+
- 带简单业务逻辑(校验/状态变更):1 - 2h
|
|
83
|
+
- 复杂逻辑(外部调用/并发锁/事务):3 - 5h
|
|
84
|
+
- 极高复杂度(核心金融链路):5h+
|
|
85
|
+
|
|
86
|
+
### 2.5 任务依赖与前置条件 (Dependencies)
|
|
87
|
+
- **前置任务**:[Task-001 / 无] (必须先完成的任务)
|
|
88
|
+
- **依赖模块**:[UserFacade / PaymentService] (需调用的外部依赖)
|
|
63
89
|
|
|
64
90
|
### 3. 业务规则与实现细节
|
|
65
91
|
- **核心逻辑**:基于 TDD 中的“执行逻辑”描述,详细说明 Service 层及领域层需处理的规则(如存在对应的可视化文档 `TDD_{功能名称}_Visual.md`,可作为辅助参考,但不得脱离 TDD 自行补充规则)。
|
|
92
|
+
- **核心技术决策**:回顾 TDD 中的关键决策(如幂等方案),再次确认落实。
|
|
66
93
|
- **状态流转**:若涉及状态变更,明确状态机逻辑。
|
|
67
94
|
- **数据结构**:涉及的 DTO、Command、Query 的定义要求。
|
|
68
95
|
- **异常处理**:需捕获并抛出的业务异常类型。
|
|
@@ -76,31 +103,31 @@ alwaysApply: false
|
|
|
76
103
|
- **规则文件**:[此处填入对应的 .md 规则路径]
|
|
77
104
|
- **编码公共规则文件**:`.cursor/rules/biz/code.md`和`.cursor/rules/biz/project-structure.md`
|
|
78
105
|
- **执行说明**:在执行本任务代码生成时,必须严格遵守该规则文件中的代码分层、命名及注释规范
|
|
79
|
-
- API接口必须识别是C端(小程序端)还是B端(PC端和APP端)
|
|
106
|
+
- **C/B 端标识**:API 接口必须识别是 C 端(小程序端)还是 B 端(PC 端和 APP 端)
|
|
80
107
|
|
|
81
108
|
### 6. 验收标准 (DoD)
|
|
82
109
|
- [ ] 对应的接口/订阅者/定时器已成功创建。
|
|
83
110
|
- [ ] 内部逻辑(Service/Repository)完整实现且符合业务预期。
|
|
84
|
-
- [ ]
|
|
111
|
+
- [ ] 幂等性与并发控制已按 TDD 要求实现。
|
|
112
|
+
- [ ] 满足规约文件中的所有强制性要求。
|
|
85
113
|
```
|
|
86
114
|
|
|
87
115
|
## 第三阶段:拆解执行步骤
|
|
88
|
-
1.
|
|
89
|
-
2.
|
|
90
|
-
3.
|
|
91
|
-
4.
|
|
92
|
-
5.
|
|
93
|
-
6.
|
|
94
|
-
-
|
|
95
|
-
- `.docs/{功能名称}/task/README.md`
|
|
116
|
+
1. **扫描入口点**:从 TDD 文档中提取所有“接口设计”、“事件设计”、“定时任务”和“后台任务”中的条目。
|
|
117
|
+
2. **合并依赖项**:将该入口点涉及的所有业务逻辑(Service)、数据访问(Repository)、模型定义(DTO/VO/Enum)全部归入该入口点的原子任务中。
|
|
118
|
+
3. **排序与编排**:基于`<thinking>`中的依赖分析,对任务进行逻辑排序(先基础后上层,先前置后依赖)。
|
|
119
|
+
4. **生成文件**:为每个识别出的入口点生成独立的任务 Markdown 文件。
|
|
120
|
+
5. **生成总览**:任务拆解完成后,必须在 `.docs/{功能名称}/task/README.md` 输出任务总览。
|
|
121
|
+
6. **状态维护(必须执行)**:后续每当完成一个任务,必须同步更新:
|
|
122
|
+
- 对应任务文件中的“任务状态”。
|
|
123
|
+
- `.docs/{功能名称}/task/README.md` 中该任务的状态展示。
|
|
96
124
|
|
|
97
125
|
## 输出要求
|
|
98
|
-
1.
|
|
99
|
-
2.
|
|
100
|
-
3.
|
|
101
|
-
4.
|
|
102
|
-
-
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
- 注意事项与相关文档链接(至少包含:TDD、API_def、如存在则包含 Visual 文档链接)
|
|
126
|
+
1. **格式**:Markdown 源码格式。
|
|
127
|
+
2. **一致性**:任务中的类名、方法名和字段名必须与 TDD 保持完全一致。
|
|
128
|
+
3. **禁用范围**:不拆解前端任务、不拆解单纯的单元测试任务、不拆解 Entity/SQL 任务。
|
|
129
|
+
4. **总览 README(必须输出)**:在 `.docs/{功能名称}/task/README.md` 生成任务总览文件,必须包含:
|
|
130
|
+
- **项目进度看板**:任务总工时、已完成工时、进度条。
|
|
131
|
+
- **任务清单**:按推荐执行顺序排列,包含状态图标 (✅/🔄/⏳)。
|
|
132
|
+
- **开发阶段划分**:建议将任务划分为 Phase 1 (Core), Phase 2 (Extensions) 等阶段。
|
|
133
|
+
- **验收标准汇总**:从各任务 DoD 汇总,形成整体 DoD。
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: C端用户体系规范
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# C端用户体系规范
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
本规范定义了系统中C端用户体系的设计标准,包括用户表结构、认证机制、身份类型、数据关联规范等。
|
|
11
|
+
|
|
12
|
+
**适用范围**:所有面向C端用户的门户应用,主要依赖微信小程序。
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 一、核心表结构
|
|
17
|
+
|
|
18
|
+
### 1.1 C端用户中心表(mdm_mycuser)
|
|
19
|
+
|
|
20
|
+
**表说明**:C端用户中心的核心表,存储所有C端用户的基础信息。
|
|
21
|
+
|
|
22
|
+
**使用场景**:
|
|
23
|
+
- 用户在小程序登录后会自动生成一条用户记录
|
|
24
|
+
- 存储用户基础信息和手机号
|
|
25
|
+
- 未认证用户的业务关联直接使用此表
|
|
26
|
+
|
|
27
|
+
**关键字段**:
|
|
28
|
+
- 用户ID(主键)
|
|
29
|
+
- 手机号:用户授权后的实名认证手机号
|
|
30
|
+
- 创建时间:用户首次登录时间
|
|
31
|
+
- 其他用户基础信息字段
|
|
32
|
+
|
|
33
|
+
**使用原则**:
|
|
34
|
+
- ✅ 查询所有C端用户(包括未认证用户)
|
|
35
|
+
- ✅ 未认证用户的业务数据关联
|
|
36
|
+
- ✅ 用户基础信息的存储和查询
|
|
37
|
+
- ❌ 不应直接在此表存储业务相关字段
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
### 1.2 门户用户表(nr_tocuser)
|
|
42
|
+
|
|
43
|
+
**表说明**:门户管理应用中的用户表,与 `mdm_mycuser` 一一对应(历史遗留原因)。
|
|
44
|
+
|
|
45
|
+
**使用场景**:
|
|
46
|
+
- 经过认证的用户业务关联
|
|
47
|
+
- 门户业务相关的用户扩展信息
|
|
48
|
+
- 用户身份信息的存储
|
|
49
|
+
|
|
50
|
+
**关键字段**:
|
|
51
|
+
- 用户ID(主键)
|
|
52
|
+
- 关联的 mdm_mycuser 用户ID(外键)
|
|
53
|
+
- 身份类型
|
|
54
|
+
- 认证状态
|
|
55
|
+
- 其他门户业务相关字段
|
|
56
|
+
|
|
57
|
+
**使用原则**:
|
|
58
|
+
- ✅ 已认证用户的业务数据关联(推荐使用此表)
|
|
59
|
+
- ✅ 门户业务相关的用户扩展信息
|
|
60
|
+
- ✅ 用户身份和权限相关的查询
|
|
61
|
+
- ❌ 不应用于未认证用户的关联
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### 1.3 表关系说明
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
┌─────────────────┐ 一对一关系 ┌─────────────────┐
|
|
69
|
+
│ mdm_mycuser │ ─────────────────────────> │ nr_tocuser │
|
|
70
|
+
│ (C端用户中心) │ │ (门户用户) │
|
|
71
|
+
└─────────────────┘ └─────────────────┘
|
|
72
|
+
↑ ↑
|
|
73
|
+
│ │
|
|
74
|
+
│ │
|
|
75
|
+
未认证用户关联 已认证用户关联
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**说明**:
|
|
79
|
+
1. 每个 `nr_tocuser` 记录对应一个 `mdm_mycuser` 记录
|
|
80
|
+
2. `mdm_mycuser` 记录不一定有对应的 `nr_tocuser` 记录(未认证用户)
|
|
81
|
+
3. 这是历史遗留的表结构设计,需要理解并正确使用
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 二、用户身份体系
|
|
86
|
+
|
|
87
|
+
### 2.1 身份类型
|
|
88
|
+
|
|
89
|
+
系统支持以下四种C端用户身份类型:
|
|
90
|
+
|
|
91
|
+
| 身份类型 | 认证状态 | 说明 | 使用场景 |
|
|
92
|
+
|---------|---------|------|---------|
|
|
93
|
+
| **游客** | 未认证 | 仅登录小程序,未进行手机号认证 | 浏览公开信息、查看基础内容 |
|
|
94
|
+
| **管理员** | 已认证 | 通过手机号认证,匹配为管理员身份 | 管理功能、审批操作 |
|
|
95
|
+
| **业务代理人** | 已认证 | 通过手机号认证,匹配为业务代理人身份 | 代理业务操作、客户服务 |
|
|
96
|
+
| **企业员工** | 已认证 | 通过手机号认证,匹配为企业员工身份 | 企业内部业务操作 |
|
|
97
|
+
|
|
98
|
+
### 2.2 身份识别流程
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
用户登录小程序
|
|
102
|
+
↓
|
|
103
|
+
创建 mdm_mycuser 记录
|
|
104
|
+
↓
|
|
105
|
+
授权手机号?
|
|
106
|
+
├─ 否 → 游客身份(只有 mdm_mycuser 记录)
|
|
107
|
+
└─ 是 → 手机号实名认证
|
|
108
|
+
↓
|
|
109
|
+
手机号匹配系统基础数据
|
|
110
|
+
↓
|
|
111
|
+
创建 nr_tocuser 记录
|
|
112
|
+
↓
|
|
113
|
+
分配对应身份(管理员/业务代理人/企业员工)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 2.3 认证机制
|
|
117
|
+
|
|
118
|
+
**认证方式**:
|
|
119
|
+
- 用户授权手机号
|
|
120
|
+
- 手机号与系统基础数据的客户进行匹配
|
|
121
|
+
- 匹配逻辑由认证服务统一处理(具体匹配规则由业务层定义)
|
|
122
|
+
|
|
123
|
+
**认证状态判断**:
|
|
124
|
+
```java
|
|
125
|
+
// 判断用户是否已认证
|
|
126
|
+
boolean isAuthenticated = nr_tocuser 记录存在;
|
|
127
|
+
|
|
128
|
+
// 判断用户身份类型
|
|
129
|
+
if (nr_tocuser.身份类型 == "管理员") {
|
|
130
|
+
// 管理员权限
|
|
131
|
+
} else if (nr_tocuser.身份类型 == "业务代理人") {
|
|
132
|
+
// 业务代理人权限
|
|
133
|
+
} else if (nr_tocuser.身份类型 == "企业员工") {
|
|
134
|
+
// 企业员工权限
|
|
135
|
+
} else {
|
|
136
|
+
// 游客权限(仅有 mdm_mycuser 记录)
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 三、数据关联规范
|
|
143
|
+
|
|
144
|
+
### 3.1 选择关联表的原则
|
|
145
|
+
|
|
146
|
+
根据用户的认证状态选择合适的表进行业务数据关联:
|
|
147
|
+
|
|
148
|
+
#### 规则一:已认证用户 → 使用 nr_tocuser
|
|
149
|
+
|
|
150
|
+
**适用场景**:
|
|
151
|
+
- 需要身份验证的业务操作
|
|
152
|
+
- 需要权限控制的功能
|
|
153
|
+
- 门户业务数据的用户关联
|
|
154
|
+
|
|
155
|
+
#### 规则二:未认证用户 → 使用 mdm_mycuser
|
|
156
|
+
|
|
157
|
+
**适用场景**:
|
|
158
|
+
- 游客可访问的功能
|
|
159
|
+
- 不需要身份验证的业务场景
|
|
160
|
+
- 用户行为追踪
|
|
161
|
+
|
|
162
|
+
#### 规则三:混合场景 → 同时支持两种关联
|
|
163
|
+
|
|
164
|
+
**适用场景**:
|
|
165
|
+
- 业务数据需要支持游客和已认证用户
|
|
166
|
+
- 用户从游客升级为认证用户后,数据需要保持连续性
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### 3.2 实体字段命名规范
|
|
171
|
+
|
|
172
|
+
**关联字段命名**:
|
|
173
|
+
|
|
174
|
+
| 关联表 | 字段名称 | 字段类型 | 说明 |
|
|
175
|
+
|-------|---------------|---------|------|
|
|
176
|
+
| `mdm_mycuser` | `cuserId` | UUID(唯一标识) | 关联C端用户中心用户ID |
|
|
177
|
+
| `mdm_mycuser` | `cuserName` | String(单行文本,长度128) | 冗余字段:用户名称 |
|
|
178
|
+
| `nr_tocuser` | `tocuserId` | UUID(唯一标识) | 关联门户用户ID |
|
|
179
|
+
| `nr_tocuser` | `tocuserName` | String(单行文本,长度128) | 冗余字段:用户名称 |
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 四、常见问题
|
|
184
|
+
|
|
185
|
+
### Q1: 什么时候使用 mdm_mycuser,什么时候使用 nr_tocuser?
|
|
186
|
+
|
|
187
|
+
**回答**:
|
|
188
|
+
- **mdm_mycuser**:
|
|
189
|
+
- 未认证用户(游客)的业务关联
|
|
190
|
+
- 需要追踪所有用户(包括游客)的场景
|
|
191
|
+
- 用户基础信息的存储
|
|
192
|
+
|
|
193
|
+
- **nr_tocuser**:
|
|
194
|
+
- 已认证用户的业务关联(推荐)
|
|
195
|
+
- 需要身份验证的业务场景
|
|
196
|
+
- 需要权限控制的功能
|
|
197
|
+
|
|
198
|
+
**判断标准**:看业务是否需要用户认证,需要认证就用 nr_tocuser,不需要认证就用 mdm_mycuser。
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
### Q2: 为什么有两个用户表?
|
|
203
|
+
|
|
204
|
+
**回答**:
|
|
205
|
+
这是历史遗留原因造成的设计。最初系统只有 `mdm_mycuser`(C端用户中心),后来门户系统独立发展,创建了 `nr_tocuser` 来存储门户业务相关的用户信息。虽然存在冗余,但两者有明确的职责划分:
|
|
206
|
+
- `mdm_mycuser`:用户中心的核心表,存储用户基础信息
|
|
207
|
+
- `nr_tocuser`:门户业务的扩展表,存储认证和身份信息
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
### Q5: C端用户的身份是如何匹配的?
|
|
211
|
+
|
|
212
|
+
**回答**:
|
|
213
|
+
用户通过手机号授权后,系统会执行以下匹配逻辑:
|
|
214
|
+
1. 获取用户授权的手机号
|
|
215
|
+
2. 将手机号与系统基础数据中的客户信息进行匹配
|
|
216
|
+
3. 根据匹配结果分配相应的身份类型(管理员/业务代理人/企业员工)
|
|
217
|
+
4. 创建 `nr_tocuser` 记录,存储身份信息
|
|
218
|
+
|
|
219
|
+
**注意**:具体的匹配规则由业务层定义,不同的业务系统可能有不同的匹配逻辑。本规范只说明匹配机制的存在,不涉及具体匹配规则的实现细节。
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 五、检查清单
|
|
224
|
+
|
|
225
|
+
在开发涉及C端用户的功能时,请确认:
|
|
226
|
+
|
|
227
|
+
- [ ] 明确业务场景是否需要用户认证
|
|
228
|
+
- [ ] 选择了正确的用户表进行关联(mdm_mycuser 或 nr_tocuser)
|
|
229
|
+
- [ ] 实体字段命名符合规范(cuserId / tocuserId)
|
|
230
|
+
- [ ] API 添加了正确的权限注解(@IdentityUserPermission())
|
|
231
|
+
- [ ] 添加了用户认证状态的判断逻辑
|
|
232
|
+
- [ ] 考虑了不同身份类型的权限差异
|
|
233
|
+
- [ ] 添加了必要的日志记录
|
|
234
|
+
- [ ] 处理了用户不存在或未认证的异常情况
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
**文档版本**:v1.0
|
|
238
|
+
**最后更新**:2026-02-05
|
|
239
|
+
**维护人**:开发团队
|
|
240
|
+
|
package/package.json
CHANGED
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 新功能架构设计标准操作流程 (New Feature Architecture SOP)
|
|
3
|
-
alwaysApply: false
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# 6A-new: 新功能架构设计标准操作流程 (New Feature Architecture SOP)
|
|
7
|
-
|
|
8
|
-
## 工作流概述
|
|
9
|
-
|
|
10
|
-
当触发 6A 工作流时,作为 Lead Engineer 和 Architect,需要按照以下步骤进行新功能的架构设计和技术设计文档(TDD)输出。
|
|
11
|
-
|
|
12
|
-
## 输入要求
|
|
13
|
-
|
|
14
|
-
- **必需输入**:PRD(产品需求文档)或功能需求描述
|
|
15
|
-
- **可选输入**:业务流程图、UI 原型、现有类似功能参考
|
|
16
|
-
|
|
17
|
-
## 设计流程
|
|
18
|
-
|
|
19
|
-
### 第一步:需求分析 (Requirement Analysis)
|
|
20
|
-
|
|
21
|
-
1. **理解业务需求**
|
|
22
|
-
- 明确功能目标和业务价值
|
|
23
|
-
- 识别核心业务流程
|
|
24
|
-
- 确定功能边界和范围
|
|
25
|
-
|
|
26
|
-
2. **识别影响范围**
|
|
27
|
-
- 确定涉及的业务模块(如合同、客户、租控、收缴等)
|
|
28
|
-
- 识别需要修改的现有功能
|
|
29
|
-
- 识别需要新增的模块或组件
|
|
30
|
-
|
|
31
|
-
3. **识别非功能性需求**
|
|
32
|
-
- 性能要求(响应时间、并发量)
|
|
33
|
-
- 数据量级(单次处理数据量、历史数据量)
|
|
34
|
-
- 安全要求(权限控制、数据加密)
|
|
35
|
-
- 可用性要求(容错、降级策略)
|
|
36
|
-
|
|
37
|
-
### 第二步:架构设计 (Architecture Design)
|
|
38
|
-
|
|
39
|
-
1. **模块划分**
|
|
40
|
-
- 根据项目结构规范,确定功能归属的业务模块
|
|
41
|
-
- 确定是否需要新建模块,或扩展现有模块
|
|
42
|
-
- 模块命名:`rental-{业务领域}`
|
|
43
|
-
|
|
44
|
-
2. **分层设计**
|
|
45
|
-
- **interfaces 层**:定义 Facade 接口
|
|
46
|
-
- 接口命名:`{功能名}Facade`
|
|
47
|
-
- 包路径:`com.mysoft.rental.{业务领域}.interfaces`
|
|
48
|
-
- **service 层**:实现业务逻辑
|
|
49
|
-
- 实现类命名:`{功能名}FacadeImpl` 或 `{功能名}Service`
|
|
50
|
-
- 包路径:`com.mysoft.rental.{业务领域}.service`
|
|
51
|
-
- **model 层**:定义数据模型
|
|
52
|
-
- DTO/Command/Query/VO/Entity
|
|
53
|
-
- 包路径:`com.mysoft.rental.{业务领域}.model.{类型}`
|
|
54
|
-
|
|
55
|
-
3. **数据模型设计**
|
|
56
|
-
- **DTO**:数据传输对象,用于接口层传输
|
|
57
|
-
- **Command**:命令对象,用于写操作
|
|
58
|
-
- **Query**:查询对象,用于读操作
|
|
59
|
-
- **VO**:视图对象,用于返回给前端
|
|
60
|
-
- **Entity**:实体对象,对应数据库表
|
|
61
|
-
|
|
62
|
-
4. **Repository 层设计**
|
|
63
|
-
- Repository 命名:`{实体名}Repository`
|
|
64
|
-
- DAO 命名:`{实体名}Dao`
|
|
65
|
-
- Entity 命名:`{实体名}Entity`
|
|
66
|
-
- 包路径:`com.mysoft.rental.{业务领域}.repository`
|
|
67
|
-
|
|
68
|
-
5. **Controller 层设计**
|
|
69
|
-
- Controller 命名:`{功能名}Controller`
|
|
70
|
-
- 包路径:按业务领域分类
|
|
71
|
-
- `controller.app`:应用端接口
|
|
72
|
-
- `controller.h5`:H5 端接口
|
|
73
|
-
- `controller.modeling.bizapi`:建模业务接口
|
|
74
|
-
- `controller.modeling.dataapi`:建模数据接口
|
|
75
|
-
- `controller.pub`:公共接口
|
|
76
|
-
|
|
77
|
-
### 第三步:接口设计 (API Design)
|
|
78
|
-
|
|
79
|
-
1. **接口定义**
|
|
80
|
-
- RESTful API 设计
|
|
81
|
-
- 接口路径规范:`/api/{版本}/{业务领域}/{功能}`
|
|
82
|
-
- HTTP 方法选择:GET(查询)、POST(创建/复杂查询)
|
|
83
|
-
|
|
84
|
-
2. **参数设计**
|
|
85
|
-
- 使用 `@RequestBody` + DTO/Command/Query
|
|
86
|
-
- 使用 `@Valid`/`@Validated` 进行参数校验
|
|
87
|
-
- 简单参数使用 `@RequestParam`
|
|
88
|
-
|
|
89
|
-
3. **返回值设计**
|
|
90
|
-
- 统一返回结构(如 `Result<T>`)
|
|
91
|
-
- 或直接返回 DTO/VO
|
|
92
|
-
|
|
93
|
-
4. **异常设计**
|
|
94
|
-
- 定义业务异常枚举:`BusinessExceptionCodeEnums`
|
|
95
|
-
- 异常码分段规则:
|
|
96
|
-
- 62:合同组
|
|
97
|
-
- 65:收缴组
|
|
98
|
-
- 75:运营组
|
|
99
|
-
- 91:基础数据组
|
|
100
|
-
- 异常码格式:`{组号}{业务域}{序号}`
|
|
101
|
-
|
|
102
|
-
### 第四步:数据库设计 (Database Design)
|
|
103
|
-
|
|
104
|
-
1. **表结构设计**
|
|
105
|
-
- 表命名规范:`{业务前缀}_{表名}`
|
|
106
|
-
- 字段命名:小写下划线分隔
|
|
107
|
-
- 必须字段:`id`(UUID)、`create_time`、`update_time`、`creator_id`、`updater_id`
|
|
108
|
-
|
|
109
|
-
2. **索引设计**
|
|
110
|
-
- 主键索引
|
|
111
|
-
- 业务查询索引
|
|
112
|
-
- 外键索引
|
|
113
|
-
|
|
114
|
-
3. **数据迁移**
|
|
115
|
-
- 确定是否需要数据库迁移脚本
|
|
116
|
-
- 脚本位置:`data/sql/{数据库类型}/updatesql/`
|
|
117
|
-
|
|
118
|
-
### 第五步:事件设计 (Event Design)
|
|
119
|
-
|
|
120
|
-
1. **事件发布**
|
|
121
|
-
- 识别需要发布业务事件的场景
|
|
122
|
-
- 事件命名:`{业务动作}{业务对象}Event`
|
|
123
|
-
- 包路径:`com.mysoft.rental.{业务领域}.model.event`
|
|
124
|
-
- 发布位置:`com.mysoft.rental.{业务领域}.service.event.publisher`
|
|
125
|
-
|
|
126
|
-
2. **事件订阅**
|
|
127
|
-
- 识别需要订阅的事件
|
|
128
|
-
- 订阅者命名:`{业务对象}{动作}Subscriber`
|
|
129
|
-
- 包路径:`com.mysoft.rental.{业务领域}.service.event.subscriber`
|
|
130
|
-
|
|
131
|
-
### 第六步:扩展点设计 (Extension Point Design)
|
|
132
|
-
|
|
133
|
-
1. **策略模式**
|
|
134
|
-
- 识别需要策略模式的场景
|
|
135
|
-
- 策略接口命名:`{业务}Strategy`
|
|
136
|
-
- 策略实现命名:`{具体策略}{业务}Strategy`
|
|
137
|
-
|
|
138
|
-
2. **工厂模式**
|
|
139
|
-
- 策略工厂命名:`{业务}Factory`
|
|
140
|
-
- 使用注解 `@Extension` 标识扩展点
|
|
141
|
-
|
|
142
|
-
### 第七步:技术选型 (Technology Selection)
|
|
143
|
-
|
|
144
|
-
1. **框架和库**
|
|
145
|
-
- Spring Boot(已确定)
|
|
146
|
-
- MyBatis Plus(数据访问)
|
|
147
|
-
- Lombok(代码简化)
|
|
148
|
-
|
|
149
|
-
2. **设计模式**
|
|
150
|
-
- Facade 模式(接口层)
|
|
151
|
-
- Strategy 模式(策略选择)
|
|
152
|
-
- Template 模式(模板方法)
|
|
153
|
-
- Factory 模式(对象创建)
|
|
154
|
-
|
|
155
|
-
### 第八步:非功能性设计 (Non-Functional Design)
|
|
156
|
-
|
|
157
|
-
1. **性能优化**
|
|
158
|
-
- 批量操作优化
|
|
159
|
-
- 缓存策略
|
|
160
|
-
- 数据库查询优化
|
|
161
|
-
|
|
162
|
-
2. **事务管理**
|
|
163
|
-
- 确定需要事务的方法
|
|
164
|
-
- 使用 `@Transactional` 注解
|
|
165
|
-
|
|
166
|
-
3. **权限控制**
|
|
167
|
-
- 接口权限注解
|
|
168
|
-
- 数据权限控制
|
|
169
|
-
|
|
170
|
-
4. **日志记录**
|
|
171
|
-
- 关键操作日志
|
|
172
|
-
- 异常日志记录
|
|
173
|
-
|
|
174
|
-
## TDD 文档模板
|
|
175
|
-
|
|
176
|
-
### 1. 功能概述
|
|
177
|
-
- 功能名称
|
|
178
|
-
- 功能描述
|
|
179
|
-
- 业务价值
|
|
180
|
-
|
|
181
|
-
### 2. 需求分析
|
|
182
|
-
- 功能需求
|
|
183
|
-
- 非功能性需求
|
|
184
|
-
- 约束条件
|
|
185
|
-
|
|
186
|
-
### 3. 架构设计
|
|
187
|
-
- 模块划分
|
|
188
|
-
- 分层设计
|
|
189
|
-
- 模块依赖关系图
|
|
190
|
-
|
|
191
|
-
### 4. 接口设计
|
|
192
|
-
- 接口列表
|
|
193
|
-
- 接口详细设计(请求/响应)
|
|
194
|
-
- 接口调用关系
|
|
195
|
-
|
|
196
|
-
### 5. 数据模型设计
|
|
197
|
-
- DTO/Command/Query/VO 设计
|
|
198
|
-
- Entity 设计
|
|
199
|
-
- 数据库表设计
|
|
200
|
-
|
|
201
|
-
### 6. 业务流程设计
|
|
202
|
-
- 核心业务流程
|
|
203
|
-
- 异常流程处理
|
|
204
|
-
- 状态流转图
|
|
205
|
-
|
|
206
|
-
### 7. 技术实现
|
|
207
|
-
- 关键技术点
|
|
208
|
-
- 设计模式应用
|
|
209
|
-
- 算法和数据结构
|
|
210
|
-
|
|
211
|
-
### 8. 非功能性设计
|
|
212
|
-
- 性能设计
|
|
213
|
-
- 安全设计
|
|
214
|
-
- 可扩展性设计
|
|
215
|
-
|
|
216
|
-
### 9. 测试策略
|
|
217
|
-
- 单元测试
|
|
218
|
-
- 集成测试
|
|
219
|
-
- 测试用例
|
|
220
|
-
|
|
221
|
-
### 10. 风险评估
|
|
222
|
-
- 技术风险
|
|
223
|
-
- 业务风险
|
|
224
|
-
- 应对措施
|
|
225
|
-
|
|
226
|
-
## 输出要求
|
|
227
|
-
|
|
228
|
-
1. **TDD 文档格式**:Markdown
|
|
229
|
-
2. **文档位置**:项目根目录或 `.docs/` 目录
|
|
230
|
-
3. **文档命名**:`TDD_{功能名称}.md`
|
|
231
|
-
4. **必须包含**:以上所有章节
|
|
232
|
-
5. **代码示例**:关键接口和类的伪代码或示例代码
|
|
233
|
-
|
|
234
|
-
## 注意事项
|
|
235
|
-
|
|
236
|
-
1. **严格遵循项目规范**
|
|
237
|
-
- 包结构规范
|
|
238
|
-
- 命名规范
|
|
239
|
-
- 代码风格规范
|
|
240
|
-
|
|
241
|
-
2. **考虑现有代码**
|
|
242
|
-
- 复用现有组件
|
|
243
|
-
- 保持架构一致性
|
|
244
|
-
- 避免重复设计
|
|
245
|
-
|
|
246
|
-
3. **可扩展性**
|
|
247
|
-
- 预留扩展点
|
|
248
|
-
- 考虑未来需求变化
|
|
249
|
-
- 保持接口稳定性
|
|
250
|
-
|
|
251
|
-
4. **文档完整性**
|
|
252
|
-
- 所有设计决策都要有说明
|
|
253
|
-
- 关键设计要有图表
|
|
254
|
-
- 提供足够的实现指导
|
|
255
|
-
|