StableVersion4.3/HL_FristAidPlatform_Apoplexy/Form_ DataReporting.cs

518 lines
19 KiB
C#

using DevExpress.XtraEditors;
using HL_FristAidPlatform_DTO;
using HL_FristAidPlatform_Public;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
namespace HL_FristAidPlatform_Apoplexy
{
public partial class Form_DataReporting : XtraForm
{
/// <summary>
/// 当前页
/// </summary>
private int curPage = 1;
/// <summary>
/// 每页大小
/// </summary>
private int pageSize = 50;
/// <summary>
/// 所有记录条数
/// </summary>
private int totalNumber = 0;
private byte[] aesKey;
private byte[] aesIv;
/// <summary>
/// 单位编码,请从授权文档中获取
/// </summary>
private string uuCode = "27144";
private string acZLType = "";
/// <summary>
/// 授权码,请从授权文档中获取
/// </summary>
private string uuAuth = "wKZIUUPCnxtbmAiRQN8dYGsir0uBBUaLHFeyf3KgRT3K3fjIkMhiIEFqb0adkNAS";
/// <summary>
/// 过期时间
/// </summary>
private int timeout = 40000;
private Encoding enc = Encoding.UTF8;
private DateTime exp = DateTime.Now;
private string token;
public Form_DataReporting()
{
InitializeComponent();
}
private void Form_DataReporting_Load(object sender, EventArgs e)
{
GetDate(Information.Hospital.GUID, "", "", "", "", "", pageSize, curPage);
}
private void simpleButton_Search_Click(object sender, EventArgs e)
{
switch (radioGroup1.SelectedIndex)
{
case 1:
acZLType = "01";
break;
case 2:
acZLType = "02";
break;
case 3:
acZLType = "03";
break;
case 4:
acZLType = "04";
break;
case 5:
acZLType = "05";
break;
}
GetDate(Information.Hospital.GUID, acZLType, txt_name.Text, txt_acHzCode.Text, time_cytimeOne.TimeValue, time_cytimeTwo.TimeValue, pageSize, curPage);
}
public void GetDate(string hospitalGuid, string acZLType, string name, string acHzCode, string cytimeOne, string cytimeTwo, int pageSize, int pageIndex)
{
string Url = string.Format("api/service/ApoplexyPatientReport/GetApoplexyReportPatientList?hospitalGuid={0}&acZLType={1}&name={2}&acHzCode={3}&cytimeOne={4}&cytimeTwo={5}&pageSize={6}&pageIndex={7}", hospitalGuid, acZLType, name, acHzCode, cytimeOne, cytimeTwo, pageSize, curPage);
DataTable dt = DBHelpClass.Get(Url);
gridControl1.DataSource = dt;
totalNumber = DBHelpClass.TotalNumber;
userControlForPage.RefreshPager(pageSize, totalNumber, curPage);//更新分页控件显示。
}
private void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
{
if (e.Column.FieldName == "Gender")
{
string value = e.Value.ToString();
if (value == "1")
{
e.DisplayText = "男";
}
if (value == "2")
{
e.DisplayText = "女";
}
}
if (e.Column.FieldName == "HospitalizationTime")
{
string value = e.Value.ToString();
if (!string.IsNullOrEmpty(value))
{
e.DisplayText = Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm");
}
}
if (e.Column.FieldName == "acZLType")
{
string value = e.Value.ToString();
string str = "";
if (!string.IsNullOrEmpty(value))
{
if (value.Contains("01"))
{
if (!string.IsNullOrEmpty(str))
{
str += ";静脉溶栓";
}
else
{
str += "静脉溶栓";
}
}
if (value.Contains("02"))
{
if (!string.IsNullOrEmpty(str))
{
str += ";血管内介入治疗";
}
else
{
str += "血管内介入治疗";
}
}
if (value.Contains("03"))
{
if (!string.IsNullOrEmpty(str))
{
str += ";脑出血";
}
else
{
str += "脑出血";
}
}
if (value.Contains("04"))
{
if (!string.IsNullOrEmpty(str))
{
str += ";颅内动脉瘤";
}
else
{
str += "颅内动脉瘤";
}
}
if (value.Contains("05"))
{
if (!string.IsNullOrEmpty(str))
{
str += ";CEA/CAS";
}
else
{
str += "CEA/CAS";
}
}
}
e.DisplayText = str;
}
}
private void repositoryItemButtonEdit1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
{
int selectRow = gridView1.GetSelectedRows()[0];
string patientGuid = PublicClass.ToString(gridView1.GetRowCellValue(selectRow, "GUID"), "");
string Url = string.Format("api/service/ApoplexyPatientReport/ReportSinglePatientXML?patientGuid={0}", patientGuid);
ApoplexyReportDTO dto = new ApoplexyReportDTO();
dto.Archives = new Archives();
dto.ArchivesCases = new ArchivesCases();
dto.RYQK = new RYQK();
dto.HealthExam = new HealthExam();
dto.TOAST = new T_Service_Apoplexy_TOAST();
dto.RSZL = new T_Service_Apoplexy_RSZL();
dto.XGZL = new T_Service_Apoplexy_XGZL();
dto.NCXZYJC = new T_Service_Apoplexy_NCXZYJC();
dto.NCXSS = new T_Service_Apoplexy_NCXSS();
dto.ZYYW = new T_Service_Apoplexy_ZYYW();
dto.DMLSS = new T_Service_Apoplexy_DMLSS();
dto.CEACZ = new T_Service_Apoplexy_CEACZ();
dto.SHYW = new T_Service_Apoplexy_SHYW();
dto.CYPG = new CYPG();
dto.KFZL = new T_Service_Apoplexy_KFZL();
dto.JKJY = new T_Service_Apoplexy_JKJY();
dto.CYQK = new CYQK();
dto.NCXYWB = new T_Service_Apoplexy_NCXYWB();
dto.NCXAVM = new T_Service_Apoplexy_NCXAVM();
dto = DBHelpClass.GetDateModel<ApoplexyReportDTO>(Url);
if (dto != null)
{
dto.ArchivesCases.acTime = "2021-12-07 21:02";
ApoplexyReportDTOList apoplexyReportDTOList = new ApoplexyReportDTOList();
List<ApoplexyReportDTO> addList = new List<ApoplexyReportDTO>();
addList.Add(dto);
apoplexyReportDTOList.ApoplexyReportList = dto;
string xmldata = XmlSerialize<ApoplexyReportDTOList>(apoplexyReportDTOList);
sendXml(xmldata);
}
}
public static string XmlSerialize<T>(T obj)
{
using (StringWriter sw = new StringWriterWithEncoding(Encoding.UTF8))
{
//去掉要结点的 xmlns:xsi
XmlSerializerNamespaces _namespaces = new XmlSerializerNamespaces(
new XmlQualifiedName[] {
new XmlQualifiedName(string.Empty, "")
});
XmlSerializer serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(sw, obj, _namespaces);
sw.Close();
return sw.ToString();
}
}
public void sendXml(string data)
{
//2018院内筛查上报测试接口;
string url = "https://api.chinasdc.cn/StrokeInterface/Interface2018BB/AddArchivesCases2018ZB03Test";
//string url = "https://api.chinasdc.cn/StrokeInterface/Interface2018BB/AddArchivesCases2018ZB03";
string response = UpData(url, data);
if (string.IsNullOrEmpty(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;
XtraMessageBox.Show(Msg);
if (Err.Equals("0"))
{
//上传成功
}
else
{
XtraMessageBox.Show(response);
//上传失败,记录错误。
WriteErrorLog("卒中病例上传错误日志西", response);
}
}
}
/// <summary>
/// 调用接口上传数据
/// </summary>
/// <param name="url">接口url</param>
/// <param name="data">数据xml</param>
/// <returns></returns>
public string UpData(string url, string data)
{
string token_ = GetToken();
if (string.IsNullOrEmpty(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 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))
{
//调用授权接收出错
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
{
//调用授权接收出错 记录错误
return null;
}
}
}
else
{
return token;
}
}
/// <summary>
/// 调用http post接口
/// </summary>
/// <param name="url">url地址</param>
/// <param name="parameters">参数</param>
/// <returns>Response</returns>
private 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 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);
}
/// <summary>
/// 记录错误日志
/// 精确到每分钟
/// </summary>
/// <param name="file_name_prefix">文件名前缀</param>
/// <param name="text">记录内容</param>
public static void WriteErrorLog(string file_name_prefix = "", string text = "")
{
if (string.IsNullOrEmpty(file_name_prefix))
{
file_name_prefix = "Debug";
}
string path = AppDomain.CurrentDomain.BaseDirectory;
path = Path.Combine(path, "logs\\");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string fileFullName = Path.Combine(path, string.Format("{0}{1}.txt", file_name_prefix, DateTime.Now.ToString("yyyyMMdd-HHmm")));
using (StreamWriter output = File.AppendText(fileFullName))
{
output.WriteLine(text);
output.Close();
}
}
private void gridControl1_MouseDoubleClick(object sender, MouseEventArgs e)
{
try
{
//gridView2.SelectRow(this.gridView2.FocusedRowHandle);
ShowDetail();
}
catch (Exception ex)
{
//XtraMessageBox.Show("请先勾选该患者后再双击打开!");
PublicClass.WriteErrorLog(this.Text, "查看患者详情:\r\n" + ex);
}
}
private void ShowDetail()
{
if (gridView1.DataRowCount > 0)
{
// loading.ShowMessage();
int selectRow = gridView1.FocusedRowHandle;
//long PatientID = PublicClass.ToInt64(gridView2.GetRowCellValue(selectRow, "编号").ToString(), 0);
string GUID = gridView1.GetRowCellValue(selectRow, "GUID").ToString();
Form_PatientDetail detail = new Form_PatientDetail(GUID, "1");//, hospitalGuid
detail.WindowState = FormWindowState.Maximized;
detail.Owner = this;
// loading.ShowMessage("请稍候", "正在加载...");
detail.Show();
// loading.HideMessage();
}
}
private void MyPagerEvents(int curPage, int pageSize)
{
this.curPage = curPage;
this.pageSize = pageSize;
GetDate(Information.Hospital.GUID, acZLType, txt_name.Text, txt_acHzCode.Text, time_cytimeOne.TimeValue, time_cytimeTwo.TimeValue, pageSize, curPage);
}
private void userControlForPage_myPagerEvents(int curPage, int pageSize)
{
userControlForPage.myPagerEvents += MyPagerEvents;
}
}
}