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. **查看服务日志**确认是否有错误信息
|