From a3c4199a302404c6a931c34432acfbf963d9d0ed Mon Sep 17 00:00:00 2001 From: xiaolipro <2357729423@qq.com> Date: Mon, 5 Aug 2024 10:01:12 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"=E3=80=90cheery=20pick=E3=80=91temp?= =?UTF-8?q?=EF=BC=9Aremove=20notify=20table"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit d7c84cfc4a85cfa801d9560334a550e876dac43b. --- .../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 +-- ...arningNotifyDto.cs => WarningNitifyDto.cs} | 9 +- src/SJZY.Track.Domain/Enums/NotifyMode.cs | 5 +- .../Queries/WarningQueries.cs | 10 ++- .../Repositories/WarningRepository.cs | 29 ++----- 16 files changed, 200 insertions(+), 142 deletions(-) create mode 100644 src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningNotifyEntity.cs rename src/SJZY.Track.Domain/Dtos/Forewarning/{WarningNotifyDto.cs => WarningNitifyDto.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 96ee907a..0179e744 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/CreateWarningInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/CreateWarningInput.cs @@ -20,10 +20,20 @@ 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 d915660c..f8c65d67 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/EditWarningOutput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/EditWarningOutput.cs @@ -1,4 +1,5 @@ using SJZY.Track.Domain.Dtos.Forewarning; +using SJZY.Track.Domain.Enums; namespace SJZY.Track.Application.Contract.Dtos.Forewarning; @@ -19,10 +20,20 @@ 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(); /// /// 预警因素列表。 @@ -30,6 +41,13 @@ 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 26685924..0d00a8d3 100644 --- a/src/SJZY.Track.Application.Contract/Dtos/Forewarning/UpdateWarningInput.cs +++ b/src/SJZY.Track.Application.Contract/Dtos/Forewarning/UpdateWarningInput.cs @@ -14,9 +14,32 @@ 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 List Notifies { get; set; } = new(); +} + +public class NotifyDto +{ + /// + /// 通知id + /// + public int Id { get; set; } + + /// + /// 通知人id + /// + public int NotifyUserId { get; set; } } \ 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 fe7bc274..a1a0e3bc 100644 --- a/src/SJZY.Track.Application/Helpers/ForewarningHelper.cs +++ b/src/SJZY.Track.Application/Helpers/ForewarningHelper.cs @@ -15,12 +15,17 @@ public class ForewarningHelper /// /// 递推分裂预警规则列表 /// - /// + /// + /// /// - public static List CalcRuleList(CreateWarningInput input) + public static List CalcRuleList(List statusSpans, + List factors) { - var statusSpans = input.TrackStatusSpans; - var factors = input.WarningFactors; + if (statusSpans.Count == 0 || factors.Count == 0) + { + throw new BusinessException(message: "轨迹状态区间或因素列表为空"); + } + var len = statusSpans.Count * factors.Select(f => f.FactorValue.Count).Aggregate((pre, cur) => pre * cur); if (len == 0) { @@ -47,7 +52,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) @@ -58,8 +63,6 @@ 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; } } } @@ -149,24 +152,37 @@ public class ForewarningHelper }).ToList(); } - public static EditWarningOutput MapWarningSummary(WarningEntity warning) + public static List MapNotifyEntities(CreateWarningInput input) { + 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, - 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(), + 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(), 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 d6d41930..0c7be38f 100644 --- a/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningService.cs +++ b/src/SJZY.Track.Application/Services/ForewarningServices/ForewarningService.cs @@ -6,6 +6,7 @@ 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; @@ -16,14 +17,11 @@ public class ForewarningService : ApplicationService { private readonly IWarningRepository _warningRepository; private readonly IForewarningCacheService _forewarningCacheService; - private readonly IBasicQuery _trackStatusQueries; - public ForewarningService(IWarningRepository warningRepository, IForewarningCacheService forewarningCacheService, - IBasicQuery trackStatusQueries) + public ForewarningService(IWarningRepository warningRepository, IForewarningCacheService forewarningCacheService) { _warningRepository = warningRepository; _forewarningCacheService = forewarningCacheService; - _trackStatusQueries = trackStatusQueries; } /// @@ -46,11 +44,6 @@ 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 => @@ -59,9 +52,11 @@ public class ForewarningService : ApplicationService throw new BusinessException(message: "该子系统下的客户已经存在一个同名预警: " + warning.Name); } - warning.WarningRules = ForewarningHelper.CalcRuleList(input); + warning.WarningRules = ForewarningHelper.CalcRuleList(input.TrackStatusSpans, input.WarningFactors); 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; } @@ -70,18 +65,27 @@ public class ForewarningService : ApplicationService /// 编辑预警 /// /// + /// /// [HttpPost("EditWarning")] - public async Task EditWarning(int warningId) + public async Task EditWarning(int warningId, + [FromServices] IBasicQuery statusQuery) { - var warning = await _warningRepository.GetWithRulesAsync(warningId); + var warning = await _warningRepository.GetByIdAsync(warningId); if (warning == null) { throw new BusinessException(message: "预警不存在"); } - return ForewarningHelper.MapWarningSummary(warning); + var statusList = await statusQuery.GetListAsync(x => x.SubSystemId == warning.SubSystemId, x => + new IdWithNameDto + { + Id = x.Id, + Name = x.Status + }); + + return ForewarningHelper.MapWarningSummary(warning, statusList); } /// @@ -107,61 +111,19 @@ public class ForewarningService : ApplicationService warning.SetName(input.Name); - await VerifyAndFillStatusAsync(input.Notifies, warning.SubSystemId); - - warning.WarningRules = input.Notifies.Select(x => new WarningRuleEntity() + warning.WarningNotifies = input.Notifies.Select(x => new WarningNotifyEntity { - WarningId = warning.Id, - StartTrackStatusId = x.StartTrackStatusId, - EndTrackStatusId = x.EndTrackStatusId, - NotifyMode = x.NotifyMode, + Id = x.Id, + NotifyMode = input.NotifyMode, + NotifyTemplate = input.NotifyTemplate, 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禁用预警 /// @@ -189,7 +151,7 @@ public class ForewarningService : ApplicationService warning.SetEnable(isEnable); await _warningRepository.TurnWarningAsync(warning); - + // 清除缓存 await _forewarningCacheService.DeleteRulesAsync(warning.SubSystemId, warning.CustomerId); @@ -233,7 +195,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 bb216268..40f58dd3 100644 --- a/src/SJZY.Track.Application/Validations/Forewarning/CreateRuleFactorValidation.cs +++ b/src/SJZY.Track.Application/Validations/Forewarning/CreateRuleFactorValidation.cs @@ -10,6 +10,9 @@ 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 26228a96..cf61bc45 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 848b740f..efa73bbd 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 GetWithRulesAsync(int warningId); + Task GetByIdAsync(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 b7125824..4d8cea7e 100644 --- a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningEntity.cs @@ -53,6 +53,12 @@ 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 new file mode 100644 index 00000000..1b846469 --- /dev/null +++ b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningNotifyEntity.cs @@ -0,0 +1,49 @@ +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 06b02509..f6141704 100644 --- a/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRuleEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/ForewarningAggregate/WarningRuleEntity.cs @@ -1,5 +1,3 @@ -using SJZY.Track.Domain.Enums; - namespace SJZY.Track.Domain.Aggregates.ForewarningAggregate; [SugarTable("t_warning_rule")] @@ -94,16 +92,4 @@ 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 4b54469f..0b200c1c 100644 --- a/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/TrackStatusEntity.cs +++ b/src/SJZY.Track.Domain/Aggregates/TrackStatusAggregate/TrackStatusEntity.cs @@ -11,12 +11,6 @@ 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; } /// /// 轨迹状态代码 @@ -41,4 +35,10 @@ 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/WarningNotifyDto.cs b/src/SJZY.Track.Domain/Dtos/Forewarning/WarningNitifyDto.cs similarity index 78% rename from src/SJZY.Track.Domain/Dtos/Forewarning/WarningNotifyDto.cs rename to src/SJZY.Track.Domain/Dtos/Forewarning/WarningNitifyDto.cs index 3749e4cc..f831cfeb 100644 --- a/src/SJZY.Track.Domain/Dtos/Forewarning/WarningNotifyDto.cs +++ b/src/SJZY.Track.Domain/Dtos/Forewarning/WarningNitifyDto.cs @@ -1,8 +1,6 @@ -using SJZY.Track.Domain.Enums; - namespace SJZY.Track.Domain.Dtos.Forewarning; -public class WarningNotifyDto +public class WarningNitifyDto { /// /// 起始轨迹状态id @@ -23,11 +21,6 @@ public class WarningNotifyDto /// 终止轨迹状态 /// 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 2af2f323..f5821903 100644 --- a/src/SJZY.Track.Domain/Enums/NotifyMode.cs +++ b/src/SJZY.Track.Domain/Enums/NotifyMode.cs @@ -1,15 +1,14 @@ namespace SJZY.Track.Domain.Enums; -[Flags] public enum NotifyMode { /// /// 站内信 /// - SiteInternal = 0x1, + SiteInternal = 1, /// /// 飞书 /// - FeiShu = 0x10, + FeiShu = 2 } \ 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 421b7b95..32aefadf 100644 --- a/src/SJZY.Track.Repository/Queries/WarningQueries.cs +++ b/src/SJZY.Track.Repository/Queries/WarningQueries.cs @@ -20,9 +20,12 @@ 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) => new GetWarningNotifiesVo + .Select((w, wr, a, wn) => new GetWarningNotifiesVo { RuleId = wr.Id, WarningName = w.Name, @@ -37,8 +40,9 @@ public class WarningQueries : ISugarRepository, IWarningQueries, IsTransit = wr.IsTransit, LeavePort = wr.LeavePort, ProductCode = wr.ProductCode, - NotifyMode = wr.NotifyMode, - NotifyUserId = wr.NotifyUserId, + NotifyMode = wn.NotifyMode, + NotifyTemplate = wn.NotifyTemplate, + NotifyUserId = wn.NotifyUserId, FactorTypeSort = w.FactorTypeSort }) .ToListAsync(); diff --git a/src/SJZY.Track.Repository/Repositories/WarningRepository.cs b/src/SJZY.Track.Repository/Repositories/WarningRepository.cs index 54a59d0b..fe25f1d7 100644 --- a/src/SJZY.Track.Repository/Repositories/WarningRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/WarningRepository.cs @@ -14,12 +14,13 @@ 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); - await Context.Insertable(warning.WarningFactors).ExecuteCommandAsync(); - 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; } @@ -72,19 +73,8 @@ public class WarningRepository : BasicRepository, IWarningReposit using var tran = TransactionHelper.GetReadCommitted(); await Context.Updateable(warning).ExecuteCommandAsync(); - - 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) + await Context.Updateable(warning.WarningNotifies) + .UpdateColumns(x => new { x.NotifyMode, x.NotifyTemplate, x.NotifyUserId, x.UpdateTime, x.UpdateUserId }) .ExecuteCommandAsync(); tran.Complete(); @@ -104,17 +94,16 @@ public class WarningRepository : BasicRepository, IWarningReposit .ExecuteCommandAsync() > 0; } - public async Task GetWithRulesAsync(int warningId) + 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.WarningRules = await Context.Queryable() + warning.WarningNotifies = await Context.Queryable() .Where(x => x.WarningId == warningId) .ToListAsync();