ChronicDiseaseManagementHelper.PostHttp(Log log, string url, string data, string methodName)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Xml.Serialization;
using JetSun.DomainModel;
using JetSun.Infrastructure;
namespace JetSun.PatientAdministration.Presentation
{
public class ChronicDiseaseManagementHelper
{
public static ChronicDiseaseManagementHelper Instance = new ChronicDiseaseManagementHelper();
string _baseUri = ChronicDiseaseManagementParameter.BaseURL;
string _userId = ChronicDiseaseManagementParameter.UserId;
string _password = ChronicDiseaseManagementParameter.Password;
/// <summary>
/// 推送患者到慢病管理
/// </summary>
/// <param name="entity"></param>
public void addPatient(CDMResult entity)
{
bool ret = this.checkInNCD(entity) != ChronicRecordStatuEnum.NOT_CREATED;
if (ret) return;
string msg = null;
Specialist[] list = this.findSpecialist(entity, msg);
if (list.Count() == 0)
{
MessageHelper.ShowDialog($"患者【{entity.Patientname}】没有符合条件的病种列表", "提示");
return;
}
SpecialistView view = new SpecialistView();
view.ShowView(entity, list);
if (view.Specialist != null)
ChronicDiseaseManagementHelper.Instance.addPatient(entity, view.Specialist);
}
/// <summary>
/// 3.11.3.1查询此病人是否已在慢病建档
/// </summary>
/// <returns></returns>
public ChronicRecordStatuEnum checkInNCD(CDMResult entity)
{
using (var log = Log.Create("checkInNCD"))
{
try
{
string url = _baseUri + "/checkInNCD";
string request = @"<Request>"
+ @"<EmpiId>" + entity.PersonId + "</EmpiId>"
+ @"<PatientId>" + entity.EncounterId + "</PatientId>"
+ @"<Type>" + entity.Encounterkindcodeid + "</Type>"
+ @"<PatientName>" + entity.Patientname + "</PatientName>"
+ @"<PatientCardId>" + entity.IdCard + "</PatientCardId>"
+ @"<UserId>" + _userId + "</UserId>"
+ @"<Password>" + _password + "</Password>"
+ @"<ClientIp>" + ClientContext.Instance.IPAddress + "</ClientIp>"
+ @"</Request>";
log.Write($"入参:{request}");
string ret = PostHttp(log, url, request, "checkInNCD");
log.Write($"出参:{ret}");
if (!ret.IsNullOrWhiteSpace())
{
Response responseObj = ParseXmlToObject(ret);
//返回大于0表示已存在慢病系统中,结束本次推送
if (responseObj.IsSuccess)
{
if (responseObj.Result == 1)
return ChronicRecordStatuEnum.CREATED;
else if (responseObj.Result == 2)
return ChronicRecordStatuEnum.REQUIRED_CHECKED;
else
return ChronicRecordStatuEnum.NOT_CREATED;
}
}
}
catch (Exception ex)
{
log.Write("慢病管理报错:" + ex.Message);
throw ex;
}
}
return ChronicRecordStatuEnum.NOT_CREATED;
}
/// <summary>
/// 3.11.3.3获取病人符合的专科列表
/// </summary>
/// <returns></returns>
Specialist[] findSpecialist(CDMResult entity, string msg)
{
msg = null;
using (var log = Log.Create("findSpecialist"))
{
try
{
string url = _baseUri + "/findSpecialist";
string request = @"<Request>"
+ @"<UserId>" + _userId + "</UserId>"
+ @"<Password>" + _password + "</Password>"
+ @"<ClientIp>" + ClientContext.Instance.IPAddress + "</ClientIp>"
+ @"<Patient>"
+ @"<EmpiId>" + entity.PersonId + "</EmpiId>"
+ @"<PatientId>" + entity.EncounterId + "</PatientId>"
+ @"<PatientName>" + entity.Patientname + "</PatientName>"
+ @"<Type>" + entity.Encounterkindcodeid + "</Type>"
+ @"<PatientName>" + entity.Patientname + "</PatientName>"
+ @"<PatientCardId>" + entity.IdCard + "</PatientCardId>"
+ @" </Patient>"
+ @"<Diagnosises>";
if (!entity.Icdcodes.IsNullOrWhiteSpace())
{
int orderNo = 0;
foreach (var item in entity.Icdcodes.Split(',').Take(3))
{
request = request
+ @"<Diagnosis>"
+ @"<DiagnosisOrderNo>" + orderNo + 1 + "</DiagnosisOrderNo>"
+ @"<DiagnosisICD>" + item + "</DiagnosisICD>"
+ @"<DiagnosisName>" + entity.Diseasenames.Split(',')[orderNo] + "</DiagnosisName>"
+ @"</Diagnosis>";
orderNo++;
}
}
request = request + "</Diagnosises></Request>";
log.Write($"入参:{request}");
string ret = PostHttp(log, url, request, "findSpecialist");
log.Write($"出参:{ret}");
if (!ret.IsNullOrWhiteSpace())
{
Response responseObj = ParseXmlToObject(ret);
if (responseObj.IsSuccess)
return responseObj.specialists ?? new Specialist[] { };
else if (!responseObj.ResultMsg.IsNullOrWhiteSpace())
{
msg = responseObj.ResultMsg;
MessageHelper.ShowDialog(msg, "病种列表");
}
}
}
catch (Exception ex)
{
log.Write("慢病管理报错:" + ex.Message);
throw ex;
}
}
return new Specialist[] { };
}
/// <summary>
/// 3.11.3.4推送病人到慢病系统
/// </summary>
/// <returns></returns>
internal void addPatient(CDMResult entity, Specialist specia)
{
using (var log = Log.Create("addPatient"))
{
try
{
string url = _baseUri + "/addPatient";
string request = @"<Request>"
+ @"<EmpiId>" + entity.PersonId + "</EmpiId>"
+ @"<PatientId>" + entity.EncounterId + "</PatientId>"
+ @"<Type>" + entity.Encounterkindcodeid + "</Type>"
+ @"<PatientName>" + entity.Patientname + "</PatientName>"
+ @"<PatientCardId>" + entity.IdCard + "</PatientCardId>"
+ @"<SpecialistId>" + specia.SpecialistId + "</SpecialistId>"
+ @"<SpecialistName>" + specia.SpecialistName + "</SpecialistName>"
+ @"<PatientMobile>" + entity.PatientMobile + " </PatientMobile>"
+ @"<PatientAddress>" + entity.PatientAddress + "</PatientAddress>"
+ @"<Recommended>" + "" + "</Recommended>"
+ @"<DoctorName>" + ClientContext.Instance.Employee().Name + "</DoctorName>"
+ @"<DoctorSpecialist>" + ClientContext.Instance.LogOnOrganization().Name + "</DoctorSpecialist>"
+ @"<UserId>" + _userId + "</UserId>"
+ @"<Password>" + _password + "</Password>"
+ @"<ClientIp>" + ClientContext.Instance.IPAddress + "</ClientIp>"
+ "<Diagnosises>";
if (!entity.Icdcodes.IsNullOrWhiteSpace())
{
int orderNo = 0;
foreach (var item in entity.Icdcodes.Split(',').Take(3))
{
request = request
+ @"<Diagnosis>"
+ @"<DiagnosisOrderNo>" + (orderNo + 1) + "</DiagnosisOrderNo>"
+ @"<DiagnosisICD>" + item + "</DiagnosisICD>"
+ @"<DiagnosisName>" + entity.Diseasenames.Split(',')[orderNo] + "</DiagnosisName>"
+ @"</Diagnosis>";
orderNo++;
}
}
request = request + "</Diagnosises></Request>";
log.Write($"入参:{request}");
string ret = PostHttp(log, url, request, "addPatient");
log.Write($"出参:{ret}");
if (!ret.IsNullOrWhiteSpace())
{
Response responseObj = ParseXmlToObject(ret);
string success = responseObj.Result == 0 ? "成功" : "失败";
log.Write($"personid={entity.PersonId},encounterid ={entity.EncounterId} 推送病人{success}");
if (responseObj.Result == 0)
MessageHelper.ShowDialog("推送病人到慢病系统成功", "提示");
else if (!responseObj.ResultMsg.IsNullOrWhiteSpace()) //0返回正常; 1.返回错误;
MessageHelper.ShowDialog(responseObj.ResultMsg, "推送病人到慢病系统");
//addSpecialist(entity, specia);
}
}
catch (Exception ex)
{
log.Write("慢病管理报错:" + ex.Message);
throw ex;
}
}
return;
}
static Response ParseXmlToObject(string xmlString)
{
XmlSerializer serializer = new XmlSerializer(typeof(Response));
using (StringReader reader = new StringReader(xmlString))
{
return (Response)serializer.Deserialize(reader);
}
}
public static string PostHttp(Log log, string url, string data, string methodName)
{
try
{
log.Write($"url:{url}");
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "text/plain";
httpWebRequest.Method = "POST";
httpWebRequest.Timeout = 30 * 1000;
byte[] buf = Encoding.UTF8.GetBytes(data);
httpWebRequest.ContentLength = buf.Length;
//解决报错:基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
//发送请求
Stream stream = httpWebRequest.GetRequestStream();
stream.Write(buf, 0, buf.Length);
stream.Close();
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
string returnXml = streamReader.ReadToEnd();
httpWebResponse.Close();
streamReader.Close();
httpWebRequest.Abort();
httpWebResponse.Close();
return returnXml;
}
catch (Exception ex)
{
throw new Exception(string.Format("调用接口{0}超时,请检查网络!>>{1}", methodName, ex.Message));
}
}
private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}
}
public class CDMResult
{
public int Encounterkindcodeid { get; set; }
public int EncounterId { get; set; }
public int PersonId { get; set; }
public string IdCard { get; set; }
public string PatientMobile { get; set; }
public string PatientAddress { get; set; }
public string Seqnotext { get; set; }
public string Patientname { get; set; }
public string Admitorgname { get; set; }
public DateTime Admitdateon { get; set; }
public DateTime? Dischargeon { get; set; }
public DateTime? Settlementtime { get; set; }
public string Diseaseids { get; set; }
public string Diseasenames { get; set; }
public string Icdcodes { get; set; }
public IList<int> Diseases { get; set; }
}
[XmlRoot("response")]
public class Response
{
public bool IsSuccess { get { return ResultCode == "0" && Result > 0; } }
[XmlElement("resultCode")]
public string ResultCode { get; set; }
[XmlElement("resultMsg")]
public string ResultMsg { get; set; }
[XmlElement("result")]
public int Result { get; set; }
[XmlArray("specialists")]
[XmlArrayItem("specialist")]
public Specialist[] specialists { get; set; }
}
[XmlRoot("specialist")]
public class Specialist
{
//<SpecialistId>2268</SpecialistId>
//<SpecialistName>慢性肾脏病</SpecialistName>
[XmlElement("specialistId")]
public string SpecialistId { get; set; }
[XmlElement("specialistName")]
public string SpecialistName { get; set; }
}
public enum ChronicRecordStatuEnum
{
/// <summary>
/// 未建档
/// </summary>
NOT_CREATED = 0,
/// <summary>
/// 已建档
/// </summary>
CREATED = 1,
/// <summary>
/// 需年检
/// </summary>
REQUIRED_CHECKED = 2
}
}
浙公网安备 33010602011771号