2025-06-06 16:55:14 +08:00

396 lines
15 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using VOL.Business.IServices.School;
using VOL.Business.IServices.Training;
using VOL.Business.Services.School;
using VOL.Business.Services.Training;
using VOL.Core.Filters;
using VOL.Core.Utilities;
using VOL.Entity.Enum;
using VOL.Model;
using VOL.Model.Ai;
using VOL.Model.IOT.Response;
using VOL.Model.School.Request;
using VOL.Model.Training.Response;
using VOL.WebApi.Filter;
namespace VOL.WebApi.Controllers.Business
{
/// <summary>
/// 课程训练
/// </summary>
[Route("api/[controller]")]
[ApiController]
[ApiExplorerSettings(GroupName = "v3")]
[TypeFilter(typeof(CustomApiResponseFilter))]
public class TrainingDataController : ControllerBase
{
#region
private readonly II_TrainingDataService _trainingDataService;
public TrainingDataController(
II_TrainingDataService trainingDataService)
{
_trainingDataService = trainingDataService;
}
#endregion
#region
/// <summary>
/// 获取年级对应测试项目
/// </summary>
/// <param name="gradeId"></param>
/// <returns></returns>
[HttpGet(nameof(GetCategoryColumnNameList))]
public async Task<List<CategoryColumnNameModel>> GetCategoryColumnNameList(int gradeId)
{
return await _trainingDataService.GetCategoryColumnNameList(gradeId);
}
/// <summary>
/// 训练项目类型
/// </summary>
/// <returns></returns>
[HttpGet(nameof(ItemTypeList))]
public async Task<DataTypeAndCategory> ItemTypeList()
{
return await _trainingDataService.ItemTypeList();
}
/// <summary>
/// 体测项目类型
/// </summary>
/// <returns></returns>
[HttpGet(nameof(CategoryList))]
public async Task<DataTypeAndCategory> CategoryList()
{
return await _trainingDataService.CategoryList();
}
#endregion
#region
/// <summary>
/// 训练数据-课堂模式列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetTrainingClassRoomModeDataList))]
public async Task<PageDataDto<ClassRoomModeDataModel>> GetTrainingClassRoomModeDataList(ClassRoomModeDataParam paramDto)
{
return await _trainingDataService.GetTrainingClassRoomModeDataList(paramDto);
}
/// <summary>
/// 训练数据-课堂模式导出
/// </summary>
/// <returns></returns>
[HttpGet(nameof(ClassRoomModeDataExport))]
public async Task<ActionResult> ClassRoomModeDataExport(ClassRoomModeExportParam paramDto)
{
var rseList = await _trainingDataService.GetTrainingClassRoomModeDataExport(paramDto);
var disList = new Dictionary<string, List<ClassRoomModeDataModel>>
{
{ "课堂模式训练数据", rseList }
};
var exportColumns = Tool.GetPropertyNames<ClassRoomModeDataModel>();
var excelBytes = Tool.ExportToExcel(disList, exportColumns);
Response.Headers.Add("Content-Disposition", "attachment; filename=ExportedData.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"课堂模式训练数据{DateTime.Now.ToString("yyyyMMddHHmmss")}");
}
/// <summary>
/// 训练数据-课堂模式详情分页
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetClassRoomModeDataDetails))]
public async Task<PageDataDto<ClassRoomModeDataDetails>> GetClassRoomModeDataDetails(ClassRoomModeDataDetailsParam paramDto)
{
return await _trainingDataService.GetClassRoomModeDataDetails(paramDto);
}
/// <summary>
/// 训练数据-课堂模式详情导出
/// </summary>
/// <returns></returns>
[HttpGet(nameof(ClassRoomModeDataDetailsExport))]
public async Task<ActionResult> ClassRoomModeDataDetailsExport(ClassRoomModeDataExportParam paramDto)
{
var rseList = await _trainingDataService.ClassRoomModeDataDetailsExport(paramDto);
var disList = new Dictionary<string, List<ClassRoomModeDataDetails>>
{
{ "课堂模式训练详情数据", rseList }
};
var exportColumns = Tool.GetPropertyNames<ClassRoomModeDataDetails>();
var excelBytes = Tool.ExportToExcel(disList, exportColumns);
Response.Headers.Add("Content-Disposition", "attachment; filename=ExportedData.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"课堂模式训练详情数据{DateTime.Now.ToString("yyyyMMddHHmmss")}");
}
#endregion
#region
/// <summary>
/// 自由模式列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetFreeModeDataList))]
public async Task<PageDataDto<FreeModeDataModel>> GetFreeModeDataList(FreeModeDataParam paramDto)
{
return await _trainingDataService.FreeModeDataList(paramDto);
}
/// <summary>
/// 自由模式导出
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpGet(nameof(GetFreeModeDataExport))]
public async Task<ActionResult> GetFreeModeDataExport(FreeModeDataExportParam paramDto)
{
var rseList = await _trainingDataService.FreeModeDataExport(paramDto);
var disList = new Dictionary<string, List<FreeModeDataModel>>
{
{ "自由模式列表导出", rseList }
};
var exportColumns = Tool.GetPropertyNames<FreeModeDataModel>();
var excelBytes = Tool.ExportToExcel(disList, exportColumns);
Response.Headers.Add("Content-Disposition", "attachment; filename=ExportedData.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"自由模式列表导出{DateTime.Now.ToString("yyyyMMddHHmmss")}");
}
#endregion
#region
/// <summary>
/// 体测数据-课堂模式列表
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpGet(nameof(GetTestClassRoomModeDataList))]
public async Task<PageDataDto<ClassRoomModeDataModel>> GetTestClassRoomModeDataList(ClassRoomModeDataParam paramDto)
{
return await _trainingDataService.GetTestClassRoomModeDataList(paramDto);
}
/// <summary>
/// 体测数据-课堂模式导出
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpGet(nameof(SportsTestDataExport))]
public async Task<ActionResult> SportsTestDataExport(ClassRoomModeExportParam paramDto)
{
var rseList = await _trainingDataService.SportsTestDataExport(paramDto);
var disList = new Dictionary<string, List<ClassRoomModeDataModel>>
{
{ "课堂模式体测成绩数据导出", rseList }
};
var exportColumns = Tool.GetPropertyNames<ClassRoomModeDataModel>();
var excelBytes = Tool.ExportToExcel(disList, exportColumns);
Response.Headers.Add("Content-Disposition", "attachment; filename=ExportedData.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"体测成绩数据导出{DateTime.Now.ToString("yyyyMMddHHmmss")}");
}
/// <summary>
/// 体测数据-课堂模式详情列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetSportsTestDetails))]
public async Task<PageDataDto<SportsTestDetailsModel>> GetSportsTestDetails(SportsTestDetailsParam paramDto)
{
return await _trainingDataService.GetSportsTestDetails(paramDto);
}
/// <summary>
/// 体测数据-课堂模式详情导出
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpGet(nameof(SportsTestDetailsExport))]
public async Task<ActionResult> SportsTestDetailsExport(SportsTestExportParam paramDto)
{
var rseList = await _trainingDataService.GetSportsTestDetailsExport(paramDto);
var disList = new Dictionary<string, List<SportsTestDetailsModel>>
{
{ "课堂模式体测成绩详情列表导出", rseList }
};
var exportColumns = Tool.GetPropertyNames<SportsTestDetailsModel>();
var excelBytes = Tool.ExportToExcel(disList, exportColumns);
Response.Headers.Add("Content-Disposition", "attachment; filename=ExportedData.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"体测成绩详情列表导出{DateTime.Now.ToString("yyyyMMddHHmmss")}");
}
/// <summary>
/// 体测数据-总体数据列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetOverallDataPageList))]
public async Task<PageDataDto<dynamic>> GetOverallDataPageList(GetOverallDataPageListParam paramDto)
{
return await _trainingDataService.GetOverallDataPageList(paramDto);
}
/// <summary>
/// 体测数据-总体数据导出
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpGet(nameof(GetOverallDataExport))]
public async Task<ActionResult> GetOverallDataExport(GetOverallDataExportParam paramDto)
{
var rseList = await _trainingDataService.GetOverallDataExport(paramDto);
var excelName = paramDto.ExportType switch
{
OverallDataExportType.Result => "总体数据导出(体测成绩)",
OverallDataExportType.ScoreAndRank => "总体数据导出(得分和等级)",
OverallDataExportType.AdditionalScore => "总体数据导出(附加分)",
_ => string.Empty
};
var disList = new Dictionary<string, List<Dictionary<string, string>>>
{
{ excelName, rseList }
};
var excelBytes = Tool.DicExportToExcel(disList);
Response.Headers.Add("Content-Disposition", "attachment; filename=ExportedData.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{excelName}{DateTime.Now.ToString("yyyyMMddHHmmss")}");
}
#endregion
#region
/// <summary>
/// 获取导入视力记录模板
/// </summary>
/// <returns></returns>
[HttpPost(nameof(GetImportVisionDataTemplate))]
public ActionResult GetImportVisionDataTemplate()
{
var disList = new Dictionary<string, List<ImportVisionDataParam>>
{
{ "导入视力记录模板", new List<ImportVisionDataParam>() }
};
var exportColumns = Tool.GetPropertyNames<ImportVisionDataParam>();
var excelBytes = Tool.ExportToExcel(disList, exportColumns);
Response.Headers.Add("Content-Disposition", "attachment; filename=ExportedData.xlsx");
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "导入视力记录模板");
}
/// <summary>
/// 导入视力记录
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
[HttpPost(nameof(ImportVisionData))]
public async Task<ActionResult> ImportVisionData(IFormFile file)
{
await _trainingDataService.ImportVisionData(file);
return Ok("导入成功");
}
/// <summary>
/// 视力记录列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetVisionDataList))]
public async Task<PageDataDto<VisionDataModel>> GetVisionDataList(VisionDataListParam paramDto)
{
return await _trainingDataService.GetVisionDataList(paramDto);
}
#endregion
#region
/// <summary>
/// 课堂报告列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetClassReportList))]
public async Task<PageDataDto<ClassReportModel>> GetClassReportList(ClassReportListParam paramDto)
{
return await _trainingDataService.GetClassReportList(paramDto);
}
/// <summary>
/// 课堂报告详情
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetClassReportDetails))]
public async Task<GetClassReportDetailsModel> GetClassReportDetails(int id)
{
return await _trainingDataService.GetClassReportDetails(id);
}
/// <summary>
/// 学生课堂报告详情
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetStudentClassReportDetails))]
public async Task<GetStudentClassReportDetailsModel> GetStudentClassReportDetails(GetStudentClassReportDetailsDto paramDto)
{
return await _trainingDataService.GetStudentClassReportDetails(paramDto);
}
#endregion
#region
/// <summary>
/// 获取用户训练数据列表
/// </summary>
/// <param name="paramDto">查询参数</param>
/// <returns>用户训练数据列表</returns>
[HttpGet(nameof(GetUserTrainingDataList))]
public async Task<PageDataDto<UserTrainingDataModel>> GetUserTrainingDataList([FromQuery] UserTrainingDataQueryParam paramDto)
{
return await _trainingDataService.GetUserTrainingDataList(paramDto);
}
#endregion
}
}