Compare commits

..

14 Commits

Author SHA1 Message Date
1d914a5217 Merge pull request 'feat:增加新业务功能获取我的审核' (#13) from feature-zrx into develop
Reviewed-on: #13
Reviewed-by: 筱锋xiao_lfeng <gm@x-lf.cn>
2024-04-16 21:39:25 +08:00
xiangZr-hhh
1a65d8ce8f #patch:补丁
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 19s
删除多余的log日志
2024-04-16 19:33:42 +08:00
xiangZr-hhh
f3840de509 Merge branch 'develop' of https://git-fy.cn/WxxyDeveloper/JSL_OrganizeInternalOA into feature-zrx
# Conflicts:
#	src/main/java/com/jsl/oa/controllers/ReviewController.java
#	src/main/java/com/jsl/oa/dao/ProjectDAO.java
#	src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java
#	src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java
2024-04-16 19:30:09 +08:00
xiangZr-hhh
cd65a5c6f8 fix:调整查询接口
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 19s
调整所有审核查询接口的部分字段名称
2024-04-16 19:00:32 +08:00
xiangZr-hhh
cb1d61da88 fix:修正查询接口
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 19s
分页修正
2024-04-16 18:20:06 +08:00
xiangZr-hhh
36bbaf0995 fix:修正查询接口
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 19s
修正分页与查询接口
2024-04-16 18:09:16 +08:00
xiangZr-hhh
8ab59b5a1d patch:补丁
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 23s
修正部分数据表字段,修正对应接口
2024-04-16 16:07:06 +08:00
xiangZr-hhh
bc545bbd76 Merge branch 'develop' of https://git-fy.cn/WxxyDeveloper/JSL_OrganizeInternalOA into feature-zrx
# Conflicts:
#	src/main/java/com/jsl/oa/mapper/ProjectMapper.java
#	src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java
2024-04-16 14:31:33 +08:00
xiangZr-hhh
cd51b261e1 fix:修改申请查询接口
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 20s
修正部分查询逻辑
2024-04-12 19:24:24 +08:00
xiangZr-hhh
36964d4447 fix:修改添加审核信息、查询审核信息接口
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 18s
添加审核信息接口:增加判断审核名称是否重复
获取审核信息接口:在子模块名称为空时,返回无,而不是返回null
2024-04-12 19:07:27 +08:00
xiangZr-hhh
49247fd88f fix:修改审核信息接口
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 17s
修正xml文件的部分bug
2024-04-12 18:42:06 +08:00
xiangZr-hhh
ec45c0b233 feat:增加新业务功能修改审核状态
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 19s
2024-04-12 14:28:28 +08:00
xiangZr-hhh
ff34595002 feat:增加新业务功能新增审核
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 20s
2024-04-12 09:20:51 +08:00
xiangZr-hhh
3b9a7cfe5e feat:增加新业务功能获取我的审核
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 22s
2024-04-12 08:20:28 +08:00
17 changed files with 831 additions and 64 deletions

View File

@ -0,0 +1,29 @@
package com.jsl.oa.common.constant;
/**
* <h1>Review常量类</h1>
* <hr/>
* 用于存放审核信息的审批状态常量与类别常量
*
* @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;
}

View File

@ -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);
}
}

View File

@ -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<ProjectDO> get(Long userId, List<String> tags, List<String> 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<ProjectDO> workget(Long userId, List<String> tags, List<String> 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<ProjectDO> tget(List<String> isFinish, List<String> tags) {
log.info("DAO层tget");
if (tags != null && !tags.isEmpty()) {
return projectMapper.tgetBytags(tags, isFinish);
@ -159,15 +192,21 @@ public class ProjectDAO {
}
public List<ProjectDO> getProjectByPrincipalUser(Long uid) {
return projectMapper.getProjectByPrincipalUser(uid);
log.info("\t> 执行 DAO 层 ProjectDAO.getProjectFromUser 方法");
log.info("\t\t> 从 MySQL 获取数据");
return projectMapper.getAllProjectByUserId(uid);
}
public List<ProjectModuleDO> getAllSubsystemByUserId(Long uid) {
return projectMapper.getAllSubsystemByUserId(uid);
public List<ProjectChildDO> getAllProjectChildByUId(Long uid) {
log.info("\t> 执行 DAO 层 ProjectDAO.getAllProjectChildByUId 方法");
log.info("\t\t> 从 MySQL 获取数据");
return projectMapper.getAllChildProjectByUserId(uid);
}
public List<ProjectModuleDO> getAllSubmoduleByUserId(Long uid) {
return projectMapper.getAllSubmoduleByUserId(uid);
public List<ProjectModuleDO> getAllModuleByUId(Long uid) {
log.info("\t> 执行 DAO 层 ProjectDAO.getAllModuleByUId 方法");
log.info("\t\t> 从 MySQL 获取数据");
return projectMapper.getAllModuleByUserId(uid);
}
}

View File

@ -27,14 +27,55 @@ public class ReviewDAO {
private final ReviewMapper reviewMapper;
private final ProjectMapper projectMapper;
public List<ReviewDO> getPrincipalUserReview(Long pid) {
return reviewMapper.selectAllReviewFromProject(pid);
public List<ReviewDO> selectAllReviewFromProject(Long projectId) {
return reviewMapper.selectAllReviewFromProject(projectId);
}
public String getNameBySubproject(Long subId) {
public List<ReviewDO> selectApprovedResultReviewFromProject(Long projectId,
short result) {
return reviewMapper.selectApprovedResultReviewFromProject(projectId,
result);
}
public List<ReviewDO> selectReviewFromSubsystem(Long subsystemId) {
return reviewMapper.selectReviewFromSubsystem(subsystemId);
}
public List<ReviewDO> selectApprovedResultReviewsFromSubsystem(Long subsystemId,
short result) {
return reviewMapper.selectApprovedResultReviewsFromSubsystem(subsystemId,
result);
}
public List<ReviewDO> selectReviewFromSubmodule(Long submoduleId) {
return reviewMapper.selectReviewFromSubmodule(submoduleId);
}
public List<ReviewDO> 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) {

View File

@ -111,13 +111,26 @@ public interface ProjectMapper {
+ "where DATE(deadline) = DATE(#{threeDayLater}) and status = 0")
List<ProjectModuleDO> getProjectWorkByTime(LocalDateTime threeDayLater);
List<ProjectModuleDO> getAllSubmoduleByUserId(Long uid);
List<ProjectDO> getProjectByPrincipalUser(Long uid);
@Select("select * from organize_oa.oa_project_modules "
+ "where is_delete = 0 and principal_id = #{uid}")
List<ProjectModuleDO> getAllModuleByUserId(Long uid);
@Select("select * from organize_oa.oa_project_child "
+ "where project_id = #{pid} and is_delete = 0 ")
List<ProjectChildDO> getAllChildProjectByUserId(Long uid);
@Select("select * from organize_oa.oa_project "
+ "where is_delete = 0 and principal_id = #{uid}")
List<ProjectDO> getAllProjectByUserId(Long uid);
List<ProjectModuleDO> getAllSubsystemByUserId(Long uid);
@Select("select * from organize_oa.oa_project_child where "
+ "DATE (created_at) = DATE (#{threeDaysLater}) and status = 0")
List<ProjectChildDO> getProjectChildByTime(LocalDateTime threeDaysLater);
@Select("select * from organize_oa.oa_project_child where "
+ "id = #{id} and is_delete = 0")
ProjectChildDO getProjectChildById(Integer id);
}

View File

@ -13,16 +13,34 @@ public interface ReviewMapper {
+ "AND is_delete = 0")
List<ReviewDO> selectAllReviewFromProject(Long projectId);
@Select("SELECT * FROM organize_oa.oa_review WHERE "
+ "project_subsystem_id = #{subsystemId} AND is_delete = 0")
List<ReviewDO> selectReviewFromSubsystem(Long subsystemId);
@Select("SELECT * FROM organize_oa.oa_review WHERE project_id = #{projectId} "
+ "AND is_delete = 0 AND review_result = #{result}")
List<ReviewDO> selectApprovedResultReviewFromProject(Long projectId, short result);
@Select("SELECT * FROM organize_oa.oa_review WHERE "
+ "project_submodule_id = #{subsystemId} AND is_delete = 0")
List<ReviewDO> selectReviewFromSubmodule(Long submoduleId);
+ "project_child_id = #{childId} AND is_delete = 0")
List<ReviewDO> selectReviewFromSubsystem(Long childId);
@Select("SELECT * FROM organize_oa.oa_review WHERE "
+ "project_child_id = #{childId} "
+ "AND is_delete = 0 AND review_result = #{result}")
List<ReviewDO> selectApprovedResultReviewsFromSubsystem(Long childId, short result);
@Select("SELECT * FROM organize_oa.oa_review WHERE "
+ "project_module_id = #{moduleId} AND is_delete = 0")
List<ReviewDO> selectReviewFromSubmodule(Long moduleId);
@Select("SELECT * FROM organize_oa.oa_review WHERE review_result = #{result} and "
+ "project_module_id = #{moduleId} AND is_delete = 0")
List<ReviewDO> 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<ReviewDO> selectReviewByName(String name);
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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<ReviewVO> reviews;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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<ProjectModuleDO> projectWorkDOList = moduleMapper.getBySysId(sysId, userId, is);
// 封装VO类
// 封装VO类
List<ProjectWorkAndNameVO> 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);

View File

@ -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<ReviewVO> reviewData = new ArrayList<>();
List<ReviewDO> reviewData = new ArrayList<>();
//先获取用户为项目负责人的项目列表
projectDAO.getProjectByPrincipalUser(userId);
@ -49,32 +58,276 @@ public class ReviewServiceImpl implements ReviewService {
//先从用户为 项目负责人 的项目中获取对应 审核信息
for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewMapper.
selectAllReviewFromProject(projectDO.getId());
List<ReviewDO> reviewDOS = reviewDAO.
selectApprovedResultReviewFromProject(projectDO.getId(),
ReviewConstants.PENDING);
//封装VO类
reviewData.addAll(encapsulateArrayClass(reviewDOS));
reviewData.addAll(reviewDOS);
}
//在从用户为 子系统负责人 的项目中获取对应 审核信息
for (ProjectModuleDO projectWorkDO : projectDAO.getAllSubsystemByUserId(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewMapper.
selectReviewFromSubsystem(projectWorkDO.getId());
for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) {
//查询每个项目下状态为2的审核信息
List<ReviewDO> 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<ReviewDO> reviewDOS = reviewMapper.
selectReviewFromSubmodule(projectWorkDO.getId());
List<ReviewDO> 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<ReviewDO>() {
@Override
public int compare(ReviewDO review1, ReviewDO review2) {
return review2.getApplicationTime().compareTo(review1.getApplicationTime());
}
});
//封装对应VO类
List<ReviewVO> 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<ReviewDO> reviewData = new ArrayList<>();
//先获取用户为项目负责人的项目列表
projectDAO.getProjectByPrincipalUser(userId);
//先从用户为 项目负责人 的项目中获取对应 审核信息
for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewDAO.
selectAllReviewFromProject(projectDO.getId());
//封装VO类
reviewData.addAll(reviewDOS);
}
//在从用户为 子系统负责人 的项目中获取对应 审核信息
for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewDAO.
selectReviewFromSubsystem(projectChildDO.getId());
//封装VO类
reviewData.addAll(reviewDOS);
}
//在从用户为 子模块负责人 的项目中获取对应 审核信息
for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> 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<ReviewDO>() {
@Override
public int compare(ReviewDO review1, ReviewDO review2) {
return review2.getApplicationTime().compareTo(review1.getApplicationTime());
}
});
//封装对应VO类
List<ReviewVO> 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<ReviewVO> reviewVOS = new ArrayList<>();
// 根据判断结果筛选
if (statue == null || statue.equals("")) {
List<ReviewVO> reviewVOs = getReview(request);
reviewVOS.addAll(reviewVOs);
} else {
List<ReviewVO> 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<ReviewVO> getReview(HttpServletRequest request) {
//获取用户
Long userId = Processing.getAuthHeaderToUserId(request);
//存储审核数据的数组
List<ReviewDO> reviewData = new ArrayList<>();
//先获取用户为项目负责人的项目列表
projectDAO.getProjectByPrincipalUser(userId);
//先从用户为 项目负责人 的项目中获取对应 审核信息
for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewDAO.
selectAllReviewFromProject(projectDO.getId());
//封装VO类
reviewData.addAll(reviewDOS);
}
//在从用户为 子系统负责人 的项目中获取对应 审核信息
for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewDAO.
selectReviewFromSubsystem(projectChildDO.getId());
//封装VO类
reviewData.addAll(reviewDOS);
}
//在从用户为 子模块负责人 的项目中获取对应 审核信息
for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> 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<ReviewDO>() {
@Override
public int compare(ReviewDO review1, ReviewDO review2) {
return review2.getApplicationTime().compareTo(review1.getApplicationTime());
}
});
//封装对应VO类
List<ReviewVO> 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<ReviewVO> getReviewsByResult(
HttpServletRequest request,
Short result) {
// 获取用户
Long userId = Processing.getAuthHeaderToUserId(request);
//存储审核数据的数组
List<ReviewDO> reviewData = new ArrayList<>();
//先获取用户为项目负责人的项目列表
projectDAO.getProjectByPrincipalUser(userId);
//先从用户为 项目负责人 的项目中获取对应 审核信息
for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> reviewDOS = reviewDAO.
selectApprovedResultReviewFromProject(projectDO.getId(),
result);
//封装VO类
reviewData.addAll(reviewDOS);
}
//在从用户为 子系统负责人 的项目中获取对应 审核信息
for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) {
//查询每个项目下状态为2的审核信息
List<ReviewDO> reviewDOS = reviewDAO.
selectApprovedResultReviewsFromSubsystem(projectChildDO.getId(),
result);
//封装VO类
reviewData.addAll(reviewDOS);
}
//在从用户为 子模块负责人 的项目中获取对应 审核信息
for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) {
//查询每个项目下所有的审核信息
List<ReviewDO> 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<ReviewDO>() {
@Override
public int compare(ReviewDO review1, ReviewDO review2) {
return review2.getApplicationTime().compareTo(review1.getApplicationTime());
}
});
return encapsulateArrayClass(reviewData);
}
public ReviewDataVO getReviewsByPage(List<ReviewVO> 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<ReviewVO> reviewsOnPage = allReviews.subList(startIndex, endIndex);
reviewDataVO.setReviews(reviewsOnPage);
reviewDataVO.setDataTotal(total);
return reviewDataVO;
}
}

View File

@ -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;

View File

@ -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 "已拒绝";

View File

@ -0,0 +1,145 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jsl.oa.mapper.ReviewMapper">
<insert id="addReview" >
INSERT INTO organize_oa.oa_review
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null and name != ''">
name,
</if>
<if test="content != null and content != ''">
content,
</if>
<if test="senderId != null">
sender_id,
</if>
<if test="recipientId != null">
recipient_id,
</if>
<if test="category != null">
category,
</if>
<if test="projectId != null">
project_id,
</if>
<if test="projectChildId != null">
project_child_id,
</if>
<if test="projectModuleId != null">
project_module_id,
</if>
<if test="applicationTime != null">
application_time,
</if>
<if test="reviewTime != null">
review_time,
</if>
<if test="reviewResult != null">
review_result,
</if>
<if test="isDelete != null">
is_delete,
</if>
</trim>
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
<if test="name != null and name != ''">
#{name},
</if>
<if test="content != null and content != ''">
#{content},
</if>
<if test="senderId != null">
#{senderId},
</if>
<if test="recipientId != null">
#{recipientId},
</if>
<if test="category != null">
#{category},
</if>
<if test="projectId != null">
#{projectId},
</if>
<if test="projectChildId != null">
#{projectChildId},
</if>
<if test="projectModuleId != null">
#{projectModuleId},
</if>
<if test="applicationTime != null">
#{applicationTime},
</if>
<if test="reviewTime != null">
#{reviewTime},
</if>
<if test="reviewResult != null">
#{reviewResult},
</if>
<if test="isDelete != null">
#{isDelete},
</if>
</trim>
</insert>
<update id="updateReview" parameterType="com.jsl.oa.model.dodata.ReviewDO">
update organize_oa.oa_review
<trim prefix="SET" suffixOverrides=",">
<if test="name != null and name != ''">
name = #{name},
</if>
<if test="content != null and content != ''">
content = #{content},
</if>
<if test="senderId != null">
sender_id = #{senderId},
</if>
<if test="recipientId != null">
recipient_id = #{recipientId},
</if>
<if test="category != null">
category = #{category},
</if>
<if test="projectId != null">
project_id = #{projectId},
</if>
<if test="projectChildId != null">
project_child_id = #{projectChildId},
</if>
<if test="projectModuleId != null">
project_module_id = #{projectModuleId},
</if>
<if test="applicationTime != null">
application_time = #{applicationTime},
</if>
<if test="reviewTime != null">
review_time = #{reviewTime},
</if>
<if test="reviewResult != null">
review_result = #{reviewResult},
</if>
<if test="isDelete != null">
is_delete = #{isDelete},
</if>
</trim>
where id = #{id}
</update>
</mapper>