using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using IStation.RedisCache; namespace IStation.Service { /// /// 时监测记录 /// public partial class MonitorHourRecord { #region 最近一条记录 /// /// 获取最近一条记录 /// public Model.MonitorHourRecordPure GetLastRecord(long CorpID, long MonitorPointID, long SignalID) { var redisHelper = new MonitorRecordCacheHelper(); var record = redisHelper.GetLastHourRecord(CorpID, MonitorPointID, SignalID); return record; } /// /// 获取最近一条记录 /// public List GetLastRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) { if (SignalIds == null || SignalIds.Count() < 1) return default; var redisHelper = new MonitorRecordCacheHelper(); var records = redisHelper.GetLastHourRecord(CorpID, MonitorPointID, SignalIds); return records; } /// /// 获取最近一条记录 /// public List GetLastRecord(long CorpID, Dictionary dict) { var redisHelper = new MonitorRecordCacheHelper(); var records = redisHelper.GetLastHourRecord(CorpID, dict); return records; } /// /// 获取最近一条记录 /// public List GetLastRecord(long CorpID, long MonitorPointID) { var redisHelper = new MonitorRecordCacheHelper(); var records = redisHelper.GetLastHourRecord(CorpID, MonitorPointID); return records; } /// /// 获取最近一条记录 /// public List GetLastRecord(long CorpID, IEnumerable MonitorPointIds) { if (MonitorPointIds == null || MonitorPointIds.Count() < 1) return default; var redisHelper = new MonitorRecordCacheHelper(); var records = redisHelper.GetLastHourRecord(CorpID, MonitorPointIds); return records; } /// /// 获取最近一条正常记录 /// public Model.MonitorHourRecordPure GetLastNormalRecord(long CorpID, long MonitorPointID, long SignalID) { var redisHelper = new MonitorRecordCacheHelper(); var record = redisHelper.GetLastNormalHourRecord(CorpID, MonitorPointID, SignalID); return record; } /// /// 获取最近一条正常记录 /// public List GetLastNormalRecord(long CorpID, Dictionary dict) { if (dict == null || dict.Count < 1) return default; var redisHelper = new MonitorRecordCacheHelper(); var records = redisHelper.GetLastNormalHourRecord(CorpID, dict); return records; } /// /// 获取最近一条正常记录 /// public List GetLastNormalRecord(long CorpID, long MonitorPointID) { var redisHelper = new MonitorRecordCacheHelper(); var records = redisHelper.GetLastNormalHourRecord(CorpID, MonitorPointID); return records; } /// /// 获取最近一条正常记录 /// public List GetLastNormalRecord(long CorpID, IEnumerable MonitorPointIds) { if (MonitorPointIds == null || MonitorPointIds.Count() < 1) return default; var redisHelper = new MonitorRecordCacheHelper(); var records = redisHelper.GetLastNormalHourRecord(CorpID, MonitorPointIds); return records; } #endregion #region 条件查询 /// /// 通过 MonitorPointID 获取 /// public List GetByMonitorPointID(long CorpID, long MonitorPointID) { var dal = new DAL.MonitorHourRecord(); var entity_list = dal.GetByMonitorPointID(CorpID, MonitorPointID); var model_list = Entity2Models(entity_list); return model_list?.OrderBy(x => x.DataDay).ThenBy(x => x.DataHour).ThenBy(x=>x.DataTime).ToList(); } /// /// 通过 MonitorPointID 获取某天的数据 /// public List GetByMonitorPointIDOfDay(long CorpID, long MonitorPointID, DateTime Day) { var dal = new DAL.MonitorHourRecord(); var entity_list = dal.GetByMonitorPointIDOfDay(CorpID, MonitorPointID, Day.Date); var model_list = Entity2Models(entity_list); return model_list?.OrderBy(x => x.DataDay).ThenBy(x => x.DataHour).ThenBy(x => x.DataTime).ToList(); } /// /// 通过 MonitorPointID 获取日期区间内的数据 /// public List GetByMonitorPointIDOfDayRange(long CorpID, long MonitorPointID, DateTime StartDay, DateTime EndDay) { if (EndDay.Date < StartDay.Date) return default; var dal = new DAL.MonitorHourRecord(); var entity_list = dal.GetByMonitorPointIDOfDayRange(CorpID, MonitorPointID, StartDay.Date, EndDay.Date); var model_list = Entity2Models(entity_list); return model_list?.OrderBy(x => x.DataDay).ThenBy(x => x.DataHour).ThenBy(x => x.DataTime).ToList(); } /// /// 通过 MonitorPointID 获取区间内的数据 /// public List GetByMonitorPointIDOfHourRange(long CorpID, long MonitorPointID, DateTime StartDay, int StartHour, DateTime EndDay, int EndHour) { if (EndDay.Date < StartDay.Date) return default; var dal = new DAL.MonitorHourRecord(); var entity_list = dal.GetByMonitorPointIDOfHourRange(CorpID, MonitorPointID, StartDay.Date, StartHour, EndDay.Date, EndHour); var model_list = Entity2Models(entity_list); return model_list?.OrderBy(x => x.DataDay).ThenBy(x => x.DataHour).ThenBy(x => x.DataTime).ToList(); } /// /// 通过 SignalID 获取某时的数据 /// public Model.MonitorHourRecord GetBySignalIDOfHour(long CorpID, long MonitorPointID, long SignalID, DateTime DataDay, int DataHour) { var dal = new DAL.MonitorHourRecord(); var entity = dal.GetBySignalIDOfHour(CorpID,MonitorPointID,SignalID,DataDay,DataHour); var model=Entity2Model(entity); return model; } /// /// 通过 SignalID 获取时间区间内的数据 /// public List GetBySignalIDOfHourRange(long CorpID, long MonitorPointID, long SignalID, DateTime StartDay, int StartHour, DateTime EndDay, int EndHour) { if (EndDay.Date < StartDay.Date) return default; var dal = new DAL.MonitorHourRecord(); var entityList = dal.GetBySignalIDOfHourRange(CorpID, MonitorPointID, SignalID, StartDay.Date, StartHour, EndDay.Date, EndHour); var modelList = Entity2Models(entityList); return modelList; } /// /// 通过 SignalID 获取时间区间内的基础内容数据 /// public List GetBasicContentBySignalIDOfHourRange(long CorpID, long MonitorPointID,long SignalID, DateTime StartDay, int StartHour, DateTime EndDay, int EndHour) { if (EndDay.Date < StartDay.Date) return default; var dal = new DAL.MonitorHourRecord(); var entity_list = dal.GetBySignalIDOfHourRange(CorpID, MonitorPointID,SignalID, StartDay.Date, StartHour, EndDay.Date, EndHour); var model_list = Entity2BasicContents(entity_list); return model_list; } #endregion #region 插入 /// /// 插入一条 /// public bool Insert(Model.MonitorHourRecordPure model) { if (model == null) return default; var dal = new DAL.MonitorHourRecord(); var entity = Model2Entity(new Model.MonitorHourRecord(model)); var id = dal.Insert(entity); return id > 0; } /// /// 插入多条 /// public bool Inserts(List list) { if (list == null || list.Count() < 1) return default; var dal = new DAL.MonitorHourRecord(); var entity_list = Model2Entities(list.Select(x => new Model.MonitorHourRecord(x)).ToList()); var bol = dal.Inserts(entity_list); return bol; } /// /// 插入最近一条记录 /// public bool InsertLastRecord(Model.MonitorHourRecordPure model) { if (model == null) return default; var dal = new DAL.MonitorHourRecord(); var entity = Model2Entity(new Model.MonitorHourRecord(model)); var bol = dal.Insert(entity) > 0; if (bol) { var redisHelper = new MonitorRecordCacheHelper(); redisHelper.SetLastHourRecord(model); } return bol; } /// /// 插入最近多条记录 /// public bool InsertsLastRecord(List list) { if (list == null || list.Count() < 1) return default; var dal = new DAL.MonitorHourRecord(); var entity_list = Model2Entities(list.Select(x => new Model.MonitorHourRecord(x)).ToList()); var bol = dal.Inserts(entity_list); if (bol) { var redisHelper = new MonitorRecordCacheHelper(); redisHelper.SetLastHourRecord(list); } return bol; } /// /// 补录一条 /// public bool InsertSupplement(Model.MonitorHourRecordPure model) { if (model == null) return default; var dal = new DAL.MonitorHourRecord(); var entity = Model2Entity(new Model.MonitorHourRecord(model)); var id = dal.Insert(entity); return id>0; } /// /// 补录多条 /// public bool InsertsSupplement(List list) { if (list == null || list.Count() < 1) return default; var dal = new DAL.MonitorHourRecord(); var entity_list = Model2Entities(list.Select(x => new Model.MonitorHourRecord(x)).ToList()); var bol = dal.Inserts(entity_list); return bol; } /// /// 重录一条 /// public bool InsertAgain(Model.MonitorHourRecordPure model) { if (model == null) return false; var dal = new DAL.MonitorHourRecord(); var result = dal.DeleteBySignalIDOfHour(model.CorpID, model.MonitorPointID, model.SignalID, model.DataDay,model.DataHour); if (!result) { LogHelper.Info($"重录一条监测时记录中,CorpID:{model.CorpID},MonitorPointID:{model.MonitorPointID},SignalID:{model.SignalID},DataDay:{model.DataDay:yyyy-MM-dd},DataHour:{model.DataHour},未检索到已存在记录!"); } var entity = Model2Entity(new Model.MonitorHourRecord(model)); var id = dal.Insert(entity); return id > 0; } /// /// 重录多条 /// public bool InsertsAgain(List list) { if (list == null || list.Count < 1) return false; var corpIds = list.Select(x => x.CorpID).Distinct().ToList(); if (corpIds.Count > 1) { return default; } var groupList = list.GroupBy(x => new { x.CorpID, x.MonitorPointID, x.SignalID }).ToList(); var dal = new DAL.MonitorHourRecord(); foreach (var group in groupList) { var orderList = group.OrderBy(x => x.DataDay).ThenBy(x => x.DataHour).ToList(); var first = orderList.First(); var startDay = first.DataDay; var startHour = first.DataHour; var last = orderList.Last(); var endDay = last.DataDay; var endHour= last.DataHour; var result = dal.DeleteBySignalIDOfHourRange(group.Key.CorpID, group.Key.MonitorPointID, group.Key.SignalID, startDay,startHour,endDay,endHour); if (!result) { LogHelper.Info($"重录多条监测时记录中,CorpID:{group.Key.CorpID},MonitorPointID:{group.Key.MonitorPointID},SignalID:{group.Key.SignalID},StartDay:{startDay:yyyy-MM-dd},StartHour:{startHour}, EndDay:{endDay:yyyy-MM-dd},EndHour:{endHour},未检索到已存在记录!"); } } var entityList = Model2Entities(list.Select(x => new Model.MonitorHourRecord(x)).ToList()); var bol = dal.Inserts(entityList); return bol; } #endregion #region Update /// /// 更新一条 /// public bool Update(Model.MonitorHourRecord model) { if (model == null) return default; var dal = new DAL.MonitorHourRecord(); var entity = Model2Entity(model); var bol = dal.Update(entity); return bol; } /// /// 批量更新 /// public bool Updates(List list) { if (list == null || list.Count < 1) return default; var dal = new DAL.MonitorHourRecord(); var entityList = Model2Entities(list); var bol = dal.Updates(entityList); return bol; } #endregion } }