diff --git a/src/main/java/com/jsl/oa/controllers/ReviewController.java b/src/main/java/com/jsl/oa/controllers/ReviewController.java index d0d1659..a7c229d 100644 --- a/src/main/java/com/jsl/oa/controllers/ReviewController.java +++ b/src/main/java/com/jsl/oa/controllers/ReviewController.java @@ -27,7 +27,7 @@ import javax.validation.constraints.NotNull; @RequiredArgsConstructor public class ReviewController { -// 审核服务 + // 审核服务 private final ReviewService reviewService; /** @@ -36,9 +36,12 @@ public class ReviewController { * @Param request: **/ @GetMapping("/review/getReviewRecords") - public BaseResponse getUserReviewRecords(HttpServletRequest request) { + public BaseResponse getUserReviewRecords( + @RequestParam Integer page, + @RequestParam Integer pageSize, + HttpServletRequest request) { log.info("请求接口[GET]: /review/getMyReview"); - return reviewService.getUserReview(request); + return reviewService.getUserReview(page, pageSize, request); } @@ -48,9 +51,11 @@ public class ReviewController { * @Param request: **/ @GetMapping("/review/getMyReview") - public BaseResponse getMyReview(HttpServletRequest request) { + public BaseResponse getMyReview(@RequestParam Integer page, + @RequestParam Integer pageSize, + HttpServletRequest request) { log.info("请求接口[GET]: /review/getMyReview"); - return reviewService.getUserPendingApprovalReview(request); + return reviewService.getUserPendingApprovalReview(page, pageSize, request); } @@ -73,7 +78,6 @@ public class ReviewController { } - @PutMapping("/review/updateReview") public BaseResponse updateReview(@RequestBody @Validated ReviewUpdateResultVO reviewUpdateResultVOVO, @NotNull BindingResult bindingResult, @@ -88,8 +92,6 @@ public class ReviewController { } - - } diff --git a/src/main/java/com/jsl/oa/dao/ProjectDAO.java b/src/main/java/com/jsl/oa/dao/ProjectDAO.java index 6ffe0d0..80a6007 100644 --- a/src/main/java/com/jsl/oa/dao/ProjectDAO.java +++ b/src/main/java/com/jsl/oa/dao/ProjectDAO.java @@ -1,6 +1,7 @@ package com.jsl.oa.dao; import com.google.gson.Gson; import com.jsl.oa.mapper.ProjectMapper; +import com.jsl.oa.model.dodata.ProjectChildDO; import com.jsl.oa.model.dodata.ProjectDO; import com.jsl.oa.model.dodata.ProjectModuleDO; import com.jsl.oa.model.dodata.info.ProjectShowDO; @@ -193,19 +194,19 @@ public class ProjectDAO { public List getProjectByPrincipalUser(Long uid) { log.info("\t> 执行 DAO 层 ProjectDAO.getProjectFromUser 方法"); log.info("\t\t> 从 MySQL 获取数据"); - return projectMapper.getProjectByPrincipalUser(uid); + return projectMapper.getAllProjectByUserId(uid); } - public List getAllSubsystemByUserId(Long uid) { - log.info("\t> 执行 DAO 层 ProjectDAO.getAllSubsystemByUserId 方法"); + public List getAllProjectChildByUId(Long uid) { + log.info("\t> 执行 DAO 层 ProjectDAO.getAllProjectChildByUId 方法"); log.info("\t\t> 从 MySQL 获取数据"); - return projectMapper.getAllSubsystemByUserId(uid); + return projectMapper.getAllChildProjectByUserId(uid); } - public List getAllSubmoduleByUserId(Long uid) { - log.info("\t> 执行 DAO 层 ProjectDAO.getAllSubmoduleByUserId 方法"); + public List getAllModuleByUId(Long uid) { + log.info("\t> 执行 DAO 层 ProjectDAO.getAllModuleByUId 方法"); log.info("\t\t> 从 MySQL 获取数据"); - return projectMapper.getAllSubmoduleByUserId(uid); + return projectMapper.getAllModuleByUserId(uid); } } diff --git a/src/main/java/com/jsl/oa/dao/ReviewDAO.java b/src/main/java/com/jsl/oa/dao/ReviewDAO.java index 11f8989..78d44de 100644 --- a/src/main/java/com/jsl/oa/dao/ReviewDAO.java +++ b/src/main/java/com/jsl/oa/dao/ReviewDAO.java @@ -62,6 +62,15 @@ public class ReviewDAO { return reviewMapper.selectReviewFromSubmodule(submoduleId); } + public List selectApprovedResultReviewsFromSubModule(Long id, + short result) { + log.info("\t> 执行 DAO 层 ReviewDAO.selectApprovedResultReviewsFromSubModule 方法"); + log.info("\t\t> 从 MySQL 获取数据"); + return reviewMapper.selectApprovedResultReviewFromModule(id, + result); + } + + public void addReview(ReviewDO reviewDO) { log.info("\t> 执行 DAO 层 ReviewDAO.addReview 方法"); log.info("\t\t> 从 MySQL 插入数据"); @@ -81,13 +90,13 @@ public class ReviewDAO { } - public String getNameBySubproject(Long subId) { + public String getNameByModule(Integer subId) { log.info("\t> 执行 DAO 层 ReviewDAO.getNameBySubproject 方法"); if (subId != null) { log.info("\t\t> 从 MySQL 获取数据"); - return projectMapper.getProjectWorkById(subId).getName(); + return projectMapper.getModuleById(subId).getName(); } if (subId == null) { diff --git a/src/main/java/com/jsl/oa/mapper/ProjectMapper.java b/src/main/java/com/jsl/oa/mapper/ProjectMapper.java index 82b67b0..404855e 100644 --- a/src/main/java/com/jsl/oa/mapper/ProjectMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ProjectMapper.java @@ -111,13 +111,26 @@ public interface ProjectMapper { + "where DATE(deadline) = DATE(#{threeDayLater}) and status = 0") List getProjectWorkByTime(LocalDateTime threeDayLater); - List getAllSubmoduleByUserId(Long uid); - List getProjectByPrincipalUser(Long uid); + @Select("select * from organize_oa.oa_project_modules " + + "where is_delete = 0 and principal_id = #{uid}") + List getAllModuleByUserId(Long uid); + + @Select("select * from organize_oa.oa_project_child " + + "where project_id = #{pid} and is_delete = 0 ") + List getAllChildProjectByUserId(Long uid); + + @Select("select * from organize_oa.oa_project " + + "where is_delete = 0 and principal_id = #{uid}") + List getAllProjectByUserId(Long uid); - List getAllSubsystemByUserId(Long uid); @Select("select * from organize_oa.oa_project_child where " + "DATE (created_at) = DATE (#{threeDaysLater}) and status = 0") List getProjectChildByTime(LocalDateTime threeDaysLater); + + + @Select("select * from organize_oa.oa_project_child where " + + "id = #{id} and is_delete = 0") + ProjectChildDO getProjectChildById(Integer id); } diff --git a/src/main/java/com/jsl/oa/mapper/ReviewMapper.java b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java index 2e53c93..0561dda 100644 --- a/src/main/java/com/jsl/oa/mapper/ReviewMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java @@ -18,17 +18,21 @@ public interface ReviewMapper { List selectApprovedResultReviewFromProject(Long projectId, short result); @Select("SELECT * FROM organize_oa.oa_review WHERE " - + "project_subsystem_id = #{subsystemId} AND is_delete = 0") - List selectReviewFromSubsystem(Long subsystemId); + + "project_child_id = #{childId} AND is_delete = 0") + List selectReviewFromSubsystem(Long childId); @Select("SELECT * FROM organize_oa.oa_review WHERE " - + "project_subsystem_id = #{subsystemId} " + + "project_child_id = #{childId} " + "AND is_delete = 0 AND review_result = #{result}") - List selectApprovedResultReviewsFromSubsystem(Long subsystemId, short result); + List selectApprovedResultReviewsFromSubsystem(Long childId, short result); @Select("SELECT * FROM organize_oa.oa_review WHERE " - + "project_submodule_id = #{subsystemId} AND is_delete = 0") - List selectReviewFromSubmodule(Long submoduleId); + + "project_module_id = #{moduleId} AND is_delete = 0") + List selectReviewFromSubmodule(Long moduleId); + + @Select("SELECT * FROM organize_oa.oa_review WHERE review_result = #{result} and " + + "project_module_id = #{moduleId} AND is_delete = 0") + List selectApprovedResultReviewFromModule(Long moduleId, short result); @Select("SELECT * FROM organize_oa.oa_review WHERE id = #{id} AND is_delete = 0") ReviewDO selectReviewById(Long id); diff --git a/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java b/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java index 467c2e5..2280e81 100644 --- a/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java @@ -35,9 +35,9 @@ public class ReviewDO { //申请的项目id private Long projectId; //申请的子系统id - private Long projectSubsystemId; + private Long projectChildId; //申请的子模块id - private Long projectSubmoduleId; + private Long projectModuleId; //申请时间 private Date applicationTime; //审核时间 diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java index 640fcc3..25114be 100644 --- a/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java @@ -20,9 +20,9 @@ public class ReviewAddVO { private Long projectId; //申请的子系统id @NotNull(message = "子系统id不能为空") - private Long projectSubsystemId; + private Long projectChildId; //申请的子模块id - private Long projectSubmoduleId; + private Long projectModuleId; } diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java new file mode 100644 index 0000000..e22dacc --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java @@ -0,0 +1,16 @@ +package com.jsl.oa.model.vodata; + + +import lombok.Data; + +import java.util.List; + +@Data +public class ReviewDataVO { + + private Integer dataTotal; + + private List data; +} + + diff --git a/src/main/java/com/jsl/oa/services/ReviewService.java b/src/main/java/com/jsl/oa/services/ReviewService.java index 0457d36..89c2447 100644 --- a/src/main/java/com/jsl/oa/services/ReviewService.java +++ b/src/main/java/com/jsl/oa/services/ReviewService.java @@ -9,9 +9,9 @@ import javax.servlet.http.HttpServletRequest; public interface ReviewService { - BaseResponse getUserPendingApprovalReview(HttpServletRequest request); + BaseResponse getUserPendingApprovalReview(Integer page, Integer pageSize, HttpServletRequest request); - BaseResponse getUserReview(HttpServletRequest request); + BaseResponse getUserReview(Integer page, Integer pageSize, HttpServletRequest request); BaseResponse addReview(ReviewAddVO reviewAddVO, HttpServletRequest request); diff --git a/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java index ac75a22..6dba1bf 100644 --- a/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java @@ -69,7 +69,7 @@ public class ModuleServiceImpl implements ModuleService { Processing.copyProperties(projectWorkDO, projectWorkAndNameVO); // 添加负责人和子系统名称 projectWorkAndNameVO. - setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getPid()).getName()) + setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getProjectChildId()).getName()) .setPrincipalUser(userDAO.getUserById(projectWorkDO.getPrincipalId()).getUsername()); projectWorkAndNameVOS.add(projectWorkAndNameVO); diff --git a/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java index 7f8859b..5e3613a 100644 --- a/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java @@ -1,17 +1,22 @@ package com.jsl.oa.services.impl; +import com.jsl.oa.common.constant.ReviewConstants; import com.jsl.oa.dao.ProjectDAO; import com.jsl.oa.dao.ReviewDAO; import com.jsl.oa.dao.UserDAO; -import com.jsl.oa.mapper.ReviewMapper; +import com.jsl.oa.mapper.ProjectMapper; import com.jsl.oa.mapper.UserMapper; +import com.jsl.oa.model.dodata.ProjectChildDO; import com.jsl.oa.model.dodata.ProjectDO; import com.jsl.oa.model.dodata.ProjectModuleDO; import com.jsl.oa.model.dodata.ReviewDO; +import com.jsl.oa.model.vodata.ReviewAddVO; +import com.jsl.oa.model.vodata.ReviewUpdateResultVO; import com.jsl.oa.model.vodata.ReviewVO; import com.jsl.oa.services.ReviewService; import com.jsl.oa.utils.BaseResponse; +import com.jsl.oa.utils.ErrorCode; import com.jsl.oa.utils.Processing; import com.jsl.oa.utils.ResultUtil; import lombok.RequiredArgsConstructor; @@ -19,8 +24,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @Slf4j @Service @@ -32,18 +37,21 @@ public class ReviewServiceImpl implements ReviewService { private final ProjectDAO projectDAO; private final UserMapper userMapper; - private final ReviewMapper reviewMapper; + private final ProjectMapper projectMapper; @Override - public BaseResponse getUserReview(Long projectId, HttpServletRequest request) { - log.info("\t> 执行 Service 层 ReviewService.getUserReview 方法"); + public BaseResponse getUserPendingApprovalReview(Integer page, + Integer pageSize, + HttpServletRequest request) { + log.info("\t> 执行 Service 层 ReviewService.getUserPendingApprovalReview 方法"); //获取用户 Long userId = Processing.getAuthHeaderToUserId(request); + //存储审核数据的数组 - List reviewData = new ArrayList<>(); + List reviewData = new ArrayList<>(); //先获取用户为项目负责人的项目列表 projectDAO.getProjectByPrincipalUser(userId); @@ -51,32 +59,173 @@ public class ReviewServiceImpl implements ReviewService { //先从用户为 项目负责人 的项目中获取对应 审核信息 for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) { //查询每个项目下所有的审核信息 - List reviewDOS = reviewMapper. - selectAllReviewFromProject(projectDO.getId()); + List reviewDOS = reviewDAO. + selectApprovedResultReviewFromProject(projectDO.getId(), + ReviewConstants.PENDING); //封装VO类 - reviewData.addAll(encapsulateArrayClass(reviewDOS)); + reviewData.addAll(reviewDOS); } //在从用户为 子系统负责人 的项目中获取对应 审核信息 - for (ProjectModuleDO projectWorkDO : projectDAO.getAllSubsystemByUserId(userId)) { - //查询每个项目下所有的审核信息 - List reviewDOS = reviewMapper. - selectReviewFromSubsystem(projectWorkDO.getId()); + for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) { + //查询每个项目下状态为2的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewsFromSubsystem(projectChildDO.getId(), + ReviewConstants.PENDING); //封装VO类 - reviewData.addAll(encapsulateArrayClass(reviewDOS)); + reviewData.addAll(reviewDOS); } //在从用户为 子模块负责人 的项目中获取对应 审核信息 - for (ProjectModuleDO projectWorkDO : projectDAO.getAllSubmoduleByUserId(userId)) { + for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) { //查询每个项目下所有的审核信息 - List reviewDOS = reviewMapper. - selectReviewFromSubmodule(projectWorkDO.getId()); + List reviewDOS = reviewDAO. + selectApprovedResultReviewsFromSubModule(projectModuleDO.getId(), + ReviewConstants.PENDING); //封装VO类 - reviewData.addAll(encapsulateArrayClass(reviewDOS)); + reviewData.addAll(reviewDOS); } - return ResultUtil.success(reviewData); + + //根据id进行去重 + reviewData = reviewData.stream() + .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) + .values() + .stream() + .collect(Collectors.toList()); + + + //按照申请时间降序排序 + Collections.sort(reviewData, new Comparator() { + @Override + public int compare(ReviewDO review1, ReviewDO review2) { + return review2.getApplicationTime().compareTo(review1.getApplicationTime()); + } + }); + + //封装对应VO类 + List result = encapsulateArrayClass(reviewData); + + return ResultUtil.success(result); + } + + + @Override + public BaseResponse getUserReview(Integer page, + Integer pageSize, + HttpServletRequest request) { + log.info("\t> 执行 Service 层 ReviewService.getUserReview 方法"); + + //获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //存储审核数据的数组 + List reviewData = new ArrayList<>(); + + //先获取用户为项目负责人的项目列表 + projectDAO.getProjectByPrincipalUser(userId); + + //先从用户为 项目负责人 的项目中获取对应 审核信息 + for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectAllReviewFromProject(projectDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //在从用户为 子系统负责人 的项目中获取对应 审核信息 + for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectReviewFromSubsystem(projectChildDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + + //在从用户为 子模块负责人 的项目中获取对应 审核信息 + for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectReviewFromSubmodule(projectModuleDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //根据id进行去重 + reviewData = reviewData.stream() + .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) + .values() + .stream() + .collect(Collectors.toList()); + + //按照申请时间降序排序 + Collections.sort(reviewData, new Comparator() { + @Override + public int compare(ReviewDO review1, ReviewDO review2) { + return review2.getApplicationTime().compareTo(review1.getApplicationTime()); + } + }); + + //封装对应VO类 + List result = encapsulateArrayClass(reviewData); + + return ResultUtil.success(result); + } + + + @Override + public BaseResponse addReview(ReviewAddVO reviewAddVO, HttpServletRequest request) { + log.info("\t> 执行 Service 层 ReviewService.addReview 方法"); + + //获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //定义要添加的审核实体类 + ReviewDO reviewDO = new ReviewDO(); + //现将属性相同的值拷贝 + Processing.copyProperties(reviewAddVO, reviewDO); + + //定义审核的类型(子模块id为空则为 子系统类型,否则为子模块类型) + if (reviewAddVO.getProjectModuleId() == null) { + reviewDO.setCategory(ReviewConstants.SUBSYSTEM); + } else if (reviewAddVO.getProjectModuleId() != null) { + reviewDO.setCategory(ReviewConstants.SUBMODULE); + } + + //定义申请者id + reviewDO.setSenderId(userId); + //添加数据 + reviewDAO.addReview(reviewDO); + + return ResultUtil.success("申请成功"); + } + + + @Override + public BaseResponse updateReviewResult(ReviewUpdateResultVO reviewUpdateResultVO, HttpServletRequest request) { + + //获取当前用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //获取对应审核信息 + ReviewDO reviewDO = reviewDAO.selectReviewById(reviewUpdateResultVO.getId()); + + if (reviewDO == null) { + return ResultUtil.error(ErrorCode.REVIEW_NOT_EXIST); + } + + //设置对应属性 + reviewDO.setReviewTime(new Date()); + reviewDO.setRecipientId(userId); + reviewDO.setReviewResult(reviewUpdateResultVO.getResult()); + + //更新数据 + reviewDAO.updateReview(reviewDO); + + return ResultUtil.success(); } @@ -94,14 +243,22 @@ public class ReviewServiceImpl implements ReviewService { ReviewVO reviewVO = new ReviewVO(); // 现将相同的属性赋值 Processing.copyProperties(reviewDO, reviewVO); -// 赋值其他属性 +// 赋值其他非空属性 reviewVO.setCategory(Processing.turnReviewCategory(reviewDO.getCategory())) .setSenderName(userMapper.getUserById(reviewDO.getSenderId()).getNickname()) - .setRecipientName(userMapper.getUserById(reviewDO.getRecipientId()).getNickname()) .setProjectName(projectDAO.getProjectById(reviewDO.getProjectId()).getName()) - .setSubsystemName(reviewDAO.getNameBySubproject(reviewDO.getProjectSubsystemId())) - .setSubmoduleName(reviewDAO.getNameBySubproject(reviewDO.getProjectSubmoduleId())) + .setSubsystemName(projectMapper.getProjectChildById( + Math.toIntExact(reviewDO.getProjectChildId())).getName()) .setResult(Processing.turnReviewResult(reviewDO.getReviewResult())); +// 赋值可为空属性并进行判断 + if (reviewDO.getRecipientId() != null) { + reviewVO.setRecipientName(userMapper.getUserById(reviewDO.getRecipientId()).getNickname()); + } + if (reviewDO.getProjectModuleId() != null) { + reviewVO.setSubmoduleName(reviewDAO.getNameByModule(Math.toIntExact(reviewDO.getProjectModuleId()))); + } else { + reviewVO.setSubmoduleName("无"); + } // 将封装好的结果添加到结果集 resultData.add(reviewVO); } @@ -110,9 +267,6 @@ public class ReviewServiceImpl implements ReviewService { } - - - } diff --git a/src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml b/src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml index 1d4c6ed..23a6f09 100644 --- a/src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml +++ b/src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml @@ -25,11 +25,11 @@ project_id, - - project_subsystem_id, + + project_child_id, - - project_submodule_id, + + project_module_id, application_time, @@ -63,11 +63,11 @@ #{projectId}, - - #{projectSubsystemId}, + + #{projectChildId}, - - #{projectSubmoduleId}, + + #{projectModuleId}, #{applicationTime}, @@ -112,12 +112,12 @@ project_id = #{projectId}, - - project_subsystem_id = #{projectSubsystemId}, + + project_child_id = #{projectChildId}, - - project_submodule_id = #{projectSubmoduleId}, + + project_module_id = #{projectModuleId},