08d94686
“wangming”
优化工资相关服务类和DTO类,增强...
|
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
|
# 所有工资服务导入问题检查报告
## 检查日期
2025-01-13
## 检查问题
### 问题1:循环起始索引错误
- **问题描述**:代码从 `i = 1` 开始循环,跳过了第一条数据行
- **正确做法**:`ExcelImportHelper.ToDataTable(filePath, 0, 0)` 会将第一行作为标题行,数据从第二行开始,所以 `DataTable.Rows[0]` 是第一条数据行,应该从 `i = 0` 开始循环
### 问题2:Updateable没有使用IgnoreColumns
- **问题描述**:SqlSugar的`Updateable`默认只更新有变化的字段,如果Excel数据与数据库数据相同,可能不会执行更新
- **正确做法**:使用`IgnoreColumns`排除`CreateTime`和`CreateUser`,确保其他所有字段都被更新
## 检查结果
| 服务名称 | 文件 | 循环起始索引 | Updateable | 状态 |
|---------|------|------------|-----------|------|
| 店助工资 | LqAssistantSalaryService.cs | ✅ i=0 (已修复) | ✅ 有IgnoreColumns (已修复) | ✅ 已修复 |
| 健康师工资 | LqSalaryService.cs | ❌ i=1 | ❌ 无IgnoreColumns | ❌ 需要修复 |
| 科技部老师工资 | LqTechTeacherSalaryService.cs | ❌ i=1 | ❌ 无IgnoreColumns | ❌ 需要修复 |
| 主任工资 | LqDirectorSalaryService.cs | ❌ i=1 | ❌ 无IgnoreColumns | ❌ 需要修复 |
| 店长工资 | LqStoreManagerSalaryService.cs | ❌ i=1 | ❌ 无IgnoreColumns | ❌ 需要修复 |
| 大项目老师工资 | LqMajorProjectTeacherSalaryService.cs | ❌ i=1 | ❌ 无IgnoreColumns | ❌ 需要修复 |
| 大项目主管工资 | LqMajorProjectDirectorSalaryService.cs | ❌ i=1 | ❌ 无IgnoreColumns | ❌ 需要修复 |
| 科技部总经理工资 | LqTechGeneralManagerSalaryService.cs | ❌ i=1 | ❌ 无IgnoreColumns | ❌ 需要修复 |
| 事业部经理工资 | LqBusinessUnitManagerSalaryService.cs | ❌ i=1 | ❌ 无IgnoreColumns | ❌ 需要修复 |
## 需要修复的文件清单
1. ✅ LqAssistantSalaryService.cs - 已修复
2. ❌ LqSalaryService.cs - 需要修复
3. ❌ LqTechTeacherSalaryService.cs - 需要修复
4. ❌ LqDirectorSalaryService.cs - 需要修复
5. ❌ LqStoreManagerSalaryService.cs - 需要修复
6. ❌ LqMajorProjectTeacherSalaryService.cs - 需要修复
7. ❌ LqMajorProjectDirectorSalaryService.cs - 需要修复
8. ❌ LqTechGeneralManagerSalaryService.cs - 需要修复
9. ❌ LqBusinessUnitManagerSalaryService.cs - 需要修复
## 修复方案
### 修复1:循环起始索引
将所有服务的循环从 `i = 1` 改为 `i = 0`:
```csharp
// 修复前
for (int i = 1; i < dataTable.Rows.Count; i++)
// 修复后
// ExcelImportHelper.ToDataTable(filePath, 0, 0)会将第一行作为标题行,数据从第二行开始
// 所以DataTable.Rows[0]是Excel的第一条数据行,应该从i=0开始循环
for (int i = 0; i < dataTable.Rows.Count; i++)
```
### 修复2:Updateable使用IgnoreColumns
将所有服务的Updateable更新改为使用IgnoreColumns:
```csharp
// 修复前
if (recordsToUpdate.Any()) await _db.Updateable(recordsToUpdate).ExecuteCommandAsync();
// 修复后
if (recordsToUpdate.Any())
{
// 使用IgnoreColumns排除CreateTime和CreateUser,确保其他所有字段都被更新
await _db.Updateable(recordsToUpdate)
.IgnoreColumns(x => x.CreateTime)
.IgnoreColumns(x => x.CreateUser)
.ExecuteCommandAsync();
}
```
## 注意事项
1. 错误信息中的行号需要调整:从 `第{i + 1}行` 改为 `第{i + 1}行`(保持不变,因为Excel行号=DataTable索引+1)
2. 确保所有服务都使用相同的修复方案,保持代码一致性
|