public bool ValidateInNoBomConflit(BomInfo ExcelBomInfo) { foreach (var item in ExcelBomInfo.BodyRows) { string rowPrdNo = item["prd_no"].ObjToString(); string belongBomNo = item.GetStingWithTry("id_no"); var prdt = DB.Queryable <PrdtModel>().Where(o => o.prd_no == rowPrdNo).ToList().FirstOrDefault(); if (prdt == null) { throw new MissPrdtException("货品[{0}]不存在!".FormatOrg(rowPrdNo)); } bool hadExcelBom = ExcelBomInfo.BodyInfos.FirstOrDefault(o => o.prd_no == rowPrdNo) != null ? true : false; if (prdt.knd == "2" || prdt.knd == "3") { if (belongBomNo.IsNotEmpty()) { var mfBom = GetBom(rowPrdNo, belongBomNo); if (mfBom != null) { item["id_no"] = mfBom.bom_no; } else if (hadExcelBom == true) { item["id_no"] = belongBomNo; } } else { var mfBom = GetBom(rowPrdNo); if (mfBom != null) { item["id_no"] = mfBom.bom_no; } else if (hadExcelBom == true) { item["id_no"] = rowPrdNo + "->"; } } } } foreach (var item2 in ExcelBomInfo.BodyInfos) { bool isOk = ValidateInNoBomConflit(item2); if (isOk == false) { return(false); } } return(true); }
public void SetDefaultWh(BomInfo ExcelBomInfo) { foreach (DataRow item in ExcelBomInfo.BodyRows) { if (item["wh_no"].ObjToString().IsNotEmpty()) { continue; } string wh = GetPrdtWh(item.GetSting("prd_no")); item["wh_no"] = wh.IsNotEmpty() ? wh : "0000"; } foreach (var item in ExcelBomInfo.BodyInfos) { SetDefaultWh(item); } }
public BomInfo DoCheckBomLevel(DataTable dt, DataRow StartCurrentRow, DataRow BomHeadRow, string PreFix = "", string BomLevelType = "Split") { BomInfo bomInfo = new BomInfo(); if (BomHeadRow == null) { throw new Exception("Bom头不能为空"); } bomInfo.HeadRow = BomHeadRow; bomInfo.prd_no = BomHeadRow["prd_no"].ToString(); if (dt.Columns.IndexOf("bom_no") > -1) { bomInfo.bom_no = Common.ObjToString(BomHeadRow["bom_no"]); //配方号不是必须字段 } int startIndex = 0; if (StartCurrentRow != null) { startIndex = dt.Rows.IndexOf(StartCurrentRow); } var headLevel = BomLevelFactory.Get(BomLevelType, PreFix);// GetIndexs(PreFix); List <DataRow> bomDetails = new List <DataRow>(); for (int i = startIndex; i < dt.Rows.Count; i++) { var row = dt.Rows[i]; if (row["Check_Result"].ToString() != string.Empty) { continue; } var rowLevel = BomLevelFactory.Get(BomLevelType, row["bom_level"].ToString()); //GetIndexs(row["bom_level"].ToString()); if (headLevel.Count > rowLevel.Count || (rowLevel.Count - headLevel.Count) > 1) { row["Check_Result"] = "阶级异常"; throw new Exception("阶级异常"); } //相同级别就跳走 if (headLevel.IsSame(rowLevel)) { break; } if (headLevel.IsChild(rowLevel)) { BomHeadRow["bom_prdt_knd"] = "3"; if (bomDetails.Select(o => o.GetSting("prd_no")).ToList() .Contains(row.GetSting("prd_no"))) { row["Check_Result"] = "货号相同"; throw new Exception("货号相同{0}".FormatOrg(row.GetSting("prd_no"))); } row["Check_Result"] = BomHeadRow["bom_level"].ToString() + "阶级成功"; bomDetails.Add(row); bomInfo.BodyRows.Add(row); } //最后一行了 if (i + 1 >= dt.Rows.Count) { break; } var nextRow = dt.Rows[i + 1]; var nextRowLevel = BomLevelFactory.Get(BomLevelType, nextRow["bom_level"].ToString()); //GetIndexs(nextRow["bom_level"].ToString()); //不是自己的子级,跳出 例: 1.2 -> 2 if (nextRowLevel.Count < headLevel.Count || nextRowLevel.Count < rowLevel.Count) { break; } //下一级是否同级 if (headLevel.IsChild(nextRowLevel)) { continue; } else if (rowLevel.IsChild(nextRowLevel)) { row["bom_prdt_knd"] = "3888"; string str = rowLevel.ToString(); //string.Join(".", rowLevel) var subBomInfo = DoCheckBomLevel(dt, nextRow, row, PreFix = str, BomLevelType: BomLevelType); bomInfo.BodyInfos.Add(subBomInfo); } else { nextRow["Check_Result"] = "阶级异常"; throw new Exception("阶级异常"); } } return(bomInfo); }
/// <summary> /// 配方号Excel中未指定,去找子货号的Bom 然后递归检查Excel与系统已有的Bom结构一致吗? /// </summary> /// <param name="ExcelBomInfo"></param> /// <returns></returns> public bool ValidateSubBom(BomInfo ExcelBomInfo, bool IsTopLevelBom, bool IsCheck) { var prdt = DB.Queryable <PrdtModel>().Where(o => o.prd_no == ExcelBomInfo.prd_no).ToList().FirstOrDefault(); if (prdt == null) { throw new MissPrdtException("货品[{0}]不存在!".FormatOrg(ExcelBomInfo.prd_no)); } ExcelBomInfo.prd_knd = prdt.knd; if (IsTopLevelBom == true) { if (ExcelBomInfo.bom_no.IsNullOrEmpty()) { ExcelBomInfo.bom_no = ExcelBomInfo.prd_no + "->"; } } else { //查 HeaderRow in_no ? string headerBomNo = ""; headerBomNo = ExcelBomInfo.HeadRow.GetStingWithTry("id_no"); var headerBomInDB = GetBom(ExcelBomInfo.prd_no, headerBomNo); if (headerBomInDB != null) { ExcelBomInfo.bom_no = headerBomInDB.bom_no; } else { //货号初次新建BOM(Excel上确认了Bom代号) ExcelBomInfo.bom_no = headerBomNo.IsNotEmpty() ? headerBomNo : ExcelBomInfo.prd_no + "->"; } } foreach (var item in ExcelBomInfo.BodyInfos) { string belongBomNo = ""; var belongDataRow = ExcelBomInfo.BodyRows.Where(o => o.GetSting("prd_no") == item.prd_no).First(); belongBomNo = belongDataRow.GetStingWithTry("id_no"); var prdt2 = DB.Queryable <PrdtModel>().Where(o => o.prd_no == item.prd_no).ToList().FirstOrDefault(); if (prdt2 == null) { throw new MissPrdtException("货品[{0}]不存在!".FormatOrg(ExcelBomInfo.prd_no)); } item.prd_knd = prdt.knd; //比对Excel中的Bom与系统是否一致 (prd_no + qty ) var subBomInDB = GetBom(item.prd_no, belongBomNo); if (subBomInDB != null && false == TFBomIsSame(subBomInDB.TF_BOMS, item.BodyRows)) { item.bom_no = subBomInDB.bom_no; if (IsCheck == true) { item.HeadRow["check_result"] = "与系统BOM[{0}]不一致".FormatOrg(subBomInDB.bom_no); item.HeadRow["check_err_code"] = "BOM_DIFFERENT"; item.HeadRow["check_ask_radio"] = "0"; //1.覆盖 2.升级BOM版本 return(false); } //如果无冲突处理方式 if (item.HeadRow.GetSting("check_ask_radio").IsNullOrEmpty() || item.HeadRow.GetSting("check_ask_radio").GetInt() <= 0) { throw new MissPrdtException("Bom[{0}]未选择冲突处理方式!".FormatOrg(ExcelBomInfo.prd_no)); } } if (subBomInDB != null) { item.bom_no = subBomInDB.bom_no; } else { //货号初次新建BOM item.bom_no = belongBomNo.IsNotEmpty() ? belongBomNo : item.prd_no + "->"; } foreach (var item2 in item.BodyInfos) { bool isOk = ValidateSubBom(item2, false, IsCheck); if (isOk == false) { return(false); } } } return(true); }