修改加班系数接口测试说明.md 9.21 KB

修改加班系数接口测试说明

接口地址PUT /api/Extend/LqXhHyhk/{id}/overtime-coefficient
创建日期:2025年1月
文档目的:说明如何测试修改加班系数接口


一、接口说明

1.1 接口信息

  • 请求方式:PUT
  • 接口路径/api/Extend/LqXhHyhk/{id}/overtime-coefficient
  • Content-Typeapplication/json
  • 需要认证:是(Bearer Token)

1.2 请求参数

路径参数

  • id:消耗单编号(string)

请求体

{
  "overtimeCoefficient": 0.5
}

参数说明

  • overtimeCoefficient:新的加班系数(decimal?)
    • NULL0:表示非加班单
    • 大于 0(如 0.5、1、1.5):表示加班单,系数值表示加倍的倍数

1.3 响应格式

成功响应(200):

{
  "code": 200,
  "msg": "操作成功",
  "data": null
}

错误响应(400/500):

{
  "code": 400,
  "msg": "错误信息",
  "data": null
}

二、测试步骤

2.1 使用测试脚本(推荐)

测试脚本位置scripts/sh/test_update_overtime_coefficient.sh

执行命令

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

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

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:查询当前消耗单信息

curl -s -X GET "http://localhost:2011/api/Extend/LqXhHyhk/$CONSUME_ID" \
  -H "Authorization: $TOKEN" | python3 -m json.tool

步骤4:修改加班系数为0.5

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:验证修改结果

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(最终手工费)是否正确计算:原始手工费 + 加班手工费
  • 检查品项明细的 overtimeProjectNumberprojectNumber 是否正确
  • 检查健康师业绩的 overtimeKdpxNumberkdpxNumberovertimeLaborCostlaborCost 是否正确

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)

    {
     "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. 性能考虑:对于有大量明细的消耗单,更新可能需要一些时间

文档结束