internal void CheckElementBugs(string fileType, ref List <ElementBugInfo> lstElementBugList) { List <MedDocSys.PadWrapper.ElementBugInfo> bugs = new List <MedDocSys.PadWrapper.ElementBugInfo>(); if (fileType == "CHENPAD") { ChenPadEditor.Readonly = false; ChenPadEditor.CheckElementBugs(ref bugs); } else if (fileType == "BAODIAN") { BaodianEditor.CheckElementBugs(ref bugs); } else if (fileType == "HEREN") { lstElementBugList = HerenEditor.GetElementBugs(); } foreach (var item in bugs) { ElementBugInfo bug = new ElementBugInfo(); bug.BugDesc = item.BugDesc; bug.ElementID = item.ElementID; bug.ElementName = item.ElementName; bug.ElementType = ElementType.SimpleOption; bug.IsFatalBug = item.IsFatalBug; } }
private void RefreshBugsList(List <ElementBugInfo> lstElementBugList, List <DocuemntBugInfo> lstDocuemntBugList) { string szDocTitle = string.Empty; if (this.m_documentForm != null && !this.m_documentForm.IsDisposed) { szDocTitle = this.m_documentForm.DockHandler.TabText; } for (int index = 0; lstDocuemntBugList != null && index < lstDocuemntBugList.Count; index++) { DocuemntBugInfo docuemntBugInfo = lstDocuemntBugList[index]; ListViewItem item = new ListViewItem(); item.Tag = docuemntBugInfo; item.SubItems.Add((this.listView1.Items.Count + 1).ToString()); if (docuemntBugInfo.BugLevel == BugLevel.Warn) { item.SubItems.Add("警告"); item.ImageIndex = 0; } else { item.SubItems.Add("错误"); item.ImageIndex = 1; } item.SubItems.Add(szDocTitle); item.SubItems.Add(docuemntBugInfo.BugDesc); this.listView1.Items.Add(item); } for (int index = 0; lstElementBugList != null && index < lstElementBugList.Count; index++) { ElementBugInfo elementBugInfo = lstElementBugList[index]; ListViewItem item = new ListViewItem(); item.Tag = elementBugInfo; item.SubItems.Add((this.listView1.Items.Count + 1).ToString()); item.SubItems.Add("错误"); item.ImageIndex = 1; item.SubItems.Add(szDocTitle); item.SubItems.Add(elementBugInfo.BugDesc); this.listView1.Items.Add(item); } }
/// <summary> /// 获取文档中所有与元素有关的缺陷信息 /// </summary> /// <param name="lstElementBugInfos">元素缺陷信息列表</param> /// <returns>DataLayer.SystemData.ReturnValue</returns> public short CheckElementBugs(ref List <ElementBugInfo> elementBugInfos) { if (this.textEditor1 == null || this.textEditor1.IsDisposed) { return(EMRDBLib.SystemData.ReturnValue.PARAM_ERROR); } //检查内容为空的元素,这里会有个问题: //同一个元素文档里有多个时,用户双击错误列表就定位不准确 if (elementBugInfos == null) { elementBugInfos = new List <ElementBugInfo>(); } elementBugInfos.Clear(); TextField[] textFileds = this.textEditor1.GetFields(null, MatchMode.Type); if (textFileds == null || textFileds.Length <= 0) { return(EMRDBLib.SystemData.ReturnValue.OK); } foreach (TextField field in textFileds) { string fieldText = string.Empty; this.textEditor1.GetFieldText(field, out fieldText); ElementBugInfo bugInfo = new ElementBugInfo(); bugInfo.Tag = field; bugInfo.ElementID = field.ID; bugInfo.ElementName = field.Name; if (field.FieldType == FieldType.TextOption) { bugInfo.ElementType = ElementType.SimpleOption; } else if (field.FieldType == FieldType.RichOption) { bugInfo.ElementType = ElementType.ComplexOption; } else { bugInfo.ElementType = ElementType.InputBox; } if (!field.AllowEmpty && string.IsNullOrEmpty(fieldText)) { bugInfo.IsFatalBug = true; bugInfo.BugDesc = string.Format("“{0}”内容为空!", bugInfo.ElementName); elementBugInfos.Add(bugInfo); continue; } if (field.HitForced && !field.AlreadyHitted) { //用户必须点击,但是没有点击 bugInfo.BugDesc = string.Format("“{0}”是重点关注项,务必用鼠标点击一次!", field.Name); elementBugInfos.Add(bugInfo); continue; } //检查超出范围情况,MaxValue未null或者-1时,不用检查 if (field.ValueType == FieldValueType.Numeric) { decimal currValue = 0; if (!decimal.TryParse(fieldText, out currValue)) { bugInfo.IsFatalBug = true; bugInfo.BugDesc = string.Format("请在“{0}”内正确输入数值!", field.Name); elementBugInfos.Add(bugInfo); continue; } decimal minValue = 0; decimal maxValue = 0; bool result1 = decimal.TryParse(field.MinValue, out minValue); bool result2 = decimal.TryParse(field.MaxValue, out maxValue); //数值不在范围内 if (result1 && minValue > 0 && currValue < minValue) { bugInfo.BugDesc = string.Format("“{0}”不能小于{1}!", field.Name, field.MinValue); elementBugInfos.Add(bugInfo); continue; } if (result2 && maxValue > 0 && currValue > maxValue && maxValue >= 0) { bugInfo.BugDesc = string.Format("“{0}”不能大于{1}!", field.Name, field.MaxValue); elementBugInfos.Add(bugInfo); continue; } } else if (field.ValueType == FieldValueType.DateTime) { DateTime currValue = new DateTime(); if (!GlobalMethods.Convert.StringToDate(fieldText, ref currValue)) { bugInfo.IsFatalBug = true; bugInfo.BugDesc = string.Format("请在“{0}”内正确输入日期!", field.Name); elementBugInfos.Add(bugInfo); continue; } //填入的内容确定为日期,再检查范围 DateTime minValue; DateTime maxValue; bool result1 = DateTime.TryParse(field.MinValue, out minValue); bool result2 = DateTime.TryParse(field.MaxValue, out maxValue); //时间不在范围内 if (result1 && currValue < minValue) { bugInfo.BugDesc = string.Format("“{0}”时间不能小于{1}!", field.Name, field.MinValue); elementBugInfos.Add(bugInfo); continue; } if (result2 && currValue > maxValue) { bugInfo.BugDesc = string.Format("“{0}”时间不能大于{1}!", field.Name, field.MaxValue); elementBugInfos.Add(bugInfo); continue; } } else { int minValue = 0; int maxValue = 0; bool result1 = int.TryParse(field.MinValue, out minValue); bool result2 = int.TryParse(field.MaxValue, out maxValue); //文本长度不在范围内 if (result1 && minValue > 0 && fieldText.Length < minValue) { bugInfo.BugDesc = string.Format("“{0}”文本长度不能小于{1}!", field.Name, field.MinValue); elementBugInfos.Add(bugInfo); continue; } if (result2 && maxValue > 0 && fieldText.Length > maxValue) { bugInfo.BugDesc = string.Format("“{0}”文本长度不能大于{1}!", field.Name, field.MaxValue); elementBugInfos.Add(bugInfo); continue; } } } return(SystemData.ReturnValue.OK); }
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e) { if (this.listView1.SelectedItems.Count <= 0) { return; } if (this.m_documentForm == null || this.m_documentForm.IsDisposed) { return; } this.m_documentForm.DockHandler.Activate(); if (this.m_documentForm.MedEditor != null && !this.m_documentForm.MedEditor.Focused) { this.m_documentForm.MedEditor.Focus(); } ListViewItem selectedItem = this.listView1.GetItemAt(e.X, e.Y); if (selectedItem == null) { return; } GlobalMethods.UI.SetCursor(this, Cursors.WaitCursor); ElementBugInfo elementBugInfo = selectedItem.Tag as ElementBugInfo; if (elementBugInfo != null) { if (this.m_documentForm is HerenDocForm) { TextField textField = elementBugInfo.Tag as TextField; if (textField != null) { (this.m_documentForm as HerenDocForm).TextEditor.GotoField(textField); (this.m_documentForm as HerenDocForm).TextEditor.SelectCurrentField(); } else { (this.m_documentForm as HerenDocForm).GotoElement(elementBugInfo.ElementID, elementBugInfo.ElementName); } } else { MDSDBLib.ElementType type = MDSDBLib.ElementType.SimpleOption; if (elementBugInfo.ElementType == ElementType.CheckBox) { type = MDSDBLib.ElementType.CheckBox; } else if (elementBugInfo.ElementType == ElementType.ComplexOption) { type = MDSDBLib.ElementType.ComplexOption; } else if (elementBugInfo.ElementType == ElementType.InputBox) { type = MDSDBLib.ElementType.InputBox; } else if (elementBugInfo.ElementType == ElementType.Outline) { type = MDSDBLib.ElementType.Outline; } else if (elementBugInfo.ElementType == ElementType.SimpleOption) { type = MDSDBLib.ElementType.SimpleOption; } this.m_documentForm.MedEditor.LocateToElement(type, elementBugInfo.ElementID , elementBugInfo.ElementName); } GlobalMethods.UI.SetCursor(this, Cursors.Default); return; } DocuemntBugInfo docuemntBugInfo = selectedItem.Tag as DocuemntBugInfo; if (docuemntBugInfo != null && !GlobalMethods.Misc.IsEmptyString(docuemntBugInfo.BugKey) && docuemntBugInfo.Response == BUG_RESPONSE_LOCATE) { if (this.m_documentForm is HerenDocForm) { (this.m_documentForm as HerenDocForm).GotoText(docuemntBugInfo.BugKey, docuemntBugInfo.BugIndex); } else { this.m_documentForm.MedEditor.SetCursorPos(false); this.m_documentForm.MedEditor.LocateToText(docuemntBugInfo.BugKey, docuemntBugInfo.BugIndex); } } GlobalMethods.UI.SetCursor(this, Cursors.Default); }
/// <summary> /// 检查文档缺陷,并返回检查结果 /// </summary> /// <param name="documentForm">被检查缺陷的文档窗口</param> /// <returns>Common.SystemData.ReturnValue</returns> public short CheckDocumentBugs(IDocumentForm documentForm) { if (this.DocumentForm != documentForm) { this.DocumentForm = documentForm; } this.listView1.Items.Clear(); this.Update(); if (documentForm == null || documentForm.IsDisposed) { return(SystemData.ReturnValue.FAILED); } if (this.MainForm == null || this.MainForm.IsDisposed) { return(SystemData.ReturnValue.FAILED); } //获取病历文本数据 string szTextData = string.Empty; short shRet = SystemData.ReturnValue.OK; if (documentForm is HerenDocForm) { szTextData = (documentForm as HerenDocForm).TextEditor.Text; } else { documentForm.MedEditor.GetPureTextData(ref szTextData); } if (shRet != SystemData.ReturnValue.OK || GlobalMethods.Misc.IsEmptyString(szTextData)) { return(SystemData.ReturnValue.OK); } //初始化质控引擎 if (this.m_bugCheckEngine == null) { this.m_bugCheckEngine = new BugCheckEngine(); } this.m_bugCheckEngine.UserInfo = this.GetUserInfo(); this.m_bugCheckEngine.PatientInfo = this.GetPatientInfo(); this.m_bugCheckEngine.VisitInfo = this.GetVisitInfo(); this.m_bugCheckEngine.DocType = this.Text; this.m_bugCheckEngine.DocText = szTextData; //m_bugCheckEngine.SectionInfos = new List<DocumentSectionInfo>(); shRet = this.m_bugCheckEngine.InitializeEngine(); if (shRet != SystemData.ReturnValue.CANCEL && shRet != SystemData.ReturnValue.OK) { MessageBoxEx.Show("病历质控引擎初始化失败,无法对病历进行自动质控!"); return(SystemData.ReturnValue.OK); } //检查文档内容缺陷 List <DocuemntBugInfo> lstDocuemntBugList = null; if (shRet == SystemData.ReturnValue.OK) { lstDocuemntBugList = this.m_bugCheckEngine.PerformBugCheck(); this.m_bugCheckEngine.DocText = null; } //检查文档元素缺陷 List <ElementBugInfo> lstElementBugList = null; List <MedDocSys.PadWrapper.ElementBugInfo> bugs = new List <MedDocSys.PadWrapper.ElementBugInfo>(); if (documentForm is HerenDocForm) { (documentForm as HerenDocForm).CheckElementBugs(ref lstElementBugList); } else { documentForm.MedEditor.CheckElementBugs(ref bugs); foreach (var item in bugs) { ElementBugInfo bug = new ElementBugInfo(); bug.BugDesc = item.BugDesc; bug.ElementID = item.ElementID; bug.ElementName = item.ElementName; if (item.ElementType == MDSDBLib.ElementType.CheckBox) { bug.ElementType = ElementType.CheckBox; } else if (item.ElementType == MDSDBLib.ElementType.ComplexOption) { bug.ElementType = ElementType.ComplexOption; } else if (item.ElementType == MDSDBLib.ElementType.InputBox) { bug.ElementType = ElementType.InputBox; } else if (item.ElementType == MDSDBLib.ElementType.Outline) { bug.ElementType = ElementType.Outline; } else if (item.ElementType == MDSDBLib.ElementType.SimpleOption) { bug.ElementType = ElementType.SimpleOption; } bug.IsFatalBug = item.IsFatalBug; } } if ((lstDocuemntBugList == null || lstDocuemntBugList.Count <= 0) && (lstElementBugList == null || lstElementBugList.Count <= 0)) { MessageBoxEx.Show("系统已完成文档缺陷检查,没有检查到缺陷!", MessageBoxIcon.Information); //未检测到缺陷,则将窗口置后并最小化 if (this.DockPanel == null) { this.Owner = null; this.SendToBack(); this.WindowState = FormWindowState.Minimized; } return(SystemData.ReturnValue.OK); } this.RefreshBugsList(lstElementBugList, lstDocuemntBugList); return(SystemData.ReturnValue.OK); }