fix: 移除循环

This commit is contained in:
2026-05-13 17:26:41 +08:00
parent 9e599f183a
commit 7dc200ad36

View File

@@ -212,46 +212,50 @@ public class AssignmentService : IAssignmentService
public async Task<ElevatorAcsDeviceTaskToDeviceByDeviceResponse> GetElevatorAcsTaskAsync(string deviceUniqueNo, string userCode)
{
var elevatorAcsFloors = await _dbContext.Queryable<ElevatorAcsFloorEntity>().Where(x => x.RealDeviceUniqueNo == deviceUniqueNo).ToListAsync();
var userInfo = await _dbContext.Queryable<GainfoEntity>()
.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<GainfoLeaveEntity>()
.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<ElevatorAcsFloorEntity>()
.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<DeviceEntity>()
.LeftJoin<ElevatorAcsFloorEntity>((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<long>();
foreach (var virtualDeviceUniqueNo in virtualDeviceUniqueNos)
{
var taskIds = await _dbContext.Queryable<DeviceTaskEntity>()
.LeftJoin<DeviceEntity>((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<DeviceTaskEntity>()
.LeftJoin<DeviceEntity>((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<DeviceTaskEntity>()
.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<GainfoEntity>()
.Where(x => x.Code == userCode)
.Select(x => new { UserId = x.Id, UserCode = x.Code, UserName = x.Name, x.CardNo })
.FirstAsync()
??
await _dbContext.Queryable<GainfoLeaveEntity>()
.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<GainfoCardRecordEntity>()
.Where(x => x.UserNo == userInfo.UserCode)