人民医院API

PatientController.cs 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. using Microsoft.CodeDom.Providers.DotNetCompilerPlatform;
  2. using Newtonsoft.Json;
  3. using RMYY_CallCenter_Api.Utility;
  4. using System;
  5. using System.CodeDom;
  6. using System.CodeDom.Compiler;
  7. using System.Collections;
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Net;
  12. using System.Reflection;
  13. using System.Text;
  14. using System.Web;
  15. using System.Web.Mvc;
  16. using System.Web.Services.Description;
  17. using System.Xml;
  18. using System.Xml.Linq;
  19. namespace RMYY_CallCenter_Api.Controllers
  20. {
  21. [AllowAnonymous]
  22. public class PatientController : BaseController
  23. {
  24. // private static string url = $"http://172.16.0.177:8081/winempi/webapi/";
  25. // private static string url1 = "http://172.16.0.197:10045/winempi/webapi/";
  26. private string url = ConfigHelper.GetValue("PatientURL");
  27. private string wsdlURL = ConfigHelper.GetValue("wsdlURL");
  28. public class Patient
  29. {
  30. public string zsyh { set; get; }//主索引号
  31. public string hzxm { set; get; }//患者姓名
  32. public string csrq { set; get; }//出生日期
  33. public string xbdm { set; get; }//性别代码
  34. public string xbmc { set; get; }//性别名称
  35. public string hydm { set; get; }//婚姻代码
  36. public string hymc { set; get; }//婚姻名称
  37. public string zjhm { set; get; }//身份证号码
  38. public string zjlx { set; get; }//身份证类型
  39. public string lxdh { set; get; }//联系电话
  40. public string mz { set; get; }//民族
  41. public string gj { set; get; }//国籍
  42. public string jtdz { set; get; }//家庭地址
  43. public string cResult { set; get; }//返回结果描述
  44. public string ncount { set; get; }//符合查询的数量
  45. }
  46. public ActionResult GetModelList(string zsyh="",string hzxm="",string sfzh=""
  47. ,string zlkh="",string jzlx="",string jzh="",string lxdh="")
  48. {
  49. Dictionary<string, string> values = new Dictionary<string, string>();
  50. values.Add("zsyh", zsyh);//主索引号
  51. values.Add("hzxm", hzxm);//患者姓名
  52. values.Add("sfzh", sfzh);//身份证号
  53. values.Add("zlkh", zlkh);//诊疗卡号
  54. values.Add("jzlx", jzlx);//就诊类型
  55. values.Add("jzh", jzh);//就诊号
  56. values.Add("lxdh", lxdh);//联系电话
  57. try
  58. {
  59. var responseString = HttpMethods.HttpPost(url + "QueryPatient", values.ToJson(), "application/json;charset=UTF-8");
  60. LogHelper.Warn("responseString"+ responseString);
  61. List<Patient> jo = JsonConvert.DeserializeObject<List<Patient>>(responseString);
  62. var obj = new
  63. {
  64. rows = jo
  65. };
  66. return Content(obj.ToJson());
  67. }
  68. catch(Exception e)
  69. {
  70. return Error(e.Message);
  71. }
  72. }
  73. string SOAPAction = ConfigHelper.GetValue("SOAPAction");
  74. public ActionResult GetRcord(string starttime, string endtime, string PatientClass, string GlobalPID, string Facility)
  75. {
  76. // string url = wsdlURL;
  77. string arg = "action=QueryPatientVisitByID&inxml="+ LoadXmls(starttime, endtime, PatientClass, GlobalPID, Facility);
  78. Dictionary<string, string> values = new Dictionary<string, string>();
  79. values.Add("action", "QueryPatientVisitByID");//主索引号
  80. values.Add("inxml", LoadXmls(starttime, endtime, PatientClass, GlobalPID, Facility));//患者姓名
  81. var responseString = HttpMethods.HttpPost(url + "controller", values.ToJson (), "text/xml;charset=utf-8");
  82. return Success("", responseString);
  83. Hashtable header = new Hashtable();
  84. header.Add("SOAPAction", SOAPAction);
  85. string contenttype = "text/xml;charset=utf-8";
  86. try
  87. {
  88. string filexml = Http(url, "post", contenttype, header, LoadXmls(starttime, endtime, PatientClass, GlobalPID, Facility));
  89. // LogHelper.Warn("responseString" + responseString);
  90. // List<Patient> jo = JsonConvert.DeserializeObject<List<Patient>>(responseString);
  91. //var obj = new
  92. //{
  93. // rows = jo
  94. //};
  95. // return Content(obj.ToJson());
  96. return Success("", filexml);
  97. }
  98. catch (Exception e)
  99. {
  100. return Error(e.Message);
  101. }
  102. // string contenttype = "text/xml;charset=utf-8";
  103. // Hashtable header = new Hashtable();
  104. // header.Add("action", "QueryPatientVisitByID");
  105. // header.Add("inxml", LoadXmls(starttime, endtime, PatientClass, GlobalPID));
  106. //try
  107. //{
  108. // // string filexml = Http(url, "post", contenttype, header, null);
  109. // var filexml = InvokeWebService(url, "controller", arg);
  110. // return Success("", filexml);
  111. // // XmlDocument xmlDoc = new XmlDocument();
  112. // // xmlDoc.LoadXml(filexml);//Load加载XML文件,LoadXML加载XML字符串
  113. // //string value = xmlDoc.DocumentElement["soap:Body"]["SearchWeekWorkPlanResponse"]["SearchWeekWorkPlanResult"].InnerText;
  114. // //XDocument doc = XDocument.Parse(value);
  115. // //var xmlDocument = new XmlDocument();
  116. // //using (var xmlReader = doc.CreateReader())
  117. // //{
  118. // // xmlDocument.Load(xmlReader);
  119. // //}
  120. // //var model = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmlDocument);
  121. // // return Content(model);
  122. //}
  123. //catch (Exception e)
  124. //{
  125. // return Error(e.ToString());
  126. //}
  127. }
  128. /// <summary>
  129. /// 接口入参拼接PatientClassI-入院,O-门诊,E-急诊
  130. /// </summary>
  131. /// <param name="data"></param>
  132. /// <returns></returns>
  133. public string LoadXmls(string starttime,string endtime,string PatientClass,string GlobalPID,string Facility)
  134. {
  135. StringBuilder stringBuilder = new StringBuilder();
  136. // stringBuilder.Append(@"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:tem='http://tempuri.org/'>
  137. // <soapenv:Header />
  138. // <soapenv:Body >
  139. //<tem:controller >
  140. // <!--Optional:-->
  141. // <action>QueryPatientVisitByID</action>
  142. // <tem:xml > ");
  143. stringBuilder.Append($"<ConfigHeader><Facility>41604745</Facility><Application>41604745</Application></ConfigHeader>");
  144. stringBuilder.Append($"<QueryParameter>");
  145. stringBuilder.Append($"<FromLimit></FromLimit><ToLimit></ToLimit>");
  146. stringBuilder.Append($"<FromDateTime>{starttime}</FromDateTime><ToDateTime>{endtime}</ToDateTime>");
  147. stringBuilder.Append($"<PatientClass>{PatientClass}</PatientClass>");//PatientClassI-入院,O-门诊,E-急诊
  148. stringBuilder.Append(@"<VisitNumbers>");
  149. stringBuilder.Append($"<CardID></CardID>");
  150. stringBuilder.Append($"<DomainCode></DomainCode>");
  151. stringBuilder.Append($"<Facility>{Facility}</Facility>");//院区代码
  152. stringBuilder.Append(@"</VisitNumbers>");
  153. stringBuilder.Append($"<GlobalPID>{GlobalPID}</GlobalPID>");//患者主索引号
  154. //stringBuilder.Append(@"<PatientIDs\PatientID>");
  155. //stringBuilder.Append($"<CardID></CardID>");
  156. //stringBuilder.Append($"<DomainCode></DomainCode>");
  157. //stringBuilder.Append($"<Facility>{Facility}</Facility>");//院区代码
  158. //stringBuilder.Append(@"<PatientIDs\PatientID>");
  159. stringBuilder.Append($"</QueryParameter>");
  160. // stringBuilder.Append(@"</tem:xml>
  161. // </tem:controller>
  162. // </soapenv:Body>
  163. //</soapenv:Envelope> ");
  164. return stringBuilder.ToString();
  165. }
  166. /// <summary>
  167. /// 实例化WebServices
  168. /// </summary>
  169. /// <param name="url">WebServices地址</param>
  170. /// <param name="methodname">调用的方法</param>
  171. /// <param name="args">把webservices里需要的参数按顺序放到这个object[]里</param>
  172. public static object InvokeWebService(string url, string methodname, object[] args)
  173. {
  174. //这里的namespace是需引用的webservices的命名空间,我没有改过,也可以使用。也可以加一个参数从外面传进来。
  175. string @namespace = "client";
  176. try
  177. {
  178. //获取WSDL
  179. WebClient wc = new WebClient();
  180. Stream stream = wc.OpenRead(url);
  181. ServiceDescription sd = ServiceDescription.Read(stream);
  182. string classname = sd.Services[0].Name;
  183. ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
  184. sdi.AddServiceDescription(sd, "", "");
  185. CodeNamespace cn = new CodeNamespace(@namespace);
  186. //生成客户端代理类代码
  187. CodeCompileUnit ccu = new CodeCompileUnit();
  188. ccu.Namespaces.Add(cn);
  189. sdi.Import(cn, ccu);
  190. CSharpCodeProvider csc = new CSharpCodeProvider();
  191. //ICodeCompiler icc = csc.CreateCompiler();
  192. //设定编译参数
  193. CompilerParameters cplist = new CompilerParameters();
  194. cplist.GenerateExecutable = false; //动态编译后的程序集不生成可执行文件
  195. cplist.GenerateInMemory = true; //动态编译后的程序集只存在于内存中,不在硬盘的文件上
  196. cplist.ReferencedAssemblies.Add("System.dll");
  197. cplist.ReferencedAssemblies.Add("System.XML.dll");
  198. cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
  199. cplist.ReferencedAssemblies.Add("System.Data.dll");
  200. //编译代理类
  201. CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);
  202. if (true == cr.Errors.HasErrors)
  203. {
  204. StringBuilder sb = new StringBuilder();
  205. foreach (CompilerError ce in cr.Errors)
  206. {
  207. sb.Append(ce.ToString());
  208. sb.Append(Environment.NewLine);
  209. }
  210. throw new Exception(sb.ToString());
  211. }
  212. //生成代理实例,并调用方法
  213. Assembly assembly = cr.CompiledAssembly;
  214. Type t = assembly.GetType(@namespace + "." + classname, true, true);
  215. object obj = Activator.CreateInstance(t);
  216. MethodInfo mi = t.GetMethod(methodname);
  217. //注:method.Invoke(o, null)返回的是一个Object,如果你服务端返回的是DataSet,这里也是用(DataSet)method.Invoke(o, null)转一下就行了,method.Invoke(0,null)这里的null可以传调用方法需要的参数,string[]形式的
  218. return mi.Invoke(obj, args);
  219. }
  220. catch (Exception e)
  221. {
  222. return e ;
  223. }
  224. }
  225. /// <summary>
  226. /// 调用soap协议接口 webservice wsdl
  227. /// </summary>
  228. /// <param name="url"></param>
  229. /// <param name="method"></param>
  230. /// <param name="contenttype"></param>
  231. /// <param name="header"></param>
  232. /// <param name="data"></param>
  233. /// <returns></returns>
  234. public static string Http(string url, string method = "post", string contenttype = "text/xml;charset=utf-8", Hashtable header = null, string data = null)
  235. {
  236. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  237. request.Method = string.IsNullOrEmpty(method) ? "post" : method;
  238. request.ContentType = string.IsNullOrEmpty(contenttype) ? "text/xml;charset=utf-8" : contenttype;
  239. if (header != null)
  240. {
  241. foreach (var i in header.Keys)
  242. {
  243. request.Headers.Add(i.ToString(), header[i].ToString());
  244. }
  245. }
  246. if (!string.IsNullOrEmpty(data))
  247. {
  248. Stream RequestStream = request.GetRequestStream();
  249. byte[] bytes = Encoding.UTF8.GetBytes(data);
  250. RequestStream.Write(bytes, 0, bytes.Length);
  251. RequestStream.Close();
  252. }
  253. HttpWebResponse response;
  254. try
  255. {
  256. response = (HttpWebResponse)request.GetResponse();
  257. }
  258. catch (WebException ex)
  259. {
  260. response = (HttpWebResponse)ex.Response;
  261. }
  262. Stream ResponseStream = response.GetResponseStream();
  263. StreamReader StreamReader = new StreamReader(ResponseStream, Encoding.GetEncoding("utf-8"));
  264. string re = StreamReader.ReadToEnd();
  265. StreamReader.Close();
  266. ResponseStream.Close();
  267. return re;
  268. }
  269. }
  270. }