完成添加变量功能
This commit is contained in:
@@ -13,7 +13,8 @@ public class DbDevice
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
[SugarColumn(IsNullable = true)] public string? Description { get; set; }
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public string? Description { get; set; }
|
||||
|
||||
public string Ip { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
@@ -4,45 +4,123 @@ using SqlSugar.DbConvert;
|
||||
|
||||
namespace PMSWPF.Data.Entities;
|
||||
|
||||
[SugarTable("VariableData")]
|
||||
[SugarTable("VarData")]
|
||||
public class DbVariableData
|
||||
{
|
||||
/// <summary>
|
||||
/// 变量唯一标识符
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)] //数据库是自增才配自增
|
||||
public int Id { get; set; }
|
||||
|
||||
[SugarColumn(IsNullable = true)] public int? VariableTableId { get; set; }
|
||||
/// <summary>
|
||||
/// 关联的变量表ID
|
||||
/// </summary>
|
||||
public int VariableTableId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 关联的变量表实体
|
||||
/// </summary>
|
||||
[Navigate(NavigateType.ManyToOne, nameof(VariableTableId))]
|
||||
public DbVariableTable? VariableTable { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 变量名称
|
||||
/// </summary>
|
||||
public string Name { get; set; }
|
||||
|
||||
[SugarColumn(IsNullable = true)] public string? Description { get; set; }
|
||||
/// <summary>
|
||||
/// 变量描述
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public string? Description { get; set; }
|
||||
|
||||
public string NodeId { get; set; }
|
||||
/// <summary>
|
||||
/// 节点ID,用于标识变量在设备或系统中的唯一路径
|
||||
/// </summary>
|
||||
public string NodeId { get; set; } = String.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 协议类型,例如Modbus、OPC UA等
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnDataType = "varchar(20)", SqlParameterDbType = typeof(EnumToStringConvert))]
|
||||
public ProtocolType ProtocolType { get; set; }
|
||||
|
||||
public string DataType { get; set; }
|
||||
|
||||
[SugarColumn(IsNullable = true)] public List<DbMqtt>? Mqtts { get; set; }
|
||||
|
||||
public string DataValue { get; set; } = String.Empty;
|
||||
public string DisplayValue { get; set; } = String.Empty;
|
||||
public DateTime UpdateTime { get; set; }
|
||||
|
||||
[SugarColumn(IsNullable = true)] public DbUser? UpdateUser { get; set; }
|
||||
|
||||
public string Converstion { get; set; } = String.Empty;
|
||||
public bool IsDeleted { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
public bool IsSave { get; set; }
|
||||
public double SaveRange { get; set; }
|
||||
public bool IsAlarm { get; set; }
|
||||
public double AlarmMin { get; set; }
|
||||
public double AlarmMax { get; set; }
|
||||
/// <summary>
|
||||
/// 数据类型,例如Int、Float、String等
|
||||
/// </summary>
|
||||
public string DataType { get; set; }=String.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 信号类型,例如模拟量、数字量等
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnDataType = "varchar(20)", IsNullable = true, SqlParameterDbType = typeof(EnumToStringConvert))]
|
||||
public SignalType SignalType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 变量当前原始数据值
|
||||
/// </summary>
|
||||
public string DataValue { get; set; } = String.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 变量经过转换或格式化后的显示值
|
||||
/// </summary>
|
||||
public string DisplayValue { get; set; } = String.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 变量数据最后更新时间
|
||||
/// </summary>
|
||||
public DateTime UpdateTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 最后更新变量数据的用户
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public DbUser? UpdateUser { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 关联的MQTT配置列表
|
||||
/// </summary>
|
||||
[SugarColumn(IsNullable = true)]
|
||||
public List<DbMqtt>? Mqtts { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据转换规则或表达式
|
||||
/// </summary>
|
||||
public string Converstion { get; set; } = String.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 指示变量是否处于激活状态
|
||||
/// </summary>
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 指示是否需要保存变量数据
|
||||
/// </summary>
|
||||
public bool IsSave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数据保存的范围或阈值
|
||||
/// </summary>
|
||||
public double SaveRange { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 指示是否需要对变量进行报警监测
|
||||
/// </summary>
|
||||
public bool IsAlarm { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 报警的最小值阈值
|
||||
/// </summary>
|
||||
public double AlarmMin { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 报警的最大值阈值
|
||||
/// </summary>
|
||||
public double AlarmMax { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 指示变量是否已被逻辑删除
|
||||
/// </summary>
|
||||
public bool IsDeleted { get; set; }
|
||||
}
|
||||
@@ -16,18 +16,17 @@ public class DeviceRepository
|
||||
|
||||
public DeviceRepository()
|
||||
{
|
||||
_menuRepository=new MenuRepository();
|
||||
_varTableRepository=new VarTableRepository();
|
||||
_menuRepository = new MenuRepository();
|
||||
_varTableRepository = new VarTableRepository();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public async Task<int> Edit(Device device)
|
||||
{
|
||||
using (var db = DbContext.GetInstance())
|
||||
{
|
||||
return await db.Updateable<DbDevice>(device.CopyTo<DbDevice>()).ExecuteCommandAsync();
|
||||
return await db.Updateable<DbDevice>(device.CopyTo<DbDevice>())
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +39,9 @@ public class DeviceRepository
|
||||
{
|
||||
using (var db = DbContext.GetInstance())
|
||||
{
|
||||
var dlist = await db.Queryable<DbDevice>().Includes(d => d.VariableTables, dv => dv.Device).ToListAsync();
|
||||
var dlist = await db.Queryable<DbDevice>()
|
||||
.Includes(d => d.VariableTables, dv => dv.Device)
|
||||
.ToListAsync();
|
||||
var devices = new List<Device>();
|
||||
foreach (var dbDevice in dlist)
|
||||
{
|
||||
@@ -56,7 +57,8 @@ public class DeviceRepository
|
||||
{
|
||||
using (var db = DbContext.GetInstance())
|
||||
{
|
||||
return await db.Queryable<DbDevice>().FirstAsync(p => p.Id == id);
|
||||
return await db.Queryable<DbDevice>()
|
||||
.FirstAsync(p => p.Id == id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,10 +66,11 @@ public class DeviceRepository
|
||||
{
|
||||
using (var db = DbContext.GetInstance())
|
||||
{
|
||||
return await db.Deleteable<DbDevice>(new DbDevice { Id = id }).ExecuteCommandAsync();
|
||||
return await db.Deleteable<DbDevice>(new DbDevice { Id = id })
|
||||
.ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加设备,包括菜单
|
||||
/// </summary>
|
||||
@@ -101,11 +104,11 @@ public class DeviceRepository
|
||||
if (device.IsAddDefVarTable)
|
||||
{
|
||||
var defVarTable = await _varTableRepository.AddDeviceDefVarTable(addDevice, db);
|
||||
await _menuRepository.AddDeviceDefTableMenu(device, addDeviceMenuId, defVarTable.Id,db);
|
||||
await _menuRepository.AddDeviceDefTableMenu(device, addDeviceMenuId, defVarTable.Id, db);
|
||||
}
|
||||
|
||||
// 添加添加变量表的菜单
|
||||
await _menuRepository.AddVarTableMenu(addDevice,addDeviceMenuId, db);
|
||||
await _menuRepository.AddVarTableMenu(addDevice, addDeviceMenuId, db);
|
||||
await db.CommitTranAsync();
|
||||
// 菜单也添加成功,通知 UI 更新
|
||||
MessageHelper.SendLoadMessage(LoadTypes.Menu);
|
||||
@@ -117,9 +120,8 @@ public class DeviceRepository
|
||||
await db.RollbackTranAsync();
|
||||
// 捕获并记录所有未预期的异常
|
||||
string errorMsg = $"在添加设备过程中发生未预期错误:";
|
||||
Logger.Error(errorMsg+e);
|
||||
NotificationHelper.ShowMessage(errorMsg+e.Message, NotificationType.Error);
|
||||
|
||||
Logger.Error(errorMsg + e);
|
||||
NotificationHelper.ShowMessage(errorMsg + e.Message, NotificationType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,12 +134,15 @@ public class DeviceRepository
|
||||
/// <exception cref="InvalidOperationException"></exception>
|
||||
private async Task<DbDevice> Add(Device device, SqlSugarClient db)
|
||||
{
|
||||
var exist = await db.Queryable<DbDevice>().Where(d => d.Name == device.Name).FirstAsync();
|
||||
var exist = await db.Queryable<DbDevice>()
|
||||
.Where(d => d.Name == device.Name)
|
||||
.FirstAsync();
|
||||
if (exist != null)
|
||||
throw new InvalidOperationException("设备名称已经存在。");
|
||||
var dbDevice = new DbDevice();
|
||||
device.CopyTo(dbDevice);
|
||||
// 是否添加默认变量表
|
||||
return await db.Insertable<DbDevice>(dbDevice).ExecuteReturnEntityAsync();
|
||||
return await db.Insertable<DbDevice>(dbDevice)
|
||||
.ExecuteReturnEntityAsync();
|
||||
}
|
||||
}
|
||||
79
Data/Repositories/VarDataRepository.cs
Normal file
79
Data/Repositories/VarDataRepository.cs
Normal file
@@ -0,0 +1,79 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using PMSWPF.Data.Entities;
|
||||
using PMSWPF.Extensions;
|
||||
using PMSWPF.Models;
|
||||
|
||||
namespace PMSWPF.Data.Repositories;
|
||||
|
||||
/// <summary>
|
||||
/// VariableData仓储类,用于操作DbVariableData实体
|
||||
/// </summary>
|
||||
public class VarDataRepository
|
||||
{
|
||||
/// <summary>
|
||||
/// 根据ID获取VariableData
|
||||
/// </summary>
|
||||
/// <param name="id">主键ID</param>
|
||||
/// <returns></returns>
|
||||
public async Task<DbVariableData> GetByIdAsync(int id)
|
||||
{
|
||||
using (var _db = DbContext.GetInstance())
|
||||
{
|
||||
return await _db.Queryable<DbVariableData>().In(id).SingleAsync();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取所有VariableData
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<List<VariableData>> GetAllAsync()
|
||||
{
|
||||
using (var _db = DbContext.GetInstance())
|
||||
{
|
||||
return await _db.Queryable<DbVariableData>().Select(dbVarData => dbVarData.CopyTo<VariableData>())
|
||||
.ToListAsync();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增VariableData
|
||||
/// </summary>
|
||||
/// <param name="variableData">VariableData实体</param>
|
||||
/// <returns></returns>
|
||||
public async Task<VariableData> AddAsync(VariableData variableData)
|
||||
{
|
||||
using (var _db = DbContext.GetInstance())
|
||||
{
|
||||
var dbVarData = await _db.Insertable(variableData.CopyTo<DbVariableData>()).ExecuteReturnEntityAsync();
|
||||
return dbVarData.CopyTo<VariableData>();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新VariableData
|
||||
/// </summary>
|
||||
/// <param name="variableData">VariableData实体</param>
|
||||
/// <returns></returns>
|
||||
public async Task<int> UpdateAsync(VariableData variableData)
|
||||
{
|
||||
using (var _db = DbContext.GetInstance())
|
||||
{
|
||||
return await _db.Updateable(variableData.CopyTo<DbVariableData>()).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据ID删除VariableData
|
||||
/// </summary>
|
||||
/// <param name="id">主键ID</param>
|
||||
/// <returns></returns>
|
||||
public async Task<int> DeleteAsync(int id)
|
||||
{
|
||||
using (var _db = DbContext.GetInstance())
|
||||
{
|
||||
return await _db.Deleteable<DbVariableData>().In(id).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
using PMSWPF.Data.Entities;
|
||||
using PMSWPF.Extensions;
|
||||
using PMSWPF.Models;
|
||||
using SqlSugar;
|
||||
|
||||
namespace PMSWPF.Data.Repositories;
|
||||
|
||||
public class VariableTableRepository
|
||||
{
|
||||
private SqlSugarClient _db;
|
||||
public VariableTableRepository()
|
||||
{
|
||||
_db = DbContext.GetInstance();
|
||||
}
|
||||
// public async Task<VariableTable> Add(VariableTable variableTable)
|
||||
// {
|
||||
// var exist = await _db.Queryable<DbDevice>().Where(d => d.Name == device.Name).FirstAsync();
|
||||
// if (exist != null)
|
||||
// throw new InvalidOperationException("设备名称已经存在。");
|
||||
// var dbDevice = new DbDevice();
|
||||
// device.CopyTo(dbDevice);
|
||||
// dbDevice.VariableTables = new List<DbVariableTable>();
|
||||
// // 添加默认变量表
|
||||
// var dbVariableTable = new DbVariableTable();
|
||||
// dbVariableTable.Name = "默认变量表";
|
||||
// dbVariableTable.Description = "默认变量表";
|
||||
// dbVariableTable.ProtocolType = dbDevice.ProtocolType;
|
||||
// dbDevice.VariableTables.Add(dbVariableTable);
|
||||
// var addDbDevice= await _db.InsertNav(dbDevice).Include(d => d.VariableTables).ExecuteReturnEntityAsync();
|
||||
// return addDbDevice.CopyTo<Device>();
|
||||
// }
|
||||
|
||||
public async Task<List<VariableTable>> GetAll()
|
||||
{
|
||||
var dbVariableTables = await _db.Queryable<DbVariableTable>().Includes(dv=>dv.Device).ToListAsync();
|
||||
var variableTables = new List<VariableTable>();
|
||||
|
||||
foreach (var dbVariableTable in dbVariableTables)
|
||||
variableTables.Add(dbVariableTable.CopyTo<VariableTable>());
|
||||
|
||||
return variableTables;
|
||||
}
|
||||
|
||||
public async Task<DbVariableTable> GetById(int id)
|
||||
{
|
||||
return await _db.Queryable<DbVariableTable>().FirstAsync(p => p.Id == id);
|
||||
}
|
||||
|
||||
public async Task<int> DeleteById(int id)
|
||||
{
|
||||
return await _db.Deleteable<DbVariableTable>(new DbVariableTable { Id = id }).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user