STA.cs 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows.Forms;
  8. using Newtonsoft.Json.Linq;
  9. using PTMedicalInsurance.Common;
  10. using PTMedicalInsurance.Entity;
  11. using PTMedicalInsurance.Forms;
  12. using PTMedicalInsurance.Helper;
  13. using PTMedicalInsurance.Variables;
  14. namespace PTMedicalInsurance.Business
  15. {
  16. class STA
  17. {
  18. //设置业务实例
  19. CenterBusiness cBus = new CenterBusiness();
  20. HisMainBusiness hBus = new HisMainBusiness();
  21. HisIrisServices hIS = new HisIrisServices();
  22. MIIrisServices mIS = new MIIrisServices();
  23. InvokeHelper invoker = new InvokeHelper();
  24. private XmlHelper xmler = new XmlHelper();
  25. public delegate void callBack(string errMsg);
  26. [STAThread]
  27. public void ReadCard(object o)
  28. {
  29. string outParam = "", funNo = "";
  30. ChooseCard cc = new ChooseCard();
  31. CardReader CardRead = new CardReader();
  32. try
  33. {
  34. #region【弹框展示医保/工伤】
  35. //如果是自助机 这段代码展示用码业务类型需要屏蔽掉
  36. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  37. if (cc.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  38. {
  39. Global.pat.card.ecBizType = cc.businessType;
  40. }
  41. else
  42. {
  43. ((object[])o)[0] = -1;
  44. ((object[])o)[1] = "收款员取消结算!";
  45. }
  46. #endregion
  47. Global.pat.card.ecBizType = "01101";
  48. //02电子凭证 03社保卡 05人脸识别
  49. if (Global.ssmp.cardType == "03")
  50. {
  51. if (Global.pat.businessType == "GetPatientInfo")
  52. funNo = "1402"; //1402交易(参数不变)即可不需要输入密码进行刷卡和扫码操作
  53. else
  54. funNo = "1401";
  55. }
  56. else
  57. if ((Global.ssmp.cardType == "02") && (Global.pat.businessType == "GetPatientInfo"))
  58. funNo = "1403";
  59. else
  60. funNo = "1401";
  61. InvokeComCenter carder = new InvokeComCenter();
  62. JObject joInput = new JObject();
  63. joInput.Add("akb020", "H65010401167");
  64. joInput.Add("psnNo", "111111");
  65. string input = joInput.ToString();
  66. //原来用 1401,改1403只弹出电子凭证
  67. if (carder.Business(funNo, ref input, ref outParam) != 0)
  68. {
  69. ((object[])o)[0] = -1;
  70. ((object[])o)[1] = outParam;
  71. }
  72. else
  73. {
  74. //新疆读卡返回格式与异地不同,先按照本地的格式取参保地,如果取不到表示参保人是异地的
  75. string rtnCode = JsonHelper.getDestValue(JObject.Parse(outParam), "code");
  76. string insuplcAdmdvs = JsonHelper.getDestValue(JObject.Parse(outParam), "data.insuplcAdmdvs");
  77. if (insuplcAdmdvs != "") //本地-返回结果=1表示成功
  78. {
  79. if (rtnCode != "1")
  80. {
  81. ((object[])o)[0] = -1;
  82. ((object[])o)[1] = outParam;
  83. return;
  84. }
  85. }
  86. else
  87. {
  88. if (rtnCode != "0") //异地-返回结果=0表示成功
  89. {
  90. ((object[])o)[0] = -1;
  91. ((object[])o)[1] = outParam;
  92. return;
  93. }
  94. }
  95. Resp1101 info = JsonHelper.getOutput<Resp1101>(JObject.Parse(outParam));
  96. Global.pat.card.NO = info.data.cardNo;
  97. Global.pat.card.SN = info.data.cardSn;
  98. Global.pat.mdtrtcertType = info.data.mdtrtCertType;
  99. Global.pat.mdtrtcertNO = info.data.mdtrtCertNo;
  100. Global.pat.certNO = info.data.certNo;
  101. Global.pat.certType = info.data.psnCertType;
  102. Global.pat.name = info.data.psnName;
  103. Global.pat.insuplc_admdvs = info.data.insuplcAdmdvs;
  104. //异地参保人员扫码---如果上面没有取到参保地说明 参保人员扫码返回值的格式不是新疆本地
  105. if ((string.IsNullOrEmpty(info.data.insuplcAdmdvs)) && (Global.ssmp.cardType == "02"))
  106. {
  107. Global.pat.insuplc_admdvs = info.data.insuOrg;
  108. Global.pat.mdtrtcertType = info.data.idType;
  109. Global.pat.mdtrtcertNO = info.data.ecToken;
  110. Global.pat.name = info.data.userName;
  111. Global.pat.certNO = info.data.idNo;
  112. Global.pat.certType = info.data.idType;
  113. }
  114. ((object[])o)[0] = 0;
  115. ((object[])o)[1] = outParam;
  116. }
  117. }
  118. catch (Exception ex)
  119. {
  120. outParam = JsonHelper.setIrisReturnValue(-1, "门诊结算异常:" + ex.Message, null).ToString();
  121. ((object[])o)[0] = -1;
  122. ((object[])o)[1] = outParam;
  123. }
  124. }
  125. public void ReadCard_IdentifyFace(object o)
  126. {
  127. string outParam = "", funNo = "";
  128. ChooseCard cc = new ChooseCard();
  129. CardReader CardRead = new CardReader();
  130. try
  131. {
  132. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  133. //if (cc.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  134. //{
  135. // Global.pat.card.ecBizType = cc.businessType;
  136. //}
  137. //else
  138. //{
  139. // ((object[])o)[0] = -1;
  140. // ((object[])o)[1] = "收款员取消结算!";
  141. //}
  142. //人脸识别
  143. if (Global.ssmp.cardType == "05")
  144. {
  145. Global.inf.ecURL = "";
  146. Global.pat.card.ecBizType = "01101";
  147. Global.pat.mdtrtcertType = "01";
  148. Global.pat.certType = "01";
  149. Global.inf.hospitalNO = "H65010401167";
  150. Random rd = new Random();
  151. int iNum = rd.Next();
  152. string sLSH = DateTime.Now.ToString("yyyyMMddHHmmss") + Global.inf.hospitalNO + iNum.ToString().Substring(0, 5);
  153. JObject joCardInfo = new JObject();
  154. joCardInfo.Add("operatorId", Global.user.ID);
  155. joCardInfo.Add("operatorName", Global.user.name);
  156. joCardInfo.Add("officeId", Global.user.officeID);
  157. joCardInfo.Add("officeName", Global.user.officeName);
  158. joCardInfo.Add("orgId", Global.inf.hospitalNO);
  159. joCardInfo.Add("businessType", Global.pat.card.ecBizType);
  160. //1.调用人脸识别认证 cn.nhsa.ec.auth
  161. joCardInfo.Add("outBizNo", sLSH);
  162. joCardInfo.Add("extData", "");
  163. JObject JoEcAuth = new JObject();
  164. JoEcAuth.Add("orgId", Global.inf.hospitalNO);
  165. JoEcAuth.Add("transType", "cn.nhsa.ec.auth");
  166. JoEcAuth.Add("data", joCardInfo);
  167. JoEcAuth.Add("extra", "");
  168. //调用刷脸认证接口cn.nhsa.ec.auth返回授权信息authNo
  169. CardRead.NationEcTrans(Global.inf.ecURL, JoEcAuth.ToString(), out outParam);
  170. if (JsonHelper.getDestValue(JObject.Parse(outParam), "code") != "0")
  171. {
  172. ((object[])o)[0] = -1;
  173. ((object[])o)[1] = outParam;
  174. }
  175. else
  176. {
  177. //成功返回授权信息
  178. string auth = JsonHelper.getDestValue(JObject.Parse(outParam), "data.authNo");
  179. JObject JoAuthCheckInput = new JObject();
  180. JoAuthCheckInput.Add("orgId", Global.inf.hospitalNO);
  181. JoAuthCheckInput.Add("outBizNo", DateTime.Now.ToString("yyyyMMddHHmmss") + Global.inf.hospitalNO + iNum.ToString().Substring(0, 5));
  182. JoAuthCheckInput.Add("authNo", auth);
  183. JoAuthCheckInput.Add("businessType", Global.pat.card.ecBizType);
  184. JoAuthCheckInput.Add("operatorId", Global.user.ID);
  185. JoAuthCheckInput.Add("operatorName", Global.user.name);
  186. JoAuthCheckInput.Add("officeId", Global.user.officeID);
  187. JoAuthCheckInput.Add("officeName", Global.user.officeName);
  188. JoAuthCheckInput.Add("extData", "");
  189. JObject JoAuthChck = new JObject();
  190. JoAuthChck.Add("orgId", Global.inf.hospitalNO);
  191. JoAuthChck.Add("transType", "cn.nhsa.auth.check");
  192. JoAuthChck.Add("data", JoAuthCheckInput);
  193. JoAuthChck.Add("extra", "");
  194. //2.调用刷脸认证接口cn.nhsa.ec.auth返回授权信息authNo
  195. CardRead.NationEcTrans(Global.inf.ecURL, JoAuthChck.ToString(), out outParam);
  196. if (JsonHelper.getDestValue(JObject.Parse(outParam), "code") != "0")
  197. {
  198. ((object[])o)[0] = -1;
  199. ((object[])o)[1] = outParam;
  200. }
  201. else
  202. {
  203. Global.pat.ecToken = JsonHelper.getDestValue(JObject.Parse(outParam), "data.ecToken");
  204. Global.pat.name = JsonHelper.getDestValue(JObject.Parse(outParam), "data.userName");
  205. Global.pat.IDType = JsonHelper.getDestValue(JObject.Parse(outParam), "data.idType");
  206. Global.pat.IDNO = JsonHelper.getDestValue(JObject.Parse(outParam), "data.idNo");
  207. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(outParam), "data.insuOrg");
  208. Global.pat.mdtrtcertNO = Global.pat.ecToken;
  209. Global.pat.certType = Global.pat.IDType;
  210. Global.pat.certNO = Global.pat.IDNO;
  211. ((object[])o)[0] = 0;
  212. ((object[])o)[1] = outParam;
  213. }
  214. }
  215. }
  216. else
  217. {
  218. if (Global.ssmp.cardType == "02") //02电子凭证 03社保卡 05人脸识别
  219. {
  220. Global.pat.card.ecBizType = "01101";
  221. funNo = "1403";
  222. }
  223. else if (Global.ssmp.cardType == "03")
  224. {
  225. Global.pat.card.ecBizType = "";
  226. funNo = "1402"; //1402交易(参数不变)即可不需要输入密码进行刷卡和扫码操作
  227. }
  228. else
  229. {
  230. Global.pat.card.ecBizType = "";
  231. funNo = "1401";
  232. }
  233. InvokeComCenter carder = new InvokeComCenter();
  234. JObject joInput = new JObject();
  235. joInput.Add("akb020", "H65010401167");
  236. joInput.Add("psnNo", "111111");
  237. string input = joInput.ToString();
  238. //原来用 1401,改1403只弹出电子凭证
  239. if (carder.Business(funNo, ref input, ref outParam) != 0)
  240. {
  241. ((object[])o)[0] = -1;
  242. ((object[])o)[1] = outParam;
  243. }
  244. else
  245. {
  246. Resp1101 info = JsonHelper.getOutput<Resp1101>(JObject.Parse(outParam));
  247. Global.pat.card.NO = info.data.cardNo;
  248. Global.pat.card.SN = info.data.cardSn;
  249. Global.pat.mdtrtcertType = info.data.mdtrtCertType;
  250. Global.pat.mdtrtcertNO = info.data.mdtrtCertNo;
  251. Global.pat.certNO = info.data.certNo;
  252. Global.pat.certType = info.data.psnCertType;
  253. Global.pat.name = info.data.psnName;
  254. Global.pat.insuplc_admdvs = info.data.insuplcAdmdvs;
  255. ((object[])o)[0] = 0;
  256. ((object[])o)[1] = outParam;
  257. }
  258. }
  259. }
  260. catch (Exception ex)
  261. {
  262. outParam = JsonHelper.setIrisReturnValue(-1, "门诊结算异常:" + ex.Message, null).ToString();
  263. ((object[])o)[0] = -1;
  264. ((object[])o)[1] = outParam;
  265. }
  266. }
  267. /// <summary>
  268. /// 读卡-备份最老版
  269. /// </summary>
  270. /// <param name="o"></param>
  271. public void ReadCard_old(object o)
  272. {
  273. string outParam = "";
  274. ChooseCard cc = new ChooseCard();
  275. CardReader CardRead = new CardReader();
  276. try
  277. {
  278. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  279. if (cc.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  280. {
  281. Global.pat.card.ecBizType = cc.businessType;
  282. }
  283. else
  284. {
  285. ((object[])o)[0] = -1;
  286. ((object[])o)[1] = "收款员取消结算!";
  287. }
  288. InvokeComCenter carder = new InvokeComCenter();
  289. JObject joInput = new JObject();
  290. joInput.Add("akb020", "H65010401167");
  291. joInput.Add("psnNo", "111111");
  292. string input = joInput.ToString();
  293. //原来用 1401,改1403只弹出电子凭证
  294. if (carder.Business("1401", ref input, ref outParam) != 0)
  295. {
  296. ((object[])o)[0] = -1;
  297. ((object[])o)[1] = outParam;
  298. }
  299. else
  300. {
  301. Resp1101 info = JsonHelper.getOutput<Resp1101>(JObject.Parse(outParam));
  302. Global.pat.card.NO = info.data.cardNo;
  303. Global.pat.card.SN = info.data.cardSn;
  304. Global.pat.mdtrtcertType = info.data.mdtrtCertType;
  305. Global.pat.mdtrtcertNO = info.data.mdtrtCertNo;
  306. Global.pat.certNO = info.data.certNo;
  307. Global.pat.certType = info.data.psnCertType;
  308. Global.pat.name = info.data.psnName;
  309. Global.pat.insuplc_admdvs = info.data.insuplcAdmdvs;
  310. ((object[])o)[0] = 0;
  311. ((object[])o)[1] = outParam;
  312. }
  313. }
  314. catch (Exception ex)
  315. {
  316. outParam = JsonHelper.setIrisReturnValue(-1, "门诊结算异常:" + ex.Message, null).ToString();
  317. ((object[])o)[0] = -1;
  318. ((object[])o)[1] = outParam;
  319. }
  320. }
  321. public void CallBack(string errMsg)
  322. {
  323. MessageBox.Show(errMsg);
  324. }
  325. [STAThread]
  326. public void showPatInfo(object o)
  327. {
  328. string outParam = "";
  329. JObject joOutparam = JObject.Parse(((object[])o)[1].ToString());
  330. JObject joOutput = JObject.Parse(JsonHelper.getDestValue(joOutparam, "output"));
  331. //编码转换
  332. JArray jaConvertCode = new JArray();
  333. JObject joConvertCodeParam = new JObject();
  334. joConvertCodeParam.Add("hospitalDr", Global.inf.hospitalDr);
  335. joConvertCodeParam.Add("interfaceDr", Global.inf.interfaceDr);
  336. joConvertCodeParam.Add("output", joOutput);
  337. jaConvertCode.Add(joConvertCodeParam);
  338. JObject joConvertCode = new JObject();
  339. joConvertCode.Add("code", "09010054");
  340. joConvertCode.Add("params", jaConvertCode);
  341. InvokeHelper invoker = new InvokeHelper();
  342. JObject joConvertCodeRtn = invoker.invokeInsuService(joConvertCode.ToString(), "患者信息编码转换");
  343. PatientInsuInfo frmPatientInfo = new PatientInsuInfo(joConvertCodeRtn);
  344. try
  345. {
  346. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  347. frmPatientInfo.StartPosition = FormStartPosition.CenterScreen;
  348. frmPatientInfo.BringToFront();
  349. if (frmPatientInfo.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  350. {
  351. //原来用的是转换后的
  352. //frmPatientInfo.joSelectedInsuInfo.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  353. //frmPatientInfo.joSelectedInsuInfo.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  354. //joOutparam.Property("output").AddBeforeSelf(new JProperty("selectedInsuInfo", frmPatientInfo.joSelectedInsuInfo));
  355. //现在用转换之前的
  356. JArray jaInsuInfo = JArray.Parse(JsonHelper.getDestValue(joOutput, "insuinfo"));
  357. JArray jaIdInfo = JArray.Parse(JsonHelper.getDestValue(joOutput, "idetinfo"));
  358. JObject joSelectedInsuInfo = (JObject)jaInsuInfo[frmPatientInfo.insuInfoIndex];
  359. JObject joSelectedIdInfo;
  360. if (jaIdInfo.Count != 0)
  361. {
  362. joSelectedIdInfo = (JObject)jaIdInfo[frmPatientInfo.idInfoIndex];
  363. }
  364. else
  365. {
  366. joSelectedIdInfo = new JObject();
  367. }
  368. joSelectedInsuInfo.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  369. joSelectedInsuInfo.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  370. if (joOutparam["selectedInsuInfo"] != null)
  371. {
  372. joOutparam["selectedInsuInfo"] = joSelectedInsuInfo;
  373. }
  374. else
  375. {
  376. joOutparam.Property("output").AddBeforeSelf(new JProperty("selectedInsuInfo", joSelectedInsuInfo));
  377. }
  378. if (joOutparam["selectedIdInfo"] != null)
  379. {
  380. joOutparam["selectedIdInfo"] = joSelectedInsuInfo;
  381. }
  382. else
  383. {
  384. joOutparam.Property("output").AddBeforeSelf(new JProperty("selectedIdInfo", joSelectedInsuInfo));
  385. }
  386. outParam = joOutparam.ToString();
  387. ((object[])o)[0] = 0;
  388. ((object[])o)[2] = outParam;
  389. }
  390. else
  391. {
  392. ((object[])o)[0] = -1;
  393. ((object[])o)[2] = "收款员取消结算!";
  394. }
  395. }
  396. catch (Exception ex)
  397. {
  398. outParam = JsonHelper.setIrisReturnValue(-1, "门诊结算异常:" + ex.Message, null).ToString();
  399. ((object[])o)[0] = -1;
  400. ((object[])o)[2] = outParam;
  401. }
  402. }
  403. [STAThread]
  404. public void showOutPatRegisterForm(object o)
  405. {
  406. string outParam = "";
  407. //调用服务获取门诊诊断信息
  408. string diagnoses;
  409. if (hIS.getPatDiagnoses(Global.pat, out diagnoses) != 0)
  410. {
  411. ((object[])o)[0] = -1;
  412. ((object[])o)[1] = JsonHelper.setExceptionJson(-1, "getPatDiagnoses", diagnoses).ToString();
  413. return ;
  414. }
  415. JObject joHisRtnInfo = JObject.Parse(diagnoses);
  416. JObject joReg = new JObject();
  417. try
  418. {
  419. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  420. JArray jaDiagnoses = JArray.Parse(JsonHelper.getDestValue(joHisRtnInfo, "diseinfo"));
  421. //登记面板实例
  422. OutpatientRegistration frmReg = new OutpatientRegistration();
  423. //frmReg.dblkcbxSettelmentWay.Enabled = false;
  424. //险种类型
  425. DataTable dtInsuType = (DataTable)frmReg.dblkcbxInsuranceType.DataSource;
  426. for (int i = 0; i < dtInsuType.Rows.Count; i++)
  427. {
  428. if (dtInsuType.Rows[i]["Code"].ToString() == Global.pat.insuType)
  429. {
  430. frmReg.dblkcbxInsuranceType.Text = dtInsuType.Rows[i]["Name"].ToString();
  431. frmReg.insuType = dtInsuType.Rows[i]["Code"].ToString();
  432. if (Global.pat.isWorkInjury)
  433. {
  434. frmReg.dblkcbxInsuranceType.Text = "工伤保险";
  435. }
  436. }
  437. }
  438. //医疗类别
  439. DataTable dtMedType = (DataTable)frmReg.dblkcbxMedicalType.DataSource;
  440. for (int i = 0; i < dtMedType.Rows.Count; i++)
  441. {
  442. if (dtMedType.Rows[i]["Code"].ToString() == "11")
  443. {
  444. frmReg.dblkcbxMedicalType.Text = dtMedType.Rows[i]["Name"].ToString();
  445. frmReg.med_type = dtMedType.Rows[i]["Code"].ToString();
  446. }
  447. }
  448. //结算方式
  449. DataTable dtSettlWay = (DataTable)frmReg.dblkcbxSettelmentWay.DataSource;
  450. for (int i = 0; i < dtSettlWay.Rows.Count; i++)
  451. {
  452. if (dtSettlWay.Rows[i]["Code"].ToString() == "01")
  453. {
  454. frmReg.dblkcbxSettelmentWay.Text = dtSettlWay.Rows[i]["Name"].ToString();
  455. frmReg.psn_setlway = dtSettlWay.Rows[i]["Code"].ToString();
  456. }
  457. }
  458. //转换下主要诊断
  459. for (int i = 0; i < jaDiagnoses.Count; i++)
  460. {
  461. string diag_type = JsonHelper.getDestValue((JObject)jaDiagnoses[i], "diag_type");
  462. switch (diag_type)
  463. {
  464. case "1":
  465. {
  466. jaDiagnoses[i]["diag_type_name"] = new JObject();
  467. jaDiagnoses[i]["diag_type_name"] = "西医主要诊断";
  468. break;
  469. }
  470. case "2":
  471. {
  472. jaDiagnoses[i]["diag_type_name"] = new JObject();
  473. jaDiagnoses[i]["diag_type_name"] = "西医其他诊断";
  474. break;
  475. }
  476. case "3":
  477. {
  478. jaDiagnoses[i]["diag_type_name"] = new JObject();
  479. jaDiagnoses[i]["diag_type_name"] = "中医主病诊断";
  480. break;
  481. }
  482. case "4":
  483. {
  484. jaDiagnoses[i]["diag_type_name"] = new JObject();
  485. jaDiagnoses[i]["diag_type_name"] = "中医主证诊断";
  486. break;
  487. }
  488. }
  489. }
  490. frmReg.DtDiagnose = (DataTable)jaDiagnoses.ToObject(typeof(DataTable));
  491. //展示登记面板
  492. if (frmReg.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  493. {
  494. string diseCodg = frmReg.diseCodg, diseName = frmReg.diseName;
  495. ////哈尔滨要求必须传病种。普通疾病传主诊断
  496. //if (string.IsNullOrEmpty(diseCodg))
  497. //{
  498. // diseCodg = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_code");
  499. //};
  500. //Global.pat.disCode = diseCodg;
  501. //if (string.IsNullOrEmpty(diseName))
  502. //{
  503. // diseName = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_name");
  504. //};
  505. //组织挂号入参
  506. JObject joRegInpar = new JObject();
  507. string occurTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  508. joRegInpar.Add("psn_no", Global.pat.psn_no);
  509. joRegInpar.Add("insutype", frmReg.insuType);
  510. joRegInpar.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime"));//挂号时间 occurTime
  511. joRegInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  512. joRegInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  513. string admDr = Utils.convertAdmDr(Global.pat.adm_Dr.ToString());
  514. joRegInpar.Add("ipt_otp_no", admDr);
  515. joRegInpar.Add("atddr_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.atddr_no"));
  516. joRegInpar.Add("dr_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.chfpdr_name"));
  517. joRegInpar.Add("dept_code", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_codg"));
  518. joRegInpar.Add("dept_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_name"));
  519. joRegInpar.Add("exp_content", "");
  520. joRegInpar.Add("caty", "72");
  521. joReg.Add("data", joRegInpar);
  522. //组织就诊信息入参
  523. JObject joMdtrtinfo = new JObject();
  524. for (int i = 0; i < jaDiagnoses.Count; i++)
  525. {
  526. jaDiagnoses[i]["vali_flag"] = new JObject();
  527. jaDiagnoses[i]["vali_flag"] = "1";
  528. }
  529. joMdtrtinfo.Add("mdtrt_id", Global.pat.mdtrtID);
  530. joMdtrtinfo.Add("psn_no", Global.pat.psn_no); //人员编号
  531. Global.pat.medType = frmReg.med_type;
  532. joMdtrtinfo.Add("med_type", frmReg.med_type); //医疗类别
  533. joMdtrtinfo.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime")); //开始时间
  534. joMdtrtinfo.Add("main_cond_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.main_cond_dscr")); //主要病情描述
  535. joMdtrtinfo.Add("dise_codg", diseCodg); //病种编码
  536. joMdtrtinfo.Add("dise_name", diseName); //病种名称
  537. joMdtrtinfo.Add("birctrl_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_type")); //计划生育手术类别
  538. //joMdtrtinfo.Add("birctrl_matn_date", ""); //计划生育手术或生育日期 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_matn_date") 20230228医保中心校验传正确时间或空
  539. joMdtrtinfo.Add("matn_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.matn_type")); //生育类别
  540. //joMdtrtinfo.Add("geso_val", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.geso_val")); //孕周数
  541. joMdtrtinfo.Add("exp_content", ""); //字段扩展
  542. //组织结算入参
  543. JObject joSetlInpar = new JObject();
  544. joSetlInpar.Add("psn_no", Global.pat.psn_no);
  545. joSetlInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  546. joSetlInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  547. joSetlInpar.Add("med_type", Global.pat.medType);
  548. joSetlInpar.Add("medfee_sumamt", "");
  549. joSetlInpar.Add("psn_setlway", frmReg.psn_setlway); //结算方式
  550. joSetlInpar.Add("mdtrt_id", Global.pat.mdtrtID);
  551. joSetlInpar.Add("chrg_bchno", Global.pat.adm_Dr.ToString());
  552. joSetlInpar.Add("acct_used_flag", frmReg.personAccountUsedFlag);//个人账户使用标志
  553. joSetlInpar.Add("insutype", frmReg.insuType);//险种类型
  554. joSetlInpar.Add("pub_hosp_rfom_flag", "");
  555. joSetlInpar.Add("exp_content11", "");
  556. joSetlInpar.Add("minpacunt_drug_trac_cnt", Global.Set.minpacunt_drug_trac_cnt); //本次结算应上传最小包装追溯码数量
  557. joSetlInpar.Add("mcs_trac_cnt", Global.Set.mcs_trac_cnt); //本次结算应上传耗材追溯码数量
  558. joReg.Add("mdtrtinfo", joMdtrtinfo);
  559. joReg.Add("diseinfo", jaDiagnoses);
  560. joReg.Add("settlement", joSetlInpar);
  561. ((object[])o)[0] =0;
  562. ((object[])o)[1] = joReg.ToString();
  563. return;
  564. }
  565. else
  566. {
  567. ((object[])o)[0] = -1;
  568. ((object[])o)[1] = "收费员取消操作!";
  569. return;
  570. }
  571. }
  572. catch (Exception ex)
  573. {
  574. ((object[])o)[0] = -1;
  575. ((object[])o)[1] = "登记界面显示异常:" + ex.Message;
  576. return;
  577. }
  578. }
  579. [STAThread]
  580. public void showInPatRegisterForm(object o)
  581. {
  582. //调用服务获取门诊诊断信息
  583. string diagnoses;
  584. if (hIS.getPatDiagnoses(Global.pat, out diagnoses) != 0)
  585. {
  586. ((object[])o)[0] = -1;
  587. ((object[])o)[1] = JsonHelper.setExceptionJson(-1, "getPatDiagnoses", diagnoses).ToString();
  588. return;
  589. }
  590. JObject joHisRtnInfo = JObject.Parse(diagnoses);
  591. JObject joReg = new JObject();
  592. try
  593. {
  594. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  595. JArray jaDiagnoses = JArray.Parse(JsonHelper.getDestValue(joHisRtnInfo, "diseinfo"));
  596. string dscg_maindiag_code = "", dscg_maindiag_name = "";
  597. // 对诊断数组进行转换 转换下主要诊断
  598. JArray jaConvertedDiagnoses = new JArray();
  599. JArray jaInPatDiagnoses = new JArray();
  600. JArray jaOutPatDiagnoses = new JArray();
  601. for (int i = 0; i < jaDiagnoses.Count; i++)
  602. {
  603. string diag_type = JsonHelper.getDestValue((JObject)jaDiagnoses[i], "diag_type");
  604. switch (diag_type)
  605. {
  606. case "1":
  607. {
  608. jaDiagnoses[i]["diag_type_name"] = new JObject();
  609. jaDiagnoses[i]["diag_type_name"] = "西医主要诊断";
  610. break;
  611. }
  612. case "2":
  613. {
  614. jaDiagnoses[i]["diag_type_name"] = new JObject();
  615. jaDiagnoses[i]["diag_type_name"] = "西医其他诊断";
  616. break;
  617. }
  618. case "3":
  619. {
  620. jaDiagnoses[i]["diag_type_name"] = new JObject();
  621. jaDiagnoses[i]["diag_type_name"] = "中医主病诊断";
  622. break;
  623. }
  624. case "4":
  625. {
  626. jaDiagnoses[i]["diag_type_name"] = new JObject();
  627. jaDiagnoses[i]["diag_type_name"] = "中医主证诊断";
  628. break;
  629. }
  630. }
  631. if (jaDiagnoses[i]["diaTypeCode"].ToString() == "ADD") //ADD 入院 OPD 门诊
  632. {
  633. jaInPatDiagnoses.Add(jaDiagnoses[i]);
  634. }
  635. if (jaDiagnoses[i]["diaTypeCode"].ToString() == "OPD") //ADD 入院 OPD 门诊
  636. {
  637. jaOutPatDiagnoses.Add(jaDiagnoses[i]);
  638. }
  639. }
  640. if (jaInPatDiagnoses.Count > 0)
  641. {
  642. jaConvertedDiagnoses = (JArray)jaInPatDiagnoses.DeepClone();
  643. }
  644. else
  645. {
  646. jaConvertedDiagnoses = (JArray)jaOutPatDiagnoses.DeepClone();
  647. }
  648. for (int i = 0; i < jaConvertedDiagnoses.Count; i++)
  649. {
  650. jaConvertedDiagnoses[i]["diag_srt_no"] = i + 1;
  651. if (jaConvertedDiagnoses[i]["maindiag_flag"].ToString() == "1")
  652. {
  653. dscg_maindiag_code = jaConvertedDiagnoses[i]["diag_code"].ToString();
  654. dscg_maindiag_name = jaConvertedDiagnoses[i]["diag_name"].ToString();
  655. }
  656. }
  657. //登记面板实例
  658. OutpatientRegistration frmReg = new OutpatientRegistration();
  659. //frmReg.dblkcbxSettelmentWay.Enabled = false;
  660. DataTable dt = (DataTable)frmReg.dblkcbxInsuranceType.DataSource;
  661. int selectedIndex = 0;
  662. for (int i = 0; i < dt.Rows.Count; i++)
  663. {
  664. if (dt.Rows[i]["Code"].ToString() == Global.pat.insuType)
  665. {
  666. selectedIndex = i;
  667. frmReg.dblkcbxInsuranceType.Text = dt.Rows[i]["Name"].ToString();
  668. frmReg.insuType = dt.Rows[i]["Code"].ToString();
  669. }
  670. }
  671. DataTable dtMedType = (DataTable)frmReg.dblkcbxMedicalType.DataSource;
  672. for (int i = 0; i < dtMedType.Rows.Count; i++)
  673. {
  674. if (dtMedType.Rows[i]["Code"].ToString() == "21")
  675. {
  676. frmReg.dblkcbxMedicalType.Text = dtMedType.Rows[i]["Name"].ToString();
  677. frmReg.med_type = dtMedType.Rows[i]["Code"].ToString();
  678. }
  679. }
  680. frmReg.DtDiagnose = (DataTable)jaConvertedDiagnoses.ToObject(typeof(DataTable));
  681. //展示登记面板
  682. if (frmReg.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  683. {
  684. //如果日间手术,同时床位为空,则提示
  685. string bedNo = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_bed");
  686. if ((bedNo == "")&&(frmReg.med_type == "28"))
  687. {
  688. ((object[])o)[0] = -1;
  689. ((object[])o)[1] = "床位号为空!";
  690. return;
  691. }
  692. string diseCodg = "", diseName = "";
  693. diseCodg = frmReg.diseCodg;
  694. diseName = frmReg.diseName;
  695. JObject joMdtrtinfo = new JObject();
  696. joMdtrtinfo.Add("psn_no", Global.pat.psn_no); //人员编号
  697. joMdtrtinfo.Add("insutype", Global.pat.insuType); //险种类型
  698. joMdtrtinfo.Add("coner_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.coner_name")); //联系人姓名
  699. joMdtrtinfo.Add("tel", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.tel")); //联系电话
  700. joMdtrtinfo.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime")); //开始时间
  701. joMdtrtinfo.Add("mdtrt_cert_type", Global.pat.mdtrtcertType); //就诊凭证类型
  702. joMdtrtinfo.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO); //就诊凭证编号
  703. joMdtrtinfo.Add("med_type", frmReg.med_type); //医疗类别
  704. //string ipAdmNo = Utils.convertAdmDr(JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.ipt_no"));
  705. joMdtrtinfo.Add("ipt_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.ipt_no")); //住院号
  706. joMdtrtinfo.Add("medrcdno", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.medrcdno")); //病历号
  707. joMdtrtinfo.Add("atddr_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.atddr_no")); //主治医生编码
  708. joMdtrtinfo.Add("chfpdr_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.chfpdr_name")); //主诊医师姓名
  709. //joMdtrtinfo.Add("adm_diag_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_diag_dscr")); //入院诊断描述
  710. joMdtrtinfo.Add("adm_diag_dscr", "");
  711. joMdtrtinfo.Add("adm_dept_codg", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_codg")); //入院科室编码
  712. joMdtrtinfo.Add("adm_dept_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_name")); //入院科室名称
  713. joMdtrtinfo.Add("adm_bed", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_bed")); //入院床位
  714. joMdtrtinfo.Add("dscg_maindiag_code", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_code")); //住院主诊断代码
  715. joMdtrtinfo.Add("dscg_maindiag_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_name")); //住院主诊断名称
  716. //joMdtrtinfo.Add("dscg_maindiag_code", dscg_maindiag_code); //住院主诊断代码
  717. //joMdtrtinfo.Add("dscg_maindiag_name", dscg_maindiag_name); //住院主诊断名称
  718. joMdtrtinfo.Add("main_cond_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.main_cond_dscr")); //主要病情描述
  719. joMdtrtinfo.Add("dise_codg", diseCodg); //病种编码
  720. joMdtrtinfo.Add("dise_name", diseName); //病种名称
  721. joMdtrtinfo.Add("oprn_oprt_code", frmReg.oprn_oprt_code); //手术操作代码
  722. joMdtrtinfo.Add("oprn_oprt_name", frmReg.oprn_oprt_name); //手术操作名称
  723. joMdtrtinfo.Add("fpsc_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fpsc_no")); //计划生育服务证号
  724. joMdtrtinfo.Add("matn_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.matn_type")); //生育类别
  725. joMdtrtinfo.Add("birctrl_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_type")); //计划生育手术类别
  726. joMdtrtinfo.Add("latechb_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.latechb_flag")); //晚育标志
  727. //joMdtrtinfo.Add("geso_val", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.geso_val")); //孕周数
  728. //joMdtrtinfo.Add("fetts", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fetts")); //胎次
  729. //joMdtrtinfo.Add("fetus_cnt", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fetus_cnt")); //胎儿数
  730. //joMdtrtinfo.Add("pret_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.pret_flag")); //早产标志
  731. //joMdtrtinfo.Add("birctrl_matn_date", ""); //计划生育手术或生育日期 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_matn_date") 20230228医保中心校验传正确时间或空
  732. joMdtrtinfo.Add("dise_type_code", frmReg.dise_type_code); //病种类型
  733. joMdtrtinfo.Add("insuplc_admdvs", Global.pat.insuplc_admdvs); //参保地医保区划
  734. joMdtrtinfo.Add("mdtrtarea_admvs", Global.inf.areaCode); //就医地医保区划
  735. joReg.Add("mdtrtinfo", joMdtrtinfo);
  736. joReg.Add("diseinfo", jaConvertedDiagnoses);
  737. Global.pat.disCode = diseCodg;
  738. Global.pat.disName = diseName;
  739. Global.pat.medType = frmReg.med_type;
  740. if (Global.pat.isWorkInjury)
  741. {
  742. Global.pat.ExpContent = "GGS";
  743. }
  744. ((object[])o)[0] = 0;
  745. ((object[])o)[1] = joReg.ToString();
  746. return;
  747. }
  748. else
  749. {
  750. ((object[])o)[0] = -1;
  751. ((object[])o)[1] = "收费员取消操作!";
  752. return;
  753. }
  754. }
  755. catch (Exception ex)
  756. {
  757. ((object[])o)[0] = -1;
  758. ((object[])o)[1] = "登记界面显示异常:" + ex.Message;
  759. return;
  760. }
  761. }
  762. [STAThread]
  763. public void uploadFee(object o)
  764. {
  765. string outParam = "";
  766. object[] oArr = (object[])o;
  767. try
  768. {
  769. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  770. string funNO = oArr[1].ToString();
  771. int singleCount = int.Parse(oArr[2].ToString());
  772. PTMedicalInsurance.Forms.FeeUpload pb = new PTMedicalInsurance.Forms.FeeUpload(funNO, singleCount);
  773. pb.StartPosition = FormStartPosition.CenterScreen;
  774. if (pb.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  775. {
  776. ((object[])o)[0] = 0;
  777. ((object[])o)[3] = pb.outParam;
  778. }
  779. else
  780. {
  781. outParam = "收款员取消";
  782. ((object[])o)[0] = -1;
  783. ((object[])o)[3] = outParam;
  784. }
  785. }
  786. catch (Exception ex)
  787. {
  788. outParam = "uploadFee 异常:" + ex.Message;
  789. ((object[])o)[0] = -1;
  790. ((object[])o)[3] = outParam;
  791. o = oArr;
  792. return;
  793. }
  794. }
  795. [STAThread]
  796. public void showSettlementForm(object o)
  797. {
  798. string outParam = "";
  799. JObject joSettlement = JObject.Parse(((object[])o)[1].ToString());
  800. try
  801. {
  802. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  803. SettlementInfo frmSettlment = new SettlementInfo(joSettlement);
  804. //相关信息转换到结算信息面板
  805. if (frmSettlment.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  806. {
  807. ((object[])o)[0] = 0;
  808. ((object[])o)[1] = outParam;
  809. }
  810. else
  811. {
  812. outParam = "收款员取消";
  813. ((object[])o)[0] = -1;
  814. ((object[])o)[1] = outParam;
  815. }
  816. }
  817. catch (Exception ex)
  818. {
  819. outParam = "showSettlementForm 异常:" + ex.Message;
  820. ((object[])o)[0] = -1;
  821. ((object[])o)[1] = outParam;
  822. }
  823. }
  824. [STAThread]
  825. public void Exception(object o)
  826. {
  827. try
  828. {
  829. //显示异常处理界面
  830. HandleException frmEX = new HandleException();
  831. frmEX.WindowState = FormWindowState.Maximized;
  832. frmEX.ShowDialog();
  833. }
  834. catch (Exception ex)
  835. {
  836. CallBack(ex.Message);
  837. }
  838. }
  839. [STAThread]
  840. public void CheckAndClearing(object o)
  841. {
  842. try
  843. {
  844. //显示对账界面
  845. Clearing frm = new Clearing();
  846. frm.WindowState = FormWindowState.Maximized;
  847. frm.ShowDialog();
  848. }
  849. catch (Exception ex)
  850. {
  851. CallBack(ex.Message);
  852. }
  853. }
  854. [STAThread]
  855. public void PrescribeCirculation(object o)
  856. {
  857. try
  858. {
  859. //显示处方上传
  860. PrescriptionCirculation PresCir = new PrescriptionCirculation("");
  861. //PresCir.WindowState = FormWindowState.Minimized;
  862. PresCir.ShowDialog();
  863. }
  864. catch (Exception ex)
  865. {
  866. CallBack(ex.Message);
  867. }
  868. }
  869. [STAThread]
  870. public void BasicData(object o)
  871. {
  872. try
  873. {
  874. //显示异常处理界面
  875. BasicData frm = new BasicData();
  876. frm.WindowState = FormWindowState.Maximized;
  877. frm.ShowDialog();
  878. }
  879. catch (Exception ex)
  880. {
  881. CallBack(ex.Message);
  882. }
  883. }
  884. [STAThread]
  885. public void CenterQuery(object o)
  886. {
  887. try
  888. {
  889. //显示异常处理界面
  890. CenterQuery frm = new CenterQuery();
  891. frm.WindowState = FormWindowState.Maximized;
  892. frm.ShowDialog();
  893. }
  894. catch (Exception ex)
  895. {
  896. CallBack(ex.Message);
  897. }
  898. }
  899. }
  900. public class WindowWrapper : System.Windows.Forms.IWin32Window
  901. {
  902. public WindowWrapper(IntPtr handle)
  903. {
  904. _hwnd = handle;
  905. }
  906. public IntPtr Handle
  907. {
  908. get { return _hwnd; }
  909. }
  910. private IntPtr _hwnd;
  911. }
  912. }