You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
3.8 KiB
Java

package com.sztzjy.linkCommerce.controller.stu;
import com.sztzjy.linkCommerce.config.exception.UnAuthorizedException;
import com.sztzjy.linkCommerce.config.security.JwtUser;
import com.sztzjy.linkCommerce.config.security.TokenProvider;
import com.sztzjy.linkCommerce.entity.SchoolDefaultTaskInitialization;
import com.sztzjy.linkCommerce.entity.TaskAllocation;
import com.sztzjy.linkCommerce.entity.Userinfo;
import com.sztzjy.linkCommerce.mapper.UserinfoMapper;
import com.sztzjy.linkCommerce.service.SchoolDefaultTaskService;
import com.sztzjy.linkCommerce.util.ResultEntity;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Api(tags = "学校默认实训任务")
@RequestMapping("api/school-default-tasks")
@RestController
public class SchoolDefaultTaskController {
@Autowired
SchoolDefaultTaskService schoolDefaultTaskService;
@Autowired
UserinfoMapper userinfoMapper;
@GetMapping
@ApiOperation("查询学校默认实训任务")
public ResultEntity<Map<String, Object>> get(HttpServletRequest request) {
Userinfo operator = requireManagerTeacher(request);
SchoolDefaultTaskInitialization initialization = schoolDefaultTaskService.getInitialization(operator.getSchoolId());
List<TaskAllocation> tasks = schoolDefaultTaskService.getSchoolDefault(operator.getSchoolId());
String status = initialization == null ? (tasks.isEmpty() ? "INITIALIZING" : "READY") : initialization.getStatus();
if (tasks.isEmpty()) {
tasks = schoolDefaultTaskService.getPlatformDefault();
}
Map<String, Object> data = new HashMap<>();
data.put("status", status);
data.put("tasks", tasks);
data.put("lastError", initialization == null ? null : initialization.getLastError());
return new ResultEntity<>(HttpStatus.OK, "查询成功", data);
}
@PutMapping
@ApiOperation("保存学校默认实训任务")
public ResultEntity replace(@RequestBody List<TaskAllocation> tasks, HttpServletRequest request) {
Userinfo operator = requireManagerTeacher(request);
SchoolDefaultTaskInitialization initialization = schoolDefaultTaskService.getInitialization(operator.getSchoolId());
if (initialization != null && !"READY".equals(initialization.getStatus())) {
return new ResultEntity<>(HttpStatus.BAD_REQUEST, "默认实训任务尚未初始化完成");
}
schoolDefaultTaskService.replaceSchoolDefault(operator.getSchoolId(), tasks);
return new ResultEntity<>(HttpStatus.OK, "保存成功");
}
@PostMapping("/retry")
@ApiOperation("重试初始化学校默认实训任务")
public ResultEntity retry(HttpServletRequest request) {
Userinfo operator = requireManagerTeacher(request);
schoolDefaultTaskService.enqueueInitialization(operator.getSchoolId());
return new ResultEntity<>(HttpStatus.OK, "已提交初始化任务");
}
private Userinfo requireManagerTeacher(HttpServletRequest request) {
JwtUser currentUser = TokenProvider.getJWTUser(request);
if (currentUser == null || currentUser.getUserId() == null) {
throw new UnAuthorizedException("身份认证失败");
}
Userinfo operator = userinfoMapper.selectByPrimaryKey(currentUser.getUserId());
if (operator == null || !Integer.valueOf(3).equals(operator.getRole())
|| !Boolean.TRUE.equals(operator.getTeacherAdmin())) {
throw new UnAuthorizedException("仅管理员教师可维护学校默认实训任务");
}
return operator;
}
}