InsuBusiness.cs 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using PTMedicalInsurance.Common;
  7. using PTMedicalInsurance.Business;
  8. using System.Windows.Forms;
  9. using PTMedicalInsurance.Helper;
  10. using Newtonsoft.Json.Linq;
  11. using PTMedicalInsurance.Variables;
  12. using PTMedicalInsurance.Forms;
  13. using System.IO;
  14. using System.Reflection;
  15. using System.Data;
  16. using System.Threading;
  17. namespace PTMedicalInsurance
  18. {
  19. public class InsuBusiness : IInsuBusiness
  20. {
  21. //定义相关的变量
  22. private Patients patient;
  23. private Fees fee;
  24. private Settlements settlement;
  25. //json对象属性
  26. private JObject joInParam;
  27. private JArray jaSession ;
  28. private JArray jaParams;
  29. private JObject joParam;
  30. private JObject joInterface;
  31. //设置业务实例
  32. CenterBusiness cBus = new CenterBusiness();
  33. HisMainBusiness hBus = new HisMainBusiness();
  34. HisIrisServices hIS = new HisIrisServices();
  35. MIIrisServices mIS= new MIIrisServices();
  36. InvokeHelper invoker = new InvokeHelper();
  37. //
  38. private string businessType;
  39. public InsuBusiness()
  40. {
  41. Global.curEvt.path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
  42. ComputerInfo comp = new ComputerInfo();
  43. Global.curEvt.mac = comp.GetMAC();
  44. Global.curEvt.ip = comp.GetIP();
  45. Global.pat.insuplc_admdvs = "";//如果是NULL中心会报错
  46. }
  47. private int parseInparam(string inParam,out string errMsg)
  48. {
  49. errMsg = "";
  50. try
  51. {
  52. joInParam = JObject.Parse(inParam);
  53. jaSession = JArray.Parse(JsonHelper.getDestValue(joInParam, "session"));
  54. Global.curEvt.jaSession = jaSession;
  55. jaParams = JArray.Parse(JsonHelper.getDestValue(joInParam, "params"));
  56. joParam = JObject.FromObject(jaParams[0]);
  57. joInterface = JObject.Parse(JsonHelper.getDestValue(joInParam, "interfaceinfo"));
  58. businessType = JsonHelper.getDestValue(joInParam, "businessType");
  59. return 0;
  60. }
  61. catch (Exception ex)
  62. {
  63. errMsg = "parseInparam 解析入参异常:" + errMsg;
  64. Global.writeLog(errMsg);
  65. return -1;
  66. }
  67. }
  68. /// <summary>
  69. /// 初始化
  70. /// </summary>
  71. /// <param name="InParam"></param>
  72. /// <returns></returns>
  73. public string Init(string InParam)
  74. {
  75. string errMsg, rtnResult ="";
  76. JObject joRtn = new JObject();
  77. try
  78. {
  79. if (hBus.initEnvironment(InParam, out errMsg) != 0)
  80. {
  81. return JsonHelper.setExceptionJson(-100, "initEnvironment 失败", errMsg).ToString();
  82. }
  83. else
  84. {
  85. if (mIS.isSigned(ref Global.curEvt.signno) != true)
  86. {
  87. //签到
  88. if (cBus.signIn(out joRtn) != 0)
  89. {
  90. rtnResult = JsonHelper.setExceptionJson(-1, "签到异常", (string)joRtn["err_msg"]).ToString();
  91. return rtnResult;
  92. }
  93. else
  94. {
  95. Global.curEvt.signno = JsonHelper.getDestValue(joRtn, "output.signinoutb.sign_no");
  96. //插入签到表
  97. if (mIS.saveSignRecord(Global.curEvt.signno, out errMsg) != 0)
  98. {
  99. rtnResult = JsonHelper.setIrisReturnValue(0, "中心签到成功但插入签到表失败:" + errMsg, null).ToString();
  100. }
  101. else
  102. {
  103. rtnResult = JsonHelper.setIrisReturnValue(0, "签到成功", joRtn).ToString();
  104. }
  105. }
  106. }
  107. else
  108. {
  109. rtnResult = JsonHelper.setIrisReturnValue(0, "初始化成功!", null).ToString();
  110. }
  111. return rtnResult;
  112. }
  113. }
  114. catch (Exception ex)
  115. {
  116. rtnResult = JsonHelper.setExceptionJson(-100, "Init 异常", ex.Message).ToString();
  117. return rtnResult;
  118. }
  119. finally
  120. {
  121. Global.writeLog("初始化结果:" + rtnResult);
  122. }
  123. }
  124. private int init(string inParam, out string outParam)
  125. {
  126. string errMsg;
  127. outParam = "";
  128. try
  129. {
  130. //BS架构调用方式问题,每次调用都需要重新初始化
  131. JObject joInitRtn = JObject.Parse(Init(inParam));
  132. if (JsonHelper.parseIrisRtnValue(joInitRtn, out errMsg) != 0)
  133. {
  134. outParam = JsonHelper.setExceptionJson(-100, "GetPatientInfo(读卡)", "初始化失败:" + errMsg).ToString();
  135. return -1;
  136. }
  137. else
  138. {
  139. return 0;
  140. }
  141. }
  142. catch (Exception ex)
  143. {
  144. outParam = JsonHelper.setExceptionJson(-100, "GetPatientInfo(读卡)", "初始化异常:" + ex.Message).ToString();
  145. return -1;
  146. }
  147. }
  148. /// <summary>
  149. /// 获取患者信息
  150. /// </summary>
  151. /// <param name="InParam"></param>
  152. /// <returns></returns>
  153. public string GetPatientInfo(string InParam)
  154. {
  155. Global.writeLog("GetPatientInfo入参:" + JsonHelper.Compress(InParam));
  156. //设置返回值,错误信息
  157. int errCode;
  158. string errMsg, rtnResult = "",outParam;
  159. //BS架构调用方式问题,每次调用都需要重新初始化
  160. if (init(InParam,out outParam)!= 0)
  161. {
  162. rtnResult = outParam;
  163. return rtnResult;
  164. }
  165. JObject joInParam = JObject.Parse(InParam);
  166. string businessType = JsonHelper.getDestValue(joInParam,"businessType");
  167. try
  168. {
  169. switch (businessType)
  170. {
  171. case "M1"://门诊读卡
  172. {
  173. //打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息
  174. if (hBus.readCard(out outParam) != 0)
  175. {
  176. rtnResult = JsonHelper.setExceptionJson(-100, "读卡失败!", outParam).ToString();
  177. }
  178. else
  179. {
  180. //展示患者信息界面
  181. if (hBus.showPatInfo(outParam, out outParam) != 0)
  182. {
  183. rtnResult = outParam;
  184. }
  185. else
  186. {
  187. rtnResult = outParam;
  188. }
  189. }
  190. break;
  191. }
  192. case "Z1"://住院读卡
  193. {
  194. //打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息
  195. if (hBus.readCard(out outParam) != 0)
  196. {
  197. rtnResult = JsonHelper.setExceptionJson(-100, "读卡失败!", outParam).ToString();
  198. }
  199. else
  200. {
  201. //展示患者信息界面
  202. if (hBus.showPatInfo(outParam, out outParam) != 0)
  203. {
  204. rtnResult = outParam;
  205. }
  206. else
  207. {
  208. rtnResult = JsonHelper.setIrisReturnValue(0,"",JObject.Parse(outParam)).ToString();
  209. }
  210. }
  211. break;
  212. }
  213. }
  214. return rtnResult;
  215. }
  216. catch (Exception ex)
  217. {
  218. rtnResult = JsonHelper.setIrisReturnValue(-1 , "GetPatientInfo发生异常;" + ex.Message,null).ToString();
  219. return rtnResult;
  220. }
  221. finally
  222. {
  223. Global.writeLog("GetPatientInfo出参:" + JsonHelper.Compress(rtnResult));
  224. }
  225. }
  226. /// <summary>
  227. /// 登记
  228. /// </summary>
  229. /// <param name="InParam"></param>
  230. /// <returns></returns>
  231. public string Register(string InParam)
  232. {
  233. Global.writeLog("Register 入参:" + JsonHelper.Compress(InParam));
  234. //设置返回值,错误信息
  235. string errMsg, rtnResult = "", outParam;
  236. try
  237. {
  238. //解析入参
  239. if (parseInparam(InParam, out errMsg) != 0)
  240. {
  241. rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString();
  242. return rtnResult;
  243. }
  244. //BS架构调用方式问题,每次调用都需要重新初始化
  245. if (init(InParam, out outParam) != 0)
  246. {
  247. rtnResult = outParam;
  248. return rtnResult;
  249. }
  250. //获取pat
  251. hBus.GetRegPatInfo(businessType, joInParam, out Global.pat);
  252. //如果患者异地的则就医地需要该为369900
  253. hBus.SetAreaCode();
  254. switch (businessType)
  255. {
  256. case "M2"://门诊登记
  257. {
  258. break;
  259. }
  260. case "M2C"://门诊登记撤销
  261. {
  262. break;
  263. }
  264. case "Z0"://住院修改
  265. {
  266. break;
  267. }
  268. case "Z2"://入院登记
  269. {
  270. string regInParam = "";
  271. //显示登记面板
  272. if (hBus.showInPatRegisterForm( out regInParam) == 0)
  273. {
  274. JObject joRegIn = JObject.Parse(JsonHelper.setCenterInpar("2401", regInParam));
  275. //上传给中心
  276. JObject joRegOut = invoker.invokeCenterService("2401", joRegIn);
  277. //将中心返回的结果返回HIS,调用HIS服务进行保存
  278. if (JsonHelper.parseCenterRtnValue(joRegOut,out errMsg) == 0)
  279. {
  280. joRegOut.Add("validflag",1);
  281. joRegOut.Add("regstate", 1);
  282. joRegOut.Add("type", 1);
  283. Global.pat.mdtrtID = JsonHelper.getDestValue(joRegOut, "output.result.mdtrt_id");
  284. //插入患者本次就诊用的参保信息
  285. if (hBus.insertPatCurInsuInfo(JsonHelper.getDestValue(joParam, "patientInfo"), out outParam) != 0)
  286. {
  287. if (DialogResult.Yes == MessageBox.Show(outParam, " 是否继续? ", MessageBoxButtons.YesNo))
  288. {
  289. }
  290. else
  291. {
  292. rtnResult = JsonHelper.setExceptionJson(-1, "插入患者本次就诊用的参保信息,请联系管理员!", outParam).ToString();
  293. return rtnResult;
  294. }
  295. }
  296. //插入医保平台
  297. if (mIS.saveInpatRegisterInfo(joRegIn, joRegOut, out outParam) != 0)
  298. {
  299. rtnResult = JsonHelper.setExceptionJson(-1, "云平台保存登记信息", outParam).ToString();
  300. return rtnResult;
  301. }
  302. //返回登记信息,插入HIS
  303. if (hIS.returnRegisterInfo(joRegIn, joRegOut, out outParam) != 0)
  304. {
  305. rtnResult = JsonHelper.setExceptionJson(-1, "HIS平台保存登记信息", outParam).ToString();
  306. return rtnResult;
  307. }
  308. else
  309. {
  310. rtnResult = JsonHelper.setIrisReturnValue(0, "登记成功", null).ToString();
  311. return rtnResult;
  312. }
  313. }
  314. else
  315. {
  316. rtnResult = JsonHelper.setExceptionJson(-1, "展示登记界面", errMsg).ToString();
  317. return rtnResult;
  318. }
  319. }
  320. else
  321. {
  322. rtnResult = JsonHelper.setExceptionJson(-1, "展示登记界面", regInParam).ToString();
  323. return rtnResult;
  324. }
  325. }
  326. case "Z2C"://入院登记取消
  327. {
  328. if (DialogResult.Yes == MessageBox.Show("即将进行取消中心医保登记,确定继续吗?", " 询问? ", MessageBoxButtons.YesNo))
  329. {
  330. }
  331. else
  332. {
  333. rtnResult = JsonHelper.setExceptionJson(-1, "收费员撤销取消登记操作!", outParam).ToString();
  334. return rtnResult;
  335. }
  336. //取消中心登记
  337. if (cBus.cancleRegister("2404", out outParam) != 0)
  338. {
  339. rtnResult = JsonHelper.setExceptionJson(-1, "中心取消登记失败,", outParam).ToString();
  340. return rtnResult;
  341. }
  342. //取消医保平台登记
  343. if (mIS.cancleRegister(1, out outParam) != 0)
  344. {
  345. rtnResult = JsonHelper.setExceptionJson(-1, "中心取消登记成功,但云医保平台取消失败,", outParam).ToString();
  346. return rtnResult;
  347. }
  348. //取消HIS 登记
  349. if (hIS.cancleRegister( out outParam) != 0)
  350. {
  351. rtnResult = JsonHelper.setExceptionJson(-1, "中心和云医保平台取消登记成功,但HIS取消失败,", outParam).ToString();
  352. return rtnResult;
  353. }
  354. else
  355. {
  356. rtnResult = JsonHelper.setIrisReturnValue(0, "取消医保登记成功", null).ToString();
  357. return rtnResult;
  358. }
  359. }
  360. case "Z6"://出院登记
  361. {
  362. break;
  363. }
  364. case "Z6C"://出院登记取消
  365. {
  366. if (cBus.cancleRegister("2405", out errMsg) != 0)
  367. {
  368. rtnResult = JsonHelper.setExceptionJson(-1, "取消出院登记", errMsg).ToString();
  369. return rtnResult;
  370. }
  371. else
  372. {
  373. rtnResult = JsonHelper.setIrisReturnValue(0, "取消出院登记成功", null).ToString();
  374. return rtnResult;
  375. }
  376. break;
  377. }
  378. default:
  379. {
  380. rtnResult = JsonHelper.setExceptionJson(-1, "Register 交易", "传入的业务编码不对!").ToString();
  381. return rtnResult;
  382. }
  383. }
  384. }
  385. catch (Exception ex)
  386. {
  387. rtnResult = JsonHelper.setIrisReturnValue(-1, "Register 发生异常;" + ex.Message, null).ToString();
  388. return rtnResult;
  389. }
  390. finally
  391. {
  392. Global.writeLog("Register 出参:" + JsonHelper.Compress(rtnResult));
  393. }
  394. return "";
  395. }
  396. /// <summary>
  397. /// 费用上传
  398. /// </summary>
  399. /// <param name="InParam"></param>
  400. /// <returns></returns>
  401. public string FeeUpload(string InParam)
  402. {
  403. Global.writeLog("FeeUpload 入参:" + JsonHelper.Compress(InParam));
  404. //设置返回值,错误信息
  405. int errCode;
  406. string errMsg, rtnResult = "", outParam;
  407. try
  408. {
  409. //解析入参
  410. if (parseInparam(InParam, out errMsg) != 0)
  411. {
  412. rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString();
  413. return rtnResult;
  414. }
  415. //BS架构调用方式问题,每次调用都需要重新初始化
  416. if (init(InParam, out outParam) != 0)
  417. {
  418. rtnResult = outParam;
  419. return rtnResult;
  420. }
  421. //获取pat
  422. hBus.GetFeeHisInfo(businessType, joInParam, out Global.pat);
  423. //如果患者异地的则就医地需要该为369900
  424. hBus.SetAreaCode();
  425. switch (businessType)
  426. {
  427. case "M3"://门诊费用上传
  428. {
  429. break;
  430. }
  431. case "M3C"://门诊费用撤销
  432. {
  433. break;
  434. }
  435. case "Z3"://入院费用上传
  436. {
  437. //从医保平台获取患者详细的医保登记信息
  438. if (mIS.queryRegisterInfo(1, out outParam) != 0)
  439. {
  440. rtnResult = JsonHelper.setExceptionJson(-1, "查询患者云平台登记信息", outParam).ToString();
  441. return rtnResult;
  442. }
  443. JObject joReg = JObject.Parse(outParam);
  444. Global.pat.medType = JsonHelper.getDestValue(joReg, "data.MedicalType");
  445. Global.pat.insuType = JsonHelper.getDestValue(joReg, "data.InsuType");
  446. //先取消中心费用传送
  447. cBus.cancleFeeUpload("2302", out errMsg);
  448. //再删除医保传送表的数据
  449. mIS.deleteFee( out errMsg);
  450. //开始进行费用传送
  451. //调用HIS费用查询信息
  452. if (hIS.getHisFee(Global.pat, out outParam) != 0)
  453. {
  454. rtnResult = JsonHelper.setExceptionJson(-1, "获取HIS费用", outParam).ToString();
  455. return rtnResult;
  456. }
  457. //调用医保平台转换
  458. JObject joHisFee = JObject.Parse(outParam);
  459. if (mIS.convertHisFeeWithInsuCode(joHisFee,out outParam) != 0)
  460. {
  461. rtnResult = JsonHelper.setExceptionJson(-1, "转换HIS费用", outParam).ToString();
  462. return rtnResult;
  463. }
  464. JArray jaFeeDetail = JArray.Parse(JsonHelper.getDestValue(JObject.Parse(outParam), "data"));
  465. //按指定条数分割后上传,保存,更新
  466. if (hBus.uploadFeeToCenter("2301",10, jaFeeDetail, out outParam) != 0)
  467. {
  468. rtnResult = JsonHelper.setExceptionJson(-1, "上传费用", outParam).ToString();
  469. return rtnResult;
  470. }
  471. else
  472. {
  473. rtnResult = JsonHelper.setIrisReturnValue(0, "住院费用上传成功", null).ToString();
  474. return rtnResult;
  475. }
  476. }
  477. case "Z3C"://住院费用上传取消
  478. {
  479. if (cBus.cancleFeeUpload("2302", out errMsg) != 0)
  480. {
  481. rtnResult = JsonHelper.setExceptionJson(-1, "取消中心费用", errMsg).ToString();
  482. return rtnResult;
  483. }
  484. if (mIS.deleteFee( out errMsg) != 0)
  485. {
  486. rtnResult = JsonHelper.setExceptionJson(-1, "删除医保平台费用", errMsg).ToString();
  487. return rtnResult;
  488. }
  489. else
  490. {
  491. rtnResult = JsonHelper.setIrisReturnValue(0, "住院费用上传取消成功", null).ToString();
  492. return rtnResult;
  493. }
  494. }
  495. default:
  496. {
  497. rtnResult = JsonHelper.setExceptionJson(-1, "FeeUpload 交易", "传入的业务编码不对!").ToString();
  498. return rtnResult;
  499. }
  500. }
  501. return rtnResult;
  502. }
  503. catch (Exception ex)
  504. {
  505. rtnResult = JsonHelper.setExceptionJson(-1, "FeeUpload 交易", ex.Message).ToString();
  506. return rtnResult;
  507. }
  508. finally
  509. {
  510. Global.writeLog("FeeUpload 出参:" + JsonHelper.Compress(rtnResult));
  511. }
  512. }
  513. /// <summary>
  514. /// 结算
  515. /// </summary>
  516. /// <param name="InParam"></param>
  517. /// <returns></returns>
  518. public string Settlement(string InParam)
  519. {
  520. Global.writeLog("Settlement 入参:" + JsonHelper.Compress(InParam));
  521. //设置返回值,错误信息
  522. string errMsg, rtnResult = "", outParam;
  523. try
  524. {
  525. //解析入参
  526. if (parseInparam(InParam, out errMsg) != 0)
  527. {
  528. rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString();
  529. return rtnResult;
  530. }
  531. //BS架构调用方式问题,每次调用都需要重新初始化
  532. if (init(InParam, out outParam) != 0)
  533. {
  534. rtnResult = outParam;
  535. return rtnResult;
  536. }
  537. //获取pat
  538. hBus.GetSettlementHisInfo(businessType, joInParam, out Global.pat);
  539. //如果患者异地的则就医地需要该为369900
  540. hBus.SetAreaCode();
  541. switch (businessType)
  542. {
  543. case "M4"://门诊预结算
  544. {
  545. OutpatientRegistration frmReg = new OutpatientRegistration();
  546. if (frmReg.ShowDialog() == DialogResult.OK)
  547. {
  548. rtnResult = "调用结束";
  549. }
  550. break;
  551. }
  552. case "M4C"://门诊预结算撤销
  553. {
  554. break;
  555. }
  556. case "M5"://门诊结算
  557. {
  558. string patInfo ="";
  559. //打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息
  560. if (hBus.readCard(out outParam) != 0)
  561. {
  562. rtnResult = JsonHelper.setExceptionJson(-100, "读卡失败!", outParam).ToString();
  563. return rtnResult;
  564. }
  565. else
  566. {
  567. JObject joPatInfo = JObject.Parse(outParam);
  568. if (hBus.checkName(JsonHelper.getDestValue(joPatInfo, "output.baseinfo.psn_name"), out errMsg) != 0)
  569. {
  570. rtnResult = JsonHelper.setExceptionJson(-1, "checkName", errMsg).ToString();
  571. return rtnResult;
  572. }
  573. patInfo = outParam;
  574. //展示患者信息界面
  575. if (hBus.showPatInfo(patInfo, out outParam) != 0)
  576. {
  577. rtnResult = outParam;
  578. return rtnResult;
  579. }
  580. }
  581. //患者信息赋值给全局变量
  582. patInfo = outParam;
  583. if (hBus.setGlobalPatAfaterShowPatInfo(patInfo, out errMsg) != 0)
  584. {
  585. rtnResult = JsonHelper.setExceptionJson(-1, "setGlobalPatAfaterShowPatInfo", errMsg).ToString();
  586. return rtnResult;
  587. }
  588. //如果患者异地的则就医地需要该为 369900
  589. hBus.SetAreaCode();
  590. //显示登记面板
  591. if (hBus.showOutPatRegisterForm(out outParam) != 0)
  592. {
  593. rtnResult = JsonHelper.setExceptionJson(-1, "显示登记面板", outParam).ToString();
  594. return rtnResult;
  595. }
  596. JObject joReg = JObject.Parse(outParam);
  597. //医保挂号
  598. JObject jo2201Inpar = JObject.Parse(JsonHelper.getDestProperty(joReg, "data"));
  599. jo2201Inpar = JObject.Parse(JsonHelper.setCenterInpar("2201", jo2201Inpar));
  600. //此处先取到就诊信息上传的入参,只要挂号成功就保存到云HIS后台(保存后台需要用到2203入参)
  601. JObject jo2203Inpar = new JObject();
  602. jo2203Inpar.Add("mdtrtinfo", JObject.Parse(JsonHelper.getDestValue(joReg, "mdtrtinfo")));
  603. jo2203Inpar.Add("diseinfo",JArray.Parse(JsonHelper.getDestValue(joReg, "diseinfo")));
  604. jo2203Inpar = JObject.Parse(JsonHelper.setCenterInpar("2203", jo2203Inpar));
  605. JObject jo2201Rtn = invoker.invokeCenterService("2201", jo2201Inpar);
  606. if (JsonHelper.parseCenterRtnValue(jo2201Rtn, out errMsg) != 0)
  607. {
  608. rtnResult = JsonHelper.setExceptionJson(-1, "医保挂号", errMsg).ToString();
  609. return rtnResult;
  610. }
  611. else
  612. {
  613. Global.pat.mdtrtID = JsonHelper.getDestValue(jo2201Rtn, "output.data.mdtrt_id");
  614. //插入患者本次就诊用的参保信息
  615. if (hBus.insertPatCurInsuInfo(patInfo, out outParam) != 0)
  616. {
  617. if (DialogResult.Yes == MessageBox.Show(outParam, " 是否继续? ", MessageBoxButtons.YesNo))
  618. {
  619. }
  620. else
  621. {
  622. rtnResult = JsonHelper.setExceptionJson(-1, "插入患者本次就诊用的参保信息,请联系管理员!是否继续?", outParam).ToString();
  623. return rtnResult;
  624. }
  625. }
  626. jo2203Inpar["input"]["mdtrtinfo"]["mdtrt_id"] = Global.pat.mdtrtID;
  627. //jo2203Inpar["input"]["mdtrtinfo"]["dise_codg"] = "M03600";
  628. //jo2203Inpar["input"]["mdtrtinfo"]["dise_name"] = "青光眼";
  629. //插入云医保平台
  630. jo2201Rtn.Add("validflag", 1);
  631. jo2201Rtn.Add("regstate", 1);
  632. jo2201Rtn.Add("type", 3);
  633. if (mIS.saveOutpatRegisterInfo(jo2201Inpar, jo2201Rtn,jo2203Inpar ,out errMsg) != 0)
  634. {
  635. rtnResult = JsonHelper.setExceptionJson(-1, "中心登记成功但医保平台保存失败,请联系管理员!", errMsg).ToString();
  636. return rtnResult;
  637. }
  638. }
  639. //门诊就诊信息上传
  640. JObject jo2203Rtn = invoker.invokeCenterService("2203",jo2203Inpar );
  641. if (JsonHelper.parseCenterRtnValue(jo2203Rtn, out errMsg) != 0)
  642. {
  643. rtnResult = JsonHelper.setExceptionJson(-1, "门诊就诊信息上传", errMsg).ToString();
  644. return rtnResult;
  645. }
  646. //费用上传
  647. if (hBus.uploadFee("2204", 50, out outParam) != 0)
  648. {
  649. rtnResult = JsonHelper.setExceptionJson(-1, "费用上传", outParam).ToString();
  650. return rtnResult;
  651. }
  652. //预结算
  653. //调用IRIS获取医保各项金额
  654. if (mIS.getSumFee(out outParam) != 0)
  655. {
  656. rtnResult = JsonHelper.setExceptionJson(-1, "获取医保费用各项汇总金额", outParam).ToString();
  657. return rtnResult;
  658. }
  659. JObject joSumFee = JObject.Parse(outParam);
  660. JObject joSettlement = JObject.Parse(JsonHelper.getDestValue(joReg, "settlement"));
  661. //修改joSettlement的就诊ID ,总金额等
  662. joSettlement["mdtrt_id"] = Global.pat.mdtrtID;
  663. joSettlement["medfee_sumamt"] = JsonHelper.getDestValue(joSumFee, "data.Sumamt");
  664. if (hBus.preSettlement_OutPat(joSettlement, out outParam) != 0)
  665. {
  666. rtnResult = JsonHelper.setExceptionJson(-1, "结算信息展示", outParam).ToString();
  667. return rtnResult;
  668. }
  669. //结算
  670. JObject joData = new JObject();
  671. joData.Add("data",joSettlement);
  672. JObject joRtn = invoker.invokeCenterService("2207", JsonHelper.setCenterInpar("2207", joData));
  673. if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
  674. {
  675. rtnResult = JsonHelper.setExceptionJson(-1, "结算失败", errMsg).ToString();
  676. return rtnResult;
  677. }
  678. else
  679. {
  680. Global.pat.admType = 1;
  681. //返回给云医保平台结算信息
  682. if (mIS.saveSettlement(joRtn, out errMsg) != 0)
  683. {
  684. rtnResult = JsonHelper.setExceptionJson(-1, "结算成功,但云医保平台保存失败", errMsg).ToString();
  685. return rtnResult;
  686. }
  687. //返回给云医保平台结算明细信息
  688. if (mIS.saveSettlementDetail(joRtn, out errMsg) != 0)
  689. {
  690. rtnResult = JsonHelper.setExceptionJson(-1, "云医保平台保存结算明细失败", errMsg).ToString();
  691. Global.writeLog(rtnResult);
  692. MessageBox.Show(errMsg);
  693. //return rtnResult;
  694. }
  695. //返回给HIS
  696. JObject joSetlinfo = JObject.Parse(JsonHelper.getDestValue(joRtn, "output.setlinfo"));
  697. if (hIS.returnOutpatSettlementInfo(joSettlement, joSetlinfo, out outParam) != 0)
  698. {
  699. rtnResult = JsonHelper.setExceptionJson(-1, "返回结算信息给HIS", outParam).ToString();
  700. return rtnResult;
  701. }
  702. else
  703. {
  704. JObject joHisServieRtn = JObject.Parse(outParam);
  705. hBus.returnToFrontEndAfterSettlement(joRtn, joHisServieRtn, out outParam);
  706. rtnResult = JsonHelper.setIrisReturnValue(0, "结算成功", JObject.Parse(outParam)).ToString();
  707. return rtnResult;
  708. }
  709. }
  710. }
  711. case "M5C"://门诊结算撤销
  712. {
  713. //退中心结算
  714. if (cBus.cancleSettlement("2208", out outParam) != 0)
  715. {
  716. rtnResult = JsonHelper.setExceptionJson(-1, "取消中心结算", outParam).ToString();
  717. return rtnResult;
  718. }
  719. //退云医保平台结算
  720. if (mIS.cancleSettlement(out outParam) != 0)
  721. {
  722. rtnResult = JsonHelper.setExceptionJson(-1, "取消平台结算信息", outParam).ToString();
  723. //return rtnResult;
  724. }
  725. //中心取消传送
  726. if (cBus.cancleFeeUpload("2205", out errMsg) != 0)
  727. {
  728. rtnResult = JsonHelper.setExceptionJson(-1, "取消中心费用", errMsg).ToString();
  729. return rtnResult;
  730. }
  731. //云平台取消传送
  732. if (mIS.deleteFee(out errMsg) != 0)
  733. {
  734. rtnResult = JsonHelper.setExceptionJson(-1, "删除医保平台费用", errMsg).ToString();
  735. return rtnResult;
  736. }
  737. //取消中心登记
  738. if (cBus.cancleRegister("2202", out outParam) != 0)
  739. {
  740. rtnResult = JsonHelper.setExceptionJson(-1, "中心取消登记失败,", outParam).ToString();
  741. return rtnResult;
  742. }
  743. //取消医保平台登记
  744. if (mIS.cancleRegister(3, out outParam) != 0)
  745. {
  746. rtnResult = JsonHelper.setExceptionJson(-1, "中心取消登记成功,但云医保平台取消失败,", outParam).ToString();
  747. return rtnResult;
  748. }
  749. //退HIS结算
  750. if (hIS.cancleSettlementInfo(joParam, out outParam) != 0)
  751. {
  752. rtnResult = JsonHelper.setExceptionJson(-1, "取消HIS结算信息", outParam).ToString();
  753. return rtnResult;
  754. }
  755. else
  756. {
  757. rtnResult = JsonHelper.setIrisReturnValue(0, "取消结算成功", null).ToString();
  758. return rtnResult;
  759. }
  760. }
  761. case "Z4"://住院预结算
  762. {
  763. JObject joSettle = new JObject();
  764. if (hBus.preSettlement("2303",out joSettle, out outParam) != 0)
  765. {
  766. rtnResult = JsonHelper.setExceptionJson(-1, "结算信息展示", outParam).ToString();
  767. return rtnResult;
  768. }
  769. else
  770. {
  771. rtnResult = JsonHelper.setIrisReturnValue(0, "预结算成功", null).ToString();
  772. return rtnResult;
  773. }
  774. }
  775. case "Z4C"://住院预结算撤销
  776. {
  777. rtnResult = JsonHelper.setExceptionJson(-100, "该接口不支持预结算取消!", null).ToString();
  778. return rtnResult;
  779. }
  780. case "Z5"://住院结算
  781. {
  782. JObject joPreSetOutpar ;
  783. if (hBus.preSettlement("2303",out joPreSetOutpar, out outParam) != 0)
  784. {
  785. rtnResult = JsonHelper.setExceptionJson(-1, "结算信息展示", outParam).ToString();
  786. return rtnResult;
  787. }
  788. else
  789. {
  790. JObject joSettlement = JObject.Parse(JsonHelper.getDestValue(joPreSetOutpar, "Settlement"));
  791. joSettlement.Add("data",joSettlement);
  792. //出院登记
  793. JObject joDischargeRegister = JObject.Parse(JsonHelper.getDestValue(joPreSetOutpar, "DischargeRegister"));
  794. JObject jo2402Rtn = invoker.invokeCenterService("2402", JsonHelper.setCenterInpar("2402", joDischargeRegister));
  795. if (JsonHelper.parseCenterRtnValue(jo2402Rtn, out errMsg) != 0)
  796. {
  797. rtnResult = JsonHelper.setExceptionJson(-1, "结算失败", errMsg).ToString();
  798. return rtnResult;
  799. }
  800. //验密(南昌不需要)
  801. //hBus.readCard(out outParam)
  802. //正式结算
  803. JObject jo2304Rtn = invoker.invokeCenterService("2304",JsonHelper.setCenterInpar("2304",joSettlement));
  804. if (JsonHelper.parseCenterRtnValue(jo2304Rtn, out errMsg) != 0)
  805. {
  806. rtnResult = JsonHelper.setExceptionJson(-1, "结算失败", errMsg).ToString();
  807. cBus.cancleRegister("2405", out errMsg);
  808. return rtnResult;
  809. }
  810. else
  811. {
  812. Global.pat.admType = 2;
  813. //返回给云医保平台结算信息
  814. if (mIS.saveSettlement(jo2304Rtn, out errMsg) != 0)
  815. {
  816. rtnResult = JsonHelper.setExceptionJson(-1, "结算成功,但云医保平台保存失败", errMsg).ToString();
  817. return rtnResult;
  818. }
  819. //返回给云医保平台结算明细信息
  820. if (mIS.saveSettlementDetail(jo2304Rtn, out errMsg) != 0)
  821. {
  822. rtnResult = JsonHelper.setExceptionJson(-1, "云医保平台保存结算明细失败", errMsg).ToString();
  823. Global.writeLog(rtnResult);
  824. MessageBox.Show(errMsg);
  825. }
  826. //返回给HIS
  827. JObject joSetlinfo = JObject.Parse(JsonHelper.getDestValue(jo2304Rtn, "output.setlinfo"));
  828. if (hIS.returnInpatSettlementInfo(joParam, joSetlinfo, out outParam) != 0)
  829. {
  830. rtnResult = JsonHelper.setExceptionJson(-1, "返回结算信息给HIS", outParam).ToString();
  831. return rtnResult;
  832. }
  833. else
  834. {
  835. //返回给前端
  836. JObject joHisServieRtn = JObject.Parse(outParam);
  837. hBus.returnToFrontEndAfterSettlement(jo2304Rtn, joHisServieRtn, out outParam);
  838. rtnResult = JsonHelper.setIrisReturnValue(0, "结算成功", JObject.Parse(outParam)).ToString();
  839. return rtnResult;
  840. }
  841. }
  842. }
  843. }
  844. case "Z5C"://住院结算撤销
  845. {
  846. //取消中心结算信息
  847. if (cBus.cancleSettlement("2305", out outParam) != 0)
  848. {
  849. rtnResult = JsonHelper.setExceptionJson(-1, "取消中心结算信息失败!", outParam).ToString();
  850. return rtnResult;
  851. }
  852. else
  853. {
  854. //取消平台结算信息
  855. if (mIS.cancleSettlement(out outParam) != 0)
  856. {
  857. rtnResult = JsonHelper.setExceptionJson(-1, "中心结算取消成功,医保平台结算信息取消失败!", outParam).ToString();
  858. return rtnResult;
  859. }
  860. //取消HIS医保结算信息
  861. if (hIS.cancleSettlementInfo(joParam, out outParam) != 0)
  862. {
  863. rtnResult = JsonHelper.setExceptionJson(-1, "中心跟医保平台结算取消成功, 取消HIS结算信息失败!", outParam).ToString();
  864. return rtnResult;
  865. }
  866. //取消出院登记
  867. if (cBus.cancleRegister("2405", out outParam) != 0)
  868. {
  869. rtnResult = JsonHelper.setExceptionJson(0, "中心,医保平台及HIS结算信息取消成功,取消出院登记失败!请手工取消出院登记!", outParam).ToString();
  870. return rtnResult;
  871. }
  872. rtnResult = JsonHelper.setIrisReturnValue(0, "取消结算成功", null).ToString();
  873. return rtnResult;
  874. }
  875. }
  876. default:
  877. {
  878. rtnResult = JsonHelper.setExceptionJson(-1, "Settlement 交易", "传入的业务编码不对!").ToString();
  879. return rtnResult;
  880. }
  881. }
  882. return rtnResult;
  883. }
  884. catch (Exception ex)
  885. {
  886. rtnResult = JsonHelper.setExceptionJson(-1, "Settlement 交易", ex.Message).ToString();
  887. return rtnResult;
  888. }
  889. finally
  890. {
  891. Global.writeLog("Settlement 出参:" + JsonHelper.Compress(rtnResult));
  892. }
  893. }
  894. /// <summary>
  895. /// 辅助交易
  896. /// </summary>
  897. /// <param name="InParam"></param>
  898. /// <returns></returns>
  899. //[STAThread]
  900. //public void print(JObject joInParam)
  901. //{
  902. // //显示打印界面
  903. // SettlementChecklist frmSettlList;
  904. // string insuAdmObj = JsonHelper.getDestValue(joInParam, "insuAdmObj");
  905. // if (insuAdmObj == "")
  906. // {
  907. // frmSettlList = new SettlementChecklist();
  908. // }
  909. // else
  910. // {
  911. // JObject joInsuAdmObj = JObject.Parse(insuAdmObj);
  912. // frmSettlList = new SettlementChecklist(joInsuAdmObj);
  913. // }
  914. // if (frmSettlList.ShowDialog() == DialogResult.OK)
  915. // {
  916. // };
  917. //}
  918. //[STAThread]
  919. public string AgentFun(string InParam)
  920. {
  921. Global.writeLog("AgentFun 入参:" + JsonHelper.Compress(InParam));
  922. //设置返回值,错误信息
  923. int errCode;
  924. string errMsg, rtnResult = "", outParam;
  925. try
  926. {
  927. //解析入参
  928. if (parseInparam(InParam, out errMsg) != 0)
  929. {
  930. rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString();
  931. return rtnResult;
  932. }
  933. //BS架构调用方式问题,每次调用都需要重新初始化
  934. if (init(InParam, out outParam) != 0)
  935. {
  936. rtnResult = outParam;
  937. return rtnResult;
  938. }
  939. //获取pat
  940. //hBus.GetFeeHisInfo(businessType, joInParam, out Global.pat);
  941. switch (businessType)
  942. {
  943. case "BasicData"://基础数据维护
  944. {
  945. Thread t = new Thread((ThreadStart)(() =>
  946. {
  947. BasicData bd = new BasicData();
  948. bd.ShowDialog();
  949. }));
  950. t.SetApartmentState(ApartmentState.STA);
  951. t.Start();
  952. t.Join();
  953. break;
  954. }
  955. case "Exception"://异常处理
  956. {
  957. //显示异常处理界面
  958. HandleException frmEX = new HandleException();
  959. if (frmEX.ShowDialog() == DialogResult.OK)
  960. {
  961. }
  962. break;
  963. }
  964. case "CheckAndClearing"://对账清算
  965. {
  966. Clearing frm = new Clearing();
  967. if (frm.ShowDialog() == DialogResult.OK)
  968. {
  969. }
  970. break;
  971. }
  972. case "Print"://打印
  973. {
  974. //显示打印界面
  975. SettlementChecklist frmSettlList;
  976. string insuAdmObj = JsonHelper.getDestValue(joInParam, "insuAdmObj");
  977. if (insuAdmObj == "")
  978. {
  979. frmSettlList = new SettlementChecklist();
  980. frmSettlList.ShowDialog();
  981. }
  982. else
  983. {
  984. JObject joInsuAdmObj = JObject.Parse(insuAdmObj);
  985. frmSettlList = new SettlementChecklist(joInsuAdmObj);
  986. string groupID = JsonHelper.getDestValue((JObject)Global.curEvt.jaSession[0], "groupID");
  987. DataTable dt = (DataTable)frmSettlList.dgvSettlRecord.DataSource;
  988. if (dt.Rows.Count != 1)
  989. {
  990. frmSettlList.ShowDialog();
  991. }
  992. else
  993. {
  994. frmSettlList.btnPrint_Click(null,null);
  995. }
  996. }
  997. return JsonHelper.setIrisReturnValue(0, "", null).ToString();
  998. break;
  999. }
  1000. case "Log"://日志
  1001. {
  1002. MessageBox.Show(businessType);
  1003. break;
  1004. }
  1005. case "RecordUpload"://上传记录
  1006. {
  1007. MessageBox.Show(businessType);
  1008. break;
  1009. }
  1010. case "HospitalRegister"://备案
  1011. {
  1012. MessageBox.Show(businessType);
  1013. break;
  1014. }
  1015. default:
  1016. {
  1017. rtnResult = JsonHelper.setExceptionJson(-1, "AgentFun 交易", "传入的业务编码不对!").ToString();
  1018. return rtnResult;
  1019. }
  1020. }
  1021. return rtnResult;
  1022. }
  1023. catch (Exception ex)
  1024. {
  1025. rtnResult = JsonHelper.setExceptionJson(-1, "AgentFun 交易", ex.Message).ToString();
  1026. return rtnResult;
  1027. }
  1028. finally
  1029. {
  1030. Global.writeLog("AgentFun 出参:" + JsonHelper.Compress(rtnResult));
  1031. }
  1032. }
  1033. public string Download(string InParam)
  1034. {
  1035. Global.writeLog("Download 入参:" + JsonHelper.Compress(InParam));
  1036. //设置返回值,错误信息
  1037. int errCode;
  1038. string errMsg, rtnResult = "", outParam;
  1039. try
  1040. {
  1041. //解析入参
  1042. if (parseInparam(InParam, out errMsg) != 0)
  1043. {
  1044. rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString();
  1045. return rtnResult;
  1046. }
  1047. //BS架构调用方式问题,每次调用都需要重新初始化
  1048. if (init(InParam, out outParam) != 0)
  1049. {
  1050. rtnResult = outParam;
  1051. return rtnResult;
  1052. }
  1053. dynamic joData = new JObject();
  1054. joData.data = joParam["data"];
  1055. //string code = (string)joInParam["code"];
  1056. string funNO = (string)joParam["funNO"];
  1057. switch (businessType)
  1058. {
  1059. case "DirectoryDownload":
  1060. {
  1061. string downloadParam = JsonHelper.setCenterInpar(funNO, joData.ToString());
  1062. rtnResult = hBus.Download(funNO, downloadParam);
  1063. break;
  1064. }
  1065. case "DictionayDownload":
  1066. {
  1067. string downloadParam = JsonHelper.setCenterInpar(funNO, joData.ToString());
  1068. rtnResult = hBus.downDictionary(downloadParam);
  1069. break;
  1070. }
  1071. }
  1072. return rtnResult;
  1073. }
  1074. catch (Exception ex)
  1075. {
  1076. rtnResult = JsonHelper.setExceptionJson(-100, "Download", ex.Message).ToString();
  1077. return rtnResult;
  1078. }
  1079. finally
  1080. {
  1081. Global.writeLog("Download 出参:" + rtnResult);
  1082. }
  1083. }
  1084. public string PlatformDirectConnect(string InParam)
  1085. {
  1086. //设置返回值,错误信息
  1087. int errCode;
  1088. string errMsg, rtnResult = "", outParam;
  1089. try
  1090. {
  1091. Global.writeLog("PlatformDirectConnect 入参:" + JsonHelper.Compress(InParam));
  1092. //解析入参
  1093. if (parseInparam(InParam, out errMsg) != 0)
  1094. {
  1095. rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString();
  1096. return rtnResult;
  1097. }
  1098. //Global.businessType = businessType;
  1099. string funNO = JsonHelper.getDestValue(joInParam, "funNO");
  1100. //BS架构调用方式问题,每次调用都需要重新初始化
  1101. if (init(InParam, out outParam) != 0)
  1102. {
  1103. rtnResult = outParam;
  1104. return rtnResult;
  1105. }
  1106. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(joInParam, "insuplc_admdvs");
  1107. JObject joRtn = invoker.invokeCenterService(funNO, JsonHelper.setCenterInpar(funNO, joParam));
  1108. if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
  1109. {
  1110. rtnResult = JsonHelper.setExceptionJson(-1, "平台直连错误", errMsg).ToString();
  1111. return rtnResult;
  1112. }
  1113. else
  1114. {
  1115. rtnResult = JsonHelper.setIrisReturnValue(0, "", joRtn).ToString();
  1116. return rtnResult;
  1117. }
  1118. }
  1119. catch (Exception ex)
  1120. {
  1121. rtnResult = JsonHelper.setExceptionJson(-1, "PlatformDirectConnect 交易", ex.Message).ToString();
  1122. return rtnResult;
  1123. }
  1124. finally
  1125. {
  1126. Global.writeLog("PlatformDirectConnect 出参:" + JsonHelper.Compress(rtnResult));
  1127. }
  1128. }
  1129. }
  1130. }