fix 简化设备上传记录接口

This commit is contained in:
2024-07-02 13:53:05 +08:00
parent 0646fa59a2
commit 955a411b2c

View File

@@ -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)