diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs index 92aec1fd..100cae69 100644 --- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs +++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs @@ -66,41 +66,39 @@ public class DeviceUploadLogService : IDeviceUploadLogService public async Task UploadLogsAsync(List requests) { - //判断存在的记录 - Expression> where = LinqExpressionExtensions.False(); - requests.ForEach(p => { where = where.Or(x => x.DeviceUniqueNo == p.DeviceUniqueNo && x.SerialNo == p.SerialNo && x.RaiseDateTime == p.RaiseDateTime); }); + var deviceUniqueNos = requests.Select(x => x.DeviceUniqueNo).Distinct().ToList(); + var devices = await _dbContext.Queryable().Where(x => deviceUniqueNos.Contains(x.UniqueNo)).ToListAsync(); + var existsDeviceUniqueNos = devices.Select(x => x.UniqueNo).ToList(); - //处理冗余的请求数据 - var exists = await _dbContext.Queryable().Where(where).ToListAsync(); - foreach (var item in exists) + var inserts = new List(); + foreach (var request in requests.Where(x => existsDeviceUniqueNos.Contains(x.DeviceUniqueNo))) { - requests.RemoveAll(x => x.DeviceUniqueNo == item.DeviceUniqueNo && x.SerialNo == item.SerialNo && x.RaiseDateTime == item.RaiseDateTime); - } - - var nos = requests.Select(x => x.DeviceUniqueNo).ToList(); - var devices = await _dbContext.Queryable().Where(x => nos.Contains(x.UniqueNo)).ToListAsync(); - - var records = requests.GroupBy(x => x.DeviceUniqueNo).SelectMany(x => - { - var device = devices.FirstOrDefault(item => item.UniqueNo == x.Key); - if (device != null) + if (await _dbContext.Queryable().Where(x => x.DeviceUniqueNo == request.DeviceUniqueNo + && x.SerialNo == request.SerialNo + && x.RaiseDateTime == request.RaiseDateTime).AnyAsync()) { - return x.Select(item => new DeviceUploadLogEntity - { - DeviceUniqueNo = x.Key, - UserUniqueNo = item.UserUniqueNo, - RaiseDateTime = item.RaiseDateTime, - SerialNo = item.SerialNo, - Type = device.Type == DeviceTypeEnumType.Attendance ? DeviceUploadLogTypeEnumType.Attendance : DeviceUploadLogTypeEnumType.Door, - - TenantId = device.TenantId, - }).ToList(); + continue; } - return null; - }).Where(x => x != null).ToList(); + var device = devices.First(x => x.UniqueNo == request.DeviceUniqueNo); - await _dbContext.InsertAsync(records); + inserts.Add(new DeviceUploadLogEntity + { + DeviceUniqueNo = request.DeviceUniqueNo, + UserUniqueNo = request.UserUniqueNo, + RaiseDateTime = request.RaiseDateTime, + SerialNo = request.SerialNo, + Type = device.Type == DeviceTypeEnumType.Attendance + ? DeviceUploadLogTypeEnumType.Attendance + : device.Type == DeviceTypeEnumType.Door && device.AsAttendance + ? DeviceUploadLogTypeEnumType.Attendance + : DeviceUploadLogTypeEnumType.Door, + + TenantId = device.TenantId + }); + } + + await _dbContext.InsertAsync(inserts); } public async Task SetUploadLogsBeginDateTimeAsync(List requests)