public RDataBom ImportToBom([FromBody] RDataBom RDataBom) { var dtBoms = RDataBom.boms; Debug.WriteLine(RDataBom.boms.Rows.Count); if (dtBoms == null || dtBoms.Rows.Count <= 0) { throw new Exception("表格没有记录"); } var excelFormat = Service.FetchExcelFormat(RDataBom.format_no); if (excelFormat == null) { throw new Exception("导入格式 不存在!"); } var excelFormatDtls = Service.GetDtls(excelFormat.Id); //检查Bom阶级 ImportBomFormExcel importTool = new ImportBomFormExcel(); var headBomRow = dtBoms.NewRow(); headBomRow["prd_no"] = RDataBom.prd_no; headBomRow["dep"] = RDataBom.dep_no; headBomRow["name"] = RDataBom.prd_name; //dtBoms.Rows.InsertAt(headBomRow, 0); if (dtBoms.Columns.IndexOf("id_no") < 0) { dtBoms.Columns.Add(new DataColumn("id_no")); } if (dtBoms.Columns.IndexOf("wh_no") < 0) { dtBoms.Columns.Add(new DataColumn("wh_no")); } ///清空之前的检测结果 foreach (DataRow row in dtBoms.Rows) { row["Check_Result"] = ""; row["check_err_code"] = ""; } BomInfo bomInfo = importTool.DoCheckBomLevel(dtBoms, dtBoms.Rows[0], headBomRow, "", BomLevelType: "Split"); bool hitError = false; //检测ERP中字段是否存在 var checkFields = excelFormatDtls.Where(o => o.check_exist.IsNotEmpty()).ToList(); foreach (DataRow item in dtBoms.Rows) { foreach (var item2 in checkFields) { string value = item[item2.field_no].ObjToString(); if (value.IsNotEmpty() && Service.CheckValueExsistInTable(item2.check_exist, value) == false) { item["Check_Result"] = "不存在:" + item2.check_exist + " 值:" + value; if (item2.field_no == "prd_no") { item["check_err_code"] = "MISS_PRDT"; } hitError = true; break; } } } if (hitError == false) { hitError = !Service.ValidateSubBom(bomInfo, true, RDataBom.is_check); } if (hitError == false) { hitError = !Service.ValidateInNoBomConflit(bomInfo); } if (hitError == false) { Service.SetDefaultWh(bomInfo); } if (hitError == false && RDataBom.is_check == false) { var cmds = DoImportToBom(bomInfo, excelFormatDtls, true); foreach (var item in cmds) { Debug.WriteLine(item.CommandText); } Service.ExeCmds(cmds); } if (RDataBom.is_check == false && hitError == true) { throw new Exception("检测失败不允许导入Bom"); } return(RDataBom); }