/// <summary>
        /// 退号提交
        /// </summary>
        /// <param name="invoiceNO">票据号</param>
        /// <param name="operatorID">操作员ID</param>
        public void BackReg(string invoiceNO, int operatorID)
        {
            int iAccountType            = 0;
            List <OP_CostHead> costList = NewObject <OP_CostHead>().getlist <OP_CostHead>(" endInvoiceNO='" + invoiceNO + "' and regFlag=1");

            if (costList == null || costList.Count == 0)
            {
                throw new Exception("找不到该票据号信息");
            }
            else if (costList[0].CostStatus != 0)
            {
                throw new Exception("该票据号已经退费,不能再退");
            }
            else if (costList[0].CostStatus == 0 && costList[0].CostDate.ToString("yyyy-MM-dd") != DateTime.Now.ToString("yyyy-MM-dd"))
            {
                throw new Exception("已超过退号日期,只能退当天挂的号");
            }

            //原op_patlist变化
            OP_PatList patlist = NewObject <OP_PatList>().getmodel(costList[0].PatListID) as OP_PatList;

            if (patlist.VisitStatus != 0)
            {
                throw new Exception("您已就诊,不能再退号");
            }

            patlist.RegStatus = 1;//原挂号记录状态置1
            this.BindDb(patlist);
            patlist.save();

            //得到当前结账ID
            int curAccountId = NewObject <CommonMethod>().GetAccountId(operatorID, iAccountType);

            //原op_costHead变化
            OP_CostHead oldCostHead = costList[0].Clone() as OP_CostHead;

            oldCostHead.CostStatus = 1;//原有记录状态改为1
            this.BindDb(oldCostHead);
            oldCostHead.save();

            //生成新op_costHead变化
            OP_CostHead newCostHead = costList[0].Clone() as OP_CostHead;

            newCostHead.CostHeadID  = 0;
            newCostHead.CostDate    = DateTime.Now;
            newCostHead.CostStatus  = 2;//新增记录状态为2
            newCostHead.ChargeEmpID = operatorID;
            newCostHead.AccountID   = curAccountId;
            newCostHead.CashFee     = (oldCostHead.CashFee + oldCostHead.PosFee) * (-1);//退金额,POS金额退现金
            newCostHead.PosFee      = 0;
            newCostHead.PromFee     = oldCostHead.PromFee * (-1);
            newCostHead.OldID       = oldCostHead.CostHeadID;//写入原退记录ID
            newCostHead.TotalFee    = newCostHead.TotalFee * (-1);
            this.BindDb(newCostHead);
            newCostHead.save();

            //得到原来OP_FeeItemHead
            List <OP_FeeItemHead> listFeeitemHead = NewObject <OP_FeeItemHead>().getlist <OP_FeeItemHead>(" costheadid=" + oldCostHead.CostHeadID);
            OP_FeeItemHead        newFeeItemHead  = new OP_FeeItemHead();

            if (listFeeitemHead != null && listFeeitemHead.Count > 0)
            {
                OP_FeeItemHead oldFeeItemHead = listFeeitemHead[0].Clone() as OP_FeeItemHead;
                oldFeeItemHead.ChargeStatus = 1;//原有记录状态改为1
                this.BindDb(oldFeeItemHead);
                oldFeeItemHead.save();

                //生成新OP_FeeItemHead变化
                newFeeItemHead = listFeeitemHead[0].Clone() as OP_FeeItemHead;
                newFeeItemHead.FeeItemHeadID = 0;
                newFeeItemHead.ChargeStatus  = 2;
                newFeeItemHead.CostHeadID    = newCostHead.CostHeadID;
                newFeeItemHead.TotalFee      = newFeeItemHead.TotalFee * (-1);
                newFeeItemHead.OldID         = oldFeeItemHead.FeeItemHeadID;//写入原退记录ID
                this.BindDb(newFeeItemHead);
                newFeeItemHead.save();

                List <OP_FeeItemDetail> listFeeItemDetail = NewObject <OP_FeeItemDetail>().getlist <OP_FeeItemDetail>(" FeeItemHeadID=" + oldFeeItemHead.FeeItemHeadID);
                foreach (OP_FeeItemDetail oldfeeitemDetail in listFeeItemDetail)
                {
                    OP_FeeItemDetail newfeeitemDetail = oldfeeitemDetail.Clone() as OP_FeeItemDetail;
                    newfeeitemDetail.PresDetailID  = 0;
                    newfeeitemDetail.FeeItemHeadID = newFeeItemHead.FeeItemHeadID;
                    newfeeitemDetail.TotalFee      = newfeeitemDetail.TotalFee * (-1);
                    newfeeitemDetail.Amount        = oldfeeitemDetail.Amount * (-1);
                    this.BindDb(newfeeitemDetail);
                    newfeeitemDetail.save();
                }
            }

            //生成新op_costDetail
            List <OP_CostDetail> costDetailList = NewObject <OP_CostDetail>().getlist <OP_CostDetail>(" costheadid=" + oldCostHead.CostHeadID);

            foreach (OP_CostDetail oldcostDetail in costDetailList)
            {
                OP_CostDetail newCostDetail = oldcostDetail.Clone() as OP_CostDetail;
                newCostDetail.CostHeadID    = newCostHead.CostHeadID;
                newCostDetail.FeeItemHeadID = newFeeItemHead.FeeItemHeadID;
                newCostDetail.TotalFee      = oldcostDetail.TotalFee * (-1);
                newCostDetail.CostDetailID  = 0;
                this.BindDb(newCostDetail);
                newCostDetail.save();
            }

            //生成新OP_CostPayMentInfo
            List <OP_CostPayMentInfo> costPayMentInfoList = NewObject <OP_CostPayMentInfo>().getlist <OP_CostPayMentInfo>(" costheadid=" + oldCostHead.CostHeadID);
            decimal oldposfee = 0;

            foreach (OP_CostPayMentInfo oldCostpayInfo in costPayMentInfoList)
            {
                if (oldCostpayInfo.PayMentCode == "02")
                {
                    oldposfee = oldCostpayInfo.PayMentMoney;
                }
            }

            foreach (OP_CostPayMentInfo oldCostpayInfo in costPayMentInfoList)
            {
                OP_CostPayMentInfo newCostPayInfo = oldCostpayInfo.Clone() as OP_CostPayMentInfo;
                newCostPayInfo.AccountID  = curAccountId;
                newCostPayInfo.ID         = 0;
                newCostPayInfo.CostHeadID = newCostHead.CostHeadID;

                //POS
                if (oldCostpayInfo.PayMentCode == "02")
                {
                    newCostPayInfo.PayMentMoney = 0;
                }

                //现金
                if (oldCostpayInfo.PayMentCode == "01")
                {
                    newCostPayInfo.PayMentMoney = (oldCostpayInfo.PayMentMoney + oldposfee) * (-1);
                }
                else
                {
                    newCostPayInfo.PayMentMoney = oldCostpayInfo.PayMentMoney * (-1);
                }

                this.BindDb(newCostPayInfo);
                newCostPayInfo.save();
            }

            //结账表插入汇总金额
            NewObject <CommonMethod>().AddAccoutFee(newCostHead, curAccountId, 0, 1);
        }
        public string BalancePres(string visitNO)
        {
            try
            {
                //  string visitNO = "34";
                int           empid  = 100;
                int           deptid = 1048;
                SysLoginRight sys    = new EFWCoreLib.CoreFrame.Business.SysLoginRight();
                sys.WorkId = 1;
                //获取病人信息
                Action <ClientRequestData> requestAction = ((ClientRequestData request) =>
                {
                    request.LoginRight = sys;
                    request.AddData(6);
                    request.AddData(visitNO);
                });
                ServiceResponseData retdata = InvokeWcfService("OPProject.Service", "BalanceController", "GetRegPatListByCardNo", requestAction);
                List <OP_PatList>   patlist = retdata.GetData <List <OP_PatList> >(0);
                if (patlist.Count == 0)
                {
                    return("Falg:1");
                }
                OP_PatList curPatlist = patlist[0];
                //获取处方
                requestAction = ((ClientRequestData request) =>
                {
                    request.LoginRight = sys;
                    request.AddData(curPatlist.PatListID);
                    request.AddData(OP_Enum.PresStatus.未收费);
                });
                retdata = InvokeWcfService("OPProject.Service", "BalanceController", "GetPatPrescription", requestAction);
                DataTable dtPresc = retdata.GetData <DataTable>(0);
                //预算
                List <Prescription> budgePres     = new List <Prescription>();
                List <int>          budgeNums     = new List <int>();
                List <Prescription> prescriptions = EFWCoreLib.CoreFrame.Common.ConvertExtend.ToList <Prescription>(dtPresc);
                budgeNums = GetBudgePrescriptionAmbitList(prescriptions);
                if (budgeNums.Count == 0)
                {
                    throw new Exception("没有选中的处方需要收费");
                }
                budgePres = prescriptions.Where(p => p.Selected == 1 && p.SubTotalFlag == 0).ToList();

                requestAction = ((ClientRequestData request) =>
                {
                    request.LoginRight = sys;
                    request.AddData(budgePres);            //处方
                    request.AddData(empid);                //操作员ID
                    request.AddData(curPatlist);           //当前病人对象
                    request.AddData(curPatlist.PatTypeID); //结算病人类型
                    request.AddData(budgeNums);            //选中的处方张数
                });
                retdata = InvokeWcfService("OPProject.Service", "BalanceController", "BudgeBalance", requestAction);
                List <ChargeInfo> budgeInfo = retdata.GetData <List <ChargeInfo> >(0);
                //正式结算
                List <OP_CostPayMentInfo> paylist = new List <OP_CostPayMentInfo>();

                OP_CostPayMentInfo payment = new OP_CostPayMentInfo();
                payment.PayMentID    = 1002;
                payment.PayMentMoney = 600;
                paylist.Add(payment);

                budgeInfo[0].PayInfoList       = paylist;
                budgeInfo[0].PayTotalFee       = 600;
                budgeInfo[0].FavorableTotalFee = 0;
                budgeInfo[0].PosFee            = 0;
                budgeInfo[0].CashFee           = 600;//现金
                budgeInfo[0].RoundFee          = 0;
                budgeInfo[0].ChangeFee         = 0;
                requestAction = ((ClientRequestData request) =>
                {
                    request.LoginRight = sys;
                    request.AddData(budgePres);  //费用明细对象
                    request.AddData(empid);      //操作员ID
                    request.AddData(curPatlist); //当前病人对象
                    request.AddData(budgeInfo);  //预算对象
                    request.AddData(1);
                    request.AddData(empid);
                    request.AddData(deptid);
                });
                retdata = InvokeWcfService("OPProject.Service", "BalanceController", "Balance", requestAction);
                return("Falg:0");
            }
            catch (Exception err)
            {
                throw new Exception(err.Message);
            }
        }
        /// <summary>
        /// 全退处方
        /// </summary>
        /// <param name="costHeadid">结算ID</param>
        /// <param name="operatoreid">操作员ID</param>
        /// <param name="refundPrescriptions">退费处方</param>
        /// <param name="refundInvoiceNO">退费票据号</param>
        public void AllRefund(int costHeadid, int operatoreid, List <Prescription> refundPrescriptions, string refundInvoiceNO)
        {
            /*
             * 1:获取当前退费操作员结账ID
             * 2:修改原结算记录OP_CostHead CostStatus=1
             * 3:新增红冲结算记录 CostStatus = 2,写入对冲OldID,金额为负
             * 4:新增红冲结算明细记录 OP_CostDetail
             * 5:新增红冲结算支付方式记录 OP_CostPayMentInfo
             * 6:修改原费用主表 OP_FeeItemHead ChargeStatus=1
             * 7:新增红冲费用主表记录ChargeStatus=2,写入对冲OldID,金额为负
             * 8:新增红冲费用明细表记录 OP_FeeItemDetail
             * 9:修改退费消息表OP_FeeRefundHead RefundPayFlag = 1
             * 10:减会员积分
             * 11:加虚拟库存
             * 12:修改op_account汇总金额
             */
            int      iAccountType = 0;
            DateTime chargedate   = DateTime.Now;

            //获取当前操作员得到当前结账ID
            int         curAccountId = NewObject <CommonMethod>().GetAccountId(operatoreid, iAccountType);
            OP_CostHead oldCostHead  = NewObject <OP_CostHead>().getmodel(costHeadid) as OP_CostHead;

            if (oldCostHead.CostStatus != 0)
            {
                throw new Exception("该处方已经被退费");
            }

            List <OP_FeeRefundHead> feerefundheadlist = NewObject <OP_FeeRefundHead>().getlist <OP_FeeRefundHead>("invoicenum='" + refundInvoiceNO + "' and flag=0");

            if (feerefundheadlist == null || feerefundheadlist.Count == 0)
            {
                throw new Exception("退费消息已经删除");
            }

            //再次判断退费消息,是不是存在已经删除又修改状态
            List <OP_FeeRefundDetail> feerefundDetailList = NewObject <OP_FeeRefundDetail>().getlist <OP_FeeRefundDetail>(" reheadid=" + feerefundheadlist[0].ReHeadID);

            //返回需要补收的处方记录
            foreach (Prescription refundPresc in refundPrescriptions)
            {
                foreach (OP_FeeRefundDetail refundDetail in feerefundDetailList)
                {
                    if (refundPresc.FeeItemHeadID == refundDetail.FeeItemHeadID && refundPresc.PresDetailID == refundDetail.FeeItemDetailID)
                    {
                        if (refundPresc.Refundamount != refundDetail.RefundAmount)
                        {
                            throw new Exception("退费消息已经修改,请重新获取退费消息");
                        }
                    }
                }
            }

            int refundPosType = Convert.ToInt32(NewObject <CommonMethod>().GetOpConfig(OpConfigConstant.RefundPosType));

            //原结算记录状态修改
            oldCostHead.CostStatus = 1; //状态变为退费状态
            this.BindDb(oldCostHead);
            oldCostHead.save();

            //新结算主表
            OP_CostHead newCostHead = oldCostHead.Clone() as OP_CostHead;

            newCostHead.CostHeadID = 0;
            newCostHead.CostStatus = 2;            //状态为空冲
            newCostHead.AccountID  = curAccountId; //定入新的结算ID
            if (refundPosType == 0)                //pos退现金
            {
                newCostHead.CashFee = (oldCostHead.CashFee + oldCostHead.PosFee) * -1;
                newCostHead.PosFee  = 0;
            }
            else
            {
                newCostHead.CashFee = oldCostHead.CashFee * -1;
                newCostHead.PosFee  = oldCostHead.PosFee * -1;
            }

            newCostHead.TotalFee    = newCostHead.TotalFee * -1;
            newCostHead.PromFee     = newCostHead.PromFee * -1;
            newCostHead.OldID       = oldCostHead.CostHeadID;//写入原costHeadID
            newCostHead.ChargeEmpID = operatoreid;
            newCostHead.CostDate    = chargedate;
            newCostHead.RoundingFee = oldCostHead.RoundingFee * -1;
            this.BindDb(newCostHead);
            newCostHead.save();

            //新结算支付方式表
            List <OP_CostPayMentInfo> oldCostPayList = NewObject <OP_CostPayMentInfo>().getlist <OP_CostPayMentInfo>(" costheadid=" + oldCostHead.CostHeadID);

            if (refundPosType == 0)
            {
                oldCostPayList = oldCostPayList.Where(p => p.PayMentCode != "02").ToList();
                foreach (OP_CostPayMentInfo oldCostPay in oldCostPayList)
                {
                    OP_CostPayMentInfo newCostPay = oldCostPay.Clone() as OP_CostPayMentInfo;
                    newCostPay.ID         = 0;
                    newCostPay.CostHeadID = newCostHead.CostHeadID;
                    newCostPay.AccountID  = curAccountId;

                    //现金
                    if (oldCostPay.PayMentCode != "01")
                    {
                        //退现金另外处理
                        newCostPay.PayMentMoney = oldCostPay.PayMentMoney * -1;
                        this.BindDb(newCostPay);
                        newCostPay.save();
                    }
                }

                if (newCostHead.CashFee != 0)
                {
                    OP_CostPayMentInfo cashCostPay = new OP_CostPayMentInfo();
                    cashCostPay.CostHeadID   = newCostHead.CostHeadID;
                    cashCostPay.AccountID    = curAccountId;
                    cashCostPay.PatListID    = newCostHead.PatListID;
                    cashCostPay.PatName      = newCostHead.PatName;
                    cashCostPay.PatType      = newCostHead.PatTypeID.ToString();
                    cashCostPay.PayMentCode  = "01";
                    cashCostPay.PayMentID    = 1002;
                    cashCostPay.PayMentMoney = newCostHead.CashFee;
                    cashCostPay.PayMentName  = "现金支付";
                    this.BindDb(cashCostPay);
                    cashCostPay.save();
                }
            }
            else if (refundPosType == 1)
            {
                foreach (OP_CostPayMentInfo oldCostPay in oldCostPayList)
                {
                    OP_CostPayMentInfo newCostPay = oldCostPay.Clone() as OP_CostPayMentInfo;
                    newCostPay.ID           = 0;
                    newCostPay.CostHeadID   = newCostHead.CostHeadID;
                    newCostPay.AccountID    = curAccountId;
                    newCostPay.PayMentMoney = oldCostPay.PayMentMoney * -1;
                    this.BindDb(newCostPay);
                    newCostPay.save();
                }
            }

            //费用表插入红冲记录
            List <OP_FeeItemHead> oldFeeItemHeadList = NewObject <OP_FeeItemHead>().getlist <OP_FeeItemHead>(" costheadid=" + oldCostHead.CostHeadID);

            foreach (OP_FeeItemHead oldFeeHead in oldFeeItemHeadList)
            {
                oldFeeHead.ChargeStatus = 1;//退费状态
                this.BindDb(oldFeeHead);
                oldFeeHead.save();

                OP_FeeItemHead newFeeHead = oldFeeHead.Clone() as OP_FeeItemHead;
                newFeeHead.FeeItemHeadID = 0;
                newFeeHead.CostHeadID    = newCostHead.CostHeadID;
                newFeeHead.OldID         = oldFeeHead.FeeItemHeadID; //红冲退记录ID
                newFeeHead.ChargeStatus  = 2;                        //新插入记录为红冲记录
                newFeeHead.ChargeEmpID   = operatoreid;
                newFeeHead.ChargeDate    = chargedate;
                newFeeHead.TotalFee      = oldFeeHead.TotalFee * -1;
                this.BindDb(newFeeHead);
                newFeeHead.save();

                List <OP_FeeItemDetail> oldFeeItemDetailList = NewObject <OP_FeeItemDetail>().getlist <OP_FeeItemDetail>(" feeitemheadid=" + oldFeeHead.FeeItemHeadID);
                foreach (OP_FeeItemDetail oldFeeItemDetail in oldFeeItemDetailList)
                {
                    OP_FeeItemDetail newFeeItemDetail = oldFeeItemDetail.Clone() as OP_FeeItemDetail;
                    newFeeItemDetail.PresDetailID  = 0;
                    newFeeItemDetail.TotalFee      = oldFeeItemDetail.TotalFee * -1;
                    newFeeItemDetail.Amount        = oldFeeItemDetail.Amount * -1;
                    newFeeItemDetail.FeeItemHeadID = newFeeHead.FeeItemHeadID;
                    this.BindDb(newFeeItemDetail);
                    newFeeItemDetail.save();
                }
            }

            //新结算明细表
            List <OP_CostDetail> oldCostDetailList = NewObject <OP_CostDetail>().getlist <OP_CostDetail>("costheadid=" + oldCostHead.CostHeadID);

            foreach (OP_CostDetail oldCostDetail in oldCostDetailList)
            {
                OP_CostDetail newCostDetail = oldCostDetail.Clone() as OP_CostDetail;
                newCostDetail.CostDetailID  = 0;
                newCostDetail.CostHeadID    = newCostHead.CostHeadID;//写入新CostHeadID
                newCostDetail.TotalFee      = oldCostDetail.TotalFee * -1;
                newCostDetail.FeeItemHeadID = NewDao <IOPManageDao>().GetNewFeeItemHeadId(oldCostDetail.FeeItemHeadID);
                this.BindDb(newCostDetail);
                newCostDetail.save();
            }

            //退费消息表置退费状态
            List <OP_FeeRefundHead> refundHeadList = NewObject <OP_FeeRefundHead>().getlist <OP_FeeRefundHead>(" invoiceNum='" + refundInvoiceNO + "' and flag=0");

            if (refundHeadList.Count == 0)
            {
                throw new Exception("找不到退费消息");
            }

            OP_FeeRefundHead refundHead = refundHeadList[0] as OP_FeeRefundHead;

            refundHead.RefundPayFlag = 1;//退费完成状态
            this.BindDb(refundHead);
            refundHead.save();

            //减会员积分
            AddScore(newCostHead.MemberAccountID, newCostHead.TotalFee, newCostHead.CostHeadID.ToString(), operatoreid);

            //药品加虚拟库存
            MinisStorage(refundPrescriptions, true);
            AddAccoutFee(newCostHead, curAccountId, 0, 1);

            //修改医生站处方状态
            RefundDocPrsc(refundPrescriptions);
        }
        /// <summary>
        /// 结算按钮事件
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void btnConfirm_Click(object sender, EventArgs e)
        {
            if (IsMediaPat)
            {
                if (miblancebudgetid <= 0)
                {
                    MessageBox.Show("医保病人需医保预结算完成才能结算");
                    return;
                }
            }

            if (CostPayManager.CostFee.ChangeFee < 0)
            {
                MessageBox.Show("支付金额不足!");
                return;
            }

            if (CostPayManager.CostFee.SelfTotalFee + CostPayManager.CostFee.RoundFee < 0)
            {
                MessageBox.Show("记账支付金额不能超过总金额!");
                return;
            }

            if (CostPayManager.CostFee.AccountTotalFee > CostPayManager.CostFee.PayTotalFee)
            {
                MessageBox.Show("总记账支付金额不能超过总金额");
                return;
            }

            List <OP_CostPayMentInfo> paylist = new List <OP_CostPayMentInfo>();

            foreach (PayModeFee pay in CostPayManager.CostFee.payList)
            {
                if (pay.PayFee != 0)
                {
                    OP_CostPayMentInfo payment = new OP_CostPayMentInfo();
                    payment.PayMentID    = pay.PayMethodID;
                    payment.PayMentMoney = pay.PayFee;
                    paylist.Add(payment);
                }
            }

            budgeInfo[0].PayInfoList       = paylist;
            budgeInfo[0].PayTotalFee       = CostPayManager.CostFee.PayTotalFee;
            budgeInfo[0].FavorableTotalFee = CostPayManager.CostFee.FavorableTotalFee;
            budgeInfo[0].PosFee            = CostPayManager.CostFee.PosFee;
            budgeInfo[0].CashFee           = CostPayManager.CostFee.CashFee;//现金
            budgeInfo[0].RoundFee          = CostPayManager.CostFee.RoundFee;
            budgeInfo[0].ChangeFee         = CostPayManager.CostFee.ChangeFee;
            if ((bool)InvokeController("Balance"))
            {
                balanceSuccess = true;
                InvokeController("BalanceComplete");
                this.Close();
                InvokeController("BalancePrint");
                if (chkFeePrint.Checked)
                {
                    InvokeController("PresFeePrintDetail");
                }
            }
        }
Beispiel #5
0
        public ServiceResponseData SaveRegister()
        {
            try
            {
                OP_PatList curPatlist      = requestData.GetData <OP_PatList>(0);
                decimal    totalFee        = requestData.GetData <decimal>(1); //挂号总金额
                string     paymentCode     = requestData.GetData <string>(2);  //支付方式Code
                decimal    medicareFee     = requestData.GetData <decimal>(3); //医保统筹支付金额
                decimal    payFee          = requestData.GetData <decimal>(4); //应付金额
                decimal    promFee         = requestData.GetData <decimal>(5); //优惠金额
                decimal    medicarePersFee = requestData.GetData <decimal>(6); //医保个账支付金额
                if (string.IsNullOrEmpty(curPatlist.PatName))
                {
                    throw new Exception("请先输入病人信息");
                }

                PayMentInfoList           payinfoList     = new PayMentInfoList();
                List <OP_CostPayMentInfo> paymentInfoList = new List <OP_CostPayMentInfo>();
                if (medicareFee > 0)
                {
                    string             medicarePayMentCode = NewObject <CommonMethod>().GetOpConfig(OpConfigConstant.RegMedicareCode);//获取医保对应的支付方式Code
                    OP_CostPayMentInfo paymentinfo         = new OP_CostPayMentInfo();
                    paymentinfo.PayMentCode  = medicarePayMentCode;
                    paymentinfo.PayMentMoney = medicareFee;
                    Basic_Payment basicPayment = NewObject <CommonMethod>().GetPayMentByCode(paymentinfo.PayMentCode);
                    paymentinfo.PayMentID   = basicPayment.PaymentID;
                    paymentinfo.PayMentName = basicPayment.PayName;
                    paymentInfoList.Add(paymentinfo);
                }

                if (medicarePersFee > 0)
                {
                    OP_CostPayMentInfo paymentinfo = new OP_CostPayMentInfo();
                    paymentinfo.PayMentCode  = "04";
                    paymentinfo.PayMentMoney = medicarePersFee;
                    Basic_Payment basicPayment = NewObject <CommonMethod>().GetPayMentByCode(paymentinfo.PayMentCode);
                    paymentinfo.PayMentID   = basicPayment.PaymentID;
                    paymentinfo.PayMentName = basicPayment.PayName;
                    paymentInfoList.Add(paymentinfo);
                }

                if (promFee > 0)
                {
                    OP_CostPayMentInfo paymentinfo = new OP_CostPayMentInfo();
                    paymentinfo.PayMentCode  = "03";
                    paymentinfo.PayMentMoney = promFee;
                    Basic_Payment basicPayment = NewObject <CommonMethod>().GetPayMentByCode(paymentinfo.PayMentCode);
                    paymentinfo.PayMentID   = basicPayment.PaymentID;
                    paymentinfo.PayMentName = basicPayment.PayName;
                    paymentInfoList.Add(paymentinfo);
                }

                decimal cashFee = 0;
                decimal posFee  = 0;
                if (payFee > 0)
                {
                    OP_CostPayMentInfo paymentinfo = new OP_CostPayMentInfo();
                    paymentinfo.PayMentCode  = paymentCode;
                    paymentinfo.PayMentMoney = payFee;
                    Basic_Payment basicPayment = NewObject <CommonMethod>().GetPayMentByCode(paymentinfo.PayMentCode);
                    paymentinfo.PayMentID   = basicPayment.PaymentID;
                    paymentinfo.PayMentName = basicPayment.PayName;
                    paymentInfoList.Add(paymentinfo);

                    //现金
                    if (paymentCode == "01")
                    {
                        cashFee += payFee;
                    }

                    //POS
                    if (paymentCode == "02")
                    {
                        posFee += posFee;
                    }
                }

                payinfoList.paymentInfolist = paymentInfoList;
                DataTable dtPrint = new DataTable();
                NewObject <RegisterProcess>().SaveRegInfo(curPatlist, payinfoList, totalFee, cashFee, posFee, out dtPrint, promFee);
                responseData.AddData(dtPrint);    //打印信息
                responseData.AddData(curPatlist); //病人对象
                return(responseData);
            }
            catch (Exception err)
            {
                throw new Exception(err.Message);
            }
        }