科技部总经理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)

注意事项

  1. 确保服务已重启:代码修改后必须重启服务才能生效
  2. 检查日志:查看是否有 "已更新 X 条科技部总经理工资记录" 的日志
  3. 验证更新时间:F_UpdateTime 应该更新为当前时间
  4. 对比科技部驾驶舱接口:Cell金额应该与 /api/Extend/LqTechDepartmentDashboard/GetStatistics 接口返回的值一致