/// <summary> /// 删除事件 /// by xlb 2013-01-05 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonDelRule_Click(object sender, EventArgs e) { try { if (_currentRule == null || _currentRule.RuleCode == null) { MessageBox.Show("请选择要删除的数据"); return; } DataTable dtQcRecord = QCRecord.GetAllQcRecord(_currentRule.RuleCode); int count = int.Parse(dtQcRecord.Rows[0][0].ToString()); if (count > 0) { MessageBox.Show("该规则已被质控记录使用,无法删除"); return; } if (MyMessageBox.Show("您确定删除吗?", "提示", MyMessageBoxButtons.OkCancel) == DialogResult.Cancel) { return; } QCRule.DeleteQcRule(_currentRule); MessageBox.Show("删除成功"); InitDataRule(); DS_Common.ClearControl(groupControlRule); DS_Common.ClearControl(groupControlCondtion); lookUpEditDoctorLevel.EditValue = null; } catch (Exception ex) { MyMessageBox.Show(1, ex); } }
/// <summary> /// 处理循环触发的时限规则 /// 进行有限次循环时,如果有限次的循环未结束,则外部的触发将会不起作用 /// </summary> /// <param name="noofinpat"></param> /// <param name="rule"></param> /// <param name="drConfigDataResult"></param> /// <param name="listQCRecord"></param> void Process1QCRuleCircle(QCRule rule, DataRow drConfigDataResult, List <QCRecord> listQCRecord) { try { string noofinpat = drConfigDataResult[rule.Condition.PatNoColumnName].ToString(); if (rule.MARK == QCEnum.OperationType.Circle && rule.CycleTimes > 0)//有限次循环 { //获得离当前时间最接近的第一条循环记录 QCRecord record = (from QCRecord qcrecord in listQCRecord where qcrecord.CycleTimes == 1 orderby qcrecord.RealConditionTime descending select qcrecord).FirstOrDefault(); //由于循环记录的第一条记录对应的QCRecord.FirstCycleRecordID为空,所有下面计算的时候要减去1 int count = (from QCRecord qcrecord in listQCRecord where qcrecord.FirstCycleRecordID == record.ID select qcrecord).Count(); if (count < rule.CycleTimes - 1)//上一次的有限次的循环未结束,则外部的触发将会不起作用 { return; } else if (count == rule.CycleTimes - 1)//上一次的有限次的循环已经结束,则外部的触发开始起作用 { //插入初始化数据到QCRecord表中 QCRecord.InsertInitData(noofinpat, rule, drConfigDataResult); } } } catch (Exception ex) { throw ex; } }
///// <summary> ///// 遍历清除文本框内容 ///// 2013-01-10 ///// </summary> ///// <param name="gc"></param> //private void ClearText(GroupControl gc) //{ // try // { // foreach (Control ctl in gc.Controls) // { // Type type = ctl.GetType(); // if (type == typeof(TextEdit)) // { // TextEdit textEdit = ctl as TextEdit; // if (textEdit != null) // { // textEdit.Text = string.Empty; // } // } // else if (type == typeof(ComboBoxEdit)) // { // ComboBoxEdit cmbEdit = ctl as ComboBoxEdit; // if (cmbEdit != null) // { // cmbEdit.SelectedIndex = -1; // } // } // else if (type == typeof(LookUpEdit)) // { // LookUpEdit lookUpEdit = ctl as LookUpEdit; // if (lookUpEdit != null) // { // lookUpEdit.EditValue = string.Empty; // } // } // } // } // catch (Exception ex) // { // throw ex; // } //} #endregion /// <summary> /// 保存方法 /// xlb 2013-01-06 /// </summary> private void SaveCurrentRule() { try { string message = ""; bool result = Validate(ref message); if (!result) { MessageBox.Show(message); return; } QCRule qcRule = new QCRule(); RuleCategory ruleCategory = new RuleCategory(); QCCondition qcCondition = new QCCondition(); qcRule.RuleCode = textBoxRuleId.Text.Trim(); qcCondition.Code = lookUpEditConditionName.EditValue.ToString(); qcRule.TimeLimit = TimesToSeconds(textBoxRuleTime.Text); qcRule.Description = textBoxRuleName.Text.Trim(); qcRule.DoctorLevel = (DoctorGrade)Enum.Parse(typeof(DoctorGrade), lookUpEditDoctorLevel.EditValue.ToString()); qcRule.Reminder = textBoxTipInfo.Text.Trim(); qcRule.FoulMessage = textBoxWarningInfo.Text.Trim(); if (comboBoxOpMode.SelectedIndex >= 0) { qcRule.MARK = (OperationType)comboBoxOpMode.SelectedIndex; } else { qcRule.MARK = OperationType.OnlyOne; } qcRule.CycleTimes = int.Parse(textEditLooptimes.Text == "" ? "0" : textEditLooptimes.Text.Trim()); qcRule.CycleInterval = TimesToSeconds(textEditLoopinterval.Text == "" ? "0" : textEditLoopinterval.Text.Trim()); qcRule.DelayTime = int.Parse(spinEditDelayTime.Value.ToString()); qcRule.Sorce = double.Parse(spinEditScore.Text == "" ? "0" : spinEditScore.Text.Trim()); qcRule.QCCode = lookUpEditQcCode.EditValue.ToString(); qcRule.Memo = textEditRuleMemo.Text.Trim(); ruleCategory.Code = lookUpEditRuleGroup.EditValue.ToString(); qcRule.Valid = checkEditValid.Checked ? "1" : "0"; if (editstate == EditSate.Edit) { QCRule.UpdateQcRule(qcRule, qcCondition, ruleCategory); MessageBox.Show("修改成功"); } else if (editstate == EditSate.Add) { QCRule.InsertQcRule(qcRule, qcCondition, ruleCategory); MessageBox.Show("添加成功"); } InitDataRule(); SetRuleEditState(false, false); } catch (Exception ex) { throw ex; } }
/// <summary> /// 生成提醒信息,插入初始化数据至QCRecord表 /// 如果是循环时限,则只插入循环的第一条记录 /// </summary> void Process1() { try { foreach (KeyValuePair <string, QCRule> pair in m_DictQCRuleValid) { QCRule rule = pair.Value; Process1QCRule(rule); } } catch (Exception ex) { throw ex; } }
/// <summary> /// 取消事件 /// xlb 203-01-15 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCancel_Click(object sender, EventArgs e) { try { SetRuleEditState(false, false); _currentRule = new QCRule(); DS_Common.ClearControl(groupControlRule); DS_Common.ClearControl(groupControlCondtion); lookUpEditDoctorLevel.EditValue = null; } catch (Exception ex) { MyMessageBox.Show(1, ex); } }
/// <summary> /// 删除事件 /// by xlb 2013-01-06 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDeleteCondition_Click(object sender, EventArgs e) { try { if (gridViewCondition.FocusedRowHandle < 0) { MessageBox.Show("没有数据"); return; } int rowHandel = gridViewCondition.FocusedRowHandle; _qcCondition = gridViewCondition.GetRow(rowHandel) as QCCondition; int count = QCRule.QcRuleCountByConditionCode(_qcCondition.Code); if (count > 0) { MessageBox.Show("该条件已匹配了规则,无法删除"); return; } if (MyMessageBox.Show("您确定删除数据吗?", "提示", MyMessageBoxButtons.OkCancel) == DialogResult.Cancel) { return; } #region ======注销 by xlb 2013-02-29======= //DataTable dtRuleTable = QCRule.GetAllQCRules(); //if (dtRuleTable == null || dtRuleTable.Rows.Count <= 0) //{ // return; //} //foreach (DataRow dr in dtRuleTable.Rows) //{ // if (dr["CONDITIONCODE"].ToString() == _qcCondition.Code) // { // MessageBox.Show("该条件已匹配了规则,无法删除"); // return; // } //} #endregion QCCondition.DeleteCondition(_qcCondition); MessageBox.Show("删除成功"); InitDataConditon(); DS_Common.ClearControl(groupControl1); gridViewCondition.MoveBy(rowHandel);//焦点定位到下一行 } catch (Exception ex) { MyMessageBox.Show(1, ex); } }
/// <summary> /// 新增规则事件 /// xlb 2013-01-05 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonNewRule_Click(object sender, EventArgs e) { try { DS_Common.ClearControl(groupControlRule); DS_Common.ClearControl(groupControlCondtion); SetRuleEditState(true, true); editstate = EditSate.Add; _currentRule = new QCRule(); lookUpEditDoctorLevel.EditValue = null; } catch (Exception ex) { MyMessageBox.Show(1, ex); } }
/// <summary> /// 初始化时限规则数据集 /// by xlb 2013-01-05 /// </summary> private void InitDataRule() { try { Dictionary <string, QCCondition> dictQCCondition = QCCondition.GetAllQCCondition(); Dictionary <string, RuleCategory> dictRuleCategory = RuleCategory.GetAllRuleCategory(); IList <QCRule> listRule = QCRule.GetRuleList(dictQCCondition, dictRuleCategory); gridControlRule.DataSource = listRule; gridViewRule.ExpandAllGroups(); } catch (Exception ex) { throw ex; } }
/// <summary> /// 处理每一条时限规则 /// </summary> /// <param name="rule"></param> void Process1QCRule(QCRule rule) { try { QCCondition condition = rule.Condition; //通过QCCondition表中的配置获得相应表中的结果集, 存在病人流水号时,需要将其转换为首页序号 DataTable dtConfigResult = QCCondition.GetConfigDataResult(condition); foreach (DataRow dr in dtConfigResult.Rows) { //通过首页序号NOOFINPAT + RULECODE 在QCRecord表中获取对应的记录 string noofinpat = dr[condition.PatNoColumnName].ToString(); string rulecode = rule.RuleCode; List <QCRecord> listQCRecord = (from QCRecord rec in m_ListQCRecord where rec.NoOfInpat == noofinpat && rec.Rule.RuleCode == rulecode select rec).ToList <QCRecord>(); //无记录则插入初始化的数据 if (listQCRecord.Count() == 0) { QCRecord.InsertInitData(noofinpat, rule, dr); continue; } //通过时间比较是否存在相同的 DateTime timeValue = Convert.ToDateTime(dr[condition.TimeColumnName].ToString()); var qcRecords = from QCRecord record in listQCRecord where record.ConditionTime.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.CurrentCulture) == timeValue.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.CurrentCulture) select record; //表示已经处理过,所以不对其再次处理 if (qcRecords.Count() > 0) { continue; } //针对不同的操作方式进行不同的处理,确保 listQCRecord.count() > 0 Process1QCRuleMark(rule, dr, listQCRecord); } } catch (Exception ex) { throw ex; } }
/// <summary> /// 刷新事件 /// xlb 2013-04-05 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonLoadRule_Click(object sender, EventArgs e) { try { InitDataRule(); InitRuleCategoryName(); DS_Common.ClearControl(groupControlRule); DS_Common.ClearControl(groupControlCondtion); SetRuleEditState(false, false); lookUpEditDoctorLevel.EditValue = null; _currentRule = new QCRule(); } catch (Exception ex) { MyMessageBox.Show(1, ex); } }
/// <summary> /// 初始化数据 /// </summary> private void InitData() { try { m_DictQCCondition = QCCondition.GetAllQCCondition(); m_DictQCCategory = RuleCategory.GetAllRuleCategory(); //获得所有QCRule,包括有效和无效 m_DictQCRuleAll = QCRule.GetAllQCRule(m_DictQCCondition, m_DictQCCategory); m_ListQCRecord = QCRecord.GetAllQCRecord(m_DictQCRuleAll, m_DictQCCondition, m_DictQCCategory); //获得所有有效的QCRule m_DictQCRuleValid = QCRule.GetAllQCRuleValid(m_DictQCCondition, m_DictQCCategory); } catch (Exception ex) { throw ex; } }
/// <summary> /// 删除事件 /// xlb 2013-01-08 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDeleteEmrQcItem_Click(object sender, EventArgs e) { try { if (gridViewEmrQcItem.FocusedRowHandle < 0) { DrectSoft.Common.Ctrs.DLG.MyMessageBox.Show("没有数据"); return; } //获得需删除行的行号 int rowHandel = gridViewEmrQcItem.FocusedRowHandle; int maxRow = (gridViewEmrQcItem.DataSource as List <EmrQcItem>).Count; emrQcItem = gridViewEmrQcItem.GetRow(rowHandel) as EmrQcItem; int count = QCRule.QcRuleByQcCode(emrQcItem.I_Code); if (count > 0) { DrectSoft.Common.Ctrs.DLG.MyMessageBox.Show("该监控代码被使用,无法删除"); return; } DialogResult dialogDelete = DrectSoft.Common.Ctrs.DLG.MyMessageBox.Show("您确定删除此条数据吗?", "提示", DrectSoft.Common.Ctrs.DLG.MyMessageBoxButtons.OkCancel); if (dialogDelete == DialogResult.Cancel) { return; } EmrQcItem.DeleteEmrQcItem(emrQcItem); DrectSoft.Common.Ctrs.DLG.MyMessageBox.Show("删除成功"); InitDataEMrQcItem(); ClearControl(groupControlNotton); SetEditState(false, true); if (rowHandel >= 0 && rowHandel < maxRow - 1) { //焦点定位到删除行的下行 如果是最后一行 gridViewEmrQcItem.MoveBy(rowHandel); } else if (rowHandel == maxRow - 1) { //如果删除最后一行则焦点定位到上一条数据 gridViewEmrQcItem.MoveBy(rowHandel - 1); } } catch (Exception ex) { DrectSoft.Common.Ctrs.DLG.MyMessageBox.Show(1, ex); } }
///// <summary> ///// 屏蔽第三方控件右键菜单 ///// Add xlb 2013-02-29 ///// </summary> ///// <param name="control"></param> //private void CancelMenu(Control control,ContextMenuStrip contextMenuStrip) //{ // try // { // foreach (Control ctrl in control.Controls) // { // Type type = ctrl.GetType(); // if (type == typeof(LabelControl)) // { // continue; // } // else if (type == typeof(TextEdit)) // { // TextEdit textEdit = ctrl as TextEdit; // if (textEdit != null) // { // textEdit.Properties.ContextMenuStrip = contextMenuStrip; // } // } // else if (type == typeof(MemoEdit)) // { // MemoEdit memoEdit = ctrl as MemoEdit; // if (memoEdit != null) // { // memoEdit.Properties.ContextMenuStrip = contextMenuStrip; // } // } // else if (type == typeof(SpinEdit)) // { // SpinEdit spinEdit = ctrl as SpinEdit; // if (spinEdit != null) // { // spinEdit.Properties.ContextMenuStrip = contextMenuStrip; // } // } // } // } // catch (Exception ex) // { // throw ex; // } //} #endregion /// <summary> /// 选择行变化时出发的事件 /// by xlb 2013-01-06 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gridViewRule_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) { try { if (e.FocusedRowHandle < 0) { return; } _currentRule = gridViewRule.GetRow(e.FocusedRowHandle) as QCRule; DS_Common.ClearControl(groupControlRule); ShowRule(_currentRule); SetRuleEditState(false, false); } catch (Exception ex) { MyMessageBox.Show(1, ex); } }
/// <summary> /// 针对不同的操作方式进行不同的处理 /// </summary> /// <param name="rule"></param> /// <param name="drConfigDataResult"></param> /// <param name="listQCRecord"></param> void Process1QCRuleMark(QCRule rule, DataRow drConfigDataResult, List <QCRecord> listQCRecord) { try { string noofinpat = drConfigDataResult[rule.Condition.PatNoColumnName].ToString(); //判断A记录的操作方式 switch (rule.MARK) { //一次性,只能触发一次 case QCEnum.OperationType.OnlyOne: #region Add By wwj 2013-02-27 //修改事件触发时间后,【1】删除原先就的时限提醒记录,【2】再插入初始化数据到QCRecord表中 //例如:修改入院入区时间,则需要先删除原先入院记录的提醒信息,然后插入新的入院记录提醒信息 foreach (QCRecord qcRecord in listQCRecord) { QCRecord.CancelQCRecordData(qcRecord.ID); //【1】 } QCRecord.InsertInitData(noofinpat, rule, drConfigDataResult); //【2】 #endregion break; //触发一次执行一次 case QCEnum.OperationType.EveryOne: //插入初始化数据到QCRecord表中 QCRecord.InsertInitData(noofinpat, rule, drConfigDataResult); break; //循环触发 case QCEnum.OperationType.Circle: Process1QCRuleCircle(rule, drConfigDataResult, listQCRecord); break; default: break; } } catch (Exception ex) { throw ex; } }
/// <summary> /// 绘制样式事件 /// xlb 2013-01-10 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gridViewRule_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { try { if (e.RowHandle < 0) { return; } QCRule ruleQc = gridViewRule.GetRow(e.RowHandle) as QCRule; if (ruleQc.Valid == "0") { //e.Graphics.FillRectangle(Brushes.Red, e.Bounds); e.Appearance.ForeColor = Color.Red; } } catch (Exception ex) { MyMessageBox.Show(1, ex); } }
/// <summary> /// 单击列表事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void gridViewRule_Click(object sender, EventArgs e) { try { if (gridViewRule.FocusedRowHandle < 0) { return; } _currentRule = gridViewRule.GetRow(gridViewRule.FocusedRowHandle) as QCRule; if (_currentRule == null) { return; } DS_Common.ClearControl(groupControlRule); DS_Common.ClearControl(groupControlCondtion); ShowRule(_currentRule); } catch (Exception ex) { MyMessageBox.Show(1, ex); } }
/// <summary> /// 显示时限详细信息方法 /// by xlb 2013-01-05 /// </summary> /// <param name="qcRule"></param> private void ShowRule(QCRule qcRule) { try { if (qcRule == null) { return; } lookUpEditConditionName.EditValue = qcRule.Condition.Code; textEditTableName.Text = qcRule.Condition.TableName; textEditColumn.Text = qcRule.Condition.ColumnName; textEditColumnValue.Text = qcRule.Condition.ColumnValue; textEditTimeColumn.Text = qcRule.Condition.TimeColumnName; int times = qcRule.Condition.TimeRange; TimeSpan timeSpan = new TimeSpan(0, 0, 0, times); textEditTimeRange.Text = DS_Common.TimeSpanToLocal(timeSpan); textEditPatColumn.Text = qcRule.Condition.PatNoColumnName; textEditMemo.Text = qcRule.Memo; if (_currentRule.Condition.TableName != "" && _currentRule.Condition.ColumnName != "" && _currentRule.Condition.ColumnValue != "" && _currentRule.Condition.TimeRange > 0) { textEditSql.Text = string.Format("select * from {0} where {1} {2} and {3}>sysdate-{4}", _currentRule.Condition.TableName, _currentRule.Condition.ColumnName, _currentRule.Condition.ColumnValue, _currentRule.Condition.TimeColumnName, _currentRule.Condition.TimeRange / 60 / 60 / 24); } else { textEditSql.Text = string.Format("select * from {0} where {1} {2}", _currentRule.Condition.TableName, _currentRule.Condition.ColumnName, _currentRule.Condition.ColumnValue); } textBoxRuleId.Text = qcRule.RuleCode; textBoxRuleName.Text = qcRule.Description; int timesLimit = qcRule.TimeLimit; TimeSpan timeSpans = new TimeSpan(0, 0, 0, timesLimit); textBoxRuleTime.Text = DS_Common.TimeSpanToLocal(timeSpans); textBoxTipInfo.Text = qcRule.Reminder; textBoxWarningInfo.Text = qcRule.FoulMessage; textEditLooptimes.Text = qcRule.CycleTimes.ToString(); TimeSpan timeSpanCycle = new TimeSpan(0, 0, 0, qcRule.CycleInterval); textEditLoopinterval.Text = DS_Common.TimeSpanToLocal(timeSpanCycle); spinEditScore.Text = qcRule.Sorce.ToString(); lookUpEditQcCode.EditValue = qcRule.QCCode; textEditRuleMemo.Text = qcRule.Memo; lookUpEditRuleGroup.EditValue = qcRule.RuleCategory.Code; lookUpEditDoctorLevel.EditValue = (Decimal)qcRule.DoctorLevel; spinEditDelayTime.Text = qcRule.DelayTime.ToString(); if (qcRule.Valid == "1") { checkEditValid.Checked = true; } else { checkEditValid.Checked = false; } if (qcRule.MARK == OperationType.OnlyOne) { comboBoxOpMode.SelectedIndex = 0; } else if (qcRule.MARK == OperationType.EveryOne) { comboBoxOpMode.SelectedIndex = 1; } else if (qcRule.MARK == OperationType.Circle) { comboBoxOpMode.SelectedIndex = 2; } } catch (Exception ex) { throw ex; } }