using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Tiku.Api.Contracts; using Tiku.Application.Auth; using Tiku.Application.Catalog; using Tiku.Application.Content; using Tiku.Application.Security; using Tiku.Application.TenantAdmin; namespace Tiku.Api.Controllers; [ApiController] [Tags("租户端-运营管理")] [Produces("application/json")] [Route("api/tenant")] public sealed class TenantSupervisionController( ITenantSupervisionService supervisionService, TenantAdminActorResolver actorResolver) : ControllerBase { [HttpGet("students/supervision/rules")] [Authorize(Policy = BackendPermissions.TenantStudentManage)] [EndpointSummary("查询学习督导规则")] [ProducesResponseType>(StatusCodes.Status200OK)] public async Task>> SupervisionRules( CancellationToken cancellationToken) { return Ok(await supervisionService.GetSupervisionRulesAsync(actorResolver.Resolve(), cancellationToken)); } [HttpPut("students/supervision/rules")] [Authorize(Policy = BackendPermissions.TenantStudentManage)] [EndpointSummary("新增或更新学习督导规则")] [ProducesResponseType>(StatusCodes.Status200OK)] public async Task>> UpsertSupervisionRule( UpsertTenantSupervisionRuleDto request, CancellationToken cancellationToken) { return Ok(await supervisionService.UpsertSupervisionRuleAsync(actorResolver.Resolve(), request.ToCommand(), cancellationToken)); } [HttpGet("students/supervision/preview")] [Authorize(Policy = BackendPermissions.TenantStudentManage)] [EndpointSummary("预览学习风险学生")] [ProducesResponseType(StatusCodes.Status200OK)] public async Task> PreviewSupervision(CancellationToken cancellationToken) { return Ok(await supervisionService.PreviewSupervisionAsync(actorResolver.Resolve(), cancellationToken)); } [HttpPost("students/supervision/generate")] [Authorize(Policy = BackendPermissions.TenantStudentManage)] [EndpointSummary("批量生成学习督导跟进任务")] [ProducesResponseType(StatusCodes.Status200OK)] public async Task> GenerateSupervision( TenantSupervisionGenerateDto request, CancellationToken cancellationToken) { return Ok(await supervisionService.GenerateSupervisionFollowupsAsync(actorResolver.Resolve(), request.ToCommand(), cancellationToken)); } [HttpGet("student-followups/report")] [Authorize(Policy = BackendPermissions.TenantStudentManage)] [EndpointSummary("查询学生跟进统计报表")] [ProducesResponseType(StatusCodes.Status200OK)] public async Task> FollowupReport(CancellationToken cancellationToken) { return Ok(await supervisionService.GetFollowupReportAsync(actorResolver.Resolve(), cancellationToken)); } [HttpGet("feedbacks/report")] [Authorize(Policy = BackendPermissions.TenantStudentManage)] [EndpointSummary("查询反馈处理统计报表")] [ProducesResponseType(StatusCodes.Status200OK)] public async Task> FeedbackReport(CancellationToken cancellationToken) { return Ok(await supervisionService.GetFeedbackReportAsync(actorResolver.Resolve(), cancellationToken)); } [HttpGet("points/risk-report")] [Authorize(Policy = BackendPermissions.TenantStudentManage)] [EndpointSummary("查询积分风险统计报表")] [ProducesResponseType(StatusCodes.Status200OK)] public async Task> PointRiskReport(CancellationToken cancellationToken) { return Ok(await supervisionService.GetPointRiskReportAsync(actorResolver.Resolve(), cancellationToken)); } }