using IStation.Untity; using System.Collections.Generic; using System.Linq; namespace IStation.BLL { /// /// 测点 /// public partial class MonitorPoint { private readonly DAL.MonitorPoint _dal = new DAL.MonitorPoint(); #region Cache // 获取缓存 private List GetCache() { return CacheHelper.GetSet(SettingsD.Project.ID, () => { var entities = _dal.GetAll(); var models = Entity2Models(entities); if (models == null) { models = new List(); } return models; }, ConfigHelper.CacheKeepTime, ConfigHelper.CacheRandomTime); } // 更新缓存 private void UpdateCache(long id) { if (id < 1) return; var entities = _dal.GetByID(id); var models = Entity2Model(entities); var all = GetCache(); var model = all.Find(x => x.ID == id); if (model == null) { all.Add(models); } else { model.Reset(models); } } // 更新缓存 private void UpdateCache(List ids) { if (ids == null || ids.Count() < 1) return; var entities = _dal.GetByIds(ids); var models = Entity2Models(entities); var all = GetCache(); all.RemoveAll(x => ids.Contains(x.ID)); if (models != null && models.Count > 0) { all.AddRange(models); } } // 移除缓存 private void RemoveCache(long id) { if (id < 1) return; var all = GetCache(); all.RemoveAll(x => x.ID == id); } // 移除缓存 private void RemoveCache(List ids) { if (ids == null || ids.Count() < 1) return; var all = GetCache(); all.RemoveAll(x => ids.Contains(x.ID)); } #endregion #region Get /// /// 查询全部 /// public List GetAll() { var all = GetCache(); return all.ToList(); } /// /// 根据 ID查询 /// public Model.MonitorPoint GetByID(long id) { var all = GetAll(); return all.Find(x => x.ID == id); } /// /// 根据 Ids 查询 /// public List GetByIds(List ids) { if (ids == null || ids.Count() < 1) return default; var all = GetAll(); return all.Where(x => ids.Contains(x.ID)).ToList(); } /// /// 根据 BelongType 和 BelongID 查询 /// public List GetByBelongTypeAndBelongID(string belongType, long belongId) { var all = GetAll(); return all.Where(x => x.BelongType == belongType && x.BelongID == belongId).OrderBy(x => x.SortCode).ToList(); } /// /// 根据 BelongType 和 BelongIds 查询 /// public List GetByBelongTypeAndBelongIds(string belongType, List belongIds) { if (belongIds == null || belongIds.Count() < 1) return default; var all = GetAll(); return all.Where(x => x.BelongType == belongType && belongIds.Contains(x.BelongID)).OrderBy(x => x.SortCode).ToList(); } /// /// 根据 BelongType 和 BelongID 和 GroupID 查询 /// public List GetByBelongTypeAndBelongIDAndGroupID(string belongType, long belongId, long groupId) { var all = GetAll(); return all.Where(x => x.BelongType == belongType && x.BelongID == belongId && x.GroupID == groupId).OrderBy(x => x.SortCode).ToList(); } #endregion #region Get MonitorPointExSignal /// /// 根据 id 查询 /// public Model.MonitorPointExSignal GetExSignalByID(long id) { var monitor = GetByID(id); if (monitor == null) return default; var signal = new BLL.Signal().GetByMonitorPointID(id); if (signal == null || signal == null) return default; return new Model.MonitorPointExSignal(monitor, signal); } /// /// 根据 ids 查询 /// public List GetExSignalByIds(List ids) { if (ids == null || ids.Count() < 1) return default; var monitorPoints = GetByIds(ids); if (monitorPoints == null || monitorPoints.Count < 1) return default; var signals = new BLL.Signal().GetByMonitorPointIds(ids); if (signals == null || signals.Count < 1) return default; return (from x in monitorPoints join y in signals on x.ID equals y.MonitorPointID into data from y2 in data.DefaultIfEmpty() select new Model.MonitorPointExSignal(x, y2))?.OrderBy(x => x.SortCode).ToList(); } /// /// 根据 BelongType BelongID 查询 /// public List GetExSignalByBelongTypeAndBelongID(string belongType, long belongId) { var monitorPoints = GetByBelongTypeAndBelongID(belongType, belongId); if (monitorPoints == null || monitorPoints.Count < 1) return default; var ids = monitorPoints.Select(x => x.ID).ToList(); var signals = new BLL.Signal().GetByMonitorPointIds(ids); if (signals == null || signals.Count < 1) return default; return (from x in monitorPoints join y in signals on x.ID equals y.MonitorPointID into data from y2 in data.DefaultIfEmpty() select new Model.MonitorPointExSignal(x, y2))?.OrderBy(x => x.SortCode).ToList(); } /// /// 根据 BelongType BelongID GroupID 查询 /// public List GetExSignalByBelongTypeAndBelongIDAndGroupID(string belongType, long belongId, long groupId) { var monitorPoints = GetByBelongTypeAndBelongIDAndGroupID(belongType, belongId, groupId); if (monitorPoints == null || monitorPoints.Count < 1) return default; var ids = monitorPoints.Select(x => x.ID).ToList(); var signals = new BLL.Signal().GetByMonitorPointIds(ids); if (signals == null || signals.Count < 1) return default; return (from x in monitorPoints join y in signals on x.ID equals y.MonitorPointID into data from y2 in data.DefaultIfEmpty() select new Model.MonitorPointExSignal(x, y2))?.OrderBy(x => x.SortCode).ToList(); } #endregion #region Get MonitorPointExSignalWithSignalType /// /// 根据 ID 查询 /// public List GetAllExSignalWithSignalType() { var monitorPoints = GetAll(); if (monitorPoints == null || monitorPoints.Count < 1) return default; var ids = monitorPoints.Select(x => x.ID).ToList(); var signalExSignalTypes = new BLL.Signal().GetExSignalTypeByMonitorPointIds(ids); if (signalExSignalTypes == null) return default; return (from x in monitorPoints join y in signalExSignalTypes on x.ID equals y.MonitorPointID into data from y2 in data.DefaultIfEmpty() select new Model.MonitorPointExSignalWithSignalType(x, y2))?.OrderBy(x => x.SortCode).ToList(); } /// /// 根据 ID 查询 /// public Model.MonitorPointExSignalWithSignalType GetExSignalWithSignalTypeByID(long id) { var monitorPoint = GetByID(id); if (monitorPoint == null) return default; var signalExSignalType = new BLL.Signal().GetExSignalTypeByMonitorPointID(monitorPoint.ID); if (signalExSignalType == null) return default; return new Model.MonitorPointExSignalWithSignalType(monitorPoint, signalExSignalType); } /// /// 根据 Ids 查询 /// public List GetExSignalWithSignalTypeByIds(List ids) { if (ids == null || ids.Count() < 1) return default; var monitorPoints = GetByIds(ids); if (monitorPoints == null || monitorPoints.Count < 1) return default; var signalExSignalTypes = new BLL.Signal().GetExSignalTypeByMonitorPointIds(ids); if (signalExSignalTypes == null || signalExSignalTypes.Count < 1) return default; return (from x in monitorPoints join y in signalExSignalTypes on x.ID equals y.MonitorPointID into data from y2 in data.DefaultIfEmpty() select new Model.MonitorPointExSignalWithSignalType(x, y2))?.OrderBy(x => x.SortCode).ToList(); } /// /// 根据 BelongType BelongID 查询 /// public List GetExSignalWithSignalTypeByBelongTypeAndBelongID(string belongType, long belongId) { var monitorPoints = GetByBelongTypeAndBelongID(belongType, belongId); if (monitorPoints == null || monitorPoints.Count < 1) return default; var ids = monitorPoints.Select(x => x.ID).ToList(); var signalExSignalTypes = new BLL.Signal().GetExSignalTypeByMonitorPointIds(ids); if (signalExSignalTypes == null || signalExSignalTypes.Count < 1) return default; return (from x in monitorPoints join y in signalExSignalTypes on x.ID equals y.MonitorPointID into data from y2 in data.DefaultIfEmpty() select new Model.MonitorPointExSignalWithSignalType(x, y2))?.OrderBy(x => x.SortCode).ToList(); } /// /// 根据 BelongType BelongID GroupID 查询 /// public List GetExSignalWithSignalTypeByBelongTypeAndBelongIDAndGroupID(string belongType, long belongId, long groupId) { var monitorPoints = GetByBelongTypeAndBelongIDAndGroupID(belongType, belongId, groupId); if (monitorPoints == null || monitorPoints.Count < 1) return default; var ids = monitorPoints.Select(x => x.ID).ToList(); var signalExSignalTypes = new BLL.Signal().GetExSignalTypeByMonitorPointIds(ids); if (signalExSignalTypes == null || signalExSignalTypes.Count < 1) return default; return (from x in monitorPoints join y in signalExSignalTypes on x.ID equals y.MonitorPointID into data from y2 in data.DefaultIfEmpty() select new Model.MonitorPointExSignalWithSignalType(x, y2))?.OrderBy(x => x.SortCode).ToList(); } #endregion #region Insert /// /// 插入 /// public long Insert(Model.MonitorPoint model) { if (model == null) return default; var entity = Model2Entity(model); var ID = _dal.Insert(entity); if (ID > 0) { UpdateCache(ID); } return ID; } /// /// 插入 /// public long Insert(Model.MonitorPointExSignal model) { if (model == null) return default; var entity = Model2Entity(model.GetMonitorPoint()); var id = _dal.Insert(entity); if (id < 1) return id; if (id > 0) { var signal = model.GetSignal(); signal.MonitorPointID = id; var signalId = new Signal().Insert(signal); if (signalId < 1) { _dal.DeleteByID(id); return default; } UpdateCache(id); } return id; } /// /// 批量插入 /// public bool Inserts(List models) { if (models == null || models.Count() < 1) return default; var entities = Model2Entities(models.ToList()); var ids = _dal.InsertsR(entities); if (ids != null && ids.Count > 0) { UpdateCache(ids); return true; } return false; } #endregion #region Update /// /// 更新 /// public bool Update(Model.MonitorPoint model) { if (model == null) return default; if (model.ID < 1) return default; var entity = Model2Entity(model); var bol = _dal.Update(entity); if (bol) { UpdateCache(model.ID); } return bol; } /// /// 更新 /// public bool Update(Model.MonitorPointExSignal model) { if (model == null) return default; var entity = Model2Entity(model.GetMonitorPoint()); var bol = _dal.Update(entity); if (bol) { var signal = model.GetSignal(); if (!new Signal().Update(signal)) { return false; } UpdateCache(model.MonitorPointID); } return bol; } /// /// 批量更新 /// public bool Updates(List models) { if (models == null || models.Count() < 1) return default; if (models.ToList().Exists(x => x.ID < 1)) return default; var entities = Model2Entities(models.ToList()); var bol = _dal.Updates(entities); if (bol) { UpdateCache(models.Select(x => x.ID).ToList()); } return bol; } /// /// 更新排序码 /// public bool UpdateSortCode(long id, int sortCode) { if (id < 1) return false; var bol = _dal.UpdateSortCode(id, sortCode); if (bol) { UpdateCache(id); } return bol; } /// /// 更新排序 /// public virtual bool UpdateSorter(List sorters) { if (sorters == null || sorters.Count() < 1) return default; if (sorters.Exists(x => x.ID < 1)) return default; var entities = sorters.Model2Entities(); var bol = _dal.UpdateSorter(entities); if (bol) { var ids = entities.Select(x => x.ID).ToList(); UpdateCache(ids); } return bol; } /// /// 更新 Flags /// public virtual bool UpdateFlags(long id, List flags) { if (id < 1) return false; var bol = _dal.UpdateFlags(id, FlagsHelper.ToString(flags)); if (bol) { UpdateCache(id); } return bol; } /// /// 更新 TagName /// public bool UpdateTagName(long id, string tagName) { if (id < 1) return false; var bol = _dal.UpdateTagName(id, tagName); if (bol) { UpdateCache(id); } return bol; } /// /// 更新 UseStatus /// public virtual bool UpdateUseStatus(long id, int useStatus) { if (id < 1) return false; var bol = _dal.UpdateUseStatus(id, useStatus); if (bol) { UpdateCache(id); } return bol; } #endregion #region Exist /// /// 根据 ID 判断是否存在 /// public bool IsExistByID(long id) { var all = GetAll(); return all.Exists(x => x.ID == id); } /// /// 判断TagName是否存在 /// public bool IsExistTagName(string tagName) { if (string.IsNullOrEmpty(tagName)) return default; var all = GetAll(); if (all == null || all.Count < 1) return default; return all.Exists(x => !string.IsNullOrEmpty(x.TagName) && x.TagName.ToUpper() == tagName.ToUpper()); } /// /// 判断TagName是否存在 ExceptID /// public bool IsExistTagNameExceptID(string tagName, long exceptID) { if (string.IsNullOrEmpty(tagName)) return default; var all = GetAll(); if (all == null || all.Count < 1) return default; return all.Exists(x => !string.IsNullOrEmpty(x.TagName) && x.TagName.ToUpper() == tagName.ToUpper() && x.ID != exceptID); } #endregion #region Delete /// /// 通过ID删除 /// public bool DeleteByID(long id, out string msg) { msg = string.Empty; var bol = _dal.DeleteByID(id); if (bol) { new BLL.Signal().DeleteByMonitorPointID(id, out msg); RemoveCache(id); } return bol; } #endregion #region Cover /// /// 批量覆盖 /// public bool Covers(List models) { if (models == null || models.Count() < 1) return default; var entities = Model2Entities(models); var bol = _dal.Covers(entities); if (bol) { CacheHelper.Remove(SettingsD.Project.ID); } return bol; } /// /// 批量覆盖 /// public bool CoverExs(List models) { if (models == null || models.Count() < 1) return default; var monitorPints = models.Select(x => x.GetMonitorPoint()).ToList(); var bol = Covers(monitorPints); if (bol) { var signals = models.Select(x => x.GetSignal()).ToList(); new Signal().Covers(signals); } return bol; } #endregion } }