From b28e8fbf2a78cc9ae5047d2fbe1820fe42850151 Mon Sep 17 00:00:00 2001
From: yl <ykxkd@outlook.com>
Date: 星期一, 26 八月 2024 10:24:49 +0800
Subject: [PATCH] 1.模具导入接口数据校验优化

---
 VueWebCoreApi/Tools/ImportExcelData.cs |  189 ++++++++++++++++++++++++----------------------
 1 files changed, 99 insertions(+), 90 deletions(-)

diff --git a/VueWebCoreApi/Tools/ImportExcelData.cs b/VueWebCoreApi/Tools/ImportExcelData.cs
index 5a7c185..c8ae6ec 100644
--- a/VueWebCoreApi/Tools/ImportExcelData.cs
+++ b/VueWebCoreApi/Tools/ImportExcelData.cs
@@ -3379,114 +3379,123 @@
             List<ExcelErro> list = new List<ExcelErro>();
             list = ImportExcel.InportExcelToTableListErro(excelTable);    //楠岃瘉Excel鏁版嵁蹇呭~瀛楁鏄惁涓虹┖銆佸敮涓�瀛楁鏄惁閲嶅
 
-            //妯″叿琛�
-            for (int k = 0; k < excelTable[0].Rows.Count; k++)
+            //鏌ヨ妯″叿淇℃伅
+            sql = @"select code,name,spec  from TMouldInfo";
+            dt = DapperHelper.selecttable(sql);
+            if (dt.Rows.Count > 0)
             {
-                if (excelTable[0].Rows[k][0].ToString().Trim() != null && excelTable[0].Rows[k][0].ToString().Trim() != "")
+                //鏍¢獙褰撳墠涓婁紶鐨勬ā鍏蜂俊鎭笌鏁版嵁琛ㄤ腑鐨勬ā鍏蜂俊鎭槸鍚﹂噸澶�
+                // 浣跨敤LINQ鍜孡ambda琛ㄨ揪寮忔潵鏌ユ壘鍦ㄦ暟鎹簱涓噸澶嶇殑璁板綍  
+                var aRows = excelTable[0].AsEnumerable();
+                var duplicates = aRows.Where(aRow =>
+                    dt.AsEnumerable().Any(bRow =>
+                        aRow["*妯″叿缂栧彿(鍞竴)"].Equals(bRow["code"])||
+                        aRow["*妯″叿鍚嶇О"].Equals(bRow["name"])
+                    )
+                ).ToList();
+                if (duplicates.Count > 0) 
                 {
-                    sql = @"select *  from TMouldInfo where code=@code";
-                    dynamicParams.Add("@code", excelTable[0].Rows[k][0].ToString().Trim());
-                    dt = DapperHelper.selectdata(sql, dynamicParams);
-                    if (dt.Rows.Count > 0)
+                    // 杈撳嚭鎴栧鐞嗘壘鍒扮殑閲嶅璁板綍  
+                    foreach (DataRow duplicateRow in duplicates)
                     {
                         ExcelErro erro = new ExcelErro();
                         erro.RoeNumber = "/";
-                        erro.ErrorField = "{*妯″叿缂栧彿(鍞竴)}";
-                        erro.ErrorCont = "妯″叿琛�:{*妯″叿缂栧彿(鍞竴)}瀛楁" + excelTable[0].Rows[k][0].ToString().Trim() + "宸插瓨鍦�";
-                        list.Add(erro);
-                    }
-                }
-                if (excelTable[0].Rows[k][1].ToString().Trim() != null && excelTable[0].Rows[k][1].ToString().Trim() != "")
-                {
-                    sql = @"select *  from TMouldInfo where name=@name";
-                    dynamicParams.Add("@name", excelTable[0].Rows[k][1].ToString().Trim());
-                    dt = DapperHelper.selectdata(sql, dynamicParams);
-                    if (dt.Rows.Count > 0)
-                    {
-                        ExcelErro erro = new ExcelErro();
-                        erro.RoeNumber = "/";
-                        erro.ErrorField = "{*妯″叿鍚嶇О}";
-                        erro.ErrorCont = "妯″叿琛�:{*妯″叿鍚嶇О}瀛楁" + excelTable[0].Rows[k][1].ToString().Trim() + "宸插瓨鍦�";
-                        list.Add(erro);
-                    }
-                }
-                //鍒ゆ柇浠撳簱缂栫爜鏄惁涓虹┖
-                if (excelTable[0].Rows[k][4].ToString().Trim() != null && excelTable[0].Rows[k][4].ToString().Trim() != "")
-                {
-                    sql = @"select *  from TSecStck where code=@code";
-                    dynamicParams.Add("@code", excelTable[0].Rows[k][4].ToString().Trim());
-                    dt = DapperHelper.selectdata(sql, dynamicParams);
-                    if (dt.Rows.Count <= 0)
-                    {
-                        ExcelErro erro = new ExcelErro();
-                        erro.RoeNumber = "/";
-                        erro.ErrorField = "{*浠撳簱缂栫爜}";
-                        erro.ErrorCont = "妯″叿琛�:{*浠撳簱缂栫爜}瀛楁" + excelTable[0].Rows[k][4].ToString().Trim() + "涓嶅瓨鍦�";
-                        list.Add(erro);
-                    }
-                }
-                //鍒ゆ柇搴撲綅缂栫爜鏄惁涓虹┖
-                if (excelTable[0].Rows[k][5].ToString().Trim() != null && excelTable[0].Rows[k][5].ToString().Trim() != "")
-                {
-                    //搴撲綅涓嶄负绌烘椂,鍒ゆ柇浠撳簱鏄惁涓虹┖
-                    if (excelTable[0].Rows[k][4].ToString().Trim() != null && excelTable[0].Rows[k][4].ToString().Trim() != "")
-                    {
-                        //鍒ゆ柇搴撲綅鏄惁瀛樺湪
-                        sql = @"select *  from TSecLoca where code=@code";
-                        dynamicParams.Add("@code", excelTable[0].Rows[k][5].ToString().Trim());
-                        dt = DapperHelper.selectdata(sql, dynamicParams);
-                        if (dt.Rows.Count <= 0)
-                        {
-                            ExcelErro erro = new ExcelErro();
-                            erro.RoeNumber = "/";
-                            erro.ErrorField = "{*搴撲綅缂栫爜}";
-                            erro.ErrorCont = "妯″叿琛�:{*搴撲綅缂栫爜}瀛楁" + excelTable[0].Rows[k][5].ToString().Trim() + "涓嶅瓨鍦�";
-                            list.Add(erro);
-                        }
-                        else
-                        {
-                            //鍒ゆ柇搴撲綅鏄惁灞炰簬褰撳墠浠撳簱
-                            if (excelTable[0].Rows[k][4].ToString().Trim() != dt.Rows[0]["idwarehouse"].ToString())
-                            {
-                                ExcelErro erro = new ExcelErro();
-                                erro.RoeNumber = "/";
-                                erro.ErrorField = "{*搴撲綅缂栫爜}";
-                                erro.ErrorCont = "妯″叿琛�:{*搴撲綅缂栫爜}瀛楁" + excelTable[0].Rows[k][5].ToString().Trim() + "涓巤*浠撳簱缂栫爜}瀛楁锛�" + excelTable[0].Rows[k][4].ToString().Trim() + "涓嶅尮閰�";
-                                list.Add(erro);
-                            }
-                        }
-                    }
-                    else
-                    {
-                        ExcelErro erro = new ExcelErro();
-                        erro.RoeNumber = "/";
-                        erro.ErrorField = "{*搴撲綅缂栫爜}";
-                        erro.ErrorCont = "妯″叿琛�:{*搴撲綅缂栫爜}瀛楁" + excelTable[0].Rows[k][5].ToString().Trim() + "瀵瑰簲鐨勪粨搴撳瓧娈典笉鑳戒负绌�";
+                        erro.ErrorField = "{*妯″叿缂栧彿(鍞竴)}/{*妯″叿鍚嶇О}";
+                        erro.ErrorCont = $"*妯″叿缂栧彿(鍞竴): {duplicateRow["*妯″叿缂栧彿(鍞竴)"]},鎴�,*妯″叿鍚嶇О: {duplicateRow["*妯″叿鍚嶇О"]}宸插瓨鍦�!";
                         list.Add(erro);
                     }
                 }
             }
-            //妯″叿鍏宠仈浜у搧琛�
-            for (int j = 0; j < excelTable[1].Rows.Count; j++)
+            //鏌ヨ浠撳簱淇℃伅
+            sql = @"select code,name  from TSecStck";
+            dt = DapperHelper.selecttable(sql);
+            if (dt.Rows.Count > 0)
             {
-                if (excelTable[1].Rows[j][1].ToString().Trim() != null && excelTable[1].Rows[j][1].ToString().Trim() != "")
+                //鏍¢獙褰撳墠涓婁紶鐨勬ā鍏蜂粨搴撴槸鍚﹀瓨鍦�
+                var aRows = excelTable[0].AsEnumerable();
+                var bCodes = dt.AsEnumerable().Select(row => row["code"].ToString()).ToList(); // 鎻愬彇鏁版嵁搴撴煡璇腑鎵�鏈塩ode鍊�  
+                // 浣跨敤LINQ鍜孡ambda琛ㄨ揪寮忔潵鏌ユ壘鎻愪氦鏁版嵁浠撳簱缂栫爜涓湪鏁版嵁搴撲腑涓嶅瓨鍦ㄧ殑code  
+                var notInB = aRows.Where(aRow => !bCodes.Contains(aRow["*浠撳簱缂栫爜"].ToString())).ToList();
+                // 杈撳嚭鎴栧鐞嗘壘鍒扮殑璁板綍  
+                foreach (DataRow row in notInB)
                 {
-                    sql = @"select *  from TMateriel_Info where partcode=@partcode";
-                    dynamicParams.Add("@partcode", excelTable[1].Rows[j][1].ToString().Trim());
-                    dt = DapperHelper.selectdata(sql, dynamicParams);
-                    if (dt.Rows.Count <= 0)
+                    ExcelErro erro = new ExcelErro();
+                    erro.RoeNumber = "/";
+                    erro.ErrorField = "{*浠撳簱缂栫爜}";
+                    erro.ErrorCont = $"*浠撳簱缂栫爜: {row["*浠撳簱缂栫爜"]}涓嶅瓨鍦�!";
+                    list.Add(erro);        
+                }
+            }
+            //鏌ヨ搴撲綅淇℃伅
+            sql = @"select code,idwarehouse  from TSecLoca";
+            dt = DapperHelper.selecttable(sql);
+            if (dt.Rows.Count > 0)
+            {
+                //鏍¢獙褰撳墠涓婁紶鐨勬ā鍏峰簱浣嶆槸鍚﹀瓨鍦�
+                var aRows = excelTable[0].AsEnumerable();
+                var bCodes = dt.AsEnumerable().Select(row => row["code"].ToString()).ToList(); // 鎻愬彇鏁版嵁搴撴煡璇腑鎵�鏈塩ode鍊�  
+                // 浣跨敤LINQ鍜孡ambda琛ㄨ揪寮忔潵鏌ユ壘鎻愪氦鏁版嵁搴撲綅缂栫爜涓湪鏁版嵁搴撲腑涓嶅瓨鍦ㄧ殑code  
+                var notInB = aRows.Where(aRow => !bCodes.Contains(aRow["*搴撲綅缂栫爜"].ToString())).ToList();
+                // 杈撳嚭鎴栧鐞嗘壘鍒扮殑璁板綍  
+                foreach (DataRow row in notInB)
+                {
+                    ExcelErro erro = new ExcelErro();
+                    erro.RoeNumber = "/";
+                    erro.ErrorField = "{*搴撲綅缂栫爜}";
+                    erro.ErrorCont = $"*搴撲綅缂栫爜: {row["*浠撳簱缂栫爜"]}涓嶅瓨鍦�!";
+                    list.Add(erro);
+                }
+
+                //鏍¢獙褰撳墠涓婁紶鐨勬ā鍏峰簱浣嶈窡浠撳簱鏄惁鍖归厤
+                var aItems = aRows.Select(row => new
+                {
+                    WarehouseCode = row["*浠撳簱缂栫爜"].ToString(),
+                    LocationCode = row["*搴撲綅缂栫爜"].ToString(),
+                }).ToList();
+
+                var bItems = dt.AsEnumerable().Select(row => new
+                {
+                    IdWarehouse = row["idwarehouse"].ToString(),
+                    Code = row["code"].ToString(),
+                }).ToList();
+
+                // 浣跨敤LINQ鍜孡ambda琛ㄨ揪寮忔潵鏌ユ壘A涓湪B涓病鏈夊尮閰峣dwarehouse+code鐨勯」  
+                var notMatching = aItems.Where(a => !bItems.Any(b =>
+                    a.WarehouseCode == b.IdWarehouse && a.LocationCode == b.Code
+                )).ToList();
+
+                // 杈撳嚭鎴栧鐞嗘壘鍒扮殑涓嶅尮閰嶉」  
+                foreach (var item in notMatching)
+                {
+                    ExcelErro erro = new ExcelErro();
+                    erro.RoeNumber = "/";
+                    erro.ErrorField = "{*浠撳簱缂栫爜}/{*搴撲綅缂栫爜}";
+                    erro.ErrorCont = $"*浠撳簱缂栫爜: {item.WarehouseCode},涓庯紝*搴撲綅缂栫爜: {item.LocationCode}涓嶅尮閰�!";
+                    list.Add(erro);
+                }
+            }
+            //妯″叿鍏宠仈浜у搧琛�
+            if (excelTable[1].Rows.Count > 0)
+            {
+                sql = @"select partcode,partname,partspec  from TMateriel_Info";
+                dt = DapperHelper.selecttable(sql);
+                if (dt.Rows.Count > 0)
+                {
+                    //鏍¢獙褰撳墠涓婁紶鐨勬ā鍏蜂粨搴撴槸鍚﹀瓨鍦�
+                    var aRows = excelTable[1].AsEnumerable();
+                    var bCodes = dt.AsEnumerable().Select(row => row["partcode"].ToString()).ToList(); // 鎻愬彇鏁版嵁搴撴煡璇腑鎵�鏈塸artcode鍊�  
+                   // 浣跨敤LINQ鍜孡ambda琛ㄨ揪寮忔潵鏌ユ壘鎻愪氦鏁版嵁浜у搧缂栫爜涓湪鏁版嵁搴撲腑涓嶅瓨鍦ㄧ殑code  
+                    var notInB = aRows.Where(aRow => !bCodes.Contains(aRow["浜у搧缂栫爜"].ToString())).ToList();
+                    // 杈撳嚭鎴栧鐞嗘壘鍒扮殑璁板綍  
+                    foreach (DataRow row in notInB)
                     {
                         ExcelErro erro = new ExcelErro();
                         erro.RoeNumber = "/";
                         erro.ErrorField = "{浜у搧缂栫爜}";
-                        erro.ErrorCont = "妯″叿鍏宠仈浜у搧琛�:{浜у搧缂栫爜}瀛楁" + excelTable[1].Rows[j][1].ToString().Trim() + "涓嶅瓨鍦�";
+                        erro.ErrorCont = "妯″叿鍏宠仈浜у搧琛�:{浜у搧缂栫爜}:" +row["浜у搧缂栫爜"] +"涓嶅瓨鍦�!";
                         list.Add(erro);
                     }
                 }
-            }
-            //鍒ゆ柇妯″叿鍏宠仈浜у搧琛ㄦ槸鍚︽湁鏁版嵁
-            if (excelTable[1].Rows.Count > 0)
-            {
                 //鍒ゆ柇瀛愯〃澶栭敭涓嶅瓨鍦ㄤ簬涓昏〃涓婚敭涓殑鏁版嵁
                 var dt3 = from r in excelTable[1].AsEnumerable()
                           where !(

--
Gitblit v1.9.3