HisMainBusiness.cs 113 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311
  1. /******************************************************************************
  2. * 文件名称: HisMainBusiness.cs
  3. * 文件说明: HIS主体交易的封装
  4. * 当前版本: V1.0
  5. * 创建日期: 2022-06-20
  6. *
  7. * * 2020-06-20: 增加 HisMainBusiness 类
  8. * ***** 2020-06-20: 增加 CardReader 方法,获取URL地址,USER信息,地方版SSCard.dll使用
  9. * ***** 2020-06-20: 增加 CardReader 方法重载,国家版电子凭证使用
  10. * ***** 2020-06-20: 增加 Init 方法,SSCard环境初始化
  11. * ***** 2020-06-20: 增加 ReadCardBas 方法,读社保卡
  12. * ***** 2020-06-20: 增加 VerifyPIN 方法,验证密码
  13. * ***** 2020-06-20: 增加 ChangePIN 方法,修改密码
  14. * ***** 2020-06-20: 增加 ReadSFZ 方法,读身份证
  15. * ***** 2020-06-20: 增加 GetQRBase 方法,读二维码
  16. * ***** 2020-06-20: 增加 NationEcTrans 方法,读电子凭证(国家版)
  17. ******************************************************************************/
  18. using System;
  19. using System.Collections.Generic;
  20. using System.Linq;
  21. using System.Text;
  22. using System.Threading.Tasks;
  23. using System.Windows.Forms;
  24. using Newtonsoft.Json.Linq;
  25. using PTMedicalInsurance.Common;
  26. using PTMedicalInsurance.Helper;
  27. using PTMedicalInsurance.Variables;
  28. using PTMedicalInsurance.Forms;
  29. using System.Data;
  30. using System.Reflection;
  31. using System.IO;
  32. using System.IO.Compression;
  33. namespace PTMedicalInsurance.Business
  34. {
  35. class HisMainBusiness
  36. {
  37. private InvokeHelper invoker = new InvokeHelper();
  38. private HisIrisServices hIS = new HisIrisServices();
  39. private MIIrisServices mIS = new MIIrisServices();
  40. private CenterBusiness cBus = new CenterBusiness();
  41. /// <summary>
  42. /// 获取HIS的IRIS配置信息
  43. /// </summary>
  44. /// <param name="con"></param>
  45. public void getHisConfingue(out IrisConfigue con)
  46. {
  47. IniFile ini = new IniFile(Global.curEvt.path + @"\INSUConfigure.ini");
  48. con.ip = ini.ReadValue("HIS", "ip");
  49. con.url = ini.ReadValue("HIS", "url");
  50. con.authorization = ini.ReadValue("HIS", "authorization");
  51. }
  52. /// <summary>
  53. /// 获取医保平台的iris配置信息
  54. /// </summary>
  55. /// <param name="con"></param>
  56. public void getInsuConfingue(out IrisConfigue con)
  57. {
  58. IniFile ini = new IniFile(Global.curEvt.path + @"\INSUConfigure.ini");
  59. con.ip = ini.ReadValue("INSU", "ip");
  60. con.url = ini.ReadValue("INSU", "url");
  61. con.authorization = ini.ReadValue("INSU", "authorization");
  62. }
  63. public void getLocalConfingue()
  64. {
  65. IniFile ini = new IniFile(Global.curEvt.path + @"\INSUConfigure.ini");
  66. Global.curEvt.ext.isOpenAnalysis = (ini.ReadValue("PreAndInProcessAnalysis", "isOpenAnalysis") == "1");
  67. }
  68. /// <summary>
  69. /// 获取Session信息(目前只获取操作员信息)
  70. /// </summary>
  71. /// <param name="joSession"></param>
  72. public void getSessionInfo(JObject joSession)
  73. {
  74. Global.user.ID = JsonHelper.getDestValue(joSession, "userCode");
  75. Global.user.name = JsonHelper.getDestValue(joSession, "userName");
  76. Global.user.type = "3";
  77. Global.user.officeID = JsonHelper.getDestValue(joSession, "locID");
  78. Global.user.officeName = JsonHelper.getDestValue(joSession, "locDesc");
  79. }
  80. /// <summary>
  81. /// 根据壳程序传入的入参设置全局接口变量
  82. /// </summary>
  83. /// <param name="joInpar"></param>
  84. /// <param name="inf"></param>
  85. public void setGlobalInterface(JObject joInpar,out InterfaceInfo inf)
  86. {
  87. inf = new InterfaceInfo();
  88. inf.hospitalDr = int.Parse(JsonHelper.getDestValue(joInpar, "HospitalDr"));
  89. inf.hisHospitalDr = int.Parse(JsonHelper.getDestValue(joInpar, "hisHospitalDr"));
  90. inf.hospitalName = JsonHelper.getDestValue(joInpar, "HospitalName");
  91. inf.interfaceDr = int.Parse(JsonHelper.getDestValue(joInpar, "ID"));
  92. inf.interfaceID = JsonHelper.getDestValue(joInpar, "InterfaceID");
  93. //inf.oper = "3";
  94. inf.centerURL = JsonHelper.getDestValue(joInpar, "CenterURL");
  95. inf.ecURL = JsonHelper.getDestValue(joInpar, "CenterURL2");
  96. inf.areaCode = JsonHelper.getDestValue(joInpar, "AreaCode");
  97. inf.dllName = JsonHelper.getDestValue(joInpar, "DLLName");
  98. inf.hospitalNO = JsonHelper.getDestValue(joInpar, "HospitalNO");
  99. inf.version = "v1.0";
  100. inf.signatureType = "SM3";
  101. inf.recivedSystem = "YBXT";
  102. inf.AK = "";
  103. inf.SK = "";
  104. inf.dev_safe_info = "";
  105. inf.dev_no = Global.curEvt.mac;
  106. inf.cardURL = inf.centerURL;
  107. inf.cainfo = "";
  108. }
  109. /// <summary>
  110. /// 根据壳程序传入的入参设置全局接口变量
  111. /// </summary>
  112. /// <param name="joInpar"></param>
  113. /// <param name="inf"></param>
  114. public void setGlobalInterface_Plat(JObject joInpar, out InterfaceInfo inf)
  115. {
  116. inf = new InterfaceInfo();
  117. inf.hospitalDr = int.Parse(JsonHelper.getDestValue(joInpar, "hospitalID"));
  118. inf.hisHospitalDr = int.Parse(JsonHelper.getDestValue(joInpar, "hisHospitalDr"));
  119. inf.hospitalName = JsonHelper.getDestValue(joInpar, "hospitalName");
  120. inf.interfaceDr = int.Parse(JsonHelper.getDestValue(joInpar, "medInsuInterfaceID"));
  121. inf.interfaceID = JsonHelper.getDestValue(joInpar, "interfaceNO");
  122. //inf.oper = "3";
  123. inf.centerURL = JsonHelper.getDestValue(joInpar, "centerURL");
  124. inf.ecURL = JsonHelper.getDestValue(joInpar, "centerURL2");
  125. inf.areaCode = JsonHelper.getDestValue(joInpar, "areaCode");
  126. inf.dllName = JsonHelper.getDestValue(joInpar, "dLLName");
  127. inf.hospitalNO = JsonHelper.getDestValue(joInpar, "hospitalNO");
  128. inf.version = "v1.0";
  129. inf.signatureType = "SM3";
  130. inf.recivedSystem = "YBXT";
  131. inf.AK = "";
  132. inf.SK = "";
  133. inf.dev_safe_info = "";
  134. inf.dev_no = Global.curEvt.mac;
  135. inf.cardURL = inf.centerURL;
  136. inf.cainfo = "";
  137. }
  138. /// <summary>
  139. /// 初始化环境
  140. /// </summary>
  141. /// <param name="inParam"></param>
  142. /// <returns></returns>
  143. public int initEnvironment(string inParam,out string error)
  144. {
  145. error = string.Empty;
  146. try
  147. {
  148. //获取HIS和医保平台的IRIS配置信息
  149. getHisConfingue(out Global.hisConfig);
  150. getInsuConfingue(out Global.insuConfig);
  151. getLocalConfingue();
  152. JObject joInparam = JObject.Parse(inParam);
  153. JObject JoSession = JObject.Parse(JsonHelper.getDestValue(joInparam, "session[0]"));
  154. string hisHospitalDr = JsonHelper.getDestValue(JoSession, "hospID");
  155. JObject joInterface = JObject.Parse(JsonHelper.getDestValue(joInparam, "interfaceinfo"));
  156. joInterface.Add("hisHospitalDr", hisHospitalDr);
  157. if (joInterface != null)
  158. {
  159. //获取当前接口详细信息
  160. if (Global.businessType == "P1")
  161. {
  162. setGlobalInterface_Plat(joInterface, out Global.inf);
  163. }
  164. else
  165. {
  166. setGlobalInterface(joInterface, out Global.inf);
  167. }
  168. JObject joSession = JObject.Parse(JsonHelper.getDestValue(joInparam, "session[0]"));
  169. if (joSession != null)
  170. {
  171. //获取当前用户信息
  172. getSessionInfo(joSession);
  173. return 0;
  174. }
  175. else
  176. {
  177. error = "初始化环境失败:session获取失败!";
  178. return -1;
  179. }
  180. }
  181. else
  182. {
  183. error = "初始化环境失败:interfaceinfo获取失败!";
  184. return -1;
  185. }
  186. }
  187. catch (Exception ex)
  188. {
  189. error ="初始化环境失败:" + ex.Message;
  190. return -1;
  191. }
  192. }
  193. /// <summary>
  194. /// 读卡
  195. /// </summary>
  196. /// <returns></returns>
  197. public int readCard(out string outParam)
  198. {
  199. outParam = "";
  200. string errorMsg = "";
  201. string sInput = "";
  202. string sOutPar;
  203. Global.pat.mdtrtarea_admvs = "410100";
  204. JObject joCardInfo = new JObject();
  205. ChooseCard cc = new ChooseCard();
  206. CardReader_HN CardRead = new CardReader_HN();
  207. InvokeHelper invoker = new InvokeHelper();
  208. try
  209. {
  210. if (cc.ShowDialog() == DialogResult.OK)
  211. {
  212. #region【电子凭证】
  213. if (cc.sP_CertType == "01")
  214. {
  215. Global.pat.mdtrtcertType = "01";
  216. Global.pat.certType = "01";
  217. Random rd = new Random();
  218. int iNum = rd.Next();
  219. string sLSH = DateTime.Now.ToString("yyyyMMddHHmmss") + Global.inf.hospitalNO + iNum.ToString().Substring(0, 5);
  220. joCardInfo.Add("operatorId", Global.user.ID);
  221. joCardInfo.Add("operatorName", Global.user.name);
  222. joCardInfo.Add("officeId", Global.user.officeID);
  223. joCardInfo.Add("officeName", Global.user.officeName);
  224. joCardInfo.Add("orgId", Global.inf.hospitalNO);
  225. joCardInfo.Add("businessType", cc.sL_CertCodeType);
  226. //认证方式
  227. if (cc.EcCertDecodeType == "2") //刷脸、先授权后解码
  228. {
  229. //1.调用人脸识别认证 cn.nhsa.ec.auth
  230. joCardInfo.Add("outBizNo", sLSH);
  231. joCardInfo.Add("extData", "");
  232. JObject JoEcAuth = new JObject();
  233. JoEcAuth.Add("orgId", Global.inf.hospitalNO);
  234. JoEcAuth.Add("transType", "cn.nhsa.ec.auth");
  235. JoEcAuth.Add("data", joCardInfo);
  236. JoEcAuth.Add("extra", "");
  237. //调用刷脸认证接口cn.nhsa.ec.auth返回授权信息authNo
  238. CardRead.NationEcTrans(Global.inf.ecURL, JoEcAuth.ToString(), out sOutPar);
  239. if (JsonHelper.getDestValue(JObject.Parse(sOutPar), "code") != "0")
  240. {
  241. outParam = "调用刷脸认证接口cn.nhsa.ec.auth认证失败:" + sOutPar;
  242. return -1;
  243. }
  244. else
  245. {
  246. //成功返回授权信息
  247. string auth = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.authNo");
  248. JObject JoAuthCheckInput = new JObject();
  249. JoAuthCheckInput.Add("orgId", Global.inf.hospitalNO);
  250. JoAuthCheckInput.Add("outBizNo", DateTime.Now.ToString("yyyyMMddHHmmss") + Global.inf.hospitalNO + iNum.ToString().Substring(0, 5));
  251. JoAuthCheckInput.Add("authNo", auth);
  252. JoAuthCheckInput.Add("businessType", cc.sL_CertCodeType);
  253. JoAuthCheckInput.Add("operatorId", Global.user.ID);
  254. JoAuthCheckInput.Add("operatorName", Global.user.name);
  255. JoAuthCheckInput.Add("officeId", Global.user.officeID);
  256. JoAuthCheckInput.Add("officeName", Global.user.officeName);
  257. JoAuthCheckInput.Add("extData", "");
  258. JObject JoAuthChck = new JObject();
  259. JoAuthChck.Add("orgId", Global.inf.hospitalNO);
  260. JoAuthChck.Add("transType", "cn.nhsa.auth.check");
  261. JoAuthChck.Add("data", JoAuthCheckInput);
  262. JoAuthChck.Add("extra", "");
  263. //2.调用刷脸认证接口cn.nhsa.ec.auth返回授权信息authNo
  264. CardRead.NationEcTrans(Global.inf.ecURL, JoAuthChck.ToString(), out sOutPar);
  265. if (JsonHelper.getDestValue(JObject.Parse(sOutPar), "code") != "0")
  266. {
  267. outParam = "调用刷脸授权获取医保身份接口cn.nhsa.auth.check失败:" + sOutPar;
  268. return -1;
  269. }
  270. else
  271. {
  272. Global.pat.ecToken = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.ecToken");
  273. Global.pat.name = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.userName");
  274. Global.pat.IDType = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idType");
  275. Global.pat.IDNO = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idNo");
  276. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.insuOrg");
  277. Global.pat.mdtrtcertNO = Global.pat.ecToken;
  278. Global.pat.certType = Global.pat.IDType;
  279. Global.pat.certNO = Global.pat.IDNO;
  280. }
  281. }
  282. }
  283. else
  284. {
  285. //二维码
  286. if (cc.EcCertDecodeType == "0")
  287. {
  288. joCardInfo.Add("deviceType", cc.sL_CertCodeType);
  289. }
  290. //电子凭证
  291. else if (cc.EcCertDecodeType == "1")
  292. {
  293. joCardInfo.Add("outBizNo", sLSH);
  294. joCardInfo.Add("extData", "");
  295. }
  296. //调用电子凭证动态库NationECCode.dll获取身份信息
  297. JObject JoInput = new JObject();
  298. JoInput.Add("orgId", Global.inf.hospitalNO);
  299. JoInput.Add("transType", cc.sL_EcCertDecodeTradeNO);
  300. JoInput.Add("data", joCardInfo);
  301. JoInput.Add("extra", "");
  302. //MessageBox.Show("电子凭证解码地址:" + Global.inf.ecURL + ",入参:" + JoInput.ToString());
  303. CardRead.NationEcTrans(Global.inf.ecURL, JoInput.ToString(), out sOutPar);
  304. if (JsonHelper.getDestValue(JObject.Parse(sOutPar), "code") != "0")
  305. {
  306. outParam = "调用电子凭证失败:" + sOutPar;
  307. return -1;
  308. }
  309. Global.pat.ecToken = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.ecToken");
  310. Global.pat.name = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.userName");
  311. Global.pat.IDType = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idType");
  312. Global.pat.IDNO = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idNo");
  313. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.insuOrg");
  314. Global.pat.mdtrtcertNO = Global.pat.ecToken;
  315. Global.pat.certType = Global.pat.IDType;
  316. Global.pat.certNO = Global.pat.IDNO;
  317. }
  318. }
  319. #endregion
  320. #region【身份证】
  321. if (cc.sP_CertType == "02")
  322. {
  323. Global.pat.mdtrtcertType = "02";
  324. Global.pat.mdtrtcertNO = cc.sP_CertNO;
  325. Global.pat.certType = "01";
  326. Global.pat.certNO = cc.sP_IDNO;
  327. Global.pat.name = cc.PatName;
  328. Global.pat.card.SN = "";
  329. }
  330. #endregion
  331. #region【社保卡】
  332. if (cc.sP_CertType == "03")
  333. {
  334. //【社保卡-异地】
  335. if (cc.bOtherProvLocal)
  336. {
  337. Global.pat.bOtherProvLocal = true;
  338. Global.pat.insuplc_admdvs = Global.pat.card.SearchAdmCode;
  339. if (CardRead.ReadCardBas_HSM_Step1(cc.sL_CardType, Global.inf.hospitalNO, out sOutPar) != 0)
  340. {
  341. outParam = "社保卡读卡异常ReadCardBas_HSM_Step1:" + sOutPar;
  342. return -1;
  343. }
  344. else
  345. {
  346. Global.pat.mdtrtarea_admvs = "419900";
  347. //【9201卡内部认证】
  348. JObject joData9201 = new JObject();
  349. joData9201.Add("mac", sOutPar);
  350. //Global.pat.insuplc_admdvs = tools.getDestPosStrBySpliter(sOutPar, 1); //参保地
  351. JObject joRtn9201 = invoker.invokeCenterService("9201", JsonHelper.setCenterInpar("9201", joData9201));
  352. if (JsonHelper.parseCenterRtnValue(joRtn9201, out errorMsg) != 0)
  353. {
  354. outParam = "卡内部认证9201交易失败:" + errorMsg;
  355. return -1;
  356. }
  357. else
  358. {
  359. outParam = joRtn9201.ToString();
  360. Global.pat.card.pKey = JsonHelper.getDestValue(JObject.Parse(outParam), "output.crtf_ide_data"); //认证鉴别数据
  361. }
  362. if (CardRead.ReadCardBas_HSM_Step2(Global.pat.card.pKey,out sOutPar) != 0)
  363. {
  364. outParam = "社保卡读卡异常ReadCardBas_HSM_Step2:" + errorMsg;
  365. return -1;
  366. }
  367. }
  368. }
  369. else //【社保卡-本地】
  370. {
  371. if (CardRead.ReadCardBas(cc.sL_CardType,Global.inf.hospitalNO,out sOutPar) != 0)
  372. {
  373. outParam = "社保卡读卡异常ReadCardBas:" + sOutPar;
  374. return -1;
  375. }
  376. }
  377. //【社保卡读卡成功返回】
  378. Global.pat.insuplc_admdvs = tools.getDestPosStrBySpliter(sOutPar, 1); //参保地
  379. Global.pat.card.NO = tools.getDestPosStrBySpliter(sOutPar, 2); //社会保障号码
  380. Global.pat.certNO = tools.getDestPosStrBySpliter(sOutPar, 3); //卡号
  381. Global.pat.card.SN = tools.getDestPosStrBySpliter(sOutPar, 4); //卡识别码
  382. Global.pat.name = tools.getDestPosStrBySpliter(sOutPar, 5); //姓名
  383. Global.pat.certType = "90";
  384. Global.pat.mdtrtcertType = "03";
  385. Global.pat.mdtrtcertNO = Global.pat.certNO;
  386. Global.pat.certNO = Global.pat.card.NO;
  387. }
  388. #endregion
  389. //是否异地
  390. Global.pat.bOtherProvLocal = cc.bOtherProvLocal;
  391. }
  392. else
  393. {
  394. outParam = "收款员取消读卡!";
  395. return -1;
  396. }
  397. #region【1101获取身份信息】
  398. JObject joData = new JObject();
  399. joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  400. joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  401. joData.Add("card_sn", Global.pat.card.SN);
  402. joData.Add("begntime", "");
  403. joData.Add("psn_cert_type", Global.pat.certType);
  404. joData.Add("certno", Global.pat.certNO); //证件号码
  405. joData.Add("psn_name", Global.pat.name);
  406. JObject joInput = new JObject();
  407. joInput.Add("data",joData);
  408. //InvokeHelper invoker = new InvokeHelper();
  409. JObject joRtn = invoker.invokeCenterService("1101", JsonHelper.setCenterInpar("1101", joInput));
  410. if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0)
  411. {
  412. outParam = "读卡失败:" + errorMsg;
  413. return -1;
  414. }
  415. else
  416. {
  417. //joRtn.Add("cardinfo",joCardInfo);
  418. outParam = joRtn.ToString();
  419. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.insuplc_admdvs"); //参保地
  420. outParam = outParam.Replace(@"\", "").Replace("\"{", "{").Replace("}\"", "}");
  421. return 0;
  422. }
  423. #endregion
  424. }
  425. catch (Exception ex)
  426. {
  427. outParam = "异常:" + ex.Message;
  428. return -1;
  429. }
  430. }
  431. public int checkIDCardPwd(out string outparam)
  432. {
  433. string OutMsg = "";
  434. JObject joCardInfo = new JObject();
  435. joCardInfo.Add("orgId", Global.inf.hospitalNO);
  436. joCardInfo.Add("idNo", Global.pat.mdtrtcertNO);
  437. joCardInfo.Add("idType", "01");
  438. joCardInfo.Add("userName", Global.pat.name);
  439. joCardInfo.Add("businessType", "01301"); //结算
  440. joCardInfo.Add("ecToken", "");
  441. joCardInfo.Add("operatorId", Global.user.ID);
  442. joCardInfo.Add("operatorName", Global.user.name);
  443. joCardInfo.Add("officeId", Global.user.officeID);
  444. joCardInfo.Add("officeName", Global.user.officeName);
  445. joCardInfo.Add("mdtrtCertType", "02A"); //01A 医保电子凭证 当前指医保电子凭证二维码 02A居民身份证03A 社会保障卡04A 医保刷脸
  446. joCardInfo.Add("deviceType", "");
  447. joCardInfo.Add("extData", "");
  448. //调用电子凭证动态库NationECCode.dll获取身份信息
  449. JObject JoInput = new JObject();
  450. JoInput.Add("orgId", Global.inf.hospitalNO);
  451. JoInput.Add("transType", "cn.nhsa.ec.pwd");
  452. JoInput.Add("data", joCardInfo);
  453. JoInput.Add("extra", "");
  454. CardReader_HN CardRead = new CardReader_HN();
  455. CardRead.NationEcTrans(Global.inf.ecURL, JoInput.ToString(), out OutMsg);
  456. if (JsonHelper.getDestValue(JObject.Parse(OutMsg), "code") != "0")
  457. {
  458. outparam = "身份证验密异常" + OutMsg;
  459. return -1;
  460. }
  461. else
  462. {
  463. Global.pat.ecToken = JsonHelper.getDestValue(JObject.Parse(OutMsg), "data.ecToken");
  464. outparam = Global.pat.ecToken;
  465. return 0;
  466. }
  467. }
  468. /// <summary>
  469. /// 展示患者信息界面,转换相关编码为中文,并获取操作员选中的信息
  470. /// </summary>
  471. /// <param name="patInfo"></param>
  472. /// <param name="outparam"></param>
  473. /// <returns></returns>
  474. public int showPatInfo(String patInfo,out string outparam )
  475. {
  476. outparam = "";
  477. //展示信息界面
  478. JObject joOutparam = JObject.Parse(patInfo);
  479. JObject joOutput = JObject.Parse(JsonHelper.getDestValue(joOutparam, "output"));
  480. //编码转换
  481. JArray jaConvertCode = new JArray();
  482. JObject joConvertCodeParam = new JObject();
  483. joConvertCodeParam.Add("hospitalDr", Global.inf.hospitalDr);
  484. joConvertCodeParam.Add("interfaceDr", Global.inf.interfaceDr);
  485. joConvertCodeParam.Add("output", joOutput);
  486. jaConvertCode.Add(joConvertCodeParam);
  487. JObject joConvertCode = new JObject();
  488. joConvertCode.Add("code", "09010054");
  489. joConvertCode.Add("params", jaConvertCode);
  490. InvokeHelper invoker = new InvokeHelper();
  491. JObject joConvertCodeRtn = invoker.invokeInsuService(joConvertCode.ToString(), "患者信息编码转换");
  492. PatientInsuInfo frmPatientInfo = new PatientInsuInfo(joConvertCodeRtn);
  493. //相关信息转换到登记面板
  494. try
  495. {
  496. if (frmPatientInfo.ShowDialog() == DialogResult.OK)
  497. {
  498. //原来用的是转换后的
  499. //frmPatientInfo.joSelectedInsuInfo.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  500. //frmPatientInfo.joSelectedInsuInfo.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  501. //joOutparam.Property("output").AddBeforeSelf(new JProperty("selectedInsuInfo", frmPatientInfo.joSelectedInsuInfo));
  502. //现在用转换之前的
  503. JArray jaInsuInfo = JArray.Parse(JsonHelper.getDestValue(joOutput, "insuinfo"));
  504. JArray jaIdInfo = JArray.Parse(JsonHelper.getDestValue(joOutput, "idetinfo"));
  505. JObject joSelectedInsuInfo = (JObject)jaInsuInfo[frmPatientInfo.insuInfoIndex];
  506. JObject joSelectedIdInfo;
  507. if (jaIdInfo.Count != 0)
  508. {
  509. joSelectedIdInfo = (JObject)jaIdInfo[frmPatientInfo.idInfoIndex];
  510. }
  511. else
  512. {
  513. joSelectedIdInfo = new JObject();
  514. }
  515. joSelectedInsuInfo.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  516. joSelectedInsuInfo.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  517. joOutparam.Property("output").AddBeforeSelf(new JProperty("selectedInsuInfo", joSelectedInsuInfo));
  518. joOutparam.Property("output").AddBeforeSelf(new JProperty("selectedIdInfo", joSelectedInsuInfo));
  519. outparam = joOutparam.ToString();
  520. return 0;
  521. }
  522. else
  523. {
  524. outparam = JsonHelper.setExceptionJson(-1, "门诊读卡", "收款员取消读卡").ToString();
  525. return -1;
  526. }
  527. }
  528. catch (Exception e)
  529. {
  530. outparam = JsonHelper.setExceptionJson(-1, "患者参保信息展示", e.Message).ToString();
  531. return -1;
  532. }
  533. }
  534. /// <summary>
  535. /// 患者读卡并获取中心信息(1101)后设置PAT结构体
  536. /// </summary>
  537. /// <param name="patInfo"></param>
  538. /// <param name="errMsg"></param>
  539. /// <returns></returns>
  540. public int setGlobalPatAfaterShowPatInfo(string patInfo,out string errMsg)
  541. {
  542. JObject joPatInfo;
  543. errMsg = "";
  544. try
  545. {
  546. joPatInfo = JObject.Parse(patInfo);
  547. //基本信息
  548. Global.pat.certNO = JsonHelper.getDestValue(joPatInfo, "output.baseinfo.certno");
  549. Global.pat.psn_no = JsonHelper.getDestValue(joPatInfo, "output.baseinfo.psn_no");
  550. Global.pat.gend = JsonHelper.getDestValue(joPatInfo, "output.baseinfo.gend");
  551. Global.pat.brdy = JsonHelper.getDestValue(joPatInfo, "output.baseinfo.brdy");
  552. Global.pat.naty = JsonHelper.getDestValue(joPatInfo, "output.baseinfo.naty");
  553. Global.pat.age = JsonHelper.getDestValue(joPatInfo, "output.baseinfo.age");
  554. Global.pat.certType = JsonHelper.getDestValue(joPatInfo, "output.baseinfo.psn_cert_type");
  555. //if (Global.pat.name != JsonHelper.getDestValue(joPatInfo, "output.baseinfo.psn_name"))
  556. //{
  557. // errMsg = "患者姓名(" + Global.pat.name + ")与参保人姓名(" + JsonHelper.getDestValue(joPatInfo, "output.baseinfo.psn_name") + ")不一致,请检查!";
  558. // return -1;
  559. //}
  560. Global.pat.name = JsonHelper.getDestValue(joPatInfo, "output.baseinfo.psn_name");
  561. //选中的参保信息
  562. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.insuplc_admdvs");
  563. Global.pat.psn_insu_date = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.psn_insu_date");
  564. Global.pat.cvlserv_flag = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.cvlserv_flag");
  565. Global.pat.balc = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.balc");
  566. Global.pat.emp_name = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.emp_name");
  567. Global.pat.psn_type = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.psn_type");
  568. Global.pat.psn_insu_stas = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.psn_insu_stas");
  569. Global.pat.insuType = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.insutype");
  570. Global.pat.paus_insu_date = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.paus_insu_date");
  571. //卡片信息
  572. //Global.pat.cardSN = JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo.paus_insu_date");
  573. //选中的身份信息
  574. return 0;
  575. }
  576. catch (Exception ex)
  577. {
  578. errMsg = "获取患者信息发生异常:" + ex.Message;
  579. return -1;
  580. }
  581. }
  582. /// <summary>
  583. /// 显示住院患者登记面板,返回登记入参
  584. /// </summary>
  585. /// <param name="regInfo"></param>
  586. /// <returns></returns>
  587. public int showInPatRegisterForm(out string regInfo)
  588. {
  589. //调用服务获取门诊诊断信息
  590. string diagnoses;
  591. if (hIS.getPatDiagnoses(Global.pat, out diagnoses) != 0)
  592. {
  593. regInfo = JsonHelper.setExceptionJson(-1, "getPatDiagnoses", diagnoses).ToString();
  594. return -1;
  595. }
  596. JObject joHisRtnInfo = JObject.Parse(diagnoses);
  597. //组织登记入参
  598. JObject joReg = new JObject();
  599. try
  600. {
  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. // jaConvertedDiagnoses.Add(jaDiagnoses[i]);
  640. //}
  641. if (jaDiagnoses[i]["diaTypeCode"].ToString() == "ADD") //ADD 入院 OPD 门诊
  642. {
  643. jaInPatDiagnoses.Add(jaDiagnoses[i]);
  644. }
  645. if (jaDiagnoses[i]["diaTypeCode"].ToString() == "OPD") //ADD 入院 OPD 门诊
  646. {
  647. jaOutPatDiagnoses.Add(jaDiagnoses[i]);
  648. }
  649. }
  650. if (jaInPatDiagnoses.Count > 0)
  651. {
  652. jaConvertedDiagnoses = (JArray)jaInPatDiagnoses.DeepClone();
  653. }
  654. else
  655. {
  656. jaConvertedDiagnoses = (JArray)jaOutPatDiagnoses.DeepClone();
  657. }
  658. for (int i = 0; i < jaConvertedDiagnoses.Count; i++)
  659. {
  660. jaConvertedDiagnoses[i]["diag_srt_no"] = i + 1;
  661. jaConvertedDiagnoses[i]["diag_dept"] = "A10";
  662. if (jaConvertedDiagnoses[i]["maindiag_flag"].ToString() == "1")
  663. {
  664. dscg_maindiag_code = jaConvertedDiagnoses[i]["diag_code"].ToString();
  665. dscg_maindiag_name = jaConvertedDiagnoses[i]["diag_name"].ToString();
  666. }
  667. }
  668. //登记面板实例
  669. OutpatientRegistration frmReg = new OutpatientRegistration();
  670. frmReg.dblkcbxSettelmentWay.Enabled = false;
  671. DataTable dt = (DataTable)frmReg.dblkcbxInsuranceType.DataSource;
  672. int selectedIndex = 0;
  673. for (int i = 0; i < dt.Rows.Count; i++)
  674. {
  675. if (dt.Rows[i]["Code"].ToString() == Global.pat.insuType)
  676. {
  677. selectedIndex = i;
  678. frmReg.dblkcbxInsuranceType.Text = dt.Rows[i]["Name"].ToString();
  679. frmReg.insuType = dt.Rows[i]["Code"].ToString();
  680. }
  681. }
  682. DataTable dtMedType = (DataTable)frmReg.dblkcbxMedicalType.DataSource;
  683. for (int i = 0; i < dtMedType.Rows.Count; i++)
  684. {
  685. if (dtMedType.Rows[i]["Code"].ToString() == "21")
  686. {
  687. frmReg.dblkcbxMedicalType.Text = dtMedType.Rows[i]["Name"].ToString();
  688. frmReg.med_type = dtMedType.Rows[i]["Code"].ToString();
  689. }
  690. }
  691. frmReg.DtDiagnose = (DataTable)jaConvertedDiagnoses.ToObject(typeof(DataTable));
  692. //展示登记面板
  693. if (frmReg.ShowDialog() == DialogResult.OK)
  694. {
  695. string diseCodg ="",diseName = "";
  696. diseCodg = frmReg.diseCodg;
  697. diseName = frmReg.diseName;
  698. //哈尔滨要求必须传病种。普通疾病传主诊断
  699. //if (string.IsNullOrEmpty(frmReg.diseCodg))
  700. //{
  701. // diseCodg = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_code");
  702. //};
  703. //if (string.IsNullOrEmpty(frmReg.diseName))
  704. //{
  705. // diseName = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_name");
  706. //}
  707. JObject joMdtrtinfo = new JObject();
  708. joMdtrtinfo.Add("psn_no", Global.pat.psn_no); //人员编号
  709. joMdtrtinfo.Add("insutype", Global.pat.insuType); //险种类型
  710. joMdtrtinfo.Add("coner_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.coner_name")); //联系人姓名
  711. joMdtrtinfo.Add("tel", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.tel")); //联系电话
  712. joMdtrtinfo.Add("begntime", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime")); //开始时间
  713. joMdtrtinfo.Add("mdtrt_cert_type", Global.pat.mdtrtcertType); //就诊凭证类型
  714. joMdtrtinfo.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO); //就诊凭证编号
  715. joMdtrtinfo.Add("med_type", frmReg.med_type); //医疗类别
  716. joMdtrtinfo.Add("ipt_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.ipt_no")); //住院号
  717. joMdtrtinfo.Add("medrcdno", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.medrcdno")); //病历号
  718. joMdtrtinfo.Add("atddr_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.atddr_no")); //主治医生编码
  719. joMdtrtinfo.Add("chfpdr_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.chfpdr_name")); //主诊医师姓名
  720. joMdtrtinfo.Add("adm_diag_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_diag_dscr")); //入院诊断描述
  721. joMdtrtinfo.Add("adm_dept_codg", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_codg")); //入院科室编码
  722. joMdtrtinfo.Add("adm_dept_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_name")); //入院科室名称
  723. joMdtrtinfo.Add("adm_bed", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_bed")); //入院床位
  724. joMdtrtinfo.Add("dscg_maindiag_code", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_code")); //住院主诊断代码
  725. joMdtrtinfo.Add("dscg_maindiag_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_name")); //住院主诊断名称
  726. //joMdtrtinfo.Add("dscg_maindiag_code", dscg_maindiag_code); //住院主诊断代码
  727. //joMdtrtinfo.Add("dscg_maindiag_name", dscg_maindiag_name); //住院主诊断名称
  728. joMdtrtinfo.Add("main_cond_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.main_cond_dscr")); //主要病情描述
  729. joMdtrtinfo.Add("dise_codg", diseCodg); //病种编码
  730. joMdtrtinfo.Add("dise_name", diseName); //病种名称
  731. joMdtrtinfo.Add("oprn_oprt_code", frmReg.oprn_oprt_code); //手术操作代码
  732. joMdtrtinfo.Add("oprn_oprt_name", frmReg.oprn_oprt_name); //手术操作名称
  733. joMdtrtinfo.Add("fpsc_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fpsc_no")); //计划生育服务证号
  734. joMdtrtinfo.Add("matn_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.matn_type")); //生育类别
  735. joMdtrtinfo.Add("birctrl_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_type")); //计划生育手术类别
  736. joMdtrtinfo.Add("latechb_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.latechb_flag")); //晚育标志
  737. joMdtrtinfo.Add("geso_val", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.geso_val")); //孕周数
  738. joMdtrtinfo.Add("fetts", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fetts")); //胎次
  739. joMdtrtinfo.Add("fetus_cnt", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fetus_cnt")); //胎儿数
  740. joMdtrtinfo.Add("pret_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.pret_flag")); //早产标志
  741. joMdtrtinfo.Add("birctrl_matn_date", ""); //计划生育手术或生育日期 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_matn_date") 20230228医保中心校验传正确时间或空
  742. joMdtrtinfo.Add("dise_type_code", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dise_type_code")); //病种类型
  743. joMdtrtinfo.Add("exp_content", ""); //字段扩展
  744. joMdtrtinfo.Add("insuplc_admdvs", Global.pat.insuplc_admdvs); //参保地医保区划
  745. joMdtrtinfo.Add("mdtrtarea_admvs", Global.inf.areaCode); //就医地医保区划
  746. joReg.Add("mdtrtinfo", joMdtrtinfo);
  747. joReg.Add("diseinfo", jaConvertedDiagnoses);
  748. Global.pat.disCode = diseCodg;
  749. Global.pat.disName = diseName;
  750. Global.pat.medType = frmReg.med_type;
  751. regInfo = joReg.ToString();
  752. return 0;
  753. }
  754. else
  755. {
  756. regInfo = "收费员取消操作!";
  757. return -1;
  758. }
  759. }
  760. catch (Exception ex)
  761. {
  762. regInfo = "登记界面显示异常:" + ex.Message;
  763. return -1;
  764. }
  765. }
  766. /// <summary>
  767. /// 校验HIS信息与医保参保信息姓名是否一致
  768. /// </summary>
  769. /// <param name="insuName"></param>
  770. /// <param name="errMsg"></param>
  771. /// <returns></returns>
  772. public int checkName(string insuName, out string errMsg)
  773. {
  774. try
  775. {
  776. errMsg = "";
  777. string hisPatBaseInfo = "";
  778. if (hIS.GetHisPatBaseInfo(out hisPatBaseInfo) != 0)
  779. {
  780. errMsg = hisPatBaseInfo;
  781. return -1;
  782. }
  783. string hisPatName = JsonHelper.getDestValue(JObject.Parse(hisPatBaseInfo), "result.patName");
  784. if (hisPatName != insuName)
  785. {
  786. errMsg = "患者姓名(" + hisPatName + ")与参保人姓名(" + insuName + ")不一致,请检查!";
  787. return -1;
  788. }
  789. else
  790. {
  791. return 0;
  792. }
  793. }
  794. catch (Exception ex)
  795. {
  796. errMsg = "核对HIS与医保平台姓名一致性发生异常:" + ex.Message;
  797. return -1;
  798. }
  799. }
  800. /// <summary>
  801. /// 显示出院登记界面,返回出院登记和结算的入参
  802. /// </summary>
  803. /// <param name="joSumFee"></param>
  804. /// <param name="outParam"></param>
  805. /// <returns></returns>
  806. public int showDischargeRegisterForm(string funNO, JObject joSumFee, JObject joHisRtnInfo, out string outParam)
  807. {
  808. outParam = "";
  809. string errMsg;
  810. try
  811. {
  812. JArray jaDiagnoses = JArray.Parse(JsonHelper.getDestValue(joHisRtnInfo, "diseinfo"));
  813. //选择结算方式等
  814. OutpatientRegistration frmReg = new OutpatientRegistration();
  815. frmReg.dblkcbxInsuranceType.Enabled = true;
  816. DataTable dt = (DataTable)frmReg.dblkcbxInsuranceType.DataSource;
  817. int selectedIndex = 0;
  818. for (int i = 0; i < dt.Rows.Count; i++)
  819. {
  820. if (dt.Rows[i]["Code"].ToString() == Global.pat.insuType)
  821. {
  822. selectedIndex = i;
  823. frmReg.dblkcbxInsuranceType.Text = dt.Rows[i]["Name"].ToString();
  824. frmReg.insuType = dt.Rows[i]["Code"].ToString();
  825. }
  826. }
  827. dt = (DataTable)frmReg.dblkcbxMedicalType.DataSource;
  828. for (int i = 0; i < dt.Rows.Count; i++)
  829. {
  830. if (dt.Rows[i]["Code"].ToString() == Global.pat.medType)
  831. {
  832. frmReg.dblkcbxMedicalType.Text = dt.Rows[i]["Name"].ToString();
  833. frmReg.med_type = dt.Rows[i]["Code"].ToString();
  834. }
  835. }
  836. if (Global.pat.RYorCY == "1")
  837. {
  838. DataTable dtMedType = (DataTable)frmReg.dblkcbxMedicalType.DataSource;
  839. for (int i = 0; i < dtMedType.Rows.Count; i++)
  840. {
  841. if (dtMedType.Rows[i]["Code"].ToString() == "21")
  842. {
  843. frmReg.dblkcbxMedicalType.Text = dtMedType.Rows[i]["Name"].ToString();
  844. frmReg.med_type = dtMedType.Rows[i]["Code"].ToString();
  845. }
  846. }
  847. }
  848. DataTable dtSettlWay = (DataTable)frmReg.dblkcbxSettelmentWay.DataSource;
  849. for (int i = 0; i < dtSettlWay.Rows.Count; i++)
  850. {
  851. if (dtSettlWay.Rows[i]["Code"].ToString() == "01")
  852. {
  853. frmReg.dblkcbxSettelmentWay.Text = dtSettlWay.Rows[i]["Name"].ToString();
  854. frmReg.psn_setlway = dtSettlWay.Rows[i]["Code"].ToString();
  855. }
  856. }
  857. DataTable DTdiseCodg = (DataTable)frmReg.dblkcbxDisease.DataSource;
  858. for (int i = 0; i < DTdiseCodg.Rows.Count; i++)
  859. {
  860. if (DTdiseCodg.Rows[i]["Code"].ToString() == Global.pat.DiseasecCode)
  861. {
  862. frmReg.dblkcbxDisease.Text = DTdiseCodg.Rows[i]["Name"].ToString();
  863. frmReg.diseCodg = DTdiseCodg.Rows[i]["Code"].ToString();
  864. }
  865. }
  866. if (frmReg.dblkcbxInsuranceType.Text != "")
  867. frmReg.dblkcbxInsuranceType.Enabled = false;
  868. if (frmReg.dblkcbxMedicalType.Text != "")
  869. frmReg.dblkcbxMedicalType.Enabled = false;
  870. if (frmReg.dblkcbxDisease.Text != "")
  871. frmReg.dblkcbxDisease.Enabled = false;
  872. // 对诊断数组进行转换 转换下主要诊断
  873. JArray jaConvertedDiagnoses = new JArray();
  874. string dscg_maindiag_code = "", dscg_maindiag_name = "";
  875. for (int i = 0; i < jaDiagnoses.Count; i++)
  876. {
  877. string diag_type = JsonHelper.getDestValue((JObject)jaDiagnoses[i], "diag_type");
  878. switch (diag_type)
  879. {
  880. case "1":
  881. {
  882. jaDiagnoses[i]["diag_type_name"] = new JObject();
  883. jaDiagnoses[i]["diag_type_name"] = "西医主要诊断";
  884. break;
  885. }
  886. case "2":
  887. {
  888. jaDiagnoses[i]["diag_type_name"] = new JObject();
  889. jaDiagnoses[i]["diag_type_name"] = "西医其他诊断";
  890. break;
  891. }
  892. case "3":
  893. {
  894. jaDiagnoses[i]["diag_type_name"] = new JObject();
  895. jaDiagnoses[i]["diag_type_name"] = "中医主病诊断";
  896. break;
  897. }
  898. case "4":
  899. {
  900. jaDiagnoses[i]["diag_type_name"] = new JObject();
  901. jaDiagnoses[i]["diag_type_name"] = "中医主证诊断";
  902. break;
  903. }
  904. }
  905. if (jaDiagnoses[i]["diaTypeCode"].ToString() == "ADD") //ADD 入院 OPD 门诊
  906. {
  907. jaConvertedDiagnoses.Add(jaDiagnoses[i]);
  908. }
  909. }
  910. for (int i = 0; i < jaConvertedDiagnoses.Count; i++)
  911. {
  912. jaConvertedDiagnoses[i]["diag_srt_no"] = i + 1;
  913. jaConvertedDiagnoses[i]["diag_dept"] = "A10";
  914. if (jaConvertedDiagnoses[i]["maindiag_flag"].ToString() == "1")
  915. {
  916. dscg_maindiag_code = jaConvertedDiagnoses[i]["diag_code"].ToString();
  917. dscg_maindiag_name = jaConvertedDiagnoses[i]["diag_name"].ToString();
  918. }
  919. //增加就诊ID
  920. jaConvertedDiagnoses[i]["mdtrt_id"] = new JObject();
  921. jaConvertedDiagnoses[i]["mdtrt_id"] = Global.pat.mdtrtID;
  922. }
  923. frmReg.DtDiagnose = (DataTable)jaConvertedDiagnoses.ToObject(typeof(DataTable));
  924. if (frmReg.ShowDialog() == DialogResult.OK)
  925. {
  926. string diseCodg = "", diseName = "";
  927. //哈尔滨要求必须传病种。普通疾病传主诊断
  928. if (string.IsNullOrEmpty(frmReg.diseCodg))
  929. {
  930. diseCodg = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_code");
  931. };
  932. if (string.IsNullOrEmpty(frmReg.diseName))
  933. {
  934. diseName = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_name");
  935. };
  936. //出院登记入参
  937. //单病种出院登记 病种信息取入院登记入参
  938. if (Global.pat.RYorCY == "2")
  939. {
  940. if (Global.pat.medType == "26")
  941. {
  942. diseCodg = Global.pat.DiseasecCode;
  943. diseName = Global.pat.DiseasecName;
  944. }
  945. else
  946. {
  947. frmReg.insuType = Global.pat.insuType;
  948. }
  949. }
  950. JObject joDscgInfo = new JObject();
  951. joDscgInfo.Add("mdtrt_id", Global.pat.mdtrtID);
  952. joDscgInfo.Add("psn_no", Global.pat.psn_no); //人员编号
  953. joDscgInfo.Add("insutype", frmReg.insuType); //险种类型
  954. //joDscgInfo.Add("coner_name", JsonHelper.getJsonValue(joHisPatInfo, "coner_name")); //联系人姓名
  955. //joDscgInfo.Add("tel", JsonHelper.getJsonValue(joHisPatInfo, "tel")); //联系电话
  956. joDscgInfo.Add("endtime", Global.Set.hisDischargeTime); //结束时间DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
  957. joDscgInfo.Add("dise_codg", diseCodg); //病种编码
  958. joDscgInfo.Add("dise_name", diseName); //病种名称
  959. joDscgInfo.Add("oprn_oprt_code", frmReg.oprn_oprt_code); //手术操作代码
  960. joDscgInfo.Add("oprn_oprt_name", frmReg.oprn_oprt_name); //手术操作名称
  961. joDscgInfo.Add("fpsc_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fpsc_no")); //计划生育服务证号
  962. joDscgInfo.Add("matn_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.matn_type")); //生育类别
  963. joDscgInfo.Add("birctrl_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_type")); //计划生育手术类别
  964. joDscgInfo.Add("latechb_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.latechb_flag")); //晚育标志
  965. joDscgInfo.Add("geso_val", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.geso_val")); //孕周数
  966. joDscgInfo.Add("fetts", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fetts")); //胎次
  967. joDscgInfo.Add("fetus_cnt", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.fetus_cnt")); //胎儿数
  968. joDscgInfo.Add("pret_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.pret_flag")); //早产标志
  969. joDscgInfo.Add("birctrl_matn_date", ""); //计划生育手术或生育日期 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_matn_date") 20230228医保中心校验传正确时间或空
  970. joDscgInfo.Add("cop_flag", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dise_type_code")); //伴有并发症标志
  971. joDscgInfo.Add("dscg_dept_codg", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_codg")); //出院科室编码
  972. joDscgInfo.Add("dscg_dept_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_name")); //出院科室名称
  973. joDscgInfo.Add("dscg_bed", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_bed")); //出院床位
  974. joDscgInfo.Add("dscg_way", "1"); //离院方式
  975. joDscgInfo.Add("die_date", ""); //死亡日期
  976. joDscgInfo.Add("exp_content", ""); //字段扩展
  977. joDscgInfo.Add("insuplc_admdvs", Global.pat.insuplc_admdvs); //参保地医保区划
  978. joDscgInfo.Add("mdtrtarea_admvs", Global.inf.areaCode); //就医地医保区划
  979. JObject joRegInpar = new JObject();
  980. joRegInpar.Add("dscginfo", joDscgInfo);
  981. joRegInpar.Add("diseinfo", jaConvertedDiagnoses);
  982. //结算入参
  983. JObject joSetlInpar = new JObject();
  984. joSetlInpar.Add("psn_no", Global.pat.psn_no);
  985. joSetlInpar.Add("chrg_bchno", Global.pat.adm_Dr.ToString());
  986. joSetlInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  987. joSetlInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  988. joSetlInpar.Add("med_type", Global.pat.medType);
  989. joSetlInpar.Add("medfee_sumamt", JsonHelper.getDestValue(joSumFee, "data.Sumamt"));
  990. joSetlInpar.Add("psn_setlway", frmReg.psn_setlway); //结算方式
  991. joSetlInpar.Add("mdtrt_id", Global.pat.mdtrtID);
  992. joSetlInpar.Add("acct_used_flag", frmReg.personAccountUsedFlag);//个人账户使用标志
  993. joSetlInpar.Add("insutype", frmReg.insuType);//险种类型
  994. //joSetlInpar.Add("insuplc_admdvs", Global.pat.insuplc_admdvs);
  995. //joSetlInpar.Add("mdtrtarea_admvs", Global.inf.areaCode);
  996. joSetlInpar.Add("invono", "");
  997. joSetlInpar.Add("mid_setl_flag", "0");
  998. joSetlInpar.Add("fulamt_ownpay_amt", JsonHelper.getDestValue(joSumFee, "data.FullOwnPayAmount"));
  999. joSetlInpar.Add("overlmt_selfpay", JsonHelper.getDestValue(joSumFee, "data.OverLimitAmount"));
  1000. joSetlInpar.Add("preselfpay_amt", JsonHelper.getDestValue(joSumFee, "data.PreSelfPayAmount"));
  1001. joSetlInpar.Add("dscgTime", Global.Set.hisDischargeTime);
  1002. joSetlInpar.Add("minpacunt_drug_trac_cnt", Global.Set.minpacunt_drug_trac_cnt); //本次结算应上传最小包装追溯码数量
  1003. joSetlInpar.Add("mcs_trac_cnt", Global.Set.mcs_trac_cnt); //本次结算应上传耗材追溯码数量
  1004. JObject joDataExp = new JObject();
  1005. joDataExp.Add("acct_payamt", "0.00");
  1006. joDataExp.Add("cla_trt_flag", "");
  1007. joSetlInpar.Add("exp_content", joDataExp); //11111
  1008. JObject joOut = new JObject();
  1009. joOut.Add("DischargeRegister", joRegInpar);
  1010. joOut.Add("Settlement", joSetlInpar);
  1011. joOut.Add("errorCode", 0);
  1012. outParam = joOut.ToString();
  1013. return 0;
  1014. }
  1015. else
  1016. {
  1017. outParam = "收款员取消结算";
  1018. return -1;
  1019. }
  1020. }
  1021. catch (Exception ex)
  1022. {
  1023. outParam = "showDischargeRegisterForm 异常:" + ex.Message;
  1024. return -1;
  1025. }
  1026. }
  1027. public int showOutPatRegisterForm(out string regInfo)
  1028. {
  1029. //调用服务获取门诊诊断信息
  1030. string diagnoses;
  1031. if (hIS.getPatDiagnoses(Global.pat, out diagnoses) != 0)
  1032. {
  1033. regInfo = JsonHelper.setExceptionJson(-1, "getPatDiagnoses", diagnoses).ToString();
  1034. return -1;
  1035. }
  1036. JObject joHisRtnInfo = JObject.Parse(diagnoses);
  1037. //组织入参
  1038. JObject joReg = new JObject();
  1039. try
  1040. {
  1041. JArray jaDiagnoses = JArray.Parse(JsonHelper.getDestValue(joHisRtnInfo, "diseinfo"));
  1042. //登记面板实例
  1043. OutpatientRegistration frmReg = new OutpatientRegistration();
  1044. //frmReg.dblkcbxSettelmentWay.Enabled = false;
  1045. //险种类型
  1046. DataTable dtInsuType = (DataTable)frmReg.dblkcbxInsuranceType.DataSource;
  1047. for (int i = 0; i < dtInsuType.Rows.Count; i++)
  1048. {
  1049. if (dtInsuType.Rows[i]["Code"].ToString() == Global.pat.insuType)
  1050. {
  1051. frmReg.dblkcbxInsuranceType.Text = dtInsuType.Rows[i]["Name"].ToString();
  1052. frmReg.insuType = dtInsuType.Rows[i]["Code"].ToString();
  1053. }
  1054. }
  1055. //医疗类别
  1056. DataTable dtMedType = (DataTable)frmReg.dblkcbxMedicalType.DataSource;
  1057. for (int i = 0; i < dtMedType.Rows.Count; i++)
  1058. {
  1059. if (dtMedType.Rows[i]["Code"].ToString() == "11")
  1060. {
  1061. frmReg.dblkcbxMedicalType.Text = dtMedType.Rows[i]["Name"].ToString();
  1062. frmReg.med_type = dtMedType.Rows[i]["Code"].ToString();
  1063. }
  1064. }
  1065. //结算方式
  1066. DataTable dtSettlWay = (DataTable)frmReg.dblkcbxSettelmentWay.DataSource;
  1067. for (int i = 0; i < dtSettlWay.Rows.Count; i++)
  1068. {
  1069. if (dtSettlWay.Rows[i]["Code"].ToString() == "01")
  1070. {
  1071. frmReg.dblkcbxSettelmentWay.Text = dtSettlWay.Rows[i]["Name"].ToString();
  1072. frmReg.psn_setlway = dtSettlWay.Rows[i]["Code"].ToString();
  1073. }
  1074. }
  1075. //转换下主要诊断
  1076. for (int i = 0; i < jaDiagnoses.Count; i++)
  1077. {
  1078. string diag_type = JsonHelper.getDestValue((JObject)jaDiagnoses[i], "diag_type");
  1079. switch (diag_type)
  1080. {
  1081. case "1":
  1082. {
  1083. jaDiagnoses[i]["diag_type_name"] = new JObject();
  1084. jaDiagnoses[i]["diag_type_name"] = "西医主要诊断";
  1085. break;
  1086. }
  1087. case "2":
  1088. {
  1089. jaDiagnoses[i]["diag_type_name"] = new JObject();
  1090. jaDiagnoses[i]["diag_type_name"] = "西医其他诊断";
  1091. break;
  1092. }
  1093. case "3":
  1094. {
  1095. jaDiagnoses[i]["diag_type_name"] = new JObject();
  1096. jaDiagnoses[i]["diag_type_name"] = "中医主病诊断";
  1097. break;
  1098. }
  1099. case "4":
  1100. {
  1101. jaDiagnoses[i]["diag_type_name"] = new JObject();
  1102. jaDiagnoses[i]["diag_type_name"] = "中医主证诊断";
  1103. break;
  1104. }
  1105. }
  1106. }
  1107. frmReg.DtDiagnose = (DataTable)jaDiagnoses.ToObject(typeof(DataTable));
  1108. //展示登记面板
  1109. if (frmReg.ShowDialog() == DialogResult.OK)
  1110. {
  1111. string diseCodg = frmReg.diseCodg, diseName = frmReg.diseName;
  1112. //哈尔滨要求必须传病种。普通疾病传主诊断
  1113. if (string.IsNullOrEmpty(frmReg.diseCodg))
  1114. {
  1115. diseCodg = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_code");
  1116. };
  1117. if (string.IsNullOrEmpty(frmReg.diseName))
  1118. {
  1119. diseName = JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.dscg_maindiag_name");
  1120. };
  1121. //组织挂号入参
  1122. JObject joRegInpar = new JObject();
  1123. string occurTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1124. joRegInpar.Add("psn_no", Global.pat.psn_no);
  1125. joRegInpar.Add("insutype", frmReg.insuType);
  1126. //挂号时间 这里之所以不取当前时间是因为就诊信息上传会关联判断挂号的时间
  1127. joRegInpar.Add("begntime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); //20231122张振工单要求取当前时间JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime")
  1128. joRegInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  1129. joRegInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  1130. joRegInpar.Add("ipt_otp_no", Global.pat.adm_Dr);
  1131. joRegInpar.Add("atddr_no", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.atddr_no"));
  1132. joRegInpar.Add("dr_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.chfpdr_name"));
  1133. joRegInpar.Add("dept_code", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_codg"));
  1134. joRegInpar.Add("dept_name", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.adm_dept_name"));
  1135. joRegInpar.Add("exp_content", "");
  1136. joRegInpar.Add("caty", "72");
  1137. joReg.Add("data", joRegInpar);
  1138. //组织就诊信息入参
  1139. JObject joMdtrtinfo = new JObject();
  1140. for (int i = 0; i < jaDiagnoses.Count; i++)
  1141. {
  1142. jaDiagnoses[i]["vali_flag"] = new JObject();
  1143. jaDiagnoses[i]["vali_flag"] = "1";
  1144. jaDiagnoses[i]["diag_dept"] = "A10";
  1145. }
  1146. joMdtrtinfo.Add("mdtrt_id", Global.pat.mdtrtID);
  1147. joMdtrtinfo.Add("psn_no", Global.pat.psn_no); //人员编号
  1148. Global.pat.medType = frmReg.med_type;
  1149. joMdtrtinfo.Add("med_type", frmReg.med_type); //医疗类别
  1150. joMdtrtinfo.Add("begntime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); //开始时间20231122张振工单要求取当前时间 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.begntime")
  1151. joMdtrtinfo.Add("main_cond_dscr", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.main_cond_dscr")); //主要病情描述
  1152. joMdtrtinfo.Add("dise_codg", diseCodg); //病种编码
  1153. joMdtrtinfo.Add("dise_name", diseName); //病种名称
  1154. joMdtrtinfo.Add("birctrl_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_type")); //计划生育手术类别
  1155. joMdtrtinfo.Add("birctrl_matn_date", ""); //计划生育手术或生育日期 JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.birctrl_matn_date") 20230228医保中心校验传正确时间或空
  1156. joMdtrtinfo.Add("matn_type", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.matn_type")); //生育类别
  1157. joMdtrtinfo.Add("geso_val", JsonHelper.getDestValue(joHisRtnInfo, "mdtrtinfo.geso_val")); //孕周数
  1158. joMdtrtinfo.Add("exp_content", ""); //字段扩展
  1159. //组织结算入参
  1160. JObject joSetlInpar = new JObject();
  1161. joSetlInpar.Add("psn_no", Global.pat.psn_no);
  1162. joSetlInpar.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  1163. joSetlInpar.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  1164. joSetlInpar.Add("med_type", Global.pat.medType);
  1165. joSetlInpar.Add("medfee_sumamt", "");
  1166. joSetlInpar.Add("psn_setlway", frmReg.psn_setlway); //结算方式
  1167. joSetlInpar.Add("mdtrt_id", Global.pat.mdtrtID);
  1168. joSetlInpar.Add("chrg_bchno", Global.pat.adm_Dr.ToString());
  1169. joSetlInpar.Add("acct_used_flag", frmReg.personAccountUsedFlag);//个人账户使用标志
  1170. joSetlInpar.Add("insutype", frmReg.insuType);//险种类型
  1171. joSetlInpar.Add("pub_hosp_rfom_flag", "");
  1172. joSetlInpar.Add("exp_content", "");
  1173. joSetlInpar.Add("minpacunt_drug_trac_cnt", Global.Set.minpacunt_drug_trac_cnt); //本次结算应上传最小包装追溯码数量
  1174. joSetlInpar.Add("mcs_trac_cnt", Global.Set.mcs_trac_cnt); //本次结算应上传耗材追溯码数量
  1175. joReg.Add("mdtrtinfo", joMdtrtinfo);
  1176. joReg.Add("diseinfo", jaDiagnoses);
  1177. joReg.Add("settlement", joSetlInpar);
  1178. regInfo = joReg.ToString();
  1179. return 0;
  1180. }
  1181. else
  1182. {
  1183. regInfo = "收费员取消操作!";
  1184. return -1;
  1185. }
  1186. }
  1187. catch (Exception ex)
  1188. {
  1189. regInfo = "登记界面显示异常:" + ex.Message;
  1190. return -1;
  1191. }
  1192. }
  1193. /// <summary>
  1194. /// 上传费用到中心
  1195. /// </summary>
  1196. /// <returns></returns>
  1197. ///
  1198. public int uploadFee(string funNO,int singleCount,out string outParam)
  1199. {
  1200. outParam = "";
  1201. //获取IS费用
  1202. if (hIS.getHisFee(Global.pat, out outParam) != 0)
  1203. {
  1204. return -1;
  1205. }
  1206. //调用医保平台转换HIS费用(转换医保编码等)
  1207. JObject joHisFee = JObject.Parse(outParam);
  1208. if (mIS.convertHisFeeWithInsuCode(joHisFee, out outParam) != 0)
  1209. {
  1210. return -2;
  1211. }
  1212. JArray jaFeeDetail = JArray.Parse(JsonHelper.getDestValue(JObject.Parse(outParam), "data"));
  1213. //按指定条数分割后上传,保存,更新
  1214. if (uploadFeeToCenter(funNO, singleCount, jaFeeDetail, out outParam) != 0)
  1215. {
  1216. return -3;
  1217. }
  1218. else
  1219. {
  1220. outParam = "成功";
  1221. return 0;
  1222. }
  1223. }
  1224. public int uploadFeeToCenter(string funNO,int singleCount,JArray jaFeeDetail, out string outParam)
  1225. {
  1226. outParam = "";
  1227. string errMsg;
  1228. try
  1229. {
  1230. JArray jaTmp = new JArray();
  1231. for (int i = 0; i < jaFeeDetail.Count; i++)
  1232. {
  1233. jaFeeDetail[i]["chrg_bchno"] = Global.pat.adm_Dr.ToString();
  1234. jaFeeDetail[i]["med_type"] = Global.pat.medType;
  1235. jaFeeDetail[i]["bilg_dept_codg"] = "A10";
  1236. jaFeeDetail[i]["bilg_dept_name"] = "眼科";
  1237. jaFeeDetail[i]["acord_dept_codg"] = "A10";
  1238. jaFeeDetail[i]["acord_dept_name"] = "眼科";
  1239. if (jaFeeDetail[i]["validFlag"].ToString() == "N") continue;
  1240. jaTmp.Add(jaFeeDetail[i]);
  1241. if (((i + 1) % singleCount == 0) || ((i + 1) == jaFeeDetail.Count))
  1242. {
  1243. JObject joFeeDetail = new JObject();
  1244. joFeeDetail.Add("feedetail", jaTmp);
  1245. JObject joRtn = invoker.invokeCenterService(funNO, JsonHelper.setCenterInpar(funNO, joFeeDetail.ToString()));
  1246. if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0)
  1247. {
  1248. outParam = errMsg;
  1249. return -1;
  1250. }
  1251. else
  1252. {
  1253. //成功后插入医保平台
  1254. if (mIS.insertFee(jaTmp, out errMsg) != 0)
  1255. {
  1256. outParam = outParam + errMsg;
  1257. return -1;
  1258. }
  1259. //更新2301返回的数据
  1260. if (mIS.updateFee(JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result")), out errMsg) != 0)
  1261. {
  1262. outParam = outParam + errMsg;
  1263. return -1;
  1264. }
  1265. }
  1266. jaTmp = new JArray();
  1267. }
  1268. }
  1269. return 0;
  1270. }
  1271. catch (Exception ex)
  1272. {
  1273. outParam = "uploadFee 异常:" + ex.Message;
  1274. return -1;
  1275. }
  1276. }
  1277. /// <summary>
  1278. /// 获取登记时候传入的信息,并赋值给patients结构体
  1279. /// </summary>
  1280. /// <param name="businessType"></param>
  1281. /// <param name="inparam"></param>
  1282. /// <param name="pat"></param>
  1283. public void GetRegPatInfo(string businessType, JObject joInparam,out Patients pat)
  1284. {
  1285. pat = new Patients();
  1286. try
  1287. {
  1288. switch (businessType)
  1289. {
  1290. case "M2"://门诊登记
  1291. {
  1292. break;
  1293. }
  1294. case "M2C"://门诊登记撤销
  1295. {
  1296. break;
  1297. }
  1298. case "Z0"://住院修改
  1299. {
  1300. break;
  1301. }
  1302. case "Z2"://入院登记
  1303. {
  1304. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "params[0].admID"));
  1305. pat.psn_no = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.output.baseinfo.psn_no");
  1306. pat.insuType = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.selectedInsuInfo.insutype");
  1307. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.selectedInsuInfo.insuplc_admdvs");
  1308. pat.mdtrtcertType = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.selectedInsuInfo.mdtrt_cert_type");
  1309. pat.mdtrtcertNO = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.selectedInsuInfo.mdtrt_cert_no");
  1310. pat.name = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.output.baseinfo.psn_name");
  1311. pat.psn_type = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.selectedInsuInfo.psn_type");
  1312. pat.certType = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.output.baseinfo.psn_cert_type");
  1313. pat.certNO = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.output.baseinfo.certno");
  1314. pat.billID = JsonHelper.getDestValue(joInparam, "params[0].billID");
  1315. pat.card.SN = JsonHelper.getDestValue(joInparam, "params[0].patientInfo.cardinfo.card_sn");
  1316. break;
  1317. }
  1318. case "Z2C"://入院登记取消
  1319. {
  1320. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "params[0].admID"));
  1321. pat.psn_no = JsonHelper.getDestValue(joInparam, "params[0].psn_no");
  1322. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "params[0].mdtrt_id");
  1323. //pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "params[0].insuplc_admdvs");
  1324. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1325. break;
  1326. }
  1327. case "Z6"://出院登记
  1328. {
  1329. Global.Set.hisDischargeTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime")).ToString("yyyy-MM-dd HH:mm:ss");
  1330. break;
  1331. }
  1332. case "Z6C"://出院登记取消
  1333. {
  1334. pat.psn_no = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_no");
  1335. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "insuAdmObj.mdtrt_id");
  1336. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1337. break;
  1338. }
  1339. default:
  1340. {
  1341. break;
  1342. }
  1343. }
  1344. //如果患者异地的则就医地需要该为419900
  1345. if (Global.pat.insuplc_admdvs != "")
  1346. {
  1347. if (Global.pat.insuplc_admdvs.Substring(0, 4) != Global.inf.areaCode.Substring(0, 4))
  1348. {
  1349. Global.inf.areaCode = "419900";
  1350. }
  1351. }
  1352. }
  1353. catch (Exception ex)
  1354. {
  1355. Global.writeLog("GetRegPatInfo(" + businessType + ")", JsonHelper.Compress(joInparam),"PAT结构体设置异常:" + ex.Message);
  1356. }
  1357. }
  1358. /// <summary>
  1359. /// 获取费用上传时前端传入的信息,并赋值给patients结构体
  1360. /// </summary>
  1361. /// <param name="businessType"></param>
  1362. /// <param name="joInparam"></param>
  1363. /// <param name="pat"></param>
  1364. public void GetFeeHisInfo(string businessType, JObject joInparam, out Patients pat)
  1365. {
  1366. pat = new Patients();
  1367. try
  1368. {
  1369. switch (businessType)
  1370. {
  1371. case "M3"://门诊费用上传
  1372. {
  1373. break;
  1374. }
  1375. case "M3C"://门诊费用撤销
  1376. {
  1377. break;
  1378. }
  1379. case "Z3"://入院费用上传
  1380. {
  1381. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.admID"));
  1382. pat.psn_no = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_no");
  1383. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "insuAdmObj.mdtrt_id");
  1384. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1385. pat.name = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_name");
  1386. pat.billID = JsonHelper.getDestValue(joInparam, "params[0].billID");
  1387. pat.recordID = "";
  1388. break;
  1389. }
  1390. case "Z3C"://住院费用上传取消
  1391. {
  1392. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.admID"));
  1393. pat.psn_no = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_no");
  1394. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "insuAdmObj.mdtrt_id");
  1395. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1396. break;
  1397. }
  1398. default:
  1399. {
  1400. break;
  1401. }
  1402. }
  1403. //如果患者异地的则就医地需要该为369900
  1404. if (Global.pat.insuplc_admdvs != "")
  1405. {
  1406. if (Global.pat.insuplc_admdvs.Substring(0, 4) != Global.inf.areaCode.Substring(0, 4))
  1407. {
  1408. Global.inf.areaCode = "369900";
  1409. }
  1410. }
  1411. }
  1412. catch (Exception ex)
  1413. {
  1414. Global.writeLog("GetFeeHisInfo(" + businessType + ")", JsonHelper.Compress(joInparam), "PAT结构体设置异常:" + ex.Message);
  1415. }
  1416. }
  1417. /// <summary>
  1418. /// 获取结算时前端传入的信息,并赋值给patients结构体
  1419. /// </summary>
  1420. /// <param name="businessType"></param>
  1421. /// <param name="joInparam"></param>
  1422. /// <param name="pat"></param>
  1423. public void GetSettlementHisInfo(string businessType, JObject joInparam, out Patients pat)
  1424. {
  1425. pat = new Patients();
  1426. switch (businessType)
  1427. {
  1428. case "M4"://门诊预结算
  1429. {
  1430. break;
  1431. }
  1432. case "M4C"://门诊预结算撤销
  1433. {
  1434. break;
  1435. }
  1436. case "M5"://门诊结算
  1437. {
  1438. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "params[0].admID"));
  1439. pat.recordID = JsonHelper.getDestValue(joInparam, "params[0].recordID");
  1440. pat.billID = JsonHelper.getDestValue(joInparam, "params[0].billID");
  1441. Global.Set.minpacunt_drug_trac_cnt = JsonHelper.getDestValue(joInparam, "insuAdmObj.minpacunt_drug_trac_cnt");
  1442. Global.Set.mcs_trac_cnt = JsonHelper.getDestValue(joInparam, "insuAdmObj.mcs_trac_cnt");
  1443. Global.pat.insuplc_admdvs = "";
  1444. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays")))
  1445. {
  1446. Global.Set.hospitalizationsDays = 0;
  1447. }
  1448. else
  1449. {
  1450. Global.Set.hospitalizationsDays = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays"));
  1451. }
  1452. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes")))
  1453. {
  1454. Global.Set.hospitalizationsTimes = 0;
  1455. }
  1456. else
  1457. {
  1458. Global.Set.hospitalizationsTimes = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes"));
  1459. }
  1460. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime")))
  1461. {
  1462. Global.Set.hisAdmTime = "";
  1463. }
  1464. else
  1465. {
  1466. Global.Set.hisAdmTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime")).ToString("yyyy-MM-dd HH:mm:ss");
  1467. }
  1468. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime")))
  1469. {
  1470. Global.Set.hisDischargeTime = "";
  1471. }
  1472. else
  1473. {
  1474. Global.Set.hisDischargeTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime")).ToString("yyyy-MM-dd HH:mm:ss");
  1475. }
  1476. //Global.settl.hospitalizationsDays = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays"));
  1477. //Global.settl.hospitalizationsTimes = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes"));
  1478. //Global.settl.hisAdmTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime"));
  1479. //Global.settl.hisDischargeTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime"));
  1480. Global.writeLog(Global.Set.hospitalizationsDays.ToString());
  1481. Global.writeLog(Global.Set.hospitalizationsTimes.ToString());
  1482. Global.writeLog(Global.Set.hisAdmTime.ToString());
  1483. Global.writeLog(Global.Set.hisDischargeTime.ToString());
  1484. break;
  1485. }
  1486. case "M5C"://门诊结算撤销
  1487. {
  1488. pat.psn_no = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_no");
  1489. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "insuAdmObj.mdtrt_id");
  1490. pat.settlID = JsonHelper.getDestValue(joInparam, "insuAdmObj.setl_id");
  1491. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1492. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "params[0].admID"));
  1493. pat.recordID = JsonHelper.getDestValue(joInparam, "params[0].recordID");
  1494. pat.billID = JsonHelper.getDestValue(joInparam, "params[0].billID");
  1495. break;
  1496. }
  1497. case "Z4"://住院预结算
  1498. {
  1499. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.admID"));
  1500. pat.psn_no = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_no");
  1501. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "insuAdmObj.mdtrt_id");
  1502. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1503. pat.name = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_name");
  1504. pat.billID = JsonHelper.getDestValue(joInparam, "params[0].billID");
  1505. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays")))
  1506. {
  1507. Global.Set.hospitalizationsDays = 0;
  1508. }
  1509. else
  1510. {
  1511. Global.Set.hospitalizationsDays = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays"));
  1512. }
  1513. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes")))
  1514. {
  1515. Global.Set.hospitalizationsTimes = 0;
  1516. }
  1517. else
  1518. {
  1519. Global.Set.hospitalizationsTimes = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes"));
  1520. }
  1521. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime")))
  1522. {
  1523. Global.Set.hisAdmTime = "";
  1524. }
  1525. else
  1526. {
  1527. Global.Set.hisAdmTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime")).ToString("yyyy-MM-dd HH:mm:ss");
  1528. }
  1529. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime")))
  1530. {
  1531. Global.Set.hisDischargeTime = "";
  1532. }
  1533. else
  1534. {
  1535. Global.Set.hisDischargeTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime")).ToString("yyyy-MM-dd HH:mm:ss");
  1536. }
  1537. //Global.settl.hospitalizationsDays = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays"));
  1538. //Global.settl.hospitalizationsTimes = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes"));
  1539. //Global.settl.hisAdmTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime"));
  1540. //Global.settl.hisDischargeTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime"));
  1541. Global.writeLog(Global.Set.hospitalizationsDays.ToString());
  1542. Global.writeLog(Global.Set.hospitalizationsTimes.ToString());
  1543. Global.writeLog(Global.Set.hisAdmTime.ToString());
  1544. Global.writeLog(Global.Set.hisDischargeTime.ToString());
  1545. break;
  1546. }
  1547. case "Z4C"://住院预结算撤销
  1548. {
  1549. pat.psn_no = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_no");
  1550. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "insuAdmObj.mdtrt_id");
  1551. pat.settlID = JsonHelper.getDestValue(joInparam, "insuAdmObj.setl_id");
  1552. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1553. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "params[0].admID"));
  1554. pat.recordID = JsonHelper.getDestValue(joInparam, "params[0].recordID");
  1555. pat.billID = JsonHelper.getDestValue(joInparam, "params[0].billID");
  1556. break;
  1557. }
  1558. case "Z5"://住院结算
  1559. {
  1560. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.admID"));
  1561. pat.psn_no = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_no");
  1562. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "insuAdmObj.mdtrt_id");
  1563. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1564. pat.name = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_name");
  1565. pat.billID = JsonHelper.getDestValue(joInparam, "params[0].billID");
  1566. Global.Set.hisDischargeTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime")).ToString("yyyy-MM-dd HH:mm:ss");
  1567. Global.Set.minpacunt_drug_trac_cnt = JsonHelper.getDestValue(joInparam, "insuAdmObj.minpacunt_drug_trac_cnt");
  1568. Global.Set.mcs_trac_cnt = JsonHelper.getDestValue(joInparam, "insuAdmObj.mcs_trac_cnt");
  1569. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays")))
  1570. {
  1571. Global.Set.hospitalizationsDays = 0;
  1572. }
  1573. else
  1574. {
  1575. Global.Set.hospitalizationsDays = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays"));
  1576. }
  1577. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes")))
  1578. {
  1579. Global.Set.hospitalizationsTimes = 0;
  1580. }
  1581. else
  1582. {
  1583. Global.Set.hospitalizationsTimes = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes"));
  1584. }
  1585. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime")))
  1586. {
  1587. Global.Set.hisAdmTime = "";
  1588. }
  1589. else
  1590. {
  1591. Global.Set.hisAdmTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime")).ToString("yyyy-MM-dd HH:mm:ss");
  1592. }
  1593. if (string.IsNullOrEmpty(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime")))
  1594. {
  1595. Global.Set.hisDischargeTime = "";
  1596. }
  1597. else
  1598. {
  1599. Global.Set.hisDischargeTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime")).ToString("yyyy-MM-dd HH:mm:ss");
  1600. }
  1601. //Global.settl.hospitalizationsDays = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inDays"));
  1602. //Global.settl.hospitalizationsTimes = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.inTimes"));
  1603. //Global.settl.hisAdmTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.admDateTime"));
  1604. //Global.settl.hisDischargeTime = Convert.ToDateTime(JsonHelper.getDestValue(joInparam, "insuAdmObj.disDateTime"));
  1605. Global.writeLog(Global.Set.hospitalizationsDays.ToString());
  1606. Global.writeLog(Global.Set.hospitalizationsTimes.ToString());
  1607. Global.writeLog(Global.Set.hisAdmTime.ToString());
  1608. Global.writeLog(Global.Set.hisDischargeTime.ToString());
  1609. break;
  1610. }
  1611. case "Z5C"://住院结算撤销
  1612. {
  1613. pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInparam, "insuAdmObj.admID"));
  1614. pat.psn_no = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_no");
  1615. pat.mdtrtID = JsonHelper.getDestValue(joInparam, "insuAdmObj.mdtrt_id");
  1616. pat.insuplc_admdvs = JsonHelper.getDestValue(joInparam, "insuAdmObj.insuplc_admdvs");
  1617. pat.name = JsonHelper.getDestValue(joInparam, "insuAdmObj.psn_name");
  1618. pat.billID = JsonHelper.getDestValue(joInparam, "params[0].billID");
  1619. pat.settlID = JsonHelper.getDestValue(joInparam, "insuAdmObj.setl_id");
  1620. pat.SettID_HISJSB = pat.settlID; //这里是通过09010059交易获取到的结算ID
  1621. break;
  1622. }
  1623. default:
  1624. {
  1625. break;
  1626. }
  1627. }
  1628. //如果患者异地的则就医地需要该为369900
  1629. //if (Global.pat.insuplc_admdvs != "")
  1630. //{
  1631. // if (Global.pat.insuplc_admdvs.Substring(0, 4) != Global.inf.areaCode.Substring(0, 4))
  1632. // {
  1633. // Global.inf.areaCode = "369900";
  1634. // }
  1635. //}
  1636. }
  1637. ///对目录下载业务的封装
  1638. ///
  1639. public JObject DownloadDirectory(string funNO,string inParam)
  1640. {
  1641. string errorMessage = "", sRtn = "";
  1642. JObject joRtn = new JObject();
  1643. try
  1644. {
  1645. JObject joCenterRtn = cBus.DownDirecotry(funNO,inParam);
  1646. if (JsonHelper.parseCenterRtnValue(joCenterRtn,out errorMessage) != 0)
  1647. {
  1648. joRtn = JsonHelper.setExceptionJson(-100, "下载异常", errorMessage);
  1649. return joRtn;
  1650. }
  1651. string filename = JsonHelper.getDestValue(joCenterRtn, "output.filename");
  1652. //MessageBox.Show("1306查询目录文件号返回:"+ joCenterRtn.ToString());
  1653. JObject jo9102Rtn = cBus.SaveFile(joCenterRtn);
  1654. if (JsonHelper.parseIrisRtnValue(jo9102Rtn,out errorMessage) != 0)
  1655. {
  1656. joRtn = JsonHelper.setExceptionJson(-100, "保存文件异常", errorMessage);
  1657. return joRtn;
  1658. }
  1659. //解压缩
  1660. string zipFilePath = jo9102Rtn["filePath"].ToString();
  1661. string txtFileDir = System.Environment.CurrentDirectory + "\\Download";
  1662. string txtFilePath = txtFileDir + "\\" + filename.Substring(0, filename.Length - 4);
  1663. //string txtFilePath = Global.curEvt.path + "\\Download\\" + filename;
  1664. //MessageBox.Show("解压缩的txtFilePath:"+ zipFilePath+"|解压到目标路径:"+ txtFileDir+"|文件解析路径:"+ txtFilePath);
  1665. //昆明下载下来的文件是解压后的TXT
  1666. if (tools.ExtractFile(zipFilePath, txtFileDir, out errorMessage) != 0)
  1667. {
  1668. joRtn = JsonHelper.setExceptionJson(-100, "提取文件", errorMessage);
  1669. return joRtn;
  1670. }
  1671. joRtn = (JObject)jo9102Rtn.DeepClone();
  1672. joRtn["filePath"] = txtFilePath;
  1673. return joRtn;
  1674. }
  1675. catch (Exception ex)
  1676. {
  1677. joRtn = JsonHelper.setExceptionJson(-100, "下载中心目录", errorMessage);
  1678. return joRtn;
  1679. }
  1680. finally
  1681. {
  1682. Global.writeLog("HisMainBusiness.DownloadDirectory", inParam, joRtn.ToString());
  1683. }
  1684. }
  1685. /// <summary>
  1686. /// 字典下载
  1687. /// </summary>
  1688. /// <param name="inParam"></param>
  1689. /// <returns></returns>
  1690. public string downDictionary(string inParam)
  1691. {
  1692. JObject joCenterRtn = invoker.invokeCenterService("1901", inParam);
  1693. return joCenterRtn.ToString();
  1694. }
  1695. /// <summary>
  1696. /// 展示结算信息界面
  1697. /// </summary>
  1698. /// <param name="joSettlement"></param>
  1699. /// <param name="outParam"></param>
  1700. /// <returns></returns>
  1701. public int showSettlementForm(JObject joSettlement, out string outParam)
  1702. {
  1703. outParam = "";
  1704. string errMsg;
  1705. try
  1706. {
  1707. SettlementInfo frmSettlment = new SettlementInfo(joSettlement);
  1708. //相关信息转换到结算信息面板
  1709. if (frmSettlment.ShowDialog() == DialogResult.OK)
  1710. {
  1711. return 0;
  1712. }
  1713. else
  1714. {
  1715. outParam = "收款员取消";
  1716. return -1;
  1717. }
  1718. }
  1719. catch (Exception ex)
  1720. {
  1721. outParam = "showSettlementForm 异常:" + ex.Message;
  1722. return -1;
  1723. }
  1724. }
  1725. /// <summary>
  1726. /// 门诊预结算封装,返回正式结算的入参
  1727. /// </summary>
  1728. /// <param name="joSettlement"></param>
  1729. /// <param name="outParam"></param>
  1730. /// <returns></returns>
  1731. public int preSettlement_OutPat( JObject joSettlement, out string outParam)
  1732. {
  1733. outParam = "";
  1734. //预结算
  1735. JObject jo2206Data = new JObject();
  1736. jo2206Data.Add("data", joSettlement);
  1737. JObject jo2206Rtn = invoker.invokeCenterService("2206", JsonHelper.setCenterInpar("2206", jo2206Data));
  1738. if (JsonHelper.parseCenterRtnValue(jo2206Rtn, out outParam) != 0)
  1739. {
  1740. outParam = JsonHelper.setExceptionJson(-1, "出院预结算", outParam).ToString();
  1741. return -1;
  1742. }
  1743. //返回给HIS进行预结算判断
  1744. JObject joSetlinfo = JObject.Parse(JsonHelper.getDestValue(jo2206Rtn, "output.setlinfo"));
  1745. if (hIS.preSettlement(joSettlement, joSetlinfo, out outParam) != 0)
  1746. {
  1747. outParam = JsonHelper.setExceptionJson(-1, "返回结算信息给HIS", outParam).ToString();
  1748. return -1;
  1749. }
  1750. //编码转换
  1751. if (mIS.convertSettlementWithInsuCode(jo2206Rtn, out outParam) != 0)
  1752. {
  1753. outParam = JsonHelper.setExceptionJson(-1, "结算信息转换", outParam).ToString();
  1754. return -1;
  1755. }
  1756. JObject joSumFee = new JObject();
  1757. string errMsg = "";
  1758. //判断勾稽关系是否平
  1759. if (hIS.sumInsuRtnSettlInfo(JObject.Parse(JsonHelper.getDestValue(jo2206Rtn, "output.setlinfo")), out joSumFee, out errMsg) != 0)
  1760. {
  1761. outParam = "勾稽关系不符合标准,请联系管理员!" + errMsg;
  1762. return -1;
  1763. }
  1764. //展示结算信息
  1765. JObject joConverted = JObject.Parse(outParam);
  1766. if (showSettlementForm(joConverted, out outParam) != 0)
  1767. {
  1768. outParam = JsonHelper.setExceptionJson(-1, "结算信息展示", outParam).ToString();
  1769. return -1;
  1770. }
  1771. else
  1772. {
  1773. return 0;
  1774. }
  1775. }
  1776. /// <summary>
  1777. /// 预结算封装,返回正式结算的入参
  1778. /// </summary>
  1779. /// <param name="joSettlement"></param>
  1780. /// <param name="outParam"></param>
  1781. /// <returns></returns>
  1782. public int preSettlement(string funNO,out JObject joSettlement, out string outParam)
  1783. {
  1784. joSettlement = new JObject();
  1785. outParam = "";
  1786. string outPar = "";
  1787. //调用IRIS获取医保各项金额
  1788. if (mIS.getSumFee(out outPar) != 0)
  1789. {
  1790. outParam = JsonHelper.setExceptionJson(-1, "获取医保费用各项汇总金额", outPar).ToString();
  1791. return -1;
  1792. }
  1793. JObject joSumFee = JObject.Parse(outPar);
  1794. if ((JsonHelper.getDestValue(joSumFee, "data.Sumamt") == "") || (JsonHelper.getDestValue(joSumFee, "data.Sumamt") == "0"))
  1795. {
  1796. outParam = "请先右击选择【医保费用上传】!";
  1797. return -1;
  1798. }
  1799. //从云医保平台获取患者详细的医保登记信息
  1800. int type;
  1801. if (funNO == "2206")
  1802. {
  1803. type = 3; //门诊预结算
  1804. }
  1805. else
  1806. {
  1807. type = 1; //住院预结算
  1808. }
  1809. if (mIS.queryRegisterInfo(type, out outParam) != 0)
  1810. {
  1811. outParam = JsonHelper.setExceptionJson(-1, "查询患者云平台登记信息", outParam).ToString();
  1812. return -1;
  1813. }
  1814. JObject joReg = JObject.Parse(outParam);
  1815. Global.pat.medType = JsonHelper.getDestValue(joReg, "data.MedicalType");
  1816. Global.pat.insuType = JsonHelper.getDestValue(joReg, "data.InsuType");
  1817. if ((Global.pat.mdtrtcertType == "") || (Global.pat.mdtrtcertNO == ""))
  1818. {
  1819. Global.pat.mdtrtcertType = JsonHelper.getDestValue(joReg, "data.CertificateType");
  1820. Global.pat.mdtrtcertNO = JsonHelper.getDestValue(joReg, "data.CertificateNO");
  1821. }
  1822. //Global.pat.mdtrtcertType = JsonHelper.getDestValue(joReg, "data.CertificateType");
  1823. //Global.pat.mdtrtcertNO = JsonHelper.getDestValue(joReg, "data.CertificateNO");
  1824. Global.pat.certType = JsonHelper.getDestValue(joReg, "data.CertificateType");
  1825. Global.pat.certNO = JsonHelper.getDestValue(joReg, "data.CertificateNO");
  1826. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(joReg, "data.InsuranceAreaCode");
  1827. Global.pat.psn_type = Global.pat.insuType; //后面再改
  1828. if ((Global.pat.RYorCY == "2") && (Global.pat.medType == "26"))
  1829. {
  1830. Global.pat.DiseasecCode = JsonHelper.getDestValue(joReg, "data.DiseasecCode");
  1831. Global.pat.DiseasecName = JsonHelper.getDestValue(joReg, "data.DiseasecName");
  1832. }
  1833. //昆明结算前读卡核验身份
  1834. //string patInfo = "";
  1835. //if (readCard(out patInfo) != 0)
  1836. //{
  1837. // outParam = JsonHelper.setExceptionJson(-1, "readCard", patInfo).ToString();
  1838. // return -1;
  1839. //}
  1840. //调用服务获取门诊诊断信息
  1841. string diagnoses;
  1842. if (hIS.getPatDiagnoses(Global.pat, out diagnoses) != 0)
  1843. {
  1844. outParam = JsonHelper.setExceptionJson(-1, "getPatDiagnoses", diagnoses).ToString();
  1845. return -1;
  1846. }
  1847. JObject joDiagnoses = JObject.Parse(diagnoses);
  1848. //展示出院登记界面,选择结算方式等
  1849. if (showDischargeRegisterForm(funNO, joSumFee, joDiagnoses, out outParam) != 0)
  1850. {
  1851. outParam = JsonHelper.setExceptionJson(-1, "展示出院预结算界面", outParam).ToString();
  1852. return -1;
  1853. }
  1854. JObject joRtn = JObject.Parse(outParam);
  1855. JObject jo2303Inpar = JObject.Parse(JsonHelper.getDestValue(joRtn, "Settlement"));
  1856. JObject jo2402Inpar = JObject.Parse(JsonHelper.getDestValue(joRtn, "DischargeRegister"));
  1857. //昆明出院登记放再预结算之前
  1858. JObject jo2402Rtn = invoker.invokeCenterService("2402", JsonHelper.setCenterInpar("2402", jo2402Inpar));
  1859. string errMsg;
  1860. if (JsonHelper.parseCenterRtnValue(jo2402Rtn, out errMsg) != 0)
  1861. {
  1862. outParam = JsonHelper.setExceptionJson(-1, "预结算失败:出院登记失败", errMsg).ToString();
  1863. return -1;
  1864. }
  1865. //预结算
  1866. JObject jo2303Data = new JObject();
  1867. jo2303Data.Add("data", jo2303Inpar);
  1868. JObject jo2303Rtn = invoker.invokeCenterService(funNO, JsonHelper.setCenterInpar(funNO, jo2303Data));
  1869. if (JsonHelper.parseCenterRtnValue(jo2303Rtn, out outParam) != 0)
  1870. {
  1871. outParam = JsonHelper.setExceptionJson(-1, "出院预结算", outParam).ToString();
  1872. return -1;
  1873. }
  1874. //预结算结果传给HIS进行HIS判断
  1875. if (funNO == "2303")
  1876. {
  1877. //返回给HIS
  1878. JObject joSetlinfo = JObject.Parse(JsonHelper.getDestValue(jo2303Rtn, "output.setlinfo"));
  1879. JObject joParam = new JObject();
  1880. joParam.Add("admID", Global.pat.adm_Dr);
  1881. joParam.Add("recordID", Global.pat.recordID);
  1882. joParam.Add("billID", Global.pat.billID);
  1883. if (hIS.preSettlementInfo(joParam, joSetlinfo, out outParam) != 0)
  1884. {
  1885. outParam = JsonHelper.setExceptionJson(-1, "出院预结算", outParam).ToString();
  1886. return -1;
  1887. }
  1888. }
  1889. //编码转换
  1890. if (mIS.convertSettlementWithInsuCode(jo2303Rtn, out outParam) != 0)
  1891. {
  1892. outParam = JsonHelper.setExceptionJson(-1, "结算信息转换", outParam).ToString();
  1893. return -1;
  1894. }
  1895. //展示结算信息
  1896. JObject joConverted = JObject.Parse(outParam);
  1897. if (showSettlementForm(joConverted, out outParam) != 0)
  1898. {
  1899. outParam = JsonHelper.setExceptionJson(-1, "结算信息展示", outParam).ToString();
  1900. return -1;
  1901. }
  1902. else
  1903. {
  1904. joSettlement = (JObject)joRtn.DeepClone();
  1905. return 0;
  1906. }
  1907. }
  1908. public int returnToFrontEndAfterSettlement(JObject joCenterRtn,JObject joHisServieRtn, out string outParam)
  1909. {
  1910. outParam = "";
  1911. try
  1912. {
  1913. JObject johisInsuInfo = JObject.Parse(JsonHelper.getDestValue(joHisServieRtn, "result"));
  1914. johisInsuInfo.Add("setl_id", JsonHelper.getDestValue(joCenterRtn, "output.setlinfo.setl_id"));
  1915. JObject joTmp = (JObject)joCenterRtn.DeepClone();
  1916. joTmp.Add("hisInsuInfo", johisInsuInfo);
  1917. outParam = joTmp.ToString();
  1918. return 0;
  1919. }
  1920. catch (Exception ex)
  1921. {
  1922. outParam = "returnToFrontEndAfterSettlement:" + ex.Message;
  1923. return -1;
  1924. }
  1925. }
  1926. /// <summary>
  1927. /// 插入患者该次就诊参保信息
  1928. /// </summary>
  1929. /// <param name="mdtrtID"></param>
  1930. /// <param name="patInfo"></param>
  1931. /// <param name="outparam"></param>
  1932. /// <returns></returns>
  1933. public int insertPatCurInsuInfo(String patInfo, out string outparam)
  1934. {
  1935. Global.writeLog(" " + patInfo);
  1936. outparam = "";
  1937. try
  1938. {
  1939. JObject joPatInfo = JObject.Parse(patInfo);
  1940. JObject joBaseInfo = JObject.Parse(JsonHelper.getDestValue(joPatInfo, "output.baseinfo"));
  1941. JObject joInsuInfo = JObject.Parse(JsonHelper.getDestValue(joPatInfo, "selectedInsuInfo"));
  1942. JObject joIdetInfo = JObject.Parse(JsonHelper.getDestValue(joPatInfo, "selectedIdInfo"));
  1943. if (mIS.insertPatCurInsuInfo(joBaseInfo, joInsuInfo, joIdetInfo, out outparam) != 0)
  1944. {
  1945. return -1;
  1946. }
  1947. else
  1948. {
  1949. return 0;
  1950. }
  1951. }
  1952. catch (Exception e)
  1953. {
  1954. outparam = "插入患者该次就诊参保信息失败:" + e.Message;
  1955. return -1;
  1956. }
  1957. }
  1958. /// <summary>
  1959. /// 事前分析
  1960. /// </summary>
  1961. /// <param name="outparam"></param>
  1962. /// <returns></returns>
  1963. public int PreAnalysis(string trig_scen, string inparam, out string outparam)
  1964. {
  1965. outparam = "";
  1966. try
  1967. {
  1968. ////先签到
  1969. //JObject jo9001Rtn = new JObject();
  1970. //cBus.signIn(out jo9001Rtn);
  1971. if (trig_scen == "5")
  1972. {
  1973. outparam = inparam;
  1974. }
  1975. else
  1976. {
  1977. //获取HIS返回的内容
  1978. if (hIS.PreAnalysis(out outparam) != 0)
  1979. {
  1980. return -1;
  1981. }
  1982. }
  1983. PreAndInProcessAnalysis preAnalysis = new PreAndInProcessAnalysis(outparam);
  1984. if (preAnalysis.setPatientByHisBaseInfo(out outparam) != 0)
  1985. {
  1986. return -1;
  1987. }
  1988. outparam = preAnalysis.Get3101Inpar(trig_scen, Global.pat).ToString();
  1989. JObject joRtn = invoker.invokeCenterService("3101", JsonHelper.setCenterInpar("3101", outparam));
  1990. if (JsonHelper.parseCenterRtnValue(joRtn, out outparam) != 0)
  1991. {
  1992. return -1;
  1993. }
  1994. else
  1995. {
  1996. JArray jaResult = JArray.Parse(JsonHelper.getDestValue(joRtn, "output.result"));
  1997. string HasValues = JsonHelper.getDestValue(joRtn, "output.result[0].HasValues").ToString();
  1998. if (jaResult.HasValues)
  1999. {
  2000. PreAndInProcessAnalysisForm paipaForm = new PreAndInProcessAnalysisForm(joRtn);
  2001. if (paipaForm.ShowDialog() == DialogResult.OK)
  2002. {
  2003. return 0;
  2004. }
  2005. else
  2006. {
  2007. outparam = "事前事中审核不通过,操作员取消!";
  2008. return -1;
  2009. }
  2010. }
  2011. else
  2012. {
  2013. return 0;
  2014. }
  2015. if (HasValues == "")
  2016. {
  2017. outparam = "事前事中审核服务未返回详细说明!";
  2018. return -1;
  2019. }
  2020. }
  2021. }
  2022. catch (Exception ex)
  2023. {
  2024. outparam = ex.Message;
  2025. return -1;
  2026. }
  2027. }
  2028. /// <summary>
  2029. /// 事中分析
  2030. /// </summary>
  2031. /// <param name="outparam"></param>
  2032. /// <returns></returns>
  2033. public int InProcessAnalysis(out string outparam)
  2034. {
  2035. outparam = "";
  2036. try
  2037. {
  2038. //获取HIS返回的内容
  2039. if (hIS.PreAnalysis(out outparam) != 0)
  2040. {
  2041. return -1;
  2042. }
  2043. PreAndInProcessAnalysis preAnalysis = new PreAndInProcessAnalysis(outparam);
  2044. if (preAnalysis.setPatientByHisBaseInfo(out outparam) != 0)
  2045. {
  2046. return -1;
  2047. }
  2048. //outparam = preAnalysis.Get3101Inpar("5", Global.pat).ToString(); 20240614 苏国平、朱鹏飞要求更改
  2049. outparam = preAnalysis.Get3101Inpar("2", Global.pat).ToString();
  2050. JObject joRtn = invoker.invokeCenterService("3102", JsonHelper.setCenterInpar("3102", outparam));
  2051. return JsonHelper.parseCenterRtnValue(joRtn, out outparam);
  2052. }
  2053. catch (Exception ex)
  2054. {
  2055. outparam = ex.Message;
  2056. return -1;
  2057. }
  2058. finally
  2059. {
  2060. Global.writeLog("InProcessAnalysis", "", outparam);
  2061. }
  2062. }
  2063. public int PreAnalysisFeedBack(string funNo, string jrId, out string outparam)
  2064. {
  2065. outparam = "";
  2066. try
  2067. {
  2068. outparam = "";
  2069. string WarnType = "";
  2070. //【3103】事前事中服务反馈服务
  2071. if (funNo == "3101")
  2072. WarnType = "1";
  2073. else
  2074. if (funNo == "3102")
  2075. WarnType = "2";
  2076. JObject joInput3103Warns = new JObject();
  2077. joInput3103Warns.Add("warn_rslt_id", jrId);
  2078. joInput3103Warns.Add("dspo_way", Global.Set.dspoWay);
  2079. joInput3103Warns.Add("dspo_way_rea", Global.Set.dspoWayRea);
  2080. JArray ja3103Warns = new JArray();
  2081. ja3103Warns.Add(joInput3103Warns);
  2082. JObject joInput3103 = new JObject();
  2083. joInput3103.Add("warn_type", WarnType); //反馈类型 1.事前 2.事中
  2084. joInput3103.Add("warns", ja3103Warns);
  2085. JObject joInput = new JObject();
  2086. joInput.Add("data", joInput3103);
  2087. JObject jo3103Rtn = invoker.invokeCenterService("3103", JsonHelper.setCenterInpar("3103", joInput.ToString()));
  2088. if (JsonHelper.parseCenterRtnValue(jo3103Rtn, out string errMsg) != 0)
  2089. {
  2090. outparam = JsonHelper.setExceptionJson(-1, "【3103】事前事中服务反馈服务调用失败:", errMsg).ToString();
  2091. return -1;
  2092. }
  2093. return 0;
  2094. }
  2095. catch (Exception ex)
  2096. {
  2097. outparam = ex.Message;
  2098. return -1;
  2099. }
  2100. finally
  2101. {
  2102. Global.writeLog("PreAnalysisFeedBack", "", outparam);
  2103. }
  2104. }
  2105. }
  2106. }