using Newtonsoft.Json.Linq; using PTMedicalInsurance.Common; using PTMedicalInsurance.Entity; using PTMedicalInsurance.Forms; using PTMedicalInsurance.Helper; using PTMedicalInsurance.Variables; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace PTMedicalInsurance.Business { class ReadCardProcess : AbstractProcess { public override CallResult Process(JObject input) { JObject joCardInfo = new JObject(); ChooseCard cc = new ChooseCard(); JObject joRtn = new JObject(); JObject joInput = new JObject(); try { DialogResult dialog = tools.ShowAppDiaglog(cc); if (dialog == DialogResult.OK) { Global.businessType = ""; Global.pat.certType = "01"; //电子凭证 if (cc.cardType == "01") { Global.pat.mdtrtcertType = "01"; Global.businessType = cc.businessType; if (tradeEcToken(out outParam) != 0) { return Error(outParam); } trade1101(out outParam); return Success(); } //身份证 if (cc.cardType == "02") { Global.pat.mdtrtcertType = "02"; //读身份证 CardReader reader = new CardReader(Global.inf.cardURL, Global.inf.hospitalNO); if (reader.Init() != 0) { outParam = "读身份证,读卡初始化失败!"; return Error("读身份证"); }; int rtn = reader.ReadSFZ(out outParam); if (rtn == 0) { trade1101(out outParam); } return Success(); } //社保卡 if (cc.cardType == "03") { #region 调用读卡接口信息 Global.pat.mdtrtcertType = "03"; int rtn = 0; if (!Global.curEvt.enabledDebug) { CardReader reader = new CardReader(Global.inf.cardURL, Global.inf.areaCode); if (reader.Init() != 0) { outParam = "读社保卡,初始化失败!"; return Error("读社保卡"); }; rtn = reader.ReadCardBas(out outParam); } if (rtn == 0) { //清除原数据 trade1101(out outParam); return Success(); } return Exception(-1, "读卡", outParam); #endregion } } else { //outParam = JsonHelper.setExceptionJson().ToString(); return Exception(-1, "读卡", "取消读卡"); } return Success(); } catch (Exception ex) { return Error("异常:" + ex.Message); } } /// /// 通过证件号获取基本信息(无卡) /// /// /// /// public int trade1101(out string outParam) { Utils.GetInsuCode(); outParam = ""; string errorMsg = ""; JObject joInput = new JObject(); JObject joData = new JObject(); joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType); joData.Add("mdtrt_cert_no", Utils.ConvertMdtrtcertNo()); joData.Add("card_sn", Global.pat.card.SN); joData.Add("begntime", Utils.GetDateTimeNow()); joData.Add("psn_cert_type", Global.pat.certType); joData.Add("certno", Global.pat.certNO); //证件号码 joData.Add("psn_name", Global.pat.name); joInput.Add("data", joData); InvokeHelper invoker = new InvokeHelper(); JObject joRtn = invoker.invokeCenterService(TradeEnum.PatientInfo, joInput); if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0) { outParam = "获取病人信息失败:" + errorMsg; return -1; } else { //joRtn["output"]["baseinfo"]["bizCode"] = Global.pat.card.BusinessCode; outParam = joRtn.ToString(); parsePatient(joRtn); return 0; } } /// /// 读卡并获取基本信息 /// /// /// public int trade1161(out string outParam) { outParam = ""; string errorMsg = ""; JObject joInput = new JObject(); joInput.Add("begntime", Utils.GetDateTimeNow()); JObject joRtn = new JObject(); joRtn = invoker.invokeCenterService(TradeEnum.ReadCardInfo, joInput); if (JsonHelper.parseCenterRtnValue(joRtn, out errorMsg) != 0) { outParam = "读卡失败:" + errorMsg; return -1; } else { parsePatient(joRtn); outParam = joRtn.ToString(); } return 0; } /// /// 解析人员基本信息 /// /// public void parsePatient(JObject joRtn) { // 基线版 PersonCardInfo info = JsonHelper.getOutput(joRtn); if (info.cardInfo != null) { Global.pat.card.NO = info.cardInfo.cardno; Global.pat.card.SN = info.cardInfo.card_sn; Global.pat.card.Cardtoken = info.cardInfo.ecToken; Global.pat.ecToken = info.cardInfo.ecToken; } //Global.writeLog("病人信息:"+joRtn.ToString()); if (info.insuInfo != null && info.insuInfo.Length > 0) { //参保地 Global.pat.insuplc_admdvs = info.insuInfo[0].insuplc_admdvs; Global.pat.insuplc_name = info.insuInfo[0].insuplc_name; Global.pat.medType = info.insuInfo[0].med_type ?? "C"; } //证件号 Global.pat.certNO = info.baseInfo?.certno; // 人员证件类型 Global.pat.certType = info.baseInfo?.psn_cert_type; // 就诊类型 if (string.IsNullOrEmpty(Global.pat.mdtrtcertType)) { Global.pat.mdtrtcertType = "03"; } // 就诊凭证号 if (!string.IsNullOrEmpty(Global.pat.card.NO)) { Global.pat.mdtrtcertNO = Global.pat.card.NO; } // 没有卡号用证件号 if (string.IsNullOrEmpty(Global.pat.mdtrtcertNO)) { Global.pat.mdtrtcertNO = Global.pat.certNO; } Global.pat.payOrdId = info.platformOrderNo; } /// /// 通过电子凭证获取基本信息 /// /// /// public int tradeEcToken(out string outParam) { //cardInfo outParam = ""; int ret = ECTokenReader.ECQuery("1",out outParam); return ret; } } }