using AutoMapper; using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using YD_WeChatApplet.Api.SmartSportsEntitys; using YD_WeChatApplet.Api.Utilities; using YD_WeChatApplet.Commons.Dto; using YD_WeChatApplet.Commons.Dto.HomeWork; using YD_WeChatApplet.Commons.Dto.School; using YD_WeChatApplet.Commons.Enum; using YD_WeChatApplet.Context; using YD_WeChatApplet.Services; namespace YD_WeChatApplet.Api.Services.Impl { public class HomeWorkService : IHomeWorkService { public SmartSportsContext _sportsContext; public UserContext _userContext; private readonly IMapper _mapper; public HomeWorkService(SmartSportsContext sportsContext, UserContext userContext, IMapper mapper) { _sportsContext = sportsContext; _userContext = userContext; _mapper = mapper; } /// /// 老师新建作业 /// /// /// public async Task AddHomeWork(AddHomeWorkDto paramDto) { List homeWorkEntities = new List(); DateTime startDate = paramDto.StartTime; DateTime endDate = paramDto.EndTime; var weekList = paramDto.WeekList; if (!paramDto.IsRepeat) { var homeWorkEntity = _mapper.Map(paramDto); homeWorkEntity.SchoolCode = UserLoginContext.Current.SchoolCode; homeWorkEntity.TeacherId = UserLoginContext.Current.UserId; homeWorkEntity.TeacherName = UserLoginContext.Current.UserName; homeWorkEntity.WorkStatus = 1; homeWorkEntity.CreateTime = DateTime.Now; homeWorkEntity.StartTime = startDate; homeWorkEntity.EndTime = endDate; var workModeTypeText = paramDto.WorkModeType == WorkModeType.TimerCount ? paramDto.Duration + "秒" : paramDto.Amount + "个"; homeWorkEntity.WorkText = $"{paramDto.WorkModeTypeName} {workModeTypeText} 组数:{paramDto.GroupNumber}组"; homeWorkEntities.Add(homeWorkEntity); } else { for (var currentDate = startDate; currentDate <= endDate; currentDate = currentDate.AddDays(1)) { if (weekList.Contains((currentDate.DayOfWeek == 0 ? 7 : (int)currentDate.DayOfWeek))) { var homeWorkEntity = _mapper.Map(paramDto); homeWorkEntity.SchoolCode = UserLoginContext.Current.SchoolCode; homeWorkEntity.TeacherId = UserLoginContext.Current.UserId; homeWorkEntity.TeacherName = UserLoginContext.Current.UserName; homeWorkEntity.WorkStatus = 1; homeWorkEntity.CreateTime = DateTime.Now; homeWorkEntity.StartTime = currentDate.Date; homeWorkEntity.EndTime = currentDate.Date.AddDays(1).AddSeconds(-1); var workModeTypeText = paramDto.WorkModeType == WorkModeType.TimerCount ? paramDto.Duration + "秒" : paramDto.Amount + "个"; homeWorkEntity.WorkText = $"{paramDto.WorkModeTypeName} {workModeTypeText} 组数:{paramDto.GroupNumber}组"; homeWorkEntities.Add(homeWorkEntity); } } } await _sportsContext.AddRangeAsync(homeWorkEntities); await _sportsContext.SaveChangesAsync(); } /// /// 老师作业记录 /// /// /// public async Task> HomeWorkRecordByTeacher(PageDto dto) { var userId = UserLoginContext.Current.UserId; var currentTime = DateTime.Now; var query = _sportsContext.HomeWork .Where(x => x.TeacherId == userId); var totalCount = await query.CountAsync(); var list = await query .Select(x => new HomeWorkRecordDto() { Id = x.Id, WorkName = x.WorkName, WorkTypeName = x.WorkTypeName, WorkStatus = x.EndTime < currentTime ? 3 : (x.StartTime > currentTime ? 1 : 2), StartTime = x.StartTime, EndTime = x.EndTime }) .OrderByDescending(x => x.Id) .Skip((dto.PageIndex - 1) * dto.PageSize) .Take(dto.PageSize) .ToListAsync(); return new PageDataDto { Total = totalCount, Datas = list }; } /// /// 老师作业详情 /// /// /// public async Task HomeWorkDetailsByTeacher(int homeWorkId) { var res = await _sportsContext.HomeWork.Where(x => x.Id == homeWorkId).Select(x => new HomeWorkDetailsDto() { Id = x.Id, WorkName = $"{x.WorkName}-{x.WorkType.GetDescription()}", StartTime = x.StartTime, EndTime = x.EndTime, StudentScope = x.StudentScope == 1 ? "全部学生" : "部分学生", WorkText = x.WorkText, WorkModeType = x.WorkModeType, HomeWorkStudents = _mapper.Map>(x.HomeWorkStudents), }).FirstAsync(); foreach (var item in res.HomeWorkStudents) { if (res.WorkModeType == WorkModeType.TimerCount) item.Result = $"{item.Value}个"; else item.Result = item.Value.ToMinutesSeconds(); } return res; } /// /// 作业项目列表 /// /// public async Task> HomeWorkCategoryList() { var res = await _userContext.Category .Select(x => new CategoryDto() { Id = x.Id, Name = x.CategoryName, CategoryKey = x.CategoryKey, KcalIndex = x.KcalIndex }) .ToListAsync(); return res; } /// /// 星期列表 /// /// public async Task> WeekList() { var res = await _userContext.Week .Select(x => new ComboBoxDto() { Id = x.Id, Name = x.Name }) .ToListAsync(); return res; } } }