index.ashx 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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 = groutingLineCode+"-"+ 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. // 关键:强制只保留日期,清空时分秒
  79. groutingDate = groutingDate.Date;
  80. if (!DateTime.TryParse(createTimeStr, out createTime))
  81. {
  82. ReturnError(context, "CREATETIME日期格式错误");
  83. return;
  84. }
  85. // ========== 以下是业务逻辑处理 ==========
  86. //调用WCF接口
  87. WCF wcf = new WCF();
  88. wcf.Para.Add(new JProperty("groutingLineCode", groutingLineCode));
  89. wcf.Para.Add(new JProperty("mouldCode",mouldCode));
  90. wcf.Para.Add(new JProperty("userCode", userCode));
  91. wcf.Para.Add(new JProperty("groutingDateStr", groutingDate));
  92. wcf.Para.Add(new JProperty("createTimeStr", createTime));
  93. wcf.Para.Add(new JProperty("barcode", barcode));
  94. wcf.Para.Add(new JProperty("highNum", highNum));
  95. wcf.Para.Add(new JProperty("tbInfo", tbInfo));
  96. string jsonStr = wcf.Get("/DKService/ExHGS3QR/AddGroutingData_JM");
  97. //这个接口很小的机率会带出html标签===============================================
  98. if (jsonStr.IndexOf("<html>") > 0) jsonStr = jsonStr.Substring(0, jsonStr.IndexOf("<html>"));
  99. //xuwei fix 2022-05-28 有时会带出 DOCTYPEhtml标签
  100. jsonStr = jsonStr.Trim().Replace("<!DOCTYPEhtml>","");
  101. jsonStr = jsonStr.Replace("\\u000d\\u000a", "")
  102. .Replace("\\n","").Replace("\\","").Replace(" ","")
  103. .Replace("产品编码:"," 产品编码 ")
  104. .Replace("当前工序:"," 当前工序 ")
  105. .Replace("可到工序:"," 可到工序 ")
  106. .Replace("{\"d\":\"","")
  107. .Replace("\"}\"}","\"}")
  108. ;
  109. Logger.Debug(context.Request.UserHostAddress + "\r\n" + context.Request.Url + "\r\n" +jsonStr);
  110. string apiResult = "";
  111. //处理输出结果
  112. JObject json = JObject.Parse(jsonStr.Replace("}<!DOCTYPEhtml>","}").ToString());
  113. bool apiStatus = false;
  114. apiStatus = Convert.ToBoolean(json["success"]);
  115. apiResult = jsonStr.Replace("}<!DOCTYPEhtml>", "}").ToString();
  116. context.Response.Write(apiResult);
  117. //记录接口调用日志
  118. Hashtable ht = new Hashtable();
  119. ht.Add("groutingLineCode", groutingLineCode);
  120. ht.Add("mouldCode", mouldCode);
  121. ht.Add("userCode", userCode);
  122. ht.Add("groutingDateStr", groutingDateStr);
  123. ht.Add("barcode", barcode);
  124. int apiId = 20401;
  125. barcode = barcode.Replace("2c%", ",");
  126. int apiBarcodeCount = barcode.Split(',').Length;
  127. string apiUrl = "http://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port.ToString() + "/api/DKService/ExHGS3QR/AddGroutingData_JM/?" + JsonClient.ParaToString(ht)+
  128. "&createTimeStr="+createTimeStr+"&highNum="+highNum+"&tbInfo="+tbInfo;
  129. ApiLog.WriteApiLog("金马_自动注浆绑码", apiUrl, apiStatus, apiResult, apiId, apiBarcodeCount);
  130. }
  131. catch (Exception ex)
  132. {
  133. // 记录日志
  134. Curtain.Log.Logger.Debug(context.Request.UserHostAddress + "\r\n" + context.Request.Url + "\r\n" +ex);
  135. ReturnError(context, "系统异常:"+ex.Message);
  136. }
  137. }
  138. private void ReturnError(HttpContext context, string message)
  139. {
  140. var errorResponse = new
  141. {
  142. Success = false,
  143. Message = message,
  144. ErrorCode = "400"
  145. };
  146. context.Response.StatusCode = 400;
  147. context.Response.Write(errorResponse);
  148. }
  149. public bool IsReusable
  150. {
  151. get
  152. {
  153. return false;
  154. }
  155. }
  156. }