StableVersion4.3/HL_FristAidPlatform_Service/TimedJob/DirectCaseReporting.cs

238 lines
9.0 KiB
C#
Raw Permalink Normal View History

2024-03-11 09:47:34 +08:00
using HL_FristAidPlatform_Bussiness;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace HL_FristAidPlatform_Service
{
public class DirectCaseReporting
{
public static byte[] aesKey;
public static byte[] aesIv;
/// <summary>
/// 单位编码,请从授权文档中获取
/// </summary>
public static string uuCode = "27144";
/// <summary>
/// 授权码,请从授权文档中获取
/// </summary>
public static string uuAuth = "wKZIUUPCnxtbmAiRQN8dYGsir0uBBUaLHFeyf3KgRT3K3fjIkMhiIEFqb0adkNAS";
/// <summary>
/// 过期时间
/// </summary>
public static int timeout = 40000;
public static Encoding enc = Encoding.UTF8;
public static DateTime exp = DateTime.Now;
public static string token;
public static T_Service_Apoplexy_UploadInfoBLL bll = new T_Service_Apoplexy_UploadInfoBLL();
public static void sendXml(string data, string patientGuid)
{
//2018院内筛查上报测试接口;
string url = "https://api.chinasdc.cn/StrokeInterface/Interface2018BB/AddArchivesCases2018ZB03Test";
//正式接口
//tring url = "https://api.chinasdc.cn/StrokeInterface/Interface2018BB/AddArchivesCases2018ZB03";
string response = UpData(url, data);
if (string.IsNullOrEmpty(response))
{
//调用接口失败
HL_FristAidPlatform_Help.Help.WriteErrorLog("卒中病例上传错误信息", response);
}
else
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(response);
XmlElement root = xmlDoc.DocumentElement;
string Err = root.SelectSingleNode("Err").InnerText;
string Msg = root.SelectSingleNode("Msg").InnerText;
//日志
if (Err.Equals("0"))
{
//上传成功
bll.UpdateReportingInfo(patientGuid, 1, response, "0");
HL_FristAidPlatform_Help.Help.WriteErrorLog("患者上传状态修改方法成功,患者唯一标识:", patientGuid);
}
else
{
bll.UpdateReportingInfo(patientGuid, 2, response, "0");
//上传失败,记录错误。
HL_FristAidPlatform_Help.Help.WriteErrorLog("卒中病例上传错误信息,患者唯一标识" + patientGuid, response);
}
}
}
/// <summary>
/// 调用接口上传数据
/// </summary>
/// <param name="url">接口url</param>
/// <param name="data">数据xml</param>
/// <returns></returns>
public static string UpData(string url, string data)
{
string token_ = GetToken();
if (string.IsNullOrEmpty(token_))
{
HL_FristAidPlatform_Help.Help.WriteErrorLog("错误信息调用接口时没有获取到token", "");
//没有获取到token
return null;
}
Dictionary<String, String> parameters = new Dictionary<String, String>();
parameters.Add("uuCode", uuCode);
parameters.Add("Token", token_);
string data_ = AES(data);
parameters.Add("Data", data_);
parameters.Add("uNickName", "hm15892885934");
return doPost(url, parameters);
}
/// <summary>
/// 获取Token
/// </summary>
/// <returns></returns>
private static string GetToken()
{
if (string.IsNullOrEmpty(token) || DateTime.Now >= exp)
{
//token不存在 或者 过期 重新获取
Dictionary<String, String> parameters = new Dictionary<String, String>();
parameters.Add("uuCode", uuCode);
parameters.Add("uuAuth", uuAuth);
parameters.Add("type", "ZB");
string url = "https://api.chinasdc.cn/StrokeInterface/ApiAuth/GetToken";
string response = doPost(url, parameters);
if (string.IsNullOrEmpty(response))
{
HL_FristAidPlatform_Help.Help.WriteErrorLog("错误信息:调用授权接收出错", response);
//调用授权接收出错
return null;
}
else
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(response);
XmlElement root = xmlDoc.DocumentElement;
string Err = root.SelectSingleNode("Err").InnerText;
string Msg = root.SelectSingleNode("Msg").InnerText;
if (Err.Equals("0"))
{
XmlNode data = root.SelectSingleNode("Data");
token = data.SelectSingleNode("Token").InnerText;
aesKey = enc.GetBytes(data.SelectSingleNode("AESKEY").InnerText);
aesIv = enc.GetBytes(data.SelectSingleNode("AESIV").InnerText);
//获取到token 返回
//记录过期时间
exp = DateTime.Now.AddHours(7.8);
return token;
}
else
{
HL_FristAidPlatform_Help.Help.WriteErrorLog("错误信息:调用授权接收出错", response);
//调用授权接收出错 记录错误
return null;
}
}
}
else
{
return token;
}
}
/// <summary>
/// 调用http post接口
/// </summary>
/// <param name="url">url地址</param>
/// <param name="parameters">参数</param>
/// <returns>Response</returns>
private static string doPost(string url, IDictionary<string, string> parameters)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = timeout;
//如果需要POST数据
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
bool bl = true;
foreach (string key in parameters.Keys)
{
if (bl)
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
bl = false;
}
else
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
}
byte[] data = enc.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
else
{
request.ContentLength = 0;
}
HttpWebResponse hwr = request.GetResponse() as HttpWebResponse;
if (hwr.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = hwr.GetResponseStream();
StreamReader readStream = new StreamReader(receiveStream, enc);
string str = readStream.ReadToEnd();
hwr.Close();
receiveStream.Close();
readStream.Close();
return str;
}
else
{
return null;
}
}
/// <summary>
/// AES加密
/// </summary>
/// <param name="data">需要加密的内容</param>
/// <returns>加密后的Base64字符串</returns>
private static string AES(string data)
{
//分组加密算法
SymmetricAlgorithm des = Rijndael.Create();
byte[] inputByteArray = enc.GetBytes(data);//得到需要加密的字节数组
//设置密钥及密钥向量
des.Key = aesKey;
des.IV = aesIv;
byte[] cipherBytes = null;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
cipherBytes = ms.ToArray();//得到加密后的字节数组
cs.Close();
ms.Close();
}
}
return Convert.ToBase64String(cipherBytes);
}
}
}