using System.Net.Cache; using System.Net; using System.Text; using Newtonsoft.Json; using System.Data.SqlClient; namespace Gs.Toolbox; public class InterfaceUtil { /// /// /// /// json参数 /// /// /// /// 如果为2,则是更新工单状态 /// 如果成功返回日志guid,否则返回串 public static (int, string) HttpPostErp(string param, string edtUserGuid = "", string abtGuid = "", string hNo = "", int urlType = 0, string keyUrl = "") { int _rtn = 0; string docNo = string.Empty; //日志详细,发送的时候,记录日志,存储过程调用的时候,再累加上mes业务的操作结果 System.Text.StringBuilder sbLog = new System.Text.StringBuilder(); sbLog.Append(DateTime.Now.ToString() + "开始发送"); string strLogGuid = Guid.NewGuid().ToString(); string url = AppSettingsHelper.getValueByKey("TestErpUrl") + keyUrl; if (urlType == 2) url = AppSettingsHelper.getValueByKey("TestErpUrl2") + keyUrl; LogHelper.Debug("InterfaceUtil.HttpPostErp", $"方法入口 - url:{url}, urlType:{urlType}, hNo:{hNo}, param长度:{param.Length}, param前200字符:{(param.Length > 200 ? param.Substring(0, 200) : param)}"); HttpWebRequest request = null; StreamWriter requestStream = null; WebResponse response = null; string responseStr = ""; try { LogHelper.Debug("InterfaceUtil.HttpPostErp", $"开始创建HTTP请求 - URL:{url}"); request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/json"; request.Accept = "*/*"; request.Timeout = 150000; request.AllowAutoRedirect = false; request.ServicePoint.Expect100Continue = false; HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel .NoCacheNoStore); request.CachePolicy = noCachePolicy; LogHelper.Debug("InterfaceUtil.HttpPostErp", "HTTP请求配置完成,开始发送数据"); requestStream = new StreamWriter(request.GetRequestStream()); requestStream.Write(param); requestStream.Close(); LogHelper.Debug("InterfaceUtil.HttpPostErp", "数据发送完成,等待响应"); response = request.GetResponse(); LogHelper.Debug("InterfaceUtil.HttpPostErp", "收到响应"); if (response != null) { var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); responseStr = reader.ReadToEnd(); reader.Close(); LogHelper.Debug("InterfaceUtil.HttpPostErp", $"响应读取完成 - 响应长度:{responseStr.Length}, 响应内容:{responseStr}"); } } catch (Exception ex) { LogHelper.Debug(url, "HttpPostErp response:" + param + ",ex:" + ex.Message); responseStr = ex.Message; _rtn = -1; } finally { request = null; requestStream = null; response = null; } /*if (_rtn != -1) { Result _result = JsonConvert.DeserializeObject(responseStr); if ("200".Equals(_result.code)) _rtn = 1; }*/ if (_rtn != -1) { LogHelper.Debug("InterfaceUtil.HttpPostErp", $"开始解析响应JSON - responseStr:{responseStr}"); Result _result = JsonConvert.DeserializeObject(responseStr); LogHelper.Debug("InterfaceUtil.HttpPostErp", $"JSON解析完成 - status:{_result?.status}, message:{_result?.message}, doc_no:{_result?.data?.doc_no}"); // 新判断规则:status=0 且 message=Success 才算成功 if (_result?.status == "0" && _result?.message == "Success") { _rtn = 1; LogHelper.Debug("InterfaceUtil.HttpPostErp", "判断结果:成功"); } else { LogHelper.Debug("InterfaceUtil.HttpPostErp", $"判断结果:失败 - status不为0或message不为Success"); } docNo = _result.data.doc_no; } sbLog.Append("," + DateTime.Now.ToString() + "结束发送"); if (_rtn > 0) { sbLog.Append(",发送成功"); //发送成功反写erp单号 LogHelper.Debug("InterfaceUtil.HttpPostErp", $"开始调用存储过程反写ERP单号 - hNo:{hNo}, erpNo:{docNo}, Api:{keyUrl}"); SqlParameter[] parameters = { new("@hNo", hNo), new("@erpNo",docNo), new("@Api", keyUrl) , new("@in1", ""), new("@in2", ""), }; DbHelperSQL.RunProcedure("[prc_Rev_ErpNo]", parameters); LogHelper.Debug("InterfaceUtil.HttpPostErp", "反写ERP单号完成"); } else { sbLog.Append(",发送失败,mes退出操作"); LogHelper.Debug("InterfaceUtil.HttpPostErp", $"发送失败 - _rtn:{_rtn}"); } try { LogHelper.Debug("InterfaceUtil.HttpPostErp", "开始写入日志表"); SqlParameter[] parameters = { new("@edtUserGuid", edtUserGuid), new("@abtGuid", abtGuid), new("@abtTable", ""), new("@detail", sbLog.ToString()), new("@hNo", hNo), new("@RtnLogGuid", strLogGuid), new("@SendJson", param), new("@RtnJson", responseStr), new("@isSuccess", (_rtn > 0 ? 1 : 0)), new("@isErp", 1), }; DbHelperSQL.RunProcedure("[prc_log_create]", parameters); LogHelper.Debug("InterfaceUtil.HttpPostErp", "日志表写入完成"); } catch (Exception ex) { LogHelper.Debug(url, "HttpPostErp 写入日志表" + ex.Message); } LogHelper.Debug("InterfaceUtil.HttpPostErp", $"方法结束 - 返回值:(_rtn:{_rtn}, {(_rtn > 0 ? "strLogGuid:" + strLogGuid : "responseStr:" + responseStr)})"); return (_rtn, (_rtn > 0 ? strLogGuid : responseStr)); } } /// /// 接口返回结果根对象 /// public class Result { /// /// 状态码:0表示成功,-1表示失败 /// public string? status { get; set; } /// /// 状态描述:Success表示成功,失败时为具体异常信息 /// public string? message { get; set; } /// /// 数据体:成功时返回到货单信息,失败时为具体异常信息 /// public ResultData? data { get; set; } } /// /// 接口返回的Data对象(强类型) /// 对应JSON:{"doc_type_no":"370","doc_no":"20251209001","msg":"创建到货单成功."} /// public class ResultData { /// /// 单据类型编号 /// public string? doc_type_no { get; set; } /// /// 单据编号 /// public string? doc_no { get; set; } /// /// 操作结果描述 /// public string? msg { get; set; } }