namespace Yw.DAL.PostgreSql
{
///
/// 运行实时记录
///
public class RunRealRecord : IRunRealRecord
{
///
///
///
public ConnectionConfig ConnectionConfig
{
get { return ConfigHelper.PostgreSqlRecordConnectionConfig; }
}
#region 常规获取
///
/// 获取最近几条列表
///
public List GetLastList(DateTime? StartTime, DateTime? EndTime, int Number = 1, bool? Run = null)
{
if (StartTime.HasValue && EndTime.HasValue)
{
if (StartTime.Value > EndTime.Value)
{
return default;
}
}
if (Number < 1)
{
Number = 1;
}
var exp = Expressionable.Create();
exp.AndIF(StartTime.HasValue, x => x.DataTime >= StartTime.Value);
exp.AndIF(EndTime.HasValue, x => x.DataTime <= EndTime.Value);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Desc)
.Take(Number).ToList();
}
}
///
/// 获取某日的最近几条数据
///
public List GetLastListByDay(DateTime Day, int Number = 1, bool? Run = null)
{
if (Number < 1)
{
Number = 1;
}
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Desc)
.Take(Number).ToList();
}
}
///
/// 获取日期区间的最近几条数据
///
public List GetLastListByDayRange(DateTime StartDay, DateTime EndDay, int Number = 1, bool? Run = null)
{
if (StartDay.Date > EndDay.Date)
{
return default;
}
if (Number < 1)
{
Number = 1;
}
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Desc)
.Take(Number).ToList();
}
}
///
/// 获取时间区间的最近几条数据
///
public List GetLastListByTimeRange(DateTime StartTime, DateTime EndTime, int Number = 1, bool? Run = null)
{
if (StartTime > EndTime)
{
return default;
}
if (Number < 1)
{
Number = 1;
}
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= StartTime && x.DataTime <= EndTime);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Desc)
.Take(Number).ToList();
}
}
///
/// 获取
///
public List Get(DateTime? StartTime, DateTime? EndTime, bool? Run = null)
{
if (StartTime.HasValue && EndTime.HasValue)
{
if (StartTime.Value > EndTime.Value)
{
return default;
}
}
var exp = Expressionable.Create();
exp.AndIF(StartTime.HasValue, x => x.DataTime >= StartTime.Value);
exp.AndIF(EndTime.HasValue, x => x.DataTime <= EndTime.Value);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 获取某日的数据
///
public List GetByDay(DateTime Day, bool? Run = null)
{
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 获取日期区间内的数据
///
public List GetByDayRange(DateTime StartDay, DateTime EndDay, bool? Run = null)
{
if (StartDay.Date > EndDay.Date)
{
return default;
}
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 获取时间区间的数据
///
public List GetByTimeRange(DateTime StartTime, DateTime EndTime, bool? Run = null)
{
if (StartTime > EndTime)
{
return default;
}
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= StartTime && x.DataTime <= EndTime);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 获取分页列表
///
public List GetPageList(DateTime? StartTime, DateTime? EndTime, bool? Run, int PageIndex, int PageSize, ref int Total)
{
if (StartTime.HasValue && EndTime.HasValue)
{
if (StartTime.Value > EndTime.Value)
{
return default;
}
}
var exp = Expressionable.Create();
exp.AndIF(StartTime.HasValue, x => x.DataTime >= StartTime.Value);
exp.AndIF(EndTime.HasValue, x => x.DataTime <= EndTime.Value);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Desc)
.ToPageList(PageIndex, PageSize, ref Total);
}
}
#endregion
#region 通过 ObjectType 和 ObjectID 获取
///
/// 通过 ObjectType 和 ObjectID 获取最近几条记录
///
public List GetLastListByObjectTypeAndObjectID(string ObjectType, long ObjectID, int Number = 1, bool? Run = null)
{
if (Number < 1)
{
Number = 1;
}
var exp = Expressionable.Create();
exp.And(x => x.ObjectType == ObjectType);
exp.And(x => x.ObjectID == ObjectID);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Desc)
.Take(Number).ToList();
}
}
///
/// 通过 ObjectType 和 ObjectID 获取
///
public List GetByObjectTypeAndObjectID(string ObjectType, long ObjectID, DateTime? StartTime, DateTime? EndTime, bool? Run = null)
{
if (StartTime.HasValue && EndTime.HasValue)
{
if (StartTime.Value > EndTime.Value)
{
return default;
}
}
var exp = Expressionable.Create();
exp.AndIF(StartTime.HasValue, x => x.DataTime >= StartTime.Value);
exp.AndIF(EndTime.HasValue, x => x.DataTime <= EndTime.Value);
exp.And(x => x.ObjectType == ObjectType);
exp.And(x => x.ObjectID == ObjectID);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 通过 ObjectType 和 ObjectID 获取某日的数据
///
public List GetByObjectTypeAndObjectIDOfDay(string ObjectType, long ObjectID, DateTime Day, bool? Run = null)
{
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= Day.Date && x.DataTime < Day.AddDays(1).Date);
exp.And(x => x.ObjectType == ObjectType);
exp.And(x => x.ObjectID == ObjectID);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 通过 ObjectType 和 ObjectID 获取日期区间内的数据
///
public List GetByObjectTypeAndObjectIDOfDayRange(string ObjectType, long ObjectID, DateTime StartDay, DateTime EndDay, bool? Run = null)
{
if (StartDay.Date > EndDay.Date)
{
return default;
}
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= StartDay.Date && x.DataTime < EndDay.AddDays(1).Date);
exp.And(x => x.ObjectType == ObjectType);
exp.And(x => x.ObjectID == ObjectID);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 通过 ObjectType 和 ObjectID 获取时间区间内的数据
///
public List GetByObjectTypeAndObjectIDOfTimeRange(string ObjectType, long ObjectID, DateTime StartTime, DateTime EndTime, bool? Run = null)
{
if (StartTime > EndTime)
{
return default;
}
var exp = Expressionable.Create();
exp.And(x => x.DataTime >= StartTime && x.DataTime <= EndTime);
exp.And(x => x.ObjectType == ObjectType);
exp.And(x => x.ObjectID == ObjectID);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Asc)
.ToList();
}
}
///
/// 通过 ObjectType 和 ObjectID 获取分页列表
///
public List GetPageListByObjectTypeAndObjectID(string ObjectType, long ObjectID, DateTime? StartTime, DateTime? EndTime, bool? Run, int PageIndex, int PageSize, ref int Total)
{
if (StartTime.HasValue && EndTime.HasValue)
{
if (StartTime.Value > EndTime.Value)
{
return default;
}
}
var exp = Expressionable.Create();
exp.AndIF(StartTime.HasValue, x => x.DataTime >= StartTime.Value);
exp.AndIF(EndTime.HasValue, x => x.DataTime <= EndTime.Value);
exp.And(x => x.ObjectType == ObjectType);
exp.And(x => x.ObjectID == ObjectID);
exp.AndIF(Run.HasValue && Run.Value, x => x.RSa == RunStatus.Run);
exp.AndIF(Run.HasValue && !Run.Value, x => x.RSa == RunStatus.Stop);
using (var db = new SqlSugarClient(ConnectionConfig))
{
return db.Queryable()
.Where(exp.ToExpression())
.OrderBy(x => x.DataTime, OrderByType.Desc)
.ToPageList(PageIndex, PageSize, ref Total);
}
}
#endregion
#region InsertOrUpdate
///
/// 插入
///
public bool InsertOrUpdate(Entity.RunRealRecord 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 run_real_record");
sb.AppendLine($" VALUES(@objecttype,@objectid,@datatime,@rsa,@continueruntime,@totalruntime,@boottimes,@analystatus,@analyinfo)");
sb.AppendLine("ON CONFLICT(objecttype, objectid, datatime) DO UPDATE");
sb.AppendLine("SET rsa = excluded.rsa,");
sb.AppendLine("continueruntime = excluded.continueruntime,");
sb.AppendLine("totalruntime = excluded.totalruntime,");
sb.AppendLine("boottimes = excluded.boottimes,");
sb.AppendLine("analystatus = excluded.analystatus,");
sb.AppendLine("analyinfo = excluded.analyinfo;");
return sb.ToString();
}
//创建参数
private List CreateParameters(Entity.RunRealRecord entity)
{
var list = new List();
list.Add(new SugarParameter("@objecttype", entity.ObjectType));
list.Add(new SugarParameter("@objectid", entity.ObjectID));
list.Add(new SugarParameter("@datatime", entity.DataTime));
list.Add(new SugarParameter("@rsa", entity.RSa));
list.Add(new SugarParameter("@continueruntime", entity.ContinueRunTime));
list.Add(new SugarParameter("@totalruntime", entity.TotalRunTime));
list.Add(new SugarParameter("@boottimes", entity.BootTimes));
list.Add(new SugarParameter("@analystatus", entity.AnalyStatus));
list.Add(new SugarParameter("@analyinfo", entity.AnalyInfo));
return list;
}
#endregion
}
}