using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using SqlSugar;
|
|
namespace IStation.DAL
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public class MonitorRealRecord : CorpDAL<Entity.MonitorRealRecord>
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public override ConnectionConfig ConnectionConfig
|
{
|
get { return ConfigHelper.MonitorRecordConnectionConfig; }
|
}
|
|
#region 通过 MonitorPointID 获取
|
|
/// <summary>
|
/// 通过 MonitorPointID 获取某天的全部数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetByMonitorPointIDOfDay(long CorpID, long MonitorPointID, DateTime Day)
|
{
|
if (CorpID < 1)
|
return default;
|
if (MonitorPointID < 1)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.DataTime >= Day.Date && x.DataTime < Day.Date.AddDays(1))
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
}
|
}
|
|
/// <summary>
|
/// 通过 MonitorPointID 获取某天固定数量的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetFixedByMonitorPointIDOfDay(long CorpID, long MonitorPointID, DateTime Day, int Fixed)
|
{
|
if (CorpID < 1)
|
return default;
|
if (MonitorPointID < 1)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
var list = db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.DataTime >= Day.Date && x.DataTime < Day.Date.AddDays(1))
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
var group_list = list.GroupBy(x => x.MonitorPointID).ToList();
|
var fixed_list = group_list.SelectMany(x => GetFixedList(x.ToList(), Fixed)).OrderBy(x => x.DataTime).ToList();
|
return fixed_list;
|
}
|
}
|
|
/// <summary>
|
/// 通过 MonitorPointID 获取日期区间内的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetByMonitorPointIDOfDayRange(long CorpID, long MonitorPointID, DateTime StartDay, DateTime EndDay)
|
{
|
if (StartDay.Date > EndDay.Date)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.DataTime >= StartDay.Date && x.DataTime < EndDay.Date.AddDays(1))
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
}
|
}
|
|
/// <summary>
|
/// 通过 MonitorPointID 获取日期区间内固定数量的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetFixedByMonitorPointIDOfDayRange(long CorpID, long MonitorPointID, DateTime StartDay, DateTime EndDay, int Fixed)
|
{
|
if (StartDay.Date > EndDay.Date)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
var list = db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.DataTime >= StartDay.Date && x.DataTime < EndDay.Date.AddDays(1))
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
var group_list = list.GroupBy(x => x.MonitorPointID).ToList();
|
var fixed_list = group_list.SelectMany(x => GetFixedList(x.ToList(), Fixed)).OrderBy(x => x.DataTime).ToList();
|
return fixed_list;
|
}
|
}
|
|
/// <summary>
|
/// 通过 MonitorPointID 获取时间区间内的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetByMonitorPointIDOfTimeRange(long CorpID, long MonitorPointID, DateTime StartTime, DateTime EndTime)
|
{
|
if (StartTime > EndTime)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.DataTime >= StartTime && x.DataTime <= EndTime)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
}
|
}
|
|
/// <summary>
|
/// 通过 MonitorPointID 获取时间区间内固定数量的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetFixedByMonitorPointIDOfTimeRange(long CorpID, long MonitorPointID, DateTime StartTime, DateTime EndTime, int Fixed)
|
{
|
if (StartTime > EndTime)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
var list = db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.DataTime >= StartTime && x.DataTime <= EndTime)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
var group_list = list.GroupBy(x => x.MonitorPointID).ToList();
|
var fixed_list = group_list.SelectMany(x => GetFixedList(x.ToList(), Fixed)).OrderBy(x => x.DataTime).ToList();
|
return fixed_list;
|
}
|
}
|
|
#endregion
|
|
#region 通过 SignalID 获取
|
|
/// <summary>
|
/// 通过 SignalID 获取某一时间的数据
|
/// </summary>
|
public Entity.MonitorRealRecord GetBySignalIDOfDataTime(long CorpID, long MonitorPointID, long SignalID, DateTime DataTime)
|
{
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x=>x.DataTime> DataTime.AddDays(-1)&& x.DataTime<=DataTime)
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID)
|
.OrderBy(x => x.DataTime, OrderByType.Desc).First();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取某天的全部数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetBySignalIDOfDay(long CorpID, long MonitorPointID, long SignalID, DateTime Day)
|
{
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalIds 获取某天的全部数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetBySignalIdsOfDay(long CorpID, long MonitorPointID, IEnumerable<long> SignalIds, DateTime Day)
|
{
|
if (SignalIds == null || SignalIds.Count() < 1)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x=>x.DataTime>=Day.Date&&x.DataTime<Day.AddDays(1).Date)
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && SignalIds.Contains(x.SignalID))
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取某天固定数量的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetFixedBySignalIDOfDay(long CorpID, long MonitorPointID, long SignalID, DateTime Day, int Fixed)
|
{
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
var list = db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
return GetFixedList(list, Fixed);
|
}
|
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取某天的第一条数据
|
/// </summary>
|
public Entity.MonitorRealRecord GetFirstBySignalIDOfDay(long CorpID, long MonitorPointID, long SignalID, DateTime Day)
|
{
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).First();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取某天的最后一条数据
|
/// </summary>
|
public Entity.MonitorRealRecord GetLastBySignalIDOfDay(long CorpID, long MonitorPointID, long SignalID, DateTime Day)
|
{
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date)
|
.OrderBy(x => x.DataTime, OrderByType.Desc).First();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取日期区间内的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetBySignalIDOfDayRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartDay, DateTime EndDay)
|
{
|
if (StartDay.Date > EndDay.Date)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取日期区间内固定数量的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetFixedBySignalIDOfDayRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartDay, DateTime EndDay, int Fixed)
|
{
|
if (StartDay.Date > EndDay.Date)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
var list = db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
return GetFixedList(list, Fixed);
|
}
|
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取日期区间内的第一条数据
|
/// </summary>
|
public Entity.MonitorRealRecord GetFirstBySignalIDOfDayRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartDay, DateTime EndDay)
|
{
|
if (StartDay.Date > EndDay.Date)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).First();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取日期区间内的最后一条数据
|
/// </summary>
|
public Entity.MonitorRealRecord GetLastBySignalIDOfDayRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartDay, DateTime EndDay)
|
{
|
if (StartDay.Date > EndDay.Date)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date)
|
.OrderBy(x => x.DataTime, OrderByType.Desc).First();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取时间区间内的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetBySignalIDOfTimeRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartTime, DateTime EndTime)
|
{
|
if (StartTime > EndTime)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= StartTime && x.DataTime <= EndTime)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取时间区间内固定数量的数据
|
/// </summary>
|
public List<Entity.MonitorRealRecord> GetFixedBySignalIDOfTimeRange(long CorpID, long MonitorPointID, long SignalID, int Fixed, DateTime StartTime, DateTime EndTime)
|
{
|
if (StartTime > EndTime)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
var list = db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x=>x.DataTime>=StartTime&&x.DataTime<=EndTime)
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).ToList();
|
return GetFixedList(list, Fixed);
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取时间区间内的第一条数据
|
/// </summary>
|
public Entity.MonitorRealRecord GetFirstBySignalIDOfTimeRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartTime, DateTime EndTime)
|
{
|
if (StartTime > EndTime)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= StartTime && x.DataTime <= EndTime)
|
.OrderBy(x => x.DataTime, OrderByType.Asc).First();
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 获取时间区间内的最后一条数据
|
/// </summary>
|
public Entity.MonitorRealRecord GetLastBySignalIDOfTimeRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartTime, DateTime EndTime)
|
{
|
if (StartTime > EndTime)
|
return default;
|
using (var db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Queryable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID && x.DataTime >= StartTime && x.DataTime <= EndTime)
|
.OrderBy(x => x.DataTime, OrderByType.Desc).First();
|
}
|
}
|
|
#endregion
|
|
#region Method
|
|
//返回固定数量的列表(包含首位和末位、均匀分布)
|
private static List<T> GetFixedList<T>(List<T> s, int n)
|
{
|
if (s == null || s.Count < 1)
|
return s;
|
if (n <= 0)
|
return null;
|
if (n == 1)
|
return new List<T>() { s.First() };
|
if (s.Count <= n)
|
return s;
|
var r = new List<T>();
|
float step = (s.Count - 1f) / (n - 1f);
|
for (int i = 0; i < n; i++)
|
{
|
r.Add(s[(int)Math.Round(step * i)]);
|
}
|
return r;
|
}
|
|
#endregion
|
|
#region Update
|
|
/// <summary>
|
/// 更新
|
/// </summary>
|
public override bool Update(Entity.MonitorRealRecord entity)
|
{
|
if (entity == null)
|
return false;
|
using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Updateable(entity).IgnoreColumns(x => x.DataTime).Where(x=>x.ID==entity.ID).ExecuteCommand() > 0;
|
}
|
}
|
|
/// <summary>
|
/// 批量更新
|
/// </summary>
|
public override bool Updates(List<Entity.MonitorRealRecord> list)
|
{
|
if (list == null || list.Count < 1)
|
return false;
|
var corpIds = list.Select(x => x.CorpID).Distinct().ToList();
|
if (corpIds.Count() != 1 || corpIds[0] < 1)
|
return false;
|
using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Updateable(list).IgnoreColumns(x => x.DataTime).WhereColumns(it => new { it.ID }).ExecuteCommand() > 0;
|
}
|
}
|
|
#endregion
|
|
#region Delete
|
|
/// <summary>
|
/// 通过 SignalID 删除数据时间下的数据
|
/// </summary>
|
public bool DeleteBySignalIDOfDataTime(long CorpID,long MonitorPointID,long SignalID,DateTime DataTime)
|
{
|
using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Deleteable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID ==MonitorPointID&&x.SignalID==SignalID)
|
.Where(x=>x.DataTime>DataTime.AddSeconds(-1)&&x.DataTime<DataTime.AddSeconds(1))
|
.ExecuteCommand() > 0;
|
}
|
}
|
|
/// <summary>
|
/// 通过 SignalID 删除时间区间下的数据
|
/// </summary>
|
public bool DeleteBySignalIDOfTimeRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartTime, DateTime EndTime)
|
{
|
if (EndTime < StartTime)
|
return false;
|
using (SqlSugarClient db = new SqlSugarClient(ConnectionConfig))
|
{
|
return db.Deleteable<Entity.MonitorRealRecord>()
|
.Where(x => x.CorpID == CorpID && x.MonitorPointID == MonitorPointID && x.SignalID == SignalID)
|
.Where(x => x.DataTime > StartTime.AddSeconds(-1) && x.DataTime < EndTime.AddSeconds(1))
|
.ExecuteCommand() > 0;
|
}
|
}
|
|
#endregion
|
}
|
}
|