index.ashx 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <%@ WebHandler Language="C#" Class="DKService_ExHGS3QR_AddGroutingData_JM" %>
  2. using System;
  3. using System.Web;
  4. using System.Web.SessionState;
  5. using Curtain.DataAccess;
  6. using DK.XuWei.WebMes;
  7. using Newtonsoft.Json.Linq;
  8. using Curtain.Log;
  9. using System.Collections;
  10. /// <summary>
  11. /// 给金马:自动注浆绑码接口
  12. /// </summary>
  13. public class DKService_ExHGS3QR_AddGroutingData_JM : IHttpHandler,IReadOnlySessionState
  14. {
  15. public void ProcessRequest(HttpContext context)
  16. {
  17. context.Response.ContentType = "application/json";
  18. context.Response.Charset = "UTF-8";
  19. try
  20. {
  21. // 读取请求体(支持JSON格式)
  22. string requestBody = string.Empty;
  23. using (var reader = new System.IO.StreamReader(context.Request.InputStream))
  24. {
  25. requestBody = reader.ReadToEnd();
  26. }
  27. // 解析JSON数据
  28. JObject jsonData;
  29. try
  30. {
  31. jsonData = JObject.Parse(requestBody);
  32. }
  33. catch
  34. {
  35. ReturnError(context, "JSON格式错误");
  36. return;
  37. }
  38. // 提取DATA节点
  39. JObject data = jsonData["DATA"] as JObject;
  40. if (data == null)
  41. {
  42. ReturnError(context, "缺少DATA节点");
  43. return;
  44. }
  45. // 验证必填字段
  46. string[] requiredFields = {
  47. "GROUTINGLINECODE",
  48. "MOULDCODE",
  49. "USERCODE",
  50. "GROUTINGDATE",
  51. "CREATETIME",
  52. "BARCODE"
  53. };
  54. foreach (var field in requiredFields)
  55. {
  56. if (data[field] == null || string.IsNullOrWhiteSpace(data[field].ToString()))
  57. {
  58. ReturnError(context, "必填字段"+field+"为空");
  59. return;
  60. }
  61. }
  62. // 提取参数
  63. string groutingLineCode = data["GROUTINGLINECODE"].ToString();
  64. string mouldCode = data["MOULDCODE"].ToString();
  65. string userCode = data["USERCODE"].ToString();
  66. string groutingDateStr = data["GROUTINGDATE"].ToString();
  67. string createTimeStr = data["CREATETIME"].ToString();
  68. string barcode = data["BARCODE"].ToString();
  69. string highNum = data.ContainsKey("HIGHNUM")?data["HIGHNUM"].ToString() :"";
  70. string tbInfo = data.ContainsKey("TBINFO")?data["TBINFO"].ToString() :"";
  71. // 解析日期
  72. DateTime groutingDate, createTime;
  73. if (!DateTime.TryParse(groutingDateStr, out groutingDate))
  74. {
  75. ReturnError(context, "GROUTINGDATE日期格式错误");
  76. return;
  77. }
  78. if (!DateTime.TryParse(createTimeStr, out createTime))
  79. {
  80. ReturnError(context, "CREATETIME日期格式错误");
  81. return;
  82. }
  83. // ========== 以下是业务逻辑处理 ==========
  84. //调用WCF接口
  85. WCF wcf = new WCF();
  86. wcf.Para.Add(new JProperty("groutingLineCode", groutingLineCode));
  87. wcf.Para.Add(new JProperty("mouldCode", mouldCode));
  88. wcf.Para.Add(new JProperty("userCode", userCode));
  89. wcf.Para.Add(new JProperty("groutingDateStr", groutingDate));
  90. wcf.Para.Add(new JProperty("createTimeStr", createTime));
  91. wcf.Para.Add(new JProperty("barcode", barcode));
  92. wcf.Para.Add(new JProperty("highNum", highNum));
  93. wcf.Para.Add(new JProperty("tbInfo", tbInfo));
  94. string jsonStr = wcf.Get("/DKService/ExHGS3QR/AddGroutingData_JM");
  95. //这个接口很小的机率会带出html标签===============================================
  96. if (jsonStr.IndexOf("<html>") > 0) jsonStr = jsonStr.Substring(0, jsonStr.IndexOf("<html>"));
  97. //xuwei fix 2022-05-28 有时会带出 DOCTYPEhtml标签
  98. jsonStr = jsonStr.Trim().Replace("<!DOCTYPEhtml>","");
  99. jsonStr = jsonStr.Replace("\\u000d\\u000a", "")
  100. .Replace("\\n","").Replace("\\","").Replace(" ","")
  101. .Replace("产品编码:"," 产品编码 ")
  102. .Replace("当前工序:"," 当前工序 ")
  103. .Replace("可到工序:"," 可到工序 ")
  104. .Replace("{\"d\":\"","")
  105. .Replace("\"}\"}","\"}")
  106. ;
  107. Logger.Debug(context.Request.UserHostAddress + "\r\n" + context.Request.Url + "\r\n" +jsonStr);
  108. string apiResult = "";
  109. //处理输出结果
  110. JObject json = JObject.Parse(jsonStr.Replace("}<!DOCTYPEhtml>","}").ToString());
  111. bool apiStatus = false;
  112. apiStatus = Convert.ToBoolean(json["success"]);
  113. apiResult = jsonStr.Replace("}<!DOCTYPEhtml>", "}").ToString();
  114. context.Response.Write(apiResult);
  115. //记录接口调用日志
  116. Hashtable ht = new Hashtable();
  117. ht.Add("groutingLineCode", groutingLineCode);
  118. ht.Add("mouldCode", mouldCode);
  119. ht.Add("userCode", userCode);
  120. ht.Add("groutingDateStr", groutingDateStr);
  121. ht.Add("barcode", barcode);
  122. int apiId = 20401;
  123. barcode = barcode.Replace("2c%", ",");
  124. int apiBarcodeCount = barcode.Split(',').Length;
  125. string apiUrl = "http://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port.ToString() + "/api/DKService/ExHGS3QR/AddGroutingData_JM/?" + JsonClient.ParaToString(ht)+
  126. "&createTimeStr="+createTimeStr+"&highNum="+highNum+"&tbInfo="+tbInfo;
  127. ApiLog.WriteApiLog("金马_自动注浆绑码", apiUrl, apiStatus, apiResult, apiId, apiBarcodeCount);
  128. }
  129. catch (Exception ex)
  130. {
  131. // 记录日志
  132. Curtain.Log.Logger.Debug(context.Request.UserHostAddress + "\r\n" + context.Request.Url + "\r\n" +ex);
  133. ReturnError(context, "系统异常:"+ex.Message);
  134. }
  135. }
  136. private void ReturnError(HttpContext context, string message)
  137. {
  138. var errorResponse = new
  139. {
  140. Success = false,
  141. Message = message,
  142. ErrorCode = "400"
  143. };
  144. context.Response.StatusCode = 400;
  145. context.Response.Write(errorResponse);
  146. }
  147. public bool IsReusable
  148. {
  149. get
  150. {
  151. return false;
  152. }
  153. }
  154. }