ReadCardProcess.cs 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. using Newtonsoft.Json.Linq;
  2. using PTMedicalInsurance.CardReaders;
  3. using PTMedicalInsurance.Common;
  4. using PTMedicalInsurance.Helper;
  5. using PTMedicalInsurance.Variables;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace PTMedicalInsurance.Business.Core.SelfServiceMachine.Process.ReadCard
  12. {
  13. class ReadCardProcess:AbstractProcess
  14. {
  15. public override CallResult Process(JObject input)
  16. {
  17. outParam = "";
  18. string sOutPar;
  19. JObject joRtn = new JObject();
  20. JObject joInput = new JObject();
  21. InvokeHelper invoker = new InvokeHelper();
  22. try
  23. {
  24. Global.pat.certType = "01";
  25. //电子凭证
  26. if (Global.ssmp.cardType == "02")
  27. {
  28. Global.pat.mdtrtcertType = "01";
  29. //CardReader reader = new CardReader();
  30. CardReader reader = CardReader.Instance;
  31. if (reader.ECQuery(out outParam) != 0)
  32. {
  33. outParam = "读电子凭证失败!" + outParam;
  34. return Error(outParam);
  35. };
  36. JObject joTmp = JObject.Parse(outParam);
  37. if (joTmp["code"].ToString() != "0")
  38. {
  39. outParam = "读电子凭证失败!" + joTmp["message"].ToString();
  40. return Error(outParam);
  41. }
  42. Global.pat.mdtrtcertNO = JsonHelper.getDestValue(joTmp, "data.ecToken");
  43. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(joTmp, "data.insuOrg");
  44. Global.pat.certType = JsonHelper.getDestValue(joTmp, "data.idType");
  45. Global.pat.certNO = JsonHelper.getDestValue(joTmp, "data.idNo");
  46. Global.pat.name = JsonHelper.getDestValue(joTmp, "data.userName");
  47. }
  48. //身份证
  49. if (Global.ssmp.cardType == "04")
  50. {
  51. if (Global.pat.card.SearchAdmKey != "")
  52. Global.pat.insuplc_admdvs = Global.pat.card.SearchAdmCode;
  53. Global.pat.mdtrtcertType = "02";
  54. //Global.pat.mdtrtcertNO = cc.sP_CertNO;
  55. Global.pat.certType = "01";
  56. //Global.pat.certNO = cc.sP_IDNO;
  57. //Global.pat.name = cc.PatName;
  58. Global.pat.card.SN = "";
  59. //物理读身份证
  60. //CardReader reader = new CardReader();
  61. CardReader reader = CardReader.Instance;
  62. //reader.Initialize(Global.inf.cardURL, Global.inf.areaCode);
  63. if (reader.ReadSFZ(out outParam) != 0)
  64. {
  65. outParam = "读身份证失败!" + outParam ;
  66. return Error(outParam);
  67. };
  68. Global.pat.mdtrtcertNO = JsonHelper.getDestValue(JObject.Parse(outParam), "IDCardNo");
  69. }
  70. //社保卡
  71. if (Global.ssmp.cardType == "03")
  72. {
  73. Global.pat.mdtrtcertType = "03";
  74. int rtn = 0;
  75. string basInfo = "", regInfo = "";
  76. //CardReader reader = new CardReader(Global.inf.cardURL, Global.inf.areaCode);
  77. //CardReader reader = CardReader.Instance;
  78. //reader.Initialize(Global.inf.cardURL, Global.inf.areaCode);
  79. //if (reader.Init() != 0)
  80. //{
  81. // outParam = "读社保卡,初始化失败!";
  82. // return Error("读社保卡");
  83. //};
  84. ////二代社保卡可用
  85. //if (reader.ReadCardBas(out basInfo, out regInfo) != 0)
  86. //{
  87. // outParam = "读社保卡,获取卡信息失败!" + basInfo;
  88. // return Error("读社保卡");
  89. //}
  90. //else
  91. //{
  92. // //【社保卡读卡成功返回】
  93. // Global.pat.insuplc_admdvs = tools.getDestPosStrBySpliterCardInfo(basInfo, 1); //参保地
  94. // Global.pat.certNO = tools.getDestPosStrBySpliterCardInfo(basInfo, 2); //社会保障号码
  95. // Global.pat.card.NO = tools.getDestPosStrBySpliterCardInfo(basInfo, 3); //卡号
  96. // Global.pat.card.SN = tools.getDestPosStrBySpliterCardInfo(basInfo, 4); //卡识别码
  97. // Global.pat.name = tools.getDestPosStrBySpliterCardInfo(basInfo, 5); //姓名
  98. // Global.pat.certType = "01";
  99. // Global.pat.mdtrtcertType = "03";
  100. // Global.pat.mdtrtcertNO = Global.pat.certNO;
  101. // //异地患者需要传卡号,否则超长错误
  102. // if (Global.pat.insuplc_admdvs.Substring(0, 2) != "44")
  103. // {
  104. // Global.pat.mdtrtcertNO = Global.pat.card.NO;
  105. // }
  106. //}
  107. //自助机内置的是华大的读卡器
  108. CardReaderByHdEmb reader = new CardReaderByHdEmb();
  109. if (reader.ICC_Reader_Open("USB1", out errMsg) != 0)
  110. {
  111. //return Error(errMsg);
  112. }
  113. if (reader.ReadCardBas(3, out basInfo) != 0)
  114. {
  115. outParam = "读社保卡,获取卡信息失败!" + basInfo;
  116. return Error("读社保卡");
  117. }
  118. else
  119. {
  120. //【社保卡读卡成功返回】
  121. Global.pat.insuplc_admdvs = tools.getDestPosStrBySpliterCardInfo(basInfo, 1); //参保地
  122. Global.pat.certNO = tools.getDestPosStrBySpliterCardInfo(basInfo, 2); //社会保障号码
  123. Global.pat.card.NO = tools.getDestPosStrBySpliterCardInfo(basInfo, 3); //卡号
  124. Global.pat.card.SN = tools.getDestPosStrBySpliterCardInfo(basInfo, 4); //卡识别码
  125. Global.pat.name = tools.getDestPosStrBySpliterCardInfo(basInfo, 5); //姓名
  126. Global.pat.certType = "01";
  127. Global.pat.mdtrtcertType = "03";
  128. Global.pat.mdtrtcertNO = Global.pat.certNO;
  129. //异地患者需要传卡号,否则超长错误
  130. if (Global.pat.insuplc_admdvs.Substring(0, 2) != "44")
  131. {
  132. Global.pat.mdtrtcertNO = Global.pat.card.NO;
  133. }
  134. }
  135. }
  136. if (trade1101(out outParam) == 0)
  137. {
  138. return Success();
  139. }
  140. return Exception(-1, "读卡", outParam);
  141. }
  142. catch (Exception ex)
  143. {
  144. return Error("异常:" + ex.Message);
  145. }
  146. }
  147. /// <summary>
  148. /// 通过证件号获取基本信息(无卡)
  149. /// </summary>
  150. /// <param name="cardNo"></param>
  151. /// <param name="outParam"></param>
  152. /// <returns></returns>
  153. public int trade1101(out string outParam)
  154. {
  155. #region【1101获取身份信息】
  156. JObject joData = new JObject();
  157. joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  158. joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  159. joData.Add("card_sn", Global.pat.card.SN);
  160. joData.Add("begntime", "");
  161. joData.Add("psn_cert_type", Global.pat.certType);
  162. joData.Add("certno", Global.pat.certNO); //证件号码
  163. joData.Add("psn_name", Global.pat.name);
  164. JObject joInput = new JObject();
  165. joInput.Add("data", joData);
  166. //InvokeHelper invoker = new InvokeHelper();
  167. JObject joRtn = invoker.invokeCenterService(TradeEnum.PatientInfo, joInput);
  168. if (JsonHelper.parseCenterRtnValue(joRtn, out outParam) != 0)
  169. {
  170. outParam = "读卡失败:" + outParam;
  171. return -1;
  172. }
  173. else
  174. {
  175. //joRtn.Add("cardinfo",joCardInfo);
  176. outParam = joRtn.ToString();
  177. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.insuplc_admdvs"); //参保地
  178. Global.pat.certNO = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.certno"); //证件号码
  179. Global.pat.psn_no = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.psn_no"); //人员编号
  180. outParam = outParam.Replace(@"\", "").Replace("\"{", "{").Replace("}\"", "}");
  181. return 0;
  182. }
  183. #endregion
  184. }
  185. }
  186. }