ReadCardProcess.cs 8.0 KB

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