ashxOrderMatnr.ashx 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <%@ WebHandler Language="C#" Class="ashxOrderMatnr" %>
  2. using System;
  3. using System.Web;
  4. using System.IO;
  5. using System.Text;
  6. using System.Data;
  7. using Curtain.DataAccess;
  8. using DK.XuWei.WebMes;
  9. using Newtonsoft.Json.Linq;
  10. using System.Web.SessionState;
  11. using Curtain.Extension.ExObjectConvert;
  12. /// <summary>
  13. /// 同步生产订单上的物料编码
  14. /// </summary>
  15. public class ashxOrderMatnr : IHttpHandler, IReadOnlySessionState
  16. {
  17. public void ProcessRequest(HttpContext context)
  18. {
  19. //context.Response.Write(syncMatnr(context));
  20. context.Response.Write("未开启");
  21. }
  22. /// <summary>
  23. /// 同步生产订单上的物料编码
  24. /// </summary>
  25. /// <returns>json</returns>
  26. private string syncMatnr(HttpContext context)
  27. {
  28. // 测试
  29. //string _connStr_ss = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.32.31)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dkmes)));User Id=dkmes;Password=dongke";
  30. //string Url138 = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZSDFM138"; // 测试
  31. //string userName = "hgsapdk:Sapdk#240"; // 测试
  32. // 正式
  33. string _connStr_ss = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.32.116)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dkmes)));User Id=hgiboss;Password=dongke";
  34. string Url138 = "http://hgs4powd1.hegii.com:8000/RESTAdapter/DKMES/ZSDFM138";
  35. string userName = "PODKMES:Sapdk#800";
  36. string msg = string.Empty;
  37. using (IDataAccess conn = DataAccess.CreateByString(DataBaseType.Oracle, _connStr_ss))
  38. {
  39. // 查询当前订单
  40. string sql = @"
  41. SELECT O.ORDERID,
  42. O.VBELN,
  43. O.POSNR
  44. FROM TP_PM_ORDER O
  45. WHERE INSTR(O.ORDERNO, 'HEGII') = 0
  46. AND O.VBELN IS NOT NULL
  47. ORDER BY O.ORDERID ";
  48. DataTable dtOrder = conn.ExecuteDatatable(sql);
  49. if (dtOrder == null || dtOrder.Rows.Count == 0)
  50. {
  51. return new JsonResult(JsonStatus.error) { message = "数据不完整,请检查!" }.ToJson();
  52. }
  53. string VBELN = string.Empty;
  54. string POSNR = string.Empty;
  55. int orderID = 0;
  56. int r = 0;
  57. string postString = string.Empty;
  58. string result = string.Empty;
  59. string ZTYPE = string.Empty;
  60. string ZMSG = string.Empty;
  61. string EV_MATNR = string.Empty;
  62. string EV_WERKS = string.Empty;
  63. string EV_MAKTX = string.Empty;
  64. decimal EV_KWMENG = 0;
  65. foreach (DataRow row in dtOrder.Rows)
  66. {
  67. VBELN = row["VBELN"].ToString();
  68. POSNR = row["POSNR"].ToString();
  69. int.TryParse(row["ORDERID"].ToString(), out orderID);
  70. #region 调用SAP接口
  71. if (!string.IsNullOrEmpty(VBELN) && !string.IsNullOrEmpty(POSNR))
  72. {
  73. // 调用SAP接口,获取工厂号和物料号
  74. postString = "{\"IV_VBELN\":\"" + VBELN + "\",\"IV_POSNR\":\"" + POSNR.PadLeft(6, '0') + "\"}";
  75. try
  76. {
  77. result = JsonClient.PostData2(Url138, postString, "POST", userName);
  78. ZTYPE = JObject.Parse(result)["ZTYPE"].ToString();
  79. EV_MATNR = JObject.Parse(result)["EV_MATNR"].ToString();
  80. EV_WERKS = JObject.Parse(result)["EV_WERKS"].ToString();
  81. EV_MAKTX = JObject.Parse(result)["EV_MAKTX"].ToString();
  82. decimal.TryParse(JObject.Parse(result)["EV_KWMENG"].ToString(), out EV_KWMENG);
  83. }
  84. catch (Exception ex)
  85. {
  86. return new JsonResult(JsonStatus.error) { message = "ZSDFM138接口获取失败" }.ToJson();
  87. }
  88. if ("E".Equals("ZTYPE"))
  89. {
  90. return new JsonResult(JsonStatus.error) { message = ZMSG }.ToJson();
  91. }
  92. if (!"5000".Equals(EV_WERKS))
  93. {
  94. msg += orderID + ":不属于当前工厂\n";
  95. continue;
  96. }
  97. if (string.IsNullOrEmpty(EV_MATNR))
  98. {
  99. msg += orderID + ":订单未匹配到物料编码\n";
  100. continue;
  101. }
  102. #endregion
  103. #region 保存订单明细
  104. // 删除明细
  105. sql = "DELETE FROM tp_pm_orderdetail od WHERE od.orderid = @orderid@";
  106. r = conn.ExecuteNonQuery(sql,
  107. new CDAParameter("orderid", orderID, DataType.Int32)
  108. );
  109. // 新建明细
  110. if (!string.IsNullOrEmpty(EV_MATNR))
  111. {
  112. sql = @"
  113. INSERT INTO TP_PM_ORDERDETAIL
  114. (ORDERID,
  115. MATERIALCODE,
  116. MAKTX,
  117. KWMENG,
  118. ACCOUNTID,
  119. CREATEUSERID)
  120. VALUES
  121. (@ORDERID@,
  122. @MATERIALCODE@,
  123. @MAKTX@,
  124. @KWMENG@,
  125. @ACCOUNTID@,
  126. @CREATEUSERID@) ";
  127. r = conn.ExecuteNonQuery(sql,
  128. new CDAParameter("ORDERID", orderID, DataType.Int32),
  129. new CDAParameter("MATERIALCODE", EV_MATNR, DataType.VarChar),
  130. new CDAParameter("MAKTX", EV_MAKTX, DataType.NVarChar),
  131. new CDAParameter("KWMENG", EV_KWMENG, DataType.Decimal),
  132. new CDAParameter("ACCOUNTID", 1, DataType.Int32),
  133. new CDAParameter("CREATEUSERID", 1, DataType.Int32)
  134. );
  135. }
  136. #endregion
  137. }
  138. }
  139. }
  140. return new JsonResult(JsonStatus.success) { message = msg }.ToJson();
  141. }
  142. public bool IsReusable
  143. {
  144. get
  145. {
  146. return false;
  147. }
  148. }
  149. }