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 { string safeNo = Global.pat.admType == 1 ? "2207A" : "1101"; //string safeNo = "1101"; 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 (cc.cardType == "02") { Global.pat.mdtrtcertType = "02"; } //社保卡 if (cc.cardType == "03") { Global.pat.mdtrtcertType = "03"; } #region 调用读卡接口信息 // 全部都采用银海 int rtn = 0; //if (!Global.curEvt.enabledDebug) //{ // YinHaiSafeCtrl safeCtrl = new YinHaiSafeCtrl(); // rtn = safeCtrl.Prepare(safeNo, out outParam); // if (rtn != 0) // { // return Exception("调用安全控件", outParam); // } //} //else //{ // YinHaiSafeCtrl safeCtrl = new YinHaiSafeCtrl(); // rtn = safeCtrl.Prepare(cc.cardType,safeNo, out outParam); // if (rtn != 0) // { // return Exception("调用安全控件", outParam); // } //} YinHaiSafeCtrl safeCtrl = new YinHaiSafeCtrl(); if (Global.pat.admType == 1) { if (Global.pat.mdtrtcertType == "03") { rtn = safeCtrl.Prepare(Global.pat.mdtrtcertType, "1101", out outParam); if (rtn != 0) { return Exception("调用安全控件", outParam); } //重定向 if (hBus.Redirect(Global.inf.originalInterfaceDr, out outParam) != 0) { return Exception(-2, "Redirect", outParam); } //再次调用门诊2207A,否则后面无法结算 rtn = safeCtrl.Prepare(Global.pat.mdtrtcertType, "2207A", out outParam); if (rtn != 0) { return Exception("调用安全控件", outParam); } } else //if (Global.pat.mdtrtcertType == "01") { rtn = safeCtrl.Prepare(Global.pat.mdtrtcertType, "2207A", out outParam); if (rtn != 0) { return Exception("调用安全控件", outParam); } //重定向 if (hBus.Redirect(Global.inf.originalInterfaceDr, out outParam) != 0) { return Exception(-2, "Redirect", outParam); } } } else { rtn = safeCtrl.Prepare(Global.pat.mdtrtcertType, "1101", out outParam); if (hBus.Redirect(Global.inf.originalInterfaceDr, out outParam) != 0) { return Exception(-2, "Redirect", outParam); } if (Global.pat.mdtrtcertType == "03") { //再次调用门诊1101,否则后面无法结算 rtn = safeCtrl.Prepare(Global.pat.mdtrtcertType, "1101", out outParam); if (rtn != 0) { return Exception("调用安全控件", outParam); } } if (rtn != 0) { return Exception("调用安全控件", outParam); } } if (rtn == 0) { rtn = trade1101(out outParam); } if (rtn == 0) { return Success(); } #endregion } else { return Exception(-1, "读卡", "取消读卡"); } return Exception(-1, "读卡", outParam); } 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); dynamic joExpContent = new JObject(); joExpContent.card_token = Global.pat.card.Cardtoken; joData.Add("expContent", joExpContent); 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; } } }