testOrderMatnr.ashx 6.4 KB

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