using ICS.WCF.Base; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.ServiceModel; using System.Text; using UFSoft.UBF.Service; using UFSoft.UBF.Util.Context; using www.ufida.org.EntityData; namespace UFIDA.ISV.Create_U9_ItemMaster { public class Create_U9_ItemMaster { public string orgID = ""; public OperationResult CustCreateItemMaster(List itemList) { OperationResult result = new OperationResult(); //U9.PM.PO.POShipLine.CreatePOShipLineDefault(); #region 服务调用框架结构 //实例化代理类 UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient client = new UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient(); //服务返回结果 UFIDAU9CBOSCMItemItemMasterData[] returnItems; //返回异常信息,目前还没有使用此属性 UFSoft.UBF.Exceptions.MessageBase[] returnMsg; //上下文信息 object context; //传入 参数 string[] splitBy = new string[] { }; try { //给上下文信息赋值 result.ItemCode = ""; //给传入参数赋值 UFIDAU9ISVItemItemMasterDTOData[] itemDatas = setDataForItem(itemList); context = CreateContextObj(orgID); UFIDAU9CBOPubControllerContextDTOData custContext = CreateContextDto(); //服务调用 (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue; (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue; returnItems = client.Do(out returnMsg, context, itemDatas.ToArray(), custContext); foreach (ItemMasterDataClass data in itemList) { StringBuilder str = new StringBuilder(); str.AppendLine("创建U9料号"); str.AppendLine("料号:" + data.Code); str.AppendLine("品名:" + data.ItemName); str.AppendLine("料品分类:" + data.ItemCategory); str.AppendLine("料品规格:" + data.SPEC); str.AppendLine("组织:" + ConfigurationManager.AppSettings["orgCode"].ToString()); str.AppendLine("结果:" + "True"); //Appconfig.WriteLogFile(str.ToString(), "创建U9料号"); result.ItemCode += data.Code + "|"; } result.IsSuccess = true; result.MESSAGE = "料品创建成功"; return result; //return returnItems; } catch (Exception ex) { //异常信息捕获 string Message = GetExceptionMessage(ex); StringBuilder str = new StringBuilder(); foreach (ItemMasterDataClass data in itemList) { str.AppendLine("创建U9料号"); str.AppendLine("料号:" + data.Code); str.AppendLine("品名:" + data.ItemName); str.AppendLine("料品分类:" + data.ItemCategory); str.AppendLine("料品规格:" + data.SPEC); str.AppendLine("组织:" + ConfigurationManager.AppSettings["orgCode"].ToString()); str.AppendLine("结果:" + ""); } str.AppendLine("结果:" + "False"); str.AppendLine("错误:" + GetExceptionMessage(ex)); result.MESSAGE = "料品创建失败"; Appconfig.WriteLogFile(str.ToString(), "创建U9料号"); result.MESSAGE = Message; return result; } #endregion } #region 提取异常信息 /// /// 提取异常信息 /// /// private string GetExceptionMessage(Exception ex) { string faultMessage = "未知错误,请查看ERP日志!"; System.TimeoutException timeoutEx = ex as System.TimeoutException; if (timeoutEx != null) { faultMessage = "访问服务超时,请修改配置信息!"; } else { FaultException faultEx = ex as FaultException; if (faultEx == null) { faultMessage = ex.Message; } else { ServiceException serviceEx = faultEx.Detail; if (serviceEx != null && !string.IsNullOrEmpty(serviceEx.Message) && !serviceEx.Message.Equals("fault", StringComparison.OrdinalIgnoreCase)) { // 错误信息在faultEx.Message中,请提取, // 格式为"Fault:料品不能为空,请录入\n 在....." int startIndex = serviceEx.Message.IndexOf(":"); int endIndex = serviceEx.Message.IndexOf("\n"); if (endIndex == -1) endIndex = serviceEx.Message.Length; if (endIndex > 0 && endIndex > startIndex + 1) { faultMessage = serviceEx.Message.Substring(startIndex + 1, endIndex - startIndex - 1); } else { faultMessage = serviceEx.Message; } } } } return faultMessage; } #endregion public class OperationResult { public bool IsSuccess { get; set; } public string MESSAGE { get; set; } public string ItemCode { get; set; } } #region 给上下文信息赋值 /// /// 给上下文信息赋值 /// /// private UFIDAU9CBOPubControllerContextDTOData CreateContextDto() { // 实例化应用上下文对象 UFIDAU9CBOPubControllerContextDTOData thContext = new UFIDAU9CBOPubControllerContextDTOData(); thContext.m_orgID = long.Parse(ConfigurationManager.AppSettings["orgID"].ToString()); thContext.m_cultureName = ConfigurationManager.AppSettings["cultureName"].ToString(); thContext.m_entCode = ConfigurationManager.AppSettings["enterpriseID"].ToString(); thContext.m_orgCode = ConfigurationManager.AppSettings["orgCode"].ToString(); thContext.m_userCode = ConfigurationManager.AppSettings["userCode"].ToString(); thContext.m_userID = long.Parse(ConfigurationManager.AppSettings["userID"].ToString()); return thContext; } #endregion #region 给上下文信息赋值1 /// /// 给上下文信息赋值 /// /// private ThreadContext CreateContextObj(string OrgID) { // 实例化应用上下文对象 ThreadContext thContext = new ThreadContext(); System.Collections.Generic.Dictionary ns = new Dictionary(); ns.Add("OrgID", ConfigurationManager.AppSettings["orgID"].ToString()); //ns.Add("OrgID", long.Parse(OrgID)); ns.Add("UserID", ConfigurationManager.AppSettings["userID"].ToString()); ns.Add("UserCode", ConfigurationManager.AppSettings["userCode"].ToString()); ns.Add("Datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); ns.Add("CultureName", ConfigurationManager.AppSettings["cultureName"].ToString()); ns.Add("EnterpriseID", ConfigurationManager.AppSettings["enterpriseID"].ToString()); ns.Add("DefaultCultureName", ConfigurationManager.AppSettings["cultureName"].ToString()); thContext.nameValueHas = ns; return thContext; } #endregion private UFIDAU9ISVItemItemMasterDTOData[] setDataForItem(List datas) { List items = new List(); foreach (ItemMasterDataClass data in datas) { // string orgsql = @"select ID from Base_Organization // where Code='{0}' "; // orgsql = string.Format(orgsql, data.OrgCode); // DataTable orgdt = DBhlper.Query(orgsql, Appconfig.GetU9ConnStr()); // if (orgdt.Rows.Count == 0) // { // throw new Exception("组织编码不存在!"); // } // else // { // orgID = orgdt.Rows[0]["ID"].ToString(); // } UFIDAU9ISVItemItemMasterDTOData item = new UFIDAU9ISVItemItemMasterDTOData(); //主分类 item.m_mainItemCategory = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); item.m_mainItemCategory.m_code = data.ItemCategory; item.Description = data.Description; //料号 item.m_code = data.Code; item.m_code1 = data.Code1; item.m_code2 = data.Code2; UFIDAU9CBOPubControllerCommonArchiveDataDTOData m_org = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); m_org.m_code = ConfigurationManager.AppSettings["orgCode"].ToString(); UFIDAU9CBOPubControllerCommonArchiveDataDTOData uom = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); uom.m_code = data.InventoryUOM;//件 //AssetCategory item.m_assetCategory = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); item.m_assetCategory.m_code = data.FinanceType;// "C02"; string InventoryUOM = ""; string sqlWH = @"select id from Base_UOM where Code='"+data.InventoryUOM+"' "; sqlWH = string.Format(sqlWH); DataTable _dtWH = DBhlper.Query(sqlWH, Appconfig.GetU9ConnStr()); string WHCode = string.Empty; if (_dtWH != null && _dtWH.Rows.Count > 0) { InventoryUOM = _dtWH.Rows[0][0].ToString(); } if (!string.IsNullOrWhiteSpace(InventoryUOM)) uom.m_iD = Convert.ToInt64(InventoryUOM); else throw new Exception("单位编码未存在!"); item.m_sPECS = data.SPEC;//规格 #region 料品主档DTO item.m_costCurrency = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData(); item.m_costCurrency.m_code = "C001";//成本币种 //物料自动审核 20190219 item.m_effective = new UFIDAU9BasePropertyTypesEffectiveData(); item.m_effective.m_isEffective = true; item.m_effective.m_effectiveDate = data.Effective_EffectiveDate;//DateTime.Now.AddDays(-1); //20190222 item.m_effective.m_disableDate = DateTime.Parse("9999.12.31"); item.m_org = m_org; item.m_code = data.Code; item.m_name = data.ItemName; item.m_itemFormAttribute = 10; if (data.ItemFormAttribute == "MakePart") { item.m_itemFormAttribute = 10; } if (data.ItemFormAttribute == "FeeItem") { item.m_itemFormAttribute = 22; } if (data.ItemFormAttribute == "PurchasePart") { item.m_itemFormAttribute = 9; } if (data.ItemFormAttribute == "SubcontractPart") { item.m_itemFormAttribute = 4; } item.m_isInventoryEnable = true; item.m_isPurchaseEnable = true; item.m_isSalesEnable = true; item.m_isBuildEnable = true; item.m_isOutsideOperationEnable = true; item.m_isMRPEnable = true; item.m_isBOMEnable = true; item.m_inventoryUOM = uom; item.m_inventorySecondUOM = uom; item.m_salesUOM = uom; item.m_purchaseUOM = uom; item.m_priceUOM = uom; item.m_manufactureUOM = uom; item.m_materialOutUOM = uom; item.m_costUOM = uom; item.m_converRatioRule = 0;//标准转换率 item.m_standardPotency = -1;//标准成分 item.m_standardGrade = -1;//标准等级 item.m_startGrade = -1;//起始等级 item.m_startPotency = -1;//起始成分 item.m_endGrade = -1; item.m_endPotency = -1; item.m_itemForm = -1; item.m_boundedCategory = -1; #endregion //料品库存信息DTO UFIDAU9ISVItemItemInvInfoDTOData m_invInfo = new UFIDAU9ISVItemItemInvInfoDTOData(); m_invInfo.m_inventoryPlanningMethod = 4;// MRP规划 m_invInfo.m_purchaseControlMode = 1;//最高存量限制 m_invInfo.m_isInvCalculateBySeiban = true;//番号存货核算 m_invInfo.m_reserveMode = -1;//预留方式 m_invInfo.m_inventoryPlanTime = -1;//规划时机 m_invInfo.m_invToPurMode = 1;//规划转采购方式 m_invInfo.m_safetyStockType = 0;//安全存量法 m_invInfo.m_supplyMethod = -1;//补货方法 m_invInfo.m_lotControlMode = 2;//批号控制 m_invInfo.m_barcodeMakeMode = 0;//条码模式 m_invInfo.m_barcodeTrackMode = 0;//追踪方式 item.m_inventoryInfo = m_invInfo; //料品采购信息DTO ItemPurchaseInfoDTO UFIDAU9ISVItemItemPurchaseInfoDTOData m_purchaseInfo = new UFIDAU9ISVItemItemPurchaseInfoDTOData(); m_purchaseInfo.m_quotaSupplier = 1;//仅大批量采购 m_purchaseInfo.m_receiptType = 0;//收货至仓库 m_purchaseInfo.m_inquireFixedPeriod = 0; m_purchaseInfo.m_inquireRule = -1; m_purchaseInfo.m_purchaseQuotaMode = 1; m_purchaseInfo.m_statisticPeriod = -1; m_purchaseInfo.m_budgetControlType = -1;//预算控制方式 m_purchaseInfo.m_isConfirmOnFinished = false; //可事后定价 m_purchaseInfo.m_isControlPOItemFree = false; //订货控制自由项 m_purchaseInfo.m_isPURtnTradePathModify = true;//采购退货贸易路径可改 m_purchaseInfo.m_isPUTradePathModify = true;//采购贸易路径可改 m_purchaseInfo.m_maxLimitPriceSource = 0;//最高限价来源 m_purchaseInfo.m_priceSource = 0;//取价来源 m_purchaseInfo.m_quotaSupplier = 1;//配额供应商 //m_purchaseInfo.m_receiptMode = 3;//收货程序 m_purchaseInfo.m_receiptMode = 0;//收货程序 m_purchaseInfo.m_returnPriceSource = 2;//退货取价来源 m_purchaseInfo.m_chargeAssignMode = 0;//费用分配 m_purchaseInfo.m_chargeProcessMode = 1;//费用料处理 m_purchaseInfo.m_dangerType = 0;//危险类别 m_purchaseInfo.m_receiptType = 0;//收货方式 item.m_purchaseInfo = m_purchaseInfo; //料品销售信息DTO ItemSaleInfoDTO UFIDAU9ISVItemItemSaleInfoDTOData m_saleInfo = new UFIDAU9ISVItemItemSaleInfoDTOData(); m_saleInfo.m_limitPriceMode = 0;//定义绝对价格 m_saleInfo.m_supplySource = 4;//当前组织 m_saleInfo.m_familyLayer = -1;//系列件层级 m_saleInfo.m_isSDRtnTradePathModify = true;//销售退货贸易路径可改 m_saleInfo.m_isSDTradePathModify = true;//销售贸易路径可改 m_saleInfo.m_demandTransType = 4;//供应类型 m_saleInfo.m_isReturnable = true;//可退换 m_saleInfo.m_isRMAAllowModify = true;//退货可改 m_saleInfo.m_limitPriceBy = -1;//限价依据 item.m_saleInfo = m_saleInfo; //料品生产信息DTO ItemMFGInfoDTO UFIDAU9ISVItemItemMFGInfoDTOData m_mfgInfo = new UFIDAU9ISVItemItemMFGInfoDTOData(); m_mfgInfo.m_buildShrinkageRate = 1M;//产出率 m_mfgInfo.m_isSueOverType = -1;//备料超额类型:0 比例 1 数量 m_mfgInfo.m_buildQuanSelectType = 0;//依需求量 m_mfgInfo.m_operateType = -1;//排产方式 item.m_mfgInfo = m_mfgInfo; //料品MRP(计划)信息DTO ItemMRPInfoDTO UFIDAU9ISVItemItemMRPInfoDTOData m_mrpInfo = new UFIDAU9ISVItemItemMRPInfoDTOData(); m_mrpInfo.m_forecastContorlType = 2;//无 m_mrpInfo.m_mRPPlanningType = 1;//MPS m_mrpInfo.m_planningTimeFenceRuleType = 0;//客户订单 m_mrpInfo.m_planningTimeFence = 0;//累计汇总提前期 m_mrpInfo.m_demandTimeFenceRuleType = 0;//客户订单 m_mrpInfo.m_demandTimeFence = 0;//累计汇总提前期 m_mrpInfo.m_releaseTimeFence = 0;//累计汇总提前期 item.m_mrpInfo = m_mrpInfo; //UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData m_descFlexField = new UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData(); //m_descFlexField.m_privateDescSeg2 = data.ValveMaterial;//材质 //item.m_descFlexField = m_descFlexField; //m_descFlexField.m_privateDescSeg15 = data.PartType; items.Add(item); } return items.ToArray(); } #region 时间戳方法 private DateTime TimestampToDateTime(long timestamp) { DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); long lTime = timestamp * 10000000; TimeSpan nowTimeSpan = new TimeSpan(lTime); DateTime resultDateTime = dateTimeStart.Add(nowTimeSpan); return resultDateTime; } #endregion } }