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; }
}