fix: 任务模板 API 修复与学校端功能实现
- TaskTemplateCreateRequest: isDefault/isPublic 改为 Boolean 类型 - SchoolTaskTemplateController: 接入 TaskTemplateService 实现完整 CRUD - getTemplates: 支持 publicOnly、keyword、taskType 参数 - 学校端列表显示全部模板(含 isPublic=0) - 前端 getTaskTemplates: 分页字段 Number 转换 Made-with: Cursor
This commit is contained in:
parent
37a6aba8cc
commit
802327f075
@ -890,10 +890,10 @@ export const getTaskTemplates = (params?: {
|
||||
}) => http.get<{ list: TaskTemplate[]; total: number; pageNum: number; pageSize: number; pages: number }>('/v1/school/task-templates', { params })
|
||||
.then(res => ({
|
||||
list: res.list || res.records || [],
|
||||
total: res.total || 0,
|
||||
pageNum: res.pageNum || 1,
|
||||
pageSize: res.pageSize || 10,
|
||||
pages: res.pages || 0,
|
||||
total: Number(res.total) || 0,
|
||||
pageNum: Number(res.pageNum) || 1,
|
||||
pageSize: Number(res.pageSize) || 10,
|
||||
pages: Number(res.pages) || 0,
|
||||
}));
|
||||
|
||||
export const getTaskTemplate = (id: number) =>
|
||||
|
||||
@ -1,15 +1,21 @@
|
||||
package com.reading.platform.controller.school;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.reading.platform.common.annotation.RequireRole;
|
||||
import com.reading.platform.common.enums.UserRole;
|
||||
import com.reading.platform.common.mapper.TaskTemplateMapper;
|
||||
import com.reading.platform.common.response.PageResult;
|
||||
import com.reading.platform.common.response.Result;
|
||||
import com.reading.platform.common.security.SecurityUtils;
|
||||
import com.reading.platform.dto.request.TaskTemplateCreateRequest;
|
||||
import com.reading.platform.dto.response.TaskTemplateResponse;
|
||||
import com.reading.platform.entity.TaskTemplate;
|
||||
import com.reading.platform.service.TaskTemplateService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.Valid;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
@ -24,45 +30,51 @@ import java.util.List;
|
||||
@RequireRole(UserRole.SCHOOL)
|
||||
public class SchoolTaskTemplateController {
|
||||
|
||||
private final TaskTemplateService taskTemplateService;
|
||||
private final TaskTemplateMapper taskTemplateMapper;
|
||||
|
||||
@GetMapping
|
||||
@Operation(summary = "获取模板列表")
|
||||
public Result<PageResult<TaskTemplateResponse>> getTemplates(
|
||||
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
|
||||
@RequestParam(required = false) String type) {
|
||||
// TODO: 实现模板列表查询
|
||||
@RequestParam(required = false) String type,
|
||||
@RequestParam(required = false) String taskType,
|
||||
@RequestParam(required = false) String keyword) {
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
return Result.success(PageResult.of(List.of(), 0L, pageNum.longValue(), pageSize.longValue()));
|
||||
String typeFilter = StringUtils.hasText(taskType) ? taskType : type;
|
||||
Page<TaskTemplate> page = taskTemplateService.getTemplates(tenantId, pageNum, pageSize, typeFilter, keyword, false);
|
||||
List<TaskTemplateResponse> voList = taskTemplateMapper.toVO(page.getRecords());
|
||||
return Result.success(PageResult.of(voList, page.getTotal(), page.getCurrent(), page.getSize()));
|
||||
}
|
||||
|
||||
@GetMapping("/default/{type}")
|
||||
@Operation(summary = "获取默认模板")
|
||||
public Result<TaskTemplateResponse> getDefaultTemplate(@PathVariable String type) {
|
||||
// TODO: 实现默认模板查询,需要根据 tenantId 和 type 查询
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
return Result.success(TaskTemplateResponse.builder()
|
||||
.type(type)
|
||||
.build());
|
||||
TaskTemplate template = taskTemplateService.getDefaultTemplate(tenantId, type);
|
||||
return template != null ? Result.success(taskTemplateMapper.toVO(template)) : Result.success(null);
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
@Operation(summary = "获取模板详情")
|
||||
public Result<TaskTemplateResponse> getTemplate(@PathVariable Long id) {
|
||||
// TODO: 实现模板详情查询,需要验证模板属于当前租户
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
return Result.success(TaskTemplateResponse.builder()
|
||||
.id(id)
|
||||
.build());
|
||||
TaskTemplate template = taskTemplateService.getTemplateById(id);
|
||||
if (!template.getTenantId().equals(tenantId)) {
|
||||
throw new com.reading.platform.common.exception.BusinessException(
|
||||
com.reading.platform.common.enums.ErrorCode.FORBIDDEN, "无权访问该模板");
|
||||
}
|
||||
return Result.success(taskTemplateMapper.toVO(template));
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Operation(summary = "创建模板")
|
||||
public Result<TaskTemplateResponse> createTemplate(@RequestBody TaskTemplateCreateRequest request) {
|
||||
// TODO: 实现创建模板
|
||||
public Result<TaskTemplateResponse> createTemplate(@Valid @RequestBody TaskTemplateCreateRequest request) {
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
return Result.success(TaskTemplateResponse.builder()
|
||||
.tenantId(tenantId)
|
||||
.build());
|
||||
Long userId = SecurityUtils.getCurrentUserId();
|
||||
TaskTemplate template = taskTemplateService.createTemplate(tenantId, userId, request);
|
||||
return Result.success(taskTemplateMapper.toVO(template));
|
||||
}
|
||||
|
||||
@PutMapping("/{id}")
|
||||
@ -70,18 +82,26 @@ public class SchoolTaskTemplateController {
|
||||
public Result<TaskTemplateResponse> updateTemplate(
|
||||
@PathVariable Long id,
|
||||
@RequestBody TaskTemplateCreateRequest request) {
|
||||
// TODO: 实现更新模板,需要验证模板属于当前租户
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
return Result.success(TaskTemplateResponse.builder()
|
||||
.id(id)
|
||||
.build());
|
||||
TaskTemplate existing = taskTemplateService.getTemplateById(id);
|
||||
if (!existing.getTenantId().equals(tenantId)) {
|
||||
throw new com.reading.platform.common.exception.BusinessException(
|
||||
com.reading.platform.common.enums.ErrorCode.FORBIDDEN, "无权修改该模板");
|
||||
}
|
||||
TaskTemplate template = taskTemplateService.updateTemplate(id, request);
|
||||
return Result.success(taskTemplateMapper.toVO(template));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
@Operation(summary = "删除模板")
|
||||
public Result<Void> deleteTemplate(@PathVariable Long id) {
|
||||
// TODO: 实现删除模板,需要验证模板属于当前租户
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
TaskTemplate template = taskTemplateService.getTemplateById(id);
|
||||
if (!template.getTenantId().equals(tenantId)) {
|
||||
throw new com.reading.platform.common.exception.BusinessException(
|
||||
com.reading.platform.common.enums.ErrorCode.FORBIDDEN, "无权删除该模板");
|
||||
}
|
||||
taskTemplateService.deleteTemplate(id);
|
||||
return Result.success();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,9 +39,10 @@ public class TeacherTaskTemplateController {
|
||||
public Result<PageResult<TaskTemplateResponse>> getTemplates(
|
||||
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
|
||||
@RequestParam(required = false) String type) {
|
||||
@RequestParam(required = false) String type,
|
||||
@RequestParam(required = false) String keyword) {
|
||||
Long tenantId = SecurityUtils.getCurrentTenantId();
|
||||
Page<TaskTemplate> page = taskTemplateService.getTemplates(tenantId, pageNum, pageSize, type);
|
||||
Page<TaskTemplate> page = taskTemplateService.getTemplates(tenantId, pageNum, pageSize, type, keyword, true);
|
||||
List<TaskTemplateResponse> voList = taskTemplateMapper.toVO(page.getRecords());
|
||||
return Result.success(PageResult.of(voList, page.getTotal(), page.getCurrent(), page.getSize()));
|
||||
}
|
||||
|
||||
@ -31,12 +31,12 @@ public class TaskTemplateCreateRequest {
|
||||
private Integer defaultDuration;
|
||||
|
||||
@Schema(description = "是否默认模板")
|
||||
private Integer isDefault;
|
||||
private Boolean isDefault;
|
||||
|
||||
@Schema(description = "模板内容")
|
||||
private String content;
|
||||
|
||||
@Schema(description = "是否公开")
|
||||
private Integer isPublic;
|
||||
private Boolean isPublic;
|
||||
|
||||
}
|
||||
|
||||
@ -16,7 +16,7 @@ public interface TaskTemplateService extends com.baomidou.mybatisplus.extension.
|
||||
/**
|
||||
* 获取模板列表
|
||||
*/
|
||||
Page<TaskTemplate> getTemplates(Long tenantId, Integer pageNum, Integer pageSize, String type);
|
||||
Page<TaskTemplate> getTemplates(Long tenantId, Integer pageNum, Integer pageSize, String type, String keyword, Boolean publicOnly);
|
||||
|
||||
/**
|
||||
* 获取默认模板
|
||||
|
||||
@ -37,18 +37,23 @@ public class TaskTemplateServiceImpl extends ServiceImpl<TaskTemplateMapper, Tas
|
||||
private final TaskTargetMapper taskTargetMapper;
|
||||
|
||||
@Override
|
||||
public Page<TaskTemplate> getTemplates(Long tenantId, Integer pageNum, Integer pageSize, String type) {
|
||||
log.debug("获取模板列表,租户 ID: {}, 页码:{}, 类型:{}", tenantId, pageNum, type);
|
||||
public Page<TaskTemplate> getTemplates(Long tenantId, Integer pageNum, Integer pageSize, String type, String keyword, Boolean publicOnly) {
|
||||
log.debug("获取模板列表,租户 ID: {}, 页码:{}, 类型:{}, 关键词:{}", tenantId, pageNum, type, keyword);
|
||||
|
||||
Page<TaskTemplate> page = new Page<>(pageNum, pageSize);
|
||||
LambdaQueryWrapper<TaskTemplate> wrapper = new LambdaQueryWrapper<>();
|
||||
|
||||
wrapper.eq(TaskTemplate::getTenantId, tenantId);
|
||||
wrapper.eq(TaskTemplate::getIsPublic, 1);
|
||||
if (Boolean.TRUE.equals(publicOnly)) {
|
||||
wrapper.eq(TaskTemplate::getIsPublic, 1);
|
||||
}
|
||||
wrapper.eq(TaskTemplate::getStatus, "ACTIVE");
|
||||
|
||||
if (StringUtils.hasText(type)) {
|
||||
wrapper.eq(TaskTemplate::getType, type);
|
||||
wrapper.and(w -> w.eq(TaskTemplate::getType, type).or().eq(TaskTemplate::getTaskType, type));
|
||||
}
|
||||
if (StringUtils.hasText(keyword)) {
|
||||
wrapper.like(TaskTemplate::getName, keyword);
|
||||
}
|
||||
|
||||
wrapper.orderByDesc(TaskTemplate::getCreatedAt);
|
||||
@ -87,15 +92,15 @@ public class TaskTemplateServiceImpl extends ServiceImpl<TaskTemplateMapper, Tas
|
||||
template.setTenantId(tenantId);
|
||||
template.setName(request.getName());
|
||||
template.setDescription(request.getDescription());
|
||||
template.setType(request.getType());
|
||||
template.setType(request.getType() != null ? request.getType() : request.getTaskType());
|
||||
template.setTaskType(request.getTaskType());
|
||||
template.setRelatedCourseId(request.getRelatedCourseId());
|
||||
template.setDefaultDuration(request.getDefaultDuration() != null ? request.getDefaultDuration() : 7);
|
||||
template.setIsDefault(request.getIsDefault() != null ? request.getIsDefault() : 0);
|
||||
template.setIsDefault(Boolean.TRUE.equals(request.getIsDefault()) ? 1 : 0);
|
||||
template.setStatus("ACTIVE");
|
||||
template.setCreatedBy(userId);
|
||||
template.setContent(request.getContent());
|
||||
template.setIsPublic(request.getIsPublic() != null ? request.getIsPublic() : 0);
|
||||
template.setIsPublic(Boolean.TRUE.equals(request.getIsPublic()) ? 1 : 0);
|
||||
|
||||
taskTemplateMapper.insert(template);
|
||||
log.info("任务模板创建成功,ID: {}", template.getId());
|
||||
@ -128,13 +133,13 @@ public class TaskTemplateServiceImpl extends ServiceImpl<TaskTemplateMapper, Tas
|
||||
template.setDefaultDuration(request.getDefaultDuration());
|
||||
}
|
||||
if (request.getIsDefault() != null) {
|
||||
template.setIsDefault(request.getIsDefault());
|
||||
template.setIsDefault(request.getIsDefault() ? 1 : 0);
|
||||
}
|
||||
if (request.getContent() != null) {
|
||||
template.setContent(request.getContent());
|
||||
}
|
||||
if (request.getIsPublic() != null) {
|
||||
template.setIsPublic(request.getIsPublic());
|
||||
template.setIsPublic(request.getIsPublic() ? 1 : 0);
|
||||
}
|
||||
|
||||
taskTemplateMapper.updateById(template);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user