diff --git a/README.md b/README.md
index 4f5219b..ce9260f 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ group /project/{projectId}/group
- [ ] 加人
- [ ] 改岗位
---
-项目日志 项目统计
+项目日志 项目统计 克隆项目 项目公告
---
导入账户 大权限
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 74203e2..ce161c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -159,9 +159,10 @@
org.apache.maven.plugins
maven-compiler-plugin
+ 3.10.1
-
- 15
+
+ 17
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/advice/ExceptionHandlerAdvice.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/advice/ExceptionHandlerAdvice.java
index 98d79c4..3cdf852 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/advice/ExceptionHandlerAdvice.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/advice/ExceptionHandlerAdvice.java
@@ -1,6 +1,7 @@
package cn.edu.hfut.rmdjzz.projectmanagement.advice;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
+import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.UnauthorizedException;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap;
import lombok.extern.slf4j.Slf4j;
@@ -30,4 +31,10 @@ public class ExceptionHandlerAdvice {
log.error(e.getMessage());
return ResponseMap.of(HttpStatus.BAD_REQUEST.value(), e.getMessage());
}
+
+ @ExceptionHandler(ForbiddenException.class)
+ @ResponseStatus(HttpStatus.FORBIDDEN)
+ public ResponseMap handleForbiddenException(ForbiddenException e) {
+ return ResponseMap.of(HttpStatus.FORBIDDEN.value(), e.getMessage());
+ }
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/annotation/DoNotDeserialize.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/annotation/DoNotDeserialize.java
index bd59a2d..772abb7 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/annotation/DoNotDeserialize.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/annotation/DoNotDeserialize.java
@@ -2,10 +2,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.annotation;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.BeanUtils;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
+import java.lang.annotation.*;
/**
* 用于{@link BeanUtils#beanToMap(Object, boolean, boolean)}时,当成员变量被标注本注释时,就不会被该方法放入Map
@@ -14,6 +11,7 @@ import java.lang.annotation.Target;
* @since 2022/6/28 21:42
*/
@Retention(RetentionPolicy.RUNTIME)
+@Documented
@Target({ElementType.FIELD})
public @interface DoNotDeserialize {
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SwaggerConfig.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SwaggerConfig.java
index e8373e2..1110aa4 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SwaggerConfig.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/SwaggerConfig.java
@@ -1,5 +1,6 @@
package cn.edu.hfut.rmdjzz.projectmanagement.config;
+import com.fasterxml.classmate.TypeResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
@@ -24,18 +25,19 @@ public class SwaggerConfig {
//配置 Swagger的Docket的Bean实例
@Bean
- public Docket docket(){
- return new Docket(DocumentationType.SWAGGER_2)
+ public Docket docket(TypeResolver typeResolver){
+ return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("cn.edu.hfut.rmdjzz.projectmanagement"))
.paths(PathSelectors.any())
- .build();
+ .build()
+ .additionalModels(typeResolver.resolve(Integer.class));
}
//配置Swagger 信息apiInfo
private ApiInfo apiInfo(){
//作者信息
- Contact DEFAULT_CONTACT = new Contact("项目管理系统", "http://wuyize.ml/", "");
+ Contact DEFAULT_CONTACT = new Contact("项目管理系统", "http://101.34.228.45:8080/", "");
return new ApiInfo("前后端接口文档",
"",
"1.0",
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/WebConfig.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/WebConfig.java
index 2b09fdf..c44e3c9 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/WebConfig.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/config/WebConfig.java
@@ -30,6 +30,6 @@ public class WebConfig implements WebMvcConfigurer {
.addPathPatterns("/**")
.excludePathPatterns("/hello", "/error") //测试
.excludePathPatterns("/staff/login") //登录
- .excludePathPatterns("/swagger-resources/**", "/swagger-ui/**", "/v3/**", "/v2/**"); //swagger
+ .excludePathPatterns("/swagger-resources/**", "/swagger-ui/**", "/v2/**", "/v3/**", "/webjars/**", "/doc.html"); //swagger
}
}
\ No newline at end of file
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java
index 163a15c..4176531 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectController.java
@@ -1,7 +1,7 @@
package cn.edu.hfut.rmdjzz.projectmanagement.controller;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project;
-import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultProject;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectDto;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService;
@@ -12,9 +12,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.media.Content;
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
import javax.validation.Valid;
import java.util.Map;
@@ -39,22 +42,22 @@ public class ProjectController {
})
@SneakyThrows
@GetMapping
- public ResponseList getProjectListOfStaff(
+ public ResponseList getProjectListOfStaff(
@RequestHeader("Token") String token,
@Valid RequestPage page,
@RequestParam("paramMap") Map paramMap
) {
- Page result = projectService.getOnePageProject(token, page, paramMap);
+ Page result = projectService.getOnePageProject(token, page, paramMap);
return ResponseList.ofSuccess("成功返回列表", result);
}
@SneakyThrows
@GetMapping("/{projectId}")
public ResponseMap getOneProject(
- @RequestHeader("Token") String token,
- @PathVariable ("projectId") Integer projectId
+ @RequestHeader("Token") String token,
+ @PathVariable("projectId") Integer projectId
) {
- if(projectGroupService.getUserLevelInGroup(token, projectId) == 0) {
+ if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) {
throw new BadRequestException("请求参数错误");
}
return ResponseMap.ofSuccess("查询成功", projectService.getById(projectId));
@@ -68,13 +71,12 @@ public class ProjectController {
.put("totalNum", projectService.getAllProjectOfStaff(token));
}
- @ApiImplicitParams({
- @ApiImplicitParam(name = "map", value = "用于读取整个RequestBody,实际传参时无意义,请忽略"),
- @ApiImplicitParam(paramType = "body", dataTypeClass = Integer.class, name = "projectId", required = true)
- })
@SneakyThrows
@PostMapping("/complete")
- public ResponseMap completeProject(@RequestHeader("Token") String token, @RequestBody Map map) {
+ public ResponseMap completeProject(
+ @RequestHeader("Token") String token,
+ @RequestBody Map map
+ ) {
Integer targetProjectId = (Integer) map.get("projectId");
projectService.setProjectCompleted(token, targetProjectId);
return ResponseMap.ofSuccess("操作成功");
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java
index 282c889..b2742f4 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/ProjectGroupController.java
@@ -1,19 +1,20 @@
package cn.edu.hfut.rmdjzz.projectmanagement.controller;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup;
-import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
-import cn.edu.hfut.rmdjzz.projectmanagement.exception.UnauthorizedException;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.vo.GroupPositionVo;
+import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService;
-import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseList;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiParam;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
-import java.util.Objects;
/**
* @author 史鹏辉
@@ -37,14 +38,11 @@ public class ProjectGroupController {
@GetMapping("/{staffId}")
public ResponseMap getDesignatedStaffPosition(
@RequestHeader("Token") String token,
- @PathVariable Integer staffId,
- @PathVariable Integer projectId
+ @PathVariable Integer projectId,
+ @PathVariable Integer staffId
) {
- if (!Objects.equals(TokenUtils.getStaffId(token), staffId)) {
- throw new BadRequestException("用户访问错误");
- }
- if (projectGroupService.getUserLevelInGroup(token, projectId) == 0) {
- throw new UnauthorizedException("无该项目访问权限");
+ if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) {
+ throw new ForbiddenException("无该项目访问权限");
}
return ResponseMap.ofSuccess("查询成功", projectGroupService.getOne(
Wrappers.lambdaQuery()
@@ -53,12 +51,41 @@ public class ProjectGroupController {
));
}
- @PutMapping("/{staffId}")
- public ResponseMap updateDesignatedStaffPosition(
+ //TODO: test
+ @SneakyThrows
+ @PostMapping
+ public ResponseMap addGroupMember(
@RequestHeader("Token") String token,
- @PathVariable Integer staffId,
- @PathVariable Integer projectId
+ @PathVariable Integer projectId,
+ @RequestBody GroupPositionVo groupPosition
) {
+ projectGroupService.insertNewMember(token, projectId, groupPosition.getStaffId(), groupPosition.getPositions());
+ return ResponseMap.ofSuccess("创建成功");
+ }
+
+ //TODO: test
+ @ApiImplicitParams(
+ @ApiImplicitParam(paramType = "body", name = "positions", dataTypeClass = String.class, required = true)
+ )
+ @SneakyThrows
+ @PutMapping("/{staffId}")
+ public ResponseMap modifyDesignatedStaffPosition(
+ @RequestHeader("Token") String token,
+ @PathVariable Integer projectId,
+ @PathVariable Integer staffId,
+ @ApiParam(hidden = true) @RequestBody GroupPositionVo groupPosition
+ ) {
+ projectGroupService.updateStaffPositions(token, staffId, projectId, groupPosition.getPositions());
return ResponseMap.ofSuccess("更新成功");
}
+
+ //TODO: test
+ @SneakyThrows
+ @GetMapping("/stats")
+ public ResponseMap getGroupPositionsStatistics(
+ @RequestHeader("Token") String token,
+ @PathVariable Integer projectId
+ ) {
+ return ResponseMap.ofSuccess("统计成功", projectGroupService.collectStatsForGroupPositions(token, projectId));
+ }
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java
index 8d12035..3dd7b95 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/TaskController.java
@@ -1,8 +1,7 @@
package cn.edu.hfut.rmdjzz.projectmanagement.controller;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task;
-import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultTask;
-import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskDto;
import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseList;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.ResponseMap;
@@ -22,17 +21,14 @@ public class TaskController {
@Autowired
private ITaskService taskService;
- @Autowired
- private IProjectGroupService projectGroupService;
-
@SneakyThrows
@GetMapping("/{fatherId}/subtask")
- public ResponseList getSubTaskList(
+ public ResponseList getSubTaskList(
@RequestHeader("Token") String token,
@PathVariable("projectId") Integer projectId,
@PathVariable("fatherId") Long fatherId
) {
- List result = taskService.getSubTaskList(token, projectId, fatherId);
+ List result = taskService.getSubTaskList(token, projectId, fatherId);
return ResponseList.ofSuccess("查询成功", result);
}
@@ -51,7 +47,7 @@ public class TaskController {
@RequestParam("taskId") Long taskId
) {
return ResponseMap.ofSuccess("返回成功")
- .put("existSubTask" ,taskService.existSubTask(token, projectId, taskId));
+ .put("existSubTask", taskService.existSubTask(token, projectId, taskId));
}
@SneakyThrows
@@ -62,27 +58,30 @@ public class TaskController {
@RequestBody Task task
) {
task.setTaskProjectId(projectId);
- taskService.insertTask(token,task);
+ taskService.insertTask(token, task);
return ResponseMap.ofSuccess("操作成功");
}
@SneakyThrows
- @PutMapping
+ @PutMapping("/{taskId}")
public ResponseMap modifyTask(
@RequestHeader("Token") String token,
@PathVariable("projectId") Integer projectId,
+ @PathVariable("taskId") Long taskId,
@RequestBody Task task
) {
task.setTaskProjectId(projectId);
- taskService.modifyTask(token,task);
+ task.setTaskId(taskId);
+ taskService.modifyTask(token, task);
return ResponseMap.ofSuccess("操作成功");
}
+
@SneakyThrows
- @DeleteMapping
+ @DeleteMapping("/{taskId}")
public ResponseMap deleteTaskAndSubTask(
@RequestHeader("Token") String token,
@PathVariable("projectId") Integer projectId,
- @RequestParam("taskId") Long taskId
+ @PathVariable("taskId") Long taskId
) {
taskService.deleteTaskAndSubTask(token, projectId, taskId);
return ResponseMap.ofSuccess("删除成功");
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/ProjectGroup.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/ProjectGroup.java
index e897d83..1d467dd 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/ProjectGroup.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/ProjectGroup.java
@@ -2,12 +2,18 @@ package cn.edu.hfut.rmdjzz.projectmanagement.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
/**
* @author 张韬
* created at 2022/6/30 21:31
*/
+@Accessors(chain = true)
+@NoArgsConstructor
+@AllArgsConstructor
@Data
public class ProjectGroup {
@TableId(type = IdType.AUTO)
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultProject.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/dto/ProjectDto.java
similarity index 79%
rename from src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultProject.java
rename to src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/dto/ProjectDto.java
index 482a88f..4fd9a99 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultProject.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/dto/ProjectDto.java
@@ -1,4 +1,4 @@
-package cn.edu.hfut.rmdjzz.projectmanagement.entity.query;
+package cn.edu.hfut.rmdjzz.projectmanagement.entity.dto;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
@@ -12,7 +12,7 @@ import java.time.LocalDate;
*/
@Data
@AllArgsConstructor
-public class ResultProject {
+public class ProjectDto {
@TableId
Integer projectId;
String projectName;
@@ -27,9 +27,9 @@ public class ResultProject {
Integer completeNum;
Integer totalNum;
- ResultProject() {
+ ProjectDto() {
completeNum = 50;
totalNum = 100;
}
- // 带加的进度 Double projectProcess;
+ //TODO: 带加的进度 Double projectProcess;
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultTask.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/dto/TaskDto.java
similarity index 91%
rename from src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultTask.java
rename to src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/dto/TaskDto.java
index e986087..f4f15e4 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/query/ResultTask.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/dto/TaskDto.java
@@ -1,4 +1,4 @@
-package cn.edu.hfut.rmdjzz.projectmanagement.entity.query;
+package cn.edu.hfut.rmdjzz.projectmanagement.entity.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
@@ -12,7 +12,7 @@ import java.util.Map;
* @since 2022/7/6 10:25
*/
@Data
-public class ResultTask {
+public class TaskDto {
private Long taskId;
private String taskName;
private Integer taskProjectId;
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/vo/GroupPositionVo.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/vo/GroupPositionVo.java
new file mode 100644
index 0000000..8ca0de4
--- /dev/null
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/entity/vo/GroupPositionVo.java
@@ -0,0 +1,13 @@
+package cn.edu.hfut.rmdjzz.projectmanagement.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @author 佘语殊
+ * @since 2022/7/7 0:27
+ */
+@Data
+public class GroupPositionVo {
+ private Integer staffId;
+ private String positions;
+}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/exception/ForbiddenException.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/exception/ForbiddenException.java
new file mode 100644
index 0000000..aab2273
--- /dev/null
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/exception/ForbiddenException.java
@@ -0,0 +1,11 @@
+package cn.edu.hfut.rmdjzz.projectmanagement.exception;
+
+/**
+ * @author 佘语殊
+ * @since 2022/7/6 20:14
+ */
+public class ForbiddenException extends Exception {
+ public ForbiddenException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectMapper.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectMapper.java
index bb495d8..679c1f5 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectMapper.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectMapper.java
@@ -1,7 +1,7 @@
package cn.edu.hfut.rmdjzz.projectmanagement.mapper;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project;
-import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultProject;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectDto;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -21,5 +21,5 @@ public interface ProjectMapper extends BaseMapper {
""")
Long findProjectCount(@Param("id") Integer staffId);
- IPage findMyProject(IPage pg, @Param("id") Integer staff_id, @Param(Constants.WRAPPER) Wrapper wrapper);
+ IPage findMyProject(IPage pg, @Param("id") Integer staff_id, @Param(Constants.WRAPPER) Wrapper wrapper);
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/TaskMapper.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/TaskMapper.java
index 5b18bde..e19bae1 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/TaskMapper.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/TaskMapper.java
@@ -1,7 +1,7 @@
package cn.edu.hfut.rmdjzz.projectmanagement.mapper;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task;
-import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultTask;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskDto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
@@ -12,5 +12,5 @@ import java.util.List;
* created at 2022/7/4 14:52
*/
public interface TaskMapper extends BaseMapper {
- List selectSubTaskList(@Param("projectId") Integer projectId, @Param("fatherId") Long fatherId);
+ List selectSubTaskList(@Param("projectId") Integer projectId, @Param("fatherId") Long fatherId);
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectGroupService.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectGroupService.java
index e612f6c..111c09a 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectGroupService.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectGroupService.java
@@ -2,10 +2,11 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
-import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
+import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
+import java.util.Map;
/**
* @author 张韬
@@ -14,10 +15,24 @@ import java.util.List;
public interface IProjectGroupService extends IService {
Boolean addCreator(Integer projectId, Integer staffId);
+ void insertNewMember(String token, Integer projectId, Integer staffId, String positions) throws ForbiddenException;
+
+ void updateStaffPositions(String token, Integer projectId, Integer targetId, String positions) throws ForbiddenException;
+
/**
* @return 如果不存在就返回0,否则返回AccessLevel
*/
- Integer getUserLevelInGroup(String token, Integer projectId);
+ Integer getProjectAccessLevel(String token, Integer projectId);
+
+ Integer getProjectAccessLevel(Integer staffId, Integer projectId);
+
+ List findAllProjectNumber(String token, Integer projectId) throws BadRequestException;
+
+ /**
+ * 统计小组中各岗位数量
+ *
+ * @return <岗位名, 人数>
+ */
+ Map collectStatsForGroupPositions(String token, Integer projectId) throws ForbiddenException;
- List findAllProjectNumber(String token, Integer projectId) throws TokenException, BadRequestException;
}
\ No newline at end of file
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectService.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectService.java
index c3423c7..7915e5e 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectService.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/IProjectService.java
@@ -1,9 +1,8 @@
package cn.edu.hfut.rmdjzz.projectmanagement.service;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project;
-import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultProject;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectDto;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
-import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -16,11 +15,11 @@ import java.util.Map;
*/
public interface IProjectService extends IService {
- Long getAllProjectOfStaff(String token) throws TokenException;
+ Long getAllProjectOfStaff(String token);
- Page getOnePageProject(String token, RequestPage page, Map params) throws TokenException;
+ Page getOnePageProject(String token, RequestPage page, Map params);
- Boolean setProjectCompleted(String token, Integer projectId) throws TokenException, BadRequestException;
+ Boolean setProjectCompleted(String token, Integer projectId) throws BadRequestException;
- Boolean createProject(String token, Project project) throws TokenException, BadRequestException;
+ Boolean createProject(String token, Project project) throws BadRequestException;
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/ITaskService.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/ITaskService.java
index 5474d64..fa46bbb 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/ITaskService.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/ITaskService.java
@@ -1,8 +1,9 @@
package cn.edu.hfut.rmdjzz.projectmanagement.service;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task;
-import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultTask;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskDto;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
+import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -12,23 +13,29 @@ import java.util.List;
* created at 2022/7/4 14:49
*/
public interface ITaskService extends IService {
- List getSubTaskList(String token, Integer projectId, Long fatherId) throws BadRequestException;
+ List getSubTaskList(String token, Integer projectId, Long fatherId) throws BadRequestException, ForbiddenException;
- Boolean existSubTask(String token, Integer projectId, Long taskId) throws BadRequestException;
+ Boolean existSubTask(String token, Integer projectId, Long taskId) throws BadRequestException, ForbiddenException;
- Boolean deleteTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException;
+ Boolean deleteTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException, ForbiddenException;
Boolean closeTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException;
- Integer checkHolder(Integer staffId, Long taskId);
+ /**
+ * @return 1:all rights 2:father holder 3:current holder 0:no right
+ */
+ Integer getHolderLevel(Integer staffId, Long taskId);
- Integer checkHolder(String token, Long taskId);
+ /**
+ * @return 1:all rights 2:father holder 3:current holder 0:no right
+ */
+ Integer getHolderLevel(String token, Long taskId);
List getMyTaskList(String token, Integer projectId) throws BadRequestException;
Boolean canBeDone(Long taskId);
- Task insertTask(String token, Task task) throws BadRequestException;
+ Task insertTask(String token, Task task) throws BadRequestException, ForbiddenException;
Task modifyTask(String token, Task task) throws BadRequestException;
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectGroupServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectGroupServiceImpl.java
index 6e0e592..2c0c050 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectGroupServiceImpl.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectGroupServiceImpl.java
@@ -2,7 +2,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service.impl;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
-import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
+import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException;
import cn.edu.hfut.rmdjzz.projectmanagement.mapper.ProjectGroupMapper;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils;
@@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* @author 张韬
@@ -31,11 +33,71 @@ public class ProjectGroupServiceImpl extends ServiceImpl 2) {
+ throw new ForbiddenException("无新增成员权限");
+ }
+ String[] positionArray = positions.split(",");
+ for (String position : positionArray) {
+ if (position.equals("项目经理")) {
+ throw new ForbiddenException("不能授予他人项目经理职位");
+ }
+ if (position.equals("项目主管")) {
+ if (accessLevel != 1) {
+ throw new ForbiddenException("无授予项目主管职位权限");
+ }
+ targetLevel = 2;
+ }
+ }
+
+ baseMapper.insert(new ProjectGroup(targetId, projectId, positions, targetLevel));
+ }
+
+ @Override
+ public void updateStaffPositions(String token, Integer projectId, Integer targetId, String positions) throws ForbiddenException {
+ int accessLevel = getProjectAccessLevel(token, projectId);
+ int targetLevel = getProjectAccessLevel(targetId, projectId);
+
+ if (accessLevel == 0) {
+ throw new ForbiddenException("无该项目访问权限");
+ }
+ if (accessLevel > 2 || accessLevel >= targetLevel) {
+ throw new ForbiddenException("无更改此人职位权限");
+ }
+ String[] positionArray = positions.split(",");
+ for (String position : positionArray) {
+ if (position.equals("项目经理")) {
+ throw new ForbiddenException("不能授予他人项目经理职位");
+ }
+ if (position.equals("项目主管") && accessLevel != 1) {
+ throw new ForbiddenException("无授予项目主管职位权限");
+ }
+ }
+
+ baseMapper.update(
+ new ProjectGroup()
+ .setProjectId(projectId)
+ .setStaffId(targetId),
+ Wrappers.lambdaUpdate().set(ProjectGroup::getProjectStaffPosition, positions)
+ );
+ }
+
+ @Override
+ public Integer getProjectAccessLevel(String token, Integer projectId) {
+ Integer staffId = TokenUtils.getStaffId(token);
+ return getProjectAccessLevel(staffId, projectId);
+ }
+
+ @Override
+ public Integer getProjectAccessLevel(Integer staffId, Integer projectId) {
try {
- Integer staffId = TokenUtils.getStaffId(token);
ProjectGroup projectGroup = baseMapper.selectOne(Wrappers.lambdaQuery()
.eq(ProjectGroup::getStaffId, staffId)
.eq(ProjectGroup::getProjectId, projectId)
@@ -49,19 +111,38 @@ public class ProjectGroupServiceImpl extends ServiceImpl findAllProjectNumber(String token, Integer projectId) throws TokenException, BadRequestException {
+ public List findAllProjectNumber(String token, Integer projectId) throws BadRequestException {
List res = new ArrayList<>();
Integer staffId = TokenUtils.getStaffId(token);
List targetProject = baseMapper.selectList(Wrappers.lambdaQuery().eq(ProjectGroup::getProjectId, projectId));
-
if (targetProject.size() == 0)
throw new BadRequestException("项目不存在");
for (ProjectGroup projectGroup : targetProject) {
res.add(projectGroup.getStaffId());
}
- if(!res.contains(staffId))
+ if (!res.contains(staffId))
throw new BadRequestException("用户请求非法");
return res;
}
+
+ @Override
+ public Map collectStatsForGroupPositions(String token, Integer projectId) throws ForbiddenException {
+ if (getProjectAccessLevel(token, projectId) == 0) {
+ throw new ForbiddenException("无该项目访问权限");
+ }
+ Map res = new HashMap<>();
+ List infos = baseMapper.selectList(
+ Wrappers.lambdaQuery()
+ .select(ProjectGroup::getProjectStaffPosition)
+ .eq(ProjectGroup::getProjectId, projectId)
+ );
+ infos.forEach(info -> {
+ String[] positions = info.getProjectStaffPosition().split(",");
+ for (String position : positions) {
+ res.merge(position, 1, Integer::sum);
+ }
+ });
+ return res;
+ }
}
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java
index 6d05669..439d92e 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/ProjectServiceImpl.java
@@ -1,9 +1,8 @@
package cn.edu.hfut.rmdjzz.projectmanagement.service.impl;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project;
-import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultProject;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectDto;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
-import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
import cn.edu.hfut.rmdjzz.projectmanagement.mapper.ProjectMapper;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService;
import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService;
@@ -31,24 +30,24 @@ public class ProjectServiceImpl extends ServiceImpl impl
private IProjectGroupService projectGroupService;
@Override
- public Long getAllProjectOfStaff(String token) throws TokenException {
+ public Long getAllProjectOfStaff(String token) {
Integer staffId = TokenUtils.getStaffId(token);
return baseMapper.findProjectCount(staffId);
}
@Override
- public Page getOnePageProject(
+ public Page getOnePageProject(
String token,
RequestPage page,
Map params
- ) throws TokenException {
+ ) {
Integer staffId = TokenUtils.getStaffId(token);
- IPage userPage = baseMapper.findMyProject(page.getPage(), staffId, WrapperUtils.allEqAndTimeIntervalQueryWrapper(params));
- return (Page) userPage;
+ IPage userPage = baseMapper.findMyProject(page.getPage(), staffId, WrapperUtils.allEqAndTimeIntervalQueryWrapper(params));
+ return (Page) userPage;
}
@Override
- public Boolean setProjectCompleted(String token, Integer projectId) throws TokenException, BadRequestException {
+ public Boolean setProjectCompleted(String token, Integer projectId) throws BadRequestException {
Integer staffId = TokenUtils.getStaffId(token);
Project project = new Project();
project.setProjectId(projectId);
@@ -66,8 +65,9 @@ public class ProjectServiceImpl extends ServiceImpl impl
throw new BadRequestException("操作失败");
}
+ //FIXME: 时间线判断?
@Override
- public Boolean createProject(String token, Project project) throws TokenException, BadRequestException {
+ public Boolean createProject(String token, Project project) throws BadRequestException {
project.setProjectId(null);
project.setCompleted(false);
project.setProjectCreatedTime(null);
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java
index 439c13f..6f1749f 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/TaskServiceImpl.java
@@ -1,9 +1,9 @@
package cn.edu.hfut.rmdjzz.projectmanagement.service.impl;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task;
-import cn.edu.hfut.rmdjzz.projectmanagement.entity.query.ResultTask;
+import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskDto;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
-import cn.edu.hfut.rmdjzz.projectmanagement.exception.TokenException;
+import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException;
import cn.edu.hfut.rmdjzz.projectmanagement.mapper.TaskMapper;
import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils;
@@ -31,27 +31,30 @@ public class TaskServiceImpl extends ServiceImpl implements IT
//FIXME: 抛出未授权异常
@Override
- public List getSubTaskList(String token, Integer projectId, Long fatherId) throws BadRequestException {
- if (projectGroupService.getUserLevelInGroup(token, projectId) == 0 || fatherId == null) {
- throw new BadRequestException("错误的访问参数");
+ public List getSubTaskList(String token, Integer projectId, Long fatherId) throws ForbiddenException, BadRequestException {
+ if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) {
+ throw new ForbiddenException("无该项目访问权限");
+ }
+ if (fatherId == null) {
+ throw new BadRequestException("请求参数错误");
}
return baseMapper.selectSubTaskList(projectId, fatherId);
}
@Override
- public Boolean existSubTask(String token, Integer projectId, Long taskId) throws BadRequestException {
- if (projectGroupService.getUserLevelInGroup(token, projectId) == 0) {
- throw new BadRequestException("请求参数错误");
+ public Boolean existSubTask(String token, Integer projectId, Long taskId) throws ForbiddenException {
+ if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) {
+ throw new ForbiddenException("无该项目访问权限");
}
return baseMapper.exists(Wrappers.lambdaQuery().eq(Task::getTaskFatherId, taskId));
}
@Transactional(isolation = Isolation.SERIALIZABLE, rollbackFor = Exception.class)
@Override
- public Boolean deleteTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException {
- Integer level = checkHolder(token, taskId);
- if (projectGroupService.getUserLevelInGroup(token, projectId) == 0) {
- throw new BadRequestException("错误参数");
+ public Boolean deleteTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException, ForbiddenException {
+ Integer level = getHolderLevel(token, taskId);
+ if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) {
+ throw new ForbiddenException("无该项目访问权限");
}
if (level == 0 || level == 3) {
throw new BadRequestException("错误父级参数");
@@ -76,12 +79,12 @@ public class TaskServiceImpl extends ServiceImpl implements IT
@Transactional(isolation = Isolation.SERIALIZABLE, rollbackFor = Exception.class)
@Override
public Boolean closeTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException {
- Integer level = checkHolder(token, taskId);
- if (projectGroupService.getUserLevelInGroup(token, projectId) == 0) {
- throw new BadRequestException("错误参数");
+ Integer level = getHolderLevel(token, taskId);
+ if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) {
+ throw new BadRequestException("无该项目访问权限");
}
if (level == 0) {
- throw new BadRequestException("错误父级参数");
+ throw new BadRequestException("父级参数错误");
}
try {
List res = new ArrayList<>();
@@ -109,11 +112,8 @@ public class TaskServiceImpl extends ServiceImpl implements IT
}
}
- /**
- * @return 1:all rights 2:father holder 3:current holder 0:no right
- */
@Override
- public Integer checkHolder(Integer staffId, Long taskId) {
+ public Integer getHolderLevel(Integer staffId, Long taskId) {
try {
Task task = baseMapper.selectOne(Wrappers.lambdaQuery().eq(Task::getTaskId, taskId));
if (task == null || staffId <= 0)
@@ -133,30 +133,18 @@ public class TaskServiceImpl extends ServiceImpl implements IT
}
}
- /**
- * @return 1:all rights 2:father holder 3:current holder 0:no right
- */
@Override
- public Integer checkHolder(String token, Long taskId) {
- try {
- Integer staffId = TokenUtils.getStaffId(token);
- return checkHolder(staffId, taskId);
- } catch (Exception e) {
- return 0;
- }
+ public Integer getHolderLevel(String token, Long taskId) {
+ Integer staffId = TokenUtils.getStaffId(token);
+ return getHolderLevel(staffId, taskId);
}
@Override
public List getMyTaskList(String token, Integer projectId) throws BadRequestException {
- if (projectGroupService.getUserLevelInGroup(token, projectId) == 0) {
- throw new BadRequestException("错误的访问参数");
- }
- Integer staffId = 0;
- try {
- staffId = TokenUtils.getStaffId(token);
- } catch (TokenException e) {
- //impossible
+ if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) {
+ throw new BadRequestException("无该项目访问权限");
}
+ Integer staffId = TokenUtils.getStaffId(token);
return baseMapper.selectList(Wrappers.lambdaQuery()
.eq(Task::getTaskHolderId, staffId)
.eq(Task::getTaskProjectId, projectId)
@@ -183,19 +171,19 @@ public class TaskServiceImpl extends ServiceImpl implements IT
}
@Override
- public Task insertTask(String token, Task task) throws BadRequestException {
+ public Task insertTask(String token, Task task) throws BadRequestException, ForbiddenException {
task.setTaskId(null);
- Integer userLevel = projectGroupService.getUserLevelInGroup(token, task.getTaskProjectId());
+ Integer userLevel = projectGroupService.getProjectAccessLevel(token, task.getTaskProjectId());
if (userLevel == 0) {
System.out.println(userLevel);
- throw new BadRequestException("错误的操作");
+ throw new ForbiddenException("无该项目访问权限");
}
if (!task.checkInsert()) {
throw new BadRequestException("工作项参数错误");
}
try {
Task father = baseMapper.selectOne(Wrappers.lambdaQuery().eq(Task::getTaskId, task.getTaskFatherId()));
- if (!task.checkLegalFather(father) || (checkHolder(token, task.getTaskFatherId()) == 0 && userLevel == 3)) {
+ if (!task.checkLegalFather(father) || (getHolderLevel(token, task.getTaskFatherId()) == 0 && userLevel == 3)) {
throw new BadRequestException("无法指定该父级");
}
task.setTaskCreatedTime(LocalDateTime.now());
@@ -214,9 +202,9 @@ public class TaskServiceImpl extends ServiceImpl implements IT
@Override
public Task modifyTask(String token, Task task) throws BadRequestException {
- Integer userLevel = projectGroupService.getUserLevelInGroup(token, task.getTaskProjectId());
+ Integer userLevel = projectGroupService.getProjectAccessLevel(token, task.getTaskProjectId());
Task rawTask = baseMapper.selectOne(Wrappers.lambdaQuery().eq(Task::getTaskId, task.getTaskId()));
- if (userLevel == 0 || (userLevel == 3 && checkHolder(token, task.getTaskId()) == 0)) {
+ if (userLevel == 0 || (userLevel == 3 && getHolderLevel(token, task.getTaskId()) == 0)) {
throw new BadRequestException("没有权限");
}
int typeChangeValue = 0;
diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/TokenUtils.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/TokenUtils.java
index 2719805..e76d9f3 100644
--- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/TokenUtils.java
+++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/utils/TokenUtils.java
@@ -6,30 +6,26 @@ import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
-import javax.annotation.Resource;
import java.util.Date;
-import java.util.concurrent.TimeUnit;
/**
* @author 张韬
* created at 2022/6/28 18:20
*/
//TODO: 演示的时候把expireTime改短点儿
-
@Component
public final class TokenUtils {
public final static String pvKey = "SignedByRMDJZZ";
- public static String getToken(String staffUsername, Integer staffId,Long duration) {
+
+ public static String getToken(String staffUsername, Integer staffId, Long duration) {
return JWT.create()
.withClaim("staffUsername", staffUsername)
.withClaim("staffId", staffId)
- .withClaim("duration",duration)
+ .withClaim("duration", duration)
.withIssuedAt(new Date())
- .withExpiresAt(new Date(System.currentTimeMillis() + duration*1000L))
+ .withExpiresAt(new Date(System.currentTimeMillis() + duration * 1000L))
.sign(Algorithm.HMAC256(pvKey));
}
@@ -43,46 +39,35 @@ public final class TokenUtils {
}
}
- public static boolean checkTimeOut(String token) throws TokenException {
- if (!checkToken(token))
- return true;
+ public static boolean checkTimeOut(String token) {
return JWT.decode(token).getClaim("exp").asLong() < (System.currentTimeMillis() / 1000);
}
- public static String getUsername(String token) throws TokenException {
- if (!checkToken(token))
- return null;
+ public static String getUsername(String token) {
return JWT.decode(token).getClaim("staffUsername").asString();
}
- public static Integer getStaffId(String token) throws TokenException {
- if (!checkToken(token))
- return null;
+ public static Integer getStaffId(String token) {
return JWT.decode(token).getClaim("staffId").asInt();
}
- public static Long getDuration(String token) throws TokenException {
- if (!checkToken(token))
- return null;
+
+ public static Long getDuration(String token) {
return JWT.decode(token).getClaim("duration").asLong();
}
- public static String refreshToken(String token) throws TokenException {
- return getToken(getUsername(token), getStaffId(token),getDuration(token));
+
+ public static String refreshToken(String token) {
+ return getToken(getUsername(token), getStaffId(token), getDuration(token));
}
- public static String autoRequire(String token) throws TokenException {
- boolean check = checkToken(token);
- if (check) {
- DecodedJWT jwt = JWT.decode(token);
- long current = System.currentTimeMillis() / 1000;
- Long start = jwt.getClaim("iat").asLong();
- Long end = jwt.getClaim("exp").asLong();
- if ((current - start) * 1.0 / (end - start) > 0.8) {
- return refreshToken(token);
- } else {
- return token;
- }
+ public static String autoRequire(String token) {
+ DecodedJWT jwt = JWT.decode(token);
+ long current = System.currentTimeMillis() / 1000;
+ Long start = jwt.getClaim("iat").asLong();
+ Long end = jwt.getClaim("exp").asLong();
+ if ((current - start) * 1.0 / (end - start) > 0.8) {
+ return refreshToken(token);
} else {
- return "";
+ return token;
}
}
}
diff --git a/src/main/resources/mapper/ProjectMapper.xml b/src/main/resources/mapper/ProjectMapper.xml
index 7f4eac7..a5189cb 100644
--- a/src/main/resources/mapper/ProjectMapper.xml
+++ b/src/main/resources/mapper/ProjectMapper.xml
@@ -1,13 +1,13 @@
-
+
-