/// <summary> /// 删除处方 /// </summary> /// <param name="PrescriptionId">要删除的处方ID</param> /// <returns>被删除的处方数</returns> public int DeletePrescription(int PrescriptionId) { Model.MZ_PresMaster mz_presmaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(PrescriptionId); if (mz_presmaster.Charge_Flag == 1) { throw new OperatorException("该处方已经收费,不能删除!"); } oleDb.BeginTransaction(); try { int effectRow = 0; List <HIS.Model.MZ_PresOrder> detail = BindEntity <Model.MZ_PresOrder> .CreateInstanceDAL(oleDb).GetListArray("PRESMASTERID=" + PrescriptionId); for (int i = 0; i < detail.Count; i++) { BindEntity <Model.MZ_PresOrder> .CreateInstanceDAL(oleDb).Delete(((HIS.Model.MZ_PresOrder)detail[i]).PresOrderID); effectRow++; } BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Delete(PrescriptionId); effectRow++; oleDb.CommitTransaction(); return(effectRow); } catch (Exception err) { oleDb.RollbackTransaction(); ErrorWriter.WriteLog(err.Message); return(0); } }
/// <summary> /// 预算 /// </summary> /// <param name="prescriptions">处方对象</param> /// <returns>预结算信息</returns> public override ChargeInfo[] Budget(Prescription[] prescriptions) { //////////////////////////////////////////////////////////////////////////////// //处理过程 //先由医院做预算,完成后用 病人就诊序号+处方头ID+结算头ID组合作为农合的mzId, //因为农合要求mzId不能重复,所以医院结算必须放在前以此产生结算头ID ///////////////////////////////////////////////////////////////////////////////// //提交医院结算 ChargeInfo[] hisChargeInfos = base.Budget(prescriptions); InsurChargeInfo insurChargeInfo = new InsurChargeInfo(); //构造农合接口对象 HIS.MZ_BLL.InsurInterface.IInsureCharge insureCharge = HIS.MZ_BLL.InsurInterface.InsurInterfaceFactory.CreateInsurInstance(InsurType.新农合); //将包含农合信息的病人对象传给接口 insureCharge.HisPatientInfo = Patient; //预算。 insurChargeInfo = insureCharge.PreviewCharge(prescriptions); //合计补偿金额 for (int i = 0; i < hisChargeInfos.Length; i++) { if (hisChargeInfos[i].ChargeID == prescriptions[i].ChargeID) { hisChargeInfos[i].VillageFee += prescriptions[i].RedeemCost; } } oleDb.BeginTransaction(); try { //回写数据库字段 for (int i = 0; i < prescriptions.Length; i++) { Model.MZ_PresMaster presMaster = HIS.SYSTEM.Core.BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(prescriptions[i].PrescriptionID); presMaster.RedeemCost = prescriptions[i].RedeemCost; HIS.SYSTEM.Core.BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(presMaster); //更新处方头的补偿金额 } oleDb.CommitTransaction( ); } catch (OperatorException operr) { oleDb.RollbackTransaction( ); throw operr; } catch (Exception err) { oleDb.RollbackTransaction( ); ErrorWriter.WriteLog(err.Message); throw new Exception("农合收费预算发生错误!"); } return(hisChargeInfos); }
/// <summary> /// 挂号正式结算 /// </summary> /// <param name="Patient"></param> /// <param name="budgetInfo"></param> /// <returns></returns> public override bool Register(RegPatient Patient, ChargeInfo budgetInfo) { try { //更新病人门诊号 BindEntity <Model.MZ_PatList> .CreateInstanceDAL(oleDb).Update(Tables.mz_patlist.PATLISTID + "=" + Patient.PatListID, Tables.mz_patlist.VISITNO + "='" + Patient.VisitNo + "'"); OPDBillKind invoiceType = OPDBillKind.门诊挂号发票; if (Convert.ToInt32(OPDParamter.Parameters["012"]) == 1) { invoiceType = OPDBillKind.门诊收费发票; } string perfChar = ""; string invoiceNo = InvoiceManager.GetBillNumber(invoiceType, OperatorId, false, out perfChar); Model.MZ_PresMaster mz_presmaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(budgetInfo.PrescriptionID); mz_presmaster.Record_Flag = 0; //改为正常状态 mz_presmaster.Charge_Flag = 1; //置为收费状态 mz_presmaster.TicketNum = invoiceNo; mz_presmaster.TicketCode = perfChar; //前缀 mz_presmaster.ChargeCode = OperatorId.ToString( ); BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(mz_presmaster); Model.MZ_CostMaster mz_costmaster = BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).GetModel(budgetInfo.ChargeID); mz_costmaster.Record_Flag = 0; mz_costmaster.ChargeCode = OperatorId.ToString( ); mz_costmaster.ChargeName = OperatorName; mz_costmaster.TicketNum = invoiceNo; mz_costmaster.TicketCode = perfChar;//发票前缀 mz_costmaster.Favor_Fee = budgetInfo.FavorFee; mz_costmaster.Money_Fee = budgetInfo.CashFee; mz_costmaster.Pos_Fee = budgetInfo.PosFee; mz_costmaster.Self_Fee = budgetInfo.SelfFee; mz_costmaster.Village_Fee = budgetInfo.VillageFee; BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Update(mz_costmaster); return(true); } catch (OperatorException operr) { throw operr; } catch (Exception err) { throw err; } }
/// <summary> /// 保存结算头表 /// </summary> /// <param name="Patient"></param> /// <param name="mz_presmaster"></param> /// <returns></returns> private Model.MZ_CostMaster SaveCostMaster(RegPatient Patient, Model.MZ_PresMaster mz_presmaster) { Model.MZ_CostMaster mz_costmaster = new HIS.Model.MZ_CostMaster(); mz_costmaster.ChargeCode = OperatorId.ToString(); mz_costmaster.ChargeName = OperatorName; mz_costmaster.CostDate = HIS.SYSTEM.PubicBaseClasses.XcDate.ServerDateTime; mz_costmaster.Hang_Flag = (int)OPDOperationType.门诊挂号; mz_costmaster.PatID = Patient.PatID; mz_costmaster.PatListID = Patient.PatListID; mz_costmaster.PresMasterID = mz_presmaster.PresMasterID; mz_costmaster.Record_Flag = 9; mz_costmaster.Total_Fee = mz_presmaster.Total_Fee; BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Add(mz_costmaster); return(mz_costmaster); }
/// <summary> /// 更新退药标识 /// </summary> /// <param name="presMasterID">处方头ID</param> /// <returns></returns> public static bool UpdateBackDrugFlag(int presMasterID) { try { Model.MZ_PresMaster presMaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(presMasterID); presMaster.Drug_Flag = 0; BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(presMaster); return(true); } catch (Exception err) { ErrorWriter.WriteLog(err.Message); return(false); } }
/// <summary> /// 保存处方明细 /// </summary> /// <param name="Patient"></param> /// <param name="mz_presmaster"></param> /// <param name="base_service_item"></param> /// <returns></returns> private static Model.MZ_PresOrder SavePresOrder(RegPatient Patient, Model.MZ_PresMaster mz_presmaster, Model.BASE_SERVICE_ITEMS base_service_item) { Model.MZ_PresOrder mz_presorder = new HIS.Model.MZ_PresOrder(); mz_presorder.Amount = 1; mz_presorder.BigItemCode = base_service_item.STATITEM_CODE; mz_presorder.Buy_Price = base_service_item.PRICE; mz_presorder.ItemID = base_service_item.ITEM_ID; mz_presorder.ItemName = base_service_item.ITEM_NAME; mz_presorder.ItemType = "00"; mz_presorder.PatID = Patient.PatID; mz_presorder.PatListID = Patient.PatListID; mz_presorder.PresAmount = 1; mz_presorder.PresMasterID = mz_presmaster.PresMasterID; mz_presorder.RelationNum = 1; mz_presorder.Sell_Price = base_service_item.PRICE; mz_presorder.Unit = base_service_item.ITEM_UNIT; mz_presorder.Tolal_Fee = mz_presorder.Amount * mz_presorder.PresAmount * mz_presorder.Sell_Price; BindEntity <Model.MZ_PresOrder> .CreateInstanceDAL(oleDb).Add(mz_presorder); return(mz_presorder); }
/// <summary> /// 预算 /// </summary> /// <param name="prescriptions">要预算的处方</param> /// <returns>预算信息,供正式结算用</returns> public override ChargeInfo[] Budget(Prescription[] prescriptions) { //单张处方明细转化为大项目明细合并后累加在取舍。 //保存每张处方的大项目明细 List <List <Item> > lstStatItems = new List <List <Item> >( ); //本次结算总金额(等于每张处方舍入后的金额的合计) decimal chargeTotalCost = 0; #region 合并大类并计算舍入金额 try { for (int i = 0; i < prescriptions.Length; i++) { List <Item> lstTemp = new List <Item>( ); lstTemp = MergePrescriptionByStatItemCode(ref prescriptions[i]); chargeTotalCost = chargeTotalCost + prescriptions[i].Total_Fee; lstStatItems.Add(lstTemp); } } catch (Exception err) { ErrorWriter.WriteLog(err.Message + "\r\n" + err.StackTrace); throw new OperatorException("合并项目发生错误!"); } #endregion //保存合并后的所有大项目明细,类型MZ_CostOrder Hashtable htCostOrder = new Hashtable(); #region 合并所有结算明细(不需要再舍入) try { foreach (List <Item> lstTemp in lstStatItems) { foreach (object obj in lstTemp) { if (htCostOrder.ContainsKey(((Item)obj).Text.Trim( ))) { Item item = (Item)obj; Model.MZ_CostOrder mz_costorder = (Model.MZ_CostOrder)htCostOrder[item.Text.Trim( )]; mz_costorder.Total_Fee = mz_costorder.Total_Fee + Convert.ToDecimal(item.Value); } else { Model.MZ_CostOrder mz_costorder = new HIS.Model.MZ_CostOrder( ); mz_costorder.ItemType = ((Item)obj).Text.Trim( ); mz_costorder.Total_Fee = Convert.ToDecimal(((Item)obj).Value); htCostOrder.Add(mz_costorder.ItemType, mz_costorder); } } } } catch (Exception err) { ErrorWriter.WriteLog(err.Message); throw new OperatorException("合并明细大类发生错误!"); } #endregion int costmasterid = 0; //本次结算ID #region 数据库操作,得到结算号 try { oleDb.BeginTransaction( ); #region 赋值结算头表并保存 HIS.Model.MZ_CostMaster mz_costmaster = new HIS.Model.MZ_CostMaster( ); mz_costmaster.PatID = Patient.PatID; mz_costmaster.PatListID = Patient.PatListID; mz_costmaster.PresMasterID = 0; mz_costmaster.TicketNum = ""; mz_costmaster.TicketCode = ""; mz_costmaster.ChargeCode = OperatorId.ToString( ); //mz_costmaster.ChargeName = PublicDataReader.GetEmployeeNameById( OperatorId ); mz_costmaster.ChargeName = BaseDataController.GetName(BaseDataCatalog.人员列表, OperatorId); mz_costmaster.Total_Fee = chargeTotalCost;//结算表的总金额 mz_costmaster.Self_Fee = 0; mz_costmaster.Village_Fee = 0; mz_costmaster.Favor_Fee = 0; mz_costmaster.Pos_Fee = 0; mz_costmaster.Money_Fee = 0; mz_costmaster.Ticket_Flag = 0; mz_costmaster.Record_Flag = 9;//预结算记录状态置为9 mz_costmaster.OldID = 0; mz_costmaster.AccountID = 0; mz_costmaster.Hang_Flag = (int)OPDOperationType.门诊收费; mz_costmaster.Hurried_Flag = Patient.IsEmergency ? 1 : 0; mz_costmaster.CostMasterID = BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Add(mz_costmaster); #endregion costmasterid = mz_costmaster.CostMasterID; #region 更新处方表的结算号和总金额,舍入金额 for (int prescCount = 0; prescCount < prescriptions.Length; prescCount++) { string strWhere = Tables.mz_presmaster.PRESMASTERID + oleDb.EuqalTo( ) + prescriptions[prescCount].PrescriptionID; Model.MZ_PresMaster mz_presmaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(strWhere); if (mz_presmaster.Charge_Flag == 1) { throw new OperatorException("处方已被别的收费员收费,请确认!"); } if (prescriptions[prescCount].DocPresId != 0) { if (HIS.Interface.InstanceFactory.CreatMZ_ClinicDataInstance().CheckPresStatus(prescriptions[prescCount].DocPresId) == false) { throw new OperatorException("处方已经收费,请重新刷新病人信息以获取最新未收费处方!\r\n(建议不要同时打开多个收费界面)"); } } //更新处方表的结算号和总金额,舍入金额 BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(strWhere, Tables.mz_presmaster.COSTMASTERID + oleDb.EuqalTo( ) + mz_costmaster.CostMasterID, Tables.mz_presmaster.TOTAL_FEE + oleDb.EuqalTo( ) + prescriptions[prescCount].Total_Fee, Tables.mz_presmaster.ROUNGINGMONEY + oleDb.EuqalTo( ) + prescriptions[prescCount].RoundingMoney); } #endregion #region 保存结算明细到数据库(按大项目保存) foreach (object obj in htCostOrder) { HIS.Model.MZ_CostOrder mz_costorder = (HIS.Model.MZ_CostOrder)((System.Collections.DictionaryEntry)obj).Value; mz_costorder.CostID = mz_costmaster.CostMasterID; //保存到数据库 mz_costorder.CostOrderID = BindEntity <Model.MZ_CostOrder> .CreateInstanceDAL(oleDb).Add(mz_costorder); } #endregion oleDb.CommitTransaction( ); } catch (OperatorException oe) { oleDb.RollbackTransaction( ); throw oe; } catch (Exception err) { oleDb.RollbackTransaction( ); ErrorWriter.WriteLog(err.Message + "\r\n" + err.StackTrace); throw new OperatorException("保存预算结果到数据库发生错误!"); } #endregion //回填处方的结算号 for (int prescCount = 0; prescCount < prescriptions.Length; prescCount++) { prescriptions[prescCount].ChargeID = costmasterid; } #region 返回预算结果 try { Hashtable htInvoiceItem = new Hashtable( ); foreach (object obj in htCostOrder) { HIS.Model.MZ_CostOrder mz_costorder = (HIS.Model.MZ_CostOrder)((System.Collections.DictionaryEntry)obj).Value; InvoiceItem invoice = GetInvoiceByStatCode(mz_costorder.ItemType.Trim( )); invoice.Cost = mz_costorder.Total_Fee; if (htInvoiceItem.ContainsKey(invoice.ItemCode.Trim( ))) { InvoiceItem _invoice = (InvoiceItem)htInvoiceItem[invoice.ItemCode]; _invoice.Cost = _invoice.Cost + invoice.Cost; htInvoiceItem.Remove(invoice.ItemCode); htInvoiceItem.Add(_invoice.ItemCode, _invoice); } else { htInvoiceItem.Add(invoice.ItemCode, invoice); } } List <InvoiceItem> chargeItems = new List <InvoiceItem>( ); foreach (object item in htInvoiceItem) { chargeItems.Add((InvoiceItem)((DictionaryEntry)item).Value); } ChargeInfo chargeInfos = new ChargeInfo( ); chargeInfos.Items = chargeItems.ToArray( ); chargeInfos.ChargeID = costmasterid; chargeInfos.TotalFee = chargeTotalCost; ChargeInfo[] chargeInfo = new ChargeInfo[1]; chargeInfo[0].TotalFee = chargeTotalCost; chargeInfo[0] = chargeInfos; //计算本次的优惠金额 chargeInfo[0].FavorFee = GetFavorCost(Patient.MediType, chargeInfo[0], prescriptions); return(chargeInfo); } catch (Exception err) { ErrorWriter.WriteLog(err); throw new OperatorException("返回预算结果发生错误!"); } #endregion }
/// <summary> /// 更新本次就诊登记信息 /// </summary> /// <returns>成功标识;true</returns> public bool UpdateRegister() { try { HIS.Model.MZ_PatList register = BindEntity <Model.MZ_PatList> .CreateInstanceDAL(oleDb).GetModel(this.PatListID); register.CureDeptCode = _cureDeptCode; //就诊科室 register.CureEmpCode = _cureEmpCode; //就诊医生 register.DiseaseCode = _diseaseCode; //疾病代码 if (register.REG_DOC_CODE.Trim( ) == "") { //如果挂号医生为空,则将挂号医生更改为当前就诊医生 register.REG_DOC_CODE = _cureEmpCode; register.REG_DOC_NAME = BaseDataController.GetName(BaseDataCatalog.人员列表, Convert.ToInt32(_cureEmpCode)); //PublicDataReader.GetEmployeeNameById( Convert.ToInt32(_cureEmpCode) ); register.REG_DEPT_CODE = _cureDeptCode; register.REG_DEPT_NAME = BaseDataController.GetName(BaseDataCatalog.科室列表, Convert.ToInt32(_cureDeptCode)); // PublicDataReader.GetDeptNameById( Convert.ToInt32( _cureDeptCode ) ); } register.DiseaseName = _diseaseName.Replace("|", "") + "|" + _diseaseMemo.Replace("|", ""); //疾病名称 register.HpCode = _hpCode; //就医机构代码(病人单位代码) register.HpGrade = _hpGrade; //就医机构级别 register.MediCard = _mediCard; //医疗证卡号 register.MediType = _mediType; //就诊类型 register.PatCode = ""; //病人代码???? register.PatID = this.PatID; //病人ID,如果是普通病人,则为0;否则参见PatientInfo.PatID; register.PatListID = this.PatListID; //本次就诊号 register.PatName = this.PatientName; //病人姓名 register.PatSex = this.Sex; //性别 register.PYM = this.PYM; //拼音码 register.WBM = this.WBM; //五笔码 register.Age = this.Age; //年龄 register.VisitNo = this.VisitNo; //就诊号(门诊号) BindEntity <Model.MZ_PatList> .CreateInstanceDAL(oleDb).Update(register); Model.PatientInfo patientinfo = BindEntity <Model.PatientInfo> .CreateInstanceDAL(oleDb).GetModel(Convert.ToInt32(this.PatID)); if (patientinfo != null) { patientinfo.PatName = register.PatName; patientinfo.PatSex = register.PatSex; patientinfo.ALLERGIC = this.Allergic; BindEntity <Model.PatientInfo> .CreateInstanceDAL(oleDb).Update(patientinfo); } //将处方表中挂号的记录改为处方医生 string strWhere = Tables.mz_presmaster.PATLISTID + oleDb.EuqalTo() + this.PatListID + oleDb.And( ) + Tables.mz_presmaster.HAND_FLAG + oleDb.EuqalTo() + "0"; Model.MZ_PresMaster mz_presmaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(strWhere); if (mz_presmaster != null) { if (mz_presmaster.PresDocCode == null || mz_presmaster.PresDocCode.Trim( ) == "") { strWhere += oleDb.And( ) + Tables.mz_presmaster.PRESMASTERID + oleDb.EuqalTo( ) + mz_presmaster.PresMasterID; BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(strWhere, Tables.mz_presmaster.PRESDOCCODE + oleDb.EuqalTo( ) + "'" + _cureEmpCode + "'", Tables.mz_presmaster.PRESDEPTCODE + oleDb.EuqalTo( ) + "'" + _cureDeptCode + "'"); } } return(true); } catch (OperatorException operr) { throw operr; } catch (Exception err) { ErrorWriter.WriteLog(err.Message); throw new Exception("更新病人等级信息发生错误!"); } }
/// <summary> /// 保存处方 /// </summary> /// <param name="Prescriptions">要保存的处方</param> /// <returns>成功标志</returns> /// <remarks></remarks> public bool SavePrescription(Prescription[] Prescriptions) { oleDb.BeginTransaction(); try { for (int i = 0; i < Prescriptions.Length; i++) { if (!Prescriptions[i].Modified) { continue; } if (Prescriptions[i].PresDetails == null) { continue; } if (Prescriptions[i].PresDetails.Length == 0) { continue; } HIS.Model.MZ_PresMaster t_mz_prescMaster = new HIS.Model.MZ_PresMaster( ); #region 赋值 t_mz_prescMaster.PatID = Prescriptions[i].PatientID; t_mz_prescMaster.PatListID = Prescriptions[i].RegisterID; t_mz_prescMaster.Charge_Flag = Prescriptions[i].Charge_Flag; t_mz_prescMaster.ChargeCode = Prescriptions[i].ChargeCode; t_mz_prescMaster.CostMasterID = Prescriptions[i].ChargeID; t_mz_prescMaster.Drug_Flag = Prescriptions[i].Drug_Flag; t_mz_prescMaster.ExecDeptCode = Prescriptions[i].ExecDeptCode; t_mz_prescMaster.ExecDocCode = Prescriptions[i].ExecDocCode; t_mz_prescMaster.OldID = Prescriptions[i].OldPresID; t_mz_prescMaster.PresCostCode = Prescriptions[i].PresCostCode; t_mz_prescMaster.PresMasterID = Prescriptions[i].PrescriptionID; t_mz_prescMaster.PresType = Prescriptions[i].PrescType; t_mz_prescMaster.PresDeptCode = Prescriptions[i].PresDeptCode; t_mz_prescMaster.PresDocCode = Prescriptions[i].PresDocCode; t_mz_prescMaster.Record_Flag = Prescriptions[i].Record_Flag; t_mz_prescMaster.TicketCode = Prescriptions[i].TicketCode; t_mz_prescMaster.TicketNum = Prescriptions[i].TicketNum; t_mz_prescMaster.Total_Fee = Prescriptions[i].Total_Fee; t_mz_prescMaster.PresDate = Prescriptions[i].PresDate; t_mz_prescMaster.PresAmount = Prescriptions[i].PresDetails[0].PresAmount; t_mz_prescMaster.Hand_Flag = (int)OPDOperationType.门诊收费; t_mz_prescMaster.DocPresId = Prescriptions[i].DocPresId; #endregion if (BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Exists(Prescriptions[i].PrescriptionID)) { Model.MZ_PresMaster mz_presmaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(Prescriptions[i].PrescriptionID); if (mz_presmaster.Charge_Flag == 1) { throw new OperatorException("处方已收费,不能修改!"); } //更新处方头 BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(t_mz_prescMaster); } else { //插入新处方 int ret1 = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Add(t_mz_prescMaster); Prescriptions[i].PrescriptionID = ret1; } //更新或增加明细 PrescriptionDetail[] details = Prescriptions[i].PresDetails; for (int j = 0; j < details.Length; j++) { if (details[j].Amount == 0) { throw new OperatorException("【" + details[j].Itemname + "】数量为零,请输入一个大于零的数"); } if (details[j].BigitemCode == "01" || details[j].BigitemCode == "02" || details[j].BigitemCode == "03") { decimal sellprice, buyprice, storevalue; decimal inputValue = details[j].Amount * details[j].PresAmount; PublicDataReader.StoreExists(details[j].ItemId, Prescriptions[i].ExecDeptCode, inputValue, out sellprice, out buyprice, out storevalue); } HIS.Model.MZ_PresOrder t_mz_presOrder = new HIS.Model.MZ_PresOrder( ); #region 赋值 t_mz_presOrder.Amount = details[j].Amount; t_mz_presOrder.BigItemCode = details[j].BigitemCode; t_mz_presOrder.Buy_Price = details[j].Buy_price; t_mz_presOrder.CaseID = details[j].ComplexId; //预留的CASEID用来保存组合项目的ID t_mz_presOrder.ItemID = details[j].ItemId; t_mz_presOrder.ItemName = details[j].Itemname; t_mz_presOrder.ItemType = details[j].ItemType; t_mz_presOrder.Order_Flag = details[j].Order_Flag; t_mz_presOrder.PassID = details[j].DocPrescDetailId; //预留的PassID用来保存门诊医生处方明细ID t_mz_presOrder.PatID = this.patient.PatID; t_mz_presOrder.PatListID = this.patient.PatListID; t_mz_presOrder.PresAmount = details[j].PresAmount; t_mz_presOrder.PresMasterID = Prescriptions[i].PrescriptionID; t_mz_presOrder.PresOrderID = details[j].DetailId; t_mz_presOrder.RelationNum = details[j].RelationNum; t_mz_presOrder.Sell_Price = details[j].Sell_price; t_mz_presOrder.Standard = details[j].Standard; t_mz_presOrder.Tolal_Fee = details[j].Tolal_Fee; t_mz_presOrder.Unit = details[j].Unit; #endregion if (BindEntity <Model.MZ_PresOrder> .CreateInstanceDAL(oleDb).Exists(details[j].DetailId)) { //更新处方明细 BindEntity <Model.MZ_PresOrder> .CreateInstanceDAL(oleDb).Update(t_mz_presOrder); } else { //插入新处方明细 int ret2 = BindEntity <Model.MZ_PresOrder> .CreateInstanceDAL(oleDb).Add(t_mz_presOrder); details[j].DetailId = ret2; } } } oleDb.CommitTransaction( ); return(true); } catch (OperatorException operr) { oleDb.RollbackTransaction( ); throw operr; } catch (Exception err) { oleDb.RollbackTransaction( ); ErrorWriter.WriteLog(err.Message); throw new Exception("保存处方发生错误!"); } }
/// <summary> /// 挂号的预处理 /// </summary> /// <param name="Patient"></param> /// <returns></returns> public override ChargeInfo Budget(RegPatient Patient) { //保存就诊记录 Model.MZ_PatList mz_patlist = SavePatList(Patient); Patient.PatListID = mz_patlist.PatListID; //查找所需费用项目 List <Model.MZ_REG_ITEM_FEE> listRegFee = BindEntity <Model.MZ_REG_ITEM_FEE> .CreateInstanceDAL(oleDb).GetListArray(BLL.Tables.mz_reg_item_fee.TYPE_CODE + "='" + Patient.RegTypeCode.Trim() + "'"); //写入处方表 Model.MZ_PresMaster mz_presmaster = SavePresMaster(Patient); Hashtable htCostOrder = new Hashtable(); Model.MZ_CostOrder mz_costorder = null; foreach (Model.MZ_REG_ITEM_FEE mz_reg_item_fee in listRegFee) { Model.BASE_SERVICE_ITEMS base_service_item = BindEntity <Model.BASE_SERVICE_ITEMS> .CreateInstanceDAL(oleDb).GetModel(mz_reg_item_fee.ITEM_ID); if (base_service_item == null) { throw new OperatorException("找不到项目编号为" + mz_reg_item_fee.ITEM_ID.ToString() + "的项目"); } //保存明细 Model.MZ_PresOrder mz_presorder = SavePresOrder(Patient, mz_presmaster, base_service_item); mz_presmaster.Total_Fee += mz_presorder.Tolal_Fee; if (htCostOrder.Contains(base_service_item.STATITEM_CODE)) { ((Model.MZ_CostOrder)htCostOrder[base_service_item.STATITEM_CODE]).Total_Fee += mz_presorder.Tolal_Fee; } else { mz_costorder = new HIS.Model.MZ_CostOrder(); mz_costorder.ItemType = base_service_item.STATITEM_CODE; mz_costorder.Total_Fee = mz_presorder.Tolal_Fee; htCostOrder.Add(base_service_item.STATITEM_CODE, mz_costorder); } } //写结算记录 Model.MZ_CostMaster mz_costmaster = SaveCostMaster(Patient, mz_presmaster); InvoiceItem[] invoiceItems = new InvoiceItem[htCostOrder.Count]; int count = 0; foreach (object item in htCostOrder) { mz_costorder = (Model.MZ_CostOrder)((DictionaryEntry)item).Value; mz_costorder.CostID = mz_costmaster.CostMasterID; BindEntity <Model.MZ_CostOrder> .CreateInstanceDAL(oleDb).Add(mz_costorder); Model.BASE_STAT_ITEM base_stat_item = BindEntity <Model.BASE_STAT_ITEM> .CreateInstanceDAL(oleDb).GetModel(BLL.Tables.base_stat_item.CODE + "='" + mz_costorder.ItemType.Trim() + "'"); Model.BASE_STAT_MZFP base_stat_mzfp = BindEntity <Model.BASE_STAT_MZFP> .CreateInstanceDAL(oleDb).GetModel(BLL.Tables.base_stat_mzfp.CODE + "='" + base_stat_item.MZFP_CODE.Trim() + "'"); invoiceItems[count].ItemName = base_stat_mzfp.ITEM_NAME; invoiceItems[count].ItemCode = base_stat_mzfp.CODE; invoiceItems[count].Cost = mz_costorder.Total_Fee; count++; } //回写处方的总金额和结算号 BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(BLL.Tables.mz_presmaster.PRESMASTERID + "=" + mz_presmaster.PresMasterID, BLL.Tables.mz_presmaster.TOTAL_FEE + "=" + mz_presmaster.Total_Fee, BLL.Tables.mz_presmaster.COSTMASTERID + "=" + mz_costmaster.CostMasterID); ChargeInfo regInfo = new ChargeInfo(); regInfo.ChargeID = mz_costmaster.CostMasterID; regInfo.ChargeDate = mz_costmaster.CostDate; regInfo.TotalFee = mz_costmaster.Total_Fee; regInfo.PrescriptionID = mz_presmaster.PresMasterID; regInfo.Items = invoiceItems; return(regInfo); }
/// <summary> /// 取消挂号 /// </summary> /// <param name="RegInvoiceNo">挂号发票号</param> /// <returns></returns> public override bool CancelRegister(string RegInvoiceNo, string PerfChar) { try { //取得原记录 string strWhere1_1 = Tables.mz_costmaster.TICKETCODE + oleDb.EuqalTo( ) + "'" + PerfChar + "'" + oleDb.And() + Tables.mz_costmaster.TICKETNUM + oleDb.EuqalTo( ) + "'" + RegInvoiceNo + "' " + oleDb.And( ) + Tables.mz_costmaster.RECORD_FLAG + oleDb.EuqalTo( ) + "0"; Model.MZ_CostMaster mz_costmaster = BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).GetModel(strWhere1_1); string strWhere1_2 = Tables.mz_costorder.COSTID + oleDb.EuqalTo( ) + mz_costmaster.CostMasterID; List <Model.MZ_CostOrder> list_mz_costorder = BindEntity <Model.MZ_CostOrder> .CreateInstanceDAL(oleDb).GetListArray(strWhere1_2); string strWhere2_1 = Tables.mz_presmaster.COSTMASTERID + oleDb.EuqalTo( ) + mz_costmaster.CostMasterID; Model.MZ_PresMaster mz_presmaster = BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).GetModel(strWhere2_1); string strWhere2_2 = Tables.mz_presorder.PRESMASTERID + oleDb.EuqalTo( ) + mz_presmaster.PresMasterID; List <Model.MZ_PresOrder> list_mz_presorder = BindEntity <Model.MZ_PresOrder> .CreateInstanceDAL(oleDb).GetListArray(strWhere2_2); //挂号处方头退费 BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(strWhere2_1, Tables.mz_presmaster.RECORD_FLAG + oleDb.EuqalTo( ) + "1"); //加入冲正的处方头 mz_presmaster.Record_Flag = 2; mz_presmaster.Total_Fee = mz_presmaster.Total_Fee * -1; mz_presmaster.PresDate = HIS.SYSTEM.PubicBaseClasses.XcDate.ServerDateTime; mz_presmaster.ChargeCode = OperatorId.ToString( ); mz_presmaster.OldID = mz_presmaster.PresMasterID; BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Add(mz_presmaster); //加入明细 foreach (Model.MZ_PresOrder mz_presorder in list_mz_presorder) { mz_presorder.PresMasterID = mz_presmaster.PresMasterID; mz_presorder.Tolal_Fee = mz_presorder.Tolal_Fee * -1; mz_presorder.Amount = mz_presorder.Amount * -1; BindEntity <Model.MZ_PresOrder> .CreateInstanceDAL(oleDb).Add(mz_presorder); } //原记录置为退费状态 BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Update(strWhere1_1, Tables.mz_costmaster.RECORD_FLAG + oleDb.EuqalTo( ) + "1"); //加入冲正记录 mz_costmaster.Record_Flag = 2; mz_costmaster.Total_Fee = mz_costmaster.Total_Fee * -1; mz_costmaster.Favor_Fee = mz_costmaster.Favor_Fee * -1; mz_costmaster.Money_Fee = mz_costmaster.Money_Fee * -1; mz_costmaster.Pos_Fee = mz_costmaster.Pos_Fee * -1; mz_costmaster.Self_Fee = mz_costmaster.Self_Fee * -1; mz_costmaster.Village_Fee = mz_costmaster.Village_Fee * -1; mz_costmaster.AccountID = 0; mz_costmaster.PresMasterID = mz_presmaster.PresMasterID; mz_costmaster.OldID = mz_costmaster.CostMasterID; mz_costmaster.ChargeCode = OperatorId.ToString( ); mz_costmaster.ChargeName = OperatorName; BindEntity <Model.MZ_CostMaster> .CreateInstanceDAL(oleDb).Add(mz_costmaster); //明细 foreach (Model.MZ_CostOrder mz_costorder in list_mz_costorder) { mz_costorder.CostID = mz_costmaster.CostMasterID; mz_costorder.Total_Fee = mz_costorder.Total_Fee * -1; BindEntity <Model.MZ_CostOrder> .CreateInstanceDAL(oleDb).Add(mz_costorder); } //回写处方的结算号 BindEntity <Model.MZ_PresMaster> .CreateInstanceDAL(oleDb).Update(Tables.mz_presmaster.PRESMASTERID + oleDb.EuqalTo( ) + mz_presmaster.PresMasterID, Tables.mz_presmaster.COSTMASTERID + oleDb.EuqalTo( ) + mz_costmaster.CostMasterID); return(true); } catch (OperatorException operr) { throw operr; } catch (Exception err) { throw err; } }