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();