# 修改加班系数接口测试说明 **接口地址**:`PUT /api/Extend/LqXhHyhk/{id}/overtime-coefficient` **创建日期**:2025年1月 **文档目的**:说明如何测试修改加班系数接口 --- ## 一、接口说明 ### 1.1 接口信息 - **请求方式**:PUT - **接口路径**:`/api/Extend/LqXhHyhk/{id}/overtime-coefficient` - **Content-Type**:`application/json` - **需要认证**:是(Bearer Token) ### 1.2 请求参数 **路径参数**: - `id`:消耗单编号(string) **请求体**: ```json { "overtimeCoefficient": 0.5 } ``` **参数说明**: - `overtimeCoefficient`:新的加班系数(decimal?) - `NULL` 或 `0`:表示非加班单 - 大于 `0`(如 0.5、1、1.5):表示加班单,系数值表示加倍的倍数 ### 1.3 响应格式 **成功响应**(200): ```json { "code": 200, "msg": "操作成功", "data": null } ``` **错误响应**(400/500): ```json { "code": 400, "msg": "错误信息", "data": null } ``` --- ## 二、测试步骤 ### 2.1 使用测试脚本(推荐) **测试脚本位置**:`scripts/sh/test_update_overtime_coefficient.sh` **执行命令**: ```bash cd /Users/mr.wang/代码库/绿纤/lvqianmeiye_ERP ./scripts/sh/test_update_overtime_coefficient.sh ``` **测试脚本包含的测试用例**: 1. ✅ 获取登录token 2. ✅ 获取消耗单记录ID 3. ✅ 查询当前消耗单信息 4. ✅ 修改加班系数为0.5 5. ✅ 验证修改结果(检查计算是否正确) 6. ✅ 修改加班系数为1.0 7. ✅ 修改加班系数为0(非加班单) 8. ✅ 验证修改为0后的结果 9. ✅ 测试不存在的ID(错误处理) 10. ✅ 测试无效参数(负数) --- ### 2.2 使用curl命令手动测试 #### 步骤1:获取登录token ```bash TOKEN=$(curl -s -X POST "http://localhost:2011/api/oauth/Login" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "account=admin&password=e10adc3949ba59abbe56e057f20f883e" | \ python3 -c "import sys, json; print(json.load(sys.stdin)['data']['token'])") ``` #### 步骤2:获取一个消耗单记录ID ```bash CONSUME_ID=$(curl -s -X GET "http://localhost:2011/api/Extend/LqXhHyhk?currentPage=1&pageSize=1" \ -H "Authorization: $TOKEN" | \ python3 -c "import sys, json; data = json.load(sys.stdin); print(data.get('data', {}).get('list', [{}])[0].get('id', ''))") ``` #### 步骤3:查询当前消耗单信息 ```bash curl -s -X GET "http://localhost:2011/api/Extend/LqXhHyhk/$CONSUME_ID" \ -H "Authorization: $TOKEN" | python3 -m json.tool ``` #### 步骤4:修改加班系数为0.5 ```bash curl -s -X PUT "http://localhost:2011/api/Extend/LqXhHyhk/$CONSUME_ID/overtime-coefficient" \ -H "Authorization: $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "overtimeCoefficient": 0.5 }' | python3 -m json.tool ``` #### 步骤5:验证修改结果 ```bash curl -s -X GET "http://localhost:2011/api/Extend/LqXhHyhk/$CONSUME_ID" \ -H "Authorization: $TOKEN" | python3 -m json.tool ``` **验证要点**: - 检查 `overtimeCoefficient` 是否为 0.5 - 检查 `overtimeSgfy`(加班手工费)是否正确计算:`原始手工费 × 0.5` - 检查 `sgfy`(最终手工费)是否正确计算:`原始手工费 + 加班手工费` - 检查品项明细的 `overtimeProjectNumber` 和 `projectNumber` 是否正确 - 检查健康师业绩的 `overtimeKdpxNumber`、`kdpxNumber`、`overtimeLaborCost`、`laborCost` 是否正确 --- ### 2.3 使用Postman测试 1. **创建新请求** - 方法:PUT - URL:`http://localhost:2011/api/Extend/LqXhHyhk/{id}/overtime-coefficient` - 将 `{id}` 替换为实际的消耗单ID 2. **设置请求头** - `Authorization`: `Bearer {token}` - `Content-Type`: `application/json` 3. **设置请求体**(Body -> raw -> JSON) ```json { "overtimeCoefficient": 0.5 } ``` 4. **发送请求并验证响应** --- ## 三、测试用例 ### 3.1 正常测试用例 #### 测试用例1:修改加班系数为0.5 **前置条件**: - 存在一个有效的消耗单记录 - 原始手工费 = 100元 - 原始项目次数 = 2次 **操作步骤**: 1. 调用接口,设置 `overtimeCoefficient = 0.5` **预期结果**: - 主表: - `overtimeCoefficient = 0.5` - `overtimeSgfy = 100 × 0.5 = 50元` - `sgfy = 100 + 50 = 150元` - 品项明细: - `overtimeProjectNumber = 2 × 0.5 = 1次` - `projectNumber = 2 + 1 = 3次` - 健康师业绩: - `overtimeKdpxNumber = 原始值 × 0.5` - `kdpxNumber = 原始值 + 加班值 + 陪同值` - `overtimeLaborCost = 原始值 × 0.5` - `laborCost = 原始值 + 加班值` --- #### 测试用例2:修改加班系数为1.0 **操作步骤**: 1. 调用接口,设置 `overtimeCoefficient = 1.0` **预期结果**: - 加班手工费 = 原始手工费 × 1.0 = 原始手工费 - 最终手工费 = 原始手工费 × 2 --- #### 测试用例3:修改加班系数为0(非加班单) **操作步骤**: 1. 调用接口,设置 `overtimeCoefficient = 0` **预期结果**: - 所有加班相关字段(`F_Overtime*`)都变为 0 - 最终值 = 原始值 --- ### 3.2 异常测试用例 #### 测试用例4:不存在的消耗单ID **操作步骤**: 1. 调用接口,使用不存在的ID(如:999999999999999999) **预期结果**: - 返回错误:`耗卡记录不存在或已作废` - HTTP状态码:400 --- #### 测试用例5:无效参数(负数) **操作步骤**: 1. 调用接口,设置 `overtimeCoefficient = -0.5` **预期结果**: - 系统应该允许负数(如果需要限制,需要在前端或后端添加验证) - 或者返回参数验证错误 --- #### 测试用例6:原始数据不存在 **操作步骤**: 1. 找到一个原始手工费为空的消耗单记录 2. 尝试修改加班系数 **预期结果**: - 如果原始手工费为空且最终手工费也为空,应该返回错误:`原始手工费不存在,无法修改加班系数` - 如果原始手工费为空但最终手工费存在,应该自动使用最终手工费作为原始值 --- ## 四、验证要点 ### 4.1 数据一致性验证 1. **原始数据不变**: - ✅ 所有 `F_Original*` 字段保持不变 - ✅ 验证方法:修改前后对比原始字段值 2. **加班数据重新计算**: - ✅ 所有 `F_Overtime*` 字段都根据新系数重新计算 - ✅ 验证方法:检查计算公式是否正确 3. **最终数据正确**: - ✅ 所有最终字段 = 原始值 + 加班值 - ✅ 验证方法:检查最终值是否等于原始值 + 加班值 --- ### 4.2 事务一致性验证 1. **事务回滚测试**: - 在更新过程中模拟异常(如数据库连接断开) - 验证所有数据是否回滚,保持一致性 2. **并发测试**: - 同时修改同一个消耗单的加班系数 - 验证数据是否正确,不会出现脏数据 --- ### 4.3 性能验证 1. **批量更新性能**: - 测试有大量品项明细和健康师业绩的消耗单 - 验证更新速度是否可接受 --- ## 五、常见问题 ### 5.1 原始数据为空怎么办? **问题**:如果原始数据(`F_Original*`)为空,系统会如何处理? **答案**: - 系统会自动从当前值中推导出原始值 - 对于主表:如果 `OriginalSgfy` 为空,使用 `Sgfy` 作为原始值 - 对于品项明细:如果 `OriginalProjectNumber` 为空,使用 `ProjectNumber` 作为原始值 - 对于健康师业绩:从最终值中减去加班值和陪同值,得到原始值 --- ### 5.2 科技部老师业绩是否参与计算? **问题**:科技部老师业绩表的加班字段是否会被更新? **答案**: - 当前代码中,科技部老师业绩表的加班字段被固定为 0,不参与加班计算 - 如果需要支持,可以取消注释代码中的相关部分 --- ### 5.3 修改后是否需要重新计算业绩? **问题**:修改加班系数后,是否需要重新计算相关的业绩统计? **答案**: - 修改加班系数只影响当前消耗单的数据 - 如果业绩统计是基于消耗单数据实时计算的,会自动反映新的加班系数 - 如果业绩统计是预先计算的,可能需要重新计算相关统计 --- ## 六、测试结果记录 ### 6.1 测试环境 - **测试时间**:2025年1月 - **测试环境**:开发环境(localhost:2011) - **测试人员**:开发团队 ### 6.2 测试结果 | 测试用例 | 测试结果 | 备注 | |---------|---------|------| | 修改加班系数为0.5 | ✅ 通过 | 计算正确 | | 修改加班系数为1.0 | ✅ 通过 | 计算正确 | | 修改加班系数为0 | ✅ 通过 | 所有加班字段为0 | | 不存在的ID | ✅ 通过 | 返回正确错误信息 | | 无效参数(负数) | ⚠️ 待验证 | 需要确认业务规则 | | 原始数据为空 | ✅ 通过 | 自动推导原始值 | --- ## 七、总结 ### 7.1 接口功能 ✅ **已实现功能**: - 修改消耗单的加班系数 - 自动重新计算所有相关的加班字段 - 使用事务保证数据一致性 - 处理原始数据为空的情况 ### 7.2 注意事项 1. **数据备份**:修改前建议备份数据 2. **权限控制**:确保只有有权限的用户才能修改 3. **日志记录**:建议记录修改操作日志 4. **性能考虑**:对于有大量明细的消耗单,更新可能需要一些时间 --- **文档结束**