ReadCardProcess.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. 
  2. using AnHuiMI.Common;
  3. using Newtonsoft.Json.Linq;
  4. using PTMedicalInsurance.Common;
  5. using PTMedicalInsurance.Helper;
  6. using PTMedicalInsurance.Variables;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. namespace PTMedicalInsurance.Business.Core.SelfServiceMachine.Process.ReadCard
  14. {
  15. class ReadCardProcess:AbstractProcess
  16. {
  17. public override CallResult Process(JObject input)
  18. {
  19. outParam = "";
  20. string sOutPar;
  21. JObject joRtn = new JObject();
  22. JObject joCardInfo = new JObject();
  23. JObject joInput = new JObject();
  24. InvokeHelper invoker = new InvokeHelper();
  25. try
  26. {
  27. Global.writeLog($"Global.ssmp.cardType:{Global.ssmp.cardType}");
  28. Global.pat.certType = "01";
  29. //电子凭证
  30. if (Global.ssmp.cardType == "02")
  31. {
  32. Global.pat.mdtrtcertType = "01";
  33. outParam = ECTokenReader.ECQuery("1");
  34. }
  35. //身份证
  36. if (Global.ssmp.cardType == "04")
  37. {
  38. if (Global.pat.card.SearchAdmKey != "")
  39. Global.pat.insuplc_admdvs = Global.pat.card.SearchAdmCode;
  40. Global.pat.mdtrtcertType = "02";
  41. Global.pat.mdtrtcertNO = Global.pat.IDNO;
  42. Global.pat.certType = "01";
  43. Global.pat.certNO = Global.pat.IDNO;
  44. //Global.pat.name = cc.PatName;
  45. Global.pat.card.SN = "";
  46. }
  47. //社保卡
  48. if (Global.ssmp.cardType == "03")
  49. {
  50. //CardReader_HLJ cr = new CardReader_HLJ();
  51. //Global.pat.mdtrtcertType = "03";
  52. ////Global.pat.card.type = (cc.cbCardType.SelectedIndex + 1).ToString();
  53. ////Global.pat.card.level = "0" + (cc.cbCardLevel.SelectedIndex + 1).ToString();
  54. //Global.pat.certType = "01";
  55. CardReader_AH CardRead = new CardReader_AH();
  56. if (CardRead.ReadCardBas(0, Global.inf.hospitalNO, out sOutPar) != 0)
  57. {
  58. outParam = "社保卡读卡异常ReadCardBas:" + sOutPar;
  59. return Exception("读卡异常:" + sOutPar);
  60. }
  61. //【社保卡读卡成功返回】
  62. //发卡地区行政区划代码(卡识别码前 6 位)、社会保障号码、卡号、卡识别码、姓名、卡复位信息(仅取历史字节)、规范版本、发卡日期、卡有效期、终端机编号、终端设备号
  63. Global.pat.insuplc_admdvs = tools.getDestPosStrBySpliter(sOutPar, 1); //参保地
  64. if ((Global.inf.interfaceDr == 12) && (Global.pat.insuplc_admdvs == "340001"))
  65. {
  66. Global.pat.insuplc_admdvs = "349900";
  67. }
  68. if ((Global.inf.interfaceDr == 15) && (Global.pat.insuplc_admdvs == "340001"))
  69. {
  70. Global.pat.insuplc_admdvs = "349900";
  71. }
  72. Global.pat.card.NO = tools.getDestPosStrBySpliter(sOutPar, 2); //社会保障号码
  73. Global.pat.certNO = tools.getDestPosStrBySpliter(sOutPar, 3); //卡号
  74. Global.pat.card.SN = tools.getDestPosStrBySpliter(sOutPar, 4); //卡识别码
  75. Global.pat.name = tools.getDestPosStrBySpliter(sOutPar, 5); //姓名
  76. Global.pat.certType = "90";
  77. Global.pat.mdtrtcertType = "03";
  78. Global.pat.mdtrtcertNO = Global.pat.certNO;
  79. Global.pat.certNO = Global.pat.card.NO;
  80. Global.pat.mdtrtcertType = "03";
  81. Global.pat.card.type = "01";
  82. Global.pat.card.level = "01";
  83. Global.pat.certType = "01";
  84. }
  85. //人脸识别
  86. if (Global.ssmp.cardType == "05")
  87. {
  88. Global.pat.mdtrtcertType = "01";
  89. //Global.businessType = cc.businessType;
  90. Global.pat.mdtrtcertType = "01";
  91. Global.pat.certType = "01";
  92. Random rd = new Random();
  93. int iNum = rd.Next();
  94. string sLSH = DateTime.Now.ToString("YYYYMMDDHHNNSS") + Global.inf.hospitalNO + iNum.ToString().Substring(0, 5);
  95. joCardInfo.Add("operatorId", Global.user.ID);
  96. joCardInfo.Add("operatorName", Global.user.name);
  97. joCardInfo.Add("officeId", Global.user.officeID);
  98. joCardInfo.Add("officeName", Global.user.officeName);
  99. joCardInfo.Add("orgId", Global.inf.hospitalNO);
  100. joCardInfo.Add("businessType", Global.businessType);
  101. joCardInfo.Add("deviceType", Global.businessType);
  102. //1.调用人脸识别认证 cn.nhsa.ec.auth
  103. joCardInfo.Add("outBizNo", sLSH);
  104. joCardInfo.Add("extData", "");
  105. JObject JoInputAuth = new JObject();
  106. JoInputAuth.Add("orgId", Global.inf.hospitalNO);
  107. JoInputAuth.Add("transType", "cn.nhsa.ec.auth");
  108. JoInputAuth.Add("data", joCardInfo);
  109. JoInputAuth.Add("extra", "");
  110. CardReader CardRead = new CardReader();
  111. //调用刷脸认证接口cn.nhsa.ec.auth返回授权信息authNo
  112. CardRead.NationEcTrans(Global.inf.ecURL, JoInputAuth.ToString(), out sOutPar);
  113. if (JsonHelper.getDestValue(JObject.Parse(sOutPar), "code") != "0")
  114. {
  115. outParam = "调用刷脸认证接口cn.nhsa.ec.auth失败:" + sOutPar;
  116. return Exception(-2, "调用刷脸认证", outParam);
  117. }
  118. else
  119. {
  120. //成功返回授权信息
  121. string auth = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.authNo");
  122. JObject JoAuthCheckInput = new JObject();
  123. JoAuthCheckInput.Add("orgId", Global.inf.hospitalNO);
  124. JoAuthCheckInput.Add("outBizNo", DateTime.Now.ToString("yyyyMMddHHmmss") + Global.inf.hospitalNO + iNum.ToString().Substring(0, 5));
  125. JoAuthCheckInput.Add("authNo", auth);
  126. JoAuthCheckInput.Add("businessType", Global.pat.ecBusinessType ?? "01102");
  127. JoAuthCheckInput.Add("operatorId", Global.user.ID);
  128. JoAuthCheckInput.Add("operatorName", Global.user.name);
  129. JoAuthCheckInput.Add("officeId", Global.user.officeID);
  130. JoAuthCheckInput.Add("officeName", Global.user.officeName);
  131. JoAuthCheckInput.Add("extData", "");
  132. JObject JoAuthChck = new JObject();
  133. JoAuthChck.Add("orgId", Global.inf.hospitalNO);
  134. JoAuthChck.Add("transType", "cn.nhsa.auth.check");
  135. JoAuthChck.Add("data", JoAuthCheckInput);
  136. JoAuthChck.Add("extra", "");
  137. //2.调用刷脸认证接口cn.nhsa.ec.auth返回授权信息authNo
  138. CardRead.NationEcTrans(Global.inf.ecURL, JoAuthChck.ToString(), out sOutPar);
  139. if (JsonHelper.getDestValue(JObject.Parse(sOutPar), "code") != "0")
  140. {
  141. outParam = "调用刷脸授权获取医保身份接口cn.nhsa.auth.check失败:" + sOutPar;
  142. return Exception(-2, "人脸识别", outParam);
  143. }
  144. else
  145. {
  146. Global.pat.ecToken = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.ecToken");
  147. Global.pat.name = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.userName");
  148. Global.pat.IDType = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idType");
  149. Global.pat.IDNO = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idNo");
  150. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.insuOrg");
  151. Global.pat.mdtrtcertNO = Global.pat.ecToken;
  152. Global.pat.certType = Global.pat.IDType;
  153. Global.pat.certNO = Global.pat.IDNO;
  154. }
  155. }
  156. }
  157. if (Global.pat.OtherProv != 0)
  158. {
  159. Global.pat.insuplc_admdvs = Global.pat.card.SearchAdmCode;
  160. //MessageBox.Show(Global.pat.card.SearchAdmCode + Global.pat.card.SearchAdmName);
  161. }
  162. #region 【调用1101获取人员信息)】
  163. if (trade1101(out outParam) != 0)
  164. {
  165. return Error();
  166. }
  167. else
  168. {
  169. return Success(outParam);
  170. }
  171. #endregion
  172. return Exception(-1, "读卡", outParam);
  173. }
  174. catch (Exception ex)
  175. {
  176. return Error("异常:" + ex.Message);
  177. }
  178. }
  179. /// <summary>
  180. /// 通过证件号获取基本信息(无卡)
  181. /// </summary>
  182. /// <param name="cardNo"></param>
  183. /// <param name="outParam"></param>
  184. /// <returns></returns>
  185. public int trade1101(out string outParam)
  186. {
  187. #region【1101获取身份信息】
  188. JObject joData = new JObject();
  189. joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  190. joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  191. joData.Add("card_sn", Global.pat.card.SN);
  192. joData.Add("begntime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  193. joData.Add("psn_cert_type", Global.pat.certType);
  194. joData.Add("certno", Global.pat.certNO); //证件号码
  195. joData.Add("psn_name", Global.pat.name);
  196. JObject joInput = new JObject();
  197. joInput.Add("data", joData);
  198. //InvokeHelper invoker = new InvokeHelper();
  199. JObject joRtn = invoker.invokeCenterService(TradeEnum.PatientInfo.GetCode(), JsonHelper.setCenterInpar("1101", joInput));
  200. if (JsonHelper.parseCenterRtnValue(joRtn, out outParam) != 0)
  201. {
  202. outParam = "读卡失败:" + outParam;
  203. return -1;
  204. }
  205. else
  206. {
  207. //joRtn.Add("cardinfo",joCardInfo);
  208. outParam = joRtn.ToString();
  209. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.insuplc_admdvs"); //参保地
  210. Global.pat.certNO = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.certno"); //证件号码
  211. Global.pat.psn_no = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.psn_no"); //人员编号
  212. outParam = outParam.Replace(@"\", "").Replace("\"{", "{").Replace("}\"", "}");
  213. return 0;
  214. }
  215. #endregion
  216. }
  217. }
  218. }