using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using VOL.Business.IServices;
using VOL.Business.Services;
using VOL.Core.Filters;
using VOL.Core.ManageUser;
using VOL.Core.Utilities;
using VOL.Model;
using VOL.Model.Norm.Response;
namespace VOL.WebApi.Controllers.Business
{
///
/// 体测数据
///
[Route("api/[controller]")]
[ApiController]
[ApiExplorerSettings(GroupName = "v3")]
[TypeFilter(typeof(CustomApiResponseFilter))]
public class SportsTestResultController : ControllerBase
{
#region 初始化
private readonly IN_SportsTestResultService _sportsTestResultService;
public SportsTestResultController(
IN_SportsTestResultService sportsTestResultService)
{
_sportsTestResultService = sportsTestResultService;
}
#endregion
///
/// 学生成绩分页
///
///
[HttpGet(nameof(GetSportsTestCategoryPageList))]
public async Task> GetSportsTestCategoryPageList(StudentsTestDataListParam paramDto)
{
return await _sportsTestResultService.GetSportsTestCategoryPageList(paramDto);
}
///
/// 导入学生体测数据
///
///
///
///
[HttpPost(nameof(ImportStudentsTestData))]
public async Task ImportStudentsTestData(IFormFile file)
{
await _sportsTestResultService.ImportStudentsTestData(file);
return Ok("导入成功");
}
///
/// 导出
///
///
///
[HttpGet(nameof(Export))]
public async Task Export(StudentsTestDataListParam paramDto)
{
var rseList = await _sportsTestResultService.GetStudentsTestDataList(paramDto);
var disList = new Dictionary>();
disList.Add("学生成绩", rseList);
var exportColumns = Tool.GetPropertyNames();
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")}");
}
[HttpGet(nameof(ExportSummaryOfGrades))]
public async Task ExportSummaryOfGrades(StudentsTestDataListParam paramDto)
{
var records = await _sportsTestResultService.GetStudentsTestDataList(paramDto);
var rows = records.Select((row, index) => new SummaryOfGradesTestRecordExportModel
{
Index = index + 1,
GradeAndClass = string.Join("-", new[] { row.GradeName, row.ClassName }
.Where(x => !string.IsNullOrWhiteSpace(x))),
StudentName = row.StudentName,
StudentNo = row.StudentNo,
Sex = row.Sex,
CategoryName = row.CategoryName,
TestResult = FormatTestResult(row),
Score = row.Score,
Rank = row.Rank,
ClassRank = row.ClassRank,
ScoreTime = row.ScoreTime.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)
}).ToList();
var columns = new List
{
nameof(SummaryOfGradesTestRecordExportModel.Index),
nameof(SummaryOfGradesTestRecordExportModel.GradeAndClass),
nameof(SummaryOfGradesTestRecordExportModel.StudentName),
nameof(SummaryOfGradesTestRecordExportModel.StudentNo),
nameof(SummaryOfGradesTestRecordExportModel.Sex),
nameof(SummaryOfGradesTestRecordExportModel.CategoryName),
nameof(SummaryOfGradesTestRecordExportModel.TestResult),
nameof(SummaryOfGradesTestRecordExportModel.Score),
nameof(SummaryOfGradesTestRecordExportModel.Rank),
nameof(SummaryOfGradesTestRecordExportModel.ClassRank),
nameof(SummaryOfGradesTestRecordExportModel.ScoreTime)
};
var bytes = Tool.ExportToExcel(
new Dictionary> { ["体测数据记录"] = rows },
columns, autoFitColumns: false);
return File(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"体测数据记录{DateTime.Now:yyyyMMddHHmmss}.xlsx");
}
private static string FormatTestResult(StudentsTestDataModel row)
{
if (row.CategoryValue != 10 && row.CategoryValue != 11)
return row.Value.ToString("0.##", CultureInfo.InvariantCulture);
// Some historical imports contain millisecond values despite the seconds-based category unit.
var seconds = row.Value >= 10000 ? row.Value / 1000d : row.Value;
var totalSeconds = (int)Math.Round(Math.Max(0, seconds), MidpointRounding.AwayFromZero);
return $"{totalSeconds / 60}分{totalSeconds % 60:D2}秒";
}
///
/// 新增
///
///
///
[HttpPost(nameof(Add))]
public async Task Add([FromBody] List paramDto)
{
await _sportsTestResultService.AddStudentsTestData(paramDto);
return Ok("新增成功");
}
///
/// 更新
///
///
///
[HttpPost(nameof(Modify))]
public async Task Modify([FromBody] List paramDto)
{
await _sportsTestResultService.ModifyStudentsTestData(paramDto);
return Ok("更新成功");
}
///
/// 删除
///
///
///
[HttpPost(nameof(Delete))]
public async Task Delete(List ids)
{
await _sportsTestResultService.DeleteStudentsTestData(ids);
return Ok("更新成功");
}
}
}