docs(staff-enterprise-relation): 标记Task 1为已完成
This commit is contained in:
@@ -0,0 +1,949 @@
|
||||
# 员工实体关系添加员工名称字段实施计划
|
||||
|
||||
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
||||
|
||||
**目标:** 在员工实体关系列表和详情中添加员工名称字段,通过 LEFT JOIN 查询员工信息表获取姓名
|
||||
|
||||
**架构:** 使用 MyBatis 的 LEFT JOIN 在查询层关联 `ccdi_base_staff` 表,通过 `person_id = id_card` 关联获取员工姓名,不修改表结构
|
||||
|
||||
**技术栈:** Spring Boot 3, MyBatis Plus 3.5.10, Vue 2.6, Element UI 2.15
|
||||
|
||||
---
|
||||
|
||||
## 前置条件检查
|
||||
|
||||
### Task 1: 检查数据库索引
|
||||
|
||||
**文件:**
|
||||
- 数据库: `ccdi_base_staff` 表
|
||||
|
||||
**Step 1: 连接数据库并检查索引**
|
||||
|
||||
使用 MCP 连接数据库:
|
||||
```
|
||||
连接配置从 application.yml 读取
|
||||
```
|
||||
|
||||
**Step 2: 执行索引检查 SQL**
|
||||
|
||||
```sql
|
||||
SHOW INDEX FROM ccdi_base_staff WHERE Key_name = 'idx_id_card';
|
||||
```
|
||||
|
||||
预期: 如果索引存在,返回索引信息;如果不存在,返回空结果
|
||||
|
||||
**Step 3: 如果索引不存在,创建索引**
|
||||
|
||||
```sql
|
||||
CREATE INDEX idx_id_card ON ccdi_base_staff(id_card);
|
||||
```
|
||||
|
||||
预期: Query OK, 0 rows affected
|
||||
|
||||
**Step 4: 验证索引创建成功**
|
||||
|
||||
```sql
|
||||
SHOW INDEX FROM ccdi_base_staff WHERE Key_name = 'idx_id_card';
|
||||
```
|
||||
|
||||
预期: 返回新创建的索引信息
|
||||
|
||||
**Step 5: 记录结果**
|
||||
|
||||
如果索引已创建,在实施笔记中记录:
|
||||
```markdown
|
||||
- [x] 数据库索引已创建
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 后端实现
|
||||
|
||||
### Task 2: 修改 VO 类添加员工姓名字段
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java`
|
||||
|
||||
**Step 1: 在 personId 字段后添加 personName 字段**
|
||||
|
||||
在 `CcdiStaffEnterpriseRelationVO.java` 的第 30 行之后添加:
|
||||
|
||||
```java
|
||||
/** 身份证号 */
|
||||
@Schema(description = "身份证号")
|
||||
private String personId;
|
||||
|
||||
/** 员工姓名 */
|
||||
@Schema(description = "员工姓名")
|
||||
private String personName;
|
||||
|
||||
/** 关联人在企业的职务 */
|
||||
@Schema(description = "关联人在企业的职务")
|
||||
private String relationPersonPost;
|
||||
```
|
||||
|
||||
**Step 2: 保存文件**
|
||||
|
||||
**Step 3: 提交更改**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiStaffEnterpriseRelationVO.java
|
||||
git commit -m "feat(staff-enterprise-relation): 添加员工姓名字段到VO"
|
||||
```
|
||||
|
||||
预期: Commit 成功
|
||||
|
||||
---
|
||||
|
||||
### Task 3: 修改 Mapper XML - 列表查询
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml`
|
||||
|
||||
**Step 1: 找到列表查询的 SQL**
|
||||
|
||||
查找 `selectRelationList` 或类似的列表查询方法
|
||||
|
||||
**Step 2: 修改 SELECT 子句,添加员工姓名**
|
||||
|
||||
将原来的:
|
||||
```xml
|
||||
SELECT ser.id, ser.person_id, ser.relation_person_post, ...
|
||||
```
|
||||
|
||||
修改为:
|
||||
```xml
|
||||
SELECT
|
||||
ser.id,
|
||||
ser.person_id,
|
||||
bs.name AS person_name,
|
||||
ser.relation_person_post,
|
||||
ser.social_credit_code,
|
||||
ser.enterprise_name,
|
||||
ser.status,
|
||||
ser.remark,
|
||||
ser.data_source,
|
||||
ser.is_employee,
|
||||
ser.is_emp_family,
|
||||
ser.is_customer,
|
||||
ser.is_cust_family,
|
||||
ser.create_time,
|
||||
ser.update_time,
|
||||
ser.created_by,
|
||||
ser.updated_by
|
||||
```
|
||||
|
||||
**Step 3: 修改 FROM 子句,添加 LEFT JOIN**
|
||||
|
||||
将原来的:
|
||||
```xml
|
||||
FROM ccdi_staff_enterprise_relation ser
|
||||
```
|
||||
|
||||
修改为:
|
||||
```xml
|
||||
FROM ccdi_staff_enterprise_relation ser
|
||||
LEFT JOIN ccdi_base_staff bs ON ser.person_id = bs.id_card
|
||||
```
|
||||
|
||||
**Step 4: 保存文件**
|
||||
|
||||
**Step 5: 提交更改**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml
|
||||
git commit -m "feat(staff-enterprise-relation): 列表查询添加员工姓名JOIN"
|
||||
```
|
||||
|
||||
预期: Commit 成功
|
||||
|
||||
---
|
||||
|
||||
### Task 4: 修改 Mapper XML - 详情查询
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml`
|
||||
|
||||
**Step 1: 找到详情查询的 SQL**
|
||||
|
||||
查找 `selectRelationById` 或类似的详情查询方法
|
||||
|
||||
**Step 2: 应用与列表查询相同的修改**
|
||||
|
||||
1. 在 SELECT 子句中添加 `bs.name AS person_name`
|
||||
2. 在 FROM 子句中添加 `LEFT JOIN ccdi_base_staff bs ON ser.person_id = bs.id_card`
|
||||
|
||||
完整的查询应该类似:
|
||||
```xml
|
||||
SELECT
|
||||
ser.id,
|
||||
ser.person_id,
|
||||
bs.name AS person_name,
|
||||
ser.relation_person_post,
|
||||
ser.social_credit_code,
|
||||
ser.enterprise_name,
|
||||
ser.status,
|
||||
ser.remark,
|
||||
ser.data_source,
|
||||
ser.is_employee,
|
||||
ser.is_emp_family,
|
||||
ser.is_customer,
|
||||
ser.is_cust_family,
|
||||
ser.create_time,
|
||||
ser.update_time,
|
||||
ser.created_by,
|
||||
ser.updated_by
|
||||
FROM ccdi_staff_enterprise_relation ser
|
||||
LEFT JOIN ccdi_base_staff bs ON ser.person_id = bs.id_card
|
||||
WHERE ser.id = #{id}
|
||||
```
|
||||
|
||||
**Step 3: 保存文件**
|
||||
|
||||
**Step 4: 提交更改**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiStaffEnterpriseRelationMapper.xml
|
||||
git commit -m "feat(staff-enterprise-relation): 详情查询添加员工姓名JOIN"
|
||||
```
|
||||
|
||||
预期: Commit 成功
|
||||
|
||||
---
|
||||
|
||||
### Task 5: 编写接口测试脚本
|
||||
|
||||
**文件:**
|
||||
- Create: `doc/test_staff_enterprise_relation_person_name.bat`
|
||||
|
||||
**Step 1: 创建测试脚本**
|
||||
|
||||
创建测试脚本验证接口返回 `personName` 字段:
|
||||
|
||||
```bash
|
||||
@echo off
|
||||
chcp 65001 > nul
|
||||
echo ========================================
|
||||
echo 员工实体关系员工姓名字段测试
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
REM 获取 token
|
||||
echo [1/5] 获取登录 token...
|
||||
curl -s -X POST "http://localhost:8080/login/test" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"username\":\"admin\",\"password\":\"admin123\"}" \
|
||||
> token_response.json
|
||||
|
||||
for /f "tokens=2 delims=:\"" %%a in ('findstr "\"token\"" token_response.json') do set TOKEN=%%a
|
||||
echo Token: %TOKEN%
|
||||
echo.
|
||||
|
||||
REM 测试列表接口
|
||||
echo [2/5] 测试列表接口...
|
||||
curl -s -X GET "http://localhost:8080/ccdi/staffEnterpriseRelation/list?pageNum=1&pageSize=10" \
|
||||
-H "Authorization: Bearer %TOKEN%" \
|
||||
> list_response.json
|
||||
|
||||
echo 检查 personName 字段是否在响应中...
|
||||
findstr /C:"personName" list_response.json > nul
|
||||
if %errorlevel% equ 0 (
|
||||
echo [SUCCESS] 列表接口包含 personName 字段
|
||||
) else (
|
||||
echo [FAIL] 列表接口缺少 personName 字段
|
||||
type list_response.json
|
||||
)
|
||||
echo.
|
||||
|
||||
REM 测试详情接口
|
||||
echo [3/5] 获取第一条记录的 ID...
|
||||
for /f "tokens=2 delims=:\" %%a in ('findstr /C:"\"id\":" list_response.json ^| findstr /N "." ^| findstr "^1:"') do (
|
||||
set FIRST_LINE=%%a
|
||||
)
|
||||
REM 这里需要手动解析,暂时使用固定 ID 进行测试
|
||||
echo 注意: 请手动查看 list_response.json 中的有效 ID
|
||||
echo.
|
||||
|
||||
REM 使用示例 ID 测试详情接口
|
||||
echo [4/5] 测试详情接口 (ID: 1)...
|
||||
curl -s -X GET "http://localhost:8080/ccdi/staffEnterpriseRelation/1" \
|
||||
-H "Authorization: Bearer %TOKEN%" \
|
||||
> detail_response.json
|
||||
|
||||
echo 检查 personName 字段是否在响应中...
|
||||
findstr /C:"personName" detail_response.json > nul
|
||||
if %errorlevel% equ 0 (
|
||||
echo [SUCCESS] 详情接口包含 personName 字段
|
||||
) else (
|
||||
echo [FAIL] 详情接口缺少 personName 字段
|
||||
type detail_response.json
|
||||
)
|
||||
echo.
|
||||
|
||||
REM 查看响应内容
|
||||
echo [5/5] 查看列表响应内容...
|
||||
type list_response.json
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 测试完成
|
||||
echo ========================================
|
||||
|
||||
pause
|
||||
```
|
||||
|
||||
**Step 2: 保存文件**
|
||||
|
||||
**Step 3: 提交测试脚本**
|
||||
|
||||
```bash
|
||||
git add doc/test_staff_enterprise_relation_person_name.bat
|
||||
git commit -m "test(staff-enterprise-relation): 添加员工姓名字段测试脚本"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 6: 后端编译验证
|
||||
|
||||
**文件:**
|
||||
- Build: Maven project
|
||||
|
||||
**Step 1: 清理并编译项目**
|
||||
|
||||
```bash
|
||||
cd ruoyi-admin
|
||||
mvn clean compile
|
||||
```
|
||||
|
||||
预期: BUILD SUCCESS
|
||||
|
||||
**Step 2: 检查编译错误**
|
||||
|
||||
如果有编译错误,检查:
|
||||
1. VO 类语法是否正确
|
||||
2. Mapper XML 语法是否正确
|
||||
3. 是否有依赖问题
|
||||
|
||||
**Step 3: 如果编译成功,记录日志**
|
||||
|
||||
在实施笔记中记录:
|
||||
```markdown
|
||||
- [x] 后端编译成功
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 前端实现
|
||||
|
||||
### Task 7: 修改列表页面添加员工姓名列
|
||||
|
||||
**文件:**
|
||||
- Modify: `ruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue`
|
||||
|
||||
**Step 1: 找到表格列定义部分**
|
||||
|
||||
查找 `<el-table>` 组件中的列定义
|
||||
|
||||
**Step 2: 在身份证号列后添加员工姓名列**
|
||||
|
||||
在 `personId` 列之后添加:
|
||||
|
||||
```vue
|
||||
<el-table-column label="身份证号" align="center" prop="personId" width="180" />
|
||||
<el-table-column label="员工姓名" align="center" prop="personName" width="100" />
|
||||
<el-table-column label="职务" align="center" prop="relationPersonPost" width="120" />
|
||||
```
|
||||
|
||||
**Step 3: 如果有搜索表单,也可以添加员工姓名搜索**
|
||||
|
||||
在搜索表单中添加:
|
||||
|
||||
```vue
|
||||
<el-form-item label="员工姓名" prop="personName">
|
||||
<el-input
|
||||
v-model="queryParams.personName"
|
||||
placeholder="请输入员工姓名"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
```
|
||||
|
||||
注意: 如果添加搜索功能,需要同步修改后端的 Mapper XML 查询条件
|
||||
|
||||
**Step 4: 保存文件**
|
||||
|
||||
**Step 5: 提交更改**
|
||||
|
||||
```bash
|
||||
git add ruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue
|
||||
git commit -m "feat(staff-enterprise-relation): 列表页面添加员工姓名列"
|
||||
```
|
||||
|
||||
预期: Commit 成功
|
||||
|
||||
---
|
||||
|
||||
### Task 8: 前端编译验证
|
||||
|
||||
**文件:**
|
||||
- Build: Vue project
|
||||
|
||||
**Step 1: 进入前端目录**
|
||||
|
||||
```bash
|
||||
cd ruoyi-ui
|
||||
```
|
||||
|
||||
**Step 2: 安装依赖(如果需要)**
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
**Step 3: 开发模式启动**
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
预期: 编译成功,服务启动在端口 80
|
||||
|
||||
**Step 4: 检查编译错误**
|
||||
|
||||
如果有编译错误,检查:
|
||||
1. Vue 组件语法是否正确
|
||||
2. 是否有依赖问题
|
||||
|
||||
**Step 5: 停止开发服务器**
|
||||
|
||||
按 `Ctrl+C` 停止
|
||||
|
||||
**Step 6: 记录日志**
|
||||
|
||||
在实施笔记中记录:
|
||||
```markdown
|
||||
- [x] 前端编译成功
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 测试阶段
|
||||
|
||||
### Task 9: 后端集成测试
|
||||
|
||||
**文件:**
|
||||
- Test: 使用 MCP 或测试脚本
|
||||
|
||||
**Step 1: 启动后端服务**
|
||||
|
||||
```bash
|
||||
cd ruoyi-admin
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
预期: 服务启动成功,监听端口 8080
|
||||
|
||||
**Step 2: 运行测试脚本**
|
||||
|
||||
```bash
|
||||
doc\test_staff_enterprise_relation_person_name.bat
|
||||
```
|
||||
|
||||
**Step 3: 验证测试结果**
|
||||
|
||||
检查:
|
||||
1. 列表接口是否返回 `personName` 字段
|
||||
2. 详情接口是否返回 `personName` 字段
|
||||
3. 员工信息存在时,姓名是否正确显示
|
||||
4. 员工信息不存在时,字段是否为 null
|
||||
|
||||
**Step 4: 记录测试结果**
|
||||
|
||||
在实施笔记中记录:
|
||||
```markdown
|
||||
- [x] 后端接口测试通过
|
||||
- [ ] personName 字段正确返回
|
||||
- [ ] 员工信息存在时姓名正确
|
||||
- [ ] 员工信息不存在时为 null
|
||||
```
|
||||
|
||||
**Step 5: 停止后端服务**
|
||||
|
||||
按 `Ctrl+C` 停止
|
||||
|
||||
---
|
||||
|
||||
### Task 10: 前端集成测试
|
||||
|
||||
**文件:**
|
||||
- Test: 浏览器手动测试
|
||||
|
||||
**Step 1: 启动后端服务**
|
||||
|
||||
```bash
|
||||
cd ruoyi-admin
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
**Step 2: 启动前端服务**
|
||||
|
||||
新开终端:
|
||||
```bash
|
||||
cd ruoyi-ui
|
||||
npm run dev
|
||||
```
|
||||
|
||||
**Step 3: 浏览器访问测试**
|
||||
|
||||
访问: `http://localhost`
|
||||
|
||||
**Step 4: 登录系统**
|
||||
|
||||
用户名: `admin`
|
||||
密码: `admin123`
|
||||
|
||||
**Step 5: 导航到员工实体关系页面**
|
||||
|
||||
系统管理 > 员工实体关系
|
||||
|
||||
**Step 6: 验证列表显示**
|
||||
|
||||
检查:
|
||||
1. 列表中是否显示"员工姓名"列
|
||||
2. 员工姓名是否正确显示
|
||||
3. 无员工信息时,是否显示为空
|
||||
|
||||
**Step 7: 测试详情查看**
|
||||
|
||||
点击某条记录的"查看"按钮,验证详情对话框中是否显示员工姓名
|
||||
|
||||
**Step 8: 测试分页和搜索**
|
||||
|
||||
1. 切换分页,验证员工姓名持续显示
|
||||
2. 使用身份证号搜索,验证结果正确
|
||||
3. 如果实现了姓名搜索,测试姓名搜索功能
|
||||
|
||||
**Step 9: 记录测试结果**
|
||||
|
||||
在实施笔记中记录:
|
||||
```markdown
|
||||
- [x] 前端页面测试通过
|
||||
- [ ] 员工姓名列正确显示
|
||||
- [ ] 空值正确显示
|
||||
- [ ] 分页正常
|
||||
- [ ] 搜索功能正常
|
||||
```
|
||||
|
||||
**Step 10: 停止服务**
|
||||
|
||||
按 `Ctrl+C` 停止前后端服务
|
||||
|
||||
---
|
||||
|
||||
### Task 11: 性能测试
|
||||
|
||||
**文件:**
|
||||
- Test: 性能验证
|
||||
|
||||
**Step 1: 准备测试数据**
|
||||
|
||||
确保数据库中有足够多的测试数据(至少 1000 条)
|
||||
|
||||
**Step 2: 启动后端服务**
|
||||
|
||||
```bash
|
||||
cd ruoyi-admin
|
||||
mvn spring-boot:run
|
||||
```
|
||||
|
||||
**Step 3: 测试分页查询性能**
|
||||
|
||||
使用测试脚本或浏览器开发者工具,测量:
|
||||
- 第一页查询响应时间
|
||||
- 中间页查询响应时间
|
||||
- 最后一页查询响应时间
|
||||
|
||||
**Step 4: 对比性能数据**
|
||||
|
||||
与修改前的性能对比,验证:
|
||||
- 响应时间增加是否在可接受范围内(< 100ms)
|
||||
- 如果性能下降明显,考虑优化索引
|
||||
|
||||
**Step 5: 记录性能测试结果**
|
||||
|
||||
在实施笔记中记录:
|
||||
```markdown
|
||||
- [x] 性能测试完成
|
||||
- [ ] 平均响应时间: ___ ms
|
||||
- [ ] 性能是否可接受: 是/否
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 12: 边界情况测试
|
||||
|
||||
**文件:**
|
||||
- Test: 边界场景验证
|
||||
|
||||
**测试场景 1: personId 为空**
|
||||
|
||||
**Step 1:** 在数据库中插入一条 `person_id` 为 NULL 的记录
|
||||
|
||||
**Step 2:** 在列表中查看该记录
|
||||
|
||||
预期: 记录正常显示,员工姓名为空
|
||||
|
||||
**测试场景 2: personId 在员工信息表中不存在**
|
||||
|
||||
**Step 1:** 在数据库中插入一条 `person_id` 为不存在身份证号的记录
|
||||
|
||||
**Step 2:** 在列表中查看该记录
|
||||
|
||||
预期: 记录正常显示,员工姓名为空
|
||||
|
||||
**测试场景 3: 员工姓名包含特殊字符**
|
||||
|
||||
**Step 1:** 确保员工信息表中有姓名包含特殊字符的记录(如 "张三·李四")
|
||||
|
||||
**Step 2:** 在列表中查看该记录
|
||||
|
||||
预期: 员工姓名正确显示,特殊字符无乱码
|
||||
|
||||
**测试场景 4: 大量数据查询**
|
||||
|
||||
**Step 1:** 测试查询 100 条记录/页
|
||||
|
||||
**Step 2:** 测试查询 500 条记录/页
|
||||
|
||||
预期: 所有记录的员工姓名都正确显示,无性能问题
|
||||
|
||||
**Step 3: 记录边界测试结果**
|
||||
|
||||
在实施笔记中记录:
|
||||
```markdown
|
||||
- [x] 边界测试完成
|
||||
- [ ] personId 为空: 通过/失败
|
||||
- [ ] personId 不存在: 通过/失败
|
||||
- [ ] 特殊字符: 通过/失败
|
||||
- [ ] 大量数据: 通过/失败
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 文档更新
|
||||
|
||||
### Task 13: 更新 API 文档
|
||||
|
||||
**文件:**
|
||||
- Modify: `doc/api-docs/api/` 下的相关文档
|
||||
|
||||
**Step 1: 查找现有的 API 文档**
|
||||
|
||||
找到员工实体关系相关的 API 文档
|
||||
|
||||
**Step 2: 在响应参数中添加 personName 字段**
|
||||
|
||||
在列表接口和详情接口的响应参数中添加:
|
||||
|
||||
```markdown
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| personId | String | 身份证号 |
|
||||
| personName | String | 员工姓名(通过关联查询获取) |
|
||||
| relationPersonPost | String | 关联人在企业的职务 |
|
||||
```
|
||||
|
||||
**Step 3: 添加说明**
|
||||
|
||||
在文档中添加说明:
|
||||
```markdown
|
||||
**注意:**
|
||||
- personName 字段通过 LEFT JOIN ccdi_base_staff 表获取
|
||||
- 如果 personId 在员工信息表中不存在,personName 为 null
|
||||
```
|
||||
|
||||
**Step 4: 保存并提交**
|
||||
|
||||
```bash
|
||||
git add doc/api-docs/
|
||||
git commit -m "docs(staff-enterprise-relation): 更新API文档,添加员工姓名字段说明"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 14: 更新数据库设计文档
|
||||
|
||||
**文件:**
|
||||
- Modify: `doc/database-docs/` 下的相关文档
|
||||
|
||||
**Step 1: 更新视图说明**
|
||||
|
||||
在 `ccdi_staff_enterprise_relation` 表的说明中添加:
|
||||
|
||||
```markdown
|
||||
## 关联查询
|
||||
|
||||
该表在查询时会关联 `ccdi_base_staff` 表获取员工姓名:
|
||||
|
||||
- 关联字段: ccdi_staff_enterprise_relation.person_id = ccdi_base_staff.id_card
|
||||
- 获取字段: ccdi_base_staff.name AS person_name
|
||||
- 关联方式: LEFT JOIN(确保即使员工信息不存在也能返回关系记录)
|
||||
```
|
||||
|
||||
**Step 2: 保存并提交**
|
||||
|
||||
```bash
|
||||
git add doc/database-docs/
|
||||
git commit -m "docs(staff-enterprise-relation): 更新数据库设计文档,添加关联查询说明"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Task 15: 生成测试报告
|
||||
|
||||
**文件:**
|
||||
- Create: `doc/test-reports/2026-02-11-staff-enterprise-relation-person-name-test-report.md`
|
||||
|
||||
**Step 1: 创建测试报告**
|
||||
|
||||
```markdown
|
||||
# 员工实体关系员工姓名字段测试报告
|
||||
|
||||
**测试日期:** 2026-02-11
|
||||
**测试人员:** [测试人员姓名]
|
||||
**测试环境:** 开发环境
|
||||
|
||||
## 1. 功能测试
|
||||
|
||||
### 1.1 列表接口测试
|
||||
|
||||
| 测试项 | 测试场景 | 预期结果 | 实际结果 | 状态 |
|
||||
|--------|----------|----------|----------|------|
|
||||
| personName 字段返回 | 调用列表接口 | 响应包含 personName 字段 | | PASS/FAIL |
|
||||
| 员工信息存在 | personId 在员工表中存在 | 返回正确员工姓名 | | PASS/FAIL |
|
||||
| 员工信息不存在 | personId 在员工表中不存在 | personName 为 null | | PASS/FAIL |
|
||||
|
||||
### 1.2 详情接口测试
|
||||
|
||||
| 测试项 | 测试场景 | 预期结果 | 实际结果 | 状态 |
|
||||
|--------|----------|----------|----------|------|
|
||||
| personName 字段返回 | 调用详情接口 | 响应包含 personName 字段 | | PASS/FAIL |
|
||||
| 员工信息存在 | personId 在员工表中存在 | 返回正确员工姓名 | | PASS/FAIL |
|
||||
| 员工信息不存在 | personId 在员工表中不存在 | personName 为 null | | PASS/FAIL |
|
||||
|
||||
### 1.3 前端页面测试
|
||||
|
||||
| 测试项 | 测试场景 | 预期结果 | 实际结果 | 状态 |
|
||||
|--------|----------|----------|----------|------|
|
||||
| 员工姓名列显示 | 列表页面 | 显示"员工姓名"列 | | PASS/FAIL |
|
||||
| 空值显示 | 员工信息不存在 | 显示为空 | | PASS/FAIL |
|
||||
| 分页功能 | 切换页面 | 员工姓名持续显示 | | PASS/FAIL |
|
||||
|
||||
## 2. 性能测试
|
||||
|
||||
| 测试项 | 测试场景 | 预期结果 | 实际结果 | 状态 |
|
||||
|--------|----------|----------|----------|------|
|
||||
| 响应时间 | 1000 条数据查询 | < 100ms | ___ ms | PASS/FAIL |
|
||||
| 大数据量 | 100 条/页 | 正常显示 | | PASS/FAIL |
|
||||
|
||||
## 3. 边界测试
|
||||
|
||||
| 测试项 | 测试场景 | 预期结果 | 实际结果 | 状态 |
|
||||
|--------|----------|----------|----------|------|
|
||||
| personId 为空 | person_id = NULL | 正常显示,姓名为空 | | PASS/FAIL |
|
||||
| 特殊字符 | 姓名含特殊字符 | 正确显示无乱码 | | PASS/FAIL |
|
||||
|
||||
## 4. 测试结论
|
||||
|
||||
### 4.1 通过的功能
|
||||
- [ ] 列表接口返回 personName 字段
|
||||
- [ ] 详情接口返回 personName 字段
|
||||
- [ ] 前端正确显示员工姓名
|
||||
- [ ] 空值正确处理
|
||||
- [ ] 性能满足要求
|
||||
|
||||
### 4.2 发现的问题
|
||||
[记录测试中发现的问题]
|
||||
|
||||
### 4.3 建议
|
||||
[记录优化建议]
|
||||
|
||||
### 4.4 总体评价
|
||||
- 通过率: ___%
|
||||
- 风险等级: 高/中/低
|
||||
- 上线建议: 建议/不建议
|
||||
```
|
||||
|
||||
**Step 2: 填写测试结果**
|
||||
|
||||
根据实际测试结果填写报告
|
||||
|
||||
**Step 3: 保存并提交**
|
||||
|
||||
```bash
|
||||
git add doc/test-reports/2026-02-11-staff-enterprise-relation-person-name-test-report.md
|
||||
git commit -m "test(staff-enterprise-relation): 添加员工姓名字段测试报告"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 代码审查
|
||||
|
||||
### Task 16: 自我代码审查
|
||||
|
||||
**文件:**
|
||||
- Review: 所有修改的文件
|
||||
|
||||
**Step 1: 检查 VO 类**
|
||||
|
||||
检查项:
|
||||
- [ ] 字段命名符合规范(驼峰命名)
|
||||
- [ ] 有正确的 Swagger 注解
|
||||
- [ ] 字段类型正确(String)
|
||||
- [ ] 实现了 Serializable 接口
|
||||
|
||||
**Step 2: 检查 Mapper XML**
|
||||
|
||||
检查项:
|
||||
- [ ] SQL 语法正确
|
||||
- [ ] LEFT JOIN 条件正确
|
||||
- [ ] 字段别名正确(person_name)
|
||||
- [ ] WHERE 条件不受影响
|
||||
- [ ] 没有语法错误
|
||||
|
||||
**Step 3: 检查前端代码**
|
||||
|
||||
检查项:
|
||||
- [ ] 列定义位置合理
|
||||
- [ ] prop 名称与后端一致
|
||||
- [ ] 列宽设置合理
|
||||
- [ ] 没有 Vue 语法错误
|
||||
|
||||
**Step 4: 检查测试覆盖**
|
||||
|
||||
检查项:
|
||||
- [ ] 接口测试覆盖列表和详情
|
||||
- [ ] 前端测试覆盖显示和交互
|
||||
- [ ] 边界测试覆盖异常场景
|
||||
- [ ] 性能测试覆盖大数据量
|
||||
|
||||
**Step 5: 使用 code-reviewer 技能**
|
||||
|
||||
如果所有检查通过,调用 code-reviewer 技能进行正式审查:
|
||||
|
||||
```
|
||||
/superpowers:requesting-code-review
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 最终提交和合并
|
||||
|
||||
### Task 17: 整合提交
|
||||
|
||||
**文件:**
|
||||
- Git: Feature branch
|
||||
|
||||
**Step 1: 查看所有提交**
|
||||
|
||||
```bash
|
||||
git log --oneline
|
||||
```
|
||||
|
||||
确认所有任务都已提交
|
||||
|
||||
**Step 2: 确保分支是最新的**
|
||||
|
||||
```bash
|
||||
git fetch origin
|
||||
git rebase origin/dev_1
|
||||
```
|
||||
|
||||
**Step 3: 推送到远程**
|
||||
|
||||
```bash
|
||||
git push origin HEAD:feat/staff-enterprise-relation-person-name
|
||||
```
|
||||
|
||||
**Step 4: 创建 Pull Request**
|
||||
|
||||
使用 gh 命令创建 PR:
|
||||
|
||||
```bash
|
||||
gh pr create \
|
||||
--title "feat: 员工实体关系添加员工姓名字段" \
|
||||
--body "## 功能说明
|
||||
在员工实体关系列表和详情中添加员工姓名字段,通过 LEFT JOIN 查询员工信息表获取。
|
||||
|
||||
## 实施方案
|
||||
- 修改 CcdiStaffEnterpriseRelationVO,添加 personName 字段
|
||||
- 修改 Mapper XML,添加 LEFT JOIN ccdi_base_staff
|
||||
- 修改前端列表页,添加员工姓名列
|
||||
- 不修改数据库表结构,通过关联查询获取
|
||||
|
||||
## 测试情况
|
||||
- [x] 单元测试通过
|
||||
- [x] 接口测试通过
|
||||
- [x] 前端测试通过
|
||||
- [x] 边界测试通过
|
||||
- [x] 性能测试通过
|
||||
|
||||
## 相关文档
|
||||
- 设计文档: doc/plans/2026-02-11-staff-enterprise-relation-person-name-design.md
|
||||
- 实施计划: doc/plans/2026-02-11-staff-enterprise-relation-person-name-implementation.md
|
||||
- 测试报告: doc/test-reports/2026-02-11-staff-enterprise-relation-person-name-test-report.md
|
||||
" \
|
||||
--base dev_1
|
||||
```
|
||||
|
||||
**Step 6: 请求代码审查**
|
||||
|
||||
通知团队成员进行代码审查
|
||||
|
||||
---
|
||||
|
||||
## 任务清单总结
|
||||
|
||||
在开始实施前,确认以下任务清单:
|
||||
|
||||
- [x] Task 1: 检查数据库索引
|
||||
- [ ] Task 2: 修改 VO 类
|
||||
- [ ] Task 3: 修改 Mapper XML - 列表查询
|
||||
- [ ] Task 4: 修改 Mapper XML - 详情查询
|
||||
- [ ] Task 5: 编写接口测试脚本
|
||||
- [ ] Task 6: 后端编译验证
|
||||
- [ ] Task 7: 修改列表页面
|
||||
- [ ] Task 8: 前端编译验证
|
||||
- [ ] Task 9: 后端集成测试
|
||||
- [ ] Task 10: 前端集成测试
|
||||
- [ ] Task 11: 性能测试
|
||||
- [ ] Task 12: 边界情况测试
|
||||
- [ ] Task 13: 更新 API 文档
|
||||
- [ ] Task 14: 更新数据库设计文档
|
||||
- [ ] Task 15: 生成测试报告
|
||||
- [ ] Task 16: 自我代码审查
|
||||
- [ ] Task 17: 整合提交和 PR
|
||||
|
||||
**预计总时间:** 2-3 小时
|
||||
|
||||
**技术风险:** 低
|
||||
|
||||
**数据风险:** 无(仅查询改动,不影响数据写入)
|
||||
|
||||
---
|
||||
|
||||
## 实施笔记
|
||||
|
||||
在实施过程中记录遇到的问题和解决方案:
|
||||
|
||||
```markdown
|
||||
## 问题记录
|
||||
|
||||
### 问题 1: [描述问题]
|
||||
**时间:** [时间]
|
||||
**现象:** [问题现象]
|
||||
**原因:** [问题原因]
|
||||
**解决:** [解决方案]
|
||||
|
||||
### 问题 2: ...
|
||||
```
|
||||
Reference in New Issue
Block a user