7461b6b5ad
- 新表 user_priority_weights(每用户一行,默认 0.35/0.25/0.20/0.10/0.10) - PriorityWeightsService:读取/保存权重,权重和必须为 1,保存后重算全部任务 - TaskController:GET/PUT /tasks/priority-weights - CalculatedPriorityTool 支持自定义权重 - 修复 updateTask 不重算优先级的问题
152 lines
6.9 KiB
Java
152 lines
6.9 KiB
Java
package com.guo.learningprogresstracker.controller;
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.google.protobuf.ServiceException;
|
|
import com.guo.learningprogresstracker.common.Ops;
|
|
import com.guo.learningprogresstracker.dto.TaskInfo;
|
|
import com.guo.learningprogresstracker.dto.request.CreateTaskApplicationRequest;
|
|
import com.guo.learningprogresstracker.dto.response.StudySessionResponse;
|
|
import com.guo.learningprogresstracker.dto.response.TaskInfoResponse;
|
|
import com.guo.learningprogresstracker.entity.CommonResult;
|
|
import com.guo.learningprogresstracker.dto.request.TaskRequest;
|
|
import com.guo.learningprogresstracker.dto.request.UpdateTaskApplicationRequest;
|
|
import com.guo.learningprogresstracker.entity.TaskApplicationEntity;
|
|
import com.guo.learningprogresstracker.entity.UserPriorityWeightsEntity;
|
|
import com.guo.learningprogresstracker.exception.ErrorParameterException;
|
|
import com.guo.learningprogresstracker.exception.NotFindEntitiesException;
|
|
import com.guo.learningprogresstracker.service.PriorityWeightsService;
|
|
import com.guo.learningprogresstracker.service.TasksService;
|
|
import com.guo.learningprogresstracker.service.impl.StudySessionsServiceImpl;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
import jakarta.validation.Valid;
|
|
import jakarta.validation.constraints.NotEmpty;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.validation.annotation.Validated;
|
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.PathVariable;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.PutMapping;
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
import java.rmi.ServerException;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* 任务控制层
|
|
*
|
|
* @author guo
|
|
*/
|
|
@RequestMapping("/tasks")
|
|
@RestController
|
|
@Validated
|
|
@RequiredArgsConstructor
|
|
public class TaskController {
|
|
|
|
private final TasksService tasksService;
|
|
|
|
private final StudySessionsServiceImpl studySessionsServiceImpl;
|
|
|
|
private final PriorityWeightsService priorityWeightsService;
|
|
|
|
@GetMapping("/priority-weights")
|
|
@Operation(summary = "获取优先级维度权重配置")
|
|
public CommonResult<UserPriorityWeightsEntity> getPriorityWeights() {
|
|
return CommonResult.success(priorityWeightsService.getWeights());
|
|
}
|
|
|
|
@PutMapping("/priority-weights")
|
|
@Operation(summary = "保存优先级维度权重配置并重算全部任务优先级")
|
|
public CommonResult<UserPriorityWeightsEntity> savePriorityWeights(
|
|
@RequestBody UserPriorityWeightsEntity weights) throws ErrorParameterException {
|
|
return CommonResult.success(priorityWeightsService.saveWeights(weights));
|
|
}
|
|
|
|
@PostMapping
|
|
@Operation(summary = "添加新任务")
|
|
public CommonResult<String> addTask(@RequestBody @Validated({Ops.CreateG.class}) TaskRequest taskRequest) throws ErrorParameterException {
|
|
return CommonResult.success("请求成功", tasksService.addTask(taskRequest));
|
|
}
|
|
|
|
@Operation(summary = "任务详情API")
|
|
@GetMapping("/{taskId}")
|
|
public CommonResult<TaskInfoResponse> getTask(@PathVariable("taskId") String taskId) {
|
|
return CommonResult.success(tasksService.getTask(taskId));
|
|
}
|
|
|
|
@PutMapping("/{taskId}")
|
|
@Operation(summary = "更新任务详情")
|
|
public CommonResult<Void> updateTask(@PathVariable("taskId") String taskId, @Validated(Ops.UpdateG.class) @RequestBody TaskRequest updatedTask) {
|
|
tasksService.updateTask(taskId, updatedTask);
|
|
return CommonResult.success();
|
|
}
|
|
|
|
@DeleteMapping("/{taskId}")
|
|
@Operation(summary = "删除指定任务")
|
|
public CommonResult<Void> deleteTask(@PathVariable("taskId") String taskId) throws ServerException {
|
|
tasksService.deleteTask(taskId);
|
|
return CommonResult.success();
|
|
}
|
|
|
|
@GetMapping("/{taskNum}/applications")
|
|
@Operation(summary = "获取任务应用场景列表")
|
|
public CommonResult<List<TaskApplicationEntity>> getApplications(@PathVariable String taskNum) throws NotFindEntitiesException {
|
|
return CommonResult.success(tasksService.getApplications(taskNum));
|
|
}
|
|
|
|
@PostMapping("/{taskNum}/applications")
|
|
@Operation(summary = "创建任务应用场景")
|
|
public CommonResult<TaskApplicationEntity> createApplication(
|
|
@PathVariable String taskNum,
|
|
@Valid @RequestBody CreateTaskApplicationRequest request) throws NotFindEntitiesException {
|
|
request.setTaskNum(taskNum);
|
|
return CommonResult.success(tasksService.createApplication(request));
|
|
}
|
|
|
|
@PutMapping("/applications/{id}")
|
|
@Operation(summary = "更新任务应用场景")
|
|
public CommonResult<TaskApplicationEntity> updateApplication(
|
|
@PathVariable Integer id,
|
|
@Valid @RequestBody UpdateTaskApplicationRequest request) throws NotFindEntitiesException {
|
|
return CommonResult.success(tasksService.updateApplication(id, request));
|
|
}
|
|
|
|
@DeleteMapping("/applications/{id}")
|
|
@Operation(summary = "删除任务应用场景")
|
|
public CommonResult<Void> deleteApplication(@PathVariable Integer id) throws NotFindEntitiesException {
|
|
tasksService.deleteApplication(id);
|
|
return CommonResult.success();
|
|
}
|
|
|
|
@GetMapping
|
|
@Operation(summary = "获取所有任务列表")
|
|
public CommonResult<Page<TaskInfo>> tasksList(@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
|
|
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
|
|
return CommonResult.success(tasksService.taskList(pageNum, pageSize));
|
|
}
|
|
|
|
/**
|
|
* 开始或继续一个【学习会话】
|
|
*/
|
|
@GetMapping("/{taskNum}/study-sessions/start-or-continue")
|
|
public CommonResult<StudySessionResponse> startOrContinueStudySession(@NotEmpty(message = "taskNum不可为空")
|
|
@PathVariable String taskNum) throws NotFindEntitiesException, ServiceException {
|
|
StudySessionResponse response = studySessionsServiceImpl.startOrContinueStudySession(taskNum);
|
|
return CommonResult.success(response);
|
|
|
|
}
|
|
|
|
/**
|
|
* 通过学习任务num获取该任务的未结束会话
|
|
*/
|
|
@GetMapping("/{taskNum}/not-ended-study-session")
|
|
public CommonResult<StudySessionResponse> getNotEndedStudySessionByTaskNum(@NotEmpty(message = "taskNum不可为空")
|
|
@PathVariable String taskNum) throws ErrorParameterException {
|
|
StudySessionResponse response = studySessionsServiceImpl.getNotEndedStudySessionByTaskNum(taskNum);
|
|
return CommonResult.success(response);
|
|
}
|
|
}
|