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

465 lines
17 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.Exceptions;
  10. using UFSoft.UBF.Exceptions1;
  11. using UFSoft.UBF.Service;
  12. using UFSoft.UBF.Util.Context;
  13. using www.ufida.org.EntityData;
  14. namespace UFIDA.ISV.CreateMO
  15. {
  16. public class CustCreateMO
  17. {
  18. /// <summary>
  19. /// 创建生产订单
  20. /// </summary>
  21. public OperationResult CreateU9MO(MO mo)
  22. {
  23. //MO-19070005 1304010018
  24. OperationResult result = new OperationResult();
  25. bool IsSuccess = false;
  26. string MESSAGE = "";
  27. bool flag = false;
  28. #region 服务调用框架结构
  29. ////实例化代理类
  30. UFIDAU9ISVMOICreateMO4ExternalClient client = new UFIDAU9ISVMOICreateMO4ExternalClient();
  31. //服务返回结果
  32. UFIDAU9ISVMOMOKeyDTOData[] returnItems;
  33. //返回异常信息,目前还没有使用此属性
  34. //上下文信息
  35. object _context;
  36. UFSoft.UBF.Exceptions.MessageBase[] messageBase = null;
  37. try
  38. {
  39. //给上下文信息赋值
  40. _context = CreateContextObj();
  41. string ItemName = string.Empty;
  42. string ItemUnit = string.Empty;
  43. long CodeID = 0;
  44. long BOMVersion = 0;
  45. string VersionCode = string.Empty;
  46. //测试时可以放开
  47. //mo.code = "1131000000"; //1305040028 1303020289 1304010018
  48. ////mo.MO_MODocTypeCode = "SC02"; //SC02 SC03
  49. //mo.MO_MODocTypeCode = "SC03"; //SC02 SC03
  50. //mo.IsMRPorMPS = false; // MPS/MRP
  51. //mo.MOQty = 1;
  52. //mo.MRPQty = 1;
  53. //mo.MOSourceDocType = 3;
  54. //mo.BOMType = 0;
  55. //mo.BOMAlternate = 0;
  56. //mo.RoutingAlternate = 0;
  57. //mo.DeptCode = "0802";
  58. //mo.WhCode = "20";
  59. //mo.BinCode = "ZP1-01";
  60. ////mo.StartDate = DateTime.Now;
  61. //mo.StartDate = DateTime.Parse("2019-07-01");
  62. //mo.CompleteDate = DateTime.Parse("2019-10-01");
  63. if (string.IsNullOrWhiteSpace(mo.code))
  64. {
  65. IsSuccess = false;
  66. result.MESSAGE = "料品编码不可为空!";
  67. return result;
  68. }
  69. www.ufida.org.EntityData.UFIDAU9ISVMOMODTOData moDtoData = new www.ufida.org.EntityData.UFIDAU9ISVMOMODTOData();
  70. //单据类型
  71. moDtoData.m_docType = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  72. moDtoData.m_docType.m_code = mo.MO_MODocTypeCode;// "1";
  73. //moDtoData.m_docType.m_name = "标准生产订单";
  74. //生产部门
  75. moDtoData.m_department = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  76. moDtoData.m_department.m_code = mo.DeptCode;// "0801";
  77. //料品
  78. moDtoData.m_itemMaster = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  79. moDtoData.m_itemMaster.m_code = mo.code;
  80. ////版本
  81. //moDtoData.m_itemVersion = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  82. //DataTable dt = Appconfig.GetItemMaster(mo.code);
  83. //if (dt != null && dt.Rows.Count > 0)
  84. //{
  85. // foreach (DataRow row in dt.Rows)
  86. // {
  87. // CodeID = long.Parse(row["ID"].ToString());
  88. // ItemName = row["Name"].ToString();
  89. // ItemUnit = row["BOM_UNIT"].ToString();
  90. // //BOMVersion = long.Parse(row["BOMVersion"].ToString());
  91. // //VersionCode = row["VersionCode"].ToString();
  92. // }
  93. //}
  94. //BOM版本
  95. //moDtoData.m_bOMVersion = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  96. //moDtoData.m_bOMVersion.m_code = "A1";
  97. //moDtoData.m_bOMEffDate = DateTime.Parse("2016-08-01");
  98. //生产数量
  99. moDtoData.m_productQty = mo.MOQty;
  100. //MRP数量
  101. moDtoData.m_mRPQty = mo.MRPQty;
  102. //BOM类型
  103. moDtoData.m_bOMType = mo.BOMType;
  104. //来源单据类型 3-手工生单
  105. moDtoData.m_mOSourceDocType = 3;
  106. //计划开工日期?
  107. //moDtoData.m_actualStartDate = mo.StartDate.Value;
  108. moDtoData.m_startDate = mo.StartDate.Value;
  109. //20190805新增完工日期
  110. //moDtoData.m_completeDate = mo.CompleteDate.Value;
  111. //需求分类
  112. moDtoData.m_demandCode = -1;
  113. //CompleteInOrg 入库组织
  114. //入库组织?
  115. moDtoData.m_org = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  116. moDtoData.m_org.m_code = ConfigurationManager.AppSettings["orgCode"].ToString();
  117. moDtoData.m_org.m_iD = long.Parse(ConfigurationManager.AppSettings["orgID"].ToString());
  118. //货主组织
  119. moDtoData.m_ownerOrg = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  120. moDtoData.m_ownerOrg.m_code = ConfigurationManager.AppSettings["orgCode"].ToString();
  121. moDtoData.m_ownerOrg.m_iD = long.Parse(ConfigurationManager.AppSettings["orgID"].ToString());
  122. //工艺生产目的
  123. //moDtoData.m_routingAlternate = mo.RoutingAlternate;
  124. //生产订单批号
  125. //moDtoData.m_productLotMaster = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  126. //moDtoData.m_productLotNo = "";
  127. ////业务员
  128. //moDtoData.m_businessPerson = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  129. //moDtoData.m_businessPerson.m_code = "081201";
  130. //ApplyQty 材料申请套数
  131. //IsFlagForNewComp 是否是启用新完工模块创建
  132. //IsFlagNewIssue 是否启用领料申请
  133. //IsFlagNewNoIssueToConfirm 是否无申请材料出库
  134. //IsFlagNewNoRecedeToConfirm 是否无申请材料退库
  135. //IsFlagNewSFCTask 是否启用车间任务管理
  136. //BFOpportunity 倒冲时机
  137. //WFCurrentState 当前状态
  138. //WFOriginalState 之前状态
  139. //BusinessCreatedBy 业务制单人
  140. //BusinessCreatedOn 业务制单日期
  141. //BusinessType 业务类型
  142. //DocState 状态
  143. //IsFIClose 财务关闭
  144. //IsFirmed 锁定
  145. moDtoData.m_isFirmed = false;
  146. //moDtoData.m_bOMECONo = mo.code;
  147. //moDtoData.m_mOOperationDTOs
  148. //库位、完工存储地点
  149. List<UFIDAU9ISVMOMOOperationDTOData> molist = new List<UFIDAU9ISVMOMOOperationDTOData>();
  150. ////完工库位
  151. UFIDAU9ISVMOMOOperationDTOData _moDtoData = new UFIDAU9ISVMOMOOperationDTOData();
  152. //_moDtoData.m_completeBin = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  153. //_moDtoData.m_completeBin.m_code = "LJE2-3-2"; //LJE2-3-2 //6-01
  154. //完工存储地点
  155. //_moDtoData.m_completeWh = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  156. //_moDtoData.m_completeWh.m_code = "03";
  157. //入库存储地点
  158. moDtoData.m_sCVWh = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  159. moDtoData.m_sCVWh.m_code = mo.WhCode;// "03";
  160. //入库库位
  161. //moDtoData.m_sCVBin.m_code = ""; //20190219删除
  162. if (!string.IsNullOrWhiteSpace(mo.BinCode))
  163. {
  164. moDtoData.m_sCVBin = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  165. moDtoData.m_sCVBin.m_code = mo.BinCode;// "LJE2-3-2"; //20190219删除 必须加入库库位
  166. }
  167. ////IsCancel 终止
  168. //_moDtoData.m_isCancel = false;
  169. ////UrgentRatio 紧迫系数
  170. //_moDtoData.m_urgentRatio = 0;
  171. ////CostField 成本域
  172. //moDtoData.m_costField = new UFIDAU9CBOPubControllerCommonArchiveDataDTOData();
  173. //moDtoData.m_costField.m_code = "03";
  174. //molist.Add(_moDtoData);
  175. //moDtoData.m_mOOperationDTOs = molist.ToArray();
  176. //moDtoData.m_mOSrcRelationDTOs = new UFIDAU9ISVMOMOSrcRelationDTOData[]{};
  177. //工艺生产BOM 0-主制造,1-委外
  178. moDtoData.m_alternateType = 0;
  179. List<UFIDAU9ISVMOMODTOData> moDtoList = new List<UFIDAU9ISVMOMODTOData>();
  180. moDtoList.Add(moDtoData);
  181. returnItems = client.Do(out messageBase, _context, moDtoList.ToArray());
  182. foreach (UFIDAU9ISVMOMOKeyDTOData data in returnItems)
  183. {
  184. StringBuilder str = new StringBuilder();
  185. str.AppendLine("创建MO");
  186. str.AppendLine("当前时间:" + DateTime.Now);
  187. str.AppendLine("工单:" + data.m_docNo);
  188. str.AppendLine("返回错误信息:" + data.m_errMsg);
  189. Appconfig.WriteLogFile(str.ToString(), "创建U9_MO");
  190. if (!string.IsNullOrWhiteSpace(data.m_errMsg))
  191. {
  192. flag = false;
  193. MESSAGE = data.m_errMsg;
  194. }
  195. else
  196. {
  197. flag = true;
  198. }
  199. IsSuccess = flag ? true : false;
  200. if (string.IsNullOrWhiteSpace(MESSAGE))
  201. {
  202. MESSAGE = IsSuccess == true ? "创建MO订单成功" : "创建MO订单失败";
  203. }
  204. result.IsSuccess = IsSuccess;
  205. result.MESSAGE = MESSAGE;
  206. result.MOCode = data.m_docNo;
  207. //DateTime.Now.AddDays(-1)
  208. }
  209. #region 创建MO订单
  210. //if ((returnItems != null) && (returnItems.Length > 0))
  211. //{
  212. // flag = true;
  213. // result.MOCode = returnItems[0].m_docNo;
  214. //}
  215. //else
  216. //{
  217. // flag = false;
  218. //}
  219. #endregion
  220. }
  221. catch (Exception ex)
  222. {
  223. //异常信息捕获
  224. result.IsSuccess = false;
  225. result.MESSAGE = MESSAGE = GetExceptionMessage(ex);
  226. return result;
  227. }
  228. //finally
  229. //{
  230. // result.IsSuccess = IsSuccess;
  231. // result.MESSAGE = MESSAGE;
  232. //}
  233. #endregion
  234. return result;
  235. }
  236. #region 提取异常信息
  237. /// <summary>
  238. /// 提取异常信息
  239. /// </summary>
  240. /// <param name="ex"></param>
  241. private string GetExceptionMessage(Exception ex)
  242. {
  243. string faultMessage = "未知错误,请查看ERP日志!";
  244. System.TimeoutException timeoutEx = ex as System.TimeoutException;
  245. if (timeoutEx != null)
  246. {
  247. faultMessage = "访问服务超时,请修改配置信息!";
  248. }
  249. else
  250. {
  251. FaultException<ServiceException> faultEx = ex as FaultException<ServiceException>;
  252. if (faultEx == null)
  253. {
  254. faultMessage = ex.Message;
  255. }
  256. else
  257. {
  258. ServiceException serviceEx = faultEx.Detail;
  259. if (serviceEx != null && !string.IsNullOrEmpty(serviceEx.Message)
  260. && !serviceEx.Message.Equals("fault", StringComparison.OrdinalIgnoreCase))
  261. {
  262. // 错误信息在faultEx.Message中,请提取,
  263. // 格式为"Fault:料品不能为空,请录入\n 在....."
  264. int startIndex = serviceEx.Message.IndexOf(":");
  265. int endIndex = serviceEx.Message.IndexOf("\n");
  266. if (endIndex == -1)
  267. endIndex = serviceEx.Message.Length;
  268. if (endIndex > 0 && endIndex > startIndex + 1)
  269. {
  270. faultMessage = serviceEx.Message.Substring(startIndex + 1, endIndex - startIndex - 1);
  271. }
  272. else
  273. {
  274. faultMessage = serviceEx.Message;
  275. }
  276. }
  277. }
  278. }
  279. return faultMessage;
  280. }
  281. #endregion
  282. #region 给上下文信息赋值
  283. /// <summary>
  284. /// 给上下文信息赋值
  285. /// </summary>
  286. /// <returns></returns>
  287. private ThreadContext CreateContextObj()
  288. {
  289. // 实例化应用上下文对象
  290. ThreadContext thContext = new ThreadContext();
  291. System.Collections.Generic.Dictionary<object, object> ns = new Dictionary<object, object>();
  292. ns.Add("OrgID", ConfigurationManager.AppSettings["orgID"].ToString());
  293. ns.Add("UserID", ConfigurationManager.AppSettings["userID"].ToString());
  294. ns.Add("UserCode", ConfigurationManager.AppSettings["userCode"].ToString());
  295. ns.Add("Datetime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  296. ns.Add("CultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  297. ns.Add("EnterpriseID", ConfigurationManager.AppSettings["enterpriseID"].ToString());
  298. ns.Add("DefaultCultureName", ConfigurationManager.AppSettings["cultureName"].ToString());
  299. thContext.nameValueHas = ns;
  300. return thContext;
  301. }
  302. #endregion
  303. }
  304. public class OperationResult
  305. {
  306. /// <summary>
  307. /// 结果状态,默认值false
  308. /// </summary>
  309. public bool IsSuccess { get; set; }
  310. /// <summary>
  311. ///处理消息
  312. /// </summary>
  313. public string MESSAGE { get; set; }
  314. /// <summary>
  315. /// 输出生产订单
  316. /// </summary>
  317. public string MOCode { get; set; }
  318. }
  319. public class MO
  320. {
  321. /// <summary>
  322. /// 单据类型 FG02-返工生产订单,SC02-标准生产订单,SC03-标准生产订单(必有BOM),SC04-标准生产订单,YF02-研发生产订单(BOM)
  323. /// </summary>
  324. public string MO_MODocTypeCode { get; set; }
  325. /// <summary>
  326. /// 订单号
  327. /// </summary>
  328. public string DocNo { get; set; }
  329. /// <summary>
  330. /// BOM类型 0-自制,1-委外
  331. /// </summary>
  332. public int BOMType { get; set; }
  333. /// <summary>
  334. ///工艺生产BOM 0-主制造,1-委外
  335. /// </summary>
  336. public int RoutingAlternate { get; set; }
  337. /// <summary>
  338. ///来源单据类型
  339. /// </summary>
  340. public int MOSourceDocType { get; set; }
  341. /// <summary>
  342. /// BOM生产目的 0-主制造,1-委外
  343. /// </summary>
  344. public int BOMAlternate { get; set; }
  345. /// <summary>
  346. /// 料品
  347. /// </summary>
  348. public string code { get; set; }
  349. /// <summary>
  350. /// 单位
  351. /// </summary>
  352. public string ProductUOM { get; set; }
  353. /// <summary>
  354. /// 生产数量
  355. /// </summary>
  356. public Decimal MOQty { get; set; }
  357. /// <summary>
  358. /// MRP数量
  359. /// </summary>
  360. public Decimal MRPQty { get; set; }
  361. /// <summary>
  362. /// MPS/MRP
  363. /// </summary>
  364. public bool IsMRPorMPS { get; set; }
  365. /// <summary>
  366. /// 计划开工日
  367. /// </summary>
  368. public Nullable<DateTime> StartDate { get; set; }
  369. /// <summary>
  370. /// 完工日期
  371. /// </summary>
  372. public Nullable<DateTime> CompleteDate { get; set; }
  373. /// <summary>
  374. /// 仓库
  375. /// </summary>
  376. public string WhCode { get; set; }
  377. /// <summary>
  378. /// 库位
  379. /// </summary>
  380. public string BinCode { get; set; }
  381. /// <summary>
  382. /// 部门编码
  383. /// </summary>
  384. public string DeptCode { get; set; }
  385. }
  386. }