diff --git a/src/main/java/com/jsl/oa/common/constant/ReviewConstants.java b/src/main/java/com/jsl/oa/common/constant/ReviewConstants.java new file mode 100644 index 0000000..3468ef4 --- /dev/null +++ b/src/main/java/com/jsl/oa/common/constant/ReviewConstants.java @@ -0,0 +1,29 @@ +package com.jsl.oa.common.constant; + + +/** + *

Review常量类

+ *
+ * 用于存放审核信息的审批状态常量与类别常量 + * + * @version v1.1.0 + * @since v1.1.0 + * @author zrx_hhh + */ +public class ReviewConstants { + +// 审核状态 0:未通过;1:已通过;2:未审批 + public static final short NOT_APPROVED = 0; + + public static final short APPROVED = 1; + + public static final short PENDING = 2; + +// 审核类型 0:子系统;1:子模块 + public static final short SUBSYSTEM = 0; + + public static final short SUBMODULE = 1; + +} + + diff --git a/src/main/java/com/jsl/oa/controllers/ReviewController.java b/src/main/java/com/jsl/oa/controllers/ReviewController.java index ecf6a30..563249d 100644 --- a/src/main/java/com/jsl/oa/controllers/ReviewController.java +++ b/src/main/java/com/jsl/oa/controllers/ReviewController.java @@ -1,14 +1,19 @@ package com.jsl.oa.controllers; +import com.jsl.oa.model.vodata.ReviewAddVO; +import com.jsl.oa.model.vodata.ReviewUpdateResultVO; import com.jsl.oa.services.ReviewService; import com.jsl.oa.utils.BaseResponse; +import com.jsl.oa.utils.ErrorCode; +import com.jsl.oa.utils.ResultUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotNull; /** * 审核控制器 @@ -22,18 +27,79 @@ import javax.servlet.http.HttpServletRequest; @RequiredArgsConstructor public class ReviewController { + // 审核服务 private final ReviewService reviewService; /** - * @Description: 获取我的审核列表 + * @Description: 获取审核记录列表 * @Date: 2024/4/11 * @Param request: **/ - @GetMapping("/review/getMyReview") - public BaseResponse getUserReview(@RequestParam Long projectId, HttpServletRequest request) { - return reviewService.getUserReview(projectId, request); + @GetMapping("/review/getReviewRecords") + public BaseResponse getUserReviewRecords( + @RequestParam Integer page, + @RequestParam Integer pageSize, + HttpServletRequest request) { + log.info("请求接口[GET]: /review/getMyReview"); + return reviewService.getUserReview(page, pageSize, request); } + + /** + * @Description: 获取我的审核数据 + * @Date: 2024/4/12 + * @Param request: + **/ + @GetMapping("/review/getMyReview") + public BaseResponse getMyReview(@RequestParam Integer page, + @RequestParam Integer pageSize, + HttpServletRequest request) { + return reviewService.getUserPendingApprovalReview(page, pageSize, request); + } + + + /** + * @Description: 新增审核申请 + * @Date: 2024/4/12 + * @Param null: + **/ + @PostMapping("/review/add") + public BaseResponse addReview(@RequestBody @Validated ReviewAddVO reviewAddVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request) { + log.info("请求接口[POST]: /review/add"); + + if (bindingResult.hasErrors()) { + return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR); + } + + return reviewService.addReview(reviewAddVO, request); + } + + + @PutMapping("/review/updateReview") + public BaseResponse updateReview(@RequestBody @Validated ReviewUpdateResultVO reviewUpdateResultVOVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request) { + log.info("请求接口[PUT]: /review/updateReview"); + + if (bindingResult.hasErrors()) { + return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR); + } + + return reviewService.updateReviewResult(reviewUpdateResultVOVO, request); + } + + + @GetMapping("/review/search") + public BaseResponse searchReview(String content, + Short statue, + HttpServletRequest request, + @RequestParam Integer page, + @RequestParam Integer pageSize) { + log.info("请求接口[GET]: /review/search"); + return reviewService.searchReview(content, statue, request, page, pageSize); + } } diff --git a/src/main/java/com/jsl/oa/dao/ProjectDAO.java b/src/main/java/com/jsl/oa/dao/ProjectDAO.java index 06d305a..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; @@ -28,27 +29,38 @@ public class ProjectDAO { private final Gson gson; public void projectAdd(ProjectInfoVO projectAdd) { + log.info("\t> 执行 DAO 层 ProjectDAO.projectAdd 方法"); + log.info("\t\t> 从 MySQL 获取数据"); projectMapper.projectAdd(projectAdd); } public void projectWorkAdd(ProjectWorkVO projectWorkVO) { + log.info("\t> 执行 DAO 层 ProjectDAO.projectWorkAdd 方法"); + log.info("\t\t> 从 MySQL 获取数据"); projectMapper.projectWorkAdd(projectWorkVO); } public ProjectDO projectEdit(@NotNull ProjectEditVO projectEdit, Long projectId) { + log.info("\t> 执行 DAO 层 ProjectDAO.projectEdit 方法"); + log.info("\t\t> 从 MySQL 更新数据"); ProjectDO projectDO = new ProjectDO(); Processing.copyProperties(projectEdit, projectDO); projectDO.setId(projectId); projectMapper.projectEdit(projectDO); + log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.getProjectById(projectId); } public boolean isExistProject(Long id) { + log.info("\t> 执行 DAO 层 ProjectDAO.isExistProject 方法"); + log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.getProjectById(id) != null; } public ProjectShowDO getHeader() { + log.info("\t> 执行 DAO 层 ProjectDAO.getHeader 方法"); + log.info("\t\t> 从 MySQL 获取数据"); String getProjectShowSql = projectMapper.getHeader(); ProjectShowDO getProjectShow = null; if (getProjectShowSql != null && !"{}".equals(getProjectShowSql)) { @@ -60,6 +72,7 @@ public class ProjectDAO { getProjectShow.setOrder("desc"); getProjectShow.setData(new ArrayList<>()); try { + log.info("\t\t> 从 MySQL 插入数据"); projectMapper.insertProjectShow(); } catch (DuplicateKeyException ignored) { } @@ -70,6 +83,7 @@ public class ProjectDAO { } private void sortProject(@NotNull ProjectShowDO projectShowDO) { + log.info("\t> 执行 DAO 层 ProjectDAO.sortProject 方法"); for (int i = 0; i < projectShowDO.getData().size(); i++) { for (int j = 0; j < projectShowDO.getData().size(); j++) { if ("desc".equals(projectShowDO.getOrder())) { @@ -88,22 +102,30 @@ public class ProjectDAO { } public boolean setProjectShow(ProjectShowDO projectShowDO) { + log.info("\t> 执行 DAO 层 ProjectDAO.setProjectShow 方法"); sortProject(projectShowDO); String setProjectShow = gson.toJson(projectShowDO); + log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.setProjectShow(setProjectShow); } public ProjectDO getProjectById(Long id) { + log.info("\t> 执行 DAO 层 ProjectDAO.getProjectById 方法"); + log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.getProjectById(id); } public List get(Long userId, List tags, List isFinish) { + log.info("\t> 执行 DAO 层 ProjectDAO.get 方法"); + log.info("\t\t> 从 MySQL 获取数据"); if (tags != null && !tags.isEmpty()) { + log.info("tags"); return projectMapper.getByTags(userId, tags, isFinish); } if (isFinish != null && !isFinish.isEmpty()) { + log.info("finish"); return projectMapper.getByIsfinish(userId, isFinish); } @@ -112,6 +134,8 @@ public class ProjectDAO { } public List workget(Long userId, List tags, List isFinish, Integer is) { + log.info("\t> 执行 DAO 层 ProjectDAO.workGet 方法"); + log.info("\t\t> 从 MySQL 获取数据"); if (tags != null && !tags.isEmpty()) { return projectMapper.workgetByTags(userId, tags, is, isFinish); } @@ -124,25 +148,34 @@ public class ProjectDAO { } public ProjectDO getByName(String name) { + log.info("\t> 执行 DAO 层 ProjectDAO.getByName 方法"); + log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.getByName(name); } public boolean projectDelete(Long id) { + log.info("\t> 执行 DAO 层 ProjectDAO.projectDelete 方法"); + log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.deleteProject(id); } public boolean isExistProjectById(Long id) { + log.info("\t> 执行 DAO 层 ProjectDAO.isExistProjectById 方法"); + log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.getProjectById(id) != null; } public boolean isPrincipalUser(Long uid, Long projectId) { + log.info("\t> 执行 DAO 层 ProjectDAO.isPrincipalUser 方法"); + log.info("\t\t> 从 MySQL 获取数据"); ProjectDO projectDO = projectMapper.getProjectById(projectId); return Objects.equals(uid, projectDO.getPrincipalId()); } public List tget(List isFinish, List tags) { + log.info("DAO层tget"); if (tags != null && !tags.isEmpty()) { return projectMapper.tgetBytags(tags, isFinish); @@ -159,15 +192,21 @@ public class ProjectDAO { } public List getProjectByPrincipalUser(Long uid) { - return projectMapper.getProjectByPrincipalUser(uid); + log.info("\t> 执行 DAO 层 ProjectDAO.getProjectFromUser 方法"); + log.info("\t\t> 从 MySQL 获取数据"); + return projectMapper.getAllProjectByUserId(uid); } - public List getAllSubsystemByUserId(Long uid) { - return projectMapper.getAllSubsystemByUserId(uid); + public List getAllProjectChildByUId(Long uid) { + log.info("\t> 执行 DAO 层 ProjectDAO.getAllProjectChildByUId 方法"); + log.info("\t\t> 从 MySQL 获取数据"); + return projectMapper.getAllChildProjectByUserId(uid); } - public List getAllSubmoduleByUserId(Long uid) { - return projectMapper.getAllSubmoduleByUserId(uid); + public List getAllModuleByUId(Long uid) { + log.info("\t> 执行 DAO 层 ProjectDAO.getAllModuleByUId 方法"); + log.info("\t\t> 从 MySQL 获取数据"); + 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 5309e98..012825b 100644 --- a/src/main/java/com/jsl/oa/dao/ReviewDAO.java +++ b/src/main/java/com/jsl/oa/dao/ReviewDAO.java @@ -27,14 +27,55 @@ public class ReviewDAO { private final ReviewMapper reviewMapper; private final ProjectMapper projectMapper; - public List getPrincipalUserReview(Long pid) { - return reviewMapper.selectAllReviewFromProject(pid); + + public List selectAllReviewFromProject(Long projectId) { + return reviewMapper.selectAllReviewFromProject(projectId); } - public String getNameBySubproject(Long subId) { + public List selectApprovedResultReviewFromProject(Long projectId, + short result) { + return reviewMapper.selectApprovedResultReviewFromProject(projectId, + result); + } + + public List selectReviewFromSubsystem(Long subsystemId) { + return reviewMapper.selectReviewFromSubsystem(subsystemId); + } + + public List selectApprovedResultReviewsFromSubsystem(Long subsystemId, + short result) { + return reviewMapper.selectApprovedResultReviewsFromSubsystem(subsystemId, + result); + } + + public List selectReviewFromSubmodule(Long submoduleId) { + return reviewMapper.selectReviewFromSubmodule(submoduleId); + } + + public List selectApprovedResultReviewsFromSubModule(Long id, + short result) { + return reviewMapper.selectApprovedResultReviewFromModule(id, + result); + } + + + public void addReview(ReviewDO reviewDO) { + reviewMapper.addReview(reviewDO); + } + + public ReviewDO selectReviewById(Long id) { + return reviewMapper.selectReviewById(id); + } + + public void updateReview(ReviewDO reviewDO) { + reviewMapper.updateReview(reviewDO); + } + + + public String getNameByModule(Integer subId) { if (subId != null) { - 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 399146b..d365d14 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}) ") 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 6aa89fb..0561dda 100644 --- a/src/main/java/com/jsl/oa/mapper/ReviewMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java @@ -13,16 +13,34 @@ public interface ReviewMapper { + "AND is_delete = 0") List selectAllReviewFromProject(Long projectId); - @Select("SELECT * FROM organize_oa.oa_review WHERE " - + "project_subsystem_id = #{subsystemId} AND is_delete = 0") - List selectReviewFromSubsystem(Long subsystemId); + @Select("SELECT * FROM organize_oa.oa_review WHERE project_id = #{projectId} " + + "AND is_delete = 0 AND review_result = #{result}") + List selectApprovedResultReviewFromProject(Long projectId, short result); @Select("SELECT * FROM organize_oa.oa_review WHERE " - + "project_submodule_id = #{subsystemId} AND is_delete = 0") - List selectReviewFromSubmodule(Long submoduleId); + + "project_child_id = #{childId} AND is_delete = 0") + List selectReviewFromSubsystem(Long childId); + + @Select("SELECT * FROM organize_oa.oa_review WHERE " + + "project_child_id = #{childId} " + + "AND is_delete = 0 AND review_result = #{result}") + List selectApprovedResultReviewsFromSubsystem(Long childId, short result); + + @Select("SELECT * FROM organize_oa.oa_review WHERE " + + "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); + void updateReview(ReviewDO reviewDO); + void addReview(ReviewDO reviewDO); + + @Select("SELECT * FROM organize_oa.oa_review WHERE name = #{name} AND is_delete = 0") + List selectReviewByName(String name); } 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 e4423d1..2280e81 100644 --- a/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java @@ -31,21 +31,21 @@ public class ReviewDO { //审核者用户id private Long recipientId; //审核类别(0:子系统;1:子模块) - private Integer category; + private Short category; //申请的项目id private Long projectId; //申请的子系统id - private Long projectSubsystemId; + private Long projectChildId; //申请的子模块id - private Long projectSubmoduleId; + private Long projectModuleId; //申请时间 private Date applicationTime; //审核时间 private Date reviewTime; //审核结果(0:未通过;1:通过;2:未审批) - private Integer reviewResult; + private Short reviewResult; //是否删除(0:未删除;1:已删除) - private Integer isDelete; + private String isDelete; } diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java new file mode 100644 index 0000000..25114be --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java @@ -0,0 +1,29 @@ +package com.jsl.oa.model.vodata; + + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class ReviewAddVO { + + //申请名称 + @NotBlank(message = "审核名称不能为空") + private String name; + //申请理由 + @NotBlank(message = "申请理由不能为空") + private String content; + //申请的项目id + @NotNull(message = "项目id不能为空") + private Long projectId; + //申请的子系统id + @NotNull(message = "子系统id不能为空") + private Long projectChildId; + //申请的子模块id + 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..7700711 --- /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 reviews; +} + + diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewUpdateResultVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewUpdateResultVO.java new file mode 100644 index 0000000..11d8741 --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewUpdateResultVO.java @@ -0,0 +1,23 @@ +package com.jsl.oa.model.vodata; + +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +@Data +public class ReviewUpdateResultVO { + + @NotNull + private Long id; + + @NotNull + @Min(value = 0, message = "未通过:0,已通过:1,待审批:2") + @Max(value = 2, message = "未通过:0,已通过:1,待审批:2") + private Short result; + + +} + + diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewVO.java index a62beaf..9177701 100644 --- a/src/main/java/com/jsl/oa/model/vodata/ReviewVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewVO.java @@ -30,13 +30,13 @@ public class ReviewVO { //申请的项目名称 private String projectName; //申请的子系统id - private Long projectSubsystemId; + private Long projectChildId; //申请的子系统名称 - private String subsystemName; + private String projectChildName; //申请的子模块id - private Long projectSubmoduleId; + private Long projectModuleId; //申请的模块名称 - private String submoduleName; + private String projectModuleName; //申请时间 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date applicationTime; diff --git a/src/main/java/com/jsl/oa/services/ReviewService.java b/src/main/java/com/jsl/oa/services/ReviewService.java index af5b9a2..bbcfc39 100644 --- a/src/main/java/com/jsl/oa/services/ReviewService.java +++ b/src/main/java/com/jsl/oa/services/ReviewService.java @@ -1,12 +1,21 @@ package com.jsl.oa.services; +import com.jsl.oa.model.vodata.ReviewAddVO; +import com.jsl.oa.model.vodata.ReviewUpdateResultVO; import com.jsl.oa.utils.BaseResponse; import javax.servlet.http.HttpServletRequest; public interface ReviewService { - BaseResponse getUserReview(Long projectId, HttpServletRequest request); + BaseResponse getUserPendingApprovalReview(Integer page, Integer pageSize, HttpServletRequest request); + BaseResponse getUserReview(Integer page, Integer pageSize, HttpServletRequest request); + + BaseResponse addReview(ReviewAddVO reviewAddVO, HttpServletRequest request); + + BaseResponse updateReviewResult(ReviewUpdateResultVO reviewUpdateResultVOVO, HttpServletRequest request); + + BaseResponse searchReview(String content, Short statue, HttpServletRequest request, Integer page, Integer pageSize); } 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 fea172a..6dba1bf 100644 --- a/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java @@ -30,6 +30,7 @@ public class ModuleServiceImpl implements ModuleService { @Override public BaseResponse getByProjectId(Integer projectId, HttpServletRequest request) { + log.info("projectService"); //获取用户id Long userId = Processing.getAuthHeaderToUserId(request); //获取项目负责人id @@ -47,6 +48,7 @@ public class ModuleServiceImpl implements ModuleService { @Override public BaseResponse getBySysId(Integer sysId, HttpServletRequest request) { + log.info("SysService"); //获取用户id Long userId = Processing.getAuthHeaderToUserId(request); //获取子系统负责人id @@ -60,14 +62,14 @@ public class ModuleServiceImpl implements ModuleService { } List projectWorkDOList = moduleMapper.getBySysId(sysId, userId, is); - // 封装VO类 +// 封装VO类 List projectWorkAndNameVOS = new ArrayList<>(); for (ProjectModuleDO projectWorkDO : projectWorkDOList) { ProjectWorkAndNameVO projectWorkAndNameVO = new ProjectWorkAndNameVO(); Processing.copyProperties(projectWorkDO, projectWorkAndNameVO); - // 添加负责人和子系统名称 - projectWorkAndNameVO - .setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getProjectChildId()).getName()) +// 添加负责人和子系统名称 + projectWorkAndNameVO. + 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 ce19840..b537ee8 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,23 @@ 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.ReviewDataVO; +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 +25,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,16 +38,19 @@ 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) { + public BaseResponse getUserPendingApprovalReview(Integer page, + Integer pageSize, + HttpServletRequest request) { //获取用户 Long userId = Processing.getAuthHeaderToUserId(request); + //存储审核数据的数组 - List reviewData = new ArrayList<>(); + List reviewData = new ArrayList<>(); //先获取用户为项目负责人的项目列表 projectDAO.getProjectByPrincipalUser(userId); @@ -49,32 +58,276 @@ 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); + + //封装结果类与数据总数 + ReviewDataVO reviewDataVO = getReviewsByPage(result, page, pageSize); + + return ResultUtil.success(reviewDataVO); + } + + + @Override + public BaseResponse getUserReview(Integer page, + Integer pageSize, + HttpServletRequest request) { + + //获取用户 + 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); + + //封装结果类与数据总数 + ReviewDataVO reviewDataVO = getReviewsByPage(result, page, pageSize); + + return ResultUtil.success(reviewDataVO); + } + + + @Override + public BaseResponse addReview(ReviewAddVO reviewAddVO, HttpServletRequest request) { + + //获取用户 + 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(); + } + + + + @Override + public BaseResponse searchReview(String content, + Short statue, + HttpServletRequest request, + Integer page, Integer pageSize) { + + List reviewVOS = new ArrayList<>(); + +// 根据判断结果筛选 + if (statue == null || statue.equals("")) { + List reviewVOs = getReview(request); + reviewVOS.addAll(reviewVOs); + } else { + List reviewVOs = getReviewsByResult(request, statue); + reviewVOS.addAll(reviewVOs); + } + +// 根据内容筛选 + if (content == null || content.equals("")) { + //封装结果类与数据总数 + ReviewDataVO reviewDataVO = getReviewsByPage(reviewVOS, page, pageSize); + + return ResultUtil.success(reviewDataVO); + } else { + reviewVOS = reviewVOS.stream() + .filter(reviewVO -> reviewVO.getName().contains(content) || reviewVO.getContent().contains(content)) + .collect(Collectors.toList()); + } + + + //封装结果类与数据总数 + ReviewDataVO reviewDataVO = getReviewsByPage(reviewVOS, page, pageSize); + + return ResultUtil.success(reviewDataVO); + } + + + + private List getReview(HttpServletRequest request) { + //获取用户 + 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 result; } @@ -92,14 +345,23 @@ 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())) + .setProjectChildName(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.setProjectModuleName( + reviewDAO.getNameByModule(Math.toIntExact(reviewDO.getProjectModuleId()))); + } else { + reviewVO.setProjectModuleName("无"); + } // 将封装好的结果添加到结果集 resultData.add(reviewVO); } @@ -108,9 +370,83 @@ public class ReviewServiceImpl implements ReviewService { } + public List getReviewsByResult( + HttpServletRequest request, + Short result) { + +// 获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //存储审核数据的数组 + List reviewData = new ArrayList<>(); + + //先获取用户为项目负责人的项目列表 + projectDAO.getProjectByPrincipalUser(userId); + + //先从用户为 项目负责人 的项目中获取对应 审核信息 + for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewFromProject(projectDO.getId(), + result); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //在从用户为 子系统负责人 的项目中获取对应 审核信息 + for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) { + //查询每个项目下状态为2的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewsFromSubsystem(projectChildDO.getId(), + result); + //封装VO类 + reviewData.addAll(reviewDOS); + } + //在从用户为 子模块负责人 的项目中获取对应 审核信息 + for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewsFromSubModule(projectModuleDO.getId(), + result); + //封装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()); + } + }); + + return encapsulateArrayClass(reviewData); + } + + + public ReviewDataVO getReviewsByPage(List allReviews, int page, int pageSize) { + ReviewDataVO reviewDataVO = new ReviewDataVO(); + int total = allReviews.size(); + int startIndex = (page - 1) * pageSize; + int endIndex = Math.min(startIndex + pageSize, total); + List reviewsOnPage = allReviews.subList(startIndex, endIndex); + + reviewDataVO.setReviews(reviewsOnPage); + reviewDataVO.setDataTotal(total); + + return reviewDataVO; + } } diff --git a/src/main/java/com/jsl/oa/utils/ErrorCode.java b/src/main/java/com/jsl/oa/utils/ErrorCode.java index bb01d53..05e988d 100755 --- a/src/main/java/com/jsl/oa/utils/ErrorCode.java +++ b/src/main/java/com/jsl/oa/utils/ErrorCode.java @@ -52,7 +52,8 @@ public enum ErrorCode { PROJECT_CUTTING_NOT_EXIST("ProjectCuttingNotExist", 40017, "项目分割模块不存在"), PROJECT_USER_NOT_EXIST("ProjectUserNotExist", 40018, "用户项目表无对应记录"), PROJECT_FILE_JSON_ERROR("ProjectFileJsonError", 40019, "项目文件json格式错误"), - PROJECT_NOT_USER("ProjectNotUser", 40020, "项目无此用户"); + PROJECT_NOT_USER("ProjectNotUser", 40020, "项目无此用户"), + REVIEW_NOT_EXIST("ReviewNotExit", 40101, "未找到对应审核信息"); private final String output; diff --git a/src/main/java/com/jsl/oa/utils/Processing.java b/src/main/java/com/jsl/oa/utils/Processing.java index 1eb3b40..2c12f37 100755 --- a/src/main/java/com/jsl/oa/utils/Processing.java +++ b/src/main/java/com/jsl/oa/utils/Processing.java @@ -440,7 +440,7 @@ public class Processing { * @Date: 2024/4/11 * @Param category: **/ - public static String turnReviewCategory(Integer category) { + public static String turnReviewCategory(short category) { switch (category) { case 0: return "子系统"; @@ -451,7 +451,7 @@ public class Processing { } } - public static String turnReviewResult(Integer result) { + public static String turnReviewResult(short result) { switch (result) { case 0: return "已拒绝"; diff --git a/src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml b/src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml new file mode 100644 index 0000000..23a6f09 --- /dev/null +++ b/src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml @@ -0,0 +1,145 @@ + + + + + + INSERT INTO organize_oa.oa_review + + + name, + + + content, + + + sender_id, + + + recipient_id, + + + category, + + + project_id, + + + project_child_id, + + + project_module_id, + + + application_time, + + + review_time, + + + review_result, + + + is_delete, + + + + + #{name}, + + + #{content}, + + + #{senderId}, + + + #{recipientId}, + + + #{category}, + + + #{projectId}, + + + #{projectChildId}, + + + #{projectModuleId}, + + + #{applicationTime}, + + + #{reviewTime}, + + + #{reviewResult}, + + + #{isDelete}, + + + + + + + update organize_oa.oa_review + + + name = #{name}, + + + + content = #{content}, + + + + sender_id = #{senderId}, + + + + recipient_id = #{recipientId}, + + + + category = #{category}, + + + + project_id = #{projectId}, + + + + project_child_id = #{projectChildId}, + + + + project_module_id = #{projectModuleId}, + + + + application_time = #{applicationTime}, + + + + review_time = #{reviewTime}, + + + + review_result = #{reviewResult}, + + + + is_delete = #{isDelete}, + + + where id = #{id} + + + + + + \ No newline at end of file