圣珀
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

433 lines
19 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. using ICS.WCF.Base;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Linq;
  7. using System.ServiceModel;
  8. using System.Text;
  9. using UFSoft.UBF.Service;
  10. using UFSoft.UBF.Util.Context;
  11. using www.ufida.org.EntityData;
  12. namespace UFIDA.ISV.Create_U9_ItemMaster
  13. {
  14. public class Create_U9_ItemMaster
  15. {
  16. public string orgID = "";
  17. public OperationResult CustCreateItemMaster(List<ItemMasterDataClass> itemList)
  18. {
  19. OperationResult result = new OperationResult();
  20. //U9.PM.PO.POShipLine.CreatePOShipLineDefault();
  21. #region 服务调用框架结构
  22. //实例化代理类 UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient
  23. UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient client = new UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient();
  24. //服务返回结果
  25. UFIDAU9CBOSCMItemItemMasterData[] returnItems;
  26. //返回异常信息,目前还没有使用此属性
  27. UFSoft.UBF.Exceptions.MessageBase[] returnMsg;
  28. //上下文信息
  29. object context;
  30. //传入 参数
  31. string[] splitBy = new string[] { };
  32. try
  33. {
  34. //给上下文信息赋值
  35. result.ItemCode = "";
  36. //给传入参数赋值
  37. UFIDAU9ISVItemItemMasterDTOData[] itemDatas = setDataForItem(itemList);
  38. context = CreateContextObj(orgID);
  39. UFIDAU9CBOPubControllerContextDTOData custContext = CreateContextDto();
  40. //服务调用
  41. (client.Endpoint.Binding as BasicHttpBinding).MaxReceivedMessageSize = int.MaxValue;
  42. (client.Endpoint.Binding as BasicHttpBinding).MaxBufferSize = int.MaxValue;
  43. returnItems = client.Do(out returnMsg, context, itemDatas.ToArray(), custContext);
  44. foreach (ItemMasterDataClass data in itemList)
  45. {
  46. StringBuilder str = new StringBuilder();
  47. str.AppendLine("创建U9料号");
  48. str.AppendLine("料号:" + data.Code);
  49. str.AppendLine("品名:" + data.ItemName);
  50. str.AppendLine("料品分类:" + data.ItemCategory);
  51. str.AppendLine("料品规格:" + data.SPEC);
  52. str.AppendLine("组织:" + ConfigurationManager.AppSettings["orgCode"].ToString());
  53. str.AppendLine("结果:" + "True");
  54. //Appconfig.WriteLogFile(str.ToString(), "创建U9料号");
  55. result.ItemCode += data.Code + "|";
  56. }
  57. result.IsSuccess = true;
  58. result.MESSAGE = "料品创建成功";
  59. return result;
  60. //return returnItems;
  61. }
  62. catch (Exception ex)
  63. {
  64. //异常信息捕获
  65. string Message = GetExceptionMessage(ex);
  66. StringBuilder str = new StringBuilder();
  67. foreach (ItemMasterDataClass data in itemList)
  68. {
  69. str.AppendLine("创建U9料号");
  70. str.AppendLine("料号:" + data.Code);
  71. str.AppendLine("品名:" + data.ItemName);
  72. str.AppendLine("料品分类:" + data.ItemCategory);
  73. str.AppendLine("料品规格:" + data.SPEC);
  74. str.AppendLine("组织:" + ConfigurationManager.AppSettings["orgCode"].ToString());
  75. str.AppendLine("结果:" + "");
  76. }
  77. str.AppendLine("结果:" + "False");
  78. str.AppendLine("错误:" + GetExceptionMessage(ex));
  79. result.MESSAGE = "料品创建失败";
  80. Appconfig.WriteLogFile(str.ToString(), "创建U9料号");
  81. result.MESSAGE = Message;
  82. return result;
  83. }
  84. #endregion
  85. }
  86. #region 提取异常信息
  87. /// <summary>
  88. /// 提取异常信息
  89. /// </summary>
  90. /// <param name="ex"></param>
  91. private string GetExceptionMessage(Exception ex)
  92. {
  93. string faultMessage = "未知错误,请查看ERP日志!";
  94. System.TimeoutException timeoutEx = ex as System.TimeoutException;
  95. if (timeoutEx != null)
  96. {
  97. faultMessage = "访问服务超时,请修改配置信息!";
  98. }
  99. else
  100. {
  101. FaultException<ServiceException> faultEx = ex as FaultException<ServiceException>;
  102. if (faultEx == null)
  103. {
  104. faultMessage = ex.Message;
  105. }
  106. else
  107. {
  108. ServiceException serviceEx = faultEx.Detail;
  109. if (serviceEx != null && !string.IsNullOrEmpty(serviceEx.Message)
  110. && !serviceEx.Message.Equals("fault", StringComparison.OrdinalIgnoreCase))
  111. {
  112. // 错误信息在faultEx.Message中,请提取,
  113. // 格式为"Fault:料品不能为空,请录入\n 在....."
  114. int startIndex = serviceEx.Message.IndexOf(":");
  115. int endIndex = serviceEx.Message.IndexOf("\n");
  116. if (endIndex == -1)
  117. endIndex = serviceEx.Message.Length;
  118. if (endIndex > 0 && endIndex > startIndex + 1)
  119. {
  120. faultMessage = serviceEx.Message.Substring(startIndex + 1, endIndex - startIndex - 1);
  121. }
  122. else
  123. {
  124. faultMessage = serviceEx.Message;
  125. }
  126. }
  127. }
  128. }
  129. return faultMessage;
  130. }
  131. #endregion
  132. public class OperationResult
  133. {
  134. public bool IsSuccess { get; set; }
  135. public string MESSAGE { get; set; }
  136. public string ItemCode { get; set; }
  137. }
  138. #region 给上下文信息赋值
  139. /// <summary>
  140. /// 给上下文信息赋值
  141. /// </summary>
  142. /// <returns></returns>
  143. private UFIDAU9CBOPubControllerContextDTOData CreateContextDto()
  144. {
  145. // 实例化应用上下文对象
  146. UFIDAU9CBOPubControllerContextDTOData thContext = new UFIDAU9CBOPubControllerContextDTOData();
  147. thContext.m_orgID = long.Parse(ConfigurationManager.AppSettings["orgID"].ToString());
  148. thContext.m_cultureName = ConfigurationManager.AppSettings["cultureName"].ToString();
  149. thContext.m_entCode = ConfigurationManager.AppSettings["enterpriseID"].ToString();
  150. thContext.m_orgCode = ConfigurationManager.AppSettings["orgCode"].ToString();
  151. thContext.m_userCode = ConfigurationManager.AppSettings["userCode"].ToString();
  152. thContext.m_userID = long.Parse(ConfigurationManager.AppSettings["userID"].ToString());
  153. return thContext;
  154. }
  155. #endregion
  156. #region 给上下文信息赋值1
  157. /// <summary>
  158. /// 给上下文信息赋值
  159. /// </summary>
  160. /// <returns></returns>
  161. private ThreadContext CreateContextObj(string OrgID)
  162. {
  163. // 实例化应用上下文对象
  164. ThreadContext thContext = new ThreadContext();
  165. System.Collections.Generic.Dictionary<object, object> ns = new Dictionary<object, object>();
  166. ns.Add("OrgID", ConfigurationManager.AppSettings["orgID"].ToString());
  167. //ns.Add("OrgID", long.Parse(OrgID));
  168. ns.Add("UserID", ConfigurationManager.AppSettings["userID"].ToString());
  169. ns.Add("UserCode", ConfigurationManager.AppSettings["userCode"].ToString());
  170. ns.Add("Datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  171. ns.Add("CultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  172. ns.Add("EnterpriseID", ConfigurationManager.AppSettings["enterpriseID"].ToString());
  173. ns.Add("DefaultCultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  174. thContext.nameValueHas = ns;
  175. return thContext;
  176. }
  177. #endregion
  178. private UFIDAU9ISVItemItemMasterDTOData[] setDataForItem(List<ItemMasterDataClass> datas)
  179. {
  180. List<UFIDAU9ISVItemItemMasterDTOData> items = new List<UFIDAU9ISVItemItemMasterDTOData>();
  181. foreach (ItemMasterDataClass data in datas)
  182. {
  183. // string orgsql = @"select ID from Base_Organization
  184. // where Code='{0}' ";
  185. // orgsql = string.Format(orgsql, data.OrgCode);
  186. // DataTable orgdt = DBhlper.Query(orgsql, Appconfig.GetU9ConnStr());
  187. // if (orgdt.Rows.Count == 0)
  188. // {
  189. // throw new Exception("组织编码不存在!");
  190. // }
  191. // else
  192. // {
  193. // orgID = orgdt.Rows[0]["ID"].ToString();
  194. // }
  195. UFIDAU9ISVItemItemMasterDTOData item = new UFIDAU9ISVItemItemMasterDTOData();
  196. //主分类
  197. item.m_mainItemCategory = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  198. item.m_mainItemCategory.m_code = data.ItemCategory;
  199. //料号
  200. item.m_code = data.Code;
  201. item.m_code1 = data.Code1;
  202. item.m_code2 = data.Code2;
  203. UFIDAU9CBOPubControllerCommonArchiveDataDTOData m_org = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  204. m_org.m_code = ConfigurationManager.AppSettings["orgCode"].ToString();
  205. UFIDAU9CBOPubControllerCommonArchiveDataDTOData uom = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  206. uom.m_code = data.InventoryUOM;//件
  207. //AssetCategory
  208. item.m_assetCategory = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  209. item.m_assetCategory.m_code = data.FinanceType;// "C02";
  210. string InventoryUOM = "";
  211. string sqlWH = @"select id from Base_UOM where Code='"+data.InventoryUOM+"' ";
  212. sqlWH = string.Format(sqlWH);
  213. DataTable _dtWH = DBhlper.Query(sqlWH, Appconfig.GetU9ConnStr());
  214. string WHCode = string.Empty;
  215. if (_dtWH != null && _dtWH.Rows.Count > 0)
  216. {
  217. InventoryUOM = _dtWH.Rows[0][0].ToString();
  218. }
  219. if (!string.IsNullOrWhiteSpace(InventoryUOM))
  220. uom.m_iD = Convert.ToInt64(InventoryUOM);
  221. else
  222. throw new Exception("单位编码未存在!");
  223. item.m_sPECS = data.SPEC;//规格
  224. #region 料品主档DTO
  225. item.m_costCurrency = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  226. item.m_costCurrency.m_code = "C001";//成本币种
  227. //物料自动审核 20190219
  228. item.m_effective = new UFIDAU9BasePropertyTypesEffectiveData();
  229. item.m_effective.m_isEffective = true;
  230. item.m_effective.m_effectiveDate = data.Effective_EffectiveDate;//DateTime.Now.AddDays(-1); //20190222
  231. item.m_effective.m_disableDate = DateTime.Parse("9999.12.31");
  232. item.m_org = m_org;
  233. item.m_code = data.Code;
  234. item.m_name = data.ItemName;
  235. item.m_itemFormAttribute = 10;
  236. if (data.ItemFormAttribute == "MakePart")
  237. {
  238. item.m_itemFormAttribute = 10;
  239. }
  240. if (data.ItemFormAttribute == "FeeItem")
  241. {
  242. item.m_itemFormAttribute = 22;
  243. }
  244. if (data.ItemFormAttribute == "PurchasePart")
  245. {
  246. item.m_itemFormAttribute = 9;
  247. }
  248. if (data.ItemFormAttribute == "SubcontractPart")
  249. {
  250. item.m_itemFormAttribute = 4;
  251. }
  252. item.m_isInventoryEnable = true;
  253. item.m_isPurchaseEnable = true;
  254. item.m_isSalesEnable = true;
  255. item.m_isBuildEnable = true;
  256. item.m_isOutsideOperationEnable = true;
  257. item.m_isMRPEnable = true;
  258. item.m_isBOMEnable = true;
  259. item.m_inventoryUOM = uom;
  260. item.m_inventorySecondUOM = uom;
  261. item.m_salesUOM = uom;
  262. item.m_purchaseUOM = uom;
  263. item.m_priceUOM = uom;
  264. item.m_manufactureUOM = uom;
  265. item.m_materialOutUOM = uom;
  266. item.m_costUOM = uom;
  267. item.m_converRatioRule = 0;//标准转换率
  268. item.m_standardPotency = -1;//标准成分
  269. item.m_standardGrade = -1;//标准等级
  270. item.m_startGrade = -1;//起始等级
  271. item.m_startPotency = -1;//起始成分
  272. item.m_endGrade = -1;
  273. item.m_endPotency = -1;
  274. item.m_itemForm = -1;
  275. item.m_boundedCategory = -1;
  276. #endregion
  277. //料品库存信息DTO
  278. UFIDAU9ISVItemItemInvInfoDTOData m_invInfo = new UFIDAU9ISVItemItemInvInfoDTOData();
  279. m_invInfo.m_inventoryPlanningMethod = 4;// MRP规划
  280. m_invInfo.m_purchaseControlMode = 1;//最高存量限制
  281. m_invInfo.m_isInvCalculateBySeiban = true;//番号存货核算
  282. m_invInfo.m_reserveMode = -1;//预留方式
  283. m_invInfo.m_inventoryPlanTime = -1;//规划时机
  284. m_invInfo.m_invToPurMode = 1;//规划转采购方式
  285. m_invInfo.m_safetyStockType = 0;//安全存量法
  286. m_invInfo.m_supplyMethod = -1;//补货方法
  287. m_invInfo.m_lotControlMode = 2;//批号控制
  288. m_invInfo.m_barcodeMakeMode = 0;//条码模式
  289. m_invInfo.m_barcodeTrackMode = 0;//追踪方式
  290. item.m_inventoryInfo = m_invInfo;
  291. //料品采购信息DTO ItemPurchaseInfoDTO
  292. UFIDAU9ISVItemItemPurchaseInfoDTOData m_purchaseInfo = new UFIDAU9ISVItemItemPurchaseInfoDTOData();
  293. m_purchaseInfo.m_quotaSupplier = 1;//仅大批量采购
  294. m_purchaseInfo.m_receiptType = 0;//收货至仓库
  295. m_purchaseInfo.m_inquireFixedPeriod = 0;
  296. m_purchaseInfo.m_inquireRule = -1;
  297. m_purchaseInfo.m_purchaseQuotaMode = 1;
  298. m_purchaseInfo.m_statisticPeriod = -1;
  299. m_purchaseInfo.m_budgetControlType = -1;//预算控制方式
  300. m_purchaseInfo.m_isConfirmOnFinished = false; //可事后定价
  301. m_purchaseInfo.m_isControlPOItemFree = false; //订货控制自由项
  302. m_purchaseInfo.m_isPURtnTradePathModify = true;//采购退货贸易路径可改
  303. m_purchaseInfo.m_isPUTradePathModify = true;//采购贸易路径可改
  304. m_purchaseInfo.m_maxLimitPriceSource = 0;//最高限价来源
  305. m_purchaseInfo.m_priceSource = 0;//取价来源
  306. m_purchaseInfo.m_quotaSupplier = 1;//配额供应商
  307. //m_purchaseInfo.m_receiptMode = 3;//收货程序
  308. m_purchaseInfo.m_receiptMode = 0;//收货程序
  309. m_purchaseInfo.m_returnPriceSource = 2;//退货取价来源
  310. m_purchaseInfo.m_chargeAssignMode = 0;//费用分配
  311. m_purchaseInfo.m_chargeProcessMode = 1;//费用料处理
  312. m_purchaseInfo.m_dangerType = 0;//危险类别
  313. m_purchaseInfo.m_receiptType = 0;//收货方式
  314. item.m_purchaseInfo = m_purchaseInfo;
  315. //料品销售信息DTO ItemSaleInfoDTO
  316. UFIDAU9ISVItemItemSaleInfoDTOData m_saleInfo = new UFIDAU9ISVItemItemSaleInfoDTOData();
  317. m_saleInfo.m_limitPriceMode = 0;//定义绝对价格
  318. m_saleInfo.m_supplySource = 4;//当前组织
  319. m_saleInfo.m_familyLayer = -1;//系列件层级
  320. m_saleInfo.m_isSDRtnTradePathModify = true;//销售退货贸易路径可改
  321. m_saleInfo.m_isSDTradePathModify = true;//销售贸易路径可改
  322. m_saleInfo.m_demandTransType = 4;//供应类型
  323. m_saleInfo.m_isReturnable = true;//可退换
  324. m_saleInfo.m_isRMAAllowModify = true;//退货可改
  325. m_saleInfo.m_limitPriceBy = -1;//限价依据
  326. item.m_saleInfo = m_saleInfo;
  327. //料品生产信息DTO ItemMFGInfoDTO
  328. UFIDAU9ISVItemItemMFGInfoDTOData m_mfgInfo = new UFIDAU9ISVItemItemMFGInfoDTOData();
  329. m_mfgInfo.m_buildShrinkageRate = 1M;//产出率
  330. m_mfgInfo.m_isSueOverType = -1;//备料超额类型:0 比例 1 数量
  331. m_mfgInfo.m_buildQuanSelectType = 0;//依需求量
  332. m_mfgInfo.m_operateType = -1;//排产方式
  333. item.m_mfgInfo = m_mfgInfo;
  334. //料品MRP(计划)信息DTO ItemMRPInfoDTO
  335. UFIDAU9ISVItemItemMRPInfoDTOData m_mrpInfo = new UFIDAU9ISVItemItemMRPInfoDTOData();
  336. m_mrpInfo.m_forecastContorlType = 2;//无
  337. m_mrpInfo.m_mRPPlanningType = 1;//MPS
  338. m_mrpInfo.m_planningTimeFenceRuleType = 0;//客户订单
  339. m_mrpInfo.m_planningTimeFence = 0;//累计汇总提前期
  340. m_mrpInfo.m_demandTimeFenceRuleType = 0;//客户订单
  341. m_mrpInfo.m_demandTimeFence = 0;//累计汇总提前期
  342. m_mrpInfo.m_releaseTimeFence = 0;//累计汇总提前期
  343. item.m_mrpInfo = m_mrpInfo;
  344. //UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData m_descFlexField = new UFIDAU9BaseFlexFieldDescFlexFieldDescFlexSegmentsData();
  345. //m_descFlexField.m_privateDescSeg2 = data.ValveMaterial;//材质
  346. //item.m_descFlexField = m_descFlexField;
  347. //m_descFlexField.m_privateDescSeg15 = data.PartType;
  348. items.Add(item);
  349. }
  350. return items.ToArray();
  351. }
  352. #region 时间戳方法
  353. private DateTime TimestampToDateTime(long timestamp)
  354. {
  355. DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
  356. long lTime = timestamp * 10000000;
  357. TimeSpan nowTimeSpan = new TimeSpan(lTime);
  358. DateTime resultDateTime = dateTimeStart.Add(nowTimeSpan);
  359. return resultDateTime;
  360. }
  361. #endregion
  362. }
  363. }