diff --git a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs index 6f8fa930..169d89f5 100644 --- a/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs +++ b/Src/Dlhis.ScheduledTask/TaskAssignment/Services/Implements/AssignmentService.cs @@ -212,46 +212,50 @@ public class AssignmentService : IAssignmentService public async Task GetElevatorAcsTaskAsync(string deviceUniqueNo, string userCode) { - var elevatorAcsFloors = await _dbContext.Queryable().Where(x => x.RealDeviceUniqueNo == deviceUniqueNo).ToListAsync(); + var userInfo = await _dbContext.Queryable() + .Where(x => x.Code == userCode) + .Select(x => new { UserId = x.Id, UserNo = x.No, UserCode = x.Code, UserName = x.Name, x.CardNo }) + .FirstAsync() + ?? + await _dbContext.Queryable() + .Where(x => x.Code == userCode) + .Select(x => new { UserId = x.Id, UserNo = x.No, UserCode = x.Code, UserName = x.Name, x.CardNo }) + .FirstAsync(); + + + var elevatorAcsFloors = await _dbContext.Queryable() + .Where(x => x.RealDeviceUniqueNo == deviceUniqueNo) + .Select(x => new { x.VirtualDeviceUniqueNo, x.AcsValue }) + .ToListAsync(); + var virtualDeviceUniqueNos = elevatorAcsFloors.Select(x => x.VirtualDeviceUniqueNo).ToList(); - var deviceCodes = await _gainfoPermissionApi.GetPermissionsDeviceCodesAsync(userCode); - var floorAcsValues = await _dbContext.Queryable() - .LeftJoin((x, f) => x.UniqueNo == f.VirtualDeviceUniqueNo) - .Where(x => virtualDeviceUniqueNos.Contains(x.UniqueNo) && deviceCodes.Contains(x.Code)) - .Select((x, f) => f.AcsValue) - .ToListAsync(); + var floorAcsValues = elevatorAcsFloors.Select(x => x.AcsValue).Distinct().ToList(); var all = await CommonHelper.RetryAsync(async () => { - var internalAll = new List(); - - foreach (var virtualDeviceUniqueNo in virtualDeviceUniqueNos) - { - var taskIds = await _dbContext.Queryable() - .LeftJoin((deviceTask, device) => deviceTask.DeviceUniqueNo == device.UniqueNo) - .Where((deviceTask, device) => deviceTask.DeviceUniqueNo == virtualDeviceUniqueNo) - .Where((deviceTask, device) => device.Enable) - .Where(deviceTask => (deviceTask.Status == DeviceTaskStatusEnumType.Wait || deviceTask.Status == DeviceTaskStatusEnumType.Process) && !string.IsNullOrEmpty(deviceTask.UserNo)) - .OrderBy(deviceTask => new { deviceTask.Id, Priority = SqlFunc.Desc(deviceTask.Priority) }) - .Select((deviceTask, device) => deviceTask.Id) - .ToListAsync(); - - internalAll.AddRange(taskIds); - } + var taskIds = await _dbContext.Queryable() + .LeftJoin((deviceTask, device) => deviceTask.DeviceUniqueNo == device.UniqueNo) + .Where((deviceTask, device) => deviceTask.UserNo == userInfo.UserNo) + .Where((deviceTask, device) => virtualDeviceUniqueNos.Contains(deviceTask.DeviceUniqueNo)) + .Where((deviceTask, device) => device.Enable) + .Where(deviceTask => (deviceTask.Status == DeviceTaskStatusEnumType.Wait || deviceTask.Status == DeviceTaskStatusEnumType.Process) && !string.IsNullOrEmpty(deviceTask.UserNo)) + .OrderBy(deviceTask => new { deviceTask.Id, Priority = SqlFunc.Desc(deviceTask.Priority) }) + .Select((deviceTask, device) => deviceTask.Id) + .ToListAsync(); var effect = await _dbContext.Updateable() .SetColumns(x => x.Status == DeviceTaskStatusEnumType.Process) .SetColumns(x => x.ModifiedTime == DateTime.Now) - .Where(x => internalAll.Contains(x.Id)) + .Where(x => taskIds.Contains(x.Id)) .ExecuteCommandAsync(); - if (effect != internalAll.Count) + if (effect != taskIds.Count) { throw new VersionExceptions("version exceptions"); } - return internalAll; + return taskIds; }, 3); @@ -260,15 +264,7 @@ public class AssignmentService : IAssignmentService return null; } - var userInfo = await _dbContext.Queryable() - .Where(x => x.Code == userCode) - .Select(x => new { UserId = x.Id, UserCode = x.Code, UserName = x.Name, x.CardNo }) - .FirstAsync() - ?? - await _dbContext.Queryable() - .Where(x => x.Code == userCode) - .Select(x => new { UserId = x.Id, UserCode = x.Code, UserName = x.Name, x.CardNo }) - .FirstAsync(); + var oldCardNo = await _dbContext.Queryable() .Where(x => x.UserNo == userInfo.UserCode)