InsuBusiness.cs 53 KB

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