fix 简化设备上传记录接口
This commit is contained in:
@@ -66,41 +66,39 @@ public class DeviceUploadLogService : IDeviceUploadLogService
|
||||
|
||||
public async Task UploadLogsAsync(List<DeviceUploadLogUploadRequest> requests)
|
||||
{
|
||||
//判断存在的记录
|
||||
Expression<Func<DeviceUploadLogEntity, bool>> where = LinqExpressionExtensions.False<DeviceUploadLogEntity>();
|
||||
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<DeviceEntity>().Where(x => deviceUniqueNos.Contains(x.UniqueNo)).ToListAsync();
|
||||
var existsDeviceUniqueNos = devices.Select(x => x.UniqueNo).ToList();
|
||||
|
||||
//处理冗余的请求数据
|
||||
var exists = await _dbContext.Queryable<DeviceUploadLogEntity>().Where(where).ToListAsync();
|
||||
foreach (var item in exists)
|
||||
var inserts = new List<DeviceUploadLogEntity>();
|
||||
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<DeviceEntity>().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<DeviceUploadLogEntity>().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<SetUploadLogsBeginDateTimeRequest> requests)
|
||||
|
||||
Reference in New Issue
Block a user