You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
461 lines
18 KiB
C#
461 lines
18 KiB
C#
using AngleSharp.Dom;
|
|
using Masuit.Tools;
|
|
using Masuit.Tools.Models;
|
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
using CVDEMCS.Common;
|
|
using CVDEMCS.Common.Constant;
|
|
using CVDEMCS.Common.DI;
|
|
using CVDEMCS.Services.Models;
|
|
using CVDEMCS.Services.Repositories.Entities;
|
|
using SharpCompress.Common;
|
|
using System;
|
|
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
|
|
|
|
namespace CVDEMCS.Services.Repositories.Impl
|
|
{
|
|
/// <summary>
|
|
/// PLC控制器 数据层 实现
|
|
/// </summary>
|
|
internal class DeviceRepository : IDeviceRepository
|
|
{
|
|
#region PLC控制器
|
|
|
|
/// <summary>
|
|
/// 获取PLC控制器分页列表
|
|
/// </summary>
|
|
/// <param name="deviceCode">控制器编号</param>
|
|
/// <param name="deviceName">控制器名称</param>
|
|
/// <param name="activated">是否启用</param>
|
|
/// <param name="page">当前页</param>
|
|
/// <param name="size">页大小</param>
|
|
/// <returns></returns>
|
|
public Result<PagedList<DeviceInfo>> GetDevicePageList(string deviceCode, string deviceName, bool? activated, int page, int size)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var query = QueryDevice(deviceCode, deviceName, activated, context);
|
|
|
|
var result = query.OrderBy(f => f.DeviceCode).ToPagedList(page, size);
|
|
|
|
return new Result<PagedList<DeviceInfo>>(result);
|
|
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取PLC控制器列表
|
|
/// </summary>
|
|
/// <param name="deviceCode">控制器编号</param>
|
|
/// <param name="deviceName">控制器名称</param>
|
|
/// <param name="activated">是否启用</param>
|
|
/// <returns></returns>
|
|
public Result<List<DeviceInfo>> GetDeviceInfoList(string deviceCode, string deviceName, bool? activated = false)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var query = QueryDevice(deviceCode, deviceName, activated, context);
|
|
|
|
var result = query.OrderBy(f => f.DeviceCode).ToList();
|
|
|
|
return new Result<List<DeviceInfo>>(result);
|
|
}
|
|
}
|
|
|
|
private IQueryable<DeviceInfo> QueryDevice(string deviceCode, string deviceName, bool? activated, EFContext context)
|
|
{
|
|
var query = context.DeviceInfos.Where(f => !f.IsDelete).Select(f =>
|
|
new DeviceInfo
|
|
{
|
|
Id = f.Id,
|
|
DeviceCode = f.DeviceCode,
|
|
DeviceName = f.DeviceName,
|
|
Host = f.Host,
|
|
Port = f.Port,
|
|
Protocol = f.Protocol,
|
|
Activated = f.Activated,
|
|
Remark = f.Remark,
|
|
});
|
|
|
|
if (!deviceCode.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.DeviceCode.StartsWith(deviceCode));
|
|
}
|
|
if (!deviceName.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.DeviceName.StartsWith(deviceName));
|
|
}
|
|
if (activated.HasValue)
|
|
{
|
|
query = query.Where(f => f.Activated == activated.Value);
|
|
}
|
|
|
|
return query;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取PLC控制器明细
|
|
/// </summary>
|
|
/// <param name="id">主键Id</param>
|
|
/// <returns></returns>
|
|
public Result<DeviceInfoEntity> GetDeviceDetail(string id)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var result = new Result<DeviceInfoEntity>();
|
|
|
|
var detail = context.DeviceInfos.Where(f => f.Id == id).FirstOrDefault();
|
|
if (detail == null)
|
|
{
|
|
result.Message = $"没有找到Id:【{id}】的数据";
|
|
return result;
|
|
}
|
|
result.Content = detail;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加PLC控制器
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
public Result<string> AddDevice(DeviceInfoEntity entity)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var result = new Result<string>();
|
|
|
|
var query = context.DeviceInfos.Where(f => !f.IsDelete);
|
|
if (query.Where(f => f.DeviceName == entity.DeviceName).FirstOrDefault() != null)
|
|
{
|
|
result.Message = $"已存在DeviceName:【{entity.DeviceName}】的数据";
|
|
return result;
|
|
}
|
|
if (query.Where(f => f.DeviceCode == entity.DeviceCode).FirstOrDefault() != null)
|
|
{
|
|
result.Message = $"已存在DeviceCode:【{entity.DeviceCode}】的数据";
|
|
return result;
|
|
}
|
|
|
|
entity.Create();
|
|
context.DeviceInfos.Add(entity);
|
|
context.SaveChanges();
|
|
|
|
return new Result<string>(entity.Id);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新PLC控制器
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
|
|
public Result UpdateDevice(DeviceInfoEntity entity)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var result = new Result();
|
|
|
|
var query = context.DeviceInfos.Where(f => !f.IsDelete);
|
|
var update = query.Where(f => f.Id == entity.Id).FirstOrDefault();
|
|
if (update == null)
|
|
{
|
|
result.Message = $"没有找到Id:【{entity.Id}】的数据";
|
|
return result;
|
|
}
|
|
if (query.Where(f => f.DeviceName == entity.DeviceName && f.Id != entity.Id).FirstOrDefault() != null)
|
|
{
|
|
result.Message = $"已存在DeviceName:【{entity.DeviceName}】的数据";
|
|
return result;
|
|
}
|
|
if (query.Where(f => f.DeviceCode == entity.DeviceCode && f.Id != entity.Id).FirstOrDefault() != null)
|
|
{
|
|
result.Message = $"已存在DeviceCode:【{entity.DeviceCode}】的数据";
|
|
return result;
|
|
}
|
|
|
|
update.DeviceCode = entity.DeviceCode;
|
|
update.DeviceName = entity.DeviceName;
|
|
update.Activated = entity.Activated;
|
|
update.Host = entity.Host;
|
|
update.Port = entity.Port;
|
|
update.Protocol = entity.Protocol;
|
|
update.Remark = entity.Remark;
|
|
entity.Update();
|
|
context.SaveChanges();
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除PLC控制器
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
public Result DeleteDevice(string id)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var result = new Result();
|
|
var entity = context.DeviceInfos.Where(f => f.Id == id).FirstOrDefault();
|
|
if (entity == null)
|
|
{
|
|
result.Message = $"没有找到Id:【{id}】的数据";
|
|
return result;
|
|
|
|
}
|
|
|
|
entity.Delete();
|
|
context.SaveChanges();
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region PLC点位
|
|
|
|
/// <summary>
|
|
/// 获取PLC控制器点位分页列表
|
|
/// </summary>
|
|
/// <param name="deviceId">控制器Id</param>
|
|
/// <param name="deviceCode">控制器编号</param>
|
|
/// <param name="deviceName">控制器名称</param>
|
|
/// <param name="equipmentName">设备名称</param>
|
|
/// <param name="equipmentCode">设备编号</param>
|
|
/// <param name="equipmentType">设备类型</param>
|
|
/// <param name="pointCode">点位编号</param>
|
|
/// <param name="pointName">点位列表</param>
|
|
///<param name="activated">是否启用</param>
|
|
/// <param name="page">当前页</param>
|
|
/// <param name="size">页大小</param>
|
|
/// <returns></returns>
|
|
public Result<PagedList<DevicePoint>> GetDevicePointPageList(string deviceId, string deviceName, string deviceCode, string equipmentName, string equipmentCode, string equipmentType, string pointCode, string pointName, bool? activated, int page, int size)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var query = DevicePointQuery(deviceId, deviceName, deviceCode, equipmentName, equipmentCode, equipmentType, pointCode, pointName, activated, context);
|
|
var pageList = query.OrderBy(f => f.PointCode).ToPagedList(page, size);
|
|
return new Result<PagedList<DevicePoint>>(pageList);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取PLC控制器点位列表
|
|
/// </summary>
|
|
/// <param name="deviceId">控制器Id</param>
|
|
/// <param name="deviceCode">控制器编号</param>
|
|
/// <param name="deviceName">控制器名称</param>
|
|
/// <param name="equipmentName">设备名称</param>
|
|
/// <param name="equipmentCode">设备编号</param>
|
|
/// <param name="equipmentType">设备类型</param>
|
|
/// <param name="pointCode">点位编号</param>
|
|
/// <param name="pointName">点位列表</param>
|
|
///<param name="activated">是否启用</param>
|
|
/// <returns></returns>
|
|
public Result<List<DevicePoint>> GetDevicePointList(string deviceId, string deviceName, string deviceCode, string equipmentName, string equipmentCode, string equipmentType, string pointCode, string pointName, bool? activated)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var query = DevicePointQuery(deviceId, deviceName, deviceCode, equipmentName, equipmentCode, equipmentType, pointCode, pointName, activated, context);
|
|
var list = query.ToList();
|
|
return new Result<List<DevicePoint>>(list);
|
|
}
|
|
}
|
|
|
|
private IQueryable<DevicePoint> DevicePointQuery(string deviceId, string deviceName, string deviceCode, string equipmentName, string equipmentCode, string equipmentType, string pointCode, string pointName, bool? activated, EFContext context)
|
|
{
|
|
var query = from device in context.DeviceInfos.Where(f => !f.IsDelete)
|
|
join point in context.DevicePoints.Where(f => !f.IsDelete) on device.Id equals point.DeviceId
|
|
join equipment in context.EquipmentInfos.Where(f => !f.IsDelete) on point.EquipmentId equals equipment.Id
|
|
select new DevicePoint
|
|
{
|
|
Id = point.Id,
|
|
DeviceId = device.Id,
|
|
DeviceCode = device.DeviceCode,
|
|
DeviceName = device.DeviceName,
|
|
EquipmentId = equipment.Id,
|
|
EquipmentCode = equipment.EquipmentCode,
|
|
EquipmentName = equipment.EquipmentName,
|
|
EquipmentType = equipment.EquipmentType,
|
|
Model = equipment.Model,
|
|
IsMaintain = equipment.IsMaintain,
|
|
Activated = point.Activated,
|
|
PointCode = point.PointCode,
|
|
PointName = point.PointName,
|
|
Address = point.Address,
|
|
DataType = point.DataType,
|
|
ActionType = point.ActionType,
|
|
|
|
Remark = point.Remark,
|
|
};
|
|
if (!deviceId.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.DeviceId == deviceId);
|
|
}
|
|
if (!deviceName.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.DeviceName.StartsWith(deviceName));
|
|
}
|
|
if (!deviceCode.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.DeviceCode.StartsWith(deviceCode));
|
|
}
|
|
if (!equipmentName.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.EquipmentName.StartsWith(equipmentName));
|
|
}
|
|
if (!equipmentCode.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.EquipmentCode.StartsWith(equipmentCode));
|
|
}
|
|
if (!equipmentType.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.EquipmentType == equipmentType);
|
|
}
|
|
if (!pointCode.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.PointCode.StartsWith(pointCode));
|
|
}
|
|
if (!pointName.IsNullOrEmpty())
|
|
{
|
|
query = query.Where(f => f.PointName.StartsWith(pointName));
|
|
}
|
|
if (activated.HasValue)
|
|
{
|
|
query = query.Where(f => f.Activated == activated.Value);
|
|
}
|
|
|
|
return query;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取PLC控制器点位明细
|
|
/// </summary>
|
|
/// <param name="id">Id</param>
|
|
/// <returns></returns>
|
|
public Result<DevicePointEntity> GetDevicePointDetail(string id)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var result = new Result<DevicePointEntity>();
|
|
|
|
var entity = context.DevicePoints.Where(f => f.Id == id).FirstOrDefault();
|
|
if (entity == null)
|
|
{
|
|
result.Message = $"没有找到Id:【{id}】的数据";
|
|
return result;
|
|
}
|
|
result.Content = entity;
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加PLC控制器点位
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
public Result<string> AddDevicePoint(DevicePointEntity entity)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var result = new Result<string>();
|
|
|
|
var query = context.DevicePoints.Where(f => !f.IsDelete);
|
|
if (query.Where(f => f.PointName == entity.PointName).FirstOrDefault() != null)
|
|
{
|
|
result.Message = $"已存在PointName:【{entity.PointName}】的数据";
|
|
return result;
|
|
}
|
|
if (query.Where(f => f.PointCode == entity.PointCode).FirstOrDefault() != null)
|
|
{
|
|
result.Message = $"已存在PointCode:【{entity.PointCode}】的数据";
|
|
return result;
|
|
}
|
|
|
|
entity.Create();
|
|
context.DevicePoints.Add(entity);
|
|
context.SaveChanges();
|
|
result.Content = entity.Id;
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 更新PLC控制器点位
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
public Result UpdateDevicePoint(DevicePointEntity entity)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var result = new Result();
|
|
|
|
var query = context.DevicePoints.Where(f => !f.IsDelete);
|
|
var update = query.Where(f => f.Id == entity.Id).FirstOrDefault();
|
|
if (update == null)
|
|
{
|
|
result.Message = $"没有找到Id:【{entity.Id}】的数据";
|
|
return result;
|
|
}
|
|
if (query.Where(f => f.PointName == entity.PointName && f.Id != entity.Id).FirstOrDefault() != null)
|
|
{
|
|
result.Message = $"已存在PointName:【{entity.PointName}】的数据";
|
|
return result;
|
|
}
|
|
if (query.Where(f => f.PointCode == entity.PointCode && f.Id != entity.Id).FirstOrDefault() != null)
|
|
{
|
|
result.Message = $"已存在PointCode:【{entity.PointCode}】的数据";
|
|
return result;
|
|
}
|
|
update.DeviceId = entity.DeviceId;
|
|
update.EquipmentId = entity.EquipmentId;
|
|
update.PointCode = entity.PointCode;
|
|
update.PointName = entity.PointName;
|
|
update.ActionType = entity.ActionType;
|
|
update.Activated = entity.Activated;
|
|
update.Address = entity.Address;
|
|
update.DataType = entity.DataType;
|
|
update.Remark = entity.Remark;
|
|
entity.Update();
|
|
context.SaveChanges();
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除PLC控制器点位
|
|
/// </summary>
|
|
/// <param name="id"></param>
|
|
/// <returns></returns>
|
|
public Result DeleteDevicePoint(string id)
|
|
{
|
|
using (var context = new EFContext())
|
|
{
|
|
var result = new Result();
|
|
|
|
var entity = context.DevicePoints.Where(f => f.Id == id).FirstOrDefault();
|
|
if (entity == null)
|
|
{
|
|
result.Message = $"没有找到Id:【{id}】的数据";
|
|
return result;
|
|
}
|
|
|
|
entity.Delete();
|
|
context.SaveChanges();
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|