From e8994e44c92f608c729addc161acc124b334f3c3 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Wed, 17 Apr 2024 17:31:03 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/CancelDuplicationTaskJob.cs | 246 +++++++++--------- 1 file changed, 123 insertions(+), 123 deletions(-) diff --git a/Src/Dlhis.ScheduledTask/Jobs/CancelDuplicationTaskJob.cs b/Src/Dlhis.ScheduledTask/Jobs/CancelDuplicationTaskJob.cs index d686ec38..93b83db4 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/CancelDuplicationTaskJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/CancelDuplicationTaskJob.cs @@ -1,138 +1,138 @@ -using Dlhis.Entity.Device.Entities; -using Dlhis.Entity.Device.Enums; -using Kurisu.AspNetCore.Utils.Extensions; -using Kurisu.Scheduled; -using Kurisu.Scheduled.Attributes; -using SqlSugar; -using System.Linq.Expressions; +//using Dlhis.Entity.Device.Entities; +//using Dlhis.Entity.Device.Enums; +//using Kurisu.AspNetCore.Utils.Extensions; +//using Kurisu.Scheduled; +//using Kurisu.Scheduled.Attributes; +//using SqlSugar; +//using System.Linq.Expressions; -namespace Dlhis.ScheduledTask.Jobs; +//namespace Dlhis.ScheduledTask.Jobs; -/// -/// 处理重复下发任务 -/// -[RecurringJob(nameof(CancelDuplicationTaskJob), "0/15 * * * * ?", Name = "处理重复下发任务")] -public class CancelDuplicationTaskJob : BaseJob -{ - public CancelDuplicationTaskJob(IServiceProvider serviceProvider) : base(serviceProvider) - { - } +///// +///// 处理重复下发任务 +///// +//[RecurringJob(nameof(CancelDuplicationTaskJob), "0/15 * * * * ?", Name = "处理重复下发任务")] +//public class CancelDuplicationTaskJob : BaseJob +//{ +// public CancelDuplicationTaskJob(IServiceProvider serviceProvider) : base(serviceProvider) +// { +// } - public override async Task RunAsync(IServiceProvider serviceProvider) - { - //人员下发任务相关 - var taskTypes = new List() { DeviceTaskEnumType.Add, DeviceTaskEnumType.Delete, DeviceTaskEnumType.Update }; +// public override async Task RunAsync(IServiceProvider serviceProvider) +// { +// //人员下发任务相关 +// var taskTypes = new List() { DeviceTaskEnumType.Add, DeviceTaskEnumType.Delete, DeviceTaskEnumType.Update }; - var deviceTasks = await DbContext.Queryable() - .Where(x => x.Status == DeviceTaskStatusEnumType.Wait)//没有被获取 - .Where(x => taskTypes.Contains(x.Type)) - .OrderBy(x => x.CreateTime, OrderByType.Desc) - .ToListAsync(); +// var deviceTasks = await DbContext.Queryable() +// .Where(x => x.Status == DeviceTaskStatusEnumType.Wait)//没有被获取 +// .Where(x => taskTypes.Contains(x.Type)) +// .OrderBy(x => x.CreateTime, OrderByType.Desc) +// .ToListAsync(); - var groupData = deviceTasks.GroupBy(x => new { x.TenantId, x.UserNo, x.DeviceUniqueNo }); - foreach (var deviceTaskPack in groupData) - { - var uniqueInfo = deviceTaskPack.Key; - var data = deviceTaskPack.ToList(); +// var groupData = deviceTasks.GroupBy(x => new { x.TenantId, x.UserNo, x.DeviceUniqueNo }); +// foreach (var deviceTaskPack in groupData) +// { +// var uniqueInfo = deviceTaskPack.Key; +// var data = deviceTaskPack.ToList(); - foreach (var item in data) - { - try - { - Expression> where = LinqExpressionExtensions.False(); - var ignoreData = new List(); - //最新一条更新人员信息 - if (item.Type == DeviceTaskEnumType.Update && item.Status == DeviceTaskStatusEnumType.Wait) - { - //获取过往的更新人员任务 - ignoreData = data.Where(x => x.Type == DeviceTaskEnumType.Update) - .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) - .Where(x => x.Id != item.Id) - .Where(x => item.CreateTime > x.CreateTime) - .Select(x => new IdVersion { Id = x.Id, Version = x.Version }).ToList(); - } - //最新一条删除人员信息 - else if (item.Type == DeviceTaskEnumType.Delete && item.Status == DeviceTaskStatusEnumType.Wait) - { - //存在成功下发的任务,此处可以直接把其他任务取消 - if (await DbContext.Queryable().Where(x => x.UserNo == item.UserNo) - .Where(x => x.DeviceUniqueNo == item.DeviceUniqueNo) - .Where(x => x.TenantId == item.TenantId).Where(x => x.Status == DeviceTaskStatusEnumType.Success).AnyAsync()) - { - ignoreData.AddRange(data.Where(x => x.Type == DeviceTaskEnumType.Add - || x.Type == DeviceTaskEnumType.Delete - || x.Type == DeviceTaskEnumType.Update) - .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) - .Where(x => x.Id != item.Id) - .Where(x => item.CreateTime > x.CreateTime) - .Select(x => new IdVersion { Id = x.Id, Version = x.Version }) - ); - } - else - { - var currentIds = new List { item.Id }; - var beforeTask = data.Where(x => x.Type == DeviceTaskEnumType.Add || x.Type == DeviceTaskEnumType.Update) - .Where(x => !currentIds.Contains(x.Id)) - .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) - .Where(x => item.CreateTime > x.CreateTime) - .FirstOrDefault(); +// foreach (var item in data) +// { +// try +// { +// Expression> where = LinqExpressionExtensions.False(); +// var ignoreData = new List(); +// //最新一条更新人员信息 +// if (item.Type == DeviceTaskEnumType.Update && item.Status == DeviceTaskStatusEnumType.Wait) +// { +// //获取过往的更新人员任务 +// ignoreData = data.Where(x => x.Type == DeviceTaskEnumType.Update) +// .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) +// .Where(x => x.Id != item.Id) +// .Where(x => item.CreateTime > x.CreateTime) +// .Select(x => new IdVersion { Id = x.Id, Version = x.Version }).ToList(); +// } +// //最新一条删除人员信息 +// else if (item.Type == DeviceTaskEnumType.Delete && item.Status == DeviceTaskStatusEnumType.Wait) +// { +// //存在成功下发的任务,此处可以直接把其他任务取消 +// if (await DbContext.Queryable().Where(x => x.UserNo == item.UserNo) +// .Where(x => x.DeviceUniqueNo == item.DeviceUniqueNo) +// .Where(x => x.TenantId == item.TenantId).Where(x => x.Status == DeviceTaskStatusEnumType.Success).AnyAsync()) +// { +// ignoreData.AddRange(data.Where(x => x.Type == DeviceTaskEnumType.Add +// || x.Type == DeviceTaskEnumType.Delete +// || x.Type == DeviceTaskEnumType.Update) +// .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) +// .Where(x => x.Id != item.Id) +// .Where(x => item.CreateTime > x.CreateTime) +// .Select(x => new IdVersion { Id = x.Id, Version = x.Version }) +// ); +// } +// else +// { +// var currentIds = new List { item.Id }; +// var beforeTask = data.Where(x => x.Type == DeviceTaskEnumType.Add || x.Type == DeviceTaskEnumType.Update) +// .Where(x => !currentIds.Contains(x.Id)) +// .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) +// .Where(x => item.CreateTime > x.CreateTime) +// .FirstOrDefault(); - //逻辑正确,最终beforeTask.type == DeviceTaskEnumType.Add - while (beforeTask != null && beforeTask.Type == DeviceTaskEnumType.Update) - { - ignoreData.Add(new IdVersion() { Id = beforeTask.Id, Version = beforeTask.Version }); - currentIds.Add(beforeTask.Id); +// //逻辑正确,最终beforeTask.type == DeviceTaskEnumType.Add +// while (beforeTask != null && beforeTask.Type == DeviceTaskEnumType.Update) +// { +// ignoreData.Add(new IdVersion() { Id = beforeTask.Id, Version = beforeTask.Version }); +// currentIds.Add(beforeTask.Id); - beforeTask = data.Where(x => x.Type == DeviceTaskEnumType.Add || x.Type == DeviceTaskEnumType.Update) - .Where(x => !currentIds.Contains(x.Id)) - .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) - .Where(x => item.CreateTime > x.CreateTime) - .FirstOrDefault(); - } +// beforeTask = data.Where(x => x.Type == DeviceTaskEnumType.Add || x.Type == DeviceTaskEnumType.Update) +// .Where(x => !currentIds.Contains(x.Id)) +// .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) +// .Where(x => item.CreateTime > x.CreateTime) +// .FirstOrDefault(); +// } - if (beforeTask != null) - { - ignoreData.Add(new IdVersion() { Id = beforeTask.Id, Version = beforeTask.Version }); - ignoreData.Add(new IdVersion() { Id = item.Id, Version = item.Version }); - } - } - } +// if (beforeTask != null) +// { +// ignoreData.Add(new IdVersion() { Id = beforeTask.Id, Version = beforeTask.Version }); +// ignoreData.Add(new IdVersion() { Id = item.Id, Version = item.Version }); +// } +// } +// } - if (ignoreData.Any()) - { - ignoreData.ForEach(p => - { - where = where.Or(x => x.Id == p.Id && x.Version == p.Version && x.Status == DeviceTaskStatusEnumType.Wait); - }); +// if (ignoreData.Any()) +// { +// ignoreData.ForEach(p => +// { +// where = where.Or(x => x.Id == p.Id && x.Version == p.Version && x.Status == DeviceTaskStatusEnumType.Wait); +// }); - await DbContext.Updateable() - .SetColumns(x => x.Version == x.Version + 1) - .SetColumns(x => x.Status == DeviceTaskStatusEnumType.Cancel) - .SetColumns(x => x.CancellationId == item.Id) - .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(where) - .ExecuteCommandAsync(); +// await DbContext.Updateable() +// .SetColumns(x => x.Version == x.Version + 1) +// .SetColumns(x => x.Status == DeviceTaskStatusEnumType.Cancel) +// .SetColumns(x => x.CancellationId == item.Id) +// .SetColumns(x => x.ModifiedTime == DateTime.Now) +// .Where(where) +// .ExecuteCommandAsync(); - data.ForEach(x => - { - if (ignoreData.Any(p => p.Id == x.Id)) - x.Status = DeviceTaskStatusEnumType.Cancel; - }); - } - } - catch (Exception ex) - { - Logger.LogError(ex, "抵消处理异常:{message}", ex.Message); - } - } - } - } +// data.ForEach(x => +// { +// if (ignoreData.Any(p => p.Id == x.Id)) +// x.Status = DeviceTaskStatusEnumType.Cancel; +// }); +// } +// } +// catch (Exception ex) +// { +// Logger.LogError(ex, "抵消处理异常:{message}", ex.Message); +// } +// } +// } +// } - class IdVersion - { - public long Id { get; set; } - public int Version { get; set; } - } -} +// class IdVersion +// { +// public long Id { get; set; } +// public int Version { get; set; } +// } +//}