| | |
| | | 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和Lambda表达式来查找在数据库中重复的记录 |
| | | 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(); // 提取数据库查询中所有code值 |
| | | // 使用LINQ和Lambda表达式来查找提交数据仓库编码中在数据库中不存在的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(); // 提取数据库查询中所有code值 |
| | | // 使用LINQ和Lambda表达式来查找提交数据库位编码中在数据库中不存在的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和Lambda表达式来查找A中在B中没有匹配idwarehouse+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(); // 提取数据库查询中所有partcode值 |
| | | // 使用LINQ和Lambda表达式来查找提交数据产品编码中在数据库中不存在的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 !( |