using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.RedisCache { /// /// 监测记录缓存辅助类 /// public class MonitorRecordCacheHelper { //监测记录 private const string _flag = "monitor-record"; //最后一条记录 private const string _lastRecord = "last-record"; //最后一条正常记录 private const string _lastNormalRecord = "last-normal-record"; //最后一条不正常记录 private const string _lastAbnormalRecord = "last-abnormal-record"; //Redis客户端辅助类对象 private readonly RedisClientHelper _redisClient = new RedisClientHelper(); //获取 RedisKey前缀 private static string GetRedisKeyPrefix(long CorpID, long MonitorPointID) { return $"{RedisKeyHelper.CreateKey(_flag)}:{CorpID}-{MonitorPointID}-"; } //创建RedisKey private static string CreateRedisKey(long CorpID, long MonitorPointID, long SignalID) { return $"{RedisKeyHelper.CreateKey(_flag)}:{CorpID}-{MonitorPointID}-{SignalID}"; } #region 记录(只允许获取) /// /// 获取最后一条记录 /// public Model.MonitorBasicRecord GetLastRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastRecord(CorpID, MonitorPointID, SignalID); } /// /// 获取最后一条记录 /// public List GetLastRecord(long CorpID,long MonitorPointID,IEnumerable SignalIds) { return GetLastRecord(CorpID, MonitorPointID,SignalIds); } /// /// 获取最后一条记录 /// public List GetLastRecord(long CorpID, Dictionary dict) { return GetLastRecord(CorpID, dict); } /// /// 获取最后一条记录 /// public List GetLastRecord(long CorpID, long MonitorPointID) { return GetLastRecord(CorpID, MonitorPointID); } /// /// 获取最后一条记录 /// public List GetLastRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastRecord(CorpID, MonitorPointIds); } /// /// 获取最后一条正常记录 /// public Model.MonitorBasicRecord GetLastNormalRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastNormalRecord(CorpID, MonitorPointID, SignalID); } /// /// 获取最后一条正常记录 /// public List GetLastNormalRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) { return GetLastNormalRecord(CorpID, MonitorPointID,SignalIds); } /// /// 获取最后一条正常记录 /// public List GetLastNormalRecord(long CorpID, Dictionary dict) { return GetLastNormalRecord(CorpID, dict); } /// /// 获取最后一条正常记录 /// public List GetLastNormalRecord(long CorpID, long MonitorPointID) { return GetLastNormalRecord(CorpID, MonitorPointID); } /// /// 获取最后一条正常记录 /// public List GetLastNormalRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastNormalRecord(CorpID,MonitorPointIds); } // /// 获取最后一条不正常记录 /// public Model.MonitorBasicRecord GetLastAbnormalRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastAbnormalRecord(CorpID, MonitorPointID, SignalID); } /// /// 获取最后一条不正常记录 /// public List GetLastAbnormalRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) { return GetLastAbnormalRecord(CorpID, MonitorPointID,SignalIds); } /// /// 获取最后一条不正常记录 /// public List GetLastAbnormalRecord(long CorpID, Dictionary dict) { return GetLastAbnormalRecord(CorpID, dict); } /// /// 获取最后一条不正常记录 /// public List GetLastAbnormalRecord(long CorpID, long MonitorPointID) { return GetLastAbnormalRecord(CorpID, MonitorPointID); } /// /// 获取最后一条不正常记录 /// public List GetLastAbnormalRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastAbnormalRecord(CorpID, MonitorPointIds); } #endregion #region 实时记录 /// /// 设置最近一条实时记录 /// public void SetLastRealRecord(Model.MonitorRealRecordPure model) { SetLastRecord(model); } /// /// 设置最近一条实时记录 /// public void SetLastRealRecord(IEnumerable list) { SetLastRecord(list); } /// /// 获取最后一条实时记录 /// public Model.MonitorRealRecordPure GetLastRealRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastRecord(CorpID, MonitorPointID, SignalID); } /// /// 获取最后一条实时记录 /// public List GetLastRealRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) { return GetLastRecord(CorpID, MonitorPointID, SignalIds); } /// /// 获取最后一条实时记录 /// public List GetLastRealRecord(long CorpID, Dictionary dict) { return GetLastRecord(CorpID,dict); } /// /// 获取最后一条实时记录 /// public List GetLastRealRecord(long CorpID, long MonitorPointID) { return GetLastRecord(CorpID,MonitorPointID); } /// /// 获取最后一条实时记录 /// public List GetLastRealRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastRecord(CorpID,MonitorPointIds); } /// /// 获取最后一条实时正常记录 /// public Model.MonitorRealRecordPure GetLastNormalRealRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastNormalRecord(CorpID, MonitorPointID, SignalID); } /// /// 获取最后一条实时正常记录 /// public List GetLastNormalRealRecord(long CorpID, Dictionary dict) { return GetLastNormalRecord(CorpID, dict); } /// /// 获取最后一条实时正常记录 /// public List GetLastNormalRealRecord(long CorpID, long MonitorPointID) { return GetLastNormalRecord(CorpID, MonitorPointID); } /// /// 获取最后一条实时正常记录 /// public List GetLastNormalRealRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastNormalRecord(CorpID, MonitorPointIds); } #endregion #region 时记录 /// /// 设置最近一条时记录 /// public void SetLastHourRecord(Model.MonitorHourRecordPure model) { SetLastRecord(model); } /// /// 设置最近一条时记录 /// public void SetLastHourRecord(IEnumerable list) { SetLastRecord(list); } /// /// 获取最后一条时记录 /// public Model.MonitorHourRecordPure GetLastHourRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条时记录 /// public List GetLastHourRecord(long CorpID, long MonitorPointID,IEnumerable SignalIds) { return GetLastRecord(CorpID, MonitorPointID,SignalIds); } /// ///获取最后一条时记录 /// public List GetLastHourRecord(long CorpID, Dictionary dict) { return GetLastRecord(CorpID, dict); } /// /// 获取最后一条时记录 /// public List GetLastHourRecord(long CorpID, long MonitorPointID) { return GetLastRecord(CorpID, MonitorPointID); } /// /// 获取最后一条时记录 /// public List GetLastHourRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastRecord(CorpID, MonitorPointIds); } /// /// 获取最后一条正常时记录 /// public Model.MonitorHourRecordPure GetLastNormalHourRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastNormalRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条正常时记录 /// public List GetLastNormalHourRecord(long CorpID, Dictionary dict) { return GetLastNormalRecord(CorpID, dict); } /// /// 获取最后一条正常时记录 /// public List GetLastNormalHourRecord(long CorpID, long MonitorPointID) { return GetLastNormalRecord(CorpID, MonitorPointID); } /// /// 获取最后一条正常时记录 /// public List GetLastNormalHourRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastNormalRecord(CorpID, MonitorPointIds); } #endregion #region 日记录 /// /// 设置最近一条日记录 /// public void SetLastDayRecord(Model.MonitorDayRecordPure model) { SetLastRecord(model); } /// /// 设置最近一条日记录 /// public void SetLastDayRecord(IEnumerable list) { SetLastRecord(list); } /// /// 获取最后一条日记录 /// public Model.MonitorDayRecordPure GetLastDayRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条日记录 /// public List GetLastDayRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) { return GetLastRecord(CorpID, MonitorPointID, SignalIds); } /// ///获取最后一条日记录 /// public List GetLastDayRecord(long CorpID, Dictionary dict) { return GetLastRecord(CorpID, dict); } /// /// 获取最后一条日记录 /// public List GetLastDayRecord(long CorpID, long MonitorPointID) { return GetLastRecord(CorpID, MonitorPointID); } /// /// 获取最后一条日记录 /// public List GetLastDayRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastRecord(CorpID, MonitorPointIds); } /// /// 获取最后一条正常日记录 /// public Model.MonitorDayRecordPure GetLastNormalDayRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastNormalRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条正常日记录 /// public List GetLastNormalDayRecord(long CorpID, Dictionary dict) { return GetLastNormalRecord(CorpID, dict); } /// /// 获取最后一条正常日记录 /// public List GetLastNormalDayRecord(long CorpID, long MonitorPointID) { return GetLastNormalRecord(CorpID, MonitorPointID); } /// /// 获取最后一条正常日记录 /// public List GetLastNormalDayRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastNormalRecord(CorpID, MonitorPointIds); } #endregion #region 周记录 /// /// 设置最近一条周记录 /// public void SetLastWeekRecord(Model.MonitorWeekRecordPure model) { SetLastRecord(model); } /// /// 设置最近一条周记录 /// public void SetLastWeekRecord(IEnumerable list) { SetLastRecord(list); } /// /// 获取最后一条周记录 /// public Model.MonitorWeekRecordPure GetLastWeekRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条周记录 /// public List GetLastWeekRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) { return GetLastRecord(CorpID, MonitorPointID, SignalIds); } /// ///获取最后一条周记录 /// public List GetLastWeekRecord(long CorpID, Dictionary dict) { return GetLastRecord(CorpID, dict); } /// /// 获取最后一条周记录 /// public List GetLastWeekRecord(long CorpID, long MonitorPointID) { return GetLastRecord(CorpID, MonitorPointID); } /// /// 获取最后一条周记录 /// public List GetLastWeekRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastRecord(CorpID, MonitorPointIds); } /// /// 获取最后一条正常周记录 /// public Model.MonitorWeekRecordPure GetLastNormalWeekRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastNormalRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条正常周记录 /// public List GetLastNormalWeekRecord(long CorpID, Dictionary dict) { return GetLastNormalRecord(CorpID, dict); } /// /// 获取最后一条正常周记录 /// public List GetLastNormalWeekRecord(long CorpID, long MonitorPointID) { return GetLastNormalRecord(CorpID, MonitorPointID); } /// /// 获取最后一条正常周记录 /// public List GetLastNormalWeekRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastNormalRecord(CorpID, MonitorPointIds); } #endregion #region 月记录 /// /// 设置最近一条月记录 /// public void SetLastMonthRecord(Model.MonitorMonthRecordPure model) { SetLastRecord(model); } /// /// 设置最近一条月记录 /// public void SetLastMonthRecord(IEnumerable list) { SetLastRecord(list); } /// /// 获取最后一条月记录 /// public Model.MonitorMonthRecordPure GetLastMonthRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条月记录 /// public List GetLastMonthRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) { return GetLastRecord(CorpID, MonitorPointID, SignalIds); } /// ///获取最后一条月记录 /// public List GetLastMonthRecord(long CorpID, Dictionary dict) { return GetLastRecord(CorpID, dict); } /// /// 获取最后一条月记录 /// public List GetLastMonthRecord(long CorpID, long MonitorPointID) { return GetLastRecord(CorpID, MonitorPointID); } /// /// 获取最后一条月记录 /// public List GetLastMonthRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastRecord(CorpID, MonitorPointIds); } /// /// 获取最后一条正常月记录 /// public Model.MonitorMonthRecordPure GetLastNormalMonthRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastNormalRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条正常月记录 /// public List GetLastNormalMonthRecord(long CorpID, Dictionary dict) { return GetLastNormalRecord(CorpID, dict); } /// /// 获取最后一条正常月记录 /// public List GetLastNormalMonthRecord(long CorpID, long MonitorPointID) { return GetLastNormalRecord(CorpID, MonitorPointID); } /// /// 获取最后一条正常月记录 /// public List GetLastNormalMonthRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastNormalRecord(CorpID, MonitorPointIds); } #endregion #region 年记录 /// /// 设置最近一条年记录 /// public void SetLastYearRecord(Model.MonitorYearRecordPure model) { SetLastRecord(model); } /// /// 设置最近一条年记录 /// public void SetLastYearRecord(IEnumerable list) { SetLastRecord(list); } /// /// 获取最后一条年记录 /// public Model.MonitorYearRecordPure GetLastYearRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条年记录 /// public List GetLastYearRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) { return GetLastRecord(CorpID, MonitorPointID, SignalIds); } /// ///获取最后一条年记录 /// public List GetLastYearRecord(long CorpID, Dictionary dict) { return GetLastRecord(CorpID, dict); } /// /// 获取最后一条年记录 /// public List GetLastYearRecord(long CorpID, long MonitorPointID) { return GetLastRecord(CorpID, MonitorPointID); } /// /// 获取最后一条年记录 /// public List GetLastYearRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastRecord(CorpID, MonitorPointIds); } /// /// 获取最后一条正常年记录 /// public Model.MonitorYearRecordPure GetLastNormalYearRecord(long CorpID, long MonitorPointID, long SignalID) { return GetLastNormalRecord(CorpID, MonitorPointID, SignalID); } /// ///获取最后一条正常年记录 /// public List GetLastNormalYearRecord(long CorpID, Dictionary dict) { return GetLastNormalRecord(CorpID, dict); } /// /// 获取最后一条正常年记录 /// public List GetLastNormalYearRecord(long CorpID, long MonitorPointID) { return GetLastNormalRecord(CorpID, MonitorPointID); } /// /// 获取最后一条正常年记录 /// public List GetLastNormalYearRecord(long CorpID, IEnumerable MonitorPointIds) { return GetLastNormalRecord(CorpID, MonitorPointIds); } #endregion #region 最后一条记录 /// /// 设置最后一条记录 /// public void SetLastRecord(T t) where T : Model.MonitorBasicRecord { if (t == null) return; var redisKey = CreateRedisKey(t.CorpID, t.MonitorPointID, t.SignalID); _redisClient.HashSetJosn(redisKey, _lastRecord, t); if (t.DataStatus != null && (t.DataStatus.Contains(MonitorRecord.Status_DataFormatError) || t.DataStatus.Contains(MonitorRecord.Status_ConvertFailed) || t.DataStatus.Contains(MonitorRecord.Status_FilterFailed))) { _redisClient.HashSetJosn(redisKey, _lastAbnormalRecord, t); } else { _redisClient.HashSetJosn(redisKey, _lastNormalRecord, t); } } /// /// 设置最后一条记录 /// public void SetLastRecord(IEnumerable list) where T : Model.MonitorBasicRecord { if (list == null || list.Count() < 1) return; foreach (var item in list) { SetLastRecord(item); } } /// /// 获取最后一条记录 /// public T GetLastRecord(long CorpID, long MonitorPointID, long SignalID) where T : Model.MonitorBasicRecord { var redisKey = CreateRedisKey(CorpID, MonitorPointID, SignalID); return _redisClient.HashGetJson(redisKey, _lastRecord); } /// /// 获取最后一条记录 /// public List GetLastRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) where T : Model.MonitorBasicRecord { if (SignalIds == null || SignalIds.Count() < 1) return default; return SignalIds.Select(x => GetLastRecord(CorpID, MonitorPointID, x)).Where(x => x != null).ToList(); } /// /// 获取最后一条记录 /// public List GetLastRecord(long CorpID, Dictionary dict) where T : Model.MonitorBasicRecord { if (dict == null || dict.Count < 1) return default; return dict.Select(x => GetLastRecord(CorpID, x.Key, x.Value)).Where(x => x != null).ToList(); } /// /// 获取最后一条记录 /// public List GetLastRecord(long CorpID, long MonitorPointID) where T : Model.MonitorBasicRecord { var key = GetRedisKeyPrefix(CorpID, MonitorPointID); var allKeys = _redisClient.AllKeyStartWidth(key); if (allKeys == null || allKeys.Count < 1) return default; var vm_list = new List(); foreach (var redisKey in allKeys) { var vm = _redisClient.HashGetJson(redisKey, _lastRecord); if (vm != null) { vm_list.Add(vm); } } return vm_list; } /// /// 获取最后一条记录 /// public List GetLastRecord(long CorpID, IEnumerable MonitorPointIds) where T : Model.MonitorBasicRecord { if (MonitorPointIds == null || MonitorPointIds.Count() < 1) return default; var vm_list = new List(); foreach (var MonitorPointID in MonitorPointIds) { var vm = GetLastRecord(CorpID, MonitorPointID); if (vm != null && vm.Count > 0) { vm_list.AddRange(vm); } } return vm_list; } /// /// 获取最后一条正常记录 /// public T GetLastNormalRecord(long CorpID, long MonitorPointID, long SignalID) where T : Model.MonitorBasicRecord { var redisKey = CreateRedisKey(CorpID, MonitorPointID, SignalID); return _redisClient.HashGetJson(redisKey, _lastNormalRecord); } /// /// 获取最后一条正常记录 /// public List GetLastNormalRecord(long CorpID, long MonitorPointID,IEnumerable SignalIds) where T : Model.MonitorBasicRecord { if (SignalIds == null || SignalIds.Count() < 1) return default; return SignalIds.Select(x => GetLastNormalRecord(CorpID, MonitorPointID, x)).Where(x => x != null).ToList(); } /// /// 获取最后一条正常记录 /// public List GetLastNormalRecord(long CorpID, Dictionary dict) where T : Model.MonitorBasicRecord { if (dict == null || dict.Count < 1) return default; return dict.Select(x => GetLastNormalRecord(CorpID, x.Key, x.Value)).Where(x => x != null).ToList(); } /// /// 获取最后一条正常记录 /// public List GetLastNormalRecord(long CorpID, long MonitorPointID) where T : Model.MonitorBasicRecord { var key = GetRedisKeyPrefix(CorpID, MonitorPointID); var allKeys = _redisClient.AllKeyStartWidth(key); if (allKeys == null || allKeys.Count < 1) return default; var vm_list = new List(); foreach (var redisKey in allKeys) { var vm = _redisClient.HashGetJson(redisKey, _lastNormalRecord); if (vm != null) { vm_list.Add(vm); } } return vm_list; } /// /// 获取最后一条正常记录 /// public List GetLastNormalRecord(long CorpID, IEnumerable MonitorPointIds) where T : Model.MonitorBasicRecord { if (MonitorPointIds == null || MonitorPointIds.Count() < 1) return default; var vm_list = new List(); foreach (var MonitorPointID in MonitorPointIds) { var vm = GetLastNormalRecord(CorpID, MonitorPointID); if (vm != null && vm.Count > 0) { vm_list.AddRange(vm); } } return vm_list; } /// /// 获取最后一条不正常记录 /// public T GetLastAbnormalRecord(long CorpID, long MonitorPointID, long SignalID) where T : Model.MonitorBasicRecord { var redisKey = CreateRedisKey(CorpID, MonitorPointID, SignalID); return _redisClient.HashGetJson(redisKey, _lastAbnormalRecord); } /// /// 获取最后一条不正常记录 /// public List GetLastAbnormalRecord(long CorpID, long MonitorPointID, IEnumerable SignalIds) where T : Model.MonitorBasicRecord { if (SignalIds == null || SignalIds.Count() < 1) return default; return SignalIds.Select(x => GetLastAbnormalRecord(CorpID, MonitorPointID, x)).Where(x => x != null).ToList(); } /// /// 获取最后一条不正常记录 /// public List GetLastAbnormalRecord(long CorpID, Dictionary dict) where T : Model.MonitorBasicRecord { if (dict == null || dict.Count < 1) return default; return dict.Select(x => GetLastAbnormalRecord(CorpID, x.Key, x.Value)).Where(x => x != null).ToList(); } /// /// 获取最后一条不正常记录 /// public List GetLastAbnormalRecord(long CorpID, long MonitorPointID) where T : Model.MonitorBasicRecord { var key = GetRedisKeyPrefix(CorpID, MonitorPointID); var allKeys = _redisClient.AllKeyStartWidth(key); if (allKeys == null || allKeys.Count < 1) return default; var vm_list = new List(); foreach (var redisKey in allKeys) { var vm = _redisClient.HashGetJson(redisKey, _lastAbnormalRecord); if (vm != null) { vm_list.Add(vm); } } return vm_list; } /// /// 获取最后一条不正常记录 /// public List GetLastAbnormalRecord(long CorpID, IEnumerable MonitorPointIds) where T : Model.MonitorBasicRecord { if (MonitorPointIds == null || MonitorPointIds.Count() < 1) return default; var vm_list = new List(); foreach (var MonitorPointID in MonitorPointIds) { var vm = GetLastAbnormalRecord(CorpID, MonitorPointID); if (vm != null && vm.Count > 0) { vm_list.AddRange(vm); } } return vm_list; } #endregion } }