From 9de31445a94aa9b4db456edb8664eecd1882fff5 Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Mon, 5 Aug 2024 09:23:26 +0800 Subject: [PATCH] =?UTF-8?q?temp=EF=BC=9Aremove=20notify=20table?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dtos/Forewarning/CreateWarningInput.cs | 12 +-- .../Dtos/Forewarning/EditWarningOutput.cs | 20 +---- .../Dtos/Forewarning/UpdateWarningInput.cs | 27 +----- .../Helpers/ForewarningHelper.cs | 54 ++++-------- .../ForewarningServices/ForewarningService.cs | 86 +++++++++++++------ .../Forewarning/CreateRuleFactorValidation.cs | 3 - .../Forewarning/RuleTrackStateDtoValidator.cs | 2 +- .../IWarningRepository.cs | 4 +- .../ForewarningAggregate/WarningEntity.cs | 6 -- .../WarningNotifyEntity.cs | 49 ----------- .../ForewarningAggregate/WarningRuleEntity.cs | 14 +++ .../TrackStatusAggregate/TrackStatusEntity.cs | 12 +-- ...arningNitifyDto.cs => WarningNotifyDto.cs} | 9 +- src/SJZY.Track.Domain/Enums/NotifyMode.cs | 5 +- .../Queries/WarningQueries.cs | 10 +-- .../Repositories/WarningRepository.cs | 29 +++++-- 16 files changed, 142 insertions(+), 200 deletions(-) delete mode 100644 src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningNotifyEntity.cs rename src/SJZY.Track.Domain/Dtos/Forewarning/{WarningNitifyDto.cs => WarningNotifyDto.cs} (78%) diff --git a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/CreateWarningInput.cs b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/CreateWarningInput.cs index 0179e744..96ee907a 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/CreateWarningInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/CreateWarningInput.cs @@ -20,20 +20,10 @@ public class CreateWarningInput /// public int CustomerId { get; set; } - /// - /// 通知方式 - /// - public NotifyMode NotifyMode { get; set; } - - /// - /// 通知模板 - /// - public string NotifyTemplate { get; set; } = null!; - /// /// 轨迹状态跨度列表 /// - public List TrackStatusSpans { get; set; } = new(); + public List TrackStatusSpans { get; set; } = new(); /// /// 预警因素列表。 diff --git a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/EditWarningOutput.cs b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/EditWarningOutput.cs index f8c65d67..d915660c 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/EditWarningOutput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/EditWarningOutput.cs @@ -1,5 +1,4 @@ using SJZY.Track.Domain.Dtos.Forewarning; -using SJZY.Track.Domain.Enums; namespace SJZY.Track.Application.Contract.Dtos.Forewarning; @@ -20,20 +19,10 @@ public class EditWarningOutput /// public int CustomerId { get; set; } - /// - /// 通知方式 - /// - public NotifyMode NotifyMode { get; set; } - - /// - /// 通知模板 - /// - public string NotifyTemplate { get; set; } = null!; - /// /// 通知列表 /// - public List TrackStatusSpans { get; set; } = new(); + public List TrackStatusSpans { get; set; } = new(); /// /// 预警因素列表。 @@ -41,13 +30,6 @@ public class EditWarningOutput public List WarningFactors { get; set; } = new(); } -public class WarningNotifyWithIdDto: WarningNitifyDto -{ - /// - /// 通知id - /// - public int Id { get; set; } -} public class WarningFactorWithIdDto : WarningFactorDto { diff --git a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/UpdateWarningInput.cs b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/UpdateWarningInput.cs index 0d00a8d3..26685924 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/UpdateWarningInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/UpdateWarningInput.cs @@ -14,32 +14,9 @@ public class UpdateWarningInput /// 模板名称 /// public string Name { get; set; } = null!; - - /// - /// 通知方式 - /// - public NotifyMode NotifyMode { get; set; } - - /// - /// 通知模板 - /// - public string NotifyTemplate { get; set; } = null!; - + /// /// 通知列表 /// - public List Notifies { get; set; } = new(); -} - -public class NotifyDto -{ - /// - /// 通知id - /// - public int Id { get; set; } - - /// - /// 通知人id - /// - public int NotifyUserId { get; set; } + public List Notifies { get; set; } = new(); } \ No newline at end of file diff --git a/src/SJZY.Track.Application/Helpers/ForewarningHelper.cs b/src/SJZY.Track.Application/Helpers/ForewarningHelper.cs index a1a0e3bc..fe7bc274 100644 --- a/src/SJZY.Track.Application/Helpers/ForewarningHelper.cs +++ b/src/SJZY.Track.Application/Helpers/ForewarningHelper.cs @@ -15,17 +15,12 @@ public class ForewarningHelper /// /// 递推分裂预警规则列表 /// - /// - /// + /// /// - public static List CalcRuleList(List statusSpans, - List factors) + public static List CalcRuleList(CreateWarningInput input) { - if (statusSpans.Count == 0 || factors.Count == 0) - { - throw new BusinessException(message: "轨迹状态区间或因素列表为空"); - } - + var statusSpans = input.TrackStatusSpans; + var factors = input.WarningFactors; var len = statusSpans.Count * factors.Select(f => f.FactorValue.Count).Aggregate((pre, cur) => pre * cur); if (len == 0) { @@ -52,7 +47,7 @@ public class ForewarningHelper return rules; } - private static void FillStatus(List statusSpans, List rules, int repeat) + private static void FillStatus(List statusSpans, List rules, int repeat) { var row = 0; foreach (var span in statusSpans) @@ -63,6 +58,8 @@ public class ForewarningHelper rules[row].StartTrackStatus = span.StartTrackStatus; rules[row].EndTrackStatusId = span.EndTrackStatusId; rules[row].EndTrackStatus = span.EndTrackStatus; + rules[row].NotifyMode = span.NotifyMode; + rules[row].NotifyUserId = span.NotifyUserId; } } } @@ -152,37 +149,24 @@ public class ForewarningHelper }).ToList(); } - public static List MapNotifyEntities(CreateWarningInput input) + public static EditWarningOutput MapWarningSummary(WarningEntity warning) { - return input.TrackStatusSpans.Select(x => new WarningNotifyEntity - { - StartTrackStatusId = x.StartTrackStatusId, - EndTrackStatusId = x.EndTrackStatusId, - NotifyMode = input.NotifyMode, - NotifyTemplate = input.NotifyTemplate, - NotifyUserId = x.NotifyUserId - }).ToList(); - } - - public static EditWarningOutput MapWarningSummary(WarningEntity warning, List statusList) - { - var statusDic = statusList.ToDictionary(x => x.Id, x => x.Name); return new EditWarningOutput { Name = warning.Name, SubSystemId = warning.SubSystemId, CustomerId = warning.CustomerId, - NotifyMode = warning.WarningNotifies.First().NotifyMode, - NotifyTemplate = warning.WarningNotifies.First().NotifyTemplate, - TrackStatusSpans = warning.WarningNotifies.Select(x => new WarningNotifyWithIdDto - { - Id = x.Id, - StartTrackStatusId = x.StartTrackStatusId, - StartTrackStatus = statusDic.TryGetValue(x.StartTrackStatusId, out var start) ? start : "", - EndTrackStatusId = x.EndTrackStatusId, - EndTrackStatus = statusDic.TryGetValue(x.EndTrackStatusId, out var end) ? end : "", - NotifyUserId = x.NotifyUserId, - }).ToList(), + TrackStatusSpans = warning.WarningRules.GroupBy(x => new + { x.StartTrackStatusId, x.StartTrackStatus, x.EndTrackStatusId, x.EndTrackStatus }) + .Select(x => new WarningNotifyDto + { + StartTrackStatusId = x.Key.StartTrackStatusId, + StartTrackStatus = x.Key.StartTrackStatus, + EndTrackStatusId = x.Key.EndTrackStatusId, + EndTrackStatus = x.Key.EndTrackStatus, + NotifyMode = x.First().NotifyMode, + NotifyUserId = x.First().NotifyUserId, + }).ToList(), WarningFactors = warning.WarningFactors.Select(x => new WarningFactorWithIdDto { Id = x.Id, diff --git a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningService.cs b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningService.cs index 0c7be38f..d6d41930 100644 --- a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningService.cs +++ b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningService.cs @@ -6,7 +6,6 @@ using SJZY.Track.Application.Helpers; using SJZY.Track.Domain.Aggregates.ForewarningAggregate; using SJZY.Track.Domain.Aggregates.TrackStatusAggregate; using SJZY.Track.Domain.Dtos.Forewarning; -using SJZY.Track.Domain.Dtos.TrackStatus; using SJZY.Track.Domain.Queries; namespace SJZY.Track.Application.Services.ForewarningServices; @@ -17,11 +16,14 @@ public class ForewarningService : ApplicationService { private readonly IWarningRepository _warningRepository; private readonly IForewarningCacheService _forewarningCacheService; + private readonly IBasicQuery _trackStatusQueries; - public ForewarningService(IWarningRepository warningRepository, IForewarningCacheService forewarningCacheService) + public ForewarningService(IWarningRepository warningRepository, IForewarningCacheService forewarningCacheService, + IBasicQuery trackStatusQueries) { _warningRepository = warningRepository; _forewarningCacheService = forewarningCacheService; + _trackStatusQueries = trackStatusQueries; } /// @@ -44,6 +46,11 @@ public class ForewarningService : ApplicationService [HttpPost("CreateWarning")] public async Task CreateWarning(CreateWarningInput input) { + if (input.TrackStatusSpans.Count == 0 || input.WarningFactors.Count == 0) + { + throw new BusinessException(message: "轨迹状态区间或因素列表为空"); + } + var warning = ObjectMapper.Map(input); if (await _warningRepository.IsAnyAsync(x => @@ -52,11 +59,9 @@ public class ForewarningService : ApplicationService throw new BusinessException(message: "该子系统下的客户已经存在一个同名预警: " + warning.Name); } - warning.WarningRules = ForewarningHelper.CalcRuleList(input.TrackStatusSpans, input.WarningFactors); + warning.WarningRules = ForewarningHelper.CalcRuleList(input); warning.FactorTypeSort = input.WarningFactors.Select(x => x.FactorType).JoinAsString(","); - warning.WarningFactors = ForewarningHelper.MapFactorEntities(input.WarningFactors); - warning.WarningNotifies = ForewarningHelper.MapNotifyEntities(input); await _warningRepository.CreateForewarningAsync(warning); return true; } @@ -65,27 +70,18 @@ public class ForewarningService : ApplicationService /// 编辑预警 /// /// - /// /// [HttpPost("EditWarning")] - public async Task EditWarning(int warningId, - [FromServices] IBasicQuery statusQuery) + public async Task EditWarning(int warningId) { - var warning = await _warningRepository.GetByIdAsync(warningId); + var warning = await _warningRepository.GetWithRulesAsync(warningId); if (warning == null) { throw new BusinessException(message: "预警不存在"); } - var statusList = await statusQuery.GetListAsync(x => x.SubSystemId == warning.SubSystemId, x => - new IdWithNameDto - { - Id = x.Id, - Name = x.Status - }); - - return ForewarningHelper.MapWarningSummary(warning, statusList); + return ForewarningHelper.MapWarningSummary(warning); } /// @@ -111,19 +107,61 @@ public class ForewarningService : ApplicationService warning.SetName(input.Name); - warning.WarningNotifies = input.Notifies.Select(x => new WarningNotifyEntity + await VerifyAndFillStatusAsync(input.Notifies, warning.SubSystemId); + + warning.WarningRules = input.Notifies.Select(x => new WarningRuleEntity() { - Id = x.Id, - NotifyMode = input.NotifyMode, - NotifyTemplate = input.NotifyTemplate, + WarningId = warning.Id, + StartTrackStatusId = x.StartTrackStatusId, + EndTrackStatusId = x.EndTrackStatusId, + NotifyMode = x.NotifyMode, NotifyUserId = x.NotifyUserId }).ToList(); await _warningRepository.UpdateForewarningAsync(warning); - + return true; } + private async Task VerifyAndFillStatusAsync(List notifies, int subSystemId) + { + var statusIds = new List(); + notifies.ForEach(x => + { + if (x.StartTrackStatusId == x.EndTrackStatusId) + { + throw new BusinessException(message: "起止轨迹状态不能相同"); + } + + statusIds.Add(x.StartTrackStatusId); + statusIds.Add(x.EndTrackStatusId); + }); + var statusList = await _trackStatusQueries.GetListAsync( + x => x.SubSystemId == subSystemId && statusIds.Contains(x.Id), x => + new IdWithNameDto + { + Id = x.Id, + Name = x.Status + }); + + var statusDic = statusList.ToDictionary(x => x.Id, x => x.Name); + notifies.ForEach(x => + { + if (!statusDic.ContainsKey(x.StartTrackStatusId)) + { + throw new BusinessException(message: "存在非法轨迹状态(包含子系统下不存在的轨迹状态)"); + } + + if (!statusDic.ContainsKey(x.EndTrackStatusId)) + { + throw new BusinessException(message: "存在非法轨迹状态(包含子系统下不存在的轨迹状态)"); + } + + x.StartTrackStatus = statusDic[x.StartTrackStatusId]; + x.EndTrackStatus = statusDic[x.EndTrackStatusId]; + }); + } + /// /// 启用or禁用预警 /// @@ -151,7 +189,7 @@ public class ForewarningService : ApplicationService warning.SetEnable(isEnable); await _warningRepository.TurnWarningAsync(warning); - + // 清除缓存 await _forewarningCacheService.DeleteRulesAsync(warning.SubSystemId, warning.CustomerId); @@ -195,7 +233,7 @@ public class ForewarningService : ApplicationService var warningRules = ObjectMapper.Map, List>(input.Items); await _warningRepository.ModifyTimeSpansAsync(warningRules); - + // 清除缓存 await _forewarningCacheService.DeleteRulesAsync(warning.SubSystemId, warning.CustomerId); return true; diff --git a/src/SJZY.Track.Application/Validations/Forewarning/CreateRuleFactorValidation.cs b/src/SJZY.Track.Application/Validations/Forewarning/CreateRuleFactorValidation.cs index 40f58dd3..bb216268 100644 --- a/src/SJZY.Track.Application/Validations/Forewarning/CreateRuleFactorValidation.cs +++ b/src/SJZY.Track.Application/Validations/Forewarning/CreateRuleFactorValidation.cs @@ -10,9 +10,6 @@ public class CreateRuleFactorValidation : AbstractValidator { RuleFor(x => x.WarningFactors).NotNull().WithMessage("因素列表不能为空"); RuleFor(x => x.TrackStatusSpans).NotNull().WithMessage("轨迹状态列表不能为空"); - - RuleFor(x => x.NotifyTemplate).NotEmpty().WithMessage("通知模板必填") - .MaximumLength(256).WithMessage("通知模板长度不能超过256"); // todo: more validation } diff --git a/src/SJZY.Track.Application/Validations/Forewarning/RuleTrackStateDtoValidator.cs b/src/SJZY.Track.Application/Validations/Forewarning/RuleTrackStateDtoValidator.cs index cf61bc45..26228a96 100644 --- a/src/SJZY.Track.Application/Validations/Forewarning/RuleTrackStateDtoValidator.cs +++ b/src/SJZY.Track.Application/Validations/Forewarning/RuleTrackStateDtoValidator.cs @@ -3,7 +3,7 @@ using SJZY.Track.Domain.Dtos.Forewarning; namespace SJZY.Track.Application.Validations.Forewarning; -public class RuleTrackStateDtoValidator : AbstractValidator +public class RuleTrackStateDtoValidator : AbstractValidator { public RuleTrackStateDtoValidator() { diff --git a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/IWarningRepository.cs b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/IWarningRepository.cs index efa73bbd..848b740f 100644 --- a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/IWarningRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/IWarningRepository.cs @@ -54,9 +54,9 @@ public interface IWarningRepository : IBasicRepository Task TurnWarningAsync(WarningEntity warning); /// - /// 获取预警,include factors, notifies + /// 获取预警 附带规则 /// /// /// - Task GetByIdAsync(int warningId); + Task GetWithRulesAsync(int warningId); } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningEntity.cs b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningEntity.cs index 4d8cea7e..b7125824 100644 --- a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningEntity.cs @@ -53,12 +53,6 @@ public class WarningEntity: IFullAuditedBasicEntitys, IAggregateRoot /// [SugarColumn(IsIgnore = true)] public List WarningFactors { get; set; } = new(); - - /// - /// 预警通知 - /// - [SugarColumn(IsIgnore = true)] - public List WarningNotifies { get; set; } = new(); public void SetName(string name) { diff --git a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningNotifyEntity.cs b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningNotifyEntity.cs deleted file mode 100644 index 1b846469..00000000 --- a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningNotifyEntity.cs +++ /dev/null @@ -1,49 +0,0 @@ -using SJZY.Track.Domain.Enums; - -namespace SJZY.Track.Domain.Aggregates.ForewarningAggregate; - -[SugarTable("t_warning_notify")] -public class WarningNotifyEntity : IFullAuditedBasicEntitys, IEntity -{ - /// - /// 自增主键 - /// - [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)] - public int Id { get; set; } - - /// - /// 预警id - /// - [SugarColumn(ColumnName = "WarningId")] - public int WarningId { get; set; } - - /// - /// 起始轨迹状态id - /// - [SugarColumn(ColumnName = "StartTrackStatusId", IsNullable = false)] - public int StartTrackStatusId { get; set; } - - /// - /// 终止轨迹状态id - /// - [SugarColumn(ColumnName = "EndTrackStatusId", IsNullable = false)] - public int EndTrackStatusId { get; set; } - - /// - /// 通知方式 - /// - [SugarColumn(ColumnName = "NotifyMode")] - public NotifyMode NotifyMode { get; set; } - - /// - /// 通知模板 - /// - [SugarColumn(ColumnName = "NotifyTemplate", Length = 256)] - public string NotifyTemplate { get; set; } = null!; - - /// - /// 通知人 - /// - [SugarColumn(ColumnName = "NotifyUserId")] - public int NotifyUserId { get; set; } -} \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRuleEntity.cs b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRuleEntity.cs index f6141704..06b02509 100644 --- a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRuleEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRuleEntity.cs @@ -1,3 +1,5 @@ +using SJZY.Track.Domain.Enums; + namespace SJZY.Track.Domain.Aggregates.ForewarningAggregate; [SugarTable("t_warning_rule")] @@ -92,4 +94,16 @@ public class WarningRuleEntity : IFullAuditedBasicEntitys, IEntity /// [SugarColumn(ColumnName = "ProductCode")] public string? ProductCode { get; set; } + + /// + /// 通知方式 + /// + [SugarColumn(ColumnName = "NotifyMode")] + public NotifyMode NotifyMode { get; set; } + + /// + /// 通知人 + /// + [SugarColumn(ColumnName = "NotifyUserId")] + public int NotifyUserId { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/TrackStatusEntity.cs b/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/TrackStatusEntity.cs index 0b200c1c..4b54469f 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/TrackStatusEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/TrackStatusEntity.cs @@ -11,6 +11,12 @@ public class TrackStatusEntity : IFullAuditedBasicEntitys, IAggregateRoot /// [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, IsIdentity = true)] public int Id { get; set; } + + /// + /// 子系统id + /// + [SugarColumn(ColumnName = "SubSystemId")] + public int SubSystemId { get; set; } /// /// 轨迹状态代码 @@ -35,10 +41,4 @@ public class TrackStatusEntity : IFullAuditedBasicEntitys, IAggregateRoot /// [SugarColumn(ColumnName = "Status")] public string Status { get; set; } = null!; - - /// - /// 子系统id - /// - [SugarColumn(ColumnName = "SubSystemId")] - public int SubSystemId { get; set; } } \ No newline at end of file diff --git a/src/SJZY.Track.Domain/Dtos/Forewarning/WarningNitifyDto.cs b/src/SJZY.Track.Domain/Dtos/Forewarning/WarningNotifyDto.cs similarity index 78% rename from src/SJZY.Track.Domain/Dtos/Forewarning/WarningNitifyDto.cs rename to src/SJZY.Track.Domain/Dtos/Forewarning/WarningNotifyDto.cs index f831cfeb..3749e4cc 100644 --- a/src/SJZY.Track.Domain/Dtos/Forewarning/WarningNitifyDto.cs +++ b/src/SJZY.Track.Domain/Dtos/Forewarning/WarningNotifyDto.cs @@ -1,6 +1,8 @@ +using SJZY.Track.Domain.Enums; + namespace SJZY.Track.Domain.Dtos.Forewarning; -public class WarningNitifyDto +public class WarningNotifyDto { /// /// 起始轨迹状态id @@ -21,6 +23,11 @@ public class WarningNitifyDto /// 终止轨迹状态 /// public string EndTrackStatus { get; set; } = null!; + + /// + /// 通知方式 + /// + public NotifyMode NotifyMode { get; set; } /// /// 通知人id diff --git a/src/SJZY.Track.Domain/Enums/NotifyMode.cs b/src/SJZY.Track.Domain/Enums/NotifyMode.cs index f5821903..2af2f323 100644 --- a/src/SJZY.Track.Domain/Enums/NotifyMode.cs +++ b/src/SJZY.Track.Domain/Enums/NotifyMode.cs @@ -1,14 +1,15 @@ namespace SJZY.Track.Domain.Enums; +[Flags] public enum NotifyMode { /// /// 站内信 /// - SiteInternal = 1, + SiteInternal = 0x1, /// /// 飞书 /// - FeiShu = 2 + FeiShu = 0x10, } \ No newline at end of file diff --git a/src/SJZY.Track.Repository/Queries/WarningQueries.cs b/src/SJZY.Track.Repository/Queries/WarningQueries.cs index 32aefadf..421b7b95 100644 --- a/src/SJZY.Track.Repository/Queries/WarningQueries.cs +++ b/src/SJZY.Track.Repository/Queries/WarningQueries.cs @@ -20,12 +20,9 @@ public class WarningQueries : ISugarRepository, IWarningQueries, return await Context.Queryable() .LeftJoin((w, wr) => w.Id == wr.WarningId) .LeftJoin((w, wr, a) => wr.AreaId == a.Id) - .LeftJoin((w, wr, a, wn) => - wr.WarningId == wn.WarningId && wr.StartTrackStatusId == wn.StartTrackStatusId && - wr.EndTrackStatusId == wn.EndTrackStatusId) .Filter(null, true) // 支持历史规则 .Where((w, wr) => ruleIds.Contains(wr.Id)) - .Select((w, wr, a, wn) => new GetWarningNotifiesVo + .Select((w, wr, a) => new GetWarningNotifiesVo { RuleId = wr.Id, WarningName = w.Name, @@ -40,9 +37,8 @@ public class WarningQueries : ISugarRepository, IWarningQueries, IsTransit = wr.IsTransit, LeavePort = wr.LeavePort, ProductCode = wr.ProductCode, - NotifyMode = wn.NotifyMode, - NotifyTemplate = wn.NotifyTemplate, - NotifyUserId = wn.NotifyUserId, + NotifyMode = wr.NotifyMode, + NotifyUserId = wr.NotifyUserId, FactorTypeSort = w.FactorTypeSort }) .ToListAsync(); diff --git a/src/SJZY.Track.Repository/Repositories/WarningRepository.cs b/src/SJZY.Track.Repository/Repositories/WarningRepository.cs index fe25f1d7..54a59d0b 100644 --- a/src/SJZY.Track.Repository/Repositories/WarningRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/WarningRepository.cs @@ -14,13 +14,12 @@ public class WarningRepository : BasicRepository, IWarningReposit 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(); + + warning.WarningRules.ForEach(x => x.WarningId = ruleId); await Context.Insertable(warning.WarningRules).ExecuteCommandAsync(); + tran.Complete(); return ruleId; } @@ -73,8 +72,19 @@ public class WarningRepository : BasicRepository, IWarningReposit using var tran = TransactionHelper.GetReadCommitted(); await Context.Updateable(warning).ExecuteCommandAsync(); - await Context.Updateable(warning.WarningNotifies) - .UpdateColumns(x => new { x.NotifyMode, x.NotifyTemplate, x.NotifyUserId, x.UpdateTime, x.UpdateUserId }) + + await Context.Updateable(warning.WarningRules).WhereColumns(x => new + { + x.WarningId, + x.StartTrackStatusId, + x.EndTrackStatusId + }).UpdateColumns(x => new + { + x.NotifyMode, + x.NotifyUserId, + x.UpdateTime, + x.UpdateUserId, + }, true) .ExecuteCommandAsync(); tran.Complete(); @@ -94,16 +104,17 @@ public class WarningRepository : BasicRepository, IWarningReposit .ExecuteCommandAsync() > 0; } - public async Task GetByIdAsync(int warningId) + public async Task GetWithRulesAsync(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() + + warning.WarningRules = await Context.Queryable() .Where(x => x.WarningId == warningId) .ToListAsync();