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