예제 #1
0
        /// <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);
            }
        }
예제 #2
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);
        }
예제 #3
0
        /// <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;
            }
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
            }
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        /// <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
        }
예제 #8
0
        /// <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("更新病人等级信息发生错误!");
            }
        }
예제 #9
0
        /// <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("保存处方发生错误!");
            }
        }
예제 #10
0
        /// <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);
        }
예제 #11
0
        /// <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;
            }
        }