/// <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);
        }
        /// <summary>
        /// 保存设置
        /// </summary>
        public virtual int Save()
        {
            //取婴儿接珍时的信息信息
            Neusoft.HISFC.Models.RADT.PatientInfo PatientInfo = null;

            //取患者最新的住院主表信息
            PatientInfo = this.Inpatient.QueryPatientInfoByInpatientNO(this.patientInfo.ID);
            if (this.patientInfo == null)
            {
                MessageBox.Show(this.Inpatient.Err);
                return(-1);
            }

            //换医生时,如果患者已不在本科,则清空数据---当患者转科后,如果本窗口没有关闭,会出现此种情况
            if (PatientInfo.PVisit.PatientLocation.NurseCell.ID != this.NurseCell.ID &&
                this.arrivetype == ArriveType.ChangeDoc)
            {
                MessageBox.Show("患者已不在本病区,请刷新当前窗口");
                return(-1);
            }

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

            //取变动信息:取医生、护士、科室等信息
            this.GetPatientInfo(PatientInfo);

            //判断是否已选择床位
            if (this.cmbBedNo.Text.Trim() == "" &&
                patientInfo.IsBaby == false)
            {
                MessageBox.Show("未选择床位!");
                return(-1);
            }

            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.C, ref err);
                if (!bl)
                {
                    MessageBox.Show(err);
                    return(-1);
                }
            }

            //取处理时的床位信息
            Neusoft.HISFC.Models.Base.Bed bed = new Neusoft.HISFC.Models.Base.Bed();
            bed.ID          = this.cmbBedNo.Tag.ToString(); //床号
            bed.InpatientNO = patientInfo.ID;               //床位上患者住院流水号


            #region 业务处理

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

            Neusoft.HISFC.BizProcess.Integrate.RADT managerRADT = new Neusoft.HISFC.BizProcess.Integrate.RADT();
            //Neusoft.FrameWork.Management.Transaction t = new Neusoft.FrameWork.Management.Transaction(Neusoft.FrameWork.Management.Connection.Instance);
            //t.BeginTransaction();
            managerRADT.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);

            //转科
            if (this.arrivetype == ArriveType.ShiftIn)
            {
                if (managerRADT.ShiftIn(PatientInfo, this.NurseCell, this.cmbBedNo.Tag.ToString()) == -1)//调用转科业务
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(managerRADT.Err);
                    return(-1);
                }
                else
                {
                }
            }

            //接珍护理站为当前护理站(转入操作时,需要保留原护理站信息,所以在此处处理)
            PatientInfo.PVisit.PatientLocation.NurseCell = this.NurseCell;
            PatientInfo.PVisit.PatientLocation.Bed       = bed;

            //接诊
            if (this.arrivetype == ArriveType.Regedit)
            {
                if (managerRADT.ArrivePatient(PatientInfo, bed) == -1)//调用接诊业务
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(managerRADT.Err);
                    return(-1);
                }
                else
                {
                }
            }

            //召回
            if (this.arrivetype == ArriveType.CallBack)
            {
                if (managerRADT.CallBack(PatientInfo, bed) == -1)//调用召回业务
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(managerRADT.Err);
                    return(-1);
                }
                else
                {
                }
            }

            //换医师
            if (this.arrivetype == ArriveType.ChangeDoc)
            {
                if (managerRADT.ChangeDoc(PatientInfo) == -1)//调用换医生业务
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    MessageBox.Show(managerRADT.Err);
                    return(-1);
                }
                else
                {
                }
            }
            #endregion

            Neusoft.FrameWork.Management.PublicTrans.Commit();
            MessageBox.Show(managerRADT.Err);
            base.OnRefreshTree();//刷新树
            return(1);
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <returns></returns>
        public virtual int Save()
        {
            if (cmbZg.Tag == null || cmbZg.Tag.ToString().Trim() == string.Empty)
            {
                this.Err = "请输入出院情况";
                this.cmbZg.Focus();
                return(-1);
            }
            //如果患者不是当天出院提示
            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);
                }
            }

            if (this.PatientInfo == null || string.IsNullOrEmpty(this.PatientInfo.ID))
            {
                this.Err = "请回车确认住院号是否存在!";

                return(-1);
            }

            //取患者最新的住院主表信息
            PatientInfo = this.radt.GetPatientInfomation(this.PatientInfo.ID);
            if (PatientInfo == null)
            {
                this.Err = this.radt.Err;
                return(-1);
            }
            this.Err = "";

            //如果患者在院状态发生变化,则不允许操作

            string in_State = PatientInfo.PVisit.InState.ID.ToString();

            if (PatientInfo.PVisit.InState.ID.ToString() != "I")
            {
                this.Err = "该患者没有接诊";
                return(-1);
            }

            //取出院登记信息
            this.GetOutInfo();
            //{2A467990-BDA3-4cb4-BB89-5801796EBC95}
            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);
                }
            }
            //出院登记
            HISFC.BizProcess.Integrate.FeeInterface.MedcareInterfaceProxy medcareInterfaceProxy = new Neusoft.HISFC.BizProcess.Integrate.FeeInterface.MedcareInterfaceProxy();
            long returnValue = medcareInterfaceProxy.SetPactCode(this.PatientInfo.Pact.ID);

            //Neusoft.FrameWork.Management.Transaction t = new Neusoft.FrameWork.Management.Transaction(Neusoft.FrameWork.Management.Connection.Instance);
            Neusoft.FrameWork.Management.PublicTrans.BeginTransaction();
            radt.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);

            medcareInterfaceProxy.SetTrans(Neusoft.FrameWork.Management.PublicTrans.Trans);
            medcareInterfaceProxy.BeginTranscation();

            if (returnValue != 1)
            {
                Neusoft.FrameWork.Management.PublicTrans.RollBack();
                medcareInterfaceProxy.Rollback();
                MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("待遇接口获得合同单位失败" + medcareInterfaceProxy.ErrMsg));
                return(-1);
            }

            returnValue = medcareInterfaceProxy.Connect();
            {
                if (returnValue != 1)
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    medcareInterfaceProxy.Rollback();
                    MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("待遇接口获得合同单位失败" + medcareInterfaceProxy.ErrMsg));
                    return(-1);
                }
            }
            medcareInterfaceProxy.BeginTranscation();
            //returnValue = medcareInterfaceProxy.GetRegInfoInpatient(this.PatientInfo);
            //if (returnValue != 1)
            //{
            //    t.RollBack();
            //    medcareInterfaceProxy.Rollback();
            //    MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("待遇接口获得患者信息失败" + medcareInterfaceProxy.ErrMsg));
            //    return -1;
            //}
            //出院登记(带改)
            returnValue = medcareInterfaceProxy.LogoutInpatient(this.PatientInfo);
            if (returnValue != 1)
            {
                Neusoft.FrameWork.Management.PublicTrans.RollBack();
                medcareInterfaceProxy.Rollback();
                MessageBox.Show(Neusoft.FrameWork.Management.Language.Msg("待遇接口获出院登记失败" + medcareInterfaceProxy.ErrMsg));
                return(-1);
            }


            int i = radt.OutPatient(PatientInfo);

            this.Err = radt.Err;
            if (i == -1)
            {
                         //失败
                {
                    Neusoft.FrameWork.Management.PublicTrans.RollBack();
                    medcareInterfaceProxy.Rollback();
                    return(-1);
                }
            }
            else if (i == 0)//取消
            {
                Neusoft.FrameWork.Management.PublicTrans.RollBack();
                medcareInterfaceProxy.Rollback();
                this.Err = "";
                return(0);
            }
            //zhangjunyi 注释掉 改为commit
            //medcareInterfaceProxy.Rollback();
            if (medcareInterfaceProxy.Commit() < 0)
            {
                Neusoft.FrameWork.Management.PublicTrans.RollBack();
                medcareInterfaceProxy.Rollback();
                this.Err = "医保接口提交事务出错!请检查读卡器连接是否正确";
                return(-1);
            }

            #region addby xuewj 2010-3-15

            if (this.adt == null)
            {
                this.adt = Neusoft.FrameWork.WinForms.Classes.UtilInterface.CreateObject(this.GetType(), typeof(Neusoft.HISFC.BizProcess.Interface.IHE.IADT)) as Neusoft.HISFC.BizProcess.Interface.IHE.IADT;
            }
            if (this.adt != null)
            {
                this.adt.DischargeInpatient(this.PatientInfo);
            }

            #endregion

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



            return(1);
        }