fix: 移除循环
This commit is contained in:
@@ -212,46 +212,50 @@ public class AssignmentService : IAssignmentService
|
|||||||
|
|
||||||
public async Task<ElevatorAcsDeviceTaskToDeviceByDeviceResponse> GetElevatorAcsTaskAsync(string deviceUniqueNo, string userCode)
|
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 virtualDeviceUniqueNos = elevatorAcsFloors.Select(x => x.VirtualDeviceUniqueNo).ToList();
|
||||||
|
|
||||||
var deviceCodes = await _gainfoPermissionApi.GetPermissionsDeviceCodesAsync(userCode);
|
var floorAcsValues = elevatorAcsFloors.Select(x => x.AcsValue).Distinct().ToList();
|
||||||
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 all = await CommonHelper.RetryAsync(async () =>
|
var all = await CommonHelper.RetryAsync(async () =>
|
||||||
{
|
{
|
||||||
var internalAll = new List<long>();
|
var taskIds = await _dbContext.Queryable<DeviceTaskEntity>()
|
||||||
|
.LeftJoin<DeviceEntity>((deviceTask, device) => deviceTask.DeviceUniqueNo == device.UniqueNo)
|
||||||
foreach (var virtualDeviceUniqueNo in virtualDeviceUniqueNos)
|
.Where((deviceTask, device) => deviceTask.UserNo == userInfo.UserNo)
|
||||||
{
|
.Where((deviceTask, device) => virtualDeviceUniqueNos.Contains(deviceTask.DeviceUniqueNo))
|
||||||
var taskIds = await _dbContext.Queryable<DeviceTaskEntity>()
|
.Where((deviceTask, device) => device.Enable)
|
||||||
.LeftJoin<DeviceEntity>((deviceTask, device) => deviceTask.DeviceUniqueNo == device.UniqueNo)
|
.Where(deviceTask => (deviceTask.Status == DeviceTaskStatusEnumType.Wait || deviceTask.Status == DeviceTaskStatusEnumType.Process) && !string.IsNullOrEmpty(deviceTask.UserNo))
|
||||||
.Where((deviceTask, device) => deviceTask.DeviceUniqueNo == virtualDeviceUniqueNo)
|
.OrderBy(deviceTask => new { deviceTask.Id, Priority = SqlFunc.Desc(deviceTask.Priority) })
|
||||||
.Where((deviceTask, device) => device.Enable)
|
.Select((deviceTask, device) => deviceTask.Id)
|
||||||
.Where(deviceTask => (deviceTask.Status == DeviceTaskStatusEnumType.Wait || deviceTask.Status == DeviceTaskStatusEnumType.Process) && !string.IsNullOrEmpty(deviceTask.UserNo))
|
.ToListAsync();
|
||||||
.OrderBy(deviceTask => new { deviceTask.Id, Priority = SqlFunc.Desc(deviceTask.Priority) })
|
|
||||||
.Select((deviceTask, device) => deviceTask.Id)
|
|
||||||
.ToListAsync();
|
|
||||||
|
|
||||||
internalAll.AddRange(taskIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
var effect = await _dbContext.Updateable<DeviceTaskEntity>()
|
var effect = await _dbContext.Updateable<DeviceTaskEntity>()
|
||||||
.SetColumns(x => x.Status == DeviceTaskStatusEnumType.Process)
|
.SetColumns(x => x.Status == DeviceTaskStatusEnumType.Process)
|
||||||
.SetColumns(x => x.ModifiedTime == DateTime.Now)
|
.SetColumns(x => x.ModifiedTime == DateTime.Now)
|
||||||
.Where(x => internalAll.Contains(x.Id))
|
.Where(x => taskIds.Contains(x.Id))
|
||||||
.ExecuteCommandAsync();
|
.ExecuteCommandAsync();
|
||||||
|
|
||||||
if (effect != internalAll.Count)
|
if (effect != taskIds.Count)
|
||||||
{
|
{
|
||||||
throw new VersionExceptions("version exceptions");
|
throw new VersionExceptions("version exceptions");
|
||||||
}
|
}
|
||||||
|
|
||||||
return internalAll;
|
return taskIds;
|
||||||
|
|
||||||
}, 3);
|
}, 3);
|
||||||
|
|
||||||
@@ -260,15 +264,7 @@ public class AssignmentService : IAssignmentService
|
|||||||
return null;
|
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>()
|
var oldCardNo = await _dbContext.Queryable<GainfoCardRecordEntity>()
|
||||||
.Where(x => x.UserNo == userInfo.UserCode)
|
.Where(x => x.UserNo == userInfo.UserCode)
|
||||||
|
|||||||
Reference in New Issue
Block a user