Exemple #1
0
        /// <summary>
        /// 调用费用退费分解接口
        /// </summary>
        /// <param name="sDll"></param>
        /// <returns></returns>
        public ResultClass RefundmentDivide(SiInterfaceDll sDll, string tradeNo)
        {
            string sMome = "";
            bool   bRet  = false;
            string sOut;

            sDll.RefundmentDivide(tradeNo, out sOut);

            XmlDocument xmlDoc = GetXmlDoc(sOut);

            CheckOutputState(xmlDoc, out bRet, out sMome);
            if (bRet)
            {
                string  sTradeNO, sIC_NO;
                XmlNode dataNode = GetNodeFromPath(xmlDoc.DocumentElement, "output/tradeinfo");
                sTradeNO = dataNode.SelectNodes("tradeno")[0].InnerText;
                //sIC_NO = dataNode.SelectNodes("icno")[0].InnerText;
                //AddLog("解析XML结果:\r\n交易流水号:" + sTradeNO + "\r\n医保应用号:" + sIC_NO);
            }

            HIS_Entity.MIManage.Common.DivideResult.root divideResult = (HIS_Entity.MIManage.Common.DivideResult.root)(XmlUtil.DeserializeFromXml(sOut, typeof(HIS_Entity.MIManage.Common.DivideResult.root)));
            xmlDoc = null;
            ResultClass resultClassTemp = new ResultClass();

            resultClassTemp.bSucess  = bRet;
            resultClassTemp.sRemarks = sMome;
            resultClassTemp.oResult  = divideResult;
            return(resultClassTemp);
        }
Exemple #2
0
        /// <summary>
        /// 分解费用
        /// </summary>
        /// <param name="sDll"></param>
        /// <returns></returns>
        public ResultClass Divide(SiInterfaceDll sDll, HIS_Entity.MIManage.Common.Reg.root root)
        {
            string sMome = "";
            bool   bRet  = false;
            string sOut;
            string sIn = XmlUtil.SerializeToXml(root, typeof(HIS_Entity.MIManage.Common.Reg.root));
            string sOut1;

            sDll.Divide(sIn, out sOut);

            AddLog("分解输出数据:");
            AddLog(sOut);
            HIS_Entity.MIManage.Common.DivideResult.root divideResult = (HIS_Entity.MIManage.Common.DivideResult.root)(XmlUtil.DeserializeFromXml(sOut, typeof(HIS_Entity.MIManage.Common.DivideResult.root)));
            XmlDocument xmlDoc = GetXmlDoc(sOut);

            CheckOutputState(xmlDoc, out bRet, out sMome);

            ResultClass resultClassTemp = new ResultClass();

            resultClassTemp.bSucess  = bRet;
            resultClassTemp.sRemarks = sMome;

            resultClassTemp.oResult = divideResult;
            return(resultClassTemp);
        }
        public override ResultClass MZ_CancelCharge(InputClass inputClass)//string fph)
        {
            ResultClass resultClass = new ResultClass();

            resultDic.Clear();
            try
            {
                string fph = inputClass.SInput.ContainsKey(InputType.InvoiceNo) ? inputClass.SInput[InputType.InvoiceNo].ToString() : "";
                MI_MedicalInsurancePayRecord medicalInsurancePayRecordOld = hisDao.Mz_GetPayRecord(2, fph, 2, 1);

                if (medicalInsurancePayRecordOld == null)
                {
                    resultClass.bSucess  = false;
                    resultClass.sRemarks = "获取收费信息失败!";
                }
                else
                {
                    //取消医保结算并返回结果
                    resultClass = ybInterfaceDao.MZ_CancelCharge(medicalInsurancePayRecordOld.TradeNO);
                    HIS_Entity.MIManage.Common.DivideResult.root root      = (HIS_Entity.MIManage.Common.DivideResult.root)resultClass.oResult;
                    MI_MedicalInsurancePayRecord medicalInsurancePayRecord = ResultToPayRecord(root.output);
                    medicalInsurancePayRecord.RegId     = medicalInsurancePayRecordOld.RegId;
                    medicalInsurancePayRecord.FeeNO     = medicalInsurancePayRecordOld.FeeNO;
                    medicalInsurancePayRecord.state     = 2;
                    medicalInsurancePayRecord.TradeType = 2;
                    MI_MIPayRecordHead          mIPayRecordHead       = ResultToPayRecordHead(root.output);
                    List <MI_MIPayRecordDetail> mIPayRecordDetailList = ResultToPayRecordDetail(root.output);

                    //更新交易表
                    medicalInsurancePayRecordOld.state = 3;
                    hisDao.Mz_SavePayRecord(medicalInsurancePayRecordOld);

                    //保存新信息
                    MI_MedicalInsurancePayRecord medicalInsurancePayRecordResult = hisDao.SaveTradeInfo(medicalInsurancePayRecord, mIPayRecordHead, mIPayRecordDetailList);

                    if (medicalInsurancePayRecordResult != null)
                    {   //返回数据到前台界面,只需金额
                        resultClass.bSucess = true;
                    }
                    else
                    {
                        resultClass.bSucess  = false;
                        resultClass.sRemarks = "更新收费信息失败!";
                    }

                    resultClass.oResult = resultDic;
                }
            }
            catch (Exception e)
            {
                resultClass.bSucess  = false;
                resultClass.sRemarks = e.Message;
            }
            return(resultClass);
        }
        /// <summary>
        /// 保存登记信息:先保存医保信息;然后保存登记信息;最后保存交易信息
        /// </summary>
        /// <param name="register">登记类</param>
        /// <returns></returns>
        public override ResultClass MZ_PreviewRegister(InputClass inputClass)//MI_Register register)
        {
            ResultClass resultClass = new ResultClass();

            MI_Register register = JsonHelper.DeserializeJsonToObject <MI_Register>(inputClass.SInput[InputType.MI_Register].ToString());

            try
            {
                resultDic.Clear();
                //医保登记并返回结果
                AddLog("医保登记并返回结果开始");
                resultClass = ybInterfaceDao.MZ_PreviewRegister(PreviewRegisterToInput(register));
                AddLog("医保登记并返回结果结束,开始解析");
                HIS_Entity.MIManage.Common.DivideResult.root root      = (HIS_Entity.MIManage.Common.DivideResult.root)resultClass.oResult;
                MI_MedicalInsurancePayRecord medicalInsurancePayRecord = ResultToPayRecord(root.output);
                MI_MIPayRecordHead           mIPayRecordHead           = ResultToPayRecordHead(root.output);
                List <MI_MIPayRecordDetail>  mIPayRecordDetailList     = ResultToPayRecordDetail(root.output);
                AddLog("解析完成,开始保存登记信息");
                register.SocialCreateNum = medicalInsurancePayRecord.TradeNO;
                ResultClass regResultClass = hisDao.Mz_SaveRegister(register);
                if (regResultClass.bSucess)
                {
                    MI_Register registerResult = regResultClass.oResult as MI_Register;
                    AddLog("保存登记完成,开始保存交易信息");
                    medicalInsurancePayRecord.RegId     = registerResult.ID;
                    medicalInsurancePayRecord.state     = 0;
                    medicalInsurancePayRecord.TradeType = 1;

                    MI_MedicalInsurancePayRecord medicalInsurancePayRecordResult = hisDao.SaveTradeInfo(medicalInsurancePayRecord, mIPayRecordHead, mIPayRecordDetailList);
                    AddLog("保存交易信息完成,开始返回");
                    if (medicalInsurancePayRecordResult.ID > 0)
                    {
                        //返回数据到前台界面,只需金额
                        resultDic.Add("Id", registerResult.ID.ToString());
                        resultDic.Add("tradeno", root.output.tradeinfo.tradeno);
                        resultDic.Add("FeeAll", root.output.sumpay.feeall);
                        resultDic.Add("fund", root.output.sumpay.fund);
                        resultDic.Add("cash", root.output.sumpay.cash);
                        resultDic.Add("personcountpay", root.output.sumpay.personcountpay);
                        resultClass.oResult = resultDic;
                    }
                    else
                    {
                        resultClass.bSucess  = false;
                        resultClass.sRemarks = "保存交易数据失败,返回ID为零";
                        resultClass.oResult  = null;;
                    }
                }
                else
                {
                    AddLog("开始保存登记失败");
                    resultClass.bSucess  = false;
                    resultClass.sRemarks = regResultClass.sRemarks;
                    resultClass.oResult  = null;;
                }
            }
            catch (Exception e)
            {
                resultClass.bSucess  = false;
                resultClass.sRemarks = e.Message;
            }
            return(resultClass);
        }
        public override ResultClass MZ_PreviewCharge(InputClass inputClass)//TradeData tradedata)
        {
            ResultClass resultClass = new ResultClass();

            try
            {
                TradeData tradedata = inputClass.SInput.ContainsKey(InputType.TradeData) ?
                                      JsonHelper.DeserializeJsonToObject <TradeData>(inputClass.SInput[InputType.TradeData].ToString()): null;
                MI_Register register = hisDao.Mz_Getregister(-1, tradedata.SerialNo);
                if (register == null)
                {
                    resultClass.bSucess  = false;
                    resultClass.sRemarks = "医院编号:" + tradedata.WorkID + ",门诊就诊号:" + tradedata.SerialNo + ",未进行医保统筹登记";
                    MiddlewareLogHelper.WriterLog(LogType.MILog, true, Color.Red, "医院编号:" + tradedata.WorkID + ",门诊就诊号:" + tradedata.SerialNo + ",未进行医保统筹登记");
                }
                else
                {
                    if (register.ValidFlag != 1)
                    {
                        resultClass.bSucess  = false;
                        resultClass.sRemarks = "医院编号:" + tradedata.WorkID + ",门诊就诊号:" + tradedata.SerialNo + ",医保统筹登记已取消";
                        MiddlewareLogHelper.WriterLog(LogType.MILog, true, Color.Red, "医院编号:" + tradedata.WorkID + ",门诊就诊号:" + tradedata.SerialNo + ",医保统筹登记已取消");
                    }
                    else
                    {
                        tradedata.SocityCreateNum = register.SocialCreateNum;
                        //医保登记并返回结果
                        AddLog("医保登记并返回结果开始");
                        resultClass = ybInterfaceDao.MZ_PreviewCharge(TradeDataToInput(tradedata));
                        AddLog("医保登记并返回结果结束,开始解析");
                        HIS_Entity.MIManage.Common.DivideResult.root root = (HIS_Entity.MIManage.Common.DivideResult.root)resultClass.oResult;
                        //解析返回结果到类,保存
                        MI_MedicalInsurancePayRecord medicalInsurancePayRecord = ResultToPayRecord(root.output);
                        medicalInsurancePayRecord.state     = 0;
                        medicalInsurancePayRecord.RegId     = register.ID;
                        medicalInsurancePayRecord.TradeType = 2;
                        MI_MIPayRecordHead          mIPayRecordHead       = ResultToPayRecordHead(root.output);
                        List <MI_MIPayRecordDetail> mIPayRecordDetailList = ResultToPayRecordDetail(root.output);


                        AddLog("解析完成,开始保存");
                        MI_MedicalInsurancePayRecord medicalInsurancePayRecordResult = hisDao.SaveTradeInfo(medicalInsurancePayRecord, mIPayRecordHead, mIPayRecordDetailList);
                        AddLog("保存完成,开始返回");
                        if (medicalInsurancePayRecordResult.ID > 0)
                        {
                            resultDic.Clear();
                            //返回数据到前台界面,只需金额
                            resultDic.Add("Id", medicalInsurancePayRecordResult.ID.ToString());
                            resultDic.Add("tradeno", root.output.tradeinfo.tradeno);
                            resultDic.Add("FeeAll", root.output.sumpay.feeall);
                            resultDic.Add("fund", root.output.sumpay.fund);
                            resultDic.Add("cash", root.output.sumpay.cash);
                            resultDic.Add("personcountpay", root.output.sumpay.personcountpay);
                            resultClass.oResult = resultDic;
                        }
                        else
                        {
                            resultClass.bSucess  = false;
                            resultClass.sRemarks = "保存失败,返回ID为零";
                            resultClass.oResult  = null;;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                resultClass.bSucess  = false;
                resultClass.sRemarks = e.Message;
            }
            return(resultClass);
        }
        /// <summary>
        /// 取消登记
        /// </summary>
        /// <param name="inputClass">InputType.SerialNO</param>
        public override ResultClass Mz_CancelRegister(InputClass inputClass)//string serialNO)
        {
            ResultClass resultClass = new ResultClass();
            string      serialNO    = inputClass.SInput.ContainsKey(InputType.SerialNO) ? inputClass.SInput[InputType.SerialNO].ToString() : "";

            try
            {
                resultDic.Clear();
                MI_Register register = hisDao.Mz_Getregister(-1, serialNO);
                if (register == null)
                {
                    resultClass.bSucess  = false;
                    resultClass.sRemarks = "获取登记信息失败!";
                }
                else
                {
                    bool b = hisDao.Mz_JudgeRegister(register.ID);
                    if (b)
                    {
                        //取消医保登记并返回结果
                        resultClass = ybInterfaceDao.Mz_CancelRegister(register.SocialCreateNum);
                        HIS_Entity.MIManage.Common.DivideResult.root root = (HIS_Entity.MIManage.Common.DivideResult.root)resultClass.oResult;
                        //解析返回数据,并保存退费记录
                        MI_MedicalInsurancePayRecord medicalInsurancePayRecord = ResultToPayRecord(root.output);
                        MI_MIPayRecordHead           mIPayRecordHead           = ResultToPayRecordHead(root.output);
                        List <MI_MIPayRecordDetail>  mIPayRecordDetailList     = ResultToPayRecordDetail(root.output);
                        register.ValidFlag = 2;

                        medicalInsurancePayRecord.state     = 2;
                        medicalInsurancePayRecord.RegId     = register.ID;
                        medicalInsurancePayRecord.TradeType = 1;
                        //更新登记表
                        ResultClass regResultClass = hisDao.Mz_SaveRegister(register);
                        //更新交易表
                        MI_MedicalInsurancePayRecord medicalInsurancePayRecordResult = hisDao.Mz_GetPayRecord(1, register.ID.ToString(), 1, 1);
                        if (medicalInsurancePayRecordResult != null)
                        {
                            medicalInsurancePayRecordResult.state = 3;
                            hisDao.Mz_SavePayRecord(medicalInsurancePayRecordResult);
                        }

                        medicalInsurancePayRecord.FeeNO = medicalInsurancePayRecordResult.FeeNO;

                        if (regResultClass.bSucess)
                        {
                            if (hisDao.SaveTradeInfo(medicalInsurancePayRecord, mIPayRecordHead, mIPayRecordDetailList) == null)
                            {
                                resultClass.bSucess  = false;
                                resultClass.sRemarks = "更新交易信息失败!";
                            }
                            else
                            {
                                //返回数据到前台界面,只需金额
                                resultClass.bSucess = true;
                            }
                        }
                        else
                        {
                            resultClass.bSucess  = false;
                            resultClass.sRemarks = "更新登记信息失败!";
                        }
                    }
                    else
                    {
                        resultClass.bSucess  = false;
                        resultClass.sRemarks = "存在已结算的收费数据!";
                    }
                }

                resultClass.oResult = resultDic;
            }
            catch (Exception e)
            {
                resultClass.bSucess  = false;
                resultClass.sRemarks = e.Message;
            }
            return(resultClass);
        }