ReadCardProcess.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. 
  2. using Newtonsoft.Json.Linq;
  3. using PTMedicalInsurance.Common;
  4. using PTMedicalInsurance.Helper;
  5. using PTMedicalInsurance.Variables;
  6. using PTMedicalInsurance.Forms;
  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. outParam = "";
  21. string password = "";
  22. string errorMsg = "";
  23. JObject joRtn = new JObject();
  24. JObject joCardInfo = new JObject();
  25. JObject joInput = new JObject();
  26. InvokeHelper invoker = new InvokeHelper();
  27. try
  28. {
  29. Global.writeLog($"Global.ssmp.cardType:{Global.ssmp.cardType}");
  30. Global.pat.certType = "01";
  31. //电子凭证
  32. if (Global.ssmp.cardType == "02")
  33. {
  34. JObject jodata = new JObject
  35. {
  36. { "operatorId", Global.user.ID },
  37. { "operatorName", Global.user.name },
  38. { "officeId", Global.user.officeID },
  39. { "officeName", Global.user.officeName },
  40. { "orgId", Global.inf.hospitalNO },
  41. { "businessType", "01101" },
  42. { "deviceType", "" }
  43. };
  44. JObject joInData = new JObject();
  45. joInData.Add("orgId", Global.inf.hospitalNO);
  46. joInData.Add("transType", "ec.query");
  47. joInData.Add("data", jodata);
  48. CardReader cr = new CardReader();
  49. string outData = "";
  50. string InData = joInData.ToString();
  51. string a = cr.NationEcTrans(Global.inf.ecURL, InData, out outData);
  52. if (a == "0000")
  53. {
  54. JObject joOut = JObject.Parse(outData);
  55. if (JsonHelper.getDestValue(joOut, "code") != "0")
  56. {
  57. outParam = JsonHelper.getDestValue(joOut, "message");
  58. return Error(outParam);
  59. }
  60. else
  61. {
  62. Global.pat.mdtrtcertType = "01";
  63. Global.pat.mdtrtcertNO = JsonHelper.getDestValue(joOut, "data.ecToken");
  64. Global.pat.name = JsonHelper.getDestValue(joOut, "data.userName");
  65. Global.pat.certType = JsonHelper.getDestValue(joOut, "data.idType");
  66. Global.pat.certNO = JsonHelper.getDestValue(joOut, "data.idNo");
  67. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(joOut, "data.insuOrg");
  68. }
  69. }
  70. else
  71. {
  72. outParam = outData;
  73. return Error(outParam);
  74. }
  75. }
  76. //身份证
  77. if (Global.ssmp.cardType == "04")
  78. {
  79. Global.pat.mdtrtcertType = "02";
  80. Global.pat.card.SN = "";
  81. //Global.pat.card.password = HaErBinEncrypt.EncryptBySM3HASH(cc.tbPassword.Text);
  82. Global.pat.certType = "01";
  83. Global.pat.card.NO = Global.pat.IDNO;
  84. Global.pat.certNO = Global.pat.IDNO;
  85. Global.pat.card.level = "03";
  86. Global.pat.name = "";
  87. }
  88. //社保卡
  89. if (Global.ssmp.cardType == "03")
  90. {
  91. CardReader_HLJ cr = new CardReader_HLJ();
  92. Global.pat.mdtrtcertType = "03";
  93. Global.pat.card.type = "03";
  94. string cardReaderRtn = cr.readCardBas(3, Global.inf.hospitalNO);
  95. if (tools.getDestPosStrBySpliter(cardReaderRtn, 1, ",") != "0")
  96. {
  97. outParam = "读社保卡卡信息失败!" + tools.getDestPosStrBySpliter(cardReaderRtn, 2, ",");
  98. return Error("读社保卡");
  99. }
  100. else
  101. {
  102. string cardInfo = tools.getDestPosStrBySpliter(cardReaderRtn, 2, ",");
  103. Global.pat.insuplc_admdvs = tools.getDestPosStrBySpliter(cardInfo, 1);
  104. Global.pat.certType = "01";
  105. Global.pat.certNO = tools.getDestPosStrBySpliter(cardInfo, 2);
  106. Global.pat.mdtrtcertNO = tools.getDestPosStrBySpliter(cardInfo, 3);
  107. Global.pat.card.NO = tools.getDestPosStrBySpliter(cardInfo, 3);
  108. Global.pat.card.SN = tools.getDestPosStrBySpliter(cardInfo, 4);
  109. Global.pat.name = tools.getDestPosStrBySpliter(cardInfo, 5);
  110. try
  111. {
  112. PasswordKeyboardForm pkf = new PasswordKeyboardForm();
  113. if (pkf.ShowDialog() == DialogResult.OK)
  114. {
  115. password = HaErBinEncrypt.EncryptBySM3HASH(pkf.PassWord);
  116. }
  117. else
  118. {
  119. return Error("您已取消输入社保卡密码!");
  120. }
  121. }
  122. catch (Exception ex)
  123. {
  124. outParam = "卡密加密异常!" + ex.Message;
  125. return Error("卡密加密");
  126. }
  127. Global.pat.card.password = password;
  128. Global.pat.card.level = "03";
  129. }
  130. }
  131. //人脸识别
  132. if (Global.ssmp.cardType == "05")
  133. {
  134. }
  135. //鉴权
  136. if (Global.ssmp.cardType != "02")
  137. {
  138. if (cBus.Authenticate(out errorMsg) != 0)
  139. {
  140. outParam = "鉴权失败:" + errorMsg;
  141. return Error("鉴权");
  142. }
  143. else
  144. {
  145. Global.pat.insuplc_admdvs = JsonHelper.getDestValue(JObject.Parse(errorMsg), "output.baseinfo.insuinfo[0].insuplc_admdvs");
  146. Global.pat.mdtrtcertNO = JsonHelper.getDestValue(JObject.Parse(errorMsg), "output.baseinfo.mdtrt_cert_no");
  147. Global.pat.name = JsonHelper.getDestValue(JObject.Parse(errorMsg), "output.baseinfo.psn_name");
  148. }
  149. }
  150. #region 【调用1101获取人员信息】
  151. if (trade1101(out outParam) != 0)
  152. {
  153. return Error();
  154. }
  155. else
  156. {
  157. //读社保卡时,哈尔滨省医保,哈尔滨市医保居民需要验密
  158. joRtn = JObject.Parse(outParam);
  159. JArray jaInsuInfo = JArray.FromObject(joRtn["output"]["insuinfo"]);
  160. if (Global.ssmp.cardType == "03")
  161. {
  162. if ((jaInsuInfo[0]["insutype"].ToString() == "390") || (jaInsuInfo[0]["insuplc_admdvs"].ToString().Substring(0, 4) == "2399"))
  163. {
  164. CardReader_HLJ cr = new CardReader_HLJ();
  165. string verifyPINRtn = cr.VerifyPIN(3, password, Global.inf.hospitalNO);
  166. Global.writeLog(verifyPINRtn);
  167. if (tools.getDestPosStrBySpliter(verifyPINRtn, 1, ",") != "0")
  168. {
  169. outParam = "验密失败!" + tools.getDestPosStrBySpliter(verifyPINRtn, 2, ",");
  170. return Error("验密");
  171. }
  172. }
  173. }
  174. return Success(outParam);
  175. }
  176. #endregion
  177. return Exception(-1, "读卡", outParam);
  178. }
  179. catch (Exception ex)
  180. {
  181. return Error("异常:" + ex.Message);
  182. }
  183. }
  184. /// <summary>
  185. /// 通过证件号获取基本信息(无卡)
  186. /// </summary>
  187. /// <param name="cardNo"></param>
  188. /// <param name="outParam"></param>
  189. /// <returns></returns>
  190. public int trade1101(out string outParam)
  191. {
  192. #region【1101获取身份信息】
  193. //JObject joData = new JObject();
  194. //joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  195. //joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  196. //joData.Add("card_sn", Global.pat.card.SN);
  197. //joData.Add("begntime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  198. //joData.Add("psn_cert_type", Global.pat.certType);
  199. //joData.Add("certno", Global.pat.certNO); //证件号码
  200. //joData.Add("psn_name", Global.pat.name);
  201. //JObject joInput = new JObject();
  202. //joInput.Add("data", joData);
  203. //JObject joRtn = invoker.invokeCenterService(TradeEnum.PatientInfo.GetCode(), JsonHelper.setCenterInpar("1101", joInput));
  204. //if (JsonHelper.parseCenterRtnValue(joRtn, out outParam) != 0)
  205. //{
  206. // outParam = "读卡失败:" + outParam;
  207. // return -1;
  208. //}
  209. //else
  210. //{
  211. // outParam = joRtn.ToString();
  212. // return 0;
  213. //}
  214. //调用1101
  215. JObject joData = new JObject();
  216. joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType);
  217. joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO);
  218. joData.Add("card_sn", Global.pat.card.SN);
  219. joData.Add("begntime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  220. joData.Add("psn_cert_type", Global.pat.certType);
  221. joData.Add("certno", Global.pat.certNO);
  222. joData.Add("psn_name", Global.pat.name);
  223. JObject joInput = new JObject();
  224. joInput.Add("data", joData);
  225. InvokeHelper invoker = new InvokeHelper();
  226. JObject joRtn = invoker.invokeCenterService("1101", joInput);
  227. if (JsonHelper.parseCenterRtnValue(joRtn, out outParam) != 0)
  228. {
  229. outParam = "读卡失败:" + outParam;
  230. return -1;
  231. }
  232. else
  233. {
  234. outParam = joRtn.ToString();
  235. return 0;
  236. }
  237. #endregion
  238. }
  239. }
  240. }