StableVersion4.3/HL_FristAidPlatform_Service/TimedJob/DirectCaseReporting.cs

238 lines
9.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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