//[OperationBehavior] public System.String DoEx(ICommonDataContract commonData, System.String contextInfo, System.String bOMInfo) { this.CommonData = commonData; try { BeforeInvoke("UFIDA.U9.Cust.ZX.BaiLiSV.CreateBOMSV"); CreateBOMSV objectRef = new CreateBOMSV(); objectRef.ContextInfo = contextInfo; objectRef.BOMInfo = bOMInfo; //处理返回类型. System.String result = objectRef.Do(); return(result); return(result); } catch (System.Exception e) { DealException(e); throw; } finally { FinallyInvoke("UFIDA.U9.Cust.ZX.BaiLiSV.CreateBOMSV"); } }
public override object Do(object obj) { CreateBOMSV bpObj = (CreateBOMSV)obj; //get business operation context is as follows //IContext context = ContextManager.Context //auto generating code end,underside is user custom code //and if you Implement replace this Exception Code... throw new NotImplementedException(); }
public override object Do(object obj) { CreateBOMSV bpObj = (CreateBOMSV)obj; StringBuilder strbResult = new StringBuilder(); #region 基础校验&提前检查 if (string.IsNullOrEmpty(bpObj.BOMInfo)) { logger.Error(string.Format("创建BOM失败:传入参数BOMInfo为空。")); strbResult.AppendFormat(string.Format("<ResultInfo error={0} />", "创建BOM失败:传入参数BOMInfo为空。")); return(strbResult.ToString()); } BOMInfo bominfoAll = new BOMInfo(); ContextInfo cxtInfo = new ContextInfo(); try { bominfoAll = XmlSerializerHelper.XmlDeserialize <BOMInfo>(bpObj.BOMInfo, Encoding.Unicode); cxtInfo = XmlSerializerHelper.XmlDeserialize <ContextInfo>(bpObj.ContextInfo, Encoding.Unicode); } catch (Exception ex) { logger.Error(string.Format("反序列化BOMInfo失败:{0}", bpObj.BOMInfo)); strbResult.AppendFormat(string.Format("<ResultInfo error={0} />", string.Format("反序列化BOMInfo失败:{0}", bpObj.BOMInfo))); return(strbResult.ToString()); } if (bominfoAll.Masters.Count <= 0) { logger.Error(string.Format("传入的BOMInfo中没有BOM母件信息")); strbResult.AppendFormat(string.Format("<ResultInfo error={0} />", "传入的BOMInfo中没有BOM母件信息")); return(strbResult.ToString()); } Organization beOrgContext = Organization.FindByCode(cxtInfo.OrgCode);//原历史版本 #endregion ImportBOMSv svModify = new ImportBOMSv(); List <BOMMasterDTO4CreateSv> lstBOMMasterModifyDTO = new List <BOMMasterDTO4CreateSv>(); svModify.IsThrowEx = true; CreateBOMSv svCreate = new CreateBOMSv(); List <BOMMasterDTO4CreateSv> lstBOMMasterCreateDTO = new List <BOMMasterDTO4CreateSv>(); svCreate.IsThrowEx = true; DeletePartBOMSv svDelPart = new DeletePartBOMSv(); List <BOMMasterDTO4CreateSv> lstBOMMasterDelPartDTO = new List <BOMMasterDTO4CreateSv>(); svDelPart.IsThrowEx = true; User beUser = User.Finder.FindByID(cxtInfo.UserID); ContextDTO dtoContext = new ContextDTO(); dtoContext.CultureName = cxtInfo.CultureName; // "zh-CN"; dtoContext.UserCode = beUser.Code; //默认:系统管理员admin dtoContext.EntCode = cxtInfo.EnterpriseCode; // "van0323";//测试默认公司:van0323.正式使用请根据需要指定。 dtoContext.OrgCode = cxtInfo.OrgCode; // svCreate.ContextDTO = dtoContext; svModify.ContextDTO = dtoContext; svDelPart.ContextDTO = dtoContext; Int64 l = 1; try { foreach (var bomMaster in bominfoAll.Masters) { #region 校验从PLM传过来的组织、物料是否有效 if (ValidateNullValue(bomMaster, beOrgContext)) { continue; } ItemMaster beItemMaster = ItemMaster.Finder.Find("Code=@code and Org=@org and Effective.IsEffective=1 and Effective.DisableDate >= @nowdate1 and Effective.EffectiveDate <= @nowdate2", new OqlParam[] { new OqlParam(bomMaster.ItemMasterCode), new OqlParam(beOrgContext.ID), new OqlParam(DateTime.Now.Date.ToShortDateString()), new OqlParam(DateTime.Now.Date.ToShortDateString()), new OqlParam(DateTime.Now.Date.ToShortDateString()) }); if (beItemMaster == null) { strbError.AppendLine(string.Format(strErrorItem, bomMaster.ItemMasterCode, "", string.Format("BOMInfo中第{0}项物料编码{1}在组织{2}无法找到!", l.ToString(), bomMaster.ItemMasterCode, beOrgContext.Code))); continue; } if (!beItemMaster.IsBOMEnable) { strbError.AppendLine(string.Format(strErrorItem, bomMaster.ItemMasterCode, "", "母件不允许建BOM。")); continue; } //加入料品状态必须为“已核准”的条件:State=2 if (beItemMaster.State != ItemStateEnum.Verified) { strbError.AppendLine(string.Format(strErrorItem, bomMaster.ItemMasterCode, "", string.Format("BOMInfo中第{0}项物料编码{1}料品状态不是“已核准状态”!", l.ToString(), bomMaster.ItemMasterCode))); continue; } bool bFor = false; foreach (var bomComp in bomMaster.Components) { ItemMaster beItemComponent = ItemMaster.Finder.Find("Code=@code and Org=@org and Effective.IsEffective=1 and Effective.DisableDate >= @nowdate1 and Effective.EffectiveDate <= @nowdate2", new OqlParam[] { new OqlParam(bomComp.ItemCode), new OqlParam(beOrgContext.ID), new OqlParam(DateTime.Now.Date.ToShortDateString()), new OqlParam(DateTime.Now.Date.ToShortDateString()) }); if (beItemComponent == null) { strbError.AppendLine(string.Format(strErrorItem, bomMaster.ItemMasterCode, bomComp.ItemCode, string.Format("第{0}项子件物料编码ItemCode{1}在组织{2}无法找到!", l.ToString(), bomComp.ItemCode, beOrgContext.Code))); bFor = true;//当子项物料无法找到异常时,上级的for循环跳转到下一条记录。 } if (beItemComponent.State != ItemStateEnum.Verified) { strbError.AppendLine(string.Format(strErrorItem, bomMaster.ItemMasterCode, "", string.Format("第{0}项子件物料编码{1}料品状态不是“已核准状态”!", l.ToString(), bomComp.ItemCode))); bFor = true; } } //当子项物料无法找到异常时,上级的for循环跳转到下一条记录。 if (bFor) { continue; } #endregion #region 校验传入的BOM是否存在.如果不存在,则转入到BOM创建服务CreateBOMSv中。 //检查上下文组织下料号、BOM种类(自制/委外)、版本号是否存在。一旦存在,则使用修改BOM服务。 UFIDA.U9.CBO.MFG.BOM.BOMMaster beBOMMaster = UFIDA.U9.CBO.MFG.BOM.BOMMaster.Finder.Find("Org=@org and ItemMaster=@item and BomType = @bomtype and BOMVersionCode = @bomVersion ", new OqlParam[] { new OqlParam(beOrgContext.ID), new OqlParam(beItemMaster.ID), new OqlParam(bomMaster.BOMType), new OqlParam(bomMaster.BOMVersionCode) }); if (beBOMMaster == null) { BOMMasterDTO4CreateSv dtoMasterCreate = CreateBOMMasterDTO(bomMaster, beOrgContext); if (dtoMasterCreate != null) { lstBOMMasterCreateDTO.Add(dtoMasterCreate); } continue; } else { #region 若存在,则转入到BOM修改服务ImportBOMSv中。 BOMMasterDTO4CreateSv dtoMasterModify = ModifyBOMMasterDTO(bomMaster, beBOMMaster, beOrgContext); if (dtoMasterModify != null) { lstBOMMasterModifyDTO.Add(dtoMasterModify); } #endregion } #endregion #region 若存在,检查是否存在需要删除的子件加入到DeleteBOMPartSv中。 BOMMasterDTO4CreateSv dtoMasterDelPart = DelBOMPartDTO(bomMaster, beBOMMaster); if (dtoMasterDelPart != null) { lstBOMMasterDelPartDTO.Add(dtoMasterDelPart); } #endregion l++; } //} if (lstBOMMasterCreateDTO.Count > 0) { svCreate.BOMMasterDTOList = lstBOMMasterCreateDTO; svCreate.ContextDTO = dtoContext; List <LogDTO4CreateSv> lstBOMLog = new List <LogDTO4CreateSv>(); lstBOMLog = svCreate.Do(); foreach (var itemLog in lstBOMLog) { if (itemLog.IsOperationSuccess) { #region 标准BOMAPI目前不提供成本卷积和子件收货审核属性赋值.这里补充处理 string strUpdateIsCostRoll = string.Format("update vv set vv.IsCostRoll = 1 from CBO_BOMMaster vv where vv.ID = {0} and vv.BOMType = 0", itemLog.BOMMasterDTO.BOMMasterID.ToString()); string strUpdateRCVApproved = string.Format("update uu set uu.RCVApproved = 1 from CBO_BOMComponent uu " + "join CBO_BOMMaster vv on vv.ID = uu.BOMMaster where vv.ID = {0} and vv.BOMType = 1", itemLog.BOMMasterDTO.BOMMasterID.ToString()); //DataAccessor.RunSQL(DatabaseManager.GetCurrentConnection(), strUpdateIsCostRoll, null); DataAccessor.RunSQL(DatabaseManager.GetCurrentConnection(), strUpdateRCVApproved, null); #endregion strbSuccess.AppendLine(string.Format(strInfoItem, itemLog.BOMMasterDTO.ItemMaster.Code)); } else { strbError.AppendLine(string.Format(strErrorItem, itemLog.BOMMasterDTO.ItemMaster.Code, "", string.Format("U9系统创建BOM母件{0}失败:{1}.", itemLog.BOMMasterDTO.ItemMaster.Code, itemLog.ErrorMsg))); } } } if (lstBOMMasterModifyDTO.Count > 0) { svModify.BOMMasterDTOList = lstBOMMasterModifyDTO; svModify.ContextDTO = dtoContext; List <LogDTO4CreateSv> lstBOMLog = new List <LogDTO4CreateSv>(); lstBOMLog = svModify.Do(); foreach (var itemLog in lstBOMLog) { if (itemLog.IsOperationSuccess) { strbSuccess.AppendLine(string.Format(strInfoItem, itemLog.BOMMasterDTO.ItemMaster.Code)); } else { strbError.AppendLine(string.Format(strErrorItem, itemLog.BOMMasterDTO.ItemMaster.Code, "", string.Format("U9系统修改BOM母件{0}失败:{1}.", itemLog.BOMMasterDTO.ItemMaster.Code, itemLog.ErrorMsg))); } } } if (lstBOMMasterDelPartDTO.Count > 0) { svDelPart.BOMMasterDTOList = lstBOMMasterDelPartDTO; svDelPart.ContextDTO = dtoContext; List <LogDTO4CreateSv> lstBOMLog = new List <LogDTO4CreateSv>(); svDelPart.Do(); //string strBOM = "<BOM ItemMasterCode=\"{0}\" Description=\"删除子件导入成功!\"/>"; //foreach (var item in lstBOMMasterDelPartDTO) //{ // strbSuccess.AppendLine(string.Format(strBOM, item.ItemMaster.Code)); //} } strbResult.AppendLine("<ResultInfo>"); strbResult.AppendLine(strbError.ToString()); strbResult.AppendLine(strbSuccess.ToString()); strbResult.AppendLine("</ResultInfo>"); } catch (Exception ex) { strbResult.AppendLine(string.Format("<ResultInfo error=\"{0}\">", ex.Message)); strbResult.AppendLine(strbError.ToString()); strbResult.AppendLine("</ResultInfo>"); } return(strbResult.ToString()); }