HisBusiness.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. /******************************************************************************
  2. * 文件名称: HisBusiness.cs
  3. * 文件说明: HIS业务的封装
  4. * 当前版本: V1.0
  5. * 创建日期: 2022-04-14
  6. *
  7. * 2020-04-14: 增加 SingleDownload 方法
  8. * 2020-04-14: 增加 AutoDownload 方法
  9. ******************************************************************************/
  10. using Newtonsoft.Json.Linq;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using ChengDuMedInsu2;
  17. using MedicalInsurance.Business;
  18. using MedicalInsurance.Helper;
  19. using MedicalInsurance.Common;
  20. using MedicalInsurance.Forms;
  21. using System.Windows.Forms;
  22. namespace MedicalInsurance.Business
  23. {
  24. class HisBusiness
  25. {
  26. /// <summary>
  27. /// 医保目录单个版本号的下载
  28. /// </summary>
  29. /// <param name="ver"></param>
  30. /// <param name="directoryType"></param>
  31. /// <param name="uiProcessBar"></param>
  32. /// <param name="errorMessage"></param>
  33. /// <returns></returns>
  34. public int SingleDownload(string ver, int directoryType,Sunny.UI.UIProcessBar uiProcessBar, out string errorMessage)
  35. {
  36. string txtPath = string.Empty;
  37. errorMessage = "";
  38. int iResult = -1;
  39. string funNo = "";
  40. switch (directoryType)
  41. {
  42. case 0://药品
  43. {
  44. funNo = "1301";
  45. break;
  46. }
  47. case 1://诊疗
  48. {
  49. funNo = "1305";
  50. break;
  51. }
  52. case 2://材料
  53. {
  54. funNo = "1306";
  55. break;
  56. }
  57. case 3://疾病诊断
  58. {
  59. funNo = "1307";
  60. break;
  61. }
  62. case 4://手术
  63. {
  64. funNo = "1308";
  65. break;
  66. }
  67. case 5://慢性病
  68. {
  69. funNo = "1309";
  70. break;
  71. }
  72. case 6://DRGs
  73. {
  74. funNo = "1310";
  75. break; ;
  76. }
  77. case 7://日间手术
  78. {
  79. funNo = "1311";
  80. break;
  81. }
  82. case 8://字典表
  83. {
  84. break;
  85. }
  86. }
  87. try
  88. {
  89. CenterBusiness centerBusiness = new CenterBusiness();
  90. JObject joRtn = centerBusiness.DownDirecotry(funNo, ver);
  91. if (JsonHelper.parseBusinessJson(joRtn, out errorMessage) == 0)
  92. {
  93. txtPath = joRtn["filePath"].ToString();
  94. DataImoport bus = new DataImoport();
  95. JObject joImportRtn = bus.importDataToIrisByTxt(txtPath, 50, directoryType + 1, uiProcessBar);
  96. if (JsonHelper.parseBusinessJson(joImportRtn, out errorMessage) == 0)
  97. {
  98. iResult = 0;
  99. }
  100. else
  101. {
  102. GlobalVariables.writeLog(joImportRtn.ToString());
  103. errorMessage = "导入数据出现错误,请查看日志!";//joImportRtn["errorMessage"].ToString();
  104. }
  105. }
  106. return iResult;
  107. }
  108. catch (Exception ex)
  109. {
  110. errorMessage = "SingleDownload提示:" + ex.Message;
  111. return -1;
  112. }
  113. }
  114. /// <summary>
  115. /// 自动下载医保目录,直到最新版本(返回报错)
  116. /// </summary>
  117. /// <param name="directoryType"></param>
  118. /// <param name="uiProcessBar"></param>
  119. /// <param name="errorMessage"></param>
  120. /// <returns></returns>
  121. public int AutoDownload(int directoryType, Sunny.UI.UIProcessBar uiProcessBar, out string errorMessage)
  122. {
  123. int iResult = 0;
  124. errorMessage = "";
  125. try
  126. {
  127. InsuServices irisBus = new InsuServices();
  128. JObject joMaxVerNO = irisBus.getDirectoryMaxVersionNO(directoryType);
  129. string ver = joMaxVerNO["MaxVersionNO"].ToString();
  130. iResult = JsonHelper.parseBusinessJson(joMaxVerNO,out errorMessage);
  131. while (iResult == 0)
  132. {
  133. iResult = SingleDownload(ver, directoryType,uiProcessBar, out errorMessage);
  134. }
  135. return iResult;
  136. }
  137. catch (Exception ex)
  138. {
  139. errorMessage = ex.Message;
  140. return -1;
  141. }
  142. }
  143. /// <summary>
  144. /// 读卡
  145. /// </summary>
  146. /// <returns></returns>
  147. public int readCard(string funNO, out string outParam)
  148. {
  149. outParam = "";
  150. string errorMsg = "";
  151. int errorCode;
  152. string errorMessage;
  153. try
  154. {
  155. ChengDuMedInsu2.YinHaiCom yinhaiCom = new ChengDuMedInsu2.YinHaiCom();
  156. JObject joInput = GlobalVariables.setYinHaiParam(funNO);
  157. string sSafeControlsRtnValue = string.Empty;
  158. yinhaiCom.Init();
  159. yinhaiCom.Call(funNO, joInput.ToString(), out sSafeControlsRtnValue);
  160. JObject joRtn = new JObject();
  161. joRtn = JObject.Parse(sSafeControlsRtnValue);
  162. errorCode = int.Parse(joRtn["code"].ToString());
  163. errorMessage = joRtn["message"].ToString();
  164. if (errorCode != 1)
  165. {
  166. outParam = JsonHelper.getIrisReturnJson(-100, "调用银海控件失败!", joRtn).ToString();
  167. return 1;
  168. }
  169. else
  170. {
  171. JObject jodata = JObject.FromObject(joRtn["data"]);
  172. GlobalVariables.insuplc_admdvs = jodata["insuplc_admdvs"].ToString();
  173. GlobalVariables.mdtrt_cert_type = jodata["mdtrt_cert_type"].ToString();
  174. GlobalVariables.mdtrt_cert_no = jodata["mdtrt_cert_no"].ToString();
  175. GlobalVariables.psn_cert_type = jodata["psn_cert_type"].ToString();
  176. GlobalVariables.certno = jodata["certno"].ToString();
  177. GlobalVariables.psn_name = jodata["psn_name"].ToString();
  178. //GlobalVariables.psn_no = jodata["psn_no"].ToString();
  179. GlobalVariables.card_sn = jodata["card_sn"].ToString();
  180. GlobalVariables.card_token = jodata["card_token"].ToString();
  181. dynamic joInput_1101 = new JObject();
  182. dynamic joTmp = new JObject();
  183. joTmp.mdtrt_cert_type = GlobalVariables.mdtrt_cert_type;
  184. joTmp.mdtrt_cert_no = GlobalVariables.mdtrt_cert_no;
  185. joTmp.card_sn = GlobalVariables.card_sn;
  186. joTmp.begntime = "";
  187. joTmp.psn_cert_type = GlobalVariables.psn_cert_type;
  188. joTmp.certno = GlobalVariables.certno;
  189. joTmp.psn_name = GlobalVariables.psn_name;
  190. dynamic joExpContent = new JObject();
  191. joExpContent.card_token = GlobalVariables.card_token;
  192. joTmp.Add("expContent", JObject.FromObject(joExpContent));
  193. joInput_1101.Add("data", JObject.FromObject(joTmp));
  194. InvokeHelper center = new InvokeHelper();
  195. JObject joCenterServiceRtn = center.InvokeCenterService("1101", joInput_1101.ToString());
  196. if (joCenterServiceRtn["infcode"].ToString() != "0")
  197. {
  198. outParam = "调用1101失败! ";
  199. return -1;
  200. }
  201. else
  202. {
  203. string output = joCenterServiceRtn["output"].ToString();
  204. //展示信息界面
  205. JObject joOutput = JObject.Parse(output);
  206. //编码转换
  207. JArray jaConvertCode = new JArray();
  208. JObject joConvertCodeParam = new JObject();
  209. joConvertCodeParam.Add("hospitalDr", GlobalVariables.hospitalDr);
  210. joConvertCodeParam.Add("interfaceDr", GlobalVariables.interfaceDr);
  211. joConvertCodeParam.Add("output", joOutput);
  212. jaConvertCode.Add(joConvertCodeParam);
  213. JObject joConvertCode = new JObject();
  214. joConvertCode.Add("code", "09010054");
  215. joConvertCode.Add("params", jaConvertCode);
  216. InvokeHelper invoker = new InvokeHelper();
  217. JObject joConvertCodeRtn = invoker.invokeInsuService(joConvertCode.ToString(), "患者信息编码转换");
  218. PatientInsuInfo frmPatientInfo = new PatientInsuInfo(joConvertCodeRtn);
  219. //相关信息转换到登记面板
  220. if (frmPatientInfo.ShowDialog() == DialogResult.OK)
  221. {
  222. joCenterServiceRtn.Property("output").AddBeforeSelf(new JProperty("selectedInsuInfo", frmPatientInfo.joSelectedInsuInfo));
  223. }
  224. else
  225. {
  226. outParam = JsonHelper.getIrisExceptionJson(-1, "读卡", "收款员取消读卡").ToString();
  227. return -1;
  228. }
  229. }
  230. outParam = joCenterServiceRtn.ToString();
  231. GlobalVariables.writeLog("readCard","",outParam);
  232. return 0;
  233. }
  234. }
  235. catch (Exception ex)
  236. {
  237. outParam = "异常:" + ex.Message;
  238. return -1;
  239. }
  240. }
  241. /// <summary>
  242. /// 获取患者基本信息
  243. /// </summary>
  244. /// <param name="errMsg"></param>
  245. /// <returns></returns>
  246. public int GetHisPatBaseInfo(out string errMsg)
  247. {
  248. errMsg = "";
  249. try
  250. {
  251. dynamic joTmp = new JObject();
  252. joTmp.admID = GlobalVariables.admDr;
  253. InvokeHelper invoker = new InvokeHelper();
  254. JObject joRtn = invoker.invokeHISService(JsonHelper.getIrisServiceInparamBaseJson("05110021", joTmp).ToString(), "获取HIS患者基本信息");
  255. if (JsonHelper.parseBusinessJson(joRtn, out errMsg) != 0)
  256. {
  257. errMsg = "获取HIS患者基本信息失败,请联系管理员!" + errMsg;
  258. return -1;
  259. }
  260. else
  261. {
  262. errMsg = joRtn.ToString();
  263. return 0;
  264. }
  265. }
  266. catch (Exception ex)
  267. {
  268. errMsg = "GetHisPatBaseInfo异常:" + ex.Message;
  269. return -1;
  270. }
  271. }
  272. public int checkName(string insuName, out string errMsg)
  273. {
  274. try
  275. {
  276. errMsg = "";
  277. string hisPatBaseInfo = "";
  278. if (GetHisPatBaseInfo(out hisPatBaseInfo) != 0)
  279. {
  280. errMsg = hisPatBaseInfo;
  281. return -1;
  282. }
  283. string hisPatName = JsonHelper.getJsonValue(JObject.Parse(hisPatBaseInfo), "result.patName");
  284. if (hisPatName.Trim() != insuName.Trim())
  285. {
  286. errMsg = "患者姓名(" + hisPatName + ")与参保人姓名(" + insuName + ")不一致,请检查!";
  287. return -1;
  288. }
  289. else
  290. {
  291. return 0;
  292. }
  293. }
  294. catch (Exception ex)
  295. {
  296. errMsg = "核对HIS与医保平台姓名一致性发生异常:" + ex.Message;
  297. return -1;
  298. }
  299. }
  300. /// <summary>
  301. /// 签到
  302. /// </summary>
  303. /// <returns></returns>
  304. public int MutualAidSignIn(out JObject joRtn)
  305. {
  306. string outParam = "";
  307. string inParam = "";
  308. try
  309. {
  310. dynamic jsonSignIn = new JObject();
  311. dynamic jsonInput = new JObject();
  312. jsonSignIn.opter_no = GlobalVariables.operatorNO;
  313. MedicalInsurance.Common.Common com = new MedicalInsurance.Common.Common();
  314. jsonSignIn.mac = com.GetMAC();
  315. jsonSignIn.ip = com.GetIP();
  316. jsonInput.signin = jsonSignIn;
  317. InvokeHelper invoke = new InvokeHelper();
  318. outParam = invoke.InvokeCenterServiceOfMutualAid("9001", jsonInput.ToString()).ToString();
  319. GlobalVariables.writeLog("共济加密" + outParam);
  320. joRtn = JObject.Parse(outParam);
  321. if (joRtn["infcode"].ToString() == "0")
  322. {
  323. GlobalVariables.mutualAidSignNO = joRtn["output"]["signinoutb"]["sign_no"].ToString();
  324. return 0;
  325. }
  326. else
  327. {
  328. //joRtn = JsonHelper.getIrisExceptionJson(-100, "签到异常", (string)joRtn["err_msg"]);
  329. return -1;
  330. }
  331. }
  332. catch (Exception ex)
  333. {
  334. joRtn = new JObject();
  335. joRtn.Add("infcode", -1);
  336. joRtn.Add("err_msg", outParam + ex.Message);
  337. //joRtn = JsonHelper.getIrisExceptionJson(-100,"签到异常", outParam + ex.Message);
  338. return -2;
  339. }
  340. }
  341. /// <summary>
  342. /// 共济读卡
  343. /// </summary>
  344. /// <returns></returns>
  345. public int MutualAidReadCard(string funNO, out string outParam, string centerUrl)
  346. {
  347. outParam = "";
  348. string errorMsg = "";
  349. int errorCode;
  350. string errorMessage;
  351. JObject joSignRtn = new JObject();
  352. if (MutualAidSignIn(out joSignRtn) != 0)
  353. {
  354. GlobalVariables.writeLog(joSignRtn.ToString());
  355. outParam = JsonHelper.getIrisExceptionJson(-1, "签到异常", (string)joSignRtn["err_msg"]).ToString();
  356. return -1;
  357. }
  358. else
  359. {
  360. GlobalVariables.writeLog(joSignRtn.ToString());
  361. }
  362. try
  363. {
  364. ChengDuMedInsu2.YinHaiCom yinhaiCom = new ChengDuMedInsu2.YinHaiCom();
  365. JObject joInput = GlobalVariables.setYinHaiParam("1101");
  366. string sSafeControlsRtnValue = string.Empty;
  367. yinhaiCom.Init();
  368. yinhaiCom.Call(funNO, joInput.ToString(), out sSafeControlsRtnValue);
  369. JObject joRtn = new JObject();
  370. joRtn = JObject.Parse(sSafeControlsRtnValue);
  371. errorCode = int.Parse(joRtn["code"].ToString());
  372. errorMessage = joRtn["message"].ToString();
  373. if (errorCode != 1)
  374. {
  375. outParam = JsonHelper.getIrisReturnJson(-100, "调用银海控件失败!", joRtn).ToString();
  376. return 1;
  377. }
  378. else
  379. {
  380. JObject jodata = JObject.FromObject(joRtn["data"]);
  381. GlobalVariables.mutualAidPatientAreaCode = jodata["insuplc_admdvs"].ToString();
  382. dynamic joInput_1101 = new JObject();
  383. dynamic joTmp = new JObject();
  384. joTmp.mdtrt_cert_type = jodata["mdtrt_cert_type"].ToString();
  385. joTmp.mdtrt_cert_no = jodata["mdtrt_cert_no"].ToString();
  386. joTmp.card_sn = jodata["card_sn"].ToString();
  387. joTmp.begntime = "";
  388. joTmp.psn_cert_type = jodata["psn_cert_type"].ToString();
  389. joTmp.certno = jodata["certno"].ToString();
  390. joTmp.psn_name = jodata["psn_name"].ToString();
  391. GlobalVariables.card_token = jodata["card_token"].ToString();
  392. dynamic joExpContent = new JObject();
  393. joExpContent.card_token = jodata["card_token"].ToString();
  394. joTmp.Add("expContent", JObject.FromObject(joExpContent));
  395. joInput_1101.Add("data", JObject.FromObject(joTmp));
  396. InvokeHelper center = new InvokeHelper();
  397. JObject joCenterServiceRtn = center.InvokeCenterServiceOfMutualAid("1101", joInput_1101.ToString());
  398. if (joCenterServiceRtn["infcode"].ToString() != "0")
  399. {
  400. outParam = "调用1101失败! ";
  401. return -1;
  402. }
  403. else
  404. {
  405. string output = joCenterServiceRtn["output"].ToString();
  406. //展示信息界面
  407. JObject joOutput = JObject.Parse(output);
  408. //编码转换
  409. JArray jaConvertCode = new JArray();
  410. JObject joConvertCodeParam = new JObject();
  411. joConvertCodeParam.Add("hospitalDr", GlobalVariables.hospitalDr);
  412. joConvertCodeParam.Add("interfaceDr", GlobalVariables.mutualAidInterfaceDr);
  413. joConvertCodeParam.Add("output", joOutput);
  414. jaConvertCode.Add(joConvertCodeParam);
  415. JObject joConvertCode = new JObject();
  416. joConvertCode.Add("code", "09010054");
  417. joConvertCode.Add("params", jaConvertCode);
  418. InvokeHelper invoker = new InvokeHelper();
  419. JObject joConvertCodeRtn = invoker.invokeInsuService(joConvertCode.ToString(), "患者信息编码转换");
  420. PatientInsuInfo frmPatientInfo = new PatientInsuInfo(joConvertCodeRtn);
  421. //相关信息转换到登记面板
  422. if (frmPatientInfo.ShowDialog() == DialogResult.OK)
  423. {
  424. joCenterServiceRtn.Property("output").AddBeforeSelf(new JProperty("selectedInsuInfo", frmPatientInfo.joSelectedInsuInfo));
  425. joCenterServiceRtn.Property("output").AddBeforeSelf(new JProperty("comInfo", jodata));
  426. }
  427. else
  428. {
  429. outParam = JsonHelper.getIrisExceptionJson(-1, "读卡", "收款员取消读卡").ToString();
  430. return -1;
  431. }
  432. }
  433. outParam = joCenterServiceRtn.ToString();
  434. GlobalVariables.writeLog("MutualAidReadCard", "", outParam);
  435. return 0;
  436. }
  437. }
  438. catch (Exception ex)
  439. {
  440. outParam = "异常:" + ex.Message;
  441. return -1;
  442. }
  443. }
  444. }
  445. }