ReadCardProcess.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. 
  2. using Newtonsoft.Json.Linq;
  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. using System.Windows.Forms;
  12. namespace PTMedicalInsurance.Business.Core.SelfServiceMachine.Process.ReadCard
  13. {
  14. class ReadCardProcess:AbstractProcess
  15. {
  16. public override CallResult Process(JObject input)
  17. {
  18. outParam = "";
  19. outParam = "";
  20. string errorMsg = "";
  21. string sOutPar;
  22. string pCardinfo = "";
  23. string pBusCardinfo = "";
  24. JObject joRtn = new JObject();
  25. JObject joCardInfo = new JObject();
  26. JObject joInput = new JObject();
  27. CardReader_JIL CardRead = new CardReader_JIL();
  28. InvokeHelper invoker = new InvokeHelper();
  29. try
  30. {
  31. Global.writeLog($"Global.ssmp.cardType:{Global.ssmp.cardType}");
  32. Global.pat.certType = "01";
  33. //电子凭证
  34. if (Global.ssmp.cardType == "02")
  35. {
  36. Global.pat.card.transType = "ec.query";
  37. Global.pat.mdtrtcertType = "01";
  38. Global.pat.certType = "01";
  39. Random rd = new Random();
  40. int iNum = rd.Next();
  41. joCardInfo.Add("operatorId", Global.user.ID);
  42. joCardInfo.Add("operatorName", Global.user.name);
  43. joCardInfo.Add("officeId", Global.user.officeID);
  44. joCardInfo.Add("officeName", Global.user.officeName);
  45. joCardInfo.Add("orgId", Global.inf.hospitalNO);
  46. joCardInfo.Add("businessType", "01101");
  47. joCardInfo.Add("deviceType", "01101");
  48. //调用电子凭证动态库NationECCode.dll获取身份信息
  49. JObject JoInput = new JObject();
  50. JoInput.Add("orgId", Global.inf.hospitalNO);
  51. JoInput.Add("transType", Global.pat.card.transType);
  52. JoInput.Add("data", joCardInfo);
  53. JoInput.Add("extra", "");
  54. //MessageBox.Show("电子凭证解码地址:" + Global.inf.ecURL + ",入参:" + JoInput.ToString());
  55. CardRead.InsuQRCodeQuery(Global.inf.ecURL, JoInput.ToString(), out sOutPar);
  56. if (JsonHelper.getDestValue(JObject.Parse(sOutPar), "code") != "0")
  57. {
  58. outParam = "读电子凭证失败!" + outParam;
  59. return Error(outParam);
  60. }
  61. Global.pat.ecToken = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.ecToken");
  62. Global.pat.name = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.userName");
  63. Global.pat.IDType = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idType");
  64. Global.pat.IDNO = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idNo");
  65. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.insuOrg");
  66. Global.pat.mdtrtcertNO = Global.pat.ecToken;
  67. Global.pat.certType = Global.pat.IDType;
  68. Global.pat.certNO = Global.pat.IDNO;
  69. }
  70. //身份证
  71. if (Global.ssmp.cardType == "04")
  72. {
  73. //长春身份证调用动态库读卡
  74. if (CardRead.readSFZ(out pCardinfo, out pBusCardinfo) != 0)
  75. {
  76. outParam = "社保卡读卡异常ReadCardBas:" + pCardinfo;
  77. return Error(outParam);
  78. }
  79. Global.writeLog("医保读卡" + "(" + Global.curEvt.URL + ")", pCardinfo, pBusCardinfo);//医保读卡日志输出
  80. //【社保卡读卡成功返回】
  81. Global.pat.mdtrtcertType = "02";
  82. Global.pat.mdtrtcertNO = pBusCardinfo.Replace('\u0000', ' ').Trim();
  83. Global.pat.certType = "01";
  84. Global.pat.certNO = tools.getDestPosStrBySpliter(pCardinfo, 1);//获取身份证号
  85. Global.pat.name = tools.getDestPosStrBySpliter(pCardinfo, 2);//姓名
  86. Global.pat.card.SN = "";
  87. Global.pat.insuplc_admdvs = tools.getDestPosStrBySpliter(pCardinfo, 1).ToString().Substring(0, 6);
  88. }
  89. //社保卡
  90. if (Global.ssmp.cardType == "03")
  91. {
  92. if (CardRead.readCard(out pCardinfo, out pBusCardinfo) != 0)
  93. {
  94. outParam = "社保卡读卡异常ReadCardBas:" + pCardinfo;
  95. return Error("读社保卡");
  96. }
  97. Global.writeLog("医保读卡", pCardinfo, pBusCardinfo);//医保读卡日志输出
  98. //【社保卡读卡成功返回】
  99. Global.pat.insuplc_admdvs = tools.getDestPosStrBySpliter(pCardinfo, 1); //参保地
  100. Global.pat.card.NO = tools.getDestPosStrBySpliter(pCardinfo, 2); //社会保障号码
  101. Global.pat.certNO = tools.getDestPosStrBySpliter(pCardinfo, 3); //卡号
  102. Global.pat.card.SN = tools.getDestPosStrBySpliter(pCardinfo, 4); //卡识别码
  103. Global.pat.name = tools.getDestPosStrBySpliter(pCardinfo, 5); //姓名
  104. //Global.pat.certType = "90";
  105. Global.pat.certType = "01";
  106. Global.pat.mdtrtcertType = "03";
  107. Global.pat.mdtrtcertNO = pBusCardinfo.Replace('\u0000', ' ').Trim();//长春医保卡卡凭证所有涉及凭证,传参需传医保读卡第二个返参
  108. Global.pat.certNO = Global.pat.card.NO;
  109. }
  110. //人脸识别
  111. if (Global.ssmp.cardType == "05")
  112. {
  113. Global.pat.mdtrtcertType = "01";
  114. Global.pat.card.transType = "cn.nhsa.ec.auth";
  115. Global.pat.certType = "01";
  116. Random rd = new Random();
  117. int iNum = rd.Next();
  118. string sLSH = DateTime.Now.ToString("yyyyMMddHHmmss") + Global.inf.hospitalNO + iNum.ToString().Substring(0, 5);
  119. joCardInfo.Add("operatorId", Global.user.ID);
  120. joCardInfo.Add("operatorName", Global.user.name);
  121. joCardInfo.Add("officeId", Global.user.officeID);
  122. joCardInfo.Add("officeName", Global.user.officeName);
  123. joCardInfo.Add("orgId", Global.inf.hospitalNO);
  124. joCardInfo.Add("businessType", "01101");
  125. JObject JoGetAuthInfo = new JObject();
  126. JoGetAuthInfo.Add("outBizNo", sLSH);
  127. JoGetAuthInfo.Add("extData", "");
  128. JObject JoInputAuth = new JObject();
  129. JoInputAuth.Add("orgId", Global.inf.hospitalNO);
  130. JoInputAuth.Add("transType", Global.pat.card.transType);
  131. JoInputAuth.Add("data", JoGetAuthInfo);
  132. JoInputAuth.Add("extra", "");
  133. //调用刷脸认证接口cn.nhsa.ec.auth返回授权信息authNo
  134. CardRead.InsuQRCodeQuery(Global.inf.ecURL, JoInputAuth.ToString(), out sOutPar);
  135. if (JsonHelper.getDestValue(JObject.Parse(sOutPar), "code") != "0")
  136. {
  137. outParam = "调用刷脸认证接口" + Global.pat.card.transType + "失败:" + sOutPar;
  138. return Error(outParam);
  139. }
  140. //成功返回授权信息
  141. string auth = sOutPar;
  142. JObject JoAuthOut = new JObject();
  143. JoAuthOut.Add("outBizNo", DateTime.Now.ToString("YYYYMMDDHHNNSS") + Global.inf.hospitalNO + iNum.ToString().Substring(0, 5));
  144. JoAuthOut.Add("authNo", auth);
  145. JoAuthOut.Add("extData", "");
  146. joCardInfo = (JObject)JoAuthOut.DeepClone();
  147. //调用电子凭证动态库NationECCode.dll获取身份信息
  148. JObject JoInput = new JObject();
  149. JoInput.Add("orgId", Global.inf.hospitalNO);
  150. JoInput.Add("transType", Global.pat.card.transType);
  151. JoInput.Add("data", joCardInfo);
  152. JoInput.Add("extra", "");
  153. //MessageBox.Show("电子凭证解码地址:" + Global.inf.ecURL + ",入参:" + JoInput.ToString());
  154. CardRead.InsuQRCodeQuery(Global.inf.ecURL, JoInput.ToString(), out sOutPar);
  155. if (JsonHelper.getDestValue(JObject.Parse(sOutPar), "code") != "0")
  156. {
  157. outParam = "调用电子凭证人脸识别失败:" + sOutPar;
  158. return Error(outParam);
  159. }
  160. Global.pat.ecToken = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.ecToken");
  161. Global.pat.name = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.userName");
  162. Global.pat.IDType = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idType");
  163. Global.pat.IDNO = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.idNo");
  164. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(sOutPar), "data.insuOrg");
  165. Global.pat.mdtrtcertNO = Global.pat.ecToken;
  166. Global.pat.certType = Global.pat.IDType;
  167. Global.pat.certNO = Global.pat.IDNO;
  168. }
  169. if (Global.pat.OtherProv != 0)
  170. {
  171. Global.pat.insuplc_admdvs = Global.pat.card.SearchAdmCode;
  172. //MessageBox.Show(Global.pat.card.SearchAdmCode + Global.pat.card.SearchAdmName);
  173. }
  174. #region 【调用1101获取人员信息】
  175. if (trade1101(out outParam) != 0)
  176. return Error();
  177. else
  178. return Success(outParam);
  179. #endregion
  180. return Exception(-1, "读卡", outParam);
  181. }
  182. catch (Exception ex)
  183. {
  184. return Error("异常:" + ex.Message);
  185. }
  186. }
  187. /// <summary>
  188. /// 通过证件号获取基本信息(无卡)
  189. /// </summary>
  190. /// <param name="cardNo"></param>
  191. /// <param name="outParam"></param>
  192. /// <returns></returns>
  193. public int trade1101(out string outParam)
  194. {
  195. #region【1101获取身份信息】
  196. JObject joData = new JObject();
  197. joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  198. joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  199. joData.Add("card_sn", Global.pat.card.SN);
  200. joData.Add("begntime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  201. joData.Add("psn_cert_type", Global.pat.certType);
  202. joData.Add("certno", Global.pat.certNO); //证件号码
  203. joData.Add("psn_name", Global.pat.name);
  204. JObject joInput = new JObject();
  205. joInput.Add("data", joData);
  206. JObject joRtn = invoker.invokeCenterService(TradeEnum.PatientInfo.GetCode(), JsonHelper.setCenterInpar("1101", joInput));
  207. if (JsonHelper.parseCenterRtnValue(joRtn, out outParam) != 0)
  208. {
  209. outParam = "读卡失败:" + outParam;
  210. return -1;
  211. }
  212. else
  213. {
  214. //joRtn.Add("cardinfo",joCardInfo);
  215. outParam = joRtn.ToString();
  216. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(outParam), "output.insuinfo.insuplc_admdvs"); //参保地
  217. Global.pat.certNO = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.certno"); //证件号码
  218. Global.pat.psn_no = JsonHelper.getDestValue(JObject.Parse(outParam), "output.baseinfo.psn_no"); //人员编号
  219. outParam = outParam.Replace(@"\", "").Replace("\"{", "{").Replace("}\"", "}");
  220. return 0;
  221. }
  222. #endregion
  223. }
  224. }
  225. }