修复了离队时不检查工作项完成情况的问题,列出mytask时没有holderFullname的问题,修改职位时受前后空格影响的问题和不更新权限的问题,格式化了代码

master
ArgonarioD 2022-07-12 15:36:07 +08:00
parent 9bc59be2a0
commit 76966938a1
10 changed files with 81 additions and 26 deletions

View File

@ -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.ProjectGroup;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectGroupDTO; 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.entity.vo.GroupPositionVO;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; 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 org.springframework.web.bind.annotation.*;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** /**
* @author * @author
@ -94,13 +92,7 @@ public class ProjectGroupController {
@PathVariable Integer projectId, @PathVariable Integer projectId,
@PathVariable Integer staffId @PathVariable Integer staffId
) { ) {
if (projectGroupService.compareProjectAccessLevel(projectId, token, staffId) >= 0) { if (projectGroupService.removeMember(token, projectId, staffId)) {
throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE);
}
if (projectGroupService.remove(Wrappers.<ProjectGroup>lambdaQuery()
.eq(ProjectGroup::getProjectId, projectId)
.eq(ProjectGroup::getStaffId, staffId))
) {
return ResponseMap.ofSuccess(); return ResponseMap.ofSuccess();
} }
throw new BadRequestException(BadRequestException.OPERATE_FAILED); throw new BadRequestException(BadRequestException.OPERATE_FAILED);

View File

@ -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.Task;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskDTO; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskDTO;
import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; 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.IProjectService;
import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService; import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService;
import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils; import cn.edu.hfut.rmdjzz.projectmanagement.utils.TokenUtils;
@ -40,8 +39,8 @@ public class TaskController {
@SneakyThrows @SneakyThrows
@GetMapping("/mine") @GetMapping("/mine")
public ResponseList<Task> getMyTasks(@RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable("projectId") Integer projectId) { public ResponseList<TaskDTO> getMyTasks(@RequestHeader(TokenUtils.HEADER_TOKEN) String token, @PathVariable("projectId") Integer projectId) {
List<Task> result = taskService.listMyTasks(token, projectId); List<TaskDTO> result = taskService.listMyTasks(token, projectId);
return ResponseList.ofSuccess(result); return ResponseList.ofSuccess(result);
} }
@ -117,7 +116,7 @@ public class TaskController {
@RequestHeader(TokenUtils.HEADER_TOKEN) String token, @RequestHeader(TokenUtils.HEADER_TOKEN) String token,
@PathVariable Integer projectId @PathVariable Integer projectId
) { ) {
if(!projectService.checkOpenStatus(projectId)) { if (!projectService.checkOpenStatus(projectId)) {
throw new BadRequestException(IProjectService.PROJECT_UNOPENED); throw new BadRequestException(IProjectService.PROJECT_UNOPENED);
} }
return ResponseMap.ofSuccess("查询成功", taskService.getProjectProcessOfEveryone(token, projectId)); return ResponseMap.ofSuccess("查询成功", taskService.getProjectProcessOfEveryone(token, projectId));
@ -131,7 +130,7 @@ public class TaskController {
@PathVariable Integer projectId, @PathVariable Integer projectId,
@PathVariable(required = false) Integer staffId @PathVariable(required = false) Integer staffId
) { ) {
if(!projectService.checkOpenStatus(projectId)) { if (!projectService.checkOpenStatus(projectId)) {
throw new BadRequestException(IProjectService.PROJECT_UNOPENED); throw new BadRequestException(IProjectService.PROJECT_UNOPENED);
} }
return ResponseList.ofSuccess("查询成功", taskService.getProjectStatistics(token, projectId, staffId)); return ResponseList.ofSuccess("查询成功", taskService.getProjectStatistics(token, projectId, staffId));

View File

@ -29,4 +29,14 @@ public interface ProjectGroupMapper extends BaseMapper<ProjectGroup> {
ON project_group.staff_id = staff.staff_id AND project_group.project_id = #{projectId} ON project_group.staff_id = staff.staff_id AND project_group.project_id = #{projectId}
""") """)
List<ProjectGroupDTO> selectMembersByList(@Param("projectId") Integer projectId); List<ProjectGroupDTO> 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);
} }

View File

@ -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.TaskDTO;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskNumOfEveryoneDTO; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskNumOfEveryoneDTO;
import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskTrendDTO; 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.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.time.LocalDate; import java.time.LocalDate;
@ -16,6 +18,8 @@ import java.util.List;
* created at 2022/7/4 14:52 * created at 2022/7/4 14:52
*/ */
public interface TaskMapper extends BaseMapper<Task> { public interface TaskMapper extends BaseMapper<Task> {
List<TaskDTO> selectTaskList(@Param(Constants.WRAPPER) Wrapper<Task> wrapper);
List<TaskDTO> selectSubTaskList(@Param("projectId") Integer projectId, @Param("fatherId") Long fatherId); List<TaskDTO> selectSubTaskList(@Param("projectId") Integer projectId, @Param("fatherId") Long fatherId);
List<StaffProcessDTO> selectProjectProcess(@Param("projectId") Integer projectId, @Param("staffId") Integer staffId); List<StaffProcessDTO> selectProjectProcess(@Param("projectId") Integer projectId, @Param("staffId") Integer staffId);

View File

@ -26,6 +26,8 @@ public interface IProjectGroupService extends IService<ProjectGroup> {
Boolean insertNewMember(String token, Integer projectId, String staffUsername, String positions) throws ForbiddenException, BadRequestException; 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; Boolean updateStaffPositions(String token, Integer projectId, Integer targetId, String positions) throws ForbiddenException;
/** /**

View File

@ -38,7 +38,7 @@ public interface ITaskService extends IService<Task> {
*/ */
Integer getHolderLevel(String token, Long taskId); Integer getHolderLevel(String token, Long taskId);
List<Task> listMyTasks(String token, Integer projectId) throws BadRequestException; List<TaskDTO> listMyTasks(String token, Integer projectId) throws BadRequestException;
Boolean canBeDone(Long taskId); Boolean canBeDone(Long taskId);

View File

@ -45,7 +45,7 @@ public class AnnouncementServiceImpl extends ServiceImpl<AnnouncementMapper, Ann
throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE); throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE);
} }
Announcement rawAnnouncement = baseMapper.selectById(announcement.getAnnouncementId()); Announcement rawAnnouncement = baseMapper.selectById(announcement.getAnnouncementId());
if (projectGroupService.compareProjectAccessLevel(projectId, token, rawAnnouncement.getAnnouncementPublisherId()) >= 0) { if (projectGroupService.compareProjectAccessLevel(projectId, token, rawAnnouncement.getAnnouncementPublisherId()) <= 0) {
if (!announcement.checkModification(rawAnnouncement)) { if (!announcement.checkModification(rawAnnouncement)) {
throw new BadRequestException(BadRequestException.WRONG_PARAMETERS); throw new BadRequestException(BadRequestException.WRONG_PARAMETERS);
} }

View File

@ -60,6 +60,7 @@ public class ProjectGroupServiceImpl extends ServiceImpl<ProjectGroupMapper, Pro
} }
String[] positionArray = positions.split(","); String[] positionArray = positions.split(",");
for (String position : positionArray) { for (String position : positionArray) {
position = position.strip();
if (position.equals(POSITION_1)) { if (position.equals(POSITION_1)) {
throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE); throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE);
} }
@ -70,10 +71,25 @@ public class ProjectGroupServiceImpl extends ServiceImpl<ProjectGroupMapper, Pro
targetLevel = 2; targetLevel = 2;
} }
} }
positions = String.join(",", positionArray);
return baseMapper.insert(new ProjectGroup(targetStaff.getStaffId(), projectId, positions, targetLevel)) == 1; return baseMapper.insert(new ProjectGroup(targetStaff.getStaffId(), projectId, positions, targetLevel)) == 1;
} }
@Override
public Boolean removeMember(String token, Integer projectId, Integer targetId) throws ForbiddenException, BadRequestException {
if (compareProjectAccessLevel(projectId, token, targetId) >= 0) {
throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE);
}
Long taskUnfinishedCount = baseMapper.selectUnfinishedTaskCountByStaffId(projectId, targetId);
if (taskUnfinishedCount != 0) {
throw new BadRequestException("该成员仍有未完成或未被关闭的工作项");
}
return baseMapper.delete(Wrappers.<ProjectGroup>lambdaQuery()
.eq(ProjectGroup::getProjectId, projectId)
.eq(ProjectGroup::getStaffId, targetId)) == 1;
}
@Override @Override
public Boolean updateStaffPositions(String token, Integer projectId, Integer targetId, String positions) throws ForbiddenException { public Boolean updateStaffPositions(String token, Integer projectId, Integer targetId, String positions) throws ForbiddenException {
int accessLevel = getProjectAccessLevel(token, projectId); int accessLevel = getProjectAccessLevel(token, projectId);
@ -87,13 +103,18 @@ public class ProjectGroupServiceImpl extends ServiceImpl<ProjectGroupMapper, Pro
} }
String[] positionArray = positions.split(","); String[] positionArray = positions.split(",");
for (String position : positionArray) { for (String position : positionArray) {
position = position.strip();
if (position.equals(POSITION_1)) { if (position.equals(POSITION_1)) {
throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE); throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE);
} }
if (position.equals(POSITION_2) && accessLevel != 1) { if (position.equals(POSITION_2)) {
throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE); if (accessLevel != 1) {
throw new ForbiddenException(ForbiddenException.UNABLE_TO_OPERATE);
}
targetLevel = 2;
} }
} }
positions = String.join(",", positionArray);
return baseMapper.update( return baseMapper.update(
null, null,
@ -101,6 +122,7 @@ public class ProjectGroupServiceImpl extends ServiceImpl<ProjectGroupMapper, Pro
.eq(ProjectGroup::getProjectId, projectId) .eq(ProjectGroup::getProjectId, projectId)
.eq(ProjectGroup::getStaffId, targetId) .eq(ProjectGroup::getStaffId, targetId)
.set(ProjectGroup::getProjectStaffPosition, positions) .set(ProjectGroup::getProjectStaffPosition, positions)
.set(ProjectGroup::getProjectAccessLevel, targetLevel)
) == 1; ) == 1;
} }

View File

@ -220,13 +220,15 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
@Override @Override
public List<Task> listMyTasks(String token, Integer projectId) throws BadRequestException { public List<TaskDTO> listMyTasks(String token, Integer projectId) {
Integer staffId = TokenUtils.getStaffId(token); Integer staffId = TokenUtils.getStaffId(token);
List<Task> resList = baseMapper.selectList(Wrappers.<Task>lambdaQuery().select(Task::getTaskId, Task::getTaskFatherId, Task::getTaskHolderId) List<Task> resList = baseMapper.selectList(Wrappers.<Task>lambdaQuery()
.eq(Task::getTaskProjectId, projectId).orderByAsc(Task::getTaskFatherId)); .select(Task::getTaskId, Task::getTaskFatherId, Task::getTaskHolderId)
.eq(Task::getTaskProjectId, projectId)
.orderByAsc(Task::getTaskFatherId));
List<Long> results = new ArrayList<>(); List<Long> results = new ArrayList<>();
ArrayList<Long> vec = new ArrayList<>(); List<Long> vec = new ArrayList<>();
ArrayList<Boolean> isTarget = new ArrayList<>(); List<Boolean> isTarget = new ArrayList<>();
vec.add(0L); vec.add(0L);
isTarget.add(false); isTarget.add(false);
int id = 0; int id = 0;
@ -247,7 +249,9 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
isTarget.add(resList.get(i).getTaskHolderId().equals(staffId)); isTarget.add(resList.get(i).getTaskHolderId().equals(staffId));
} }
} }
return baseMapper.selectList(Wrappers.<Task>lambdaQuery().in(Task::getTaskId, results)); return baseMapper.selectTaskList(Wrappers.<Task>lambdaQuery()
.eq(Task::getDeleted, false)
.in(Task::getTaskId, results));
} }
@Override @Override
@ -323,7 +327,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements IT
throw new BadRequestException(BadRequestException.WRONG_PARAMETERS); throw new BadRequestException(BadRequestException.WRONG_PARAMETERS);
} }
if (typeChangeValue == 1 && !canBeDone(task.getTaskId())) { if (typeChangeValue == 1 && !canBeDone(task.getTaskId())) {
throw new BadRequestException("还有子工作尚未完成"); throw new BadRequestException("还有子工作尚未完成");
} }
try { try {
boolean closed = false; boolean closed = false;

View File

@ -6,6 +6,27 @@
<result property="attachedInfo" column="attached_info" <result property="attachedInfo" column="attached_info"
typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/> typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
</resultMap> </resultMap>
<select id="selectTaskList" resultMap="taskDto">
SELECT task_id,
task_name,
task_project_id,
task_holder_id,
s.staff_fullname AS task_holder_name,
task_status,
task_type,
t.task_father_id,
task_created_time,
task_start_time,
task_end_time,
task_closed_time,
task_priority,
task_description,
attached_info,
children_count
FROM task AS t
JOIN (SELECT staff_id, staff_fullname FROM staff) AS s ON t.task_holder_id = s.staff_id
${ew.customSqlSegment}
</select>
<select id="selectSubTaskList" resultMap="taskDto"> <select id="selectSubTaskList" resultMap="taskDto">
SELECT task_id, SELECT task_id,
task_name, task_name,
@ -43,7 +64,8 @@
</if> </if>
GROUP BY task_type GROUP BY task_type
</select> </select>
<select id="selectProjectProcessOfEveryone" resultType="cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskNumOfEveryoneDTO"> <select id="selectProjectProcessOfEveryone"
resultType="cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.TaskNumOfEveryoneDTO">
SELECT staff_fullname, completed_num SELECT staff_fullname, completed_num
FROM (SELECT task_holder_id, SUM(IF(task_closed_time IS NULL, 0, 1)) AS completed_num FROM (SELECT task_holder_id, SUM(IF(task_closed_time IS NULL, 0, 1)) AS completed_num
FROM task FROM task