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 3ad20ba..e34cbbb 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 @@ -95,4 +95,13 @@ public class ProjectController { projectService.updateProject(token, project); return ResponseMap.ofSuccess("操作成功"); } + + @SneakyThrows + @GetMapping("/{projectId}/stats") + public ResponseMap getProjectProcess( + @RequestHeader("Token") String token, + @PathVariable Integer projectId + ) { + return ResponseMap.ofSuccess("查询成功", projectService.getProjectProcess(token, projectId)); + } } 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 4568b70..7484d0c 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,8 +2,11 @@ package cn.edu.hfut.rmdjzz.projectmanagement.controller; import cn.edu.hfut.rmdjzz.projectmanagement.entity.ProjectGroup; 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; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; +import cn.edu.hfut.rmdjzz.projectmanagement.service.ITaskService; +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; @@ -25,6 +28,9 @@ public class ProjectGroupController { @Autowired private IProjectGroupService projectGroupService; + @Autowired + private ITaskService taskService; + @SneakyThrows @GetMapping public ResponseList getGroupNumber(@PathVariable Integer projectId, @RequestHeader("Token") String token) { @@ -83,4 +89,17 @@ public class ProjectGroupController { ) { return ResponseMap.ofSuccess("统计成功", projectGroupService.collectStatsForGroupPositions(token, projectId)); } + + @SneakyThrows + @GetMapping("/{staffId}/stats") + public ResponseList getProjectProcessOfStaff( + @RequestHeader("Token") String token, + @PathVariable Integer projectId, + @PathVariable Integer staffId + ) { + if(TokenUtils.getStaffId(token) != staffId) { + throw new BadRequestException("错误请求"); + } + return ResponseList.ofSuccess("查询成功", taskService.getProjectProcessOfStaff(token, projectId)); + } } 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 679c1f5..1f46487 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 @@ -2,10 +2,12 @@ package cn.edu.hfut.rmdjzz.projectmanagement.mapper; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectDto; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectProcessDto; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; +import io.swagger.v3.oas.models.security.SecurityScheme; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -17,9 +19,11 @@ public interface ProjectMapper extends BaseMapper { @Select(""" SELECT COUNT(*) FROM project WHERE project_id IN - (SELECT DISTINCT project_id FROM project_group WHERE staff_id = #{id}) + (SELECT DISTINCT project_id FROM project_group WHERE staff_id = #{staffId}) """) - Long findProjectCount(@Param("id") Integer staffId); + Long findProjectCount(@Param("staffId") Integer staffId); - IPage findMyProject(IPage pg, @Param("id") Integer staff_id, @Param(Constants.WRAPPER) Wrapper wrapper); + ProjectProcessDto findProjectProcess(@Param("projectId") Integer projectId); + + IPage findMyProject(IPage pg, @Param("staffId") 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 e19bae1..03f7900 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 @@ -2,6 +2,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.mapper; 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.StaffProcessDto; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; @@ -13,4 +14,6 @@ import java.util.List; */ public interface TaskMapper extends BaseMapper { List selectSubTaskList(@Param("projectId") Integer projectId, @Param("fatherId") Long fatherId); + + List selectProjectProcessOfStaff(@Param("projectId") Integer projectId, @Param("staffId") Integer staffId); } 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 6849d4b..1344707 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 @@ -2,7 +2,9 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectDto; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectProcessDto; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; +import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import cn.edu.hfut.rmdjzz.projectmanagement.utils.http.RequestPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -17,6 +19,8 @@ public interface IProjectService extends IService { Long getAllProjectOfStaff(String token); + ProjectProcessDto getProjectProcess(String token, Integer projectId) throws ForbiddenException; + Page getOnePageProject(String token, RequestPage page, Map params); Boolean setProjectCompleted(String token, Integer projectId) 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 fa46bbb..5a60b67 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 @@ -2,6 +2,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service; 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.StaffProcessDto; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import com.baomidou.mybatisplus.extension.service.IService; @@ -21,6 +22,8 @@ public interface ITaskService extends IService { Boolean closeTaskAndSubTask(String token, Integer projectId, Long taskId) throws BadRequestException; + List getProjectProcessOfStaff(String token, Integer projectId) throws BadRequestException, ForbiddenException; + /** * @return 1:all rights 2:father holder 3:current holder 0:no right */ 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 50153cb..1e8847d 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 @@ -2,7 +2,9 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service.impl; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Project; import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectDto; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.ProjectProcessDto; import cn.edu.hfut.rmdjzz.projectmanagement.exception.BadRequestException; +import cn.edu.hfut.rmdjzz.projectmanagement.exception.ForbiddenException; import cn.edu.hfut.rmdjzz.projectmanagement.mapper.ProjectMapper; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectGroupService; import cn.edu.hfut.rmdjzz.projectmanagement.service.IProjectService; @@ -36,6 +38,14 @@ public class ProjectServiceImpl extends ServiceImpl impl return baseMapper.findProjectCount(staffId); } + @Override + public ProjectProcessDto getProjectProcess(String token, Integer projectId) throws ForbiddenException { + if(projectGroupService.getProjectAccessLevel(token, projectId) == 0) { + throw new ForbiddenException("无查看权限"); + } + return baseMapper.findProjectProcess(projectId); + } + @Override public Page getOnePageProject( String token, 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 6f1749f..d3322b4 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,6 +1,7 @@ package cn.edu.hfut.rmdjzz.projectmanagement.service.impl; import cn.edu.hfut.rmdjzz.projectmanagement.entity.Task; +import cn.edu.hfut.rmdjzz.projectmanagement.entity.dto.StaffProcessDto; 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; @@ -112,6 +113,15 @@ public class TaskServiceImpl extends ServiceImpl implements IT } } + @Override + public List getProjectProcessOfStaff(String token, Integer projectId) throws BadRequestException, ForbiddenException { + Integer staffId = TokenUtils.getStaffId(token); + if(projectGroupService.getProjectAccessLevel(token, projectId) == 0) { + throw new ForbiddenException("无查看权限"); + } + return baseMapper.selectProjectProcessOfStaff(projectId, staffId); + } + @Override public Integer getHolderLevel(Integer staffId, Long taskId) { try { diff --git a/src/main/resources/mapper/ProjectMapper.xml b/src/main/resources/mapper/ProjectMapper.xml index a5189cb..b60f49d 100644 --- a/src/main/resources/mapper/ProjectMapper.xml +++ b/src/main/resources/mapper/ProjectMapper.xml @@ -14,15 +14,37 @@ contract_amount, project_importance, project_creator, - pt1.project_class_name AS project_class_name, - pt2.project_class_name AS project_subclass_name, + pt1.project_class_name AS project_class_name, + pt2.project_class_name AS project_subclass_name, is_completed, is_deleted, - project_closed_date + project_closed_date, + IF(complete_num IS NULL, 0, complete_num) AS complete_num, + IF(total_num IS NULL, 0, total_num) AS total_num FROM project JOIN project_type pt1 ON project.project_class_id = pt1.project_class_id JOIN project_type pt2 ON project.project_subclass_id = pt2.project_class_id - WHERE project_id IN (SELECT DISTINCT project_id FROM project_group WHERE staff_id = #{id})) AS T + LEFT JOIN (SELECT task_project_id, + SUM(IF(task_status = '已完成' OR task_status = '关闭', 1, 0)) AS complete_num, + COUNT(task_status) AS total_num + FROM task + WHERE is_deleted = false + AND task_project_id != 0 + GROUP BY task_project_id) AS t + ON project.project_id = t.task_project_id + WHERE project_id IN (SELECT DISTINCT project_id FROM project_group WHERE staff_id = #{staffId}) + AND is_deleted = false) AS T ${ew.customSqlSegment} + diff --git a/src/main/resources/mapper/TaskMapper.xml b/src/main/resources/mapper/TaskMapper.xml index 9b5dead..c1587d9 100644 --- a/src/main/resources/mapper/TaskMapper.xml +++ b/src/main/resources/mapper/TaskMapper.xml @@ -25,4 +25,21 @@ AND task_project_id = #{projectId} AND t.task_father_id = #{fatherId} +