Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        /// <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);
        }