yl
2023-12-18 b59b0e3516caee784ab9aa74e5b9dd1dfbffaa2d
1.修改Excel导入时双模板数据校验方法
已修改2个文件
47 ■■■■■ 文件已修改
VueWebCoreApi/Controllers/ImportExcelController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Tools/ImportExcel.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/ImportExcelController.cs
@@ -15,7 +15,7 @@
    [ApiExplorerSettings(GroupName = "Excel导入")]
    [ApiController]
    [Route("api/[controller]")]
    //[ChannelActionFilter]
    [ChannelActionFilter]
    public class ImportExcelController : Controller
    {
VueWebCoreApi/Tools/ImportExcel.cs
@@ -1297,29 +1297,38 @@
                }
                if (excelTable[i].Columns.Cast<DataColumn>().Any(column => column.ColumnName.Contains("M")))
                {
                    var duplicateColumn = excelTable[i].Columns.Cast<DataColumn>().FirstOrDefault(
                        column => column.ColumnName.Contains("M") && excelTable[i].AsEnumerable().GroupBy(row => new { Field1 = row[column], Field2 = column.ColumnName.Contains("唯一") }).Any(group => group.Count() > 1));
                    if (duplicateColumn != null)
                    // 先按照列名包含"M"标识的列分组
                    var mColumns = excelTable[i].Columns.Cast<DataColumn>()
                        .Where(c => c.ColumnName.Contains("M"))
                        .ToList();
                    var groups = excelTable[i].AsEnumerable()
                        .GroupBy(r => string.Join("-", mColumns.Select(c => r[c])));
                    foreach (var group in groups)
                    {
                        int columnIndex = excelTable[i].Columns.IndexOf(duplicateColumn);
                        var duplicateRows = excelTable[i].AsEnumerable()
                            .Where(row => row[duplicateColumn] != DBNull.Value)
                            .GroupBy(row => row[duplicateColumn])
                            .Where(group => group.Count() > 1)
                            .SelectMany(group => group.ToList())
                            .ToList();
                        foreach (var row in duplicateRows)
                        // 判断列名包含"唯一"标识的列的列值是否重复
                        var uniqueColumnName = excelTable[i].Columns.Cast<DataColumn>()
                            .Where(c => c.ColumnName.Contains("唯一"))
                            .Select(c => c.ColumnName)
                            .FirstOrDefault();
                        var duplicateUniqueValues = group
                            .GroupBy(r => r[uniqueColumnName])
                            .Where(g => g.Count() > 1)
                            .Select(g => g.Key);
                        foreach (var value in duplicateUniqueValues)
                        {
                            ExcelErro erro = new ExcelErro();
                            erro.RoeNumber = excelTable[i].Rows.IndexOf(row).ToString();
                            erro.ErrorField = duplicateColumn.ColumnName;
                            erro.ErrorCont = "模板表头字段:" + duplicateColumn.ColumnName + "下同一值,对应带(唯一)的列中存在重复值";
                            erro.RoeNumber = "/";
                            erro.ErrorField = mColumns[0].ToString();
                            erro.ErrorCont = "模板表头字段【"+ mColumns[0].ToString() + "】下的值:"+ group.Key + ",对应带(唯一)的列中存在重复值为:"+value+"";
                            list.Add(erro);
                        }
                    }
                }
                else
                else
                {
                    var duplicateColumn = excelTable[i].Columns.Cast<DataColumn>().FirstOrDefault(
                        column => column.ColumnName.Contains("唯一") && excelTable[i].AsEnumerable().GroupBy(row => row[column]).Any(group => group.Count() > 1));
@@ -1343,8 +1352,8 @@
                        }
                    }
                }
            }
            return list;
        }