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

209 lines
7.7 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using VOL.Business.IServices;
using VOL.Business.IServices.School;
using VOL.Business.Services;
using VOL.Business.Services.Norm;
using VOL.Business.Services.School;
using VOL.Core.Filters;
using VOL.Core.ManageUser;
using VOL.Core.Utilities;
using VOL.Model;
using VOL.Model.Norm.Request;
using VOL.Model.Norm.Response;
using VOL.WebApi.HostedService;
namespace VOL.WebApi.Controllers.Business
{
/// <summary>
/// 赛事管理
/// </summary>
[Route("api/[controller]")]
[ApiController]
[ApiExplorerSettings(GroupName = "v3")]
//[TypeFilter(typeof(CustomApiResponseFilter))]
public class ActivitiesController : ControllerBase
{
#region
private readonly IG_ActivitiesService _activitiesService;
private readonly IServiceProvider _serviceProvider;
public ActivitiesController(IG_ActivitiesService activitiesService, IServiceProvider serviceProvider)
{
_activitiesService = activitiesService;
_serviceProvider = serviceProvider;
}
#endregion
/// <summary>
/// 赛事列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetActivitiesPageList))]
public async Task<PageDataDto<ActivitiesListModel>> GetActivitiesPageList(ActivitiesPageListParam paramDto)
{
return await _activitiesService.GetActivitiesPageList(paramDto);
}
/// <summary>
/// 详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost(nameof(GetActivitiesDetails))]
public async Task<ActivitiesDetailsModel> GetActivitiesDetails(int id)
{
return await _activitiesService.GetActivitiesDetails(id);
}
/// <summary>
/// 获取项目类型
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetActivitiesCategoryList))]
public List<ActivitiesCategoryModel> GetActivitiesCategoryList()
{
return _activitiesService.GetActivitiesCategoryList();
}
/// <summary>
/// 学生详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost(nameof(GetActivitiesStudentDetails))]
public async Task<List<ActivitiesStudentDetailsModel>> GetActivitiesStudentDetails(int classId, int activitiesId)
{
return await _activitiesService.GetActivitiesStudentDetails(classId, activitiesId);
}
/// <summary>
/// 赛事统计列表
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetActivitiesStatisticsPageList))]
public async Task<PageDataDto<ActivitiesStatisticsModel>> GetActivitiesStatisticsPageList(ActivitiesStatisticsPageListParam paramDto)
{
return await _activitiesService.GetActivitiesStatisticsPageList(paramDto);
}
/// <summary>
/// 赛事统计详情
/// </summary>
/// <returns></returns>
[HttpGet(nameof(GetActivitiesStatisticsDetails))]
public async Task<List<ActivitiesStatisticsDetailsModel>> GetActivitiesStatisticsDetails(ActivitiesStatisticsDetailsParam paramDto)
{
return await _activitiesService.GetActivitiesStatisticsDetails(paramDto);
}
/// <summary>
/// 赛事统计详情导出
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpGet(nameof(ActivitiesStatisticsDetailsExport))]
public async Task<ActionResult> ActivitiesStatisticsDetailsExport(ActivitiesStatisticsDetailsParam paramDto)
{
var rseList = await _activitiesService.GetActivitiesStatisticsDetails(paramDto);
var disList = new Dictionary<string, List<ActivitiesStatisticsDetailsModel>>();
disList.Add("赛事统计详情列表", rseList);
var exportColumns = Tool.GetPropertyNames<ActivitiesStatisticsDetailsModel>();
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>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpPost(nameof(Add))]
public async Task<ActionResult> Add([FromBody] ActivitiesDetailsParam paramDto)
{
var activitiesId = await _activitiesService.AddActivities(paramDto);
var quartzStartup = _serviceProvider.GetRequiredService<QuartzStartup>();
await quartzStartup.ScheduleActivityJobs(activitiesId.ToString(), paramDto.StartDate, paramDto.EndDate);
return Ok("新增成功");
}
/// <summary>
/// 更新
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpPost(nameof(Modify))]
public async Task<ActionResult> Modify([FromBody] ActivitiesDetailsParam paramDto)
{
await _activitiesService.ModifyActivities(paramDto);
var quartzStartup = _serviceProvider.GetRequiredService<QuartzStartup>();
await quartzStartup.UpdateActivityJobs(paramDto.Id.ToString(), paramDto.StartDate, paramDto.EndDate);
await quartzStartup.ScheduleActivityJobs(paramDto.Id.ToString(), paramDto.StartDate, paramDto.EndDate);
return Ok("更新成功");
}
/// <summary>
/// 上传活动照片
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
[HttpPost(nameof(UploadActivitiesImage))]
public string UploadActivitiesImage(IFormFile file)
{
var url = _activitiesService.UploadActivitiesImage(file);
return url;
}
/// <summary>
/// 批量删除
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpPost(nameof(BatchDelete))]
public async Task<ActionResult> BatchDelete([FromBody] List<int> Ids)
{
await _activitiesService.DeleteActivities(Ids);
return Ok("删除成功");
}
/// <summary>
/// 导出
/// </summary>
/// <param name="paramDto"></param>
/// <returns></returns>
[HttpGet(nameof(Export))]
public async Task<ActionResult> Export(ActivitiesExportParam paramDto)
{
var rseList = await _activitiesService.GetActivitiesList(paramDto);
var disList = new Dictionary<string, List<ActivitiesListModel>>
{
{ "赛事列表", rseList }
};
var exportColumns = Tool.GetPropertyNames<ActivitiesListModel>();
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")}");
}
}
}