Files
StandardSence/StandardScene.Core/Charge/AlarmConfigDataService.cs
T
2026-06-14 11:19:15 +08:00

311 lines
9.4 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json;
namespace StandardScene.Charge
{
/// <summary>
/// 报警配置数据服务(单例模式)
/// </summary>
public class AlarmConfigDataService
{
private static AlarmConfigDataService _instance;
private static readonly object _lock = new object();
private List<AlarmConfig> _alarmConfigs;
private readonly string _dataFilePath;
private AlarmConfigDataService()
{
_dataFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "AlarmConfigs.json");
LoadData();
}
/// <summary>
/// 获取单例实例
/// </summary>
public static AlarmConfigDataService Instance
{
get
{
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
{
_instance = new AlarmConfigDataService();
}
}
}
return _instance;
}
}
/// <summary>
/// 从文件加载数据
/// </summary>
private void LoadData()
{
try
{
// 确保数据目录存在
var directory = Path.GetDirectoryName(_dataFilePath);
if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
if (File.Exists(_dataFilePath))
{
var json = File.ReadAllText(_dataFilePath);
if (!string.IsNullOrWhiteSpace(json))
{
_alarmConfigs = JsonConvert.DeserializeObject<List<AlarmConfig>>(json);
}
// 如果反序列化失败或为null,创建新列表
if (_alarmConfigs == null)
{
_alarmConfigs = new List<AlarmConfig>();
}
}
else
{
_alarmConfigs = new List<AlarmConfig>();
InitializeDefaultAlarms();
SaveData();
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"加载报警配置数据失败: {ex.Message}");
_alarmConfigs = new List<AlarmConfig>();
InitializeDefaultAlarms();
}
}
/// <summary>
/// 初始化默认报警配置
/// </summary>
private void InitializeDefaultAlarms()
{
//_alarmConfigs.Add(new AlarmConfig
//{
// AlarmCode = 1001,
// AlarmContent = "电压过高",
// Level = AlarmLevel.High,
// Enabled = true,
// Remarks = "电压超过额定值10%"
//});
//_alarmConfigs.Add(new AlarmConfig
//{
// AlarmCode = 1002,
// AlarmContent = "电压过低",
// Level = AlarmLevel.High,
// Enabled = true,
// Remarks = "电压低于额定值10%"
//});
//_alarmConfigs.Add(new AlarmConfig
//{
// AlarmCode = 1003,
// AlarmContent = "电流过大",
// Level = AlarmLevel.Critical,
// Enabled = true,
// Remarks = "电流超过额定值"
//});
//_alarmConfigs.Add(new AlarmConfig
//{
// AlarmCode = 2001,
// AlarmContent = "温度异常",
// Level = AlarmLevel.High,
// Enabled = true,
// Remarks = "温度超过安全范围"
//});
//_alarmConfigs.Add(new AlarmConfig
//{
// AlarmCode = 3001,
// AlarmContent = "通讯超时",
// Level = AlarmLevel.Medium,
// Enabled = true,
// Remarks = "通讯响应时间超过阈值"
//});
//_alarmConfigs.Add(new AlarmConfig
//{
// AlarmCode = 3002,
// AlarmContent = "连接断开",
// Level = AlarmLevel.Critical,
// Enabled = true,
// Remarks = "网络连接中断"
//});
}
/// <summary>
/// 保存数据到文件
/// </summary>
private void SaveData()
{
try
{
var directory = Path.GetDirectoryName(_dataFilePath);
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
var json = JsonConvert.SerializeObject(_alarmConfigs, Formatting.Indented);
File.WriteAllText(_dataFilePath, json);
}
catch (Exception ex)
{
throw new Exception($"保存数据失败: {ex.Message}");
}
}
/// <summary>
/// 获取所有报警配置
/// </summary>
public List<AlarmConfig> GetAllAlarmConfigs()
{
lock (_lock)
{
if (_alarmConfigs == null)
{
_alarmConfigs = new List<AlarmConfig>();
}
return new List<AlarmConfig>(_alarmConfigs);
}
}
/// <summary>
/// 根据编号获取报警配置
/// </summary>
public AlarmConfig GetAlarmConfig(string alarmId)
{
lock (_lock)
{
return _alarmConfigs.FirstOrDefault(a => a.AlarmId == alarmId);
}
}
/// <summary>
/// 根据编号获取报警配置
/// </summary>
public AlarmConfig GetAlarmConfigAlarmCode(int alarmCode)
{
lock (_lock)
{
return _alarmConfigs.FirstOrDefault(a => a.AlarmCode == alarmCode);
}
}
/// <summary>
/// 根据报警编码获取报警配置
/// </summary>
public AlarmConfig GetAlarmConfigByCode(int alarmCode)
{
lock (_lock)
{
return _alarmConfigs.FirstOrDefault(a => a.AlarmCode == alarmCode);
}
}
/// <summary>
/// 添加报警配置
/// </summary>
public bool AddAlarmConfig(AlarmConfig alarmConfig, out string errorMessage)
{
lock (_lock)
{
if (!alarmConfig.IsValid(out errorMessage))
{
return false;
}
// 检查编码是否已存在
if (_alarmConfigs.Any(a => a.AlarmCode == alarmConfig.AlarmCode))
{
errorMessage = $"报警编码 {alarmConfig.AlarmCode} 已存在";
return false;
}
_alarmConfigs.Add(alarmConfig);
SaveData();
errorMessage = string.Empty;
return true;
}
}
/// <summary>
/// 更新报警配置
/// </summary>
public bool UpdateAlarmConfig(AlarmConfig alarmConfig, out string errorMessage)
{
lock (_lock)
{
if (!alarmConfig.IsValid(out errorMessage))
{
return false;
}
var index = _alarmConfigs.FindIndex(a => a.AlarmId == alarmConfig.AlarmId);
if (index == -1)
{
errorMessage = "报警配置不存在";
return false;
}
// 检查编码是否与其他配置冲突
if (_alarmConfigs.Any(a => a.AlarmId != alarmConfig.AlarmId && a.AlarmCode == alarmConfig.AlarmCode))
{
errorMessage = $"报警编码 {alarmConfig.AlarmCode} 已被其他配置使用";
return false;
}
alarmConfig.ModifiedTime = DateTime.Now;
_alarmConfigs[index] = alarmConfig;
SaveData();
errorMessage = string.Empty;
return true;
}
}
/// <summary>
/// 删除报警配置
/// </summary>
public bool DeleteAlarmConfig(string alarmId, out string errorMessage)
{
lock (_lock)
{
var alarmConfig = _alarmConfigs.FirstOrDefault(a => a.AlarmId == alarmId);
if (alarmConfig == null)
{
errorMessage = "报警配置不存在";
return false;
}
_alarmConfigs.Remove(alarmConfig);
SaveData();
errorMessage = string.Empty;
return true;
}
}
/// <summary>
/// 重新加载数据
/// </summary>
public void Reload()
{
lock (_lock)
{
LoadData();
}
}
}
}