/// <summary>
        /// 保存
        /// </summary>
        /// <returns></returns>
        public virtual int Save()
        {
            if (this.Valid(this.PatientInfo.ID) < 0)
            {
                return(-1);
            }
            //如果患者不是当天出院提示
            if (this.dtOutDate.Value.Date < this.PatientInfo.PVisit.InTime.Date)
            {
                MessageBox.Show("出院日期不能小于入院日期!", "提示");
                return(-1);
            }
            else
            {
                if (this.dtOutDate.Value.Date != this.inpatient.GetDateTimeFromSysDateTime().Date)
                {
                    DialogResult dr = MessageBox.Show("该患者的出院日期是: " +
                                                      this.dtOutDate.Value.ToString("yyyy年MM月dd日") + "  是否继续?", "提示",
                                                      MessageBoxButtons.YesNo, MessageBoxIcon.Information,
                                                      MessageBoxDefaultButton.Button1);
                    if (dr == DialogResult.No)
                    {
                        this.Err = "";
                        return(-1);
                    }
                }
            }
            //取患者最新的住院主表信息
            PatientInfo = this.inpatient.QueryPatientInfoByInpatientNO(this.PatientInfo.ID);
            if (PatientInfo == null)
            {
                this.Err = this.inpatient.Err;
                return(-1);
            }
            this.Err = "";
            //如果患者已不在本科,则清空数据---当患者转科后,如果本窗口没有关闭,会出现此种情况
            if (PatientInfo.PVisit.PatientLocation.NurseCell.ID != ((Neusoft.HISFC.Models.Base.Employee)Neusoft.FrameWork.Management.Connection.Operator).Nurse.ID)
            {
                this.Err = "患者已不在本病区,请刷新当前窗口";
                return(-1);
            }

            //如果患者在院状态发生变化,则不允许操作
            if (PatientInfo.PVisit.InState.ID.ToString() != "I")
            {
                this.Err = "患者信息已发生变化,请刷新当前窗口";
                return(-1);
            }

            #region add by xuewj 2010-10-19 临床路径接口 {10962AE3-C0B9-4cf7-91B6-CA956C1AFC2D}
            if (this.iClinicPath != null)
            {
                if (this.iClinicPath.PatientIsSelectedPath(this.PatientInfo.ID))
                {
                    this.Err = "该患者在临床路径中,请先退出路径!";
                    return(-1);
                }
            }
            #endregion

            #region {6BFCAC25-CC22-48ac-ADDB-76E169375EAB}
            //将转归、出院时间等赋值拿到接口判断之前
            //取出院登记信息
            this.GetOutInfo();
            #endregion

            #region addby xuewj 2010-10-11 {EFF73DC9-3543-49a4-9751-BC8D95F0BDD3} 郑大本地化,增加明细提示

            Neusoft.HISFC.BizProcess.Interface.IPatientOutCheck ipatientOutCheck = Neusoft.FrameWork.WinForms.Classes.UtilInterface.CreateObject(this.GetType(), typeof(Neusoft.HISFC.BizProcess.Interface.IPatientOutCheck)) as Neusoft.HISFC.BizProcess.Interface.IPatientOutCheck;
            bool isZZUCheck = false;
            if (ipatientOutCheck != null)//本地化实现了接口
            {
                string err = string.Empty;
                bool   bl  = ipatientOutCheck.IPatientOutCheck(PatientInfo, ref err);
                if (!bl)
                {
                    //MessageBox.Show(err);
                    return(-1);
                }
                isZZUCheck = true;
            }
            else
            {
                Neusoft.HISFC.BizProcess.Interface.IPatientShiftValid obj = Neusoft.FrameWork.WinForms.Classes.UtilInterface.CreateObject(this.GetType(), typeof(Neusoft.HISFC.BizProcess.Interface.IPatientShiftValid)) as Neusoft.HISFC.BizProcess.Interface.IPatientShiftValid;
                if (obj != null)
                {
                    string err = string.Empty;
                    bool   bl  = obj.IsPatientShiftValid(PatientInfo, Neusoft.HISFC.Models.Base.EnumPatientShiftValid.O, ref err);
                    if (!bl)
                    {
                        MessageBox.Show(err);
                        return(-1);
                    }
                }

                //{3E83AFA1-C364-4f72-8DFD-1B733CB9379E}
                //增加查询患者是否有未审核的退药记录,为出院登记判断用 Add by 王宇 2009.6.10
                int returnValue = this.pharmacyIntegrate.QueryNoConfirmQuitApply(PatientInfo.ID);
                if (returnValue == -1)
                {
                    MessageBox.Show("查询患者退药申请信息出错!" + this.pharmacyIntegrate.Err);

                    return(-1);
                }
                if (returnValue > 0) //有申请但是没有核准的退药信息
                {
                    //{29F39131-89B4-4128-B4C9-EAB9F07B719F}
                    if (!this.quitFeeApplyFlag)
                    {
                        MessageBox.Show("该患者有未审核的退药申请信息,不能进行出院操作!");
                        return(-1);
                    }
                    else
                    {
                        DialogResult result = MessageBox.Show("该患者有未审核的退药申请信息!是否继续?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                        if (result == DialogResult.No)
                        {
                            return(-1);
                        }
                    }
                }
            }
            #endregion
            //{3E83AFA1-C364-4f72-8DFD-1B733CB9379E} 增加完毕
            #region {6BFCAC25-CC22-48ac-ADDB-76E169375EAB}
            ////取出院登记信息
            //this.GetOutInfo();
            #endregion

            //出院登记
            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();

            //Neusoft.FrameWork.Management.Transaction t = new Neusoft.FrameWork.Management.Transaction(inpatient.con);
            //t.BeginTransaction();

            radt.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);

            radt.QuitFeeApplyFlag = quitFeeApplyFlag;
            #region addby xuewj 2010-10-11 {EFF73DC9-3543-49a4-9751-BC8D95F0BDD3}
            int i = 0;
            if (!isZZUCheck)
            {
                i        = radt.OutPatient(PatientInfo);
                this.Err = radt.Err;
            }
            else
            {
                // 之前已判断过 这里只处理床位信息
                i   = radt.OutPatientZZU(PatientInfo);
                Err = radt.Err;
            }
            //int i = radt.OutPatient(PatientInfo);
            //this.Err = radt.Err;
            #endregion
            if (i == -1)
            {
                        //失败
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    return(-1);
                }
            }
            else if (i == 0)//取消
            {
                Neusoft.FrameWork.Management.PublicTrans.RollBack();
                this.Err = "";
                return(0);
            }

            #region #region add by xuewj 2010-10-19 临床路径接口 {10962AE3-C0B9-4cf7-91B6-CA956C1AFC2D}
            if (this.iClinicPath != null)
            {
                if (this.iClinicPath.PatientOutByNurse(this.PatientInfo.ID, PatientInfo.PVisit.PreOutTime) == false)
                {
                    this.Err = "结束临床路径失败!";
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    return(-1);
                }
            }
            #endregion

            Neusoft.FrameWork.Management.PublicTrans.Commit();

            //***************打印出院带药单**************

            return(1);
        }