2025-06-27 16:03:52 +08:00

194 lines
7.3 KiB
C#

using AutoMapper;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Globalization;
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;
}
/// <summary>
/// 老师新建作业
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
public async Task AddHomeWork(AddHomeWorkDto paramDto)
{
List<S_HomeWork> homeWorkEntities = new List<S_HomeWork>();
string startmmed = paramDto.StartTime.Substring(0, 19);
string endmmed = paramDto.EndTime.Substring(0, 19);
DateTime startDate = DateTime.ParseExact(startmmed, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
DateTime endDate = DateTime.ParseExact(endmmed, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
paramDto.StartTime = startmmed;
var weekList = paramDto.WeekList;
if (!paramDto.IsRepeat)
{
var homeWorkEntity = _mapper.Map<S_HomeWork>(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<S_HomeWork>(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();
}
/// <summary>
/// 老师作业记录
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<PageDataDto<HomeWorkRecordDto>> 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<HomeWorkRecordDto>
{
Total = totalCount,
Datas = list
};
}
/// <summary>
/// 老师作业详情
/// </summary>
/// <param name="homeWorkId"></param>
/// <returns></returns>
public async Task<HomeWorkDetailsDto> 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<List<HomeWorkStudentsDto>>(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;
}
/// <summary>
/// 作业项目列表
/// </summary>
/// <returns></returns>
public async Task<List<CategoryDto>> 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;
}
/// <summary>
/// 星期列表
/// </summary>
/// <returns></returns>
public async Task<List<ComboBoxDto>> WeekList()
{
var res = await _userContext.Week
.Select(x => new ComboBoxDto()
{
Id = x.Id,
Name = x.Name
})
.ToListAsync();
return res;
}
}
}