public async Task <TakeAttendanceByImageResponse> TakeAttendanceByImage(TakeAttendanceByImageRequest request) { var response = await _businessLogic.TakeAttendanceByImage(request); return(response); }
public async Task <TakeAttendanceByImageResponse> TakeAttendanceByImage(TakeAttendanceByImageRequest request) { TakeAttendanceByImageResponse response = new TakeAttendanceByImageResponse(); var rootImages = new List <RootImage>(); var locationImagePath = Path.Combine(HttpRuntime.AppDomainAppPath, Constants.Config.AttendanceImagePath, request.Date.ToString("yyyyMMdd"), request.ClassId, request.SlotId.ToString()); ImageConverter.CreateDirectory(locationImagePath); int numberOfImage = 1; await Task.Run(async() => { foreach (var imageUrl in request.ImageUrls) { var image = await GetImages(imageUrl); rootImages.Add(image); //save image to folder ImageConverter.Base64ToImage(Path.Combine(locationImagePath, numberOfImage + ".jpg"), imageUrl); numberOfImage++; } }); var listCandidateId = new List <string>(); try { foreach (var rootImage in rootImages) { foreach (var image in rootImage.Images) { if (image.Candidates != null && image.Transaction.Status.Equals(Constants.KairosApi.TransactionSuccess)) { var firstCandidate = image.Candidates.OrderByDescending(c => c.Confidence).First(); listCandidateId.Add(firstCandidate.SubjectId); } } } } catch (Exception e) { Console.WriteLine(e.Message); } listCandidateId = listCandidateId.Distinct().ToList(); var studentList = (from sd in _context.Schedules where sd.TeacherId == request.UserId && sd.Date == request.Date && sd.SlotId == request.SlotId select sd).ToList(); List <StudentAttendance> students = new List <StudentAttendance>(); foreach (var student in studentList) { if (listCandidateId.Any(x => x.Equals(student.StudentId))) { student.AttendanceStatus = Constants.AttendanceStatus.Presented; } else { student.AttendanceStatus = Constants.AttendanceStatus.Absent; } var studentAttendance = (from st in _context.Students where st.StudentId == student.StudentId select new StudentAttendance() { StudentId = st.StudentId, FullName = st.FullName, Email = st.Email, AttendanceStatus = student.AttendanceStatus }).First(); students.Add(studentAttendance); } _context.SaveChanges(); response.Students = students; return(response); }