public async Task SaveObjectAsync(CameraObject @object, Guid deviceKey) { var objects = new List <Object>(); var deviceId = (await _device.GetAsync(deviceKey)) !.DeviceId; var personKeys = @object.Data.Keys.Select(Guid.Parse).ToList(); var persons = await _dbContext.Person .Include(x => x.Group).ThenInclude(x => x.GroupShift) .Where(x => personKeys.Contains(x.Key) && x.IsActive).ToListAsync(); Log.Information("Group date {date}", @object.Date); foreach (var(key, model) in @object.Data) { Log.Information("Saving Object {objectId}, with count {count}", key, model.PersonCount); var dbObject = new Object { CreateDate = DateTime.Now, DeviceId = deviceId, ChannelId = @object.CameraId, PersonKey = Guid.Parse(key), FrameDate = DateTime.Parse(@object.Date), Frame = await SaveImageAsync(model), PersonCount = model.PersonCount }; //FillGroupEntry(persons, dbObject); objects.Add(dbObject); } await _dbContext.Object.AddRangeAsync(objects); await _dbContext.SaveChangesAsync(); }
public RecordModel(Person person, Object @object, ImageSettings settings) { Id = person.Id; FirstName = person.FirstName; LastName = person.LastName; GroupName = person.Group.Name; CreateDate = @object.FrameDate; FramePath = @object.Frame.GetWebPath(settings, ImageType.Object); }
private static void FillGroupEntry(IEnumerable <Person> persons, Object @object) { var person = persons.FirstOrDefault(x => x.Key == @object.PersonKey); var shift = person?.Group.GroupShift.OrderByDescending(x => x.WeekNumber).FirstOrDefault(); if (shift is null || (DateTime.Now < shift.StartDate || DateTime.Now > shift.EndDate)) { return; } shift.GroupEntry.Add(new GroupEntry { Direction = (int)Direction.In, CreateDate = @object.FrameDate, PersonId = person.Id, FrameId = @object.Frame.Id }); }