2026-01-19 11:24:22 +08:00

286 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AutoMapper;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using YD_WeChatApplet.Api.Services.Interface;
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.JingShiTiJiao;
using YD_WeChatApplet.Commons.Dto.Patriarch;
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;
private readonly ILogger<HomeWorkService> _logger;
private readonly IJingShiTiJiaoService _jingShiTiJiaoService;
public HomeWorkService(SmartSportsContext sportsContext, UserContext userContext, IMapper mapper, ILogger<HomeWorkService> logger, IJingShiTiJiaoService jingShiTiJiaoService)
{
_sportsContext = sportsContext;
_userContext = userContext;
_mapper = mapper;
_logger = logger;
_jingShiTiJiaoService = jingShiTiJiaoService;
}
/// <summary>
/// 老师新建作业
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
public async Task AddHomeWork(AddHomeWorkDto paramDto)
{
_logger.LogError($"添加作业参数,{JsonConvert.SerializeObject(paramDto)}");
List<S_HomeWork> homeWorkEntities = new List<S_HomeWork>();
string TrimTimeString(string timeStr)
{
if (string.IsNullOrWhiteSpace(timeStr))
return string.Empty;
timeStr = timeStr.Trim();
return timeStr.Length > 19 ? timeStr.Substring(0, 19) : timeStr;
}
string startmmed = TrimTimeString(paramDto.StartTime);
string endmmed = TrimTimeString(paramDto.EndTime);
DateTime.TryParse(startmmed, out var startDate);
DateTime.TryParse(endmmed, out var endDate);
paramDto.StartTime = startmmed;
paramDto.EndTime = endmmed;
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.TeacherNo = UserLoginContext.Current.UserNo;
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.TeacherNo = UserLoginContext.Current.UserNo;
homeWorkEntity.TeacherName = UserLoginContext.Current.UserTrueName;
//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();
_ = Task.Run(async () =>
{
try
{
if (homeWorkEntities == null || homeWorkEntities.Count == 0)
{
_logger.LogWarning("作业同步任务中,homeWorkEntities 为空");
return;
}
var pushList = new List<SportsDataPushDto>();
foreach (var homeWork in homeWorkEntities)
{
var dto = new SportsDataPushDto
{
StudentNo = UserLoginContext.Current.UserNo,
SportsItem = AppSettings.JingShiTiJiao.SportsItem,
SportsDate = homeWork.StartTime.ToString("yyyy-MM-dd"),
SportsService = AppSettings.JingShiTiJiao.Channel,
SportsScene = "addhomework",
SportsDetail = JsonConvert.SerializeObject(
homeWork,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
}
)
};
pushList.Add(dto);
}
var res = await _jingShiTiJiaoService.PushSportsData(pushList);
if (res)
{
_logger.LogInformation($"作业数据同步成功,共 {pushList.Count} 条");
}
else
{
_logger.LogError($"作业数据同步失败,共 {pushList.Count} 条");
}
}
catch (Exception ex)
{
// ❗ 只记录日志,绝不影响主流程
_logger.LogError(ex, "作业数据上传失败");
}
});
}
/// <summary>
/// 老师作业记录
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<PageDataDto<HomeWorkRecordDto>> HomeWorkRecordByTeacher(PatriarchHomeWorkHistoryDto dto)
{
var userNo = UserLoginContext.Current.UserNo;
var currentTime = DateTime.Now;
var query = _sportsContext.HomeWork
.Where(x => x.TeacherNo == userNo);
switch (dto.WorkStatus)
{
case 1: // 未开始
query = query.Where(x => x.StartTime > currentTime);
break;
case 2: // 进行中
query = query.Where(x => x.StartTime <= currentTime && x.EndTime >= currentTime);
break;
case 3: // 已结束
query = query.Where(x => x.EndTime < currentTime);
break;
default:
break;
}
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),
WorkStatus = dto.WorkStatus,
StartTime = x.StartTime,
EndTime = x.EndTime
})
.OrderByDescending(x => x.EndTime)
.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;
}
}
}