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 } }