Blame view

项目文档相关/docs/test-reports/科技部总经理Cell金额计算问题修复总结.md 3.94 KB
0cfc43b9   “wangming”   修复科技部总经理工资计算逻辑及相关...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
  # 科技部总经理Cell金额计算问题修复总结
  
  ## 问题描述
  科技部总经理工资计算接口中,Cell金额计算不正确。预期值:**69,838.00** 元,实际值:**60,994.30** 元。
  
  ## 问题分析
  
  ### 1. SQL查询验证
  直接SQL查询结果正确:
  - 绿纤静居寺店 (1649328471923847173): **46,110.00** 元(数据库中:37,400.00)
  - 绿纤468店 (1649328471923847175): **0.00** 元(数据库中:66.30)
  - 绿纤明信店 (1649328471923847187): **2,200.00** 元(数据库中:2,000.00)
  
  ### 2. 根本原因
  1. **时间格式化问题**:代码中使用字符串插值格式化DateTime时可能有问题
  2. **更新机制问题**:SqlSugar的Updateable可能只更新有变化的字段
  
  ## 已修复的问题
  
  ### 1. 时间格式化修复
  - 将字符串插值中的时间格式化改为使用 `.ToString()` 方法
  - 在循环外部定义时间格式化字符串,避免重复计算
  
  ```csharp
  // 修复前:
  AND yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'
  
  // 修复后:
  var startDateStr = startDate.ToString("yyyy-MM-dd HH:mm:ss");
  var endDateTimeStr = endDateTime.ToString("yyyy-MM-dd HH:mm:ss");
  AND yjsj <= '{endDateTimeStr}'
  ```
  
  ### 2. 强制更新机制
  - 添加 `IgnoreColumns` 确保强制更新所有字段(除了CreateTime和CreateUser)
  
  ```csharp
  await _db.Updateable(recordsToUpdate)
      .IgnoreColumns(x => x.CreateTime)
      .IgnoreColumns(x => x.CreateUser)
      .ExecuteCommandAsync();
  ```
  
  ### 3. 添加详细日志
  - 添加计算开始日志
  - 添加关键门店计算日志
  - 添加更新前/后的值对比日志
  - 添加跳过更新的警告日志
  
  ### 4. 强制更新UpdateTime
  ```csharp
  salary.UpdateTime = DateTime.Now; // 强制更新UpdateTime
  ```
  
  ## 修改的文件
  
  ### `LqTechGeneralManagerSalaryService.cs`
  1. **行236**:修复日志中的时间格式化
  2. **行330-331**:在循环外部定义时间格式化字符串
  3. **行333-342**:修复溯源金额SQL的时间格式化
  4. **行357-374**:修复Cell金额SQL的时间格式化,并添加调试日志
  5. **行547**:添加跳过更新的警告日志
  6. **行559**:强制设置UpdateTime
  7. **行559-562**:添加IgnoreColumns确保强制更新
  
  ## 验证步骤
  
  ### 1. 重新编译(已完成)
  ```bash
  cd netcore
  dotnet clean src/Application/NCC.API/NCC.API.csproj
  dotnet build src/Application/NCC.API/NCC.API.csproj
  ```
  **结果**:编译成功 ✅
  
  ### 2. 重启服务(必须执行)
  ⚠️ **重要**:代码修改后必须完全重启服务才能生效
  
  ### 3. 调用计算接口
  ```bash
  POST /api/Extend/lqtechgeneralmanagersalary/calculate/tech-general-manager?year=2025&month=12
  ```
  
  ### 4. 验证结果
  ```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 | 门店名称 | 当前值 | 预期值 | 差异 |
  |--------|---------|--------|--------|------|
  | 1649328471923847173 | 绿纤静居寺店 | 37,400.00 | 46,110.00 | +8,710.00 |
  | 1649328471923847175 | 绿纤468店 | 66.30 | 0.00 | -66.30 |
  | 1649328471923847187 | 绿纤明信店 | 2,000.00 | 2,200.00 | +200.00 |
  
  **合计差异**:+8,843.70 元
  
  ## 注意事项
  
  1. **服务重启**:代码修改后必须完全重启服务才能生效
  2. **日志查看**:查看服务日志中是否有 "已更新 X 条科技部总经理工资记录" 的日志
  3. **数据验证**:验证UpdateTime是否更新为当前时间
  4. **对比验证**:Cell金额应该与 `/api/Extend/LqTechDepartmentDashboard/GetStatistics` 接口返回的值一致
  
  ## 当前状态
  
  - ✅ 代码已修复
  - ✅ 编译成功
  - ⚠️ **需要重启服务并重新测试**
  
  ## 下一步操作
  
  1. **重启服务**(必须)
  2. **调用计算接口**进行测试
  3. **验证数据库结果**是否更新为69,838.00
  4. **查看服务日志**确认是否有错误信息