feat: complete phase six backoffice operations

This commit is contained in:
2026-07-28 14:31:43 +08:00
parent 747ff59d76
commit 99e4e43122
31 changed files with 23504 additions and 26 deletions

View File

@@ -17,6 +17,15 @@ public sealed class TenantAdminDirectController(
ICurrentUser currentUser,
ITenantContext currentTenant) : ControllerBase
{
[HttpGet("overview")]
[Authorize(Policy = BackendPermissions.TenantDashboardView)]
[EndpointSummary("查询租户后台运营概览")]
[ProducesResponseType<TenantAdminOverviewItem>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantAdminOverviewItem>> GetOverview(CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.GetOverviewAsync(ResolveActor(), cancellationToken));
}
[HttpGet("classes")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("查询租户班级")]
@@ -116,6 +125,117 @@ public sealed class TenantAdminDirectController(
return Ok(await tenantAdminService.UpdateStudentStatusAsync(ResolveActor(), request.ToCommand(), cancellationToken));
}
[HttpPost("students/import/preview")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("预览学生批量导入")]
[ProducesResponseType<TenantAdminStudentImportPreview>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantAdminStudentImportPreview>> PreviewStudentImport(
TenantAdminStudentImportDto request,
CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.PreviewStudentImportAsync(ResolveActor(), request.ToCommand(), cancellationToken));
}
[HttpPost("students/import")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("提交学生批量导入")]
[ProducesResponseType<TenantAdminStudentImportResult>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantAdminStudentImportResult>> ImportStudents(
TenantAdminStudentImportDto request,
CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.ImportStudentsAsync(ResolveActor(), request.ToCommand(), cancellationToken));
}
[HttpPost("students/bulk-assign-class")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("批量分班")]
[ProducesResponseType<TenantAdminBulkOperationResult>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantAdminBulkOperationResult>> BulkAssignClass(
TenantAdminBulkAssignClassDto request,
CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.BulkAssignClassAsync(ResolveActor(), request.ToCommand(), cancellationToken));
}
[HttpPost("students/bulk-status")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("批量调整学生状态")]
[ProducesResponseType<TenantAdminBulkOperationResult>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantAdminBulkOperationResult>> BulkStudentStatus(
TenantAdminBulkStatusDto request,
CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.BulkUpdateStudentStatusAsync(ResolveActor(), request.ToCommand(), cancellationToken));
}
[HttpGet("students/supervision/rules")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("查询学习督导规则")]
[ProducesResponseType<CatalogList<TenantSupervisionRuleItem>>(StatusCodes.Status200OK)]
public async Task<ActionResult<CatalogList<TenantSupervisionRuleItem>>> SupervisionRules(CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.GetSupervisionRulesAsync(ResolveActor(), cancellationToken));
}
[HttpPut("students/supervision/rules")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("新增或更新学习督导规则")]
[ProducesResponseType<ContentManagementResult<TenantSupervisionRuleItem>>(StatusCodes.Status200OK)]
public async Task<ActionResult<ContentManagementResult<TenantSupervisionRuleItem>>> UpsertSupervisionRule(
UpsertTenantSupervisionRuleDto request,
CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.UpsertSupervisionRuleAsync(ResolveActor(), request.ToCommand(), cancellationToken));
}
[HttpGet("students/supervision/preview")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("预览学习风险学生")]
[ProducesResponseType<TenantSupervisionPreview>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantSupervisionPreview>> PreviewSupervision(CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.PreviewSupervisionAsync(ResolveActor(), cancellationToken));
}
[HttpPost("students/supervision/generate")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("批量生成学习督导跟进任务")]
[ProducesResponseType<TenantSupervisionGenerateResult>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantSupervisionGenerateResult>> GenerateSupervision(
TenantSupervisionGenerateDto request,
CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.GenerateSupervisionFollowupsAsync(ResolveActor(), request.ToCommand(), cancellationToken));
}
[HttpGet("student-followups/report")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("查询学生跟进统计报表")]
[ProducesResponseType<TenantFollowupReport>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantFollowupReport>> FollowupReport(CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.GetFollowupReportAsync(ResolveActor(), cancellationToken));
}
[HttpGet("feedbacks/report")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("查询反馈处理统计报表")]
[ProducesResponseType<TenantFeedbackReport>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantFeedbackReport>> FeedbackReport(CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.GetFeedbackReportAsync(ResolveActor(), cancellationToken));
}
[HttpGet("points/risk-report")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("查询积分风险统计报表")]
[ProducesResponseType<TenantPointRiskReport>(StatusCodes.Status200OK)]
public async Task<ActionResult<TenantPointRiskReport>> PointRiskReport(CancellationToken cancellationToken)
{
return Ok(await tenantAdminService.GetPointRiskReportAsync(ResolveActor(), cancellationToken));
}
[HttpGet("student-notes")]
[Authorize(Policy = BackendPermissions.TenantStudentManage)]
[EndpointSummary("查询学生备注")]