HisMainBusiness.cs 99 KB

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