Inheritance: MesBomDetailBase
 public virtual void UpdateBomDetail(MesBomDetail entity)
 {
     entityDao.UpdateBomDetail(entity);
 }
 public virtual void CreateBomDetail(MesBomDetail entity)
 {
     entityDao.CreateBomDetail(entity);
 }
 public virtual void DeleteBomDetail(MesBomDetail entity)
 {
     entityDao.DeleteBomDetail(entity);
 }
 public IList<MesBom> GetRelatedBomDetail(MesBomDetail mesBomDetail)
 {
     List<MesBom> mesBomList = new List<MesBom>();
     if (mesBomDetail.Item.IsMes)
     {
         mesBomList.Add(mesBomDetail.Bom);
     }
     IList<MesBomDetail> mesBomDetailList = this.GetAllBomDetailList(null, mesBomDetail.Bom.Code);
     if (mesBomDetailList != null && mesBomDetailList.Count > 0)
     {
         foreach (MesBomDetail mb in mesBomDetailList)
         {
             mesBomList.AddRange(GetRelatedBomDetail(mb));
         }
     }
     return mesBomList;
 }
        public List<MesBomDetail> GetBomDetailList(MesBom mesBom)
        {
            MesBom topBom = mesBomMgr.LoadBom(mesBom.Code, true);
            List<MesBomDetail> mesBomDetailList = new List<MesBomDetail>();
            if (topBom.BomDetails != null && topBom.BomDetails.Count > 0)
            {
                foreach (MesBomDetail mesBomDetail in topBom.BomDetails)
                {
                    if (mesBomDetail.StructureType == BusinessConstants.CODE_MASTER_BOM_DETAIL_TYPE_VALUE_N)
                    {
                        mesBomDetailList.Add(mesBomDetail);
                    }
                    else if (mesBomDetail.StructureType == BusinessConstants.CODE_MASTER_BOM_DETAIL_TYPE_VALUE_X)
                    {
                        List<MesBomDetail> xBomDetail = GetBomDetailList(mesBomDetail.Bom.Code, mesBomDetail.Item.Code);
                        mesBomDetailList.AddRange(xBomDetail);
                    }
                }
            }

            var query = mesBomDetailList.Select(l => new
            {
                Bom = l.Bom,
                Item = l.Item,
                RateQty = (from m in mesBomDetailList
                           where m.Bom.Code.Trim().ToUpper() == l.Bom.Code.Trim().ToUpper()
                           && m.Item.Code.Trim().ToUpper() == l.Item.Code.Trim().ToUpper()
                           && m.IsActive == l.IsActive
                           select m.RateQty).Sum(),
                IsActive = l.IsActive
            }).Distinct();

            List<MesBomDetail> list = new List<MesBomDetail>();
            foreach (var item in query)
            {
                MesBomDetail mesBomDetail = new MesBomDetail();
                mesBomDetail.Bom = item.Bom;
                mesBomDetail.Item = item.Item;
                mesBomDetail.RateQty = item.RateQty;
                mesBomDetail.IsActive = item.IsActive;
                list.Add(mesBomDetail);
            }
            return list;
        }
        public List<MesBomDetail> GetBomDetailList(string bomCode, string itemCode)
        {
            List<MesBomDetail> mesBomDetailList = new List<MesBomDetail>();
            IList<MesBomDetail> bomDetailList = GetNextLevelBomDetail(itemCode);
            foreach (MesBomDetail scmsBomDetail in bomDetailList)
            {
                if (scmsBomDetail.StructureType == BusinessConstants.CODE_MASTER_BOM_DETAIL_TYPE_VALUE_N)
                {
                    MesBomDetail bomDetail = new MesBomDetail();
                    bomDetail.Bom = mesBomMgr.LoadBom(bomCode);
                    bomDetail.Item = scmsBomDetail.Item;
                    bomDetail.RateQty = scmsBomDetail.RateQty;
                    bomDetail.IsActive = scmsBomDetail.IsActive;
                    mesBomDetailList.Add(bomDetail);

                }
                else if (scmsBomDetail.StructureType == BusinessConstants.CODE_MASTER_BOM_DETAIL_TYPE_VALUE_X)
                {
                    List<MesBomDetail> xBomDetailList = GetBomDetailList(bomCode, scmsBomDetail.Item.Code);
                    mesBomDetailList.AddRange(xBomDetailList);
                }
            }

            return mesBomDetailList;
        }
        private object Deserialize(DssImportHistory dssImportHistory, bool isUpdate)
        {
            Item bomItem = this.itemMgr.CheckAndLoadItem(dssImportHistory[1]);//bom头
            Item item = this.itemMgr.CheckAndLoadItem(dssImportHistory[2]);//零件号
            if (item.IsMes && bomItem.IsMes)
            {
                MesBomDetail mesBomDetail = new MesBomDetail();
                mesBomDetail.Bom = this.LoadMesBom(dssImportHistory[1]);//Bom代码
                mesBomDetail.Item = item;

                mesBomDetail.StartDate = dssImportHistory[4] != null ?
                    DssHelper.GetDate(dssImportHistory[4], BusinessConstants.DSS_SYSTEM_CODE_QAD) : new DateTime(2000, 1, 1);

                if (isUpdate)
                {
                    mesBomDetail.RateQty = decimal.Parse(dssImportHistory[5]);//用量
                    mesBomDetail.StructureType = this.GetStructureType(dssImportHistory[6], BusinessConstants.DSS_SYSTEM_CODE_QAD);//类型

                    if (dssImportHistory[8] != null) mesBomDetail.EndDate = DssHelper.GetDate(dssImportHistory[8], BusinessConstants.DSS_SYSTEM_CODE_QAD);//结束日期
                }
                return mesBomDetail;
            }
            else
            {
                BomDetail bomDetail = new BomDetail();
                bomDetail.Bom = this.LoadBom(dssImportHistory[1]);//Bom代码
                bomDetail.Item = item;//零件号
                bomDetail.Reference = dssImportHistory[3];//参考
                bomDetail.StartDate = dssImportHistory[4] != null ?
                    DssHelper.GetDate(dssImportHistory[4], BusinessConstants.DSS_SYSTEM_CODE_QAD) : new DateTime(2000, 1, 1);

                if (isUpdate)
                {
                    bomDetail.RateQty = decimal.Parse(dssImportHistory[5]);//用量
                    bomDetail.StructureType = this.GetStructureType(dssImportHistory[6], BusinessConstants.DSS_SYSTEM_CODE_QAD);//类型

                    if (dssImportHistory[8] != null) bomDetail.EndDate = DssHelper.GetDate(dssImportHistory[8], BusinessConstants.DSS_SYSTEM_CODE_QAD);//结束日期

                    //回冲方式从零件上取
                    bomDetail.BackFlushMethod = bomDetail.Item.BackFlushMethod;
                    bomDetail.ScrapPercentage = decimal.Parse(dssImportHistory[10]) / 100;//废品百分比

                    bomDetail.Operation = int.Parse(dssImportHistory[12]);

                }

                #region 默认值
                bomDetail.Uom = bomDetail.Item.Uom;
                bomDetail.Priority = 0;
                bomDetail.NeedPrint = true;
                bomDetail.IsShipScanHu = false;

                #endregion

                return bomDetail;
            }
        }
 public virtual void UpdateBomDetail(MesBomDetail entity)
 {
     Update(entity);
 }
 public virtual void DeleteBomDetail(MesBomDetail entity)
 {
     Delete(entity);
 }
 public virtual void CreateBomDetail(MesBomDetail entity)
 {
     Create(entity);
 }