/// <summary>
        /// 获取最后一次签名的内容
        /// </summary>
        /// <returns></returns>
        static public string GetLastSignContext(ReportContextData reportData)
        {
            JReportSignInfo signInfo = reportData.签名信息;

            for (int i = signInfo.签名明细.Count - 1; i >= 0; i--)
            {
                JReportSignItem signItem = signInfo.签名明细[i];

                if (string.IsNullOrEmpty(signItem.签名报告))
                {
                    continue;
                }

                return(signItem.签名报告);
            }

            return("");
        }
        private void dataGridView1_SelectionChanged(object sender, EventArgs e)
        {
            try
            {
                if (_isBinding)
                {
                    return;
                }

                previewControl1.ImportByXml("");

                if (dataGridView1.DataSource == null)
                {
                    return;
                }
                if (dataGridView1.SelectedRows.Count <= 0)
                {
                    return;
                }

                DataGridViewRow dvr = dataGridView1.SelectedRows[0];


                string signKey = dvr.Cells["Key"].Value.ToString();

                JReportSignItem signItem = _reportData.签名信息.签名明细.Find(T => T.Key == signKey);

                if (signItem != null)
                {
                    previewControl1.ImportByXml(signItem.签名报告);
                    previewControl1.ReadOnly = true;
                }
            }
            catch (Exception ex)
            {
                MsgBox.ShowException(ex, this);
            }
        }
        /// <summary>
        /// 获取审核次数
        /// </summary>
        /// <param name="reportData"></param>
        /// <returns></returns>
        static public int GetAuditingCount(ReportContextData reportData)
        {
            JReportSignInfo signInfo = reportData.签名信息;

            if (signInfo.签名明细.Count <= 0)
            {
                return(0);
            }

            int    signCount = -1;
            string signName  = reportData.报告信息.报告医生;

            for (int i = 0; i <= signInfo.签名明细.Count - 1; i++)
            {
                JReportSignItem signItem = signInfo.签名明细[i];

                if (i == 0 && signName != signItem.用户名称)
                {
                    return(signCount);
                }

                if (i == 0)
                {
                    //为0 表示诊断签名,如果有签名,需要将signcount设置为0以便后续审核自增
                    signCount = signCount + 1;
                }
                else
                {
                    if (signItem.是否修订 == false && signItem.是否审核)
                    {
                        signCount = signCount + 1;
                    }
                }
            }

            return(signCount);
        }
        private void tsbBack_Click(object sender, EventArgs e)
        {
            try
            {
                if (dataGridView1.DataSource == null || dataGridView1.SelectedRows.Count <= 0)
                {
                    MessageBox.Show("请选择需要回退到的报告签名。", "提示");
                    return;
                }

                if (_reportData.签名信息 == null || _reportData.签名信息.签名明细.Count <= 0)
                {
                    MessageBox.Show("报告尚未进行签名,不能进行回退处理。", "提示");
                    return;
                }

                if (_reportData.状态信息.是否已完结)
                {
                    MessageBox.Show("报告已完结,不能进行回退处理。", "提示");
                    return;
                }

                JReportSignInfo signInfo = _reportData.签名信息;

                JReportSignItem signLast = signInfo.签名明细[signInfo.签名明细.Count - 1];

                if (signLast.用户名称 != _userData.Name)
                {
                    if (_userData.Level < signLast.用户级别)
                    {
                        MessageBox.Show("报告最后已由 [" + signLast.用户名称 + "] 处理,无权进行回退。", "提示");
                        return;
                    }

                    if (_userData.Level == signLast.用户级别)
                    {
                        if (!(_reportPars.EqualAdutingLevel > -1 && _userData.Level >= _reportPars.EqualAdutingLevel))
                        {
                            MessageBox.Show("报告最后已由 [" + signLast.用户名称 + "] 处理,无权进行回退。", "提示");
                            return;
                        }
                    }
                }


                DataGridViewRow dvr = dataGridView1.SelectedRows[0];

                string signKey = dvr.Cells["Key"].Value.ToString();

                int backIndex = signInfo.签名明细.FindIndex(T => T.Key == signKey);
                if (backIndex < 0)
                {
                    MessageBox.Show("未找到对应签名信息,不能进行回退。", "提示");
                    return;
                }

                JReportSignItem signback = signInfo.签名明细[backIndex];
                if (signback == null)
                {
                    MessageBox.Show("当前所选签名无效,不能进行回退。", "提示");
                    return;
                }

                if (CheckStateChange(_reportData) == false)
                {
                    return;
                }


                string reason = "";

                using (frmReason backReason = new frmReason())
                {
                    reason = backReason.ShowReason(this);
                }

                if (string.IsNullOrEmpty(reason))
                {
                    return;
                }

                //报告回退处理


                _reportData.状态信息.签名状态   = signback.签名时状态;
                _reportData.状态信息.最后更新时间 = _reportModel.GetServerDate();

                _reportData.报告信息.最后审签人  = "";
                _reportData.报告信息.最后审签时间 = default(DateTime);

                JReportBackItem backItem = new JReportBackItem();
                backItem.回退人  = _userData.Name;
                backItem.回退原因 = reason;
                backItem.回退时间 = _reportModel.GetServerDate();
                backItem.终签状态 = signLast.CloneTo();

                _reportData.回退信息.回退明细.Add(backItem);


                //配置回退签名后的报告
                if (backIndex > 0)
                {
                    JReportSignItem signNext = signInfo.签名明细[backIndex - 1];
                    if (string.IsNullOrEmpty(signNext.签名报告) == false)
                    {
                        previewControl1.ImportByXml(signNext.签名报告);
                    }
                    else
                    {
                        //获取上次签名的内容
                        for (int i = backIndex - 1; i >= 0; i--)
                        {
                            JReportSignItem signItem = signInfo.签名明细[backIndex];

                            if (string.IsNullOrEmpty(signItem.签名报告))
                            {
                                continue;
                            }

                            previewControl1.ImportByXml(signItem.签名报告);
                            break;
                        }
                    }
                }
                else
                {
                    previewControl1.ImportByXml(signback.签名报告);
                }

                previewControl1.ReadOnly = true;


                for (int i = signInfo.签名明细.Count - 1; i >= backIndex; i--)
                {
                    signInfo.签名明细.RemoveAt(i);
                }

                //调整审核签名状态
                int auditCount = ReportPublic.GetAuditingCount(_reportData);

                if (auditCount > 0)
                {
                    //写入最后审核人
                    _reportData.报告信息.最后审签人  = signInfo.签名明细[signInfo.签名明细.Count - 1].用户名称;
                    _reportData.报告信息.最后审签时间 = signInfo.签名明细[signInfo.签名明细.Count - 1].签名时间;
                }

                if (auditCount < 3)
                {
                    previewControl1.SetItemValue(SignElementNameDefine.级审签, "");
                    previewControl1.setImage("[图片]" + SignElementNameDefine.级审签, null, new Size(0, 0));

                    previewControl1.SetItemReMark(SignElementNameDefine.级审签, "");
                    previewControl1.SetItemReMark("[图片]" + SignElementNameDefine.级审签, "");
                }

                if (auditCount < 2)
                {
                    previewControl1.SetItemValue(SignElementNameDefine.二级审签, "");
                    previewControl1.setImage("[图片]" + SignElementNameDefine.二级审签, null, new Size(0, 0));

                    previewControl1.SetItemReMark(SignElementNameDefine.二级审签, "");
                    previewControl1.SetItemReMark("[图片]" + SignElementNameDefine.二级审签, "");
                }

                if (auditCount < 1)
                {
                    previewControl1.SetItemValue(SignElementNameDefine.一级审签, "");
                    previewControl1.setImage("[图片]" + SignElementNameDefine.一级审签, null, new Size(0, 0));

                    previewControl1.SetItemReMark(SignElementNameDefine.一级审签, "");
                    previewControl1.SetItemReMark("[图片]" + SignElementNameDefine.一级审签, "");
                }

                if (signInfo.签名明细.Count <= 0)
                {
                    previewControl1.SetItemValue(SignElementNameDefine.记录签名, "");
                    previewControl1.setImage("[图片]" + SignElementNameDefine.记录签名, null, new Size(0, 0));
                    previewControl1.SetItemReMark(SignElementNameDefine.记录签名, "");
                    previewControl1.SetItemReMark("[图片]" + SignElementNameDefine.记录签名, "");

                    previewControl1.SetItemValue(SignElementNameDefine.诊断签名, "");
                    previewControl1.setImage("[图片]" + SignElementNameDefine.诊断签名, null, new Size(0, 0));
                    previewControl1.SetItemReMark(SignElementNameDefine.诊断签名, "");
                    previewControl1.SetItemReMark("[图片]" + SignElementNameDefine.诊断签名, "");

                    _reportData.报告信息.报告医生 = "";
                    _reportData.报告信息.报告时间 = default(DateTime);
                }

                _reportData.报告信息.报告内容 = previewControl1.ExportXmlf();

                _reportData.报告信息.CopyBasePro(_reportData);

                _reportModel.BackReportSign(_reportData);


                _IsOk = true;

                LoadSignInfo();
            }
            catch (Exception ex)
            {
                MsgBox.ShowException(ex, this);
            }
        }
        private void tsbCancel_Click(object sender, EventArgs e)
        {
            try
            {
                if (dataGridView1.DataSource == null || dataGridView1.SelectedRows.Count <= 0)
                {
                    MessageBox.Show("请选择需要撤销的驳回信息。", "提示");
                    return;
                }

                if (dataGridView1.SelectedRows[0] != dataGridView1.Rows[0])
                {
                    MessageBox.Show("只能撤销最后一次驳回信息。", "提示");
                    return;
                }

                //验证用户级别
                JReportSignInfo signInfo = _reportData.签名信息;

                JReportSignItem signLast = signInfo.签名明细[signInfo.签名明细.Count - 1];

                if (signLast.用户名称 != _userData.Name)
                {
                    if (_userData.Level < signLast.用户级别)
                    {
                        MessageBox.Show("报告最后已由 [" + signLast.用户名称 + "] 处理,无权进行撤销。", "提示");
                        return;
                    }

                    if (_userData.Level == signLast.用户级别)
                    {
                        if (!(_reportPars.EqualAdutingLevel > -1 && _userData.Level >= _reportPars.EqualAdutingLevel))
                        {
                            MessageBox.Show("报告最后已由 [" + signLast.用户名称 + "] 处理,无权进行撤销。", "提示");
                            return;
                        }
                    }
                }


                //检查状态是否改变
                if (CheckStateChange(_reportData) == false)
                {
                    return;
                }

                DataGridViewRow dvr = dataGridView1.SelectedRows[0];

                string rejectKey = dvr.Cells["Key"].Value.ToString();

                JReportRejectInfo rejectInfo = _reportData.驳回信息;
                int backIndex = rejectInfo.驳回明细.FindIndex(T => T.Key == rejectKey);
                if (backIndex < 0)
                {
                    MessageBox.Show("未找到对应驳回信息,不能进行撤销。", "提示");
                    return;
                }

                JReportRejectItem rejectItem = rejectInfo.驳回明细[backIndex];
                if (rejectItem == null)
                {
                    MessageBox.Show("当前所选驳回信息无效,不能进行撤销。", "提示");
                    return;
                }

                if (rejectItem.驳回状态 != 0)
                {
                    MessageBox.Show("当前驳回已被处理,不能进行撤销。", "提示");
                    return;
                }


                rejectItem.驳回状态 = (int)ReportRejectState.rrsCanceled;

                _reportData.状态信息.是否驳回中  = false;
                _reportData.状态信息.最后更新时间 = _reportDbModel.GetServerDate();

                _reportDbModel.RejectReport(_reportData);

                _isOk = true;
            }
            catch (Exception ex)
            {
                MsgBox.ShowException(ex, this);
            }
        }