diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/AnnouncementController.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/AnnouncementController.java index 0b2ccbb..8362594 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/AnnouncementController.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/controller/AnnouncementController.java @@ -2,14 +2,17 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller; import cn.edu.hfut.rmdjzz.projectmanagement.annotation.ProjectAuthorize; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Announcement; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.AnnouncementDTO; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import cn.edu.hfut.rmdjzz.projectmanagement.service.IAnnouncementService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; +import cn.edu.hfut.rmdjzz.projectmanagement.service.IStaffService; 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 lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -29,23 +32,36 @@ public class AnnouncementController { @SneakyThrows @GetMapping - public ResponseList getAnnouncementList(@RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable Integer projectId) { - if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { - throw new ForbiddenException(IProjectGroupService.UNABLE_TO_ACCESS_PROJECT); + public ResponseList getAnnouncementList( +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, + @PathVariable Integer projectId, + @PathVariable Integer staffId + ) { +// if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { +// throw new ForbiddenException(IProjectGroupService.UNABLE_TO_ACCESS_PROJECT); +// } + ProjectGroup designatedStaff = projectGroupService.getOne( + Wrappers.lambdaQuery() + .eq(ProjectGroup::getStaffId, staffId) + .eq(ProjectGroup::getProjectId, projectId)); + if (designatedStaff == null) { //说明是超级管理员 + designatedStaff = new ProjectGroup(staffId, projectId, IStaffService.LEVEL_1, 1); } return ResponseList.ofSuccess(announcementService.getAnnouncementList(projectId)); } @SneakyThrows + @ProjectAuthorize("a==0") @GetMapping("/{announcementId}") public ResponseMap getAnnouncementById( - @RequestHeader(TokenUtils.HEADER_TOKEN) String token, +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, + @RequestAttribute Integer accessLevel, @PathVariable Integer projectId, @PathVariable Long announcementId ) { - if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { - throw new ForbiddenException(IProjectGroupService.UNABLE_TO_ACCESS_PROJECT); - } +// if (accessLevel == 0) { +// throw new ForbiddenException(IProjectGroupService.UNABLE_TO_ACCESS_PROJECT); +// } return ResponseMap.ofSuccess(announcementService.getAnnouncementById(projectId, announcementId)); } @@ -91,11 +107,14 @@ public class AnnouncementController { @SneakyThrows @DeleteMapping("/{announcementId}") public ResponseMap deleteAnnouncement( - @RequestHeader(TokenUtils.HEADER_TOKEN) String token, +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable Integer projectId, - @PathVariable Long announcementId + @PathVariable Long announcementId, + @RequestBody Announcement announcement ) { - if (announcementService.deleteAnnouncement(token, projectId, announcementId)) { + announcement.setProjectId(projectId); + announcement.setAnnouncementId(announcementId); + if (announcementService.removeById(announcement)) { return ResponseMap.ofSuccess(); } throw new BadRequestException(BadRequestException.OPERATE_FAILED); 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 78c0da3..cf380f6 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 @@ -38,22 +38,24 @@ public class ProjectController { @SneakyThrows @GetMapping public ResponseList getProjectListOfStaff( - @RequestHeader(TokenUtils.HEADER_TOKEN) String token, +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, + @PathVariable Integer staffId, @Valid RequestPage page, @Parameter(description = "参数列表见Project实体类,时间可以用xxxxStart与xxxxEnd来确定区间" , required = true) @RequestParam("paramMap") Map paramMap ) { - Page result = projectService.pageMyProjects(token, page, paramMap); + Page result = projectService.pageMyProjects(staffId, page, paramMap); return ResponseList.ofSuccess(result); } @SneakyThrows @GetMapping("/{projectId}") public ResponseMap getOneProjectBasicInfo( - @RequestHeader(TokenUtils.HEADER_TOKEN) String token, +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, + @PathVariable Integer staffId, @PathVariable("projectId") Integer projectId ) { - if (projectGroupService.getProjectAccessLevel(token, projectId) == 0) { + if (projectGroupService.getProjectAccessLevel(staffId, projectId) == 0) { throw new BadRequestException(BadRequestException.WRONG_PARAMETERS); } return ResponseMap.ofSuccess(projectService.getById(projectId)); @@ -70,42 +72,48 @@ public class ProjectController { @SneakyThrows @PostMapping("/complete") public ResponseMap completeProject( - @RequestHeader(TokenUtils.HEADER_TOKEN) String token, +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, + @PathVariable Integer staffId, @Parameter(description = "只需要传projectId即可,例:{\"projectId\": 1}") @RequestBody Map map ) { Integer targetProjectId = (Integer) map.get("projectId"); - projectService.setProjectCompleted(token, targetProjectId); + projectService.setProjectCompleted(staffId, targetProjectId); return ResponseMap.ofSuccess(); } @SneakyThrows @PostMapping - public ResponseMap createProject(@RequestHeader(TokenUtils.HEADER_TOKEN) String token, @RequestBody Project project) { - projectService.createProject(token, project); + public ResponseMap createProject( +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, + @PathVariable Integer staffId, + @RequestBody Project project) { + projectService.createProject(staffId, project); return ResponseMap.ofSuccess(); } @SneakyThrows @PutMapping("/{projectId}") public ResponseMap updateProject( - @RequestHeader(TokenUtils.HEADER_TOKEN) String token, +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable Integer projectId, + @PathVariable Integer staffId, @RequestBody Project project ) { project.setProjectId(projectId); if (!projectService.checkOpenStatus(projectId)) throw new BadRequestException(IProjectService.PROJECT_UNOPENED); - projectService.updateProject(token, project); + projectService.updateProject(staffId, project); return ResponseMap.ofSuccess(); } @SneakyThrows @GetMapping("/{projectId}/stats") public ResponseMap getProjectProcess( - @RequestHeader(TokenUtils.HEADER_TOKEN) String token, - @PathVariable Integer projectId +// @RequestHeader(TokenUtils.HEADER_TOKEN) String token, + @PathVariable Integer projectId, + @PathVariable Integer staffId ) { - return ResponseMap.ofSuccess(projectService.getProjectProcess(token, projectId)); + return ResponseMap.ofSuccess(projectService.getProjectProcess(staffId, projectId)); } } 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 3e975db..1bb1a42 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 @@ -33,7 +33,7 @@ public interface IProjectGroupService extends IService { /** * @return 如果不存在就返回0,否则返回AccessLevel;对于全局权限为1的用户,直接返回1 */ - Integer getProjectAccessLevel(String staffId, Integer projectId); + Integer getProjectAccessLevel(Integer staffId, Integer projectId); Integer getProjectAccessLevel(Integer staffId, Integer staffGlobalLevel, Integer projectId); 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 b1dd817..663a7b0 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 @@ -22,15 +22,27 @@ public interface IProjectService extends IService { Long countMyProjects(String token); + ProjectProcessDTO getProjectProcess(Integer staffId, Integer projectId) throws ForbiddenException, BadRequestException; + + Page pageMyProjects(Integer staffId, RequestPage page, Map params); + + Boolean setProjectCompleted(Integer staffId, Integer projectId) throws BadRequestException, ForbiddenException; + ProjectProcessDTO getProjectProcess(String token, Integer projectId) throws ForbiddenException, BadRequestException; - Page pageMyProjects(String token, RequestPage page, Map params); + Page pageMyProjects( + String token, + RequestPage page, + Map params + ); Boolean setProjectCompleted(String token, Integer projectId) throws BadRequestException, ForbiddenException; + Boolean createProject(Integer staffId, Project project) throws BadRequestException, ForbiddenException; + Boolean createProject(String token, Project project) throws BadRequestException, ForbiddenException; Boolean checkOpenStatus(Integer projectId); - Boolean updateProject(String token, Project project) throws BadRequestException, ForbiddenException; + Boolean updateProject(Integer staffId, Project project) throws BadRequestException, ForbiddenException; }