From b59b0e3516caee784ab9aa74e5b9dd1dfbffaa2d Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期一, 18 十二月 2023 19:29:15 +0800
Subject: [PATCH] 1.修改Excel导入时双模板数据校验方法

---
 VueWebCoreApi/Controllers/ImportExcelController.cs |    2 +-
 VueWebCoreApi/Tools/ImportExcel.cs                 |   45 +++++++++++++++++++++++++++------------------
 2 files changed, 28 insertions(+), 19 deletions(-)

diff --git a/VueWebCoreApi/Controllers/ImportExcelController.cs b/VueWebCoreApi/Controllers/ImportExcelController.cs
index e2ef326..d535b0d 100644
--- a/VueWebCoreApi/Controllers/ImportExcelController.cs
+++ b/VueWebCoreApi/Controllers/ImportExcelController.cs
@@ -15,7 +15,7 @@
     [ApiExplorerSettings(GroupName = "Excel瀵煎叆")]
     [ApiController]
     [Route("api/[controller]")]
-    //[ChannelActionFilter]
+    [ChannelActionFilter]
     public class ImportExcelController : Controller
     {
 
diff --git a/VueWebCoreApi/Tools/ImportExcel.cs b/VueWebCoreApi/Tools/ImportExcel.cs
index 5a4cb36..fca0173 100644
--- a/VueWebCoreApi/Tools/ImportExcel.cs
+++ b/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;
         }

--
Gitblit v1.9.3