# 科技部总经理Cell金额计算问题诊断 ## 问题描述 重启服务并重新计算后,Cell金额仍然是 **60,994.30**,而不是预期的 **69,838.00**。 ## 诊断结果 ### 1. SQL查询是正确的 直接查询数据库,使用正确的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 ```csharp await _db.Updateable(recordsToUpdate) .IgnoreColumns(x => x.CreateTime) .IgnoreColumns(x => x.CreateUser) .ExecuteCommandAsync(); ``` ### 2. 添加了日志记录 ```csharp _logger.LogInformation($"已更新 {recordsToUpdate.Count} 条科技部总经理工资记录(月份:{monthStr})"); ``` ## 验证步骤 ### 1. 重新编译和重启服务 ```bash cd netcore dotnet build # 重启服务 ``` ### 2. 重新执行计算 ```bash POST /api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12 ``` ### 3. 验证结果 ```sql 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` 接口返回的值一致