using Newtonsoft.Json;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using 云心电ECG数据解析服务端;
namespace _1200gFtp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
FileSystemWatcher watcher = new FileSystemWatcher();
OssUnity oss = new OssUnity();
private void Form1_Load(object sender, EventArgs e)
{
//this.WindowState = FormWindowState.Minimized;
textBox1.Text = File.ReadAllText(Application.StartupPath + @"\dataPath.txt");
}
///
/// 初始化监听
///
/// 需要监听的目录
/// 需要监听的文件类型(筛选器字符串)
/// 是否启用监听
/// 是否监听子目录
private void WatcherStrat(string StrWarcherPath, string FilterType, bool IsEnableRaising, bool IsInclude)
{
//初始化监听
watcher.BeginInit();
//设置监听文件类型
watcher.Filter = FilterType;
//设置是否监听子目录
watcher.IncludeSubdirectories = IsInclude;
//设置是否启用监听?
watcher.EnableRaisingEvents = IsEnableRaising;
//设置需要监听的更改类型(如:文件或者文件夹的属性,文件或者文件夹的创建时间;NotifyFilters枚举的内容)
watcher.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.Security | NotifyFilters.Size;
//设置监听的路径
watcher.Path = StrWarcherPath;
//注册创建文件或目录时的监听事件
watcher.Created += new FileSystemEventHandler(watch_created);
watcher.Changed += new FileSystemEventHandler(watch_changed);
//结束初始化
watcher.EndInit();
}
private void watch_changed(object sender, FileSystemEventArgs e)
{
////事件内容
//string fileName = e.FullPath;
//if (System.IO.Path.GetExtension(fileName).ToUpper().Equals(".XML", StringComparison.CurrentCultureIgnoreCase))
// ftpDataPost(fileName);
}
///
/// 获取文件MD5值
///
/// 文件绝对路径
/// MD5值
public static string GetMD5HashFromFile(string fileName)
{
try
{
FileStream file = new FileStream(fileName, FileMode.Open);
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("X2"));
}
return sb.ToString();
}
catch (Exception ex)
{
throw new Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
}
}
///编码
public static string EncodeBase64(string code_type, string code)
{
string encode = "";
byte[] bytes = Encoding.GetEncoding(code_type).GetBytes(code);
try
{
encode = Convert.ToBase64String(bytes);
}
catch
{
encode = code;
}
return encode;
}
///解码
public static string DecodeBase64(string code_type, string code)
{
string decode = "";
byte[] bytes = Convert.FromBase64String(code);
try
{
decode = Encoding.GetEncoding(code_type).GetString(bytes);
}
catch
{
decode = code;
}
return decode;
}
///
/// 将患者姓名 和 his结果里的患者姓名进行对比 如果姓名匹配 那么就将这个人的 patientid 修改为 his结果里的 jianchaid
///
///
patientInfo ComparePatientInfo(FlyHisEcgDataModel FHEDM, string pName)
{
if (!string.IsNullOrEmpty(pName))
{
for (int i = 0; i < FHEDM.rows.Count; i++)
if (FHEDM.rows[i].name == pName)
{
return FHEDM.rows[i];
}
}
else
return null;
return null;
}
///
/// 提交诊断结论到福乐云
///
///
string submitInfoToFLY(FLYecgReport FER)
{
string jsonContent = JsonConvert.SerializeObject(FER);
string token = commonOptions.gettoken(ConfigurationManager.AppSettings["flowygtUserName"], ConfigurationManager.AppSettings["flowygtUserPwd"], ConfigurationManager.AppSettings["flowygtLoginUrl"]);//获取token
string resultStr = commonOptions.PostByParas(ConfigurationManager.AppSettings["flowygtReportAddUrl"], token, jsonContent);
return resultStr;
}
///
/// 上传诊断结论到福乐云平台
///
string FlySubmit(string patientId,int status1)
{
//上传报告到福乐云平台
FLYecgReport FER = new FLYecgReport();
FER.appointmentId = patientId;
FER.status = status1;//状态 0-已预约 1-已登记 2-审核中 3-已上传报告 4-查看报告8-撤回登记 9-取消预约 7-检查中 5-.放弃诊断 6.-已退费
return submitInfoToFLY(FER);
}
///
/// 上传心电图图片文件到福乐云平台
///
void FlyEcgReportFileSubmit(string appointment_id, string imgPath)
{
byte[] fileData = File.ReadAllBytes(imgPath);
FileInfo fileInfo = new FileInfo(imgPath);
Dictionary dic = new Dictionary();
dic.Add("appointment_id", appointment_id);
string token = commonOptions.gettoken(ConfigurationManager.AppSettings["flowygtUserName"], ConfigurationManager.AppSettings["flowygtUserPwd"], ConfigurationManager.AppSettings["flowygtLoginUrl"]);//获取token
commonOptions.PostFile2(ConfigurationManager.AppSettings["flowygtUploadFileUrl"], imgPath, dic, token);
}
///
/// 提交患者信息到福乐云
///
///
string submitPatientInfoToFLY(string patientId1)
{
string sql = "select * from Tb_PatientInfo where PatientID='" + patientId1 + "'";
DataTable dt_1 = SqliteOptions_sql.CreateInstance().ExcuteSqlite(sql);
PatientMd PMD = new PatientMd();
string orgSN = string.Empty;
string orgName = string.Empty;
if (dt_1.Rows.Count == 1)
{
PMD.ID = dt_1.Rows[0]["ID"].ToString();
PMD.PatientID = dt_1.Rows[0]["PatientID"].ToString();
PMD.PatientName = dt_1.Rows[0]["PatientName"].ToString();
PMD.P_Id = dt_1.Rows[0]["P_Id"].ToString();
PMD.Gender = dt_1.Rows[0]["Gender"].ToString();
PMD.Birthday = dt_1.Rows[0]["Birthday"].ToString();
PMD.Folk = dt_1.Rows[0]["Folk"].ToString();
DataTable dt_org = SqliteOptions_sql.CreateInstance().ExcuteSqlite("select * from tb_org where orgID='" + dt_1.Rows[0]["orgID"].ToString() + "'");
orgSN = dt_org.Rows[0]["orgSN"].ToString();
orgName = dt_org.Rows[0]["orgName"].ToString();
}
patientInfoFLY pfy = new patientInfoFLY();
pfy.patientName = PMD.PatientName;
pfy.idCard = !string.IsNullOrEmpty(PMD.P_Id) ? PMD.P_Id : "-";
pfy.sex = PMD.Gender;
pfy.birthday = PMD.Birthday;
try
{
pfy.yearold = (DateTime.Now.Year - DateTime.Parse(PMD.Birthday).Year).ToString();
}
catch { }
pfy.area = "心脏";
pfy.Items = "Items";
pfy.appointmentTimes = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
pfy.symptom = "无";
pfy.hospitalCode = orgSN;
pfy.hospitalName = orgName;
pfy.departmentCode = "0235";
pfy.departmentName = "心电图室";
pfy.resDoctorCode = "5216";
pfy.resDoctorName = "心电图医生";
pfy.patientType = "门诊";
pfy.patientTypeCode = 0;
pfy.nation = PMD.Folk;
pfy.appointmentId = PMD.PatientID;
pfy.wearTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
pfy.patientCode = PMD.ID;
string jsonContent = JsonConvert.SerializeObject(pfy);
string token = commonOptions.gettoken(ConfigurationManager.AppSettings["flowygtUserName"], ConfigurationManager.AppSettings["flowygtUserPwd"], ConfigurationManager.AppSettings["flowygtLoginUrl"]);//获取token
string resultStr = commonOptions.PostByParas(ConfigurationManager.AppSettings["flowygtRegistrationAddUrl"], token, jsonContent);
return resultStr;
}
///
/// 将患者信息插入数据库中并自动申请判读
///
///
void excuteOption(string ecgFilePath, int excuteIndex)
{
try
{
string newEcgFilePath = ecgFilePath;
FileInfo fi1 = new FileInfo(newEcgFilePath);
//if (fi1.Extension.ToUpper() == ".BMP")
//{
// ecgFilePath = fi1.FullName.Replace(fi1.Extension, ".jpg");
// using (Image image = Image.FromFile(newEcgFilePath))
// {
// // 将图片保存为JPG格式
// image.Save(ecgFilePath, ImageFormat.Jpeg);
// }
// fi1.Delete();//转成jpg后 将bmp图删掉
//}
analysisParas alp = new analysisParas();
if (fi1.Extension.ToUpper() == ".XML")
{
////解析XML并生成jpg心电图
//ecgCreate ec = new ecgCreate();
//ecgFilePath = ec.createEcgBmpFile(fi1.FullName, "心电图报告");
//if (File.Exists(ecgFilePath))
//{
// fi1.Delete();//转成jpg后 将XML图删掉
//}
//else
//{
// fi1.Delete();//转成jpg后 将XML图删掉
// return;
//}
//解析XML并生成jpg心电图
// ecgCreate ec = new ecgCreate();
Hl7EcgOptions hl7EcgOptions = new Hl7EcgOptions();
ecgFilePath = hl7EcgOptions.createEcgBmpByHL7XMLFile(fi1.FullName, "心电图报告");//根据 hl7 xml文件绘制心电图报告
alp = hl7EcgOptions.getAnalysisParas(fi1.FullName);//读取hl7 xml文件里的分析数据和患者信息
//将分析参数写入到分析参数表中
//-----------------------------------
if (string.IsNullOrEmpty(alp.patientid))
alp.patientid = Guid.NewGuid().ToString();
string ecgAnalysisJson = JsonConvert.SerializeObject(alp);//把心电数据保存成json文件
string jsonFilePath = fi1.DirectoryName + @"\" + Guid.NewGuid().ToString() + ".txt";
File.WriteAllText(jsonFilePath, ecgAnalysisJson, Encoding.UTF8);//保存json文件到指定的目标统一http访问目录下
if (File.Exists(ecgFilePath))
{
fi1.Delete();//转成jpg后 将XML图删掉
}
else
{
fi1.Delete();//转成jpg后 将XML图删掉
return;
}
}
FileInfo fi = new FileInfo(ecgFilePath);
string patientId2 = alp.patientid;
string patientname = alp.patientName;
//if (fi.Name.Contains("["))
// patientId2 = fi.Name.Substring(fi.Name.IndexOf('[') + 1, fi.Name.IndexOf(']') - fi.Name.IndexOf('[') - 1);
//else
// patientId2 = Guid.NewGuid().ToString();
//if(string.IsNullOrEmpty(patientId2))
// patientId2 = Guid.NewGuid().ToString();
//if (fi.Name.IndexOf('[') > 0)
// patientname = fi.Name.Substring(0, fi.Name.IndexOf('['));
string orgSN = fi.Directory.Name;
DataTable dt_org1 = SqliteOptions_sql.CreateInstance().ExcuteSqlite("select * from tb_org where orgSN='" + orgSN + "'");
string orgid = "";
string highLevelOrgid = "";
string inHisCode = "";
if (dt_org1.Rows.Count == 1)
{
orgid = dt_org1.Rows[0]["orgID"].ToString();
highLevelOrgid = dt_org1.Rows[0]["highLevelOrgID"].ToString();
inHisCode = dt_org1.Rows[0]["inHisCode"].ToString().Trim();//在福乐云his中的机构代码
}
string queryDate = fi.CreationTime.ToString("yyyy-MM-dd");//文件的创建时间作为 his中患者信息查询的 查询日期
//获取福乐云HIS接口的token
string hisToken = commonOptions.getHisToken(ConfigurationManager.AppSettings["hisGetEcgTokenUrl"], ConfigurationManager.AppSettings["hisAppkey"], ConfigurationManager.AppSettings["appsecret"]);
FlyHisEcgDataModel FHEDM = commonOptions.GetHisEcgData(ConfigurationManager.AppSettings["hisGetEcgDataUrl"], inHisCode, queryDate, hisToken);
// 将患者姓名 和 his结果里的患者姓名进行对比 如果姓名匹配 那么就将这个人的 patientid 修改为 his结果里的 jianchaid
patientInfo pi = ComparePatientInfo(FHEDM, patientname);
if(pi!=null)
patientId2 = pi.jianchaid;//检查id作为患者patientid
//string returnStrx = FlySubmit(patientId2,7);//收到心电数据后,将心电数据状态传到福乐云平台
string newEcgFilePath1 = fi.DirectoryName + @"\" + patientId2 + fi.Extension;
fi.CopyTo(newEcgFilePath1);
string sql = "select * from Tb_PatientInfo where PatientID='" + patientId2 + "' and orgID='" + orgid + "' and isXinDianTu = '1'";
DataTable dt_getData = SqliteOptions_sql.CreateInstance().ExcuteSqlite(sql);
if (dt_getData.Rows.Count == 1)
{
string patientId = dt_getData.Rows[0]["PatientID"].ToString();
string sql1 = "update Tb_PatientInfo set CreateDate='" + fi.CreationTime.ToString("yyyy-MM-dd HH:mm:ss") + "' where PatientID='" + patientId + "'";
SqliteOptions_sql.CreateInstance().SqliteUpdate(sql1);
//string fileMd5 = GetMD5HashFromFile(fi.FullName);
//string returnMd5 = oss.PutObject("aecgdatas", patientId + fi.Extension, ecgFilePath);
string returnStr = FtpHelper.FileUpLoad(fi.FullName, "", patientId2 + fi.Extension);//把生成的心电图和心电json文件 放到一个统一的http访问的一个文件夹里
if (returnStr == "上传成功")
{
textBox2.AppendText(sql1 + "文件: " + fi.Name + "修改成功:" + patientId + fi.Extension + " | " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n");
fi.Delete();
// fi_1.Delete();
}
}
else
{
string idStr = Guid.NewGuid().ToString();
string gender1 = pi != null ? pi.sex : "";
string birthday1 = pi != null ? pi.birthdate : "";
string sql2 = "insert into Tb_PatientInfo (ID,PatientID,CreateDate,isXinDianTu,orgID,highLevelOrgID,medicalSN,PatientName,Gender,Birthday) values ('" + idStr + "','" + patientId2 + "','" + fi.CreationTime.ToString("yyyy-MM-dd HH:mm:ss") + "','1','" + orgid + "','" + highLevelOrgid + "','','" + patientname + "','" + gender1 + "','" + birthday1 + "')";
SqliteOptions_sql.CreateInstance().SqliteAdd(sql2);
//string fileMd5 = GetMD5HashFromFile(fi.FullName);
//string returnMd5 = oss.PutObject("aecgdatas", patientId2 + fi.Extension, ecgFilePath);
string returnStr = FtpHelper.FileUpLoad(fi.FullName, "", patientId2 + fi.Extension);
if (returnStr == "上传成功")
{
textBox2.AppendText(sql2 + "文件: " + fi.Name + " 上传成功:" + patientId2 + fi.Extension + " | " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n");
fi.Delete();
// fi_1.Delete();
}
}
string returnStrxs= submitPatientInfoToFLY(patientId2);//先把患者信息提交到福乐云医共体平台
string returnStrx = FlySubmit(patientId2, 3);//收到心电数据后,将心电数据状态传到福乐云平台
FileInfo fi_1= new FileInfo(newEcgFilePath1);
if (fi_1.Exists)
{
FlyEcgReportFileSubmit(patientId2, newEcgFilePath1);//不管三七二十一,先把收到的心电图文件到福乐云平台
fi_1.Delete();
}
//if (!fi_1.Exists)
// FlyEcgReportFileSubmit(patientId2, ecgFilePath);//不管三七二十一,先把收到的心电图文件到福乐云平台
//else
// FlyEcgReportFileSubmit(patientId2, newEcgFilePath1);//不管三七二十一,先把收到的心电图文件到福乐云平台
//string sql = "select * from Tb_PatientInfo where PatientID='" + patientId2 + "' and orgID='" + orgid + "' and isXinDianTu = '1'";
//DataTable dt_getData = SqliteOptions_sql.CreateInstance().ExcuteSqlite(sql);
//if (dt_getData.Rows.Count == 1)
//{
// string patientId = dt_getData.Rows[0]["PatientID"].ToString();
// string sql1 = "update Tb_PatientInfo set CreateDate='" + fi.CreationTime.ToString("yyyy-MM-dd HH:mm:ss") + "' where PatientID='" + patientId + "'";
// SqliteOptions_sql.CreateInstance().SqliteUpdate(sql1);
// //string fileMd5 = GetMD5HashFromFile(fi.FullName);
// //string returnMd5 = oss.PutObject("aecgdatas", patientId + fi.Extension, ecgFilePath);
// string returnStr = FtpHelper.FileUpLoad(fi.FullName, "", patientId2 + fi.Extension);
// if (returnStr == "上传成功")
// {
// textBox2.AppendText(sql1+"文件: " + fi.Name + "修改成功:" + patientId + fi.Extension + " | " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n");
// fi.Delete();
// fi_1.Delete();
// }
//}
//else
//{
// string idStr = Guid.NewGuid().ToString();
// string gender1 = pi != null ? pi.sex : "";
// string birthday1 = pi != null ? pi.birthdate : "";
// string sql2 = "insert into Tb_PatientInfo (ID,PatientID,CreateDate,isXinDianTu,orgID,highLevelOrgID,medicalSN,PatientName,Gender,Birthday) values ('" + idStr + "','" + patientId2 + "','" + fi.CreationTime.ToString("yyyy-MM-dd HH:mm:ss") + "','1','" + orgid + "','" + highLevelOrgid + "','','"+ patientname + "','"+ gender1 + "','"+ birthday1 + "')";
// SqliteOptions_sql.CreateInstance().SqliteAdd(sql2);
// //string fileMd5 = GetMD5HashFromFile(fi.FullName);
// //string returnMd5 = oss.PutObject("aecgdatas", patientId2 + fi.Extension, ecgFilePath);
// string returnStr = FtpHelper.FileUpLoad(fi.FullName, "", patientId2 + fi.Extension);
// if (returnStr == "上传成功")
// {
// textBox2.AppendText(sql2 + "文件: " + fi.Name + " 上传成功:" + patientId2 + fi.Extension + " | " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n");
// fi.Delete();
// fi_1.Delete();
// }
//}
}
catch { }
}
void ftpDataPost(string filePath, int excuteIndex)
{
//if (Path.GetExtension(filePath).ToUpper().Equals(".JPG", StringComparison.CurrentCultureIgnoreCase)|| Path.GetExtension(filePath).ToUpper().Equals(".BMP", StringComparison.CurrentCultureIgnoreCase) || Path.GetExtension(filePath).ToUpper().Equals(".XML", StringComparison.CurrentCultureIgnoreCase))
if (Path.GetExtension(filePath).ToUpper().Equals(".XML", StringComparison.CurrentCultureIgnoreCase))
{
excuteOption(filePath, excuteIndex);
}
}
private delegate void DoDataDelegate(object txtContent);
private void DoData(object txtContent)
{
try
{
if (textBox2.InvokeRequired)
{
DoDataDelegate d = DoData;
textBox2.Invoke(d, txtContent);
}
else
{
if (checkBox1.Checked)
textBox2.AppendText(txtContent + "\r\n");
}
}
catch { }
}
void fileBackUp(FileInfo fi)
{
string newFilePath = textBox1.Text + @"\dataBackUp\" + fi.Name;
File.Move(fi.FullName, newFilePath);
}
///
/// 创建文件或者目录时的监听事件
///
///
///
private void watch_created(object sender, FileSystemEventArgs e)
{
////事件内容
//string fileName = e.FullPath;
//if (System.IO.Path.GetExtension(fileName).ToUpper().Equals(".XML", StringComparison.CurrentCultureIgnoreCase))
// ftpDataPost(fileName);
}
string backUpDirectory;
private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
FolderBrowserDialog FBD = new FolderBrowserDialog();
if (FBD.ShowDialog() == DialogResult.OK)
{
// WatcherStrat(FBD.SelectedPath, "*.*", true, true);
File.WriteAllText(Application.StartupPath + @"\dataPath.txt", FBD.SelectedPath);
textBox1.Text = FBD.SelectedPath;
DirectoryInfo di = new DirectoryInfo(FBD.SelectedPath);
//创建一个监听目录之外的 备份目录
string parentDirectory = di.Parent.Name;
backUpDirectory = di.Parent.Name + @"\backUpDatas";
if (!Directory.Exists(backUpDirectory))
Directory.CreateDirectory(backUpDirectory);
}
}
}
void uploadDataToOss(FileInfo fi)
{
if (fi != null && fi.Exists)
{
OssUnity oss = new OssUnity();
//上传文件到oss
string returnMd5 = oss.PutObject("1200g", fi.Name, fi.FullName);
//////上传成功,删除本地文件
//fi.Delete();
}
}
patientInfoModel ReadXMLByPath(patientInfoModel pfm, string xmlPath)
{
string caseName = "";
string age = "0";
string sex = "";
string hospitalRoom = "";
string HR = string.Empty, PR = string.Empty, P = string.Empty, QRS = string.Empty, T = string.Empty, QT = string.Empty, QTc = string.Empty, PAxis = string.Empty, QRSAxis = string.Empty, TAxis = string.Empty, R_V5 = string.Empty, S_V1 = string.Empty;
string startTime = string.Empty, endTime = string.Empty;
string autoDiagResult = string.Empty;
EcgViewModel EVM = ReadXMLByPath(xmlPath);
try
{
XmlDocument doc1 = new XmlDocument();
doc1.Load(xmlPath);
//获取当前XML文档的根 一级
XmlNode oNode = doc1.DocumentElement;
//获取根节点的所有子节点列表
XmlNodeList oList = oNode.ChildNodes;
//标记当前节点
XmlNode oCurrentNode;
//遍历所有二级节点
for (int i = 0; i < oList.Count; i++)
{
//二级
oCurrentNode = oList[i];
//检测当前节点的名称,节点的值是否与已知匹配
if (oCurrentNode.Name.Equals("caseinformation"))
{
//检测是否有子节点 三级
if (oCurrentNode.HasChildNodes)
{
//遍历当前节点的所有子节点
for (int n = 0; n < oCurrentNode.ChildNodes.Count; n++)
{
//检测当前节点的子节点名称是否与已知匹配
if (oCurrentNode.ChildNodes[n].Name.ToLower() == "otherparam")
{
//遍历当前节点的所有子节点
for (int ii = 0; ii < oCurrentNode.ChildNodes[n].ChildNodes.Count; ii++)
{
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("caseName"))
{
caseName = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("sex"))
{
sex = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("age"))
{
age = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("hr"))
{
hospitalRoom = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
}
}
//检测当前节点的子节点名称是否与已知匹配
if (oCurrentNode.ChildNodes[n].Name == "Parameters")
{
//遍历当前节点的所有子节点
for (int ii = 0; ii < oCurrentNode.ChildNodes[n].ChildNodes.Count; ii++)
{
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("HR"))//心率
{
HR = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("PRInterval"))
{
PR = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("PDuration"))
{
P = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("QRSDuration"))
{
QRS = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("TDuration"))
{
T = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("QTInterval"))
{
QT = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("QTcInterval"))
{
QTc = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("PAxis"))
{
PAxis = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("QRSAxis"))
{
QRSAxis = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("TAxis"))
{
TAxis = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("R_V5"))
{
R_V5 = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("S_V1"))
{
S_V1 = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
}
}
}
}
}
if (oCurrentNode.Name.Equals("effectiveTime"))
{
//检测是否有子节点 三级
if (oCurrentNode.HasChildNodes)
{
//遍历当前节点的所有子节点
for (int n = 0; n < oCurrentNode.ChildNodes.Count; n++)
{
//检测当前节点的子节点名称是否与已知匹配
if (oCurrentNode.ChildNodes[n].Name == "low")
{
startTime = oCurrentNode.ChildNodes[n].Attributes["value"].Value;
}
if (oCurrentNode.ChildNodes[n].Name == "high")
{
endTime = oCurrentNode.ChildNodes[n].Attributes["value"].Value;
}
}
}
}
}
}
catch (Exception ex) { }
pfm.patientName = caseName;
pfm.patientSex = sex.Trim() == "1" ? "男" : "女";
pfm.testDate = startTime.Insert(8, "T");
pfm.evidence = EVM.AutoResult;
if (string.IsNullOrEmpty(pfm.evidence.Trim()))
pfm.evidence = "-";
//pfm.startTime =startTime;
//pfm.endTime =endTime;
if (string.IsNullOrEmpty(age))
age = "0";
pfm.isPanDu = hospitalRoom == "1" ? true : false;
pfm.patientAge = int.Parse(age);
return pfm;
}
private void button2_Click(object sender, EventArgs e)
{
string postContent = "{\"c_file_name\": \"BJXHYY_ECG12000_XD001\",\"c_source\": \"门诊\",\"c_case_state\":\"未判读\",\"p_name\":\"测试患者3\",\"p_gender\":\"女\",\"p_birth\":\"1985-12-17\",\"c_create_time\":\"2019-12-22\"}";
string returnStr = HttpPost(postContent);
}
private string HttpPost(string postDataStr)
{
string Url = "http://ecggl.drchip.cn/api/Case";
WebRequest request = WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/json";
byte[] buf = Encoding.UTF8.GetBytes(postDataStr);
byte[] byteArray = System.Text.Encoding.Default.GetBytes(postDataStr);
request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
request.GetRequestStream().Write(buf, 0, buf.Length);
WebResponse response = request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
return retString;
}
private void button3_Click(object sender, EventArgs e)
{
//patientInfoModel pfm = ReadXMLByPath(@"C:\Users\PETER\Desktop\芯动心电网络管理系统\FTP数据\e30c180b-2512-4073-ae7a-d65be041f424.XML");
//string jsonStr = JsonConvert.SerializeObject(pfm);
//string returnStr = HttpPost(jsonStr);
}
private void timer1_Tick(object sender, EventArgs e)
{
ftpDataJieXi();//解析FTP传上来的xml
// startExe();
}
void startExe()
{
//try
//{
string exePath = File.ReadAllText(Application.StartupPath + @"\exePath.txt",Encoding.Default);
// MessageBox.Show(exePath);
Process[] mProcs = Process.GetProcessesByName(@"HbAutoDiagnosisPro");
Process[] mProcs1 = Process.GetProcessesByName(@"HL_Holter");
if (mProcs.Length == 0)
{
if (mProcs1.Length > 0)
foreach (var p in mProcs1)
p.Kill();
Process.Start(exePath);
//System.Diagnostics.Process myprocess = new System.Diagnostics.Process();
//System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(exePath, "");
//myprocess.StartInfo = startInfo;
//myprocess.StartInfo.UseShellExecute = false;
//myprocess.Start();
}
//}
//catch (Exception ex) { MessageBox.Show(ex.ToString()); }
}
//解析FTP传上来的xml
void ftpDataJieXi()
{
timer1.Enabled = false;
try
{
if (!string.IsNullOrEmpty(textBox1.Text))
{
string[] diList=Directory.GetDirectories(textBox1.Text);
foreach (string dir in diList)
{
List fileList = GetFiles(dir);
for (int i = 0; i < fileList.Count; i++)
{
string fileName = fileList[i].FullName;
//if (System.IO.Path.GetExtension(fileName).ToUpper().Equals(".JPG", StringComparison.CurrentCultureIgnoreCase) || System.IO.Path.GetExtension(fileName).ToUpper().Equals(".BMP", StringComparison.CurrentCultureIgnoreCase) || System.IO.Path.GetExtension(fileName).ToUpper().Equals(".XML", StringComparison.CurrentCultureIgnoreCase))
if (System.IO.Path.GetExtension(fileName).ToUpper().Equals(".XML", StringComparison.CurrentCultureIgnoreCase))
ftpDataPost(fileName, 0);
}
}
}
}
catch (Exception ex)
{ textBox2.AppendText("异常:" + ex.ToString() + "\r\n"); }
timer1.Enabled = true;
}
///
/// 遍历当前目录及子目录
///
/// 文件路径
/// 所有文件
private List GetFiles(string strPath)
{
List lstFiles = new List();
List lstDirect = new List();
lstDirect.Add(strPath);
DirectoryInfo diFliles = null;
GetDirectorys(strPath, ref lstDirect);
foreach (string str in lstDirect)
{
try
{
diFliles = new DirectoryInfo(str);
lstFiles.AddRange(diFliles.GetFiles());
}
catch
{
continue;
}
}
return lstFiles;
}
private static void GetDirectorys(string strPath, ref List lstDirect)
{
DirectoryInfo diFliles = new DirectoryInfo(strPath);
DirectoryInfo[] diArr = diFliles.GetDirectories();
//DirectorySecurity directorySecurity = null;
foreach (DirectoryInfo di in diArr)
{
try
{
//directorySecurity = new DirectorySecurity(di.FullName, AccessControlSections.Access);
//if (!directorySecurity.AreAccessRulesProtected)
//{
lstDirect.Add(di.FullName);
GetDirectorys(di.FullName, ref lstDirect);
//}
}
catch
{
continue;
}
}
}
private void button4_Click(object sender, EventArgs e)
{
string sms_return = SMS.smsSend("18601017090,13121767333,13811297861,18055162573,18656976035", "【判读完成】姓名:潘小婷,判读结论:室颤,HRV变异严重,STT改变。");
}
private void button5_Click(object sender, EventArgs e)
{
textBox2.Text = string.Empty;
}
Thread th_rabbitMQ;
private void button6_Click(object sender, EventArgs e)
{
//var factory = new ConnectionFactory();
//factory.HostName = "39.98.107.44";//主机名,Rabbit会拿这个IP生成一个endpoint,这个很熟悉吧,就是socket绑定的那个终结点。
//factory.Port = 5672;
//factory.UserName = "ygt";//默认用户名,用户可以在服务端自定义创建,有相关命令行
//factory.Password = "ygt";//默认密码
//factory.VirtualHost = "ygt";
//using (var connection = factory.CreateConnection())//连接服务器,即正在创建终结点。
//{
// //创建一个通道,这个就是Rabbit自己定义的规则了,如果自己写消息队列,这个就可以开脑洞设计了
// //这里Rabbit的玩法就是一个通道channel下包含多个队列Queue
// using (var channel = connection.CreateModel())
// {
// //channel.ExchangeDeclare("ygt.ecg.jk.exchange", ExchangeType.Direct, false, false, null);
// ////channel.ExchangeDeclare("ygt.ecg.jk.exchange", ExchangeType.Topic, false, false, null);
// channel.QueueDeclare("ygt.ecg.jk.queue", true, false, false, null);
// channel.BasicQos(0, 1, false);
// //channel.QueueBind("ygt.ecg.jk.queue", "ygt.ecg.jk.exchange", "ygt.ecg.jk.key");
// var consumer = new QueueingBasicConsumer(channel);
// channel.BasicConsume("ygt.ecg.jk.queue", false, consumer);
// // consumer.Received += OnDataReceived;
// while (true)
// {
// var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
// var body = ea.Body;
// var message = Encoding.UTF8.GetString(body);
// submitHis03(message);// 提交数据到 his03
// Thread.Sleep(2000);
// string messageStr = message;
// channel.BasicAck(ea.DeliveryTag, false);
// }
// }
//}
th_rabbitMQ = new Thread(new ThreadStart(rabbitMQ));
th_rabbitMQ.IsBackground = true;
th_rabbitMQ.Start();
}
void rabbitMQ()
{
DoData("MQ数据接收中\r\n");
var factory = new ConnectionFactory();
factory.HostName = "10.1.99.39";//主机名,Rabbit会拿这个IP生成一个endpoint,这个很熟悉吧,就是socket绑定的那个终结点。
factory.Port = 5672;
factory.UserName = "ygt-hb";//默认用户名,用户可以在服务端自定义创建,有相关命令行
factory.Password = "ygt-hb";//默认密码
factory.VirtualHost = "ygt-hb";
using (var connection = factory.CreateConnection())//连接服务器,即正在创建终结点。
{
//创建一个通道,这个就是Rabbit自己定义的规则了,如果自己写消息队列,这个就可以开脑洞设计了
//这里Rabbit的玩法就是一个通道channel下包含多个队列Queue
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("ygt.xd.ecg.cd.queue", true, false, false, null);
channel.BasicQos(0, 1, false);
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("ygt.xd.ecg.cd.queue", false, consumer);
// consumer.Received += OnDataReceived;
while (true)
{
var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
DoData("接收到MQ消息:"+ message + "\r\n");
submitHis03(message);// 提交数据到 his03
Thread.Sleep(2000);
string messageStr = message;
channel.BasicAck(ea.DeliveryTag, false);
}
}
}
}
public static void OnDataReceived(object sender, BasicDeliverEventArgs e)
{
var body = e.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("已接收: {0}", message);
}
///
/// 提交数据到 his03
///
///
void submitHis03(string jsonStr)
{
panduReturnModel prm = JsonConvert.DeserializeObject(jsonStr);
DataTable dt01 = SqliteOptions_sql.CreateInstance().ExcuteSqlite("select * from guanxinPatients where applyId='"+prm.applyId+"'");
if (dt01.Rows.Count > 0)
{
string jsonStr2= DecodeBase64("utf-8", dt01.Rows[0]["patientJson"].ToString());
his03Model hm = JsonConvert.DeserializeObject(jsonStr2);
hm.pdfUrl = dt01.Rows[0]["pdfUrl"].ToString();
hm.dicomUrl = dt01.Rows[0]["dicomUrl"].ToString();
hm.testDate =Convert.ToDateTime(prm.reportTime).ToString("yyyyMMddTHHmmss");
hm.evidence = prm.reportFeatures;// 心电图xml里的自动结论
hm.conclusion = prm.reportConclusion;// 如果没有判读的 xml 这个字段为空即可。
string jsonStr1 = JsonConvert.SerializeObject(hm);
jsonStr1 = ("[" + jsonStr1 + "]");
//string returnStr = netOptions.HttpPost("http://his.hebjcws.com:7086/pm-s-report/ECG/HIS03", jsonStr1, "POST");
string returnStr = netOptions.HttpPost(apiList.his03, jsonStr1, "POST");
DoData(returnStr+"远程判读已传给his03|MQ数据接收中:" + jsonStr1 + "\r\n");
}
}
private void button7_Click(object sender, EventArgs e)
{
// string yy = "eyJzdGF0dXMiOjAsImFnZSI6MjQsImNvbmNsdXNpb24iOiIiLCJldmlkZW5jZSI6IumrmOS+p+WjgeW/g+ail+mZiOaXp+acnzvnlLXovbTovbvluqblj7PlgY87IiwidGVzdERhdGUiOiIyMDE5MTIyMVQxNDE1NTciLCJkaWNvbVVybCI6Imh0dHA6Ly8xMC4xMy4xLjM2OjkwODkvQjQzQjE2NUQ0QjJGRkY1MjZCNkM3RTUyOEQzQUJDOUUuWE1MIiwicGRmVXJsIjoiaHR0cDovLzEwLjEzLjEuMzY6OTA4OS9CNDNCMTY1RDRCMkZGRjUyNkI2QzdFNTI4RDNBQkM5RS5qcGciLCJwZXJzb25ObyI6IjIwMDAwMDYwMTgxMzE3Iiwic291cmNlVHlwZSI6IjIiLCJwZXJzb25JZCI6IjhhOGQ4MWEzNmZjMmMxOWUwMTcwNTZhZDhkNTMyYTI0IiwidHlwZSI6IjIiLCJwb3NJZCI6IjUwY2U5Y2M1LTYzMmMtN2M4My1lMDUzLTEyNjQwMTBhZGRmNSIsInNhbXBsZXN0YXRlIjoi5ZCmIiwicGF0aWVudFR5cGUiOiLkvY/pmaIiLCJkaXNlYXNlIjoi5LiK5ZG85ZC46YGT5oSf5p+TIiwiYXBwbHlUaW1lIjoiMjAyMDAyMThUMTMxMzE3IiwiaXRlbVByaWNlIjoiOCIsIml0ZW1OYW1lIjoi5bi46KeE5b+D55S15Zu+5qOA5p+lIiwiaXRlbUlkIjoiOGE4ZDgxYTE2YTljMmM0YTAxNmM3OTIwNWM4NjUyYjkiLCJkb2N0b3JOYW1lIjoi5byg5by6IiwiZG9jdG9ySWQiOiIwN2RjZjU5Zi1hZTQ5LTRjZWYtOGE4MC0yYTVkMGM5OTljNDAiLCJkZXBhcnRtZW50SWQiOiJkM2ZkZGIyOC03NWY2LTQ0MzItYWQ4Yi01ODg3MDgyNzk0MDYiLCJiZWROdW0iOiIxNeWupDQy5bqKIiwiYWdlVW5pdCI6IuWygSIsInNleCI6IuWlsyIsImlkZW50aXR5Q29kZSI6IjEzMDI4MzE5OTUxMDI5NzcwOCIsIm5hbWUiOiLmnpfnj4oiLCJoaXNDb2RlIjoiMjAwMDAwNjAiLCJpZCI6IjhhOGQ4MWEzNmZjMmMxOWUwMTcwNTZiNmZjOGEyYTdlIn0=";
// string jsonStr111= DecodeBase64("utf-8", yy);
//// string jsonStr111 = "{\"applyId\":\"8a8d81aa7058ab1601705c85c8630024\",\"applyStatus\":2,\"auditorTime\":\"2020-02-19 16:24:48\",\"auditorUserId\":\"8a81e39f6d6d77b9017056bd4c83130b\",\"auditorUserName\":\"测试医生\",\"crisis\":\"0\",\"diagnosticPosId\":\"8a81e39f6d6d77b901703d17065a0cfd\",\"patientBirthday\":\"1996-02-19 08:00:00\",\"patientId\":\"130283199510297708\",\"patientName\":\"林珊\",\"patientSex\":\"女\",\"positive\":\"2\",\"reportConclusion\":\"测试数据。\",\"reportFeatures\":\"测试数据。\",\"reportPdf\":\"http://10.13.1.42:9096/ygt-diagnose-service/diagnose_res/pdf/20200219/8a8d81aa705b812901705c85c8b1001d.pdf\",\"reportTime\":\"2020-02-19 16:24:48\",\"reportUserId\":\"8a81e39f6d6d77b9017056bd4c83130b\",\"reportUserName\":\"测试医生\",\"supplierId\":\"8a8d81aa703d250601703d7c10f40004\"}";
// // string jsonStr111 = "{\"status\":0,\"age\":40,\"conclusion\":\"\",\"evidence\":\"高侧壁心梗陈旧期;电轴轻度右偏;\",\"testDate\":\"20191221T141557\",\"dicomUrl\":\"https://zjkecgdatas.oss-cn-beijing.aliyuncs.com/D8B72AB5BD32A797B9D4AAF87D5E184B.XML\",\"pdfUrl\":\"https://zjkecgdatas.oss-cn-beijing.aliyuncs.com/D8B72AB5BD32A797B9D4AAF87D5E184B.jpg\",\"personNo\":\"2002140007143601\",\"sourceType\":\"1\",\"personId\":\"2c9a9cad7041fe9f017042d6500c02ec\",\"type\":\"2\",\"posId\":\"2c9580826a94e012016a968c21920164\",\"samplestate\":\"否\",\"patientType\":\"门诊\",\"disease\":\"沙门氏菌(亚利桑那)小肠炎\",\"applyTime\":\"20200214T163601\",\"itemPrice\":\"3\",\"itemName\":\"无创心电监测\",\"itemId\":\"ff8080816bbacdf9016bc00b83f90333\",\"doctorName\":\"基层医生\",\"departmentName\":\"全科\",\"doctorId\":\"2c9580826ab8eca6016ab9db50600000\",\"departmentId\":\"2c9580826a94e012016a968df29601bd\",\"ageUnit\":\"岁\",\"birthday\":\"1980-01-01 00:00:00.0\",\"sex\":\"男\",\"identityCode\":\"450101198001010772\",\"name\":\"联调测试004\",\"hisCode\":\"2002140007\",\"id\":\"2c9a9cad7041fe9f017042d727a702fb\"}";
// his03Model hm = JsonConvert.DeserializeObject(jsonStr111);
// hm.pdfUrl = "http://10.13.1.42:9096/ygt-diagnose-service/diagnose_res/pdf/20200219/8a8d81aa705b812901705c85c8b1001d.pdf";
// //hm.dicomUrl = "https://zjkecgdatas.oss-cn-beijing.aliyuncs.com/8B63CCE5E3856D86460CB4CDA856C63C.XML";
// hm.testDate = "20200219T165609";
// hm.evidence = "高侧壁心梗陈旧期;电轴轻度右偏;";// 心电图xml里的自动结论
// hm.conclusion = "测试数据。";// 如果没有判读的 xml 这个字段为空即可。
//// hm.posId = "50ce9cc5-632c-7c83-e053-1264010addf5";
// string jsonStr = JsonConvert.SerializeObject(hm);
// jsonStr = ("[" + jsonStr + "]");
// //string returnStr= netOptions.HttpPost("http://39.99.134.67:8080/pm-s-report/ECG/HIS03", jsonStr, "POST");
// string returnStr = netOptions.HttpPost("http://47.104.9.78:8033/pm-s-report/ECG/HIS03", jsonStr, "POST");
string tt = "[{\"status\":0,\"posId\":\"50ce9cc5-632c-7c83-e053-1264010addf5\",\"id\":\"8a8d81a36fc2c19e017056b3d1452a67\",\"testDate\":\"20200219T183430\",\"hisCode\":\"20000062\",\"name\":\"刘艳芳\",\"identityCode\":\"130728198911015028\",\"sex\":\"女\",\"age\":30,\"ageUnit\":\"岁\",\"itemId\":\"8a8d81a16a9c2c4a016c79205c8652b9\",\"itemName\":\"常规心电图检查\",\"departmentId\":\"d3fddb28-75f6-4432-ad8b-588708279406\",\"doctorId\":\"07dcf59f-ae49-4cef-8a80-2a5d0c999c40\",\"patientType\":\"住院\",\"evidence\":\"心电图正常\",\"pdfUrl\":\"http://10.13.1.36:9089/A375510E9601A39CB51628F14AD9E2EF.jpg\",\"optName\":null,\"auditName\":null,\"bedNum\":\"15室40床\",\"testNum\":null,\"barCode\":null,\"specimenType\":null,\"dicomUrl\":\"http://10.13.1.36:9089/A375510E9601A39CB51628F14AD9E2EF.XML\",\"conclusion\":\"心电图正常2\",\"departmentName\":null,\"doctorName\":\"张强\",\"birthday\":null,\"negaPosiTive\":null}]";
string returnStr = netOptions.HttpPost("http://47.104.9.78:8033/pm-s-report/ECG/HIS03", tt, "POST");
}
///
/// 读取XML文件
///
///
///
private EcgViewModel ReadXMLByPath(string path)
{
var evm = new EcgViewModel
{
DicData = new Dictionary()
};
try
{
XmlDocument doc1 = new XmlDocument();
doc1.Load(path);
//获取当前XML文档的根 一级
XmlNode oNode = doc1.DocumentElement;
//获取根节点的所有子节点列表
XmlNodeList oList = oNode.ChildNodes;
//标记当前节点
XmlNode oCurrentNode;
//遍历所有二级节点
for (int i = 0; i < oList.Count; i++)
{
//二级
oCurrentNode = oList[i];
//检测当前节点的名称,节点的值是否与已知匹配 effectiveTime
if (oCurrentNode.Name.Equals("effectiveTime"))
{
if (oCurrentNode.HasChildNodes)
{
for (int n = 0; n < oCurrentNode.ChildNodes.Count; n++)
{
if (oCurrentNode.ChildNodes[n].Name.ToLower().Equals("low"))
{
var low = oCurrentNode.ChildNodes[n].Attributes["value"].Value;
evm.StartTime = Convert.ToDateTime(low.Substring(0, 4) + "-" + low.Substring(4, 2) + "-" + low.Substring(6, 2) + " " + low.Substring(8, 2) + ":" + low.Substring(10, 2) + ":" + low.Substring(12, 2));
}
if (oCurrentNode.ChildNodes[n].Name.ToLower().Equals("high"))
{
var high = oCurrentNode.ChildNodes[n].Attributes["value"].Value;
evm.StartTime = Convert.ToDateTime(high.Substring(0, 4) + "-" + high.Substring(4, 2) + "-" + high.Substring(6, 2) + " " + high.Substring(8, 2) + ":" + high.Substring(10, 2) + ":" + high.Substring(12, 2));
}
}
}
}
// //检测当前节点的名称,节点的值是否与已知匹配 component
if (oCurrentNode.Name.Equals("component"))
{
if (oCurrentNode.HasChildNodes)
{
for (int n = 0; n < oCurrentNode.ChildNodes.Count; n++)
{
var seriesNodes = oCurrentNode.ChildNodes[n];
var series = seriesNodes.Name.ToLower();
if (series == "series")
{
for (int k = 0; k < seriesNodes.ChildNodes.Count; k++)
{
var componentNodes = seriesNodes.ChildNodes[k];
var component = componentNodes.Name.ToLower();
if (component == "component")
{
for (int j = 0; j < componentNodes.ChildNodes.Count; j++)
{
var sequenceSetNodes = componentNodes.ChildNodes[j];
var sequenceSet = componentNodes.ChildNodes[j].Name.ToLower();
if (sequenceSet == "sequenceset")
{
for (int q = 0; q < sequenceSetNodes.ChildNodes.Count; q++)
{
var component_Nodes = sequenceSetNodes.ChildNodes[q];
var components = sequenceSetNodes.ChildNodes[q].Name.ToLower();
if (components == "component")
{
for (int w = 0; w < component_Nodes.ChildNodes.Count; w++)
{
var sequenceNodes = component_Nodes.ChildNodes[w];
var sequence = component_Nodes.ChildNodes[w].Name.ToLower();
if (sequence == "sequence")
{
for (int r = 0; r < sequenceNodes.ChildNodes.Count; r++)
{
var codeNodes = sequenceNodes.ChildNodes[r];
var code = codeNodes.Name.ToLower();
if (code == "code")
{
var codeAttributes = codeNodes.Attributes["code"].Value;
switch (codeAttributes)
{
case "TIME_ABSOLUTE":
break;
case "MDC_ECG_LEAD_I":
var valueNodes_I = sequenceNodes.ChildNodes[r + 1];
var value_I = valueNodes_I.Name.ToLower();
if (value_I == "value")
{
for (int m = 0; m < valueNodes_I.ChildNodes.Count; m++)
{
var digits_I = valueNodes_I.ChildNodes[m].Name.ToLower();
if (digits_I == "digits")
{
var digits_I_data = valueNodes_I.ChildNodes[m].InnerText;
evm.DicData.Add("I", digits_I_data);
}
}
}
break;
case "MDC_ECG_LEAD_II":
var valueNodes_II = sequenceNodes.ChildNodes[r + 1];
var value_II = valueNodes_II.Name.ToLower();
if (value_II == "value")
{
for (int m = 0; m < valueNodes_II.ChildNodes.Count; m++)
{
var digits_II = valueNodes_II.ChildNodes[m].Name.ToLower();
if (digits_II == "digits")
{
var digits_II_data = valueNodes_II.ChildNodes[m].InnerText;
evm.DicData.Add("II", digits_II_data);
}
}
}
break;
case "MDC_ECG_LEAD_III":
var valueNodes_III = sequenceNodes.ChildNodes[r + 1];
var value_III = valueNodes_III.Name.ToLower();
if (value_III == "value")
{
for (int m = 0; m < valueNodes_III.ChildNodes.Count; m++)
{
var digits_III = valueNodes_III.ChildNodes[m].Name.ToLower();
if (digits_III == "digits")
{
var digits_III_data = valueNodes_III.ChildNodes[m].InnerText;
evm.DicData.Add("III", digits_III_data);
}
}
}
break;
case "MDC_ECG_LEAD_AVR":
var valueNodes_AVR = sequenceNodes.ChildNodes[r + 1];
var value_AVR = valueNodes_AVR.Name.ToLower();
if (value_AVR == "value")
{
for (int m = 0; m < valueNodes_AVR.ChildNodes.Count; m++)
{
var digits_AVR = valueNodes_AVR.ChildNodes[m].Name.ToLower();
if (digits_AVR == "digits")
{
var digits_AVR_data = valueNodes_AVR.ChildNodes[m].InnerText;
evm.DicData.Add("AVR", digits_AVR_data);
}
}
}
break;
case "MDC_ECG_LEAD_AVL":
var valueNodes_AVL = sequenceNodes.ChildNodes[r + 1];
var value_AVL = valueNodes_AVL.Name.ToLower();
if (value_AVL == "value")
{
for (int m = 0; m < valueNodes_AVL.ChildNodes.Count; m++)
{
var digits_AVL = valueNodes_AVL.ChildNodes[m].Name.ToLower();
if (digits_AVL == "digits")
{
var digits_AVL_data = valueNodes_AVL.ChildNodes[m].InnerText;
evm.DicData.Add("AVL", digits_AVL_data);
}
}
}
break;
case "MDC_ECG_LEAD_AVF":
var valueNodes_AVF = sequenceNodes.ChildNodes[r + 1];
var value_AVF = valueNodes_AVF.Name.ToLower();
if (value_AVF == "value")
{
for (int m = 0; m < valueNodes_AVF.ChildNodes.Count; m++)
{
var digits_AVF = valueNodes_AVF.ChildNodes[m].Name.ToLower();
if (digits_AVF == "digits")
{
var digits_AVF_data = valueNodes_AVF.ChildNodes[m].InnerText;
evm.DicData.Add("AVF", digits_AVF_data);
}
}
}
break;
case "MDC_ECG_LEAD_V1":
var valueNodes_V1 = sequenceNodes.ChildNodes[r + 1];
var value_V1 = valueNodes_V1.Name.ToLower();
if (value_V1 == "value")
{
for (int m = 0; m < valueNodes_V1.ChildNodes.Count; m++)
{
var digits_V1 = valueNodes_V1.ChildNodes[m].Name.ToLower();
if (digits_V1 == "digits")
{
var digits_V1_data = valueNodes_V1.ChildNodes[m].InnerText;
evm.DicData.Add("V1", digits_V1_data);
}
}
}
break;
case "MDC_ECG_LEAD_V2":
var valueNodes_V2 = sequenceNodes.ChildNodes[r + 1];
var value_V2 = valueNodes_V2.Name.ToLower();
if (value_V2 == "value")
{
for (int m = 0; m < valueNodes_V2.ChildNodes.Count; m++)
{
var digits_V2 = valueNodes_V2.ChildNodes[m].Name.ToLower();
if (digits_V2 == "digits")
{
var digits_V2_data = valueNodes_V2.ChildNodes[m].InnerText;
evm.DicData.Add("V2", digits_V2_data);
}
}
}
break;
case "MDC_ECG_LEAD_V3":
var valueNodes_V3 = sequenceNodes.ChildNodes[r + 1];
var value_V3 = valueNodes_V3.Name.ToLower();
if (value_V3 == "value")
{
for (int m = 0; m < valueNodes_V3.ChildNodes.Count; m++)
{
var digits_V3 = valueNodes_V3.ChildNodes[m].Name.ToLower();
if (digits_V3 == "digits")
{
var digits_V3_data = valueNodes_V3.ChildNodes[m].InnerText;
evm.DicData.Add("V3", digits_V3_data);
}
}
}
break;
case "MDC_ECG_LEAD_V4":
var valueNodes_V4 = sequenceNodes.ChildNodes[r + 1];
var value_V4 = valueNodes_V4.Name.ToLower();
if (value_V4 == "value")
{
for (int m = 0; m < valueNodes_V4.ChildNodes.Count; m++)
{
var digits_V4 = valueNodes_V4.ChildNodes[m].Name.ToLower();
if (digits_V4 == "digits")
{
var digits_V4_data = valueNodes_V4.ChildNodes[m].InnerText;
evm.DicData.Add("V4", digits_V4_data);
}
}
}
break;
case "MDC_ECG_LEAD_V5":
var valueNodes_V5 = sequenceNodes.ChildNodes[r + 1];
var value_V5 = valueNodes_V5.Name.ToLower();
if (value_V5 == "value")
{
for (int m = 0; m < valueNodes_V5.ChildNodes.Count; m++)
{
var digits_V5 = valueNodes_V5.ChildNodes[m].Name.ToLower();
if (digits_V5 == "digits")
{
var digits_V5_data = valueNodes_V5.ChildNodes[m].InnerText;
evm.DicData.Add("V5", digits_V5_data);
}
}
}
break;
case "MDC_ECG_LEAD_V6":
var valueNodes_V6 = sequenceNodes.ChildNodes[r + 1];
var value_V6 = valueNodes_V6.Name.ToLower();
if (value_V6 == "value")
{
for (int m = 0; m < valueNodes_V6.ChildNodes.Count; m++)
{
var digits_V6 = valueNodes_V6.ChildNodes[m].Name.ToLower();
if (digits_V6 == "digits")
{
var digits_V6_data = valueNodes_V6.ChildNodes[m].InnerText;
evm.DicData.Add("V6", digits_V6_data);
}
}
}
break;
}
}
}
}
}
}
}
}
}
}
if (component == "subjectof")
{
for (int jj = 0; jj < componentNodes.ChildNodes.Count; jj++)
{
var annotationSetNodes = componentNodes.ChildNodes[jj];
var annotationSet = annotationSetNodes.Name.ToLower();
if (annotationSet == "annotationset")
{
for (int kk = 0; kk < annotationSetNodes.ChildNodes.Count; kk++)
{
var componentNodes_Of = annotationSetNodes.ChildNodes[kk];
var component_Of = componentNodes_Of.Name.ToLower();
if (component_Of == "component")
{
for (int ww = 0; ww < componentNodes_Of.ChildNodes.Count; ww++)
{
var annotationNodes = componentNodes_Of.ChildNodes[ww];
var annotation = annotationNodes.Name.ToLower();
if (annotation == "annotation")
{
for (int qq = 0; qq < annotationNodes.ChildNodes.Count; qq++)
{
var componentNodes_an = annotationNodes.ChildNodes[qq];
var component_an = componentNodes_an.Name.ToLower();
if (component_an == "component")
{
for (int rr = 0; rr < componentNodes_an.ChildNodes.Count; rr++)
{
var annotationNodes_com = componentNodes_an.ChildNodes[rr];
var annotation_com = annotationNodes_com.Name.ToLower();
if (annotation_com == "annotation")
{
for (int tt = 0; tt < annotationNodes_com.ChildNodes.Count; tt++)
{
var codeNodes_annotation = annotationNodes_com.ChildNodes[tt];
var component_annotation = codeNodes_annotation.Name.ToLower();
if (component_annotation == "component")
{
for (int uu = 0; uu < codeNodes_annotation.ChildNodes.Count; uu++)
{
var annotationNodes_uu = codeNodes_annotation.ChildNodes[uu];
var annotation_uu = annotationNodes_uu.Name.ToLower();
if (annotation_uu == "annotation")
{
for (int pp = 0; pp < annotationNodes_uu.ChildNodes.Count; pp++)
{
var ann_code = annotationNodes_uu.ChildNodes[pp].Name.ToLower();
if (ann_code == "code")
{
var annotation_code = annotationNodes_uu.ChildNodes[pp].Attributes["code"].Value;
if (annotation_code == "MDC_ECG_INTERPRETATION_STATEMENT")
{
//诊断结论
evm.AutoResult = annotationNodes_uu.ChildNodes[pp + 1].InnerText;
break;//跳出循环
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
//检测当前节点的名称,节点的值是否与已知匹配 caseinformation
if (oCurrentNode.Name.Equals("caseinformation"))
{
//检测是否有子节点 三级
if (oCurrentNode.HasChildNodes)
{
//遍历当前节点的所有子节点
for (int n = 0; n < oCurrentNode.ChildNodes.Count; n++)
{
//检测当前节点的子节点名称是否与已知匹配
if (oCurrentNode.ChildNodes[n].Name.ToLower() == "otherparam")
{
//遍历当前节点的所有子节点
for (int ii = 0; ii < oCurrentNode.ChildNodes[n].ChildNodes.Count; ii++)
{
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.ToLower().Equals("casename"))
{
evm.PatientName = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.ToLower().Equals("sex"))
{
evm.Gender = oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText;
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.ToLower().Equals("age"))
{
evm.Age = Convert.ToInt32(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
}
}
//检测当前节点的子节点名称是否与已知匹配
if (oCurrentNode.ChildNodes[n].Name == "Parameters")
{
//遍历当前节点的所有子节点
for (int ii = 0; ii < oCurrentNode.ChildNodes[n].ChildNodes.Count; ii++)
{
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("HR"))//心率
{
evm.Heart = Convert.ToInt32(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("PRInterval"))
{
evm.PR = Convert.ToInt32(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("PDuration"))
{
evm.PDuration = Convert.ToInt32(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("QRSDuration"))
{
evm.QRS = Convert.ToInt32(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("TDuration"))
{
evm.TDuration = Convert.ToInt32(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("QTInterval"))
{
evm.QT = Convert.ToInt32(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("QTcInterval"))
{
evm.QTc = Convert.ToInt32(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("PAxis"))
{
evm.PAxis = Convert.ToDouble(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("QRSAxis"))
{
evm.QRSAxis = Convert.ToDouble(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("TAxis"))
{
evm.TAxis = Convert.ToDouble(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("R_V5"))
{
evm.RV5 = Convert.ToDouble(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
if (oCurrentNode.ChildNodes[n].ChildNodes[ii].Name.Equals("S_V1"))
{
evm.SV1 = Convert.ToDouble(oCurrentNode.ChildNodes[n].ChildNodes[ii].InnerText);
}
}
}
}
}
}
}
}
catch (Exception ex)
{
}
return evm;
}
private void button8_Click(object sender, EventArgs e)
{
string ftpFile1 = Application.StartupPath + @"\ftpFile\ecg20191221141557.XML";
string ftpFile2 = Application.StartupPath + @"\ftpFile\ecg20191221141557.jpg";
string ftpFileName = Guid.NewGuid().ToString() + ".XML";
string ssss = FtpHelper.FileUpLoad(ftpFile1, "", ftpFileName);
textBox2.Text = ssss;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (th_rabbitMQ != null)
th_rabbitMQ.Abort();//终止 rabbitMQ数据接收线程
}
}
}