圣珀
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.

442 lines
19 KiB

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