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 d8a3877..b4b79ec 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 @@ -2,7 +2,6 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller; import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectGroupDTO; -import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.StaffProcessDTO; import cn.edu.hfut.rmdjzz.projectmanagement.entity.vo.GroupPositionVO; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; @@ -20,7 +19,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Map; -import java.util.Objects; /** * @author 史鹏辉 @@ -94,13 +92,7 @@ public class ProjectGroupController { @PathVariable Integer projectId, @PathVariable Integer staffId ) { - if (projectGroupService.compareProjectAccessLevel(projectId, token, staffId) >= 0) { - throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE); - } - if (projectGroupService.remove(Wrappers.lambdaQuery() - .eq(ProjectGroup::getProjectId, projectId) - .eq(ProjectGroup::getStaffId, staffId)) - ) { + if (projectGroupService.removeMember(token, projectId, staffId)) { return ResponseMap.ofSuccess(); } throw new BadRequestException(BadRequestException.OPERATE_FAILED); 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 c5cada1..6c7105b 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 @@ -3,7 +3,6 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task; 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 cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService; import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService; import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils; @@ -40,8 +39,8 @@ public class TaskController { @SneakyThrows @GetMapping("/mine") - public ResponseList getMyTasks(@RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable("projectId") Integer projectId) { - List result = taskService.listMyTasks(token, projectId); + public ResponseList getMyTasks(@RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable("projectId") Integer projectId) { + List result = taskService.listMyTasks(token, projectId); return ResponseList.ofSuccess(result); } @@ -117,7 +116,7 @@ public class TaskController { @RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable Integer projectId ) { - if(!projectService.checkOpenStatus(projectId)) { + if (!projectService.checkOpenStatus(projectId)) { throw new BadRequestException(IProjectService.PROJECT_UNOPENED); } return ResponseMap.ofSuccess("查询成功", taskService.getProjectProcessOfEveryone(token, projectId)); @@ -131,7 +130,7 @@ public class TaskController { @PathVariable Integer projectId, @PathVariable(required = false) Integer staffId ) { - if(!projectService.checkOpenStatus(projectId)) { + if (!projectService.checkOpenStatus(projectId)) { throw new BadRequestException(IProjectService.PROJECT_UNOPENED); } return ResponseList.ofSuccess("查询成功", taskService.getProjectStatistics(token, projectId, staffId)); diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectGroupMapper.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectGroupMapper.java index ff46c40..50b0106 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectGroupMapper.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/mapper/ProjectGroupMapper.java @@ -29,4 +29,14 @@ public interface ProjectGroupMapper extends BaseMapper { ON project_group.staff_id = staff.staff_id AND project_group.project_id = #{projectId} """) List selectMembersByList(@Param("projectId") Integer projectId); + + @Select(""" + SELECT COUNT(task_id) + FROM task + WHERE task_project_id = #{projectId} + AND task_holder_id = #{staffId} + AND is_deleted = 0 + AND (task_status = '待进行' OR task_status = '进行中'); + """) + Long selectUnfinishedTaskCountByStaffId(@Param("projectId") Integer projectId, @Param("staffId") Integer staffId); } 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 d07f833..d4ee807 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 @@ -5,7 +5,9 @@ import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.StaffProcessDTO; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskDTO; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskNumOfEveryoneDTO; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskTrendDTO; +import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Param; import java.time.LocalDate; @@ -16,6 +18,8 @@ import java.util.List; * created at 2022/7/4 14:52 */ public interface TaskMapper extends BaseMapper { + List selectTaskList(@Param(Constants.WRAPPER) Wrapper wrapper); + List selectSubTaskList(@Param("projectId") Integer projectId, @Param("fatherId") Long fatherId); List selectProjectProcess(@Param("projectId") Integer projectId, @Param("staffId") Integer staffId); 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 cb579ca..1f940da 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 @@ -26,6 +26,8 @@ public interface IProjectGroupService extends IService { Boolean insertNewMember(String token, Integer projectId, String staffUsername, String positions) throws ForbiddenException, BadRequestException; + Boolean removeMember(String token, Integer projectId, Integer targetId) throws ForbiddenException, BadRequestException; + Boolean updateStaffPositions(String token, Integer projectId, Integer targetId, String positions) throws ForbiddenException; /** 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 ae8f902..1951822 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 @@ -38,7 +38,7 @@ public interface ITaskService extends IService { */ Integer getHolderLevel(String token, Long taskId); - List listMyTasks(String token, Integer projectId) throws BadRequestException; + List listMyTasks(String token, Integer projectId) throws BadRequestException; Boolean canBeDone(Long taskId); diff --git a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/AnnouncementServiceImpl.java b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/AnnouncementServiceImpl.java index 7ba73ce..5a6eecc 100644 --- a/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/AnnouncementServiceImpl.java +++ b/src/main/java/cn/edu/hfut/rmdjzz/projectmanagement/service/impl/AnnouncementServiceImpl.java @@ -45,7 +45,7 @@ public class AnnouncementServiceImpl extends ServiceImpl= 0) { + if (projectGroupService.compareProjectAccessLevel(projectId, token, rawAnnouncement.getAnnouncementPublisherId()) <= 0) { if (!announcement.checkModification(rawAnnouncement)) { throw new BadRequestException(BadRequestException.WRONG_PARAMETERS); } 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 fb9a848..b474e82 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 @@ -60,6 +60,7 @@ public class ProjectGroupServiceImpl extends ServiceImpl= 0) { + throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE); + } + Long taskUnfinishedCount = baseMapper.selectUnfinishedTaskCountByStaffId(projectId, targetId); + if (taskUnfinishedCount != 0) { + throw new BadRequestException("该成员仍有未完成或未被关闭的工作项"); + } + return baseMapper.delete(Wrappers.lambdaQuery() + .eq(ProjectGroup::getProjectId, projectId) + .eq(ProjectGroup::getStaffId, targetId)) == 1; + } + @Override public Boolean updateStaffPositions(String token, Integer projectId, Integer targetId, String positions) throws ForbiddenException { int accessLevel = getProjectAccessLevel(token, projectId); @@ -87,13 +103,18 @@ public class ProjectGroupServiceImpl extends ServiceImpl implements IT @Override - public List listMyTasks(String token, Integer projectId) throws BadRequestException { + public List listMyTasks(String token, Integer projectId) { Integer staffId = TokenUtils.getStaffId(token); - List resList = baseMapper.selectList(Wrappers.lambdaQuery().select(Task::getTaskId, Task::getTaskFatherId, Task::getTaskHolderId) - .eq(Task::getTaskProjectId, projectId).orderByAsc(Task::getTaskFatherId)); + List resList = baseMapper.selectList(Wrappers.lambdaQuery() + .select(Task::getTaskId, Task::getTaskFatherId, Task::getTaskHolderId) + .eq(Task::getTaskProjectId, projectId) + .orderByAsc(Task::getTaskFatherId)); List results = new ArrayList<>(); - ArrayList vec = new ArrayList<>(); - ArrayList isTarget = new ArrayList<>(); + List vec = new ArrayList<>(); + List isTarget = new ArrayList<>(); vec.add(0L); isTarget.add(false); int id = 0; @@ -247,7 +249,9 @@ public class TaskServiceImpl extends ServiceImpl implements IT isTarget.add(resList.get(i).getTaskHolderId().equals(staffId)); } } - return baseMapper.selectList(Wrappers.lambdaQuery().in(Task::getTaskId, results)); + return baseMapper.selectTaskList(Wrappers.lambdaQuery() + .eq(Task::getDeleted, false) + .in(Task::getTaskId, results)); } @Override @@ -323,7 +327,7 @@ public class TaskServiceImpl extends ServiceImpl implements IT throw new BadRequestException(BadRequestException.WRONG_PARAMETERS); } if (typeChangeValue == 1 && !canBeDone(task.getTaskId())) { - throw new BadRequestException("还有子工作尚未完成"); + throw new BadRequestException("还有子工作项尚未完成"); } try { boolean closed = false; diff --git a/src/main/resources/mapper/TaskMapper.xml b/src/main/resources/mapper/TaskMapper.xml index aec90be..9686caa 100644 --- a/src/main/resources/mapper/TaskMapper.xml +++ b/src/main/resources/mapper/TaskMapper.xml @@ -6,6 +6,27 @@ + - SELECT staff_fullname, completed_num FROM (SELECT task_holder_id, SUM(IF(task_closed_time IS NULL, 0, 1)) AS completed_num FROM task