所有工资服务导入问题检查报告.md
3.49 KB
所有工资服务导入问题检查报告
检查日期
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 | ❌ 需要修复 |
需要修复的文件清单
- ✅ LqAssistantSalaryService.cs - 已修复
- ❌ LqSalaryService.cs - 需要修复
- ❌ LqTechTeacherSalaryService.cs - 需要修复
- ❌ LqDirectorSalaryService.cs - 需要修复
- ❌ LqStoreManagerSalaryService.cs - 需要修复
- ❌ LqMajorProjectTeacherSalaryService.cs - 需要修复
- ❌ LqMajorProjectDirectorSalaryService.cs - 需要修复
- ❌ LqTechGeneralManagerSalaryService.cs - 需要修复
- ❌ LqBusinessUnitManagerSalaryService.cs - 需要修复
修复方案
修复1:循环起始索引
将所有服务的循环从 i = 1 改为 i = 0:
// 修复前
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:
// 修复前
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();
}
注意事项
- 错误信息中的行号需要调整:从
第{i + 1}行改为第{i + 1}行(保持不变,因为Excel行号=DataTable索引+1) - 确保所有服务都使用相同的修复方案,保持代码一致性