Files
tj-tzhg/JJMediSys/cs/NetCom.cs
2025-11-26 17:21:18 +08:00

268 lines
12 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using System.IO;
using System.IO.Compression;
using System.Text.RegularExpressions;
using System.Web;
using System.Security.Cryptography;
using System.Collections.Specialized;
using System.Reflection;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Net.Http;
using System.Threading.Tasks;
namespace JJMediSys
{
class NetCom
{
private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
return true; //总是接受
}
public static void WriteLog(string msg)
{
string filePath = AppDomain.CurrentDomain.BaseDirectory + "LisLog";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
string logPath = AppDomain.CurrentDomain.BaseDirectory + "LisLog\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
try
{
using (StreamWriter sw = File.AppendText(logPath))
{
sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + msg + "\r\n");
sw.Flush();
sw.Close();
sw.Dispose();
}
}
catch (IOException e)
{
using (StreamWriter sw = File.AppendText(logPath))
{
sw.WriteLine("异常:" + e.Message + DateTime.Now.ToString("yyy-MM-dd HH:mm:ss.fff") + "\r\n");
sw.Flush();
sw.Close();
sw.Dispose();
}
}
}
public static void SetHeaderValue(WebHeaderCollection header, string name, string value)
{
var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic);
if (property != null)
{
var collection = property.GetValue(header, null) as NameValueCollection;
collection[name] = value;
}
}
public static HttpWebResponse CreatePostHttpResponse(string url, string Input, Encoding charset)
{
HttpWebRequest request = null;
//HTTPSQ请求
// ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
// 1. 统一设置:跳过任何证书错误(开发/测试用)
ServicePointManager.ServerCertificateValidationCallback =
(sender, certificate, chain, sslPolicyErrors) => true;
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
//request.ContentLength = Input.Length;
request.ContentType = "application/json";
//request.UserAgent = DefaultUserAgent;
request.Timeout = 30000;
request.Proxy = null;
//如果需要POST数据
byte[] data = charset.GetBytes(Input);
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
return request.GetResponse() as HttpWebResponse;
}
public string GetHttpResponse(string url, int Timeout)
{
string retString = "";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
request.UserAgent = null;
request.Timeout = Timeout;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
}
catch (System.Exception ex)
{
WriteLog("Exception Error Message is " + ex.Message);
}
return retString;
}
public static HttpWebResponse CreateGetHttpResponse(string url, IDictionary<string, string> parameters, Encoding charset)
{
StringBuilder builder = new StringBuilder();
builder.Append(url);
if (parameters.Count > 0)
{
builder.Append("?");
int i = 0;
foreach (var item in parameters)
{
if (i > 0)
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(builder.ToString());
return (HttpWebResponse)req.GetResponse() as HttpWebResponse;
}
public string OutString;
public bool SendAndRecv(string url, string Input,string PatID)
{
//OutString = "{\"code\": \"200\",\"msg\": \"成功\",\"data\": {\"patientId\": \"HN755155\",\"name\": \"马洪义\",\"age\": \"66\",\"sex\": \"男\",\"windowNo\": \"\",\"photo\": \"\",\"itemCount\": 7,\"userType\": \"0\",\"idCardNo\": \"\",\"phone\": \"\",\"healthCardNo\": \"\",\"doctor\": \"\",\"pojoList\": [{\"requestId\": \"2412062091\",\"patientId\": \"HN755155\",\"ward\": \"健康管理中心\",\"wardId\": \"812030\",\"bedNo\": \"\",\"tubeConvert\": \"YELLOW\",\"noteLabel\": \"静脉血\",\"mnemotests\": \"超级赛亚人检测\",\"station\": \"免疫室\",\"stationId\": \"817440\",\"state\": \"0\",\"datebz\": \"2024-12-06 10:11:42\",\"descbz\": \"\",\"pickupLocation\": \"门诊一层检验报告领取处\",\"pickupTime\": \"下个工作日16:30后\",\"groupId\": \"\",\"labelCount\": \"1\",\"mnemoitems\": \"防御力检测;\"},{\"requestId\": \"2412062072\",\"patientId\": \"HN755155\",\"ward\": \"健康管理中心\",\"wardId\": \"812030\",\"bedNo\": \"\",\"tubeConvert\": \"YELLOW\",\"noteLabel\": \"静脉血\",\"mnemotests\": \"波塞冬测试\",\"station\": \"免疫室\",\"stationId\": \"817440\",\"state\": \"0\",\"datebz\": \"2024-12-06 10:11:42\",\"descbz\": \"\",\"pickupLocation\": \"门诊一层检验报告领取处\",\"pickupTime\": \"下工作日16:30后(周末延1个工作日)\",\"groupId\": \"\",\"labelCount\": \"1\",\"mnemoitems\": \"乙型肝炎病毒表面抗体(发光法);乙型肝炎病毒E抗原发光法;乙型肝炎病毒E抗体发光法;乙型肝炎病毒核心抗体(发光法);艾滋病抗原、抗体测定(发光法);丙型肝炎病毒抗体(发光法);乙型肝炎病毒表面抗原(发光法);梅毒血清特异抗体测定(发光法);\"}]}}";
//string sql1 = "Insert into lis_log (PatID,Req,Res) values('" + PatID + "','" + Input + "','" + OutString + "')";
//try
//{
// int Ret = DoDBMySql.ExecuteSql(sql1);
//}
//catch (Exception ex)
//{
//}
//return true;
//WriteLog(Input);
Encoding encoding = Encoding.GetEncoding("utf-8");
OutString = "";
try
{
HttpWebResponse response = CreatePostHttpResponse(url, Input, encoding);
Stream stream = response.GetResponseStream(); //获取响应的字符串流
StreamReader sr = new StreamReader(stream); //创建一个stream读取流
OutString = sr.ReadToEnd(); //从头读到尾放到字符串html
string logstr = string.Format("url={0}\r\n Req={1}\r\nRes={2}", url, Input, OutString);
WriteLog(logstr);
string sql = "Insert into lis_log (PatID,Req,Res) values('" + PatID + "','" + Input + "','" + OutString + "')";
try
{
int Ret = DoDBMySql.ExecuteSql(sql);
}
catch (Exception ex)
{
}
return true;
}
catch (Exception e)
{
WriteLog("Exception Error Message is " + e.Message);
string sql = "Insert into lis_log (PatID,Req,Res) values('" + PatID + "','" + Input + "','" + e.Message + "')";
try
{
int Ret = DoDBMySql.ExecuteSql(sql);
}
catch (Exception ex)
{
}
return false;
}
}
public static async Task<bool> SendHisComplete(string PatID)
{
WriteLog($"进入诊结");
try
{
using (var client = new HttpClient())
{
// 准备表单数据
var formData = new Dictionary<string, string>
{
{ "out_code", PatID }
};
// 发送 POST 请求
HttpResponseMessage response = await client.PostAsync(
"http://10.10.8.244:10005/api/doctor/his/completed", // 替换为你的目标 URL
new FormUrlEncodedContent(formData)
);
// 确保成功
response.EnsureSuccessStatusCode();
// 读取响应内容
bool ExcutResult = false;
string Outmsg = await response.Content.ReadAsStringAsync();
WriteLog($"诊结请求[{PatID}] 应答:[{Outmsg}]");
string sql = "Insert into lis_log (PatID,Req,Res) values('" + PatID + "','" + PatID + "','" + Outmsg + "')";
JObject jObject = (JObject)JsonConvert.DeserializeObject(Outmsg);
if (jObject["status"].ToString().Equals("200"))
{
WriteLog("提交诊结成功 , 回参:" + Outmsg);
ExcutResult = true;
}
else
{
WriteLog("提交诊结失败, 回参:" + Outmsg);
}
try
{
int Ret = DoDBMySql.ExecuteSql(sql);
}
catch (Exception e)
{
}
return ExcutResult;
}
}
catch (WebException ex)
{
WriteLog("提交诊结异常:" + ex.Message);
using (var reader = new StreamReader(ex.Response?.GetResponseStream()))
{
string Outmsg = reader.ReadToEnd();
WriteLog("提交诊结异常:" + ex.Message+", 回参:"+ Outmsg);
string sql = "Insert into lis_log (PatID,Req,Res) values('" + PatID + "','" + PatID + "','" + Outmsg + "')";
try
{
int Ret = DoDBMySql.ExecuteSql(sql);
}
catch (Exception e)
{
}
return false;
}
}
}
}
}