/// <summary> /// 正式结算 /// </summary> /// <param name="BudgetaryChargeInfos">预算信息</param> /// <param name="prescriptions">要结算的处方,该处方对象经过预算方法处理</param> /// <returns>true:结算成功,false:结算失败</returns> public override bool Charge(ChargeInfo[] BudgetaryChargeInfos, Prescription[] prescriptions, out BaseInvoice[] ChargeInvoicies) { MZClinicInterface clinicInterface = new MZClinicInterface(); oleDb.BeginTransaction(); try { for (int presindex = 0; presindex < prescriptions.Length; presindex++) { if (prescriptions[presindex].DocPresId > 0) { decimal mzdocfee = clinicInterface.GetDocPresMoney(prescriptions[presindex].DocPresId); if (mzdocfee != prescriptions[presindex].Total_Fee) { throw new Exception("门诊医生站已对该收费处方进行修改,请重新刷新处方再点收银!"); } } } for (int chargeCount = 0; chargeCount < BudgetaryChargeInfos.Length; chargeCount++) { if (BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Exists(BudgetaryChargeInfos[chargeCount].ChargeID)) { HIS.Model.MZ_CostMaster chargeBill = new HIS.Model.MZ_CostMaster(); chargeBill = BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).GetModel(BudgetaryChargeInfos[chargeCount].ChargeID); chargeBill.Self_Fee = BudgetaryChargeInfos[chargeCount].SelfFee; chargeBill.Village_Fee = BudgetaryChargeInfos[chargeCount].VillageFee; chargeBill.Favor_Fee = BudgetaryChargeInfos[chargeCount].FavorFee; chargeBill.Pos_Fee = BudgetaryChargeInfos[chargeCount].PosFee; chargeBill.Money_Fee = BudgetaryChargeInfos[chargeCount].CashFee; chargeBill.Self_Tally = BudgetaryChargeInfos[chargeCount].SelfTally; chargeBill.Ticket_Flag = 0; chargeBill.CostDate = HIS.SYSTEM.PubicBaseClasses.XcDate.ServerDateTime; chargeBill.Record_Flag = 0; string perfCode = ""; chargeBill.TicketNum = InvoiceManager.GetBillNumber(OPDBillKind.门诊收费发票, OperatorId, false, out perfCode); chargeBill.TicketCode = perfCode; //前缀 BudgetaryChargeInfos[chargeCount].InvoiceNO; BudgetaryChargeInfos[chargeCount].InvoiceSerialNO = Convert.ToInt32(chargeBill.TicketNum); BudgetaryChargeInfos[chargeCount].InvoiceNO = chargeBill.TicketNum; BudgetaryChargeInfos[chargeCount].PerfChar = perfCode; BudgetaryChargeInfos[chargeCount].ChargeDate = chargeBill.CostDate; BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Update(chargeBill); //更新结算表 //更新处方表收费标识 List <Model.MZ_PresMaster> lstPresMaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetListArray(HIS.BLL.Tables.mz_presmaster.COSTMASTERID + oleDb.EuqalTo() + BudgetaryChargeInfos[chargeCount].ChargeID); if (lstPresMaster.Count == 0) { throw new OperatorException("没有找到要结算的处方,请确认是否已被人收费"); } foreach (Model.MZ_PresMaster mz_presmaster in lstPresMaster) { if (mz_presmaster.Charge_Flag == 0) { mz_presmaster.Charge_Flag = 1; mz_presmaster.TicketCode = perfCode; //前缀 BudgetaryChargeInfos[chargeCount].InvoiceNO; mz_presmaster.TicketNum = chargeBill.TicketNum; mz_presmaster.ChargeCode = OperatorId.ToString(); BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(mz_presmaster); } else { throw new OperatorException("该处方已被其他收费员收费!"); } } } else { throw new OperatorException("没有找到结算号的记录!"); } } for (int i = 0; i < prescriptions.Length; i++) { clinicInterface.ChangePresStatus(prescriptions[i].DocPresId, 1); } oleDb.CommitTransaction( ); } catch (OperatorException operr) { oleDb.RollbackTransaction( ); throw operr; } catch (Exception err) { oleDb.RollbackTransaction( ); ErrorWriter.WriteLog(err.Message); throw new Exception("正式结算发生错误!"); } //发票对象 try { ChargeInvoicies = new Invoice[BudgetaryChargeInfos.Length]; for (int i = 0; i < BudgetaryChargeInfos.Length; i++) { ChargeInvoicies[i] = new Invoice(BudgetaryChargeInfos[i].PerfChar, BudgetaryChargeInfos[i].InvoiceNO, OPDBillKind.门诊收费发票); } } catch (Exception err) { ErrorWriter.WriteLog(err.Message); throw new OperatorException("收费成功,但生成发票对象失败!"); } return(true); }
/// <summary> /// 结算 /// </summary> /// <param name="BudgetaryChargeInfos">预算后产生的计算信息</param> /// <param name="prescriptions">要收费的处方</param> /// <param name="ChargeInvoicies">结算成功后返回的发票结果,数组对象</param> /// <returns></returns> private bool _charge(ChargeInfo[] BudgetaryChargeInfos, Prescription[] prescriptions, out BaseInvoice[] ChargeInvoicies) { try { MZClinicInterface clinicInterface = new MZClinicInterface(); for (int presindex = 0; presindex < prescriptions.Length; presindex++) { if (prescriptions[presindex].DocPresId > 0) { decimal mzdocfee = clinicInterface.GetDocPresMoney(prescriptions[presindex].DocPresId); if (mzdocfee != prescriptions[presindex].Total_Fee) { throw new Exception("门诊医生站已对该收费处方进行修改,请重新刷新处方再点收银!"); } } } for (int chargeCount = 0; chargeCount < BudgetaryChargeInfos.Length; chargeCount++) { if (BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Exists(BudgetaryChargeInfos[chargeCount].ChargeID)) { HIS.Model.MZ_CostMaster chargeBill = new HIS.Model.MZ_CostMaster( ); chargeBill = BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).GetModel(BudgetaryChargeInfos[chargeCount].ChargeID); chargeBill.Self_Fee = BudgetaryChargeInfos[chargeCount].SelfFee; chargeBill.Village_Fee = BudgetaryChargeInfos[chargeCount].VillageFee; chargeBill.Favor_Fee = BudgetaryChargeInfos[chargeCount].FavorFee; chargeBill.Pos_Fee = BudgetaryChargeInfos[chargeCount].PosFee; chargeBill.Money_Fee = BudgetaryChargeInfos[chargeCount].CashFee; chargeBill.Self_Tally = BudgetaryChargeInfos[chargeCount].SelfTally; chargeBill.Ticket_Flag = 0; chargeBill.CostDate = HIS.SYSTEM.PubicBaseClasses.XcDate.ServerDateTime; chargeBill.Record_Flag = 0; string perfCode = ""; chargeBill.TicketNum = InvoiceManager.GetBillNumber(OPDBillKind.门诊收费发票, OperatorId, false, out perfCode); chargeBill.TicketCode = perfCode; //前缀 //BudgetaryChargeInfos[chargeCount].InvoiceSerialNO = Convert.ToInt32( chargeBill.TicketNum ); //BudgetaryChargeInfos[chargeCount].PerfChar = perfCode; //BudgetaryChargeInfos[chargeCount].ChargeDate = chargeBill.CostDate; BudgetaryChargeInfos[chargeCount].InvoiceSerialNO = Convert.ToInt32(chargeBill.TicketNum); BudgetaryChargeInfos[chargeCount].InvoiceNO = chargeBill.TicketNum; BudgetaryChargeInfos[chargeCount].PerfChar = perfCode; BudgetaryChargeInfos[chargeCount].ChargeDate = chargeBill.CostDate; BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Update(chargeBill); //更新结算表 //更新处方表收费标识 HIS.Model.MZ_PresMaster presMaster = new HIS.Model.MZ_PresMaster( ); presMaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(BudgetaryChargeInfos[chargeCount].PrescriptionID); if (presMaster.Charge_Flag == 0) { presMaster.Charge_Flag = 1; presMaster.RoungingMoney = presMaster.Total_Fee - BudgetaryChargeInfos[chargeCount].TotalFee; presMaster.Total_Fee = BudgetaryChargeInfos[chargeCount].TotalFee; presMaster.TicketCode = perfCode;//前缀//BudgetaryChargeInfos[chargeCount].InvoiceNO; presMaster.TicketNum = chargeBill.TicketNum; presMaster.CostMasterID = BudgetaryChargeInfos[chargeCount].ChargeID; presMaster.ChargeCode = OperatorId.ToString( ); BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(presMaster); } else { throw new OperatorException("该处方已被其他收费员收费!"); } } else { throw new OperatorException("没有找到结算号的记录!"); } } for (int i = 0; i < prescriptions.Length; i++) { clinicInterface.ChangePresStatus(prescriptions[i].DocPresId, 1); } //生成发票 ChargeInvoicies = new BaseInvoice[BudgetaryChargeInfos.Length]; for (int i = 0; i < BudgetaryChargeInfos.Length; i++) { ChargeInvoicies[i] = new Invoice(BudgetaryChargeInfos[i].PerfChar, BudgetaryChargeInfos[i].InvoiceNO, OPDBillKind.门诊收费发票); } return(true); } catch (OperatorException operr) { throw operr; } catch (Exception err) { throw err; } }