From 60e43bfb9d94d5fe06238d2bd3cffea6b5785ac8 Mon Sep 17 00:00:00 2001 From: liguoyang Date: Sat, 5 Jul 2025 13:15:49 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BC=98=E5=8C=96=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/CreateGetUploadRecordJob.cs | 5 +- .../Jobs/CreateSyncServerDateTimeJob.cs | 5 +- .../Services/Implements/AssignmentService.cs | 65 +++++++++++++------ 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/Src/Dlhis.ScheduledTask/Jobs/CreateGetUploadRecordJob.cs b/Src/Dlhis.ScheduledTask/Jobs/CreateGetUploadRecordJob.cs index 51485fdb..d4e3c48a 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/CreateGetUploadRecordJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/CreateGetUploadRecordJob.cs @@ -46,7 +46,10 @@ public class CreateGetUploadRecordJob : BaseJob } else { - if (deviceTask.Status == DeviceTaskStatusEnumType.Success) + if (deviceTask.Status == DeviceTaskStatusEnumType.Success + || (deviceTask.Status == DeviceTaskStatusEnumType.Process + && deviceTask.ModifiedTime.AddMinutes(10) > DateTime.Now) + ) { deviceTask.Status = DeviceTaskStatusEnumType.Wait; deviceTask.Version = 0; diff --git a/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs b/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs index 79d94abe..8b580825 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/CreateSyncServerDateTimeJob.cs @@ -46,7 +46,10 @@ public class CreateSyncServerDateTimeJob : BaseJob } else { - if (deviceTask.Status == DeviceTaskStatusEnumType.Success) + if (deviceTask.Status == DeviceTaskStatusEnumType.Success + || (deviceTask.Status == DeviceTaskStatusEnumType.Process + && deviceTask.ModifiedTime.AddMinutes(10) > DateTime.Now) + ) { deviceTask.Status = DeviceTaskStatusEnumType.Wait; deviceTask.Version = 0; diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs index 881fb7d3..2dc4f35a 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs @@ -241,21 +241,12 @@ public class AssignmentService : IAssignmentService private async Task> GetDataAsync(DeviceTaskGetRequest request) { - var limitTime = DateTime.Now.AddDays(-3); - var limitData = await _dbContext.Queryable().Where(x => x.ModifiedTime >= limitTime).OrderBy(x => x.ModifiedTime).FirstAsync(); - if (limitData == null) + (long? startId, List otherIds) = await GetStartIdAndOtherIdsAsync(request.DeviceUniqueNo); + if (!startId.HasValue && otherIds.IsEmpty()) { return new List(); } - var startId = limitData.Id; - - var otherIds = await _dbContext.Queryable().Where(x => x.DeviceUniqueNo == request.DeviceUniqueNo) - .Where(x => x.Type == DeviceTaskEnumType.UploadRecord || x.Type == DeviceTaskEnumType.SyncDateTime) - .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) - .Select(x => x.Id) - .ToListAsync(); - var data = await CommonHelper.RetryAsync(async () => { var rows = await _dbContext.Queryable() @@ -264,21 +255,24 @@ public class AssignmentService : IAssignmentService .LeftJoin((deviceTask, device, ga, gaLeave) => deviceTask.UserNo == gaLeave.No) .LeftJoin((deviceTask, device, ga, gaLeave, department) => department.No == ga.DepartmentNo) .LeftJoin((deviceTask, device, ga, gaLeave, department, deviceRegistry) => deviceRegistry.DeviceUniqueNo == deviceTask.DeviceUniqueNo) - .Where((deviceTask, device) => + .WhereIF(startId.HasValue, (deviceTask, device) => (deviceTask.Id >= startId || otherIds.Contains(deviceTask.Id)) && deviceTask.DeviceUniqueNo == request.DeviceUniqueNo - ) + ).WhereIF(!startId.HasValue, (deviceTask, device) => + otherIds.Contains(deviceTask.Id) + && deviceTask.DeviceUniqueNo == request.DeviceUniqueNo) .WhereIF(!request.IsProcess, deviceTask => deviceTask.Status == DeviceTaskStatusEnumType.Wait) .WhereIF(request.IsProcess, deviceTask => deviceTask.Status == DeviceTaskStatusEnumType.Process - && SqlFunc.DateDiff(DateType.Minute, deviceTask.ModifiedTime, DateTime.Now) > 10) + && SqlFunc.DateDiff(DateType.Minute, deviceTask.ModifiedTime, DateTime.Now) > 10 + && deviceTask.Version < 10 + ) .WhereIF(request.Types.IsPresent(), deviceTask => request.Types.Contains(deviceTask.Type)) - .Where(deviceTask => deviceTask.Version < 10) -#if !DEBUG .Where((deviceTask, device, ga, gaLeave, department, deviceRegistry) => - device.HeartbeatInterval == 0 || SqlFunc.DateAdd(deviceRegistry.LastHeartbeatTime, device.HeartbeatInterval, DateType.Second) > DateTime.Now) -#endif + device.HeartbeatInterval == 0 + || SqlFunc.DateAdd(deviceRegistry.LastHeartbeatTime, device.HeartbeatInterval * 3, DateType.Second) > DateTime.Now + ) .Where((deviceTask, device) => device.Enable) - .OrderBy(deviceTask => new { deviceTask.CreateTime, Priority = SqlFunc.Desc(deviceTask.Priority) }) + .OrderBy(deviceTask => new { deviceTask.Id, Priority = SqlFunc.Desc(deviceTask.Priority) }) .Select((deviceTask, device, ga, gaLeave, department) => new TaskDto { UserId = deviceTask.UserId == 0 || deviceTask.UserId == null @@ -336,6 +330,39 @@ public class AssignmentService : IAssignmentService return data; } + + private async Task<(long? StartId, List OtherIds)> GetStartIdAndOtherIdsAsync(string deviceUniqueNo) + { + var limitTime = DateTime.Now.AddDays(-3); + var types = new List + { + DeviceTaskEnumType.UploadRecord, + DeviceTaskEnumType.SyncDateTime + }; + + //排除UploadRecord,SyncDateTime的任务,获取最近的任务ID + var limitData = await _dbContext.Queryable() + .Where(x => x.ModifiedTime >= limitTime) + .Where(x => x.DeviceUniqueNo == deviceUniqueNo) + .Where(x => !types.Contains(x.Type)) + .OrderBy(x => x.Id) + .Select(x => new { x.Id }) + .FirstAsync(); + + var startId = limitData?.Id; + + //获取其他任务ID + var otherIds = await _dbContext.Queryable() + .Where(x => x.DeviceUniqueNo == deviceUniqueNo) + .Where(x => types.Contains(x.Type)) + .Where(x => x.Status == DeviceTaskStatusEnumType.Wait) + .Select(x => x.Id) + .ToListAsync(); + + return (startId, otherIds); + } + + /// /// 处理获取上传记录的任务 ///