namespace IStation.DAL.PostgreSql
{
///
///
///
public class MonitorRecord : IMonitorRecord
{
///
///
///
public ConnectionConfig ConnectionConfig
{
get { return ConfigHelper.PostgreSqlConnectionConfig; }
}
#region Query
///
/// 查询时间区间内的数据
///
public List GetByTimeRange(DateTime StartTime, DateTime EndTime)
{
if (StartTime > EndTime)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime > StartTime.AddSeconds(-1) && x.DataTime < EndTime.AddSeconds(1))
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 查询接收时间区间内的数据
///
public List GetByReceiptTimeRange(DateTime StartTime, DateTime EndTime)
{
if (StartTime > EndTime)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime > StartTime.AddSeconds(-1) && x.DataTime < EndTime.AddSeconds(1))
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
#region 时间区间
///
/// 通过 DataCode 查询时间区间内的数据
///
public List GetByDataCodeOfTimeRange(string DataCode, DateTime StartTime, DateTime EndTime)
{
if (StartTime > EndTime)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime > StartTime.AddSeconds(-1) && x.DataTime < EndTime.AddSeconds(1))
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 通过 DataCode 查询时间区间内的第一条数据
///
public Entity.MonitorRecord GetFirstByDataCodeOfTimeRange(string DataCode, DateTime StartTime, DateTime EndTime)
{
if (StartTime > EndTime)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime > StartTime.AddSeconds(-1) && x.DataTime < EndTime.AddSeconds(1))
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.First();
}
}
///
/// 通过 DataCode 查询时间区间内的最后一条数据
///
public Entity.MonitorRecord GetLastByDataCodeOfTimeRange(string DataCode, DateTime StartTime, DateTime EndTime)
{
if (StartTime > EndTime)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime > StartTime.AddSeconds(-1) && x.DataTime < EndTime.AddSeconds(1))
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Desc)
.First();
}
}
///
/// 通过 DataCode 查询时间区间内受限的数据
///
public List GetLimitByDataCodeOfTimeRange(string DataCode, DateTime StartTime, DateTime EndTime, int Limit)
{
if (StartTime > EndTime)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
var list = db.Queryable()
.Where(x => x.DataTime > StartTime.AddSeconds(-1) && x.DataTime < EndTime.AddSeconds(1))
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
return list?.ToLimitList(Limit);
}
}
#endregion
#region 日期区间
///
/// 通过 DataCode 查询日期区间内的数据
///
public List GetByDataCodeOfDayRange(string DataCode, DateTime StartDay, DateTime EndDay)
{
if (StartDay.Date > EndDay.Date)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date)
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 通过 DataCode 查询日期区间内的第一条数据
///
public Entity.MonitorRecord GetFirstByDataCodeOfDayRange(string DataCode, DateTime StartDay, DateTime EndDay)
{
if (StartDay.Date > EndDay.Date)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date)
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.First();
}
}
///
/// 通过 DataCode 查询日期区间内的最后一条数据
///
public Entity.MonitorRecord GetLastByDataCodeOfDayRange(string DataCode, DateTime StartDay, DateTime EndDay)
{
if (StartDay.Date > EndDay.Date)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date)
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Desc)
.First();
}
}
///
/// 通过 DataCode 查询日期区间内受限的数据
///
public List GetLimitByDataCodeOfDayRange(string DataCode, DateTime StartDay, DateTime EndDay, int Limit)
{
if (StartDay.Date > EndDay.Date)
return default;
using (var db = new SqlSugarClient(ConnectionConfig))
{
var list = db.Queryable()
.Where(x => x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date)
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
return list?.ToLimitList(Limit);
}
}
#endregion
#region 日期
///
/// 通过 DataCode 获取某日的数据
///
public List GetByDataCodeOfDay(string DataCode, DateTime Day)
{
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date)
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 通过 DataCode 获取某日的第一条数据
///
public Entity.MonitorRecord GetFirstByDataCodeOfDay(string DataCode, DateTime Day)
{
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date)
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.First();
}
}
///
/// 通过 DataCode 获取某日的最后一条数据
///
public Entity.MonitorRecord GetLastByDataCodeOfDay(string DataCode, DateTime Day)
{
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date)
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Desc)
.First();
}
}
///
/// 通过 DataCode 获取某日受限的数据
///
public List GetLimitByDataCodeOfDay(string DataCode, DateTime Day, int Limit)
{
using (var db = new SqlSugarClient(ConnectionConfig))
{
var list = db.Queryable()
.Where(x => x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date)
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
return list?.ToLimitList(Limit);
}
}
#endregion
#region 时间
///
/// 通过时间获取
///
public Entity.MonitorRecord GetByDataCodeOfTime(string DataCode, DateTime Time)
{
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(x => x.DataTime > Time.AddSeconds(-1) && x.DataTime < Time.AddSeconds(1))
.Where(x => x.DataCode == DataCode)
.OrderBy(x => x.DataTime, OrderByType.Asc)
.First();
}
}
#endregion
#endregion
#region InsertOrUpdate
///
/// 插入
///
public bool InsertOrUpdate(Entity.MonitorRecord entity)
{
if (entity == null)
return false;
using (var db = new SqlSugarClient(ConnectionConfig))
{
var sql = CreateSql();
var paras = CreateParameters(entity);
return db.Ado.ExecuteCommand(sql, paras) > 0;
}
}
///
/// 批量插入
///
public bool InsertOrUpdate(List list)
{
if (list == null || list.Count < 1)
return false;
using (var db = new SqlSugarClient(ConnectionConfig))
{
try
{
db.Ado.BeginTran();
var sql = CreateSql();
foreach (var item in list)
{
var paras = CreateParameters(item);
var bol = db.Ado.ExecuteCommand(sql, paras) > 0;
if (!bol)
{
db.Ado.RollbackTran();
return false;
}
}
db.Ado.CommitTran();
return true;
}
catch
{
db.Ado.RollbackTran();
throw;
}
}
}
//创建sql
private string CreateSql()
{
var sb = new StringBuilder();
sb.AppendLine("INSERT INTO MonitorRecord");
sb.AppendLine($" VALUES(@DataCode,@DataTime,@DataValue,@ReceiptTime)");
sb.AppendLine("ON CONFLICT(DataCode, DataTime, ReceiptTime) DO UPDATE");
sb.AppendLine("SET DataValue = excluded.DataValue;");
return sb.ToString();
}
//创建参数
private List CreateParameters(Entity.MonitorRecord entity)
{
var list = new List();
list.Add(new SugarParameter("@DataCode", entity.DataCode));
list.Add(new SugarParameter("@DataTime", entity.DataTime));
list.Add(new SugarParameter("@DataValue", entity.DataValue));
list.Add(new SugarParameter("@ReceiptTime", entity.ReceiptTime));
return list;
}
#endregion
}
}