InvokeHelper.cs 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028
  1. /******************************************************************************
  2. * 文件名称: InvokeHelper.cs
  3. * 文件说明: 调用助手,调用方法的封装
  4. * 当前版本: V1.0
  5. * 创建日期: 2022-04-12
  6. *
  7. * 2020-04-12: 增加 businessDLLInvoke 方法
  8. * 2020-04-12: 增加 writeLog 方法
  9. * 2020-04-14: 增加 businessDLLInvoke(重载) 方法
  10. * 2020-04-14: 增加 irisServiceInvoke 方法
  11. ******************************************************************************/
  12. using Newtonsoft.Json.Linq;
  13. using System;
  14. using System.Collections.Generic;
  15. using System.IO;
  16. using System.Linq;
  17. using System.Net;
  18. using System.Text;
  19. using System.Threading.Tasks;
  20. using System.Windows.Forms;
  21. using PTMedicalInsurance.Helper;
  22. using Newtonsoft.Json;
  23. using PTMedicalInsurance.Common;
  24. using PTMedicalInsurance.Variables;
  25. using System.Runtime.InteropServices;
  26. using PTMedicalInsurance.Forms;
  27. namespace PTMedicalInsurance.Helper
  28. {
  29. class InvokeHelper
  30. {
  31. private string serviceURL;
  32. private string authorization;
  33. /// <summary>
  34. /// 初始化函数
  35. /// </summary>
  36. /// <param name="fixmedins_code"></param>
  37. /// <param name="infosyscode"></param>
  38. /// <param name="infosyssign"></param>
  39. /// <param name="url"></param>
  40. /// <param name="pErrMsg"></param>
  41. /// <returns></returns>
  42. [DllImport("CHSInterface.dll", EntryPoint = "Init", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] //, ExactSpelling = false, CallingConvention = CallingConvention.StdCall
  43. static extern int Init(string fixmedins_code, string infosyscode, string infosyssign, string url, StringBuilder pErrMsg);
  44. /// <summary>
  45. /// 文件下载函数
  46. /// </summary>
  47. /// <param name="fixmedins_code"></param>
  48. /// <param name="infosyscode"></param>
  49. /// <param name="infosyssign"></param>
  50. /// <param name="inputData"></param>
  51. /// <param name="outputData"></param>
  52. /// <param name="pErrMsg"></param>
  53. /// <returns></returns>
  54. [DllImport("CHSInterface.dll", EntryPoint = "DownloadFile", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] //, ExactSpelling = false, CallingConvention = CallingConvention.StdCall
  55. static extern int DownloadFile(string fixmedins_code, string infosyscode, string infosyssign, string inputData, StringBuilder outputData, StringBuilder pErrMsg);
  56. /// <summary>
  57. /// 文件上传函数
  58. /// </summary>
  59. /// <param name="fixmedins_code"></param>
  60. /// <param name="infosyscode"></param>
  61. /// <param name="infosyssign"></param>
  62. /// <param name="inputData"></param>
  63. /// <param name="outputData"></param>
  64. /// <param name="pErrMsg"></param>
  65. /// <returns></returns>
  66. [DllImport("CHSInterface.dll", EntryPoint = "UploadFile", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] //, ExactSpelling = false, CallingConvention = CallingConvention.StdCall
  67. static extern int UploadFile(string fixmedins_code, string infosyscode, string infosyssign, string fileName,string inputData, StringBuilder outputData, StringBuilder pErrMsg);
  68. /// <summary>
  69. /// 通用业务函数
  70. /// </summary>
  71. /// <param name="fixmedins_code"></param>
  72. /// <param name="infosyscode"></param>
  73. /// <param name="infosyssign"></param>
  74. /// <param name="inputData"></param>
  75. /// <param name="outputData"></param>
  76. /// <param name="errmsg"></param>
  77. /// <returns></returns>
  78. [DllImport("CHSInterface.dll", EntryPoint = "BusinessHandle", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] //, ExactSpelling = false, CallingConvention = CallingConvention.StdCall
  79. static extern int BusinessHandle(string fixmedins_code, string infosyscode, string infosyssign, string inputData, StringBuilder outputData, StringBuilder errmsg);
  80. /// <summary>
  81. /// 通用业务函数
  82. /// </summary>
  83. /// <param name="fixmedins_code"></param>
  84. /// <param name="infosyscode"></param>
  85. /// <param name="infosyssign"></param>
  86. /// <param name="inputData"></param>
  87. /// <param name="outputData"></param>
  88. /// <param name="errmsg"></param>
  89. /// <returns></returns>
  90. [DllImport("CHSInterface.dll", EntryPoint = "BusinessHandleW", CharSet = CharSet.Unicode, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)] //, ExactSpelling = false, CallingConvention = CallingConvention.StdCall
  91. static extern int BusinessHandleW(StringBuilder fixmedins_code, StringBuilder infosyscode, StringBuilder infosyssign, StringBuilder inputData, StringBuilder outputData, StringBuilder errmsg);
  92. public InvokeHelper()
  93. {
  94. IniFile ini = new IniFile(Global.curEvt.path + @"\CenterServiceURL.ini");
  95. // Global.inf.centerURL = ini.ReadValue("CENTER", "url");
  96. if (Global.inf.interfaceDr == 12)//省
  97. {
  98. Global.inf.uploadURL = "http://10.88.29.31:80/fsi/api/fileupload/upload";
  99. Global.inf.downURL = "http://10.88.29.31:80/fsi/api/fileupload/download";
  100. Global.inf.ecURL = "http://10.67.0.49:8080/localcfc/api/hsecfc/localQrCodeQuery";
  101. }
  102. if (Global.inf.interfaceDr == 16)//市
  103. {
  104. Global.inf.uploadURL = "http://10.67.240.56:80/fsi/api/fileupload/upload";
  105. Global.inf.downURL = "http://10.67.240.56:80/fsi/api/fileupload/download";
  106. Global.inf.ecURL = "http://10.66.159.55:8080/localcfc/api/hsecfc/localQrCodeQuery";
  107. }
  108. // Global.inf.uploadURL = ini.ReadValue("CENTER", "upload");
  109. //Global.inf.downURL = ini.ReadValue("CENTER", "download");
  110. // Global.inf.ecURL = ini.ReadValue("CENTER", "ecToken");
  111. }
  112. /// <summary>
  113. /// iris服务调用的封装
  114. /// </summary>
  115. /// <param name="data"></param>
  116. /// <returns></returns>
  117. public JObject invokeIrisService(string data, string serviceDesc)
  118. {
  119. string rtn = "", url = "";
  120. JObject joRtn = new JObject();
  121. try
  122. {
  123. //先根据用户请求的uri构造请求地址
  124. url = serviceURL;
  125. ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
  126. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
  127. //创建Web访问对象
  128. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
  129. //把用户传过来的数据转成“UTF-8”的字节流
  130. byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
  131. //添加头部信息
  132. myRequest.Method = "POST";
  133. myRequest.ContentLength = buf.Length;
  134. myRequest.ContentType = "application/json";
  135. myRequest.Headers.Add("Authorization", authorization);
  136. myRequest.MaximumAutomaticRedirections = 1;
  137. myRequest.AllowAutoRedirect = true;
  138. //发送请求
  139. Stream stream = myRequest.GetRequestStream();
  140. stream.Write(buf, 0, buf.Length);
  141. stream.Close();
  142. //获取接口返回值
  143. //通过Web访问对象获取响应内容
  144. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  145. rtn = getResponseData(myResponse);
  146. joRtn = JObject.Parse(rtn);
  147. return joRtn;
  148. }
  149. catch (Exception ex)
  150. {
  151. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  152. rtn = JsonConvert.SerializeObject(joRtn);
  153. return joRtn;
  154. }
  155. }
  156. /// <summary>
  157. /// HIS服务调用的封装
  158. /// </summary>
  159. /// <param name="data"></param>
  160. /// <returns></returns>
  161. ///
  162. public JObject invokeHISService(string data, string serviceDesc)
  163. {
  164. JObject joRtn = new JObject();
  165. try
  166. {
  167. //先根据用户请求的uri构造请求地址
  168. serviceURL = string.Format("{0}/{1}", Global.hisConfig.ip, Global.hisConfig.url);
  169. authorization = Global.hisConfig.authorization;
  170. joRtn = invokeIrisService(data, serviceDesc);
  171. return joRtn;
  172. }
  173. catch (Exception ex)
  174. {
  175. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  176. return joRtn;
  177. }
  178. finally
  179. {
  180. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), JsonHelper.Compress(joRtn));
  181. }
  182. }
  183. /// <summary>
  184. /// 医保平台服务调用的封装
  185. /// </summary>
  186. /// <param name="data"></param>
  187. /// <returns></returns>
  188. public JObject invokeInsuService(string data, string serviceDesc)
  189. {
  190. string rtn = "";
  191. JObject joRtn = new JObject();
  192. try
  193. {
  194. //先根据用户请求的uri构造请求地址
  195. serviceURL = string.Format("{0}/{1}", Global.insuConfig.ip, Global.insuConfig.url);
  196. authorization = Global.insuConfig.authorization;
  197. joRtn = invokeIrisService(data, serviceDesc);
  198. rtn = JsonConvert.SerializeObject(joRtn);
  199. //if (serviceDesc == "插入签到信息")
  200. //{
  201. // MessageBox.Show("插入签到信息入参:" + data +"|返回值:"+ rtn.ToString()+"|"+ Global.insuConfig.url);
  202. //}
  203. return joRtn;
  204. }
  205. catch (Exception ex)
  206. {
  207. joRtn = JsonHelper.setExceptionJson(-1, serviceDesc, ex.Message);
  208. rtn = JsonConvert.SerializeObject(joRtn);
  209. return joRtn;
  210. }
  211. finally
  212. {
  213. Global.writeLog_Iris(serviceDesc + "(" + serviceURL + ")" + "Authorization:" + (authorization), JsonHelper.Compress(data), rtn);
  214. }
  215. }
  216. /// <summary>
  217. /// 医保中心Post服务调用封装
  218. /// </summary>
  219. /// <param name="data"></param>
  220. /// <returns></returns>
  221. private JObject invokeCenterService(string data)
  222. {
  223. string postContent = "";
  224. JObject joRtn = new JObject();
  225. try
  226. {
  227. Global.writeLog(string.Format("调用中心{0}接口入参:{1}",data, Global.curEvt.URL));
  228. //创建一个HTTP请求
  229. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  230. //Post请求方式
  231. request.Method = "POST";
  232. //string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  233. //string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  234. //string BusinessID = Global.inf.BusinessID; //服务商ID
  235. //string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  236. //string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  237. //内容类型
  238. request.ContentType = "application/json";
  239. //昆明增加头部信息
  240. //string sTemp = timestamp + BusinessID + nonce;
  241. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  242. //string signature = Encrypt.SHA256EncryptStr(sTemp);
  243. //request.Headers.Add("hsf_signature", signature);
  244. //request.Headers.Add("hsf_timestamp", timestamp);
  245. //request.Headers.Add("hsf_nonce", nonce);
  246. //request.Headers.Add("fixmedins_code", InsuHosID);
  247. //request.Headers.Add("infosyscode", CreditID);
  248. //设置参数,并进行URL编码
  249. string paraUrlCoded = data;//System.Web.HttpUtility.UrlEncode(jsonParas);
  250. byte[] payload;
  251. //将Json字符串转化为字节
  252. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  253. //设置请求的ContentLength
  254. request.ContentLength = payload.Length;
  255. //发送请求,获得请求流
  256. Stream writer;
  257. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  258. //将请求参数写入流
  259. writer.Write(payload, 0, payload.Length);
  260. writer.Close();//关闭请求流
  261. // String strValue = "";//strValue为http响应所返回的字符流
  262. HttpWebResponse response = null;
  263. try
  264. {
  265. //获得响应流
  266. response = (HttpWebResponse)request.GetResponse();
  267. }
  268. catch (Exception ex)
  269. {
  270. return JsonHelper.setExceptionJson(-99, "centerServeiceInvok中获得响应流异常", ex.Message);
  271. }
  272. postContent = getResponseData(response);
  273. joRtn = JObject.Parse(postContent);//返回Json数据
  274. if (joRtn.ContainsKey("body")) {
  275. joRtn = (JObject)joRtn.GetValue("body");
  276. }
  277. return joRtn;
  278. }
  279. catch (Exception ex)
  280. {
  281. postContent = "调用中心服务异常" + ex.Message;
  282. joRtn.Add("infcode", -1);
  283. joRtn.Add("err_msg", "invokeCenterService(1):" + ex.Message);
  284. return joRtn;
  285. }
  286. }
  287. private string getResponseData(HttpWebResponse response) {
  288. string data = "";
  289. if (response != null)
  290. {
  291. Stream s = response.GetResponseStream();
  292. StreamReader sRead = new StreamReader(s);
  293. data = sRead.ReadToEnd();
  294. sRead.Close();
  295. response.Close();
  296. }
  297. return data;
  298. }
  299. /// <summary>
  300. /// 调用医保动态库文件下载函数 CM 20220925
  301. /// </summary>
  302. /// <param name="fixmedins_code"></param>
  303. /// <param name="infosyscode"></param>
  304. /// <param name="infosyssign"></param>
  305. /// <param name="inputData"></param>
  306. /// <param name="outputData"></param>
  307. /// <param name="pErrMsg"></param>
  308. /// <returns>0或小于0</returns>
  309. private int invokeDownloadFileByDLL(string fixmedins_code, string infosyscode, string infosyssign, string inputData, ref string outputData, ref string pErrMsg)
  310. {
  311. pErrMsg = "";
  312. outputData = "";
  313. try
  314. {
  315. StringBuilder errmsgSb = new StringBuilder(4096);
  316. StringBuilder outSb = new StringBuilder(40960);
  317. int pRtn = DownloadFile(fixmedins_code, infosyscode, infosyssign, inputData, outSb, errmsgSb);
  318. if (pRtn < 0)
  319. {
  320. pErrMsg = errmsgSb.ToString();
  321. return -1;
  322. }
  323. else
  324. {
  325. outputData = outSb.ToString();
  326. }
  327. return pRtn;
  328. }
  329. catch (Exception ex)
  330. {
  331. pErrMsg = "invokeInitByDLL.DownloadFile 异常:" + ex.Message;
  332. return -1;
  333. }
  334. finally
  335. {
  336. Global.writeLog("invokeInitByDLL.DownloadFile 医保动态库文件下载函数", inputData, outputData);
  337. }
  338. }
  339. /// <summary>
  340. /// 这个是调用业务服务的invokeCenterService
  341. /// </summary>
  342. /// <param name="funNO"></param>
  343. /// <param name="data"></param>
  344. /// <returns></returns>
  345. public JObject invokeCenterService(string funNO, JObject data)
  346. {
  347. JObject joRtn = new JObject();
  348. string outPar = "";
  349. try
  350. {
  351. // 动态调试模式
  352. if (Global.curEvt.enabledDebug)
  353. {
  354. CenterResult center = new CenterResult();
  355. center.setTradeNo(funNO);
  356. if (center.ShowDialog() == DialogResult.OK)
  357. {
  358. outPar = center.returnData;
  359. return JObject.Parse(outPar);
  360. }
  361. }
  362. //Global.inf.centerURL = "http://10.67.240.74:8086/1.0.0/hsa-fsi-"+funNO;
  363. string prefix = Global.inf.centerURL;
  364. switch (funNO)
  365. {
  366. case "9101":
  367. prefix = Global.inf.uploadURL;
  368. break;
  369. case "9102":
  370. prefix = Global.inf.downURL;
  371. break;
  372. default:
  373. prefix = Global.inf.centerURL;
  374. break;
  375. }
  376. Global.curEvt.URL = prefix + funNO;
  377. joRtn = invokeCenterService(data.ToString());
  378. outPar = JsonHelper.Compress(joRtn);
  379. return joRtn;
  380. }
  381. catch (Exception ex)
  382. {
  383. if (joRtn["infcode"] == null)
  384. { joRtn.Add("infcode", -1); }
  385. if (joRtn["err_msg"] == null)
  386. { joRtn.Add("err_msg", "invokeCenterService(2):" + ex.Message); }
  387. outPar = JsonHelper.Compress(joRtn);
  388. return joRtn;
  389. }
  390. finally
  391. {
  392. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  393. this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
  394. }
  395. }
  396. /// <summary>
  397. /// 这个是下载目录用的invokeCenterService
  398. /// </summary>
  399. /// <param name="funNO"></param>
  400. /// <param name="data"></param>
  401. /// <returns></returns>
  402. public JObject invokeCenterService(string funNO, string data)
  403. {
  404. JObject joRtn = new JObject();
  405. try
  406. {
  407. // 动态调试模式
  408. if (Global.curEvt.enabledDebug)
  409. {
  410. CenterResult center = new CenterResult();
  411. center.setTradeNo(funNO);
  412. if (center.ShowDialog() == DialogResult.OK)
  413. {
  414. string outPar = center.returnData;
  415. return JObject.Parse(outPar);
  416. }
  417. }
  418. //Global.inf.centerURL = "http://10.67.240.74:8086/1.0.0/hsa-fsi-" + funNO;
  419. Global.curEvt.URL = Global.inf.centerURL + funNO;
  420. joRtn = invokeCenterService(data);
  421. return joRtn;
  422. }
  423. catch (Exception ex)
  424. {
  425. if (joRtn["infcode"] == null)
  426. { joRtn.Add("infcode", -1); }
  427. if (joRtn["err_msg"] == null)
  428. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  429. return joRtn;
  430. }
  431. finally
  432. {
  433. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  434. this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
  435. }
  436. }
  437. /// <summary>
  438. /// 移动
  439. /// </summary>
  440. /// <param name="funNO"></param>
  441. /// <param name="data"></param>
  442. /// <returns></returns>
  443. public JObject invokeMPService(string funNO, string data)
  444. {
  445. JObject joRtn = new JObject();
  446. String outPar = "";
  447. try
  448. {
  449. //Global.inf.centerURL = "http://10.67.240.74:8086/1.0.0/hsa-fsi-" + funNO;
  450. Global.curEvt.URL = Global.inf.centerURL + funNO;
  451. joRtn = invokeCenterService(data);
  452. outPar = JsonHelper.Compress(joRtn);
  453. return joRtn;
  454. }
  455. catch (Exception ex)
  456. {
  457. if (joRtn["infcode"] == null)
  458. { joRtn.Add("infcode", -1); }
  459. if (joRtn["err_msg"] == null)
  460. { joRtn.Add("err_msg", "invokeCenterService(3):" + ex.Message); }
  461. outPar = JsonHelper.Compress(joRtn);
  462. return joRtn;
  463. }
  464. finally
  465. {
  466. Global.writeLog(funNO + "(" + Global.curEvt.URL + ")", JsonHelper.Compress(data), joRtn.ToString());
  467. this.saveCenterLog(JsonHelper.Compress(data), joRtn.ToString(), JsonHelper.Compress(data), joRtn.ToString());
  468. }
  469. }
  470. /// <summary>
  471. /// 设置医保动态库目录
  472. /// </summary>
  473. /// <param name="sPath"></param>
  474. /// <param name="pErrMsg"></param>
  475. /// <returns></returns>
  476. private void invokeSetDirByOCX(ref string pErrMsg)
  477. {
  478. try
  479. {
  480. //chsinterfaceyn.chsdllClass InterfaceBase_Yn = new chsinterfaceyn.chsdllClass();
  481. //InterfaceBase_Yn.SetDir(IntPath);
  482. }
  483. catch (Exception ex)
  484. {
  485. pErrMsg = "invokeInitByDLL.SetDir 异常:" + ex.Message;
  486. MessageBox.Show(pErrMsg);
  487. }
  488. finally
  489. {
  490. //Global.writeLog("invokeInitByDLL.SetDir设置医保动态库目录(" + IntPath + ")", "", pErrMsg);
  491. }
  492. }
  493. /// <summary>
  494. /// 医保目录txt文件下载
  495. /// </summary>
  496. /// <param name="data"></param>
  497. /// <returns></returns>
  498. public JObject DownloadCenterFile(string data)
  499. {
  500. string error = string.Empty; int errorCode = 0;
  501. string sRtn = "";
  502. try
  503. {
  504. JObject jsonInParam = JObject.Parse(data);
  505. // 去除外wrapper层便于通用
  506. Utils.removeWrapper(jsonInParam);
  507. string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
  508. string filePath = Global.curEvt.path + "\\Download\\" + fileName;
  509. //如果不存在目录,则创建目录
  510. if (!Directory.Exists(Global.curEvt.path + "\\Download"))
  511. {
  512. //创建文件夹
  513. DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");
  514. }
  515. if (File.Exists(filePath))
  516. {
  517. File.Delete(filePath);
  518. }
  519. FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  520. //创建一个HTTP请求
  521. Global.curEvt.URL = Global.inf.downURL;
  522. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Global.curEvt.URL);
  523. //Post请求方式
  524. request.Method = "POST";
  525. //string timestamp = TimeStamp.get13().ToString(); //当前时间戳(秒)
  526. //string nonce = Guid.NewGuid().ToString(); //非重复的随机字符串(十分钟内不能重复)
  527. //string InsuHosID = Global.inf.hospitalNO; //医疗机构ID
  528. //string CreditID = Global.inf.CreditID; //服务商统一社会信用代码
  529. //string BusinessID = Global.inf.BusinessID; //服务商ID
  530. //内容类型
  531. request.ContentType = "application/json";
  532. //昆明增加头部信息
  533. //string sTemp = timestamp + BusinessID + nonce;
  534. //Sha256 加密生成的签名 signature = sha256(hsf_timestamp + infosyssign + hsf_nonce)
  535. //string signature = Encrypt.SHA256EncryptStr(sTemp);
  536. //request.Headers.Add("hsf_signature", signature);
  537. //request.Headers.Add("hsf_timestamp", timestamp);
  538. //request.Headers.Add("hsf_nonce", nonce);
  539. //request.Headers.Add("fixmedins_code", InsuHosID);
  540. //request.Headers.Add("infosyscode", CreditID);
  541. //设置参数,并进行URL编码
  542. string paraUrlCoded = JsonHelper.toJsonString(jsonInParam);
  543. byte[] payload;
  544. //将Json字符串转化为字节
  545. payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
  546. //设置请求的ContentLength
  547. request.ContentLength = payload.Length;
  548. Stream writer;
  549. try
  550. {
  551. writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
  552. }
  553. catch (Exception)
  554. {
  555. writer = null;
  556. errorCode = -100;
  557. error = "连接服务器失败!";
  558. }
  559. //将请求参数写入流
  560. writer.Write(payload, 0, payload.Length);
  561. writer.Close();//关闭请求流
  562. // String strValue = "";//strValue为http响应所返回的字符流
  563. //发送请求并获取相应回应数据
  564. HttpWebResponse response = request.GetResponse() as HttpWebResponse;
  565. //直到request.GetResponse()程序才开始向目标网页发送Post请求
  566. Stream responseStream = response.GetResponseStream();
  567. //创建本地文件写入流
  568. byte[] bArr = new byte[1024];
  569. int iTotalSize = 0;
  570. int size = responseStream.Read(bArr, 0, (int)bArr.Length);
  571. while (size > 0)
  572. {
  573. iTotalSize += size;
  574. fs.Write(bArr, 0, size);
  575. size = responseStream.Read(bArr, 0, (int)bArr.Length);
  576. }
  577. fs.Close();
  578. responseStream.Close();
  579. dynamic joReturn = new JObject();
  580. joReturn.errorCode = errorCode;
  581. joReturn.errorMessage = error;
  582. joReturn.filePath = filePath;
  583. sRtn = joReturn.ToString();
  584. return joReturn;
  585. }
  586. catch (Exception ex)
  587. {
  588. errorCode = -100;
  589. error = ex.Message;
  590. dynamic joReturn = new JObject();
  591. joReturn.errorCode = errorCode;
  592. joReturn.errorMessage = error;
  593. sRtn = joReturn.ToString();
  594. return joReturn;
  595. }
  596. finally
  597. {
  598. Global.writeLog("DownloadCenterFile" +"(" + Global.curEvt.URL + ")", data, sRtn);
  599. }
  600. }
  601. /// <summary>
  602. /// 调用医保动态库初始化 CM 20220925
  603. /// </summary>
  604. /// <param name="fixmedins_code"></param>
  605. /// <param name="infosyscode"></param>
  606. /// <param name="infosyssign"></param>
  607. /// <param name="url"></param>
  608. /// <param name="pErrMsg"></param>
  609. /// <returns>0或小于0</returns>
  610. private int invokeInitByOCX(string fixmedins_code, string infosyscode, string infosyssign, string url, ref string pErrMsg)
  611. {
  612. //pErrMsg = "";
  613. JObject joRtn = new JObject();
  614. try
  615. {
  616. //chsinterfaceyn.chsdllClass InterfaceBase_Yn = new chsinterfaceyn.chsdllClass();
  617. //string pRtn = InterfaceBase_Yn.Init(fixmedins_code, infosyscode, infosyssign, url);
  618. //joRtn = JObject.Parse(pRtn);
  619. if (joRtn["infcode"].ToString() != "0")
  620. {
  621. pErrMsg = joRtn["err_msg"].ToString();
  622. return -1;
  623. }
  624. else
  625. {
  626. return 0;
  627. }
  628. }
  629. catch (Exception ex)
  630. {
  631. pErrMsg = "invokeInitByDLL.Init 异常:" + ex.Message;
  632. return -1;
  633. }
  634. finally
  635. {
  636. Global.writeLog("invokeInitByDLL.Init医保动态库初始化(" + url + ")", "", pErrMsg);
  637. }
  638. }
  639. /// <summary>
  640. /// 调用医保动态库通用业务函数 CM 20220925
  641. /// </summary>
  642. /// <param name="fixmedins_code"></param>
  643. /// <param name="infosyscode"></param>
  644. /// <param name="infosyssign"></param>
  645. /// <param name="inputData"></param>
  646. /// <param name="outputData"></param>
  647. /// <param name="pErrMsg"></param>
  648. /// <returns>0或小于0</returns>
  649. private int invokeBusiessByOCX(string fixmedins_code, string infosyscode, string infosyssign, string inputData, ref string outputData, ref string pErrMsg)
  650. {
  651. pErrMsg = "";
  652. outputData = "";
  653. JObject joRtn = new JObject();
  654. try
  655. {
  656. try
  657. {
  658. //chsinterfaceyn.chsdllClass InterfaceBase_Yn1 = new chsinterfaceyn.chsdllClass();
  659. //InterfaceBase_Yn1.SetDir(IntPath);
  660. }
  661. catch (Exception ex)
  662. {
  663. pErrMsg = "invokeInitByDLL.SetDir 异常:" + ex.Message;
  664. MessageBox.Show(pErrMsg);
  665. }
  666. finally
  667. {
  668. //Global.writeLog("invokeInitByDLL.SetDir设置医保动态库目录(" + IntPath + ")", "", pErrMsg);
  669. }
  670. inputData = inputData.Replace("\n", "").Replace("\t", "").Replace("\r", "");
  671. //chsinterfaceyn.chsdllClass InterfaceBase_Yn = new chsinterfaceyn.chsdllClass();
  672. //调用业务函数
  673. //string pRtn =InterfaceBase_Yn.BusinessHandleW(fixmedins_code, infosyscode, infosyssign, inputData);
  674. //string pRtn = InterfaceBase_Yn.UploadFile(fixmedins_code, infosyscode, infosyssign, Global.inf.fileName,inputData);
  675. //joRtn = JObject.Parse(pRtn);
  676. if (joRtn["infcode"].ToString() != "0")
  677. {
  678. pErrMsg = joRtn["err_msg"].ToString();
  679. //outputData = pRtn;
  680. return -1;
  681. }
  682. else
  683. {
  684. //outputData = pRtn;
  685. return 0;
  686. }
  687. }
  688. catch (Exception ex)
  689. {
  690. pErrMsg = "invokeInitByDLL.BusinessHandle 异常:" + ex.Message;
  691. return -1;
  692. }
  693. finally
  694. {
  695. Global.writeLog("invokeInitByDLL.BusinessHandle医保动态库通用业务函数", inputData, outputData);
  696. }
  697. }
  698. /// <summary>
  699. /// 医保动态库下载目录文件
  700. /// </summary>
  701. /// <param name="data"></param>
  702. /// <returns></returns>
  703. public JObject DownloadCenterFileByDll(string data)
  704. {
  705. string error = string.Empty; int errorCode = 0;
  706. string sRtn = "";
  707. try
  708. {
  709. JObject jsonInParam = JObject.Parse(data);
  710. string fileName = (string)jsonInParam["input"]["fsDownloadIn"]["filename"];
  711. string filePath = Global.curEvt.path + "\\Download\\" + fileName;
  712. //如果不存在目录,则创建目录
  713. if (!Directory.Exists(Global.curEvt.path + "\\Download"))
  714. {
  715. //创建文件夹
  716. DirectoryInfo dirInfo = Directory.CreateDirectory(Global.curEvt.path + "\\Download");
  717. }
  718. if (File.Exists(filePath))
  719. {
  720. File.Delete(filePath);
  721. }
  722. FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
  723. //创建一个HTTP请求
  724. Global.curEvt.URL = Global.inf.centerURL;
  725. int iRes = invokeDownloadFileByDLL(Global.inf.hospitalNO, Global.inf.CreditID, Global.inf.BusinessID, data.ToString(),ref sRtn, ref error);
  726. if (iRes == 0)
  727. {
  728. dynamic joReturn = new JObject();
  729. joReturn.errorCode = errorCode;
  730. joReturn.errorMessage = error;
  731. joReturn.filePath = filePath;
  732. sRtn = joReturn.ToString();
  733. return joReturn;
  734. }
  735. else
  736. {
  737. errorCode = -100;
  738. dynamic joReturn = new JObject();
  739. joReturn.errorCode = errorCode;
  740. joReturn.errorMessage = error;
  741. sRtn = joReturn.ToString();
  742. return joReturn;
  743. }
  744. }
  745. catch (Exception ex)
  746. {
  747. errorCode = -100;
  748. error = ex.Message;
  749. dynamic joReturn = new JObject();
  750. joReturn.errorCode = errorCode;
  751. joReturn.errorMessage = error;
  752. sRtn = joReturn.ToString();
  753. return joReturn;
  754. }
  755. finally
  756. {
  757. Global.writeLog("DownloadCenterFile" + "(" + Global.curEvt.URL + ")", data, sRtn);
  758. }
  759. }
  760. /// <summary>
  761. /// 保存中心交易日志到数据库
  762. /// </summary>
  763. /// <param name="inParam"></param>
  764. /// <param name="outParam"></param>
  765. /// <param name="inParamPlain"></param>
  766. /// <param name="outParamPlain"></param>
  767. private void saveCenterLog(string inParam, string outParam, string inParamPlain, string outParamPlain)
  768. {
  769. dynamic joIris = new JObject();
  770. string sRtn = "";
  771. try
  772. {
  773. //解析postContent,插入医保交易日志表
  774. JObject joInParam = new JObject(JObject.Parse(inParam));
  775. //解包
  776. JObject joIn = Utils.removeWrapper(joInParam);
  777. JObject joOut = new JObject(JObject.Parse(outParam));
  778. JObject joInPlain = new JObject(JObject.Parse(inParamPlain));
  779. JObject joOutPlain = new JObject(JObject.Parse(outParamPlain));
  780. JArray jaParams = new JArray();
  781. JObject joParam = new JObject();
  782. joParam.Add("inParam", JObject.FromObject(joIn));
  783. joParam.Add("outParam", JObject.FromObject(joOut));
  784. joParam.Add("inParamPlain", JObject.FromObject(joInPlain));
  785. joParam.Add("outParamPlain", JObject.FromObject(joOutPlain));
  786. joParam.Add("HospitalDr", Global.inf.hospitalDr);
  787. joParam.Add("InterfaceDr", Global.inf.interfaceDr);
  788. joParam.Add("updateUserID", Global.user.ID);
  789. joParam.Add("psn_no", Global.pat.psn_no);
  790. jaParams.Add(joParam);
  791. joIris.code = "09010021";
  792. joIris.Add("params", jaParams);
  793. //InvokeHelper invoker = new InvokeHelper();
  794. sRtn = invokeInsuService(joIris.ToString(), "保存日志到数据库").ToString();
  795. }
  796. catch (Exception ex)
  797. {
  798. sRtn = JsonHelper.setExceptionJson(-100, "保存日志异常", ex.Message).ToString();
  799. Global.writeLog_Iris("保存日志异常:" + sRtn.ToString());
  800. }
  801. }
  802. /**********************************************************调用DLL方式**************************************************************/
  803. public int InvokeInitByDLL(ref string pErrMsg)
  804. {
  805. //string pErrMsg = "";
  806. int pRtn =-1;
  807. JObject joRtn = new JObject();
  808. try
  809. {
  810. StringBuilder outSb = new StringBuilder(40960);
  811. pRtn = Init(Global.inf.hospitalNO, Global.inf.CreditID, Global.inf.BusinessID, Global.inf.centerURL, outSb);
  812. if (pRtn != 0)
  813. {
  814. pErrMsg = outSb.ToString();
  815. return -1;
  816. }
  817. else
  818. {
  819. return 0;
  820. }
  821. }
  822. catch (Exception ex)
  823. {
  824. pErrMsg = "invokeInitByDLL.Init 异常:" + ex.Message;
  825. return -1;
  826. }
  827. finally
  828. {
  829. Global.writeLog("InvokeInitByDLL(" + Global.inf.centerURL + ")", Global.inf.CreditID +":" + Global.inf.BusinessID,pRtn.ToString() + pErrMsg);
  830. }
  831. }
  832. private int invokeBusiessByDLL(string inputData, ref string outputData, ref string pErrMsg)
  833. {
  834. pErrMsg = "";
  835. outputData = "";
  836. JObject joRtn = new JObject();
  837. try
  838. {
  839. inputData = inputData.Replace("\n", "").Replace("\t", "").Replace("\r", "");
  840. StringBuilder errmsgSb = new StringBuilder(4096);
  841. StringBuilder outSb = new StringBuilder(40960);
  842. //调用业务函数
  843. int pRtn = BusinessHandle(Global.inf.hospitalNO, Global.inf.CreditID, Global.inf.BusinessID, inputData, outSb, errmsgSb);
  844. if (pRtn != 0)
  845. {
  846. outputData = outSb.ToString();
  847. pErrMsg = errmsgSb.ToString();
  848. return -1;
  849. }
  850. else
  851. {
  852. outputData = outSb.ToString();
  853. return 0;
  854. }
  855. }
  856. catch (Exception ex)
  857. {
  858. pErrMsg = "invokeInitByDLL.BusinessHandle 异常:" + ex.Message;
  859. return -1;
  860. }
  861. finally
  862. {
  863. Global.writeLog("CreditID11", Global.inf.CreditID, Global.inf.BusinessID);
  864. Global.writeLog("invokeInitByDLL.BusinessHandle医保动态库通用业务函数", inputData, outputData);
  865. }
  866. }
  867. private int invokeBusiessWByDLL(string inputData, ref string outputData, ref string pErrMsg)
  868. {
  869. pErrMsg = "";
  870. outputData = "";
  871. JObject joRtn = new JObject();
  872. try
  873. {
  874. //inputData = inputData.Replace("\n", "").Replace("\t", "").Replace("\r", "");
  875. StringBuilder errmsgSb = new StringBuilder(4096);
  876. StringBuilder outSb = new StringBuilder(40960);
  877. StringBuilder sbHospitalNO = new StringBuilder(Global.inf.hospitalNO);
  878. StringBuilder sbCreditID = new StringBuilder(Global.inf.CreditID);
  879. StringBuilder sbBusinessID = new StringBuilder(Global.inf.BusinessID);
  880. StringBuilder sbInput = new StringBuilder(inputData);
  881. //调用业务函数
  882. int pRtn = BusinessHandleW(sbHospitalNO, sbCreditID, sbBusinessID, sbInput, outSb, errmsgSb);
  883. if (pRtn != 0)
  884. {
  885. outputData = outSb.ToString();
  886. pErrMsg = errmsgSb.ToString();
  887. return -1;
  888. }
  889. else
  890. {
  891. outputData = outSb.ToString();
  892. return 0;
  893. }
  894. }
  895. catch (Exception ex)
  896. {
  897. pErrMsg = "invokeInitByDLL.BusinessHandle 异常:" + ex.Message;
  898. return -1;
  899. }
  900. finally
  901. {
  902. Global.writeLog("CreditID12", Global.inf.CreditID, Global.inf.BusinessID);
  903. Global.writeLog("invokeInitByDLL.BusinessHandleW医保动态库通用业务函数", inputData, outputData);
  904. }
  905. }
  906. private int invokeUploadFileByDLL(string inputData, ref string outputData, ref string pErrMsg)
  907. {
  908. pErrMsg = "";
  909. outputData = "";
  910. JObject joRtn = new JObject();
  911. try
  912. {
  913. inputData = inputData.Replace("\n", "").Replace("\t", "").Replace("\r", "");
  914. StringBuilder errmsgSb = new StringBuilder(4096);
  915. StringBuilder outSb = new StringBuilder(40960);
  916. //调用业务函数
  917. int pRtn = UploadFile(Global.inf.hospitalNO, Global.inf.CreditID, Global.inf.BusinessID, Global.inf.fileName,inputData, outSb, errmsgSb);
  918. if (pRtn != 0)
  919. {
  920. outputData = outSb.ToString();
  921. pErrMsg = errmsgSb.ToString();
  922. return -1;
  923. }
  924. else
  925. {
  926. outputData = outSb.ToString();
  927. return 0;
  928. }
  929. }
  930. catch (Exception ex)
  931. {
  932. pErrMsg = "invokeUploadFileByDLL.UploadFile 异常:" + ex.Message;
  933. return -1;
  934. }
  935. finally
  936. {
  937. Global.writeLog("invokeUploadFileByDLL.UploadFile医保动态库上传业务函数", inputData, outputData);
  938. }
  939. }
  940. }
  941. }