Exemplo n.º 1
0
        private List <SqlCommand> DoImportToBom(BomInfo BomInfo, List <BomFormatDetail> ExcelFormatDtls, bool IsTopLevelBom)
        {
            //导入到BOM上,
            //   要不要区分开 T8, Sunlike 不同,做工厂模式? 答:不用区分,使用:DefaultFieldValue
            //   先从 顶->叶  还是 叶->顶生成 Bom?
            //          非顶级的,要看 子BOM是否存在,如果已存在则不用生成子BOM
            //   字段 SYS + DefaultFieldValue + Z
            //          SYS + DefaultFieldValue冲突时 考虑优先级
            //      防呆:如何BOM已存在, BOM 是否本人的?  是否已使用[MRP, MO]
            //      In_NO 要不要计算?
            List <SqlCommand> cmds  = new List <SqlCommand>();
            string            bomNo = BomInfo.bom_no;

            if (bomNo.IsNullOrEmpty())
            {
                throw new Exception("配方号[{0}]为空!".FormatOrg(BomInfo.HeadRow.GetSting("prd_no")));
            }
            bool isNew = Service.GetBom(BomInfo.prd_no, BomInfo.bom_no) == null ? true : false;

            if (IsTopLevelBom == true && isNew == false)
            {
                isNew = true;
                //二次导入时,重构顶级Bom
                cmds.AddRange(removeBom(bomNo));
            }

            //2019-12-25 考虑升级BOM与覆盖BOM
            if (IsTopLevelBom == false && isNew == false)
            {
                if (BomInfo.HeadRow.GetSting("check_ask_radio").IsNotEmpty() &&
                    BomInfo.HeadRow.GetSting("check_ask_radio").GetInt() > 0)
                {
                    //1.覆盖 2.升级BOM版本
                    int bomConflictHandleWay = BomInfo.HeadRow.GetSting("check_ask_radio").GetInt();
                    if (bomConflictHandleWay == 1)
                    {
                        isNew = true;
                        cmds.AddRange(removeBom(bomNo));
                    }
                    else
                    {
                        throw new Exception("BOM冲突未处理!");
                    }
                    //else
                    //{   有问题,如果系统上存在 多个BOM,也会报错
                    //    //升级BOM版本,找出最新的版本号 + 1
                    //    var maxPF_Bom = Service.GetMaxPF_Bom(BomInfo.prd_no);
                    //    int maxPF = maxPF_Bom == null ? 2 : ++maxPF_Bom.pf_no;

                    //}
                }
            }


            List <SqlCommand> thisCmds = new List <SqlCommand>();

            if (isNew == true)
            {
                thisCmds.AddRange(createBomHeaderCmd(bomNo, BomInfo, BomInfo.HeadRow, ExcelFormatDtls));
            }

            foreach (BomInfo item in BomInfo.BodyInfos)
            {
                cmds.AddRange(DoImportToBom(item, ExcelFormatDtls, false));
            }

            if (isNew == true)
            {
                thisCmds.AddRange(createBomBodyCmd(bomNo, BomInfo.BodyRows, ExcelFormatDtls));
            }

            cmds.AddRange(thisCmds);
            return(cmds);
        }