SapJsonApi.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Web;
  5. using System.Configuration;
  6. using SAP.Middleware.Connector;
  7. using System.IO;
  8. using System.Net;
  9. using System.Text;
  10. using Newtonsoft.Json.Linq;
  11. using Curtain.DataAccess;
  12. /// <summary>
  13. /// SapApi xuwei add 2020-07-15
  14. /// </summary>
  15. public class SapJsonApi
  16. {
  17. //SAP服务器配置参数
  18. public static string SetType = ConfigurationManager.AppSettings["SetType"].ToString();
  19. public static string SapJson_UserName = ConfigurationManager.AppSettings["SapJson_UserName"].ToString();
  20. public const string DKMES_ZFIFM060_url_test = "http://hgs4podev.hegii.com:50200/RESTAdapter/DKMES/ZFIFM060";
  21. public const string DKMES_ZFIFM060_url_prod = "http://hgs4powd1.hegii.com:8000/RESTAdapter/DKMES/ZFIFM060";
  22. public static string DKMES_ZFIFM060()
  23. {
  24. try
  25. {
  26. string url = DKMES_ZFIFM060_url_test;
  27. if ("prod" == SetType)
  28. {
  29. url = DKMES_ZFIFM060_url_prod;
  30. }
  31. string postString = "{\"IV_WERKS\":\"5000\"}";
  32. string result = PostData(url, postString, "POST");
  33. JObject json = JObject.Parse(result);
  34. string status = json["ZTYPE"].ToString();
  35. string msg = json["ZMSG"].ToString();
  36. if ("S" == status)
  37. {
  38. JArray items = (JArray)((JToken)json["ITEM"])["item"];
  39. msg += " " + items.Count;
  40. string sql_del = "update T_RPT_SKU_KP_VALUES set kiln_value = null";
  41. string sql_upd = "update T_RPT_SKU_KP_VALUES set kiln_value = @KILN_VALUE@ where sku_code = @SKU_CODE@";
  42. string sql_add = "insert into T_RPT_SKU_KP_VALUES (SKU_CODE, KILN_VALUE, ACCOUNTID, VALUEFLAG, CREATEUSERID, UPDATEUSERID)" +
  43. " values (@SKU_CODE@, @KILN_VALUE@, @ACCOUNTID@, @VALUEFLAG@, @CREATEUSERID@, @UPDATEUSERID@) ";
  44. using (IDataAccess conn = DataAccess.Create())
  45. {
  46. conn.BeginTransaction();
  47. // 增量拉取,不删除
  48. //conn.ExecuteNonQuery(sql_del);
  49. CDAParameters ps = CDAParameters.Create();
  50. ps.Add("@SKU_CODE@", "");
  51. ps.Add("@KILN_VALUE@", "");
  52. ps.Add("@ACCOUNTID@", 1);
  53. ps.Add("@VALUEFLAG@", "1");
  54. ps.Add("@CREATEUSERID@", 2);
  55. ps.Add("@UPDATEUSERID@", 2);
  56. foreach (JToken item in items)
  57. {
  58. ps["@SKU_CODE@"].Value = item["MATNR"] + "";
  59. ps["@KILN_VALUE@"].Value = Convert.ToDecimal(item["JIAGE"] + "");
  60. int rr = conn.ExecuteNonQuery(sql_upd, ps.ToArray());
  61. if (rr == 0)
  62. {
  63. rr = conn.ExecuteNonQuery(sql_add, ps.ToArray());
  64. }
  65. }
  66. conn.Commit();
  67. }
  68. }
  69. return msg;
  70. }
  71. catch (Exception e)
  72. {
  73. return "操作失败:" + e.Message;
  74. }
  75. }
  76. #region PostData 请求
  77. public static string PostData(string url, string data, string method)
  78. {
  79. //将单引号转义成双引号
  80. data = data.Replace("'", "\"");
  81. //创建Web访问对象
  82. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  83. //把用户传过来的数据转成“UTF-8”的字节流
  84. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  85. myRequest.Method = method;
  86. myRequest.ContentLength = buf.Length;
  87. myRequest.ContentType = "application/json;charset=UTF-8";
  88. //myRequest.MaximumAutomaticRedirections = 1;
  89. myRequest.AllowAutoRedirect = true;
  90. //UTF8标准转码加密
  91. string userName = SapJson_UserName;
  92. // 测试
  93. //userName = "hgsapdk:Sapdk#240";
  94. // 正式
  95. //string userName = "PODKMES:Sapdk#800";
  96. string base64Header = Convert.ToBase64String(Encoding.UTF8.GetBytes(userName));
  97. myRequest.Headers.Add("Authorization", "Basic " + base64Header);
  98. //发送请求
  99. Stream stream = myRequest.GetRequestStream();
  100. stream.Write(buf, 0, buf.Length);
  101. stream.Close();
  102. //获取接口返回值
  103. //通过Web访问对象获取响应内容
  104. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  105. //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快
  106. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  107. //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法
  108. string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾
  109. reader.Close();
  110. myResponse.Close();
  111. return returnXml;
  112. }
  113. #endregion
  114. }