using Newtonsoft.Json.Linq; using PTMedicalInsurance.Common; using PTMedicalInsurance.Entity; using PTMedicalInsurance.Entity.Local; 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 PatientService { protected HisMainBusiness hBus = new HisMainBusiness(); protected InvokeHelper invoker = new InvokeHelper(); /// /// 读卡 /// /// public int readCard(out string outParam) { outParam = ""; JObject joCardInfo = new JObject(); ChooseCard cc = new ChooseCard(); JObject joRtn = new JObject(); JObject joInput = new JObject(); try { if (cc.ShowDialog() == DialogResult.OK) { Global.businessType = ""; Utils.GetInsuCode(); //电子凭证 if (cc.cardType == "01") { Global.pat.mdtrtcertType = "01"; Global.businessType = cc.businessType; //tradeEcToken(out outParam); return trade1161(out outParam); //return 0; } //身份证 if (cc.cardType == "02") { if (cc.ID == "") { Global.pat.certType = "01"; Global.pat.mdtrtcertType = "02"; Global.pat.name = ""; } else { Global.pat.mdtrtcertType = "02"; Global.pat.mdtrtcertNO = cc.ID; Global.pat.certType = "01"; Global.pat.certNO = cc.ID; Global.pat.name = cc.PatName; } Global.pat.card.SN = ""; return trade1101(out outParam); } //社保卡 if (cc.cardType == "03") { #region 调用读卡接口信息 Global.pat.mdtrtcertType = "03"; return trade1161(out outParam); #endregion } } else { outParam = JsonHelper.setExceptionJson(-1, "读卡", "取消读卡").ToString(); return -1; } return 0; } catch (Exception ex) { outParam = "异常:" + ex.Message; return -1; } } /// /// 通过电子凭证获取基本信息 /// /// /// public int tradeEcToken(out string outParam) { outParam = ECTokenReader.ECQuery("1"); JObject joRtn = JObject.Parse(outParam); // 兼容 if(joRtn.ContainsKey("output")) { joRtn = JObject.Parse(joRtn["output"].ToString()); } PersonCardInfo person = JsonHelper.toObject(joRtn); // 济南仅返回了身份证号和姓名,还需要调用1101获取基本信息 Global.pat.name = person.baseInfo.psn_name; Global.pat.certNO = person.baseInfo.certno; if (person.insuInfo == null) { this.trade1101(out outParam); } return 0; } /// /// 通过证件号获取基本信息(无卡) /// /// /// /// public int trade1101(out string outParam) { outParam = ""; string errorMsg = ""; JObject joInput = new JObject(); JObject joData = new JObject(); joData.Add("mdtrt_cert_type", Global.pat.mdtrtcertType); joData.Add("mdtrt_cert_no", Global.pat.mdtrtcertNO); 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 { 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); 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 string readPatientInfo(out string outParam) { string patInfo = ""; //打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息 if (readCard(out outParam) != 0) { return JsonHelper.setExceptionJson(-100, "读卡失败!", outParam).ToString(); } else { patInfo = outParam; //展示患者信息界面(合并到后面登记界面) //if (hBus.showPatInfo(patInfo, out outParam) != 0) //{ // return JsonHelper.setExceptionJson(-100, "操作员取消!", outParam).ToString(); //} hBus.convertPatientInfo(patInfo, out outParam); } #region 展示患者信息 //患者信息赋值给全局变量 string errMsg = ""; if (hBus.setGlobalPatAfaterShowPatInfo(outParam, out errMsg) != 0) { return JsonHelper.setExceptionJson(-1, "setGlobalPatAfaterShowPatInfo", errMsg).ToString(); } //校验HIS姓名与医保姓名是否一致 if (hBus.checkName(Global.pat.name, out errMsg) != 0) { return JsonHelper.setExceptionJson(-1, "校验HIS与医保姓名是否一致", errMsg).ToString(); } #endregion return "0"; } } }