STA.cs 46 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010
  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. Global.pat.disCode = diseCodg;
  496. Global.pat.disName = diseName;
  497. ////哈尔滨要求必须传病种。普通疾病传主诊断
  498. //if (string.IsNullOrEmpty(diseCodg))
  499. //{
  500. // diseCodg = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_code");
  501. //};
  502. //Global.pat.disCode = diseCodg;
  503. //if (string.IsNullOrEmpty(diseName))
  504. //{
  505. // diseName = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_name");
  506. //};
  507. //组织挂号入参
  508. JObject joRegInpar = new JObject();
  509. string occurTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  510. joRegInpar.Add("psn_no", Global.pat.psn_no);
  511. joRegInpar.Add("insutype", frmReg.insuType);
  512. joRegInpar.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime"));//挂号时间 occurTime
  513. joRegInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  514. joRegInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  515. string admDr = Utils.convertAdmDr(Global.pat.adm_Dr.ToString());
  516. joRegInpar.Add("ipt_otp_no", admDr);
  517. joRegInpar.Add("atddr_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.atddr_no"));
  518. joRegInpar.Add("dr_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.chfpdr_name"));
  519. joRegInpar.Add("dept_code", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_codg"));
  520. joRegInpar.Add("dept_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_name"));
  521. joRegInpar.Add("exp_content", "");
  522. joRegInpar.Add("caty", "72");
  523. joReg.Add("data", joRegInpar);
  524. //组织就诊信息入参
  525. JObject joMdtrtinfo = new JObject();
  526. for (int i = 0; i < jaDiagnoses.Count; i++)
  527. {
  528. jaDiagnoses[i]["vali_flag"] = new JObject();
  529. jaDiagnoses[i]["vali_flag"] = "1";
  530. }
  531. joMdtrtinfo.Add("mdtrt_id", Global.pat.mdtrtID);
  532. joMdtrtinfo.Add("psn_no", Global.pat.psn_no); //人员编号
  533. Global.pat.medType = frmReg.med_type;
  534. joMdtrtinfo.Add("med_type", frmReg.med_type); //医疗类别
  535. joMdtrtinfo.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime")); //开始时间
  536. joMdtrtinfo.Add("main_cond_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.main_cond_dscr")); //主要病情描述
  537. joMdtrtinfo.Add("dise_codg", diseCodg); //病种编码
  538. joMdtrtinfo.Add("dise_name", diseName); //病种名称
  539. joMdtrtinfo.Add("birctrl_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_type")); //计划生育手术类别
  540. //joMdtrtinfo.Add("birctrl_matn_date", ""); //计划生育手术或生育日期 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_matn_date") 20230228医保中心校验传正确时间或空
  541. joMdtrtinfo.Add("matn_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.matn_type")); //生育类别
  542. //joMdtrtinfo.Add("geso_val", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.geso_val")); //孕周数
  543. joMdtrtinfo.Add("exp_content", ""); //字段扩展
  544. //组织结算入参
  545. JObject joSetlInpar = new JObject();
  546. joSetlInpar.Add("psn_no", Global.pat.psn_no);
  547. joSetlInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  548. joSetlInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  549. joSetlInpar.Add("med_type", Global.pat.medType);
  550. joSetlInpar.Add("medfee_sumamt", "");
  551. joSetlInpar.Add("psn_setlway", frmReg.psn_setlway); //结算方式
  552. joSetlInpar.Add("mdtrt_id", Global.pat.mdtrtID);
  553. joSetlInpar.Add("chrg_bchno", Global.pat.adm_Dr.ToString());
  554. joSetlInpar.Add("acct_used_flag", frmReg.personAccountUsedFlag);//个人账户使用标志
  555. joSetlInpar.Add("insutype", frmReg.insuType);//险种类型
  556. joSetlInpar.Add("pub_hosp_rfom_flag", "");
  557. joSetlInpar.Add("exp_content11", "");
  558. if (Global.pat.isWorkInjury)
  559. {
  560. joSetlInpar.Add("SpecialType", "GGS");//险种类型
  561. }
  562. joSetlInpar.Add("minpacunt_drug_trac_cnt", Global.Set.minpacunt_drug_trac_cnt); //本次结算应上传最小包装追溯码数量
  563. joSetlInpar.Add("mcs_trac_cnt", Global.Set.mcs_trac_cnt); //本次结算应上传耗材追溯码数量
  564. joReg.Add("mdtrtinfo", joMdtrtinfo);
  565. joReg.Add("diseinfo", jaDiagnoses);
  566. joReg.Add("settlement", joSetlInpar);
  567. ((object[])o)[0] =0;
  568. ((object[])o)[1] = joReg.ToString();
  569. return;
  570. }
  571. else
  572. {
  573. ((object[])o)[0] = -1;
  574. ((object[])o)[1] = "收费员取消操作!";
  575. return;
  576. }
  577. }
  578. catch (Exception ex)
  579. {
  580. ((object[])o)[0] = -1;
  581. ((object[])o)[1] = "登记界面显示异常:" + ex.Message;
  582. return;
  583. }
  584. }
  585. [STAThread]
  586. public void showInPatRegisterForm(object o)
  587. {
  588. //调用服务获取门诊诊断信息
  589. string diagnoses;
  590. if (hIS.getPatDiagnoses(Global.pat, out diagnoses) != 0)
  591. {
  592. ((object[])o)[0] = -1;
  593. ((object[])o)[1] = JsonHelper.setExceptionJson(-1, "getPatDiagnoses", diagnoses).ToString();
  594. return;
  595. }
  596. JObject joHisRtnInfo = JObject.Parse(diagnoses);
  597. JObject joReg = new JObject();
  598. try
  599. {
  600. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  601. JArray jaDiagnoses = JArray.Parse(JsonHelper.getDestValue(joHisRtnInfo, "diseinfo"));
  602. string dscg_maindiag_code = "", dscg_maindiag_name = "";
  603. // 对诊断数组进行转换 转换下主要诊断
  604. JArray jaConvertedDiagnoses = new JArray();
  605. JArray jaInPatDiagnoses = new JArray();
  606. JArray jaOutPatDiagnoses = new JArray();
  607. for (int i = 0; i < jaDiagnoses.Count; i++)
  608. {
  609. string diag_type = JsonHelper.getDestValue((JObject)jaDiagnoses[i], "diag_type");
  610. switch (diag_type)
  611. {
  612. case "1":
  613. {
  614. jaDiagnoses[i]["diag_type_name"] = new JObject();
  615. jaDiagnoses[i]["diag_type_name"] = "西医主要诊断";
  616. break;
  617. }
  618. case "2":
  619. {
  620. jaDiagnoses[i]["diag_type_name"] = new JObject();
  621. jaDiagnoses[i]["diag_type_name"] = "西医其他诊断";
  622. break;
  623. }
  624. case "3":
  625. {
  626. jaDiagnoses[i]["diag_type_name"] = new JObject();
  627. jaDiagnoses[i]["diag_type_name"] = "中医主病诊断";
  628. break;
  629. }
  630. case "4":
  631. {
  632. jaDiagnoses[i]["diag_type_name"] = new JObject();
  633. jaDiagnoses[i]["diag_type_name"] = "中医主证诊断";
  634. break;
  635. }
  636. }
  637. if (jaDiagnoses[i]["diaTypeCode"].ToString() == "ADD") //ADD 入院 OPD 门诊
  638. {
  639. jaInPatDiagnoses.Add(jaDiagnoses[i]);
  640. }
  641. if (jaDiagnoses[i]["diaTypeCode"].ToString() == "OPD") //ADD 入院 OPD 门诊
  642. {
  643. jaOutPatDiagnoses.Add(jaDiagnoses[i]);
  644. }
  645. }
  646. if (jaInPatDiagnoses.Count > 0)
  647. {
  648. jaConvertedDiagnoses = (JArray)jaInPatDiagnoses.DeepClone();
  649. }
  650. else
  651. {
  652. jaConvertedDiagnoses = (JArray)jaOutPatDiagnoses.DeepClone();
  653. }
  654. for (int i = 0; i < jaConvertedDiagnoses.Count; i++)
  655. {
  656. jaConvertedDiagnoses[i]["diag_srt_no"] = i + 1;
  657. if (jaConvertedDiagnoses[i]["maindiag_flag"].ToString() == "1")
  658. {
  659. dscg_maindiag_code = jaConvertedDiagnoses[i]["diag_code"].ToString();
  660. dscg_maindiag_name = jaConvertedDiagnoses[i]["diag_name"].ToString();
  661. }
  662. }
  663. //登记面板实例
  664. OutpatientRegistration frmReg = new OutpatientRegistration();
  665. //frmReg.dblkcbxSettelmentWay.Enabled = false;
  666. DataTable dt = (DataTable)frmReg.dblkcbxInsuranceType.DataSource;
  667. int selectedIndex = 0;
  668. for (int i = 0; i < dt.Rows.Count; i++)
  669. {
  670. if (dt.Rows[i]["Code"].ToString() == Global.pat.insuType)
  671. {
  672. selectedIndex = i;
  673. frmReg.dblkcbxInsuranceType.Text = dt.Rows[i]["Name"].ToString();
  674. frmReg.insuType = dt.Rows[i]["Code"].ToString();
  675. }
  676. }
  677. DataTable dtMedType = (DataTable)frmReg.dblkcbxMedicalType.DataSource;
  678. for (int i = 0; i < dtMedType.Rows.Count; i++)
  679. {
  680. if (dtMedType.Rows[i]["Code"].ToString() == "21")
  681. {
  682. frmReg.dblkcbxMedicalType.Text = dtMedType.Rows[i]["Name"].ToString();
  683. frmReg.med_type = dtMedType.Rows[i]["Code"].ToString();
  684. }
  685. }
  686. frmReg.DtDiagnose = (DataTable)jaConvertedDiagnoses.ToObject(typeof(DataTable));
  687. //展示登记面板
  688. if (frmReg.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  689. {
  690. //如果日间手术,同时床位为空,则提示
  691. string bedNo = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_bed");
  692. if ((bedNo == "")&&(frmReg.med_type == "28"))
  693. {
  694. ((object[])o)[0] = -1;
  695. ((object[])o)[1] = "床位号为空!";
  696. return;
  697. }
  698. string diseCodg = "", diseName = "";
  699. diseCodg = frmReg.diseCodg;
  700. diseName = frmReg.diseName;
  701. JObject joMdtrtinfo = new JObject();
  702. joMdtrtinfo.Add("psn_no", Global.pat.psn_no); //人员编号
  703. joMdtrtinfo.Add("insutype", Global.pat.insuType); //险种类型
  704. joMdtrtinfo.Add("coner_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.coner_name")); //联系人姓名
  705. joMdtrtinfo.Add("tel", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.tel")); //联系电话
  706. joMdtrtinfo.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime")); //开始时间
  707. joMdtrtinfo.Add("mdtrt_cert_type", Global.pat.mdtrtcertType); //就诊凭证类型
  708. joMdtrtinfo.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO); //就诊凭证编号
  709. joMdtrtinfo.Add("med_type", frmReg.med_type); //医疗类别
  710. //string ipAdmNo = Utils.convertAdmDr(JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.ipt_no"));
  711. joMdtrtinfo.Add("ipt_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.ipt_no")); //住院号
  712. joMdtrtinfo.Add("medrcdno", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.medrcdno")); //病历号
  713. joMdtrtinfo.Add("atddr_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.atddr_no")); //主治医生编码
  714. joMdtrtinfo.Add("chfpdr_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.chfpdr_name")); //主诊医师姓名
  715. //joMdtrtinfo.Add("adm_diag_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_diag_dscr")); //入院诊断描述
  716. joMdtrtinfo.Add("adm_diag_dscr", "");
  717. joMdtrtinfo.Add("adm_dept_codg", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_codg")); //入院科室编码
  718. joMdtrtinfo.Add("adm_dept_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_name")); //入院科室名称
  719. joMdtrtinfo.Add("adm_bed", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_bed")); //入院床位
  720. joMdtrtinfo.Add("dscg_maindiag_code", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_code")); //住院主诊断代码
  721. joMdtrtinfo.Add("dscg_maindiag_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_name")); //住院主诊断名称
  722. //joMdtrtinfo.Add("dscg_maindiag_code", dscg_maindiag_code); //住院主诊断代码
  723. //joMdtrtinfo.Add("dscg_maindiag_name", dscg_maindiag_name); //住院主诊断名称
  724. joMdtrtinfo.Add("main_cond_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.main_cond_dscr")); //主要病情描述
  725. joMdtrtinfo.Add("dise_codg", diseCodg); //病种编码
  726. joMdtrtinfo.Add("dise_name", diseName); //病种名称
  727. joMdtrtinfo.Add("oprn_oprt_code", frmReg.oprn_oprt_code); //手术操作代码
  728. joMdtrtinfo.Add("oprn_oprt_name", frmReg.oprn_oprt_name); //手术操作名称
  729. joMdtrtinfo.Add("fpsc_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fpsc_no")); //计划生育服务证号
  730. joMdtrtinfo.Add("matn_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.matn_type")); //生育类别
  731. joMdtrtinfo.Add("birctrl_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_type")); //计划生育手术类别
  732. joMdtrtinfo.Add("latechb_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.latechb_flag")); //晚育标志
  733. //joMdtrtinfo.Add("geso_val", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.geso_val")); //孕周数
  734. //joMdtrtinfo.Add("fetts", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fetts")); //胎次
  735. //joMdtrtinfo.Add("fetus_cnt", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fetus_cnt")); //胎儿数
  736. //joMdtrtinfo.Add("pret_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.pret_flag")); //早产标志
  737. //joMdtrtinfo.Add("birctrl_matn_date", ""); //计划生育手术或生育日期 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_matn_date") 20230228医保中心校验传正确时间或空
  738. joMdtrtinfo.Add("dise_type_code", frmReg.dise_type_code); //病种类型
  739. joMdtrtinfo.Add("insuplc_admdvs", Global.pat.insuplc_admdvs); //参保地医保区划
  740. joMdtrtinfo.Add("mdtrtarea_admvs", Global.inf.areaCode); //就医地医保区划
  741. joReg.Add("mdtrtinfo", joMdtrtinfo);
  742. joReg.Add("diseinfo", jaConvertedDiagnoses);
  743. Global.pat.disCode = diseCodg;
  744. Global.pat.disName = diseName;
  745. Global.pat.medType = frmReg.med_type;
  746. if (Global.pat.isWorkInjury)
  747. {
  748. Global.pat.ExpContent = "GGS";
  749. }
  750. ((object[])o)[0] = 0;
  751. ((object[])o)[1] = joReg.ToString();
  752. return;
  753. }
  754. else
  755. {
  756. ((object[])o)[0] = -1;
  757. ((object[])o)[1] = "收费员取消操作!";
  758. return;
  759. }
  760. }
  761. catch (Exception ex)
  762. {
  763. ((object[])o)[0] = -1;
  764. ((object[])o)[1] = "登记界面显示异常:" + ex.Message;
  765. return;
  766. }
  767. }
  768. [STAThread]
  769. public void uploadFee(object o)
  770. {
  771. string outParam = "";
  772. object[] oArr = (object[])o;
  773. try
  774. {
  775. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  776. string funNO = oArr[1].ToString();
  777. int singleCount = int.Parse(oArr[2].ToString());
  778. PTMedicalInsurance.Forms.FeeUpload pb = new PTMedicalInsurance.Forms.FeeUpload(funNO, singleCount);
  779. pb.StartPosition = FormStartPosition.CenterScreen;
  780. if (pb.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  781. {
  782. ((object[])o)[0] = 0;
  783. ((object[])o)[3] = pb.outParam;
  784. }
  785. else
  786. {
  787. outParam = "收款员取消";
  788. ((object[])o)[0] = -1;
  789. ((object[])o)[3] = outParam;
  790. }
  791. }
  792. catch (Exception ex)
  793. {
  794. outParam = "uploadFee 异常:" + ex.Message;
  795. ((object[])o)[0] = -1;
  796. ((object[])o)[3] = outParam;
  797. o = oArr;
  798. return;
  799. }
  800. }
  801. [STAThread]
  802. public void showSettlementForm(object o)
  803. {
  804. string outParam = "";
  805. JObject joSettlement = JObject.Parse(((object[])o)[1].ToString());
  806. try
  807. {
  808. IntPtr hwnd = WinApi.GetWindowsHandle("prBrowser");
  809. SettlementInfo frmSettlment = new SettlementInfo(joSettlement);
  810. //相关信息转换到结算信息面板
  811. if (frmSettlment.ShowDialog(new WindowWrapper(hwnd)) == DialogResult.OK)
  812. {
  813. ((object[])o)[0] = 0;
  814. ((object[])o)[1] = outParam;
  815. }
  816. else
  817. {
  818. outParam = "收款员取消";
  819. ((object[])o)[0] = -1;
  820. ((object[])o)[1] = outParam;
  821. }
  822. }
  823. catch (Exception ex)
  824. {
  825. outParam = "showSettlementForm 异常:" + ex.Message;
  826. ((object[])o)[0] = -1;
  827. ((object[])o)[1] = outParam;
  828. }
  829. }
  830. [STAThread]
  831. public void Exception(object o)
  832. {
  833. try
  834. {
  835. //显示异常处理界面
  836. HandleException frmEX = new HandleException();
  837. frmEX.WindowState = FormWindowState.Maximized;
  838. frmEX.ShowDialog();
  839. }
  840. catch (Exception ex)
  841. {
  842. CallBack(ex.Message);
  843. }
  844. }
  845. [STAThread]
  846. public void CheckAndClearing(object o)
  847. {
  848. try
  849. {
  850. //显示对账界面
  851. Clearing frm = new Clearing();
  852. frm.WindowState = FormWindowState.Maximized;
  853. frm.ShowDialog();
  854. }
  855. catch (Exception ex)
  856. {
  857. CallBack(ex.Message);
  858. }
  859. }
  860. [STAThread]
  861. public void PrescribeCirculation(object o)
  862. {
  863. try
  864. {
  865. //显示处方上传
  866. PrescriptionCirculation PresCir = new PrescriptionCirculation("");
  867. //PresCir.WindowState = FormWindowState.Minimized;
  868. PresCir.ShowDialog();
  869. }
  870. catch (Exception ex)
  871. {
  872. CallBack(ex.Message);
  873. }
  874. }
  875. [STAThread]
  876. public void BasicData(object o)
  877. {
  878. try
  879. {
  880. //显示异常处理界面
  881. BasicData frm = new BasicData();
  882. frm.WindowState = FormWindowState.Maximized;
  883. frm.ShowDialog();
  884. }
  885. catch (Exception ex)
  886. {
  887. CallBack(ex.Message);
  888. }
  889. }
  890. [STAThread]
  891. public void CenterQuery(object o)
  892. {
  893. try
  894. {
  895. //显示异常处理界面
  896. CenterQuery frm = new CenterQuery();
  897. frm.WindowState = FormWindowState.Maximized;
  898. frm.ShowDialog();
  899. }
  900. catch (Exception ex)
  901. {
  902. CallBack(ex.Message);
  903. }
  904. }
  905. }
  906. public class WindowWrapper : System.Windows.Forms.IWin32Window
  907. {
  908. public WindowWrapper(IntPtr handle)
  909. {
  910. _hwnd = handle;
  911. }
  912. public IntPtr Handle
  913. {
  914. get { return _hwnd; }
  915. }
  916. private IntPtr _hwnd;
  917. }
  918. }