using SJZY.Track.Domain; using SJZY.Track.Domain.Aggregates.ForewarningAggregate; using SJZY.Track.Domain.Aggregates.KPIAreaAggregate; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate; using SJZY.Track.Domain.Dtos.Forewarning; using SJZY.Track.Domain.VEntities; namespace SJZY.Track.Repository.Repositories; /// /// 预警仓储 /// public class WarningRepository : BasicRepository, IWarningRepository, ITransientDependency { /// public async Task CreateForewarningAsync(WarningEntity warning) { using var tran = TransactionHelper.GetReadCommitted(); var ruleId = await InsertReturnIdentityAsync(warning); warning.WarningNotifies.ForEach(x => x.WarningId = ruleId); warning.WarningFactors.ForEach(x => x.WarningId = ruleId); warning.WarningRules.ForEach(x => x.WarningId = ruleId); await Context.Insertable(warning.WarningFactors).ExecuteCommandAsync(); await Context.Insertable(warning.WarningNotifies).ExecuteCommandAsync(); await Context.Insertable(warning.WarningRules).ExecuteCommandAsync(); tran.Complete(); return ruleId; } /// public Task CopyForewarning(int warningId) { throw new NotImplementedException(); } /// public Task> GetWarningPageListAsync(GetWarningPageInputVo input) { var query = Context.Queryable() .LeftJoin((a, b) => a.SubSystemId == b.Id) .LeftJoin((a, b, c) => a.CustomerId == c.Id) .WhereIF(input.SystemId.HasValue, (a, b) => a.SubSystemId == input.SystemId) .WhereIF(!string.IsNullOrEmpty(input.KeyWord), (a, b, c) => a.Name.Contains(input.KeyWord!) || c.Name.Contains(input.KeyWord!)) .OrderBy(a => a.UpdateTime, OrderByType.Desc); return query .Select((a, b, c) => new WarningPageOutput { Id = a.Id, SubSystem = b.CnName, Custom = c.Name, Name = a.Name, IsEnable = a.IsEnable, UpdateTime = a.UpdateTime }) .ToPagedListAsync(input.PageIndex, input.PageSize); } /// public async Task> GetWarningRuleListAsync(int warningId) { return await Context.Queryable() .LeftJoin((a, b) => a.StartTrackStatusId == b.Id) .LeftJoin((a, b, c) => a.EndTrackStatusId == c.Id) .LeftJoin((a, b, c, d) => a.AreaId == d.Id) .Where(a => a.WarningId == warningId) .Select( (a, b, c, d) => new WarningRuleVo { StartTrackStatus = b.Status, EndTrackStatus = c.Status, Area = d.Name }, true) .ToListAsync(); } /// public async Task UpdateForewarningAsync(WarningEntity warning) { using var tran = TransactionHelper.GetReadCommitted(); await Context.Updateable(warning).ExecuteCommandAsync(); await Context.Updateable(warning.WarningNotifies) .UpdateColumns(x => new { x.NotifyMode, x.NotifyUser, x.UpdateTime, x.UpdateUserId }) .ExecuteCommandAsync(); tran.Complete(); } /// public async Task ModifyTimeSpansAsync(List rules) { return await Context.Updateable(rules) .UpdateColumns(x => new { x.TotalTimeSpan, x.WarnTimeSpan, x.WarnCount, x.UpdateTime, x.UpdateUserId }) .ExecuteCommandAsync(); } /// public async Task TurnWarningAsync(WarningEntity warning) { return await Context.Updateable(warning) .UpdateColumns(x => new { x.IsEnable, x.UpdateTime, x.UpdateUserId }) .ExecuteCommandAsync() > 0; } /// public async Task GetByIdAsync(int warningId) { var warning = await GetFirstAsync(x => x.Id == warningId); if (warning == null) return null; warning.WarningFactors = await Context.Queryable() .Where(x => x.WarningId == warningId) .ToListAsync(); warning.WarningNotifies = await Context.Queryable() .Where(x => x.WarningId == warningId) .ToListAsync(); return warning; } }