548 lines
19 KiB
C#
548 lines
19 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
|
|
namespace StandardScene.Charge
|
|
{
|
|
/// <summary>
|
|
/// 报警配置管理窗体
|
|
/// </summary>
|
|
public partial class AlarmConfigManagementForm : Form
|
|
{
|
|
private readonly AlarmConfigDataService dataService;
|
|
private AlarmConfig selectedAlarmConfig;
|
|
|
|
public AlarmConfigManagementForm()
|
|
{
|
|
try
|
|
{
|
|
InitializeComponent();
|
|
dataService = AlarmConfigDataService.Instance;
|
|
|
|
// 订阅Load事件,确保所有控件都已初始化后再加载数据
|
|
this.Load += AlarmConfigManagementForm_Load;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"初始化报警配置管理窗体失败: {ex.Message}\n\n详细信息:\n{ex.StackTrace}",
|
|
"错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 窗体加载事件
|
|
/// </summary>
|
|
private void AlarmConfigManagementForm_Load(object sender, EventArgs e)
|
|
{
|
|
InitializeForm();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化窗体
|
|
/// </summary>
|
|
private void InitializeForm()
|
|
{
|
|
try
|
|
{
|
|
// 初始化报警级别下拉框
|
|
if (cmbLevel != null)
|
|
{
|
|
cmbLevel.Items.Clear();
|
|
cmbLevel.Items.Add("无");
|
|
cmbLevel.Items.Add("低");
|
|
cmbLevel.Items.Add("中");
|
|
cmbLevel.Items.Add("高");
|
|
cmbLevel.Items.Add("严重");
|
|
cmbLevel.SelectedIndex = 2; // 默认选择"中"
|
|
}
|
|
|
|
// 初始化级别筛选下拉框
|
|
if (cmbLevelFilter != null)
|
|
{
|
|
cmbLevelFilter.Items.Clear();
|
|
cmbLevelFilter.Items.Add("全部");
|
|
cmbLevelFilter.Items.Add("无");
|
|
cmbLevelFilter.Items.Add("低");
|
|
cmbLevelFilter.Items.Add("中");
|
|
cmbLevelFilter.Items.Add("高");
|
|
cmbLevelFilter.Items.Add("严重");
|
|
cmbLevelFilter.SelectedIndex = 0;
|
|
}
|
|
|
|
LoadAlarmConfigs();
|
|
ClearEditFields();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"初始化窗体失败: {ex.Message}\n\n{ex.StackTrace}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加载报警配置列表
|
|
/// </summary>
|
|
private void LoadAlarmConfigs()
|
|
{
|
|
try
|
|
{
|
|
if (dgvAlarmConfigs == null)
|
|
{
|
|
return; // 控件还未初始化,直接返回
|
|
}
|
|
|
|
var alarmConfigs = dataService.GetAllAlarmConfigs();
|
|
|
|
if (alarmConfigs == null)
|
|
{
|
|
alarmConfigs = new System.Collections.Generic.List<AlarmConfig>();
|
|
}
|
|
|
|
// 根据级别筛选
|
|
if (cmbLevelFilter != null && cmbLevelFilter.SelectedIndex > 0)
|
|
{
|
|
var filterLevel = (AlarmLevel)(cmbLevelFilter.SelectedIndex - 1);
|
|
alarmConfigs = alarmConfigs.Where(a => a.Level == filterLevel).ToList();
|
|
}
|
|
|
|
// 根据搜索文本筛选
|
|
if (txtSearch != null && !string.IsNullOrWhiteSpace(txtSearch.Text))
|
|
{
|
|
var searchText = txtSearch.Text.Trim().ToLower();
|
|
alarmConfigs = alarmConfigs.Where(a =>
|
|
a.AlarmId.ToLower().Contains(searchText) ||
|
|
a.AlarmCode.ToString().Contains(searchText) ||
|
|
a.AlarmContent.ToLower().Contains(searchText)
|
|
).ToList();
|
|
}
|
|
|
|
dgvAlarmConfigs.Rows.Clear();
|
|
|
|
foreach (var alarm in alarmConfigs)
|
|
{
|
|
var index = dgvAlarmConfigs.Rows.Add(
|
|
alarm.AlarmId,
|
|
alarm.AlarmCode,
|
|
alarm.AlarmContent,
|
|
GetLevelText(alarm.Level),
|
|
alarm.Enabled ? "是" : "否",
|
|
alarm.Remarks
|
|
);
|
|
|
|
// 根据级别设置行颜色
|
|
var row = dgvAlarmConfigs.Rows[index];
|
|
switch (alarm.Level)
|
|
{
|
|
case AlarmLevel.Critical:
|
|
row.DefaultCellStyle.BackColor = Color.FromArgb(255, 235, 238); // 浅红色
|
|
row.DefaultCellStyle.ForeColor = Color.FromArgb(183, 28, 28);
|
|
// 安全地创建粗体字体
|
|
var baseFont = row.DefaultCellStyle.Font ?? dgvAlarmConfigs.DefaultCellStyle.Font ?? new Font("微软雅黑", 9F);
|
|
row.DefaultCellStyle.Font = new Font(baseFont, FontStyle.Bold);
|
|
break;
|
|
case AlarmLevel.High:
|
|
row.DefaultCellStyle.BackColor = Color.FromArgb(255, 243, 224); // 浅橙色
|
|
row.DefaultCellStyle.ForeColor = Color.FromArgb(230, 81, 0);
|
|
break;
|
|
case AlarmLevel.Medium:
|
|
row.DefaultCellStyle.BackColor = Color.FromArgb(255, 249, 196); // 浅黄色
|
|
row.DefaultCellStyle.ForeColor = Color.FromArgb(245, 127, 23);
|
|
break;
|
|
case AlarmLevel.Low:
|
|
row.DefaultCellStyle.BackColor = Color.FromArgb(232, 245, 233); // 浅绿色
|
|
row.DefaultCellStyle.ForeColor = Color.FromArgb(46, 125, 50);
|
|
break;
|
|
}
|
|
|
|
// 如果未启用,显示为灰色
|
|
if (!alarm.Enabled)
|
|
{
|
|
row.DefaultCellStyle.BackColor = Color.FromArgb(238, 238, 238);
|
|
row.DefaultCellStyle.ForeColor = Color.FromArgb(158, 158, 158);
|
|
}
|
|
}
|
|
|
|
UpdateStatistics();
|
|
UpdateTitleWithFilter(alarmConfigs.Count);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"加载数据失败: {ex.Message}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新统计信息
|
|
/// </summary>
|
|
private void UpdateStatistics()
|
|
{
|
|
try
|
|
{
|
|
if (lblStatistics == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var alarmConfigs = dataService.GetAllAlarmConfigs();
|
|
if (alarmConfigs == null)
|
|
{
|
|
alarmConfigs = new System.Collections.Generic.List<AlarmConfig>();
|
|
}
|
|
|
|
var total = alarmConfigs.Count;
|
|
var enabled = alarmConfigs.Count(a => a.Enabled);
|
|
var disabled = total - enabled;
|
|
var critical = alarmConfigs.Count(a => a.Level == AlarmLevel.Critical);
|
|
var high = alarmConfigs.Count(a => a.Level == AlarmLevel.High);
|
|
|
|
lblStatistics.Text = $"总数: {total} | 启用: {enabled} | 禁用: {disabled} | 严重: {critical} | 高级: {high}";
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine($"更新统计信息失败: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新标题显示筛选信息
|
|
/// </summary>
|
|
private void UpdateTitleWithFilter(int displayCount)
|
|
{
|
|
try
|
|
{
|
|
var allConfigs = dataService.GetAllAlarmConfigs();
|
|
var totalCount = allConfigs != null ? allConfigs.Count : 0;
|
|
|
|
if (cmbLevelFilter != null && cmbLevelFilter.SelectedIndex > 0)
|
|
{
|
|
this.Text = $"报警配置管理 - 显示: {displayCount}/{totalCount} ({cmbLevelFilter.Text})";
|
|
}
|
|
else
|
|
{
|
|
this.Text = $"报警配置管理 - 总数: {totalCount}";
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine($"更新标题失败: {ex.Message}");
|
|
this.Text = "报警配置管理";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取级别文本
|
|
/// </summary>
|
|
private string GetLevelText(AlarmLevel level)
|
|
{
|
|
switch (level)
|
|
{
|
|
case AlarmLevel.None: return "无";
|
|
case AlarmLevel.Low: return "低";
|
|
case AlarmLevel.Medium: return "中";
|
|
case AlarmLevel.High: return "高";
|
|
case AlarmLevel.Critical: return "严重";
|
|
default: return "未知";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 清空编辑字段
|
|
/// </summary>
|
|
private void ClearEditFields()
|
|
{
|
|
try
|
|
{
|
|
selectedAlarmConfig = null;
|
|
|
|
if (txtAlarmId != null)
|
|
{
|
|
txtAlarmId.Text = "";
|
|
txtAlarmId.Enabled = false; // 新增时编号自动生成
|
|
}
|
|
|
|
if (numAlarmCode != null)
|
|
{
|
|
numAlarmCode.Value = 0;
|
|
numAlarmCode.Enabled = true;
|
|
numAlarmCode.ReadOnly = false;
|
|
}
|
|
|
|
if (txtAlarmContent != null)
|
|
{
|
|
txtAlarmContent.Text = "";
|
|
txtAlarmContent.Enabled = true;
|
|
txtAlarmContent.ReadOnly = false;
|
|
}
|
|
|
|
if (cmbLevel != null)
|
|
{
|
|
cmbLevel.SelectedIndex = 2; // 中
|
|
cmbLevel.Enabled = true;
|
|
}
|
|
|
|
if (chkEnabled != null)
|
|
{
|
|
chkEnabled.Checked = true;
|
|
chkEnabled.Enabled = true;
|
|
}
|
|
|
|
if (txtRemarks != null)
|
|
{
|
|
txtRemarks.Text = "";
|
|
txtRemarks.Enabled = true;
|
|
txtRemarks.ReadOnly = false;
|
|
}
|
|
|
|
if (btnSave != null)
|
|
{
|
|
btnSave.Text = "新增";
|
|
btnSave.Enabled = true;
|
|
}
|
|
|
|
if (btnDelete != null)
|
|
{
|
|
btnDelete.Enabled = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
System.Diagnostics.Debug.WriteLine($"清空编辑字段失败: {ex.Message}");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 从字段创建报警配置
|
|
/// </summary>
|
|
private AlarmConfig CreateAlarmConfigFromFields()
|
|
{
|
|
var alarmConfig = selectedAlarmConfig ?? new AlarmConfig();
|
|
|
|
alarmConfig.AlarmCode = (int)numAlarmCode.Value;
|
|
alarmConfig.AlarmContent = txtAlarmContent.Text.Trim();
|
|
alarmConfig.Level = (AlarmLevel)cmbLevel.SelectedIndex;
|
|
alarmConfig.Enabled = chkEnabled.Checked;
|
|
alarmConfig.Remarks = txtRemarks.Text.Trim();
|
|
|
|
return alarmConfig;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加载报警配置到编辑区
|
|
/// </summary>
|
|
private void LoadAlarmConfigToFields(AlarmConfig alarmConfig)
|
|
{
|
|
try
|
|
{
|
|
selectedAlarmConfig = alarmConfig;
|
|
|
|
// 填充数据
|
|
if (txtAlarmId != null)
|
|
{
|
|
txtAlarmId.Text = alarmConfig.AlarmId;
|
|
txtAlarmId.Enabled = false; // 编号不可修改
|
|
}
|
|
|
|
if (numAlarmCode != null)
|
|
{
|
|
numAlarmCode.Value = alarmConfig.AlarmCode;
|
|
numAlarmCode.Enabled = true;
|
|
numAlarmCode.ReadOnly = false;
|
|
}
|
|
|
|
if (txtAlarmContent != null)
|
|
{
|
|
txtAlarmContent.Text = alarmConfig.AlarmContent;
|
|
txtAlarmContent.Enabled = true;
|
|
txtAlarmContent.ReadOnly = false;
|
|
}
|
|
|
|
if (cmbLevel != null)
|
|
{
|
|
cmbLevel.SelectedIndex = (int)alarmConfig.Level;
|
|
cmbLevel.Enabled = true;
|
|
}
|
|
|
|
if (chkEnabled != null)
|
|
{
|
|
chkEnabled.Checked = alarmConfig.Enabled;
|
|
chkEnabled.Enabled = true;
|
|
}
|
|
|
|
if (txtRemarks != null)
|
|
{
|
|
txtRemarks.Text = alarmConfig.Remarks ?? "";
|
|
txtRemarks.Enabled = true;
|
|
txtRemarks.ReadOnly = false;
|
|
}
|
|
|
|
// 设置按钮状态
|
|
if (btnSave != null)
|
|
{
|
|
btnSave.Text = "保存";
|
|
btnSave.Enabled = true;
|
|
}
|
|
|
|
if (btnDelete != null)
|
|
{
|
|
btnDelete.Enabled = true;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"加载数据到编辑区失败: {ex.Message}\n\n{ex.StackTrace}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
// ==================== 事件处理 ====================
|
|
|
|
private void btnSave_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
// 验证报警编码
|
|
if (numAlarmCode.Value < 0)
|
|
{
|
|
MessageBox.Show("报警编码不能为负数", "验证失败",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
numAlarmCode.Focus();
|
|
return;
|
|
}
|
|
|
|
// 验证报警内容
|
|
if (string.IsNullOrWhiteSpace(txtAlarmContent.Text))
|
|
{
|
|
MessageBox.Show("报警内容不能为空", "验证失败",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
txtAlarmContent.Focus();
|
|
return;
|
|
}
|
|
|
|
var alarmConfig = CreateAlarmConfigFromFields();
|
|
string errorMessage;
|
|
|
|
bool success;
|
|
if (selectedAlarmConfig == null)
|
|
{
|
|
// 新增
|
|
success = dataService.AddAlarmConfig(alarmConfig, out errorMessage);
|
|
}
|
|
else
|
|
{
|
|
// 更新
|
|
success = dataService.UpdateAlarmConfig(alarmConfig, out errorMessage);
|
|
}
|
|
|
|
if (success)
|
|
{
|
|
MessageBox.Show("保存成功!", "提示",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
LoadAlarmConfigs();
|
|
ClearEditFields();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show($"保存失败: {errorMessage}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"保存失败: {ex.Message}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void btnDelete_Click(object sender, EventArgs e)
|
|
{
|
|
if (selectedAlarmConfig == null)
|
|
{
|
|
MessageBox.Show("请先选择要删除的报警配置", "提示",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
return;
|
|
}
|
|
|
|
var result = MessageBox.Show(
|
|
$"确定要删除报警配置 [{selectedAlarmConfig.AlarmCode}] {selectedAlarmConfig.AlarmContent} 吗?",
|
|
"确认删除",
|
|
MessageBoxButtons.YesNo,
|
|
MessageBoxIcon.Question);
|
|
|
|
if (result == DialogResult.Yes)
|
|
{
|
|
if (dataService.DeleteAlarmConfig(selectedAlarmConfig.AlarmId, out string errorMessage))
|
|
{
|
|
MessageBox.Show("删除成功!", "提示",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
LoadAlarmConfigs();
|
|
ClearEditFields();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show($"删除失败: {errorMessage}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
|
{
|
|
ClearEditFields();
|
|
}
|
|
|
|
private void btnRefresh_Click(object sender, EventArgs e)
|
|
{
|
|
dataService.Reload();
|
|
LoadAlarmConfigs();
|
|
}
|
|
|
|
private void btnClose_Click(object sender, EventArgs e)
|
|
{
|
|
this.Close();
|
|
}
|
|
|
|
private void dgvAlarmConfigs_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
if (e.RowIndex >= 0 && e.RowIndex < dgvAlarmConfigs.Rows.Count)
|
|
{
|
|
var row = dgvAlarmConfigs.Rows[e.RowIndex];
|
|
if (row.Cells[0].Value != null)
|
|
{
|
|
var alarmId = row.Cells[1].Value.ToString();
|
|
var alarmConfig = dataService.GetAlarmConfigAlarmCode(int.Parse(alarmId));
|
|
if (alarmConfig != null)
|
|
{
|
|
LoadAlarmConfigToFields(alarmConfig);
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show($"未找到报警配置: {alarmId}", "提示",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"加载报警配置失败: {ex.Message}", "错误",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void txtSearch_TextChanged(object sender, EventArgs e)
|
|
{
|
|
LoadAlarmConfigs();
|
|
}
|
|
|
|
private void cmbLevelFilter_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
LoadAlarmConfigs();
|
|
}
|
|
}
|
|
}
|
|
|