using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using PTMedicalInsurance.Common; using PTMedicalInsurance.Business; using System.Windows.Forms; using PTMedicalInsurance.Helper; using Newtonsoft.Json.Linq; using PTMedicalInsurance.Variables; using PTMedicalInsurance.Forms; using System.IO; using System.Reflection; using System.Data; namespace PTMedicalInsurance { public class InsuBusiness : IInsuBusiness { //定义相关的变量 //private Patients patient; //private Fees fee; //private Settlements settlement; //json对象属性 private JObject joInParam; private JArray jaSession ; private JArray jaParams; private JObject joParam; private JObject joInterface; //设置业务实例 CenterBusiness cBus = new CenterBusiness(); HisMainBusiness hBus = new HisMainBusiness(); HisIrisServices hIS = new HisIrisServices(); MIIrisServices mIS= new MIIrisServices(); InvokeHelper invoker = new InvokeHelper(); // private string businessType; private string operationType; public InsuBusiness() { Global.curEvt.path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); ComputerInfo comp = new ComputerInfo(); Global.curEvt.mac = comp.GetMAC(); Global.curEvt.ip = comp.GetIP(); Global.pat.insuplc_admdvs = ""; //如果是NULL中心会报错 } private int parseInparam(string inParam,out string errMsg) { errMsg = ""; try { joInParam = JObject.Parse(inParam); jaSession = JArray.Parse(JsonHelper.getDestValue(joInParam, "session")); Global.curEvt.jaSession = jaSession; jaParams = JArray.Parse(JsonHelper.getDestValue(joInParam, "params")); joParam = JObject.FromObject(jaParams[0]); joInterface = JObject.Parse(JsonHelper.getDestValue(joInParam, "interfaceinfo")); businessType = JsonHelper.getDestValue(joInParam, "businessType"); operationType = JsonHelper.getDestValue(joInParam, "operationType"); if (businessType.Substring(0, 2) == "M6") { string onlineYBFalg = JsonHelper.getDestValue(joInParam, "insuAdmObj.onlineYBFalg"); //如果是Y 线上医保,其它或空不是.因WebService不能通过DLL 获取根目录,所以强制指定目录 if (onlineYBFalg == "Y") { Environment.CurrentDirectory = @"D:\HttpServerAPI\bin"; } } return 0; } catch (Exception ex) { errMsg = "parseInparam 解析入参异常:" + ex.Message; return -1; } } /// /// 签到 /// /// /// public string Init(string InParam) { string errMsg, rtnResult =""; JObject joRtn = new JObject(); try { if (hBus.initEnvironment(InParam, out errMsg) != 0) { return JsonHelper.setExceptionJson(-100, "initEnvironment 失败", errMsg).ToString(); //laqu } else { if (mIS.isSigned(ref Global.curEvt.signno) != true) { if (businessType != "BasicData")//如果是打开数据对照界面不调用初始化 { //if (!Global.curEvt.needSignIn) //{ // Global.curEvt.signno = "000000"; // rtnResult = JsonHelper.setIrisReturnValue(0, "签到成功", joRtn).ToString(); //} //else { CallResult callResult = new SignInProcess().Process(joRtn); rtnResult = callResult.Data; } } else { Global.curEvt.signno = "ABC123"; rtnResult = JsonHelper.setIrisReturnValue(0, "初始化成功(医保对照不初始化)!", null).ToString(); } } else { rtnResult = JsonHelper.setIrisReturnValue(0, "初始化成功!", null).ToString(); } return rtnResult; } } catch (Exception ex) { rtnResult = JsonHelper.setExceptionJson(-100, "Init 异常", ex.Message).ToString(); return rtnResult; } finally { Global.writeLog("初始化结果:" + rtnResult); } } /// /// 初始化 /// /// /// /// private int init(string inParam, out string outParam) { string errMsg; outParam = ""; try { //BS架构调用方式问题,每次调用都需要重新初始化 JObject joInitRtn = JObject.Parse(Init(inParam)); if (JsonHelper.parseIrisRtnValue(joInitRtn, out errMsg) != 0) { outParam = JsonHelper.setExceptionJson(-100, "init(HIS医保环境初始化)", errMsg).ToString(); return -1; } else { return 0; } } catch (Exception ex) { outParam = JsonHelper.setExceptionJson(-100, "init(HIS医保环境初始化)异常", ex.Message).ToString(); return -1; } } /// /// 获取患者信息 /// /// /// public string GetPatientInfo(string InParam) { Global.writeLog("GetPatientInfo入参:" + JsonHelper.Compress(InParam)); //设置返回值,错误信息 string rtnResult = "",outParam; //BS架构调用方式问题,每次调用都需要重新初始化 if (init(InParam,out outParam)!= 0) { rtnResult = outParam; return rtnResult; } JObject joInParam = JObject.Parse(InParam); string businessType = JsonHelper.getDestValue(joInParam,"businessType"); try { switch (businessType) { case "M1"://门诊读卡 case "Z1"://住院读卡 { //打开读卡窗口,操作员选择读卡类型后进行读卡器读卡,再进行1101获取参保信息 PatientService patientService = new PatientService(); patientService.readPatientInfo(out outParam); rtnResult = JsonHelper.setIrisReturnValue(0, "", JObject.Parse(outParam)).ToString(); break; } } return rtnResult; } catch (Exception ex) { rtnResult = JsonHelper.setIrisReturnValue(-1 , "GetPatientInfo发生异常;" + ex.Message,null).ToString(); return rtnResult; } finally { Global.writeLog("GetPatientInfo出参:" + JsonHelper.Compress(rtnResult)); } } /// /// 登记 /// /// /// public string Register(string InParam) { Global.writeLog("Register 入参:" + JsonHelper.Compress(InParam)); //设置返回值,错误信息 string errMsg, rtnResult = "", outParam; try { //解析入参 if (parseInparam(InParam, out errMsg) != 0) { rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString(); return rtnResult; } //BS架构调用方式问题,每次调用都需要重新初始化 if (init(InParam, out outParam) != 0) { rtnResult = outParam; return rtnResult; } //获取pat hBus.GetRegPatInfo(businessType, joInParam, out Global.pat); switch (businessType) { case "M2"://门诊登记 { //string patInfo = ""; //errMsg = showPatientInfo(out patInfo, out outParam); //if (!errMsg.Equals("0")) //{ // return errMsg; //} //Global.writeLog("获取到病人信息:" + patInfo); //JObject reg = JObject.Parse(patInfo); //this.OutpatientReg(reg,patInfo); break; } case "M2C"://门诊登记撤销 { break; } case "Z0"://住院修改 { break; } case "Z2"://入院登记 { Global.Set.clearingWay = "1"; //住院 rtnResult = new InpatientRegistionProcess().Process(joParam).Data; break; } case "Z2C"://入院登记取消 { rtnResult = new InpatientRegCancelProcess().Process(joParam).Data; break; } case "Z6"://出院登记 { break; } case "Z6C"://出院登记取消 { rtnResult = new InpatientExitCancelProcess().Process(joParam).Data; break; } default: { rtnResult = JsonHelper.setExceptionJson(-1, "Register 交易", "传入的业务编码不对!").ToString(); return rtnResult; } } } catch (Exception ex) { rtnResult = JsonHelper.setIrisReturnValue(-1, "Register 发生异常;" + ex.Message, null).ToString(); return rtnResult; } finally { Global.writeLog("Register 出参:" + JsonHelper.Compress(rtnResult)); } return rtnResult; } /// /// 费用上传 /// /// /// public string FeeUpload(string InParam) { Global.writeLog("FeeUpload 入参:" + JsonHelper.Compress(InParam)); //设置返回值,错误信息 string errMsg, rtnResult = "", outParam; try { //解析入参 if (parseInparam(InParam, out errMsg) != 0) { rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString(); return rtnResult; } //BS架构调用方式问题,每次调用都需要重新初始化 if (init(InParam, out outParam) != 0) { rtnResult = outParam; return rtnResult; } //获取pat hBus.GetFeeHisInfo(businessType, joInParam, out Global.pat); switch (businessType) { case "M3"://门诊费用上传 { break; } case "M3C"://门诊费用撤销 { break; } case "Z3"://入院费用上传 { rtnResult = new InpatientFeeUploadProcess().Process(joParam).Data; break; } case "Z3C"://住院费用上传取消 { rtnResult = new InpatientFeeUploadCancelProcess().Process(joParam).Data; break; } default: { rtnResult = JsonHelper.setExceptionJson(-1, "FeeUpload 交易", "传入的业务编码不对!").ToString(); return rtnResult; } } return rtnResult; } catch (Exception ex) { rtnResult = JsonHelper.setExceptionJson(-1, "FeeUpload 交易", ex.Message).ToString(); return rtnResult; } finally { Global.writeLog("FeeUpload 出参:" + JsonHelper.Compress(rtnResult)); } } /// /// 结算 /// /// /// public string Settlement(string InParam) { Global.writeLog("Settlement 入参:" + JsonHelper.Compress(InParam)); //设置返回值,错误信息 string errMsg, rtnResult = "", outParam; try { //解析入参 if (parseInparam(InParam, out errMsg) != 0) { rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString(); return rtnResult; } //BS架构调用方式问题,每次调用都需要重新初始化 if (init(InParam, out outParam) != 0) { rtnResult = outParam; return rtnResult; } //获取pat hBus.GetSettlementHisInfo(businessType, joInParam, out Global.pat); switch (businessType) { case "M4"://门诊预结算 { // 没有做任何处理?是否必须??? //OutpatientRegistration frmReg = new OutpatientRegistration(); //if (frmReg.ShowDialog() == DialogResult.OK) //{ // rtnResult = "调用结束"; //} break; } case "M4C"://门诊预结算撤销 { break; } case "M5"://门诊结算 { Global.Set.clearingWay = "6"; //门诊 LocalOPSettleService opService = new LocalOPSettleService(); rtnResult = opService.Charge(operationType, joInParam); break; } case "M5C"://门诊结算撤销 { LocalOPSettleService opService = new LocalOPSettleService(); rtnResult = opService.DisCharge(joParam); break; } case "M6"://门诊移动支付结算 { #region 移动支付 //MobilePay mp = new MobilePay(InParam, out errMsg); //if (errMsg != "") //{ // rtnResult = JsonHelper.setExceptionJson(-1, "Settlement 交易", errMsg).ToString(); // return rtnResult; //} //if (mp.MobilePaySettlement(out outParam) != 0) // rtnResult = JsonHelper.setExceptionJson(-1, "Settlement 交易", outParam).ToString(); //else // rtnResult = outParam; //return rtnResult; #endregion LocalMobilePayService mobilePayService = new LocalMobilePayService(); rtnResult = mobilePayService.Charge(businessType,JObject.Parse(InParam)); break; } case "M6C"://门诊移动支付结算撤销 { #region 移动支付取消 LocalMobilePayProcess mp = new LocalMobilePayProcess(); rtnResult = mp.Cancel(JObject.Parse(InParam)).Data; #endregion break; } case "M6Confirm"://门诊移动支付确认 { #region 移动支付确认 LocalMobilePayProcess mp = new LocalMobilePayProcess(); rtnResult = mp.Confirm(JObject.Parse(InParam)).Data; #endregion break; } case "Z4"://住院预结算 { #region 预结算 Global.pat.RYorCY = "2"; JObject joSettle = new JObject(); CallResult result = new IPPreSettlementProcess().Process(joParam); if (result.Success) { rtnResult = JsonHelper.setExceptionJson(-1, "结算信息展示", result.Data).ToString(); } else { rtnResult = JsonHelper.setIrisReturnValue(0, "预结算成功", null).ToString(); } break; #endregion } case "Z4C"://住院预结算撤销 { rtnResult = JsonHelper.setExceptionJson(-100, "该接口不支持预结算取消!", null).ToString(); return rtnResult; } case "Z5"://住院结算 { Global.Set.clearingWay = "1"; //住院 LocalIPSettlementService ipService = new LocalIPSettlementService(); rtnResult = ipService.Charge(operationType,joParam); break; } case "Z5C"://住院结算撤销 { LocalIPSettlementService ipService = new LocalIPSettlementService(); rtnResult = ipService.DisCharge(joParam); break; } default: { rtnResult = JsonHelper.setExceptionJson(-1, "Settlement 交易", "传入的业务编码不对!").ToString(); return rtnResult; } } return rtnResult; } catch (Exception ex) { rtnResult = JsonHelper.setExceptionJson(-1, "Settlement 交易", ex.Message).ToString(); return rtnResult; } finally { Global.writeLog("Settlement 出参:" + JsonHelper.Compress(rtnResult)); } } /// /// 辅助交易 /// /// /// public string AgentFun(string InParam) { Global.writeLog("AgentFun 入参:" + JsonHelper.Compress(InParam)); //设置返回值,错误信息 string errMsg, rtnResult = "", outParam; try { //解析入参 if (parseInparam(InParam, out errMsg) != 0) { rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString(); return rtnResult; } //BS架构调用方式问题,每次调用都需要重新初始化 if (init(InParam, out outParam) != 0) { Global.writeLog("初始化异常:"+outParam); rtnResult = outParam; // 基础数据没有初始化成功,也可以运行 if (!businessType.Equals("BasicData")) { return rtnResult; } } //获取pat hBus.GetAgentFunHisInfo(businessType, joInParam, out Global.pat); switch (businessType) { case "BasicData"://基础数据维护 { BasicData bd = new BasicData(); bd.ShowDialog(); break; } case "Exception"://异常处理 { //显示异常处理界面 HandleException frmEX = new HandleException(); if (frmEX.ShowDialog() == DialogResult.OK) { } break; } case "CheckAndClearing"://对账清算 { ClearingQuery frmEX = new ClearingQuery(); if (frmEX.ShowDialog() == DialogResult.OK) { } break; } case "Print"://打印 { try { rtnResult = new LocalSettleBillPrintProcess().Process(joInParam).Data; } catch (Exception ex) { MessageBox.Show(ex.Message); } break; } case "Log"://日志 { MessageBox.Show(businessType); break; } case "RecordUpload"://上传记录 { MessageBox.Show(businessType); break; } case "HospitalRegister"://备案 { ToRecordChoose Referral = new ToRecordChoose(); Referral.ShowDialog(); break; } case "PreAndInProcessAnalysis"://事前分析 诊间只有住院的事前分析 { //Global.pat.adm_Dr = int.Parse(JsonHelper.getDestValue(joInParam, "params[0].admID")); JObject joResult = new JObject(); joResult.Add("result", JObject.Parse(JsonHelper.getDestValue(joParam, "insuData"))); Global.writeLog(joResult.ToString()); //事前分析 if (Global.curEvt.ext.isOpenAnalysis) { //1.门诊挂号 2.门诊收费登记 3.住院登记 4.住院收费登记 5.住院执行医嘱 6.门诊结算 7.门诊预结算 8.住院结算 9.住院预结算 10.购药划卡 if (hBus.PreAnalysis("2", joResult.ToString(), out errMsg) != 0) { rtnResult = JsonHelper.setExceptionJson(-1, "PreAndInProcessAnalysis 交易", errMsg).ToString(); break; } else { rtnResult = JsonHelper.setExceptionJson(0, "PreAndInProcessAnalysis 交易", "上传成功!").ToString(); break; } } else { rtnResult = JsonHelper.setExceptionJson(-1, "PreAndInProcessAnalysis 交易", "本地配置文件isOpenAnalysis设置为不启用!").ToString(); break; } break; } default: { rtnResult = JsonHelper.setExceptionJson(-1, "AgentFun 交易", "传入的业务编码不对!").ToString(); break; } } return rtnResult; } catch (Exception ex) { rtnResult = JsonHelper.setExceptionJson(-1, "AgentFun 交易", ex.Message).ToString(); return rtnResult; } finally { Global.writeLog("AgentFun 出参:" + JsonHelper.Compress(rtnResult)); } } public string PlatformDirectConnect(string InParam) { //设置返回值,错误信息 string errMsg, rtnResult = "", outParam; try { Global.writeLog("PlatformDirectConnect 入参:" + JsonHelper.Compress(InParam)); //解析入参 if (parseInparam(InParam, out errMsg) != 0) { rtnResult = JsonHelper.setExceptionJson(-1, "", errMsg).ToString(); return rtnResult; } Global.businessType = businessType; string funNO = JsonHelper.getDestValue(joInParam, "funNO"); Global.pat.insuplc_admdvs = JsonHelper.getDestValue(joInParam, "insuplc_admdvs"); Global.inf.interfaceID = JsonHelper.getDestValue(joInParam, "interfaceinfo.ID"); if ("4101".Equals(funNO)) { Global.curEvt.useLocalOrgCode = true; Global.curEvt.needSignIn = true; Global.writeLog(Global.pat.insuplc_admdvs) ; //本地医保、省医保医保需要使用本地机构 if ((!Utils.isOtherCity()) || "28".Equals(Global.inf.interfaceID)) { //需要单独签到 Global.curEvt.mac = Global.curEvt.mac + "" + Utils.GetInsuOrgCode(); } else //异地的 { Global.curEvt.mac = Global.curEvt.mac + Global.inf.hospitalNO; } } Global.writeLog(Global.curEvt.mac); //BS架构调用方式问题,每次调用都需要重新初始化 if (init(InParam, out outParam) != 0) { rtnResult = outParam; return rtnResult; } TradeEnum trade = TradeEnum.DEFAULT.GetByCode(funNO); JObject joRtn = invoker.invokeCenterService(trade, joParam); if (JsonHelper.parseCenterRtnValue(joRtn, out errMsg) != 0) { rtnResult = JsonHelper.setExceptionJson(-1, "平台直连错误", errMsg).ToString(); return rtnResult; } else { rtnResult = JsonHelper.setIrisReturnValue(0, "", joRtn).ToString(); return rtnResult; } } catch (Exception ex) { rtnResult = JsonHelper.setExceptionJson(-1, "PlatformDirectConnect 交易", ex.Message).ToString(); return rtnResult; } finally { Global.writeLog("PlatformDirectConnect 出参:" + JsonHelper.Compress(rtnResult)); } } } }