科技部总经理Cell金额计算问题诊断.md
2.82 KB
科技部总经理Cell金额计算问题诊断
问题描述
重启服务并重新计算后,Cell金额仍然是 60,994.30,而不是预期的 69,838.00。
诊断结果
1. SQL查询是正确的
直接查询数据库,使用正确的SQL和时间范围,结果正确:
SELECT COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as Amount
FROM lq_kd_jksyj
WHERE F_IsEffective = 1
AND F_StoreId IN (...)
AND (F_BeautyType = 'cell' OR F_BeautyType = 'Cell')
AND yjsj >= '2025-12-01 00:00:00'
AND yjsj <= '2025-12-31 23:59:59'
查询结果:69,838.00 元(正确)
2. 代码逻辑检查
- ✅
endDateTime变量已正确定义 - ✅ SQL字符串格式化正确
- ✅ 使用原生SQL在数据库层面转换
- ✅ 时间范围处理正确
3. 问题定位
可能的原因:SqlSugar 的 Updateable 默认只更新有变化的字段。如果计算出来的值与数据库中的值相同(或接近),可能不会触发更新。
解决方案:添加 IgnoreColumns 确保强制更新所有字段(已添加)
已修复的问题
1. 添加了 IgnoreColumns
await _db.Updateable(recordsToUpdate)
.IgnoreColumns(x => x.CreateTime)
.IgnoreColumns(x => x.CreateUser)
.ExecuteCommandAsync();
2. 添加了日志记录
_logger.LogInformation($"已更新 {recordsToUpdate.Count} 条科技部总经理工资记录(月份:{monthStr})");
验证步骤
1. 重新编译和重启服务
cd netcore
dotnet build
# 重启服务
2. 重新执行计算
POST /api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12
3. 验证结果
SELECT F_EmployeeName, F_StatisticsMonth, F_CellAmount, F_UpdateTime
FROM lq_tech_general_manager_salary_statistics
WHERE F_EmployeeName LIKE '%夏萍%' AND F_StatisticsMonth = '202512'
预期结果:
- Cell金额:69,838.00 元
- UpdateTime:当前时间
门店明细预期值
| 门店ID | 门店名称 | 预期Cell金额 |
|---|---|---|
| 1649328471923847170 | 绿纤龙湖店 | 7,140.00 |
| 1649328471923847172 | 绿纤华润店 | 5,500.00 |
| 1649328471923847173 | 绿纤静居寺店 | 46,110.00 (当前:37,400.00) |
| 1649328471923847184 | 绿纤大丰店 | 8,888.00 |
| 1649328471923847187 | 绿纤明信店 | 2,200.00 (当前:2,000.00) |
| 1649328471923847175 | 绿纤468店 | 0.00 (当前:66.30) |
注意事项
- 确保服务已重启:代码修改后必须重启服务才能生效
- 检查日志:查看是否有 "已更新 X 条科技部总经理工资记录" 的日志
- 验证更新时间:F_UpdateTime 应该更新为当前时间
- 对比科技部驾驶舱接口:Cell金额应该与
/api/Extend/LqTechDepartmentDashboard/GetStatistics接口返回的值一致