Merge pull request 'feat:增加新业务功能获取我的审核' (#13) from feature-zrx into develop
Reviewed-on: #13 Reviewed-by: 筱锋xiao_lfeng <gm@x-lf.cn>
This commit is contained in:
commit
1d914a5217
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,19 @@
|
||||||
package com.jsl.oa.controllers;
|
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.services.ReviewService;
|
||||||
import com.jsl.oa.utils.BaseResponse;
|
import com.jsl.oa.utils.BaseResponse;
|
||||||
|
import com.jsl.oa.utils.ErrorCode;
|
||||||
|
import com.jsl.oa.utils.ResultUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.validation.BindingResult;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 审核控制器
|
* 审核控制器
|
||||||
|
@ -22,18 +27,79 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ReviewController {
|
public class ReviewController {
|
||||||
|
|
||||||
|
// 审核服务
|
||||||
private final ReviewService reviewService;
|
private final ReviewService reviewService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 获取我的审核列表
|
* @Description: 获取审核记录列表
|
||||||
* @Date: 2024/4/11
|
* @Date: 2024/4/11
|
||||||
* @Param request:
|
* @Param request:
|
||||||
**/
|
**/
|
||||||
@GetMapping("/review/getMyReview")
|
@GetMapping("/review/getReviewRecords")
|
||||||
public BaseResponse getUserReview(@RequestParam Long projectId, HttpServletRequest request) {
|
public BaseResponse getUserReviewRecords(
|
||||||
return reviewService.getUserReview(projectId, request);
|
@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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.jsl.oa.dao;
|
package com.jsl.oa.dao;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.jsl.oa.mapper.ProjectMapper;
|
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.ProjectDO;
|
||||||
import com.jsl.oa.model.dodata.ProjectModuleDO;
|
import com.jsl.oa.model.dodata.ProjectModuleDO;
|
||||||
import com.jsl.oa.model.dodata.info.ProjectShowDO;
|
import com.jsl.oa.model.dodata.info.ProjectShowDO;
|
||||||
|
@ -28,27 +29,38 @@ public class ProjectDAO {
|
||||||
private final Gson gson;
|
private final Gson gson;
|
||||||
|
|
||||||
public void projectAdd(ProjectInfoVO projectAdd) {
|
public void projectAdd(ProjectInfoVO projectAdd) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.projectAdd 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
|
|
||||||
projectMapper.projectAdd(projectAdd);
|
projectMapper.projectAdd(projectAdd);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void projectWorkAdd(ProjectWorkVO projectWorkVO) {
|
public void projectWorkAdd(ProjectWorkVO projectWorkVO) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.projectWorkAdd 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
projectMapper.projectWorkAdd(projectWorkVO);
|
projectMapper.projectWorkAdd(projectWorkVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProjectDO projectEdit(@NotNull ProjectEditVO projectEdit, Long projectId) {
|
public ProjectDO projectEdit(@NotNull ProjectEditVO projectEdit, Long projectId) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.projectEdit 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 更新数据");
|
||||||
ProjectDO projectDO = new ProjectDO();
|
ProjectDO projectDO = new ProjectDO();
|
||||||
Processing.copyProperties(projectEdit, projectDO);
|
Processing.copyProperties(projectEdit, projectDO);
|
||||||
projectDO.setId(projectId);
|
projectDO.setId(projectId);
|
||||||
projectMapper.projectEdit(projectDO);
|
projectMapper.projectEdit(projectDO);
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
return projectMapper.getProjectById(projectId);
|
return projectMapper.getProjectById(projectId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isExistProject(Long id) {
|
public boolean isExistProject(Long id) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.isExistProject 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
return projectMapper.getProjectById(id) != null;
|
return projectMapper.getProjectById(id) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProjectShowDO getHeader() {
|
public ProjectShowDO getHeader() {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.getHeader 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
String getProjectShowSql = projectMapper.getHeader();
|
String getProjectShowSql = projectMapper.getHeader();
|
||||||
ProjectShowDO getProjectShow = null;
|
ProjectShowDO getProjectShow = null;
|
||||||
if (getProjectShowSql != null && !"{}".equals(getProjectShowSql)) {
|
if (getProjectShowSql != null && !"{}".equals(getProjectShowSql)) {
|
||||||
|
@ -60,6 +72,7 @@ public class ProjectDAO {
|
||||||
getProjectShow.setOrder("desc");
|
getProjectShow.setOrder("desc");
|
||||||
getProjectShow.setData(new ArrayList<>());
|
getProjectShow.setData(new ArrayList<>());
|
||||||
try {
|
try {
|
||||||
|
log.info("\t\t> 从 MySQL 插入数据");
|
||||||
projectMapper.insertProjectShow();
|
projectMapper.insertProjectShow();
|
||||||
} catch (DuplicateKeyException ignored) {
|
} catch (DuplicateKeyException ignored) {
|
||||||
}
|
}
|
||||||
|
@ -70,6 +83,7 @@ public class ProjectDAO {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sortProject(@NotNull ProjectShowDO projectShowDO) {
|
private void sortProject(@NotNull ProjectShowDO projectShowDO) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.sortProject 方法");
|
||||||
for (int i = 0; i < projectShowDO.getData().size(); i++) {
|
for (int i = 0; i < projectShowDO.getData().size(); i++) {
|
||||||
for (int j = 0; j < projectShowDO.getData().size(); j++) {
|
for (int j = 0; j < projectShowDO.getData().size(); j++) {
|
||||||
if ("desc".equals(projectShowDO.getOrder())) {
|
if ("desc".equals(projectShowDO.getOrder())) {
|
||||||
|
@ -88,22 +102,30 @@ public class ProjectDAO {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setProjectShow(ProjectShowDO projectShowDO) {
|
public boolean setProjectShow(ProjectShowDO projectShowDO) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.setProjectShow 方法");
|
||||||
sortProject(projectShowDO);
|
sortProject(projectShowDO);
|
||||||
String setProjectShow = gson.toJson(projectShowDO);
|
String setProjectShow = gson.toJson(projectShowDO);
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
return projectMapper.setProjectShow(setProjectShow);
|
return projectMapper.setProjectShow(setProjectShow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public ProjectDO getProjectById(Long id) {
|
public ProjectDO getProjectById(Long id) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.getProjectById 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
return projectMapper.getProjectById(id);
|
return projectMapper.getProjectById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ProjectDO> get(Long userId, List<String> tags, List<String> isFinish) {
|
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()) {
|
if (tags != null && !tags.isEmpty()) {
|
||||||
|
log.info("tags");
|
||||||
return projectMapper.getByTags(userId, tags, isFinish);
|
return projectMapper.getByTags(userId, tags, isFinish);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFinish != null && !isFinish.isEmpty()) {
|
if (isFinish != null && !isFinish.isEmpty()) {
|
||||||
|
log.info("finish");
|
||||||
return projectMapper.getByIsfinish(userId, isFinish);
|
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) {
|
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()) {
|
if (tags != null && !tags.isEmpty()) {
|
||||||
return projectMapper.workgetByTags(userId, tags, is, isFinish);
|
return projectMapper.workgetByTags(userId, tags, is, isFinish);
|
||||||
}
|
}
|
||||||
|
@ -124,25 +148,34 @@ public class ProjectDAO {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProjectDO getByName(String name) {
|
public ProjectDO getByName(String name) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.getByName 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
return projectMapper.getByName(name);
|
return projectMapper.getByName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean projectDelete(Long id) {
|
public boolean projectDelete(Long id) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.projectDelete 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
return projectMapper.deleteProject(id);
|
return projectMapper.deleteProject(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isExistProjectById(Long id) {
|
public boolean isExistProjectById(Long id) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.isExistProjectById 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
return projectMapper.getProjectById(id) != null;
|
return projectMapper.getProjectById(id) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isPrincipalUser(Long uid, Long projectId) {
|
public boolean isPrincipalUser(Long uid, Long projectId) {
|
||||||
|
log.info("\t> 执行 DAO 层 ProjectDAO.isPrincipalUser 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
ProjectDO projectDO = projectMapper.getProjectById(projectId);
|
ProjectDO projectDO = projectMapper.getProjectById(projectId);
|
||||||
return Objects.equals(uid, projectDO.getPrincipalId());
|
return Objects.equals(uid, projectDO.getPrincipalId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<ProjectDO> tget(List<String> isFinish, List<String> tags) {
|
public List<ProjectDO> tget(List<String> isFinish, List<String> tags) {
|
||||||
|
log.info("DAO层tget");
|
||||||
|
|
||||||
if (tags != null && !tags.isEmpty()) {
|
if (tags != null && !tags.isEmpty()) {
|
||||||
return projectMapper.tgetBytags(tags, isFinish);
|
return projectMapper.tgetBytags(tags, isFinish);
|
||||||
|
@ -159,15 +192,21 @@ public class ProjectDAO {
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ProjectDO> getProjectByPrincipalUser(Long uid) {
|
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) {
|
public List<ProjectChildDO> getAllProjectChildByUId(Long uid) {
|
||||||
return projectMapper.getAllSubsystemByUserId(uid);
|
log.info("\t> 执行 DAO 层 ProjectDAO.getAllProjectChildByUId 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
|
return projectMapper.getAllChildProjectByUserId(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ProjectModuleDO> getAllSubmoduleByUserId(Long uid) {
|
public List<ProjectModuleDO> getAllModuleByUId(Long uid) {
|
||||||
return projectMapper.getAllSubmoduleByUserId(uid);
|
log.info("\t> 执行 DAO 层 ProjectDAO.getAllModuleByUId 方法");
|
||||||
|
log.info("\t\t> 从 MySQL 获取数据");
|
||||||
|
return projectMapper.getAllModuleByUserId(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,14 +27,55 @@ public class ReviewDAO {
|
||||||
private final ReviewMapper reviewMapper;
|
private final ReviewMapper reviewMapper;
|
||||||
private final ProjectMapper projectMapper;
|
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) {
|
if (subId != null) {
|
||||||
return projectMapper.getProjectWorkById(subId).getName();
|
return projectMapper.getModuleById(subId).getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subId == null) {
|
if (subId == null) {
|
||||||
|
|
|
@ -111,13 +111,26 @@ public interface ProjectMapper {
|
||||||
+ "where DATE(deadline) = DATE(#{threeDayLater}) and status = 0")
|
+ "where DATE(deadline) = DATE(#{threeDayLater}) and status = 0")
|
||||||
List<ProjectModuleDO> getProjectWorkByTime(LocalDateTime threeDayLater);
|
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 "
|
@Select("select * from organize_oa.oa_project_child where "
|
||||||
+ "DATE (created_at) = DATE (#{threeDaysLater}) and status = 0")
|
+ "DATE (created_at) = DATE (#{threeDaysLater}) and status = 0")
|
||||||
List<ProjectChildDO> getProjectChildByTime(LocalDateTime threeDaysLater);
|
List<ProjectChildDO> getProjectChildByTime(LocalDateTime threeDaysLater);
|
||||||
|
|
||||||
|
|
||||||
|
@Select("select * from organize_oa.oa_project_child where "
|
||||||
|
+ "id = #{id} and is_delete = 0")
|
||||||
|
ProjectChildDO getProjectChildById(Integer id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,16 +13,34 @@ public interface ReviewMapper {
|
||||||
+ "AND is_delete = 0")
|
+ "AND is_delete = 0")
|
||||||
List<ReviewDO> selectAllReviewFromProject(Long projectId);
|
List<ReviewDO> selectAllReviewFromProject(Long projectId);
|
||||||
|
|
||||||
@Select("SELECT * FROM organize_oa.oa_review WHERE "
|
@Select("SELECT * FROM organize_oa.oa_review WHERE project_id = #{projectId} "
|
||||||
+ "project_subsystem_id = #{subsystemId} AND is_delete = 0")
|
+ "AND is_delete = 0 AND review_result = #{result}")
|
||||||
List<ReviewDO> selectReviewFromSubsystem(Long subsystemId);
|
List<ReviewDO> selectApprovedResultReviewFromProject(Long projectId, short result);
|
||||||
|
|
||||||
@Select("SELECT * FROM organize_oa.oa_review WHERE "
|
@Select("SELECT * FROM organize_oa.oa_review WHERE "
|
||||||
+ "project_submodule_id = #{subsystemId} AND is_delete = 0")
|
+ "project_child_id = #{childId} AND is_delete = 0")
|
||||||
List<ReviewDO> selectReviewFromSubmodule(Long submoduleId);
|
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")
|
@Select("SELECT * FROM organize_oa.oa_review WHERE id = #{id} AND is_delete = 0")
|
||||||
ReviewDO selectReviewById(Long id);
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,21 +31,21 @@ public class ReviewDO {
|
||||||
//审核者用户id
|
//审核者用户id
|
||||||
private Long recipientId;
|
private Long recipientId;
|
||||||
//审核类别(0:子系统;1:子模块)
|
//审核类别(0:子系统;1:子模块)
|
||||||
private Integer category;
|
private Short category;
|
||||||
//申请的项目id
|
//申请的项目id
|
||||||
private Long projectId;
|
private Long projectId;
|
||||||
//申请的子系统id
|
//申请的子系统id
|
||||||
private Long projectSubsystemId;
|
private Long projectChildId;
|
||||||
//申请的子模块id
|
//申请的子模块id
|
||||||
private Long projectSubmoduleId;
|
private Long projectModuleId;
|
||||||
//申请时间
|
//申请时间
|
||||||
private Date applicationTime;
|
private Date applicationTime;
|
||||||
//审核时间
|
//审核时间
|
||||||
private Date reviewTime;
|
private Date reviewTime;
|
||||||
//审核结果(0:未通过;1:通过;2:未审批)
|
//审核结果(0:未通过;1:通过;2:未审批)
|
||||||
private Integer reviewResult;
|
private Short reviewResult;
|
||||||
//是否删除(0:未删除;1:已删除)
|
//是否删除(0:未删除;1:已删除)
|
||||||
private Integer isDelete;
|
private String isDelete;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
29
src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java
Normal file
29
src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java
Normal 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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
16
src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java
Normal file
16
src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,13 +30,13 @@ public class ReviewVO {
|
||||||
//申请的项目名称
|
//申请的项目名称
|
||||||
private String projectName;
|
private String projectName;
|
||||||
//申请的子系统id
|
//申请的子系统id
|
||||||
private Long projectSubsystemId;
|
private Long projectChildId;
|
||||||
//申请的子系统名称
|
//申请的子系统名称
|
||||||
private String subsystemName;
|
private String projectChildName;
|
||||||
//申请的子模块id
|
//申请的子模块id
|
||||||
private Long projectSubmoduleId;
|
private Long projectModuleId;
|
||||||
//申请的模块名称
|
//申请的模块名称
|
||||||
private String submoduleName;
|
private String projectModuleName;
|
||||||
//申请时间
|
//申请时间
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date applicationTime;
|
private Date applicationTime;
|
||||||
|
|
|
@ -1,12 +1,21 @@
|
||||||
package com.jsl.oa.services;
|
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 com.jsl.oa.utils.BaseResponse;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
public interface ReviewService {
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ public class ModuleServiceImpl implements ModuleService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseResponse getByProjectId(Integer projectId, HttpServletRequest request) {
|
public BaseResponse getByProjectId(Integer projectId, HttpServletRequest request) {
|
||||||
|
log.info("projectService");
|
||||||
//获取用户id
|
//获取用户id
|
||||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||||
//获取项目负责人id
|
//获取项目负责人id
|
||||||
|
@ -47,6 +48,7 @@ public class ModuleServiceImpl implements ModuleService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseResponse getBySysId(Integer sysId, HttpServletRequest request) {
|
public BaseResponse getBySysId(Integer sysId, HttpServletRequest request) {
|
||||||
|
log.info("SysService");
|
||||||
//获取用户id
|
//获取用户id
|
||||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||||
//获取子系统负责人id
|
//获取子系统负责人id
|
||||||
|
@ -60,14 +62,14 @@ public class ModuleServiceImpl implements ModuleService {
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ProjectModuleDO> projectWorkDOList = moduleMapper.getBySysId(sysId, userId, is);
|
List<ProjectModuleDO> projectWorkDOList = moduleMapper.getBySysId(sysId, userId, is);
|
||||||
// 封装VO类
|
// 封装VO类
|
||||||
List<ProjectWorkAndNameVO> projectWorkAndNameVOS = new ArrayList<>();
|
List<ProjectWorkAndNameVO> projectWorkAndNameVOS = new ArrayList<>();
|
||||||
for (ProjectModuleDO projectWorkDO : projectWorkDOList) {
|
for (ProjectModuleDO projectWorkDO : projectWorkDOList) {
|
||||||
ProjectWorkAndNameVO projectWorkAndNameVO = new ProjectWorkAndNameVO();
|
ProjectWorkAndNameVO projectWorkAndNameVO = new ProjectWorkAndNameVO();
|
||||||
Processing.copyProperties(projectWorkDO, projectWorkAndNameVO);
|
Processing.copyProperties(projectWorkDO, projectWorkAndNameVO);
|
||||||
// 添加负责人和子系统名称
|
// 添加负责人和子系统名称
|
||||||
projectWorkAndNameVO
|
projectWorkAndNameVO.
|
||||||
.setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getProjectChildId()).getName())
|
setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getProjectChildId()).getName())
|
||||||
.setPrincipalUser(userDAO.getUserById(projectWorkDO.getPrincipalId()).getUsername());
|
.setPrincipalUser(userDAO.getUserById(projectWorkDO.getPrincipalId()).getUsername());
|
||||||
|
|
||||||
projectWorkAndNameVOS.add(projectWorkAndNameVO);
|
projectWorkAndNameVOS.add(projectWorkAndNameVO);
|
||||||
|
|
|
@ -1,17 +1,23 @@
|
||||||
package com.jsl.oa.services.impl;
|
package com.jsl.oa.services.impl;
|
||||||
|
|
||||||
|
|
||||||
|
import com.jsl.oa.common.constant.ReviewConstants;
|
||||||
import com.jsl.oa.dao.ProjectDAO;
|
import com.jsl.oa.dao.ProjectDAO;
|
||||||
import com.jsl.oa.dao.ReviewDAO;
|
import com.jsl.oa.dao.ReviewDAO;
|
||||||
import com.jsl.oa.dao.UserDAO;
|
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.mapper.UserMapper;
|
||||||
|
import com.jsl.oa.model.dodata.ProjectChildDO;
|
||||||
import com.jsl.oa.model.dodata.ProjectDO;
|
import com.jsl.oa.model.dodata.ProjectDO;
|
||||||
import com.jsl.oa.model.dodata.ProjectModuleDO;
|
import com.jsl.oa.model.dodata.ProjectModuleDO;
|
||||||
import com.jsl.oa.model.dodata.ReviewDO;
|
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.model.vodata.ReviewVO;
|
||||||
import com.jsl.oa.services.ReviewService;
|
import com.jsl.oa.services.ReviewService;
|
||||||
import com.jsl.oa.utils.BaseResponse;
|
import com.jsl.oa.utils.BaseResponse;
|
||||||
|
import com.jsl.oa.utils.ErrorCode;
|
||||||
import com.jsl.oa.utils.Processing;
|
import com.jsl.oa.utils.Processing;
|
||||||
import com.jsl.oa.utils.ResultUtil;
|
import com.jsl.oa.utils.ResultUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
@ -19,8 +25,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
|
@ -32,16 +38,19 @@ public class ReviewServiceImpl implements ReviewService {
|
||||||
private final ProjectDAO projectDAO;
|
private final ProjectDAO projectDAO;
|
||||||
|
|
||||||
private final UserMapper userMapper;
|
private final UserMapper userMapper;
|
||||||
private final ReviewMapper reviewMapper;
|
private final ProjectMapper projectMapper;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BaseResponse getUserReview(Long projectId, HttpServletRequest request) {
|
public BaseResponse getUserPendingApprovalReview(Integer page,
|
||||||
|
Integer pageSize,
|
||||||
|
HttpServletRequest request) {
|
||||||
//获取用户
|
//获取用户
|
||||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||||
|
|
||||||
|
|
||||||
//存储审核数据的数组
|
//存储审核数据的数组
|
||||||
List<ReviewVO> reviewData = new ArrayList<>();
|
List<ReviewDO> reviewData = new ArrayList<>();
|
||||||
|
|
||||||
//先获取用户为项目负责人的项目列表
|
//先获取用户为项目负责人的项目列表
|
||||||
projectDAO.getProjectByPrincipalUser(userId);
|
projectDAO.getProjectByPrincipalUser(userId);
|
||||||
|
@ -49,32 +58,276 @@ public class ReviewServiceImpl implements ReviewService {
|
||||||
//先从用户为 项目负责人 的项目中获取对应 审核信息
|
//先从用户为 项目负责人 的项目中获取对应 审核信息
|
||||||
for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) {
|
for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) {
|
||||||
//查询每个项目下所有的审核信息
|
//查询每个项目下所有的审核信息
|
||||||
List<ReviewDO> reviewDOS = reviewMapper.
|
List<ReviewDO> reviewDOS = reviewDAO.
|
||||||
selectAllReviewFromProject(projectDO.getId());
|
selectApprovedResultReviewFromProject(projectDO.getId(),
|
||||||
|
ReviewConstants.PENDING);
|
||||||
//封装VO类
|
//封装VO类
|
||||||
reviewData.addAll(encapsulateArrayClass(reviewDOS));
|
reviewData.addAll(reviewDOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
//在从用户为 子系统负责人 的项目中获取对应 审核信息
|
//在从用户为 子系统负责人 的项目中获取对应 审核信息
|
||||||
for (ProjectModuleDO projectWorkDO : projectDAO.getAllSubsystemByUserId(userId)) {
|
for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) {
|
||||||
//查询每个项目下所有的审核信息
|
//查询每个项目下状态为2的审核信息
|
||||||
List<ReviewDO> reviewDOS = reviewMapper.
|
List<ReviewDO> reviewDOS = reviewDAO.
|
||||||
selectReviewFromSubsystem(projectWorkDO.getId());
|
selectApprovedResultReviewsFromSubsystem(projectChildDO.getId(),
|
||||||
|
ReviewConstants.PENDING);
|
||||||
//封装VO类
|
//封装VO类
|
||||||
reviewData.addAll(encapsulateArrayClass(reviewDOS));
|
reviewData.addAll(reviewDOS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//在从用户为 子模块负责人 的项目中获取对应 审核信息
|
//在从用户为 子模块负责人 的项目中获取对应 审核信息
|
||||||
for (ProjectModuleDO projectWorkDO : projectDAO.getAllSubmoduleByUserId(userId)) {
|
for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) {
|
||||||
//查询每个项目下所有的审核信息
|
//查询每个项目下所有的审核信息
|
||||||
List<ReviewDO> reviewDOS = reviewMapper.
|
List<ReviewDO> reviewDOS = reviewDAO.
|
||||||
selectReviewFromSubmodule(projectWorkDO.getId());
|
selectApprovedResultReviewsFromSubModule(projectModuleDO.getId(),
|
||||||
|
ReviewConstants.PENDING);
|
||||||
//封装VO类
|
//封装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();
|
ReviewVO reviewVO = new ReviewVO();
|
||||||
// 现将相同的属性赋值
|
// 现将相同的属性赋值
|
||||||
Processing.copyProperties(reviewDO, reviewVO);
|
Processing.copyProperties(reviewDO, reviewVO);
|
||||||
// 赋值其他属性
|
// 赋值其他非空属性
|
||||||
reviewVO.setCategory(Processing.turnReviewCategory(reviewDO.getCategory()))
|
reviewVO.setCategory(Processing.turnReviewCategory(reviewDO.getCategory()))
|
||||||
.setSenderName(userMapper.getUserById(reviewDO.getSenderId()).getNickname())
|
.setSenderName(userMapper.getUserById(reviewDO.getSenderId()).getNickname())
|
||||||
.setRecipientName(userMapper.getUserById(reviewDO.getRecipientId()).getNickname())
|
|
||||||
.setProjectName(projectDAO.getProjectById(reviewDO.getProjectId()).getName())
|
.setProjectName(projectDAO.getProjectById(reviewDO.getProjectId()).getName())
|
||||||
.setSubsystemName(reviewDAO.getNameBySubproject(reviewDO.getProjectSubsystemId()))
|
.setProjectChildName(projectMapper.getProjectChildById(
|
||||||
.setSubmoduleName(reviewDAO.getNameBySubproject(reviewDO.getProjectSubmoduleId()))
|
Math.toIntExact(reviewDO.getProjectChildId())).getName())
|
||||||
.setResult(Processing.turnReviewResult(reviewDO.getReviewResult()));
|
.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);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,8 @@ public enum ErrorCode {
|
||||||
PROJECT_CUTTING_NOT_EXIST("ProjectCuttingNotExist", 40017, "项目分割模块不存在"),
|
PROJECT_CUTTING_NOT_EXIST("ProjectCuttingNotExist", 40017, "项目分割模块不存在"),
|
||||||
PROJECT_USER_NOT_EXIST("ProjectUserNotExist", 40018, "用户项目表无对应记录"),
|
PROJECT_USER_NOT_EXIST("ProjectUserNotExist", 40018, "用户项目表无对应记录"),
|
||||||
PROJECT_FILE_JSON_ERROR("ProjectFileJsonError", 40019, "项目文件json格式错误"),
|
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;
|
private final String output;
|
||||||
|
|
|
@ -440,7 +440,7 @@ public class Processing {
|
||||||
* @Date: 2024/4/11
|
* @Date: 2024/4/11
|
||||||
* @Param category:
|
* @Param category:
|
||||||
**/
|
**/
|
||||||
public static String turnReviewCategory(Integer category) {
|
public static String turnReviewCategory(short category) {
|
||||||
switch (category) {
|
switch (category) {
|
||||||
case 0:
|
case 0:
|
||||||
return "子系统";
|
return "子系统";
|
||||||
|
@ -451,7 +451,7 @@ public class Processing {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String turnReviewResult(Integer result) {
|
public static String turnReviewResult(short result) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case 0:
|
case 0:
|
||||||
return "已拒绝";
|
return "已拒绝";
|
||||||
|
|
145
src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml
Normal file
145
src/main/resources/com/jsl/oa/mapper/ReviewMapper.xml
Normal 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>
|
Loading…
Reference in New Issue
Block a user