From a4c5ad619c4ae229dbc07e7e34ae7373f3cc522c Mon Sep 17 00:00:00 2001 From: hardstylewyl <827778732@qq.com> Date: Mon, 24 Mar 2025 16:23:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E7=9A=84=E6=8E=92=E5=BA=8F=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20fix:=E4=BF=AE=E5=A4=8D=E9=A2=84=E8=AD=A6=E4=B8=BB=E4=BD=93?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E6=80=A7=E5=88=A4=E6=96=AD=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=A2=84=E8=AD=A6=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/Warning/CompleteWarningService.cs | 11 ++++------- .../Services/Warning/ReturnWarningService.cs | 11 ++++------- .../Services/Warning/TransportWarningService.cs | 12 +++--------- .../Services/Warning/WarningService.cs | 7 ++++--- .../WarningAggregate/IWarningRuleRepository.cs | 2 +- .../Repositories/WarningRuleRepository.cs | 7 ++++--- 6 files changed, 20 insertions(+), 30 deletions(-) diff --git a/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs b/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs index 6bdd0fad..78126101 100644 --- a/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs +++ b/src/SJZY.Track.Application/Services/Warning/CompleteWarningService.cs @@ -193,13 +193,10 @@ public class CompleteWarningService : ApplicationService }; }); - var sorted = map.OrderBy(x => - { - // 待处理置顶 - if (x.Status == 1) return x.Status; - // 其他按创建时间从早到晚 - return DateTimeHelper.ConvertToUnixTimestamp(x.CreateTime); - }); + // 按状态组+组内时间降序,分割状态组 g1:(待处理) g2:(已处理/已关闭) 确保g1总是在g2之前 + var sorted = map + .OrderBy(x => x.Status == (int) CompleteWarningStatus.待处理 ? 1 : 2) + .ThenByDescending(x => x.CreateTime); //同状态组按时间降序; return new UnifyPageResultDto( sorted.ToList(), diff --git a/src/SJZY.Track.Application/Services/Warning/ReturnWarningService.cs b/src/SJZY.Track.Application/Services/Warning/ReturnWarningService.cs index 484a8bb3..b109f85e 100644 --- a/src/SJZY.Track.Application/Services/Warning/ReturnWarningService.cs +++ b/src/SJZY.Track.Application/Services/Warning/ReturnWarningService.cs @@ -158,13 +158,10 @@ public class ReturnWarningService : ApplicationService CreateTime = x.CreateTime, }); - var sorted = map.OrderBy(x => - { - // 人工介入置顶 - if (x.Status == 1) return x.Status; - // 其他按创建时间从早到晚 - return DateTimeHelper.ConvertToUnixTimestamp(x.CreateTime); - }); + // 按状态组+组内时间降序,分割状态组 g1:(人工介入) g2:(重试中/推送完成/已关闭) 确保g1总是在g2之前 + var sorted = map + .OrderBy(x => x.Status == (int) ReturnWarningStatus.人工介入 ? 1 : 2) + .ThenByDescending(x => x.CreateTime); //同状态组按时间降序; return new UnifyPageResultDto( sorted.ToList(), diff --git a/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs b/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs index f60471a1..fc7293a4 100644 --- a/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs +++ b/src/SJZY.Track.Application/Services/Warning/TransportWarningService.cs @@ -253,16 +253,10 @@ public class TransportWarningService : ApplicationService // 计算后的状态过滤 var filtered = map.WhereIf(input.Status > 0, x => x.Status == input.Status); - // 按状态+时间排序 + // 按状态组+组内时间降序,分割状态组 g1:(即将超时/已超时) g2:(已完成/超时完成/已关闭) 确保g1总是在g2之前 var sorted = filtered - .OrderBy(x => - { - // 即将超时,已超时置顶 - if (x.Status is 1 or 2) return x.Status; - // 其他按创建时间从早到晚 - return DateTimeHelper.ConvertToUnixTimestamp(x.CreateTime); - }) - .ThenByDescending(x => x.CreateTime) //同状态(即将超时/已超时)按创建时间从晚到早 + .OrderBy(x => x.Status is (int) TransportWarningStatus.即将超时 or (int) TransportWarningStatus.已超时 ? 1 : 2) + .ThenByDescending(x => x.CreateTime) //同状态组按时间降序 .ToList(); return new UnifyPageResultDto( diff --git a/src/SJZY.Track.Application/Services/Warning/WarningService.cs b/src/SJZY.Track.Application/Services/Warning/WarningService.cs index f0cd9803..c6dbaf07 100644 --- a/src/SJZY.Track.Application/Services/Warning/WarningService.cs +++ b/src/SJZY.Track.Application/Services/Warning/WarningService.cs @@ -130,10 +130,11 @@ public class WarningService : ApplicationService throw new BusinessException(message: $"WarningId=[{input.Id}],WarningType=[{input.WarningType}]预警规则主体不存在,不允许修改"); } - // 要求 SubSystemId+CustomId+Name 联合不能重复 - if (await _warningRuleRepository.CheckNameDuplicateAsync(input.Id, input.SubSystemId, input.CustomId, input.Name)) + // 要求 SubSystemId+CustomId+Name+WarningType 联合不能重复 + if (await _warningRuleRepository.CheckNameDuplicateAsync(input.Id, input.SubSystemId, input.CustomId, input.Name, (WarningRuleType) input.WarningType)) { - throw new BusinessException(message: $"SubSystemId:[{input.SubSystemId}],CustomId:[{input.CustomId}],已存在名称为[{input.Name}]规则,不允许重复创建/修改"); + throw new BusinessException(message: $"SubSystemId:[{input.SubSystemId}],CustomId:[{input.CustomId}]," + + $"WarningType:[{input.WarningType.ToString()}]已存在名称为[{input.Name}]规则,不允许重复创建/修改"); } // 如果创建/修改的主体为启用状态,则要求通过检查 diff --git a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningRuleRepository.cs b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningRuleRepository.cs index 25b76f8e..13df653f 100644 --- a/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningRuleRepository.cs +++ b/src/SJZY.Track.Domain/Aggregates/WarningAggregate/IWarningRuleRepository.cs @@ -13,7 +13,7 @@ public interface IWarningRuleRepository : IBasicRepository #region 规则主体 // 检查名称是否重复 - Task CheckNameDuplicateAsync(int id, int subsystemId, int customId, string name); + Task CheckNameDuplicateAsync(int id, int subsystemId, int customId, string name, WarningRuleType warningType); // 检查是同一【子系统+客户+类型】是否有多个启用的预警规则主体 Task CheckEnableDuplicateAsync(int warningId, int subsystemId, int customId, WarningRuleType warningType); diff --git a/src/SJZY.Track.Repository/Repositories/WarningRuleRepository.cs b/src/SJZY.Track.Repository/Repositories/WarningRuleRepository.cs index bf4120ba..13d7c255 100644 --- a/src/SJZY.Track.Repository/Repositories/WarningRuleRepository.cs +++ b/src/SJZY.Track.Repository/Repositories/WarningRuleRepository.cs @@ -13,11 +13,12 @@ public class WarningRuleRepository : BasicRepository, IWarnin { #region 规则主体 - public async Task CheckNameDuplicateAsync(int id, int subsystemId, int customId, string name) + public async Task CheckNameDuplicateAsync(int id, int subsystemId, int customId, string name, WarningRuleType warningType) { var entity = await Context.Queryable() - .Where(x => x.SubSystemId == subsystemId && - x.CustomId == customId + .Where(x => x.SubSystemId == subsystemId + && x.CustomId == customId + && x.WarningType == (int) warningType && string.Equals(x.Name, name)) .FirstAsync();