diff --git a/src/main/java/com/jsl/oa/config/startup/PermissionList.java b/src/main/java/com/jsl/oa/config/startup/PermissionList.java index 2bacdfa..09e73b7 100644 --- a/src/main/java/com/jsl/oa/config/startup/PermissionList.java +++ b/src/main/java/com/jsl/oa/config/startup/PermissionList.java @@ -33,12 +33,17 @@ public class PermissionList { permissionPrincipal.add(new PermissionVO("project:add", "增加项目")); permissionPrincipal.add(new PermissionVO("project:child_add", "增加子系统")); permissionPrincipal.add(new PermissionVO("project:module_add", "增加子模块")); + permissionPrincipal.add(new PermissionVO("review:add", "添加审核申请")); + permissionPrincipal.add(new PermissionVO("daily:add", "添加日报")); + permissionPrincipal.add(new PermissionVO("project:daily_delete", "删除日报")); permissionDeveloper.add(new PermissionVO("auth:change_password", "修改密码")); permissionDeveloper.add(new PermissionVO("info:get_header_image", "获取头部图片")); permissionDeveloper.add(new PermissionVO("info:edit_header_image", "编辑头部图片")); permissionDeveloper.add(new PermissionVO("info:delete_header_image", "删除头部图片")); - permissionDeveloper.add(new PermissionVO("project:child_add", "增加子系统")); - permissionDeveloper.add(new PermissionVO("project:module_add", "增加子模块")); + permissionDeveloper.add(new PermissionVO("review:add", "添加审核申请")); + permissionDeveloper.add(new PermissionVO("daily:add", "添加日报")); + permissionPrincipal.add(new PermissionVO("project:child_add", "增加子系统")); + permissionPrincipal.add(new PermissionVO("project:module_add", "增加子模块")); } } diff --git a/src/main/java/com/jsl/oa/controllers/ProjectDailyController.java b/src/main/java/com/jsl/oa/controllers/ProjectDailyController.java index 330cf47..e894968 100644 --- a/src/main/java/com/jsl/oa/controllers/ProjectDailyController.java +++ b/src/main/java/com/jsl/oa/controllers/ProjectDailyController.java @@ -1,7 +1,9 @@ package com.jsl.oa.controllers; +import com.jsl.oa.annotations.NeedPermission; import com.jsl.oa.model.vodata.ProjectDailyAddVO; +import com.jsl.oa.model.vodata.ProjectDailyUpdateVO; import com.jsl.oa.services.ProjectDailyService; import com.jsl.oa.utils.BaseResponse; import com.jsl.oa.utils.ErrorCode; @@ -16,7 +18,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; -import java.util.Date; + /** @@ -42,17 +44,38 @@ public class ProjectDailyController { * @return 新增结果 */ @PostMapping("/daily/add") - public BaseResponse add(@RequestBody @Validated ProjectDailyAddVO projectDailyAddVO, + @NeedPermission("daily:add") + public BaseResponse addDaily(@RequestBody @Validated ProjectDailyAddVO projectDailyAddVO, @NotNull BindingResult bindingResult, HttpServletRequest request) { // 判断是否有参数错误 if (bindingResult.hasErrors()) { return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult)); } - return projectDailyService.addDaily(projectDailyAddVO, request); } + @PutMapping("/daily/update") + public BaseResponse updateDaily(@RequestBody @Validated ProjectDailyUpdateVO projectDailyUpdateVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request) { + + log.info("请求接口[PUT]: /daily/update"); + // 判断是否有参数错误 + if (bindingResult.hasErrors()) { + return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult)); + } + + return projectDailyService.updateDaily(projectDailyUpdateVO, request); + } + + @DeleteMapping("/daily/delete") + @NeedPermission("project:daily_delete") + public BaseResponse delete(@RequestParam Integer dailyId, + HttpServletRequest request) { + return projectDailyService.deleteDaily(dailyId, request); + } + @GetMapping("/daily/getMyDaily") public BaseResponse getMyDaily(@RequestParam Integer page, @@ -65,10 +88,17 @@ public class ProjectDailyController { @GetMapping("/daily/search") public BaseResponse searchMyDaily(@RequestParam Integer page, @RequestParam Integer pageSize, - Date beginTime, - Date endTime, + Integer projectId, + String beginTime, + String endTime, HttpServletRequest request) { - return projectDailyService.searchMyDaily(page, pageSize, beginTime, endTime, request); + + return projectDailyService.searchMyDaily(projectId, + page, + pageSize, + Processing.convertStringToDate(beginTime), + Processing.convertStringToDate(endTime), + request); } diff --git a/src/main/java/com/jsl/oa/controllers/ReviewController.java b/src/main/java/com/jsl/oa/controllers/ReviewController.java index 563249d..6eb00cf 100644 --- a/src/main/java/com/jsl/oa/controllers/ReviewController.java +++ b/src/main/java/com/jsl/oa/controllers/ReviewController.java @@ -1,5 +1,6 @@ package com.jsl.oa.controllers; +import com.jsl.oa.annotations.NeedPermission; import com.jsl.oa.model.vodata.ReviewAddVO; import com.jsl.oa.model.vodata.ReviewUpdateResultVO; import com.jsl.oa.services.ReviewService; @@ -64,6 +65,7 @@ public class ReviewController { * @Param null: **/ @PostMapping("/review/add") + @NeedPermission("review:add") public BaseResponse addReview(@RequestBody @Validated ReviewAddVO reviewAddVO, @NotNull BindingResult bindingResult, HttpServletRequest request) { @@ -91,14 +93,23 @@ public class ReviewController { } - @GetMapping("/review/search") + @GetMapping("/review/searchMyReview") 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); + log.info("请求接口[GET]: /review/searchMyReview"); + return reviewService.searchReview(content, request, page, pageSize); + } + + @GetMapping("/review/searchReviewRecords") + public BaseResponse searchReviewRecords(String content, + Short statue, + HttpServletRequest request, + @RequestParam Integer page, + @RequestParam Integer pageSize) { + log.info("请求接口[GET]: /review/searchReviewRecords"); + return reviewService.searchReviewRecords(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 32a597a..c7762f1 100644 --- a/src/main/java/com/jsl/oa/dao/ProjectDAO.java +++ b/src/main/java/com/jsl/oa/dao/ProjectDAO.java @@ -209,4 +209,5 @@ public class ProjectDAO { return projectMapper.getAllModuleByUserId(uid); } + } diff --git a/src/main/java/com/jsl/oa/dao/ProjectDailyDAO.java b/src/main/java/com/jsl/oa/dao/ProjectDailyDAO.java index ad6805d..bece262 100644 --- a/src/main/java/com/jsl/oa/dao/ProjectDailyDAO.java +++ b/src/main/java/com/jsl/oa/dao/ProjectDailyDAO.java @@ -12,6 +12,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.Comparator; +import java.util.Date; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; @@ -58,6 +60,42 @@ public class ProjectDailyDAO { List myProjectDaily = projectDailyMapper.getProjectDailyByUser(userId); projectDailyDOList.addAll(myProjectDaily); +// 排序并去重 + projectDailyDOList = sortaAndNotRepeatDailyDO(projectDailyDOList); + + return projectDailyDOList; + } + + + public List getMyProjectDailyByTime(Long userId, Date beginTime, Date endTime) { + +// 日报数据数组 + List projectDailyDOList = new ArrayList<>(); + +// 先获取我负责的项目下的日报数据 + //获取我负责的项目 + List projectDOS = projectMapper.getAllProjectByUserId(userId); + //获取项目下对应日报,并根据时间筛选 + for (ProjectDO projectDO:projectDOS) { + List dailyFromProject = projectDailyMapper.getProjectDailyByProjectAndTime(projectDO.getId(), + beginTime, endTime); + projectDailyDOList.addAll(dailyFromProject); + } + +// 在获取本人的发布日报,并根据时间筛选 + List myProjectDaily = projectDailyMapper. + getProjectDailyByUserAndTime(userId, beginTime, endTime); + projectDailyDOList.addAll(myProjectDaily); + +// 排序并去重 + projectDailyDOList = sortaAndNotRepeatDailyDO(projectDailyDOList); + + return projectDailyDOList; + } + + + public List sortaAndNotRepeatDailyDO(List projectDailyDOList) { + // 去除重复的日报信息 projectDailyDOList = projectDailyDOList.stream() // 根据 id 属性进行去重 @@ -66,11 +104,25 @@ public class ProjectDailyDAO { .values().stream() .collect(Collectors.toList()); +// 根据时间进行排序 + projectDailyDOList = projectDailyDOList.stream() + .sorted(Comparator.comparing(ProjectDailyDO::getCreatedAt).reversed()) + .collect(Collectors.toList()); + return projectDailyDOList; } + public void deleteDailyById(Integer dailyId) { + projectDailyMapper.deleteDailyById(dailyId); + } + public ProjectDailyDO getPorjectDailyById(Integer id) { + return projectDailyMapper.getDailyById(id); + } + public void updateDaily(ProjectDailyDO projectDailyDO) { + projectDailyMapper.updateDaily(projectDailyDO); + } } diff --git a/src/main/java/com/jsl/oa/dao/ReviewDAO.java b/src/main/java/com/jsl/oa/dao/ReviewDAO.java index 90f4055..8b1d8d7 100644 --- a/src/main/java/com/jsl/oa/dao/ReviewDAO.java +++ b/src/main/java/com/jsl/oa/dao/ReviewDAO.java @@ -62,6 +62,10 @@ public class ReviewDAO { return reviewMapper.selectReviewByUser(uid); } + public List getReviewByUserAndResult(Long uid, Short result) { + return reviewMapper.selectReviewByUserAndResult(uid, result); + } + public void addReview(ReviewDO reviewDO) { diff --git a/src/main/java/com/jsl/oa/mapper/ProjectDailyMapper.java b/src/main/java/com/jsl/oa/mapper/ProjectDailyMapper.java index 3425a7e..7526e78 100644 --- a/src/main/java/com/jsl/oa/mapper/ProjectDailyMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ProjectDailyMapper.java @@ -4,6 +4,7 @@ package com.jsl.oa.mapper; import com.jsl.oa.model.dodata.ProjectDailyDO; import org.apache.ibatis.annotations.Mapper; +import java.util.Date; import java.util.List; @@ -23,6 +24,15 @@ public interface ProjectDailyMapper { List getProjectDailyByProject(Long pid); + List getProjectDailyByProjectAndTime(Long id, Date beginTime, Date endTime); + + List getProjectDailyByUserAndTime(Long userId, Date beginTime, Date endTime); + + ProjectDailyDO getDailyById(Integer id); + + void deleteDailyById(Integer id); + + void updateDaily(ProjectDailyDO projectDailyDO); } diff --git a/src/main/java/com/jsl/oa/mapper/ProjectMapper.java b/src/main/java/com/jsl/oa/mapper/ProjectMapper.java index 1690f5f..089b87f 100644 --- a/src/main/java/com/jsl/oa/mapper/ProjectMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ProjectMapper.java @@ -167,4 +167,5 @@ public interface ProjectMapper { + "(select id from organize_oa.oa_project_child where name =#{childName} " + "and project_id = (select id from organize_oa.oa_project where name =#{projectName}))") List getModuleByName(String projectName, String childName); + } diff --git a/src/main/java/com/jsl/oa/mapper/ReviewMapper.java b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java index aa6a2e9..f8468ac 100644 --- a/src/main/java/com/jsl/oa/mapper/ReviewMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java @@ -47,4 +47,8 @@ public interface ReviewMapper { @Select("SELECT * FROM organize_oa.oa_review WHERE sender_id = #{uid} AND " + "is_delete = 0") List selectReviewByUser(Long uid); + + @Select("SELECT * FROM organize_oa.oa_review WHERE sender_id = #{uid} AND " + + "is_delete = 0 AND review_result = #{result}") + List selectReviewByUserAndResult(Long uid, Short result); } diff --git a/src/main/java/com/jsl/oa/model/vodata/ProjectDailyAddVO.java b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyAddVO.java index 3b0a891..ff63d98 100644 --- a/src/main/java/com/jsl/oa/model/vodata/ProjectDailyAddVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyAddVO.java @@ -6,7 +6,6 @@ import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; -import java.util.Date; @Data @@ -20,7 +19,7 @@ public class ProjectDailyAddVO { @NotNull(message = "工作时间不能为空") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date dailyTime; + private String dailyTime; } diff --git a/src/main/java/com/jsl/oa/model/vodata/ProjectDailyUpdateVO.java b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyUpdateVO.java new file mode 100644 index 0000000..c8b21cf --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyUpdateVO.java @@ -0,0 +1,29 @@ +package com.jsl.oa.model.vodata; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class ProjectDailyUpdateVO { + + + @NotNull(message = "日报id不能为空") + private Integer id; + + @NotNull(message = "日报所属项目id不能为空") + private Integer projectId; + + @NotBlank(message = "日报内容不能为空") + private String content; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private String dailyTime; + + +} + + diff --git a/src/main/java/com/jsl/oa/model/vodata/ProjectDailyVO.java b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyVO.java index d2e1a2e..d2a1deb 100644 --- a/src/main/java/com/jsl/oa/model/vodata/ProjectDailyVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/ProjectDailyVO.java @@ -32,6 +32,7 @@ public class ProjectDailyVO { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date updatedAt; + private Boolean isAllowDelete; } diff --git a/src/main/java/com/jsl/oa/services/ProjectDailyService.java b/src/main/java/com/jsl/oa/services/ProjectDailyService.java index 4fd44c6..776f069 100644 --- a/src/main/java/com/jsl/oa/services/ProjectDailyService.java +++ b/src/main/java/com/jsl/oa/services/ProjectDailyService.java @@ -3,6 +3,7 @@ package com.jsl.oa.services; import com.jsl.oa.model.vodata.ProjectDailyAddVO; +import com.jsl.oa.model.vodata.ProjectDailyUpdateVO; import com.jsl.oa.utils.BaseResponse; import javax.servlet.http.HttpServletRequest; @@ -22,11 +23,16 @@ public interface ProjectDailyService { BaseResponse getMyDaily(Integer page, Integer pageSize, HttpServletRequest request); - BaseResponse searchMyDaily(Integer page, + BaseResponse searchMyDaily(Integer projectId, + Integer page, Integer pageSize, Date beginTime, Date endTime, HttpServletRequest request); + + BaseResponse deleteDaily(Integer dailyId, HttpServletRequest request); + + BaseResponse updateDaily(ProjectDailyUpdateVO projectDailyUpdateVO, HttpServletRequest request); } diff --git a/src/main/java/com/jsl/oa/services/ReviewService.java b/src/main/java/com/jsl/oa/services/ReviewService.java index bbcfc39..11fb825 100644 --- a/src/main/java/com/jsl/oa/services/ReviewService.java +++ b/src/main/java/com/jsl/oa/services/ReviewService.java @@ -17,5 +17,11 @@ public interface ReviewService { BaseResponse updateReviewResult(ReviewUpdateResultVO reviewUpdateResultVOVO, HttpServletRequest request); - BaseResponse searchReview(String content, Short statue, HttpServletRequest request, Integer page, Integer pageSize); + BaseResponse searchReview(String content, HttpServletRequest request, Integer page, Integer pageSize); + + BaseResponse searchReviewRecords(String content, + Short statue, + HttpServletRequest request, + Integer page, + Integer pageSize); } diff --git a/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java index 17374fd..366691f 100644 --- a/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java @@ -6,9 +6,11 @@ package com.jsl.oa.services.impl; import com.jsl.oa.dao.ProjectDAO; import com.jsl.oa.dao.ProjectDailyDAO; import com.jsl.oa.dao.UserDAO; +import com.jsl.oa.mapper.ProjectDailyMapper; import com.jsl.oa.model.dodata.ProjectDailyDO; import com.jsl.oa.model.vodata.ProjectDailyAddVO; import com.jsl.oa.model.vodata.ProjectDailyDataVO; +import com.jsl.oa.model.vodata.ProjectDailyUpdateVO; import com.jsl.oa.model.vodata.ProjectDailyVO; import com.jsl.oa.services.ProjectDailyService; import com.jsl.oa.utils.BaseResponse; @@ -42,6 +44,7 @@ public class ProjectDailyServiceImpl implements ProjectDailyService { private final ProjectDAO projectDAO; private final UserDAO userDAO; private final ProjectDailyDAO projectDailyDAO; + private final ProjectDailyMapper projectDailyMapper; @Override @@ -60,7 +63,7 @@ public class ProjectDailyServiceImpl implements ProjectDailyService { ProjectDailyDO projectDailyDO = new ProjectDailyDO(); Processing.copyProperties(projectDailyAddVO, projectDailyDO); projectDailyDO.setUserId(userId); - + projectDailyDO.setProjectId(Long.valueOf(projectDailyAddVO.getProjectId())); // 向数据库添加数据 projectDailyDAO.addProjectDaily(projectDailyDO); @@ -88,19 +91,95 @@ public class ProjectDailyServiceImpl implements ProjectDailyService { } @Override - public BaseResponse searchMyDaily(Integer page, + public BaseResponse searchMyDaily(Integer projectId, + Integer page, Integer pageSize, Date beginTime, Date endTime, HttpServletRequest request) { // 获取用户id Long userId = Processing.getAuthHeaderToUserId(request); -// 获取 我发布的及自己负责的项目下 的日报 - List projectDailyDOList = - projectDailyDAO.getMyProjectDaily(userId); + +// 根据时间筛选---获取 我发布的及自己负责的项目下 的日报 + List projectDailyDOList = new ArrayList<>(); + //如果时间不为空,则先根据时间筛选 + if (beginTime != null && endTime != null) { + projectDailyDOList = projectDailyDAO. + getMyProjectDailyByTime(userId, beginTime, endTime); + } else { + //否则获取全部数据 + projectDailyDOList = + projectDailyDAO.getMyProjectDaily(userId); + } + +// 再根据项目id进行筛选 + if (projectId != null) { + projectDailyDOList.removeIf(projectDailyDO -> projectDailyDO.getProjectId() != Long.valueOf(projectId)); + } + +// 进行分页 + List dailyPage = Processing.getPage(projectDailyDOList, page, pageSize); +// 封装结果类 + List projectDailyVOS = encapsulateArrayClass(dailyPage); + ProjectDailyDataVO projectDailyDataVO = + new ProjectDailyDataVO(projectDailyDOList.size(), page, pageSize, projectDailyVOS); + + return ResultUtil.success(projectDailyDataVO); + } - return null; + @Override + public BaseResponse deleteDaily(Integer dailyId, HttpServletRequest request) { + + Long userId = Processing.getAuthHeaderToUserId(request); +// 检查用户是否为项目负责人 + if (!projectDAO.isPrincipalUser(userId, projectDailyMapper.getDailyById(dailyId).getProjectId())) { + return ResultUtil.error(ErrorCode.User_NOT_PROJECT_PRINCIPAL); + } + + projectDailyDAO.deleteDailyById(dailyId); + + return ResultUtil.success(); + } + + @Override + public BaseResponse updateDaily(ProjectDailyUpdateVO projectDailyUpdateVO, HttpServletRequest request) { +// 获取用户id + Long userId = Processing.getAuthHeaderToUserId(request); +// 获取对应日报数据 + ProjectDailyDO projectDailyDO = projectDailyDAO.getPorjectDailyById(projectDailyUpdateVO.getId()); +// 检测日报是否为空 + if (projectDailyDO == null) { + return ResultUtil.error(ErrorCode.PROJECT_DAILY_NOT_EXIST); + } +// 查询用户是否有修改权限(本人或项目负责人) + if (userId.equals(projectDailyDO.getUserId()) + || projectDAO.getProjectById( + projectDailyDO.getProjectId()). + getPrincipalId().equals(userId)) { + String content = projectDailyUpdateVO.getContent(); + Long projectId = Long.valueOf(projectDailyUpdateVO.getProjectId()); + String dailyTime = projectDailyUpdateVO.getDailyTime(); + + if (content != null && !content.equals("")) { + projectDailyDO.setContent(content); + } + + if (projectDAO.isExistProject(projectId)) { + projectDailyDO.setProjectId(projectId); + } + + if (dailyTime != null && !dailyTime.equals("")) { + projectDailyDO.setDailyTime(Processing.convertStringToDate(dailyTime)); + } + + } else { + return ResultUtil.error(ErrorCode.NOT_PERMISSION_UPDATE_DAILY); + } + + projectDailyDAO.updateDaily(projectDailyDO); + + return ResultUtil.success(); } @@ -118,6 +197,14 @@ public class ProjectDailyServiceImpl implements ProjectDailyService { projectDailyVO.setProjectName( projectDAO.getProjectById(projectDailyVO.getProjectId()).getName()) .setUserName(userDAO.getUserById(projectDailyDO.getUserId()).getNickname()); + //用户是否有权限删除 + if (projectDailyDO.getUserId().equals(projectDAO. + getProjectById(projectDailyVO.getProjectId()).getPrincipalId())) { + projectDailyVO.setIsAllowDelete(true); + } else { + projectDailyVO.setIsAllowDelete(false); + } + // 向 结果封装类数组 添加对应 日报封装类 projectDailyVOS.add(projectDailyVO); } 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 c7b6700..1c8e34a 100644 --- a/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java @@ -41,6 +41,13 @@ public class ReviewServiceImpl implements ReviewService { private final ProjectMapper projectMapper; + /** + * @Description: 获取用户未审核的数据(只包括管理项目下未审核的数据) + * @Date: 2024/4/19 + * @Param page: 当前页码 + * @Param pageSize: 每页大小 + * @Param request: request请求 + **/ @Override public BaseResponse getUserPendingApprovalReview(Integer page, Integer pageSize, @@ -86,7 +93,6 @@ public class ReviewServiceImpl implements ReviewService { reviewData.addAll(reviewDOS); } - //根据id进行去重 reviewData = reviewData.stream() .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) @@ -94,7 +100,6 @@ public class ReviewServiceImpl implements ReviewService { .stream() .collect(Collectors.toList()); - //按照申请时间降序排序 Collections.sort(reviewData, new Comparator() { @Override @@ -113,6 +118,13 @@ public class ReviewServiceImpl implements ReviewService { } + /** + * @Description: 获取我的审核数据(用户管理项目下与自己的记录) + * @Date: 2024/4/19 + * @Param page: 当前页码 + * @Param pageSize: 每页大小 + * @Param request: request请求 + **/ @Override public BaseResponse getUserReview(Integer page, Integer pageSize, @@ -124,42 +136,13 @@ public class ReviewServiceImpl implements ReviewService { //存储审核数据的数组 List reviewData = new ArrayList<>(); - //先获取用户为项目负责人的项目列表 - projectDAO.getProjectByPrincipalUser(userId); + //先获取用户管理下的所有审核信息 + reviewData.addAll(getAllReviewFromProject(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); - } - -// 获取自己的审核记录 + //获取自己的审核记录 List myReviewDO = reviewDAO.getReviewByUser(userId); reviewData.addAll(myReviewDO); - //根据id进行去重 reviewData = reviewData.stream() .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) @@ -185,6 +168,12 @@ public class ReviewServiceImpl implements ReviewService { } + /** + * @Description: 添加审核接口 + * @Date: 2024/4/19 + * @Param reviewAddVO: 审核添加实体类 + * @Param request: request请求 + **/ @Override public BaseResponse addReview(ReviewAddVO reviewAddVO, HttpServletRequest request) { @@ -223,6 +212,9 @@ public class ReviewServiceImpl implements ReviewService { //定义申请者id reviewDO.setSenderId(userId); + reviewDO.setProjectId(Long.valueOf(reviewAddVO.getProjectId())); + reviewDO.setProjectChildId(Long.valueOf(reviewAddVO.getProjectChildId())); + reviewDO.setProjectModuleId(Long.valueOf(reviewAddVO.getProjectModuleId())); //添加数据 reviewDAO.addReview(reviewDO); @@ -257,20 +249,11 @@ public class ReviewServiceImpl implements ReviewService { @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); - } +// 获取我的审核数据 + List reviewVOS = getReview(request); // 根据内容筛选 if (content == null || content.equals("")) { @@ -291,6 +274,32 @@ public class ReviewServiceImpl implements ReviewService { return ResultUtil.success(reviewDataVO); } + @Override + public BaseResponse searchReviewRecords(String content, + Short statue, + HttpServletRequest request, + Integer page, + Integer pageSize) { + +// 获取审核记录数据 + List reviewVOS = getReviewsByResult(request, statue); + +// 根据内容筛选 + 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) { @@ -300,36 +309,8 @@ public class ReviewServiceImpl implements ReviewService { //存储审核数据的数组 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); - } + //获取用户管理的项目下的审核数据 + reviewData.addAll(getAllReviewFromProject(userId)); //根据id进行去重 reviewData = reviewData.stream() @@ -373,7 +354,9 @@ public class ReviewServiceImpl implements ReviewService { .setProjectName(projectDAO.getProjectById(reviewDO.getProjectId()).getName()) .setProjectChildName(projectMapper.getProjectChildById( Math.toIntExact(reviewDO.getProjectChildId())).getName()) - .setResult(Processing.turnReviewResult(reviewDO.getReviewResult())); + .setResult(Processing.turnReviewResult(reviewDO.getReviewResult())) + .setSenderId(Long.valueOf(reviewDO.getSenderId())) + .setRecipientId(reviewDO.getRecipientId()); // 赋值可为空属性并进行判断 if (reviewDO.getRecipientId() != null) { reviewVO.setRecipientName(userMapper.getUserById(reviewDO.getRecipientId()).getNickname()); @@ -395,51 +378,59 @@ public class ReviewServiceImpl implements ReviewService { public List getReviewsByResult( HttpServletRequest request, Short result) { - // 获取用户 Long userId = Processing.getAuthHeaderToUserId(request); //存储审核数据的数组 List reviewData = new ArrayList<>(); - //先获取用户为项目负责人的项目列表 - projectDAO.getProjectByPrincipalUser(userId); + //如果审核结果不为空,则根据审核结果进行审查 + if (result != null) { - //先从用户为 项目负责人 的项目中获取对应 审核信息 - for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) { - //查询每个项目下所有的审核信息 - List reviewDOS = reviewDAO. - selectApprovedResultReviewFromProject(projectDO.getId(), - result); - //封装VO类 - reviewData.addAll(reviewDOS); + //先从用户为 项目负责人 的项目中获取对应 审核信息 + 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); + } + +// 获取自己的审核记录 + List myReviewDO = reviewDAO.getReviewByUserAndResult(userId, result); + reviewData.addAll(myReviewDO); } - //在从用户为 子系统负责人 的项目中获取对应 审核信息 - for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) { - //查询每个项目下状态为2的审核信息 - List reviewDOS = reviewDAO. - selectApprovedResultReviewsFromSubsystem(projectChildDO.getId(), - result); - //封装VO类 - reviewData.addAll(reviewDOS); +// 如果审核结果为空,获取全部 + if (result == null) { + //获取用户管理项目下的所有审核数据 + reviewData.addAll(getAllReviewFromProject(userId)); + //获取用户自己的所有审核数据 + reviewData.addAll(reviewDAO.getReviewByUser(userId)); } - - //在从用户为 子模块负责人 的项目中获取对应 审核信息 - for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) { - //查询每个项目下所有的审核信息 - List reviewDOS = reviewDAO. - selectApprovedResultReviewsFromSubModule(projectModuleDO.getId(), - result); - //封装VO类 - reviewData.addAll(reviewDOS); - } - - // 获取自己的审核记录 - List myReviewDO = reviewDAO.getReviewByUser(userId); - reviewData.addAll(myReviewDO); - //根据id进行去重 reviewData = reviewData.stream() .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) @@ -447,7 +438,6 @@ public class ReviewServiceImpl implements ReviewService { .stream() .collect(Collectors.toList()); - //按照申请时间降序排序 Collections.sort(reviewData, new Comparator() { @Override @@ -460,6 +450,13 @@ public class ReviewServiceImpl implements ReviewService { } + /** + * @Description: 审核数据分页处理 + * @Date: 2024/4/19 + * @Param allReviews: 审核数据 + * @Param page: 当前页码 + * @Param pageSize: 每页大小 + **/ public ReviewDataVO getReviewsByPage(List allReviews, int page, int pageSize) { ReviewDataVO reviewDataVO = new ReviewDataVO(); int total = allReviews.size(); @@ -478,6 +475,48 @@ public class ReviewServiceImpl implements ReviewService { } + + /** + * @Description: 获取用户管理项目下的所有审核数据 + * @Date: 2024/4/19 + * @Param userId: + **/ + public List getAllReviewFromProject(Long userId) { + + List reviewData = new ArrayList<>(); + + //先从用户为 项目负责人 的项目中获取对应 审核信息 + 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); + } + + return reviewData; + } + + } diff --git a/src/main/java/com/jsl/oa/utils/ErrorCode.java b/src/main/java/com/jsl/oa/utils/ErrorCode.java index 8bb67cc..cacb380 100755 --- a/src/main/java/com/jsl/oa/utils/ErrorCode.java +++ b/src/main/java/com/jsl/oa/utils/ErrorCode.java @@ -55,6 +55,9 @@ public enum ErrorCode { PROJECT_NOT_USER("ProjectNotUser", 40020, "项目无此用户"), PROJECT_CHILD_NOT_EXIST("ProjectChildNotExist", 40021, "子系统不存在"), MODULE_NOT_EXIST("ModuleNotExist", 40022, "模块不存在"), + PROJECT_DAILY_NOT_EXIST("ProjectDailyNotExist", 40023, "日志不存在"), + NOT_PERMISSION_UPDATE_DAILY("NotPermissionUpdateDaily", 40024, "用户无权限修改日报"), + User_NOT_PROJECT_PRINCIPAL("UserNotProjectPrincipal", 40023, "用户非项目负责人"), REVIEW_NOT_EXIST("ReviewNotExit", 40101, "未找到对应审核信息"); diff --git a/src/main/java/com/jsl/oa/utils/Processing.java b/src/main/java/com/jsl/oa/utils/Processing.java index 62d1fd1..ab1cdcd 100755 --- a/src/main/java/com/jsl/oa/utils/Processing.java +++ b/src/main/java/com/jsl/oa/utils/Processing.java @@ -23,10 +23,9 @@ import org.springframework.validation.ObjectError; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Random; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; /** *

自定义快捷工具类

@@ -409,4 +408,26 @@ public class Processing { int toIndex = Math.min(fromIndex + pageSize, list.size()); return list.subList(fromIndex, toIndex); } + + + /** + * @Description: 字符与时间类型转换方法 + * @Date: 2024/4/19 + * @Param dateString: + **/ + public static Date convertStringToDate(String dateString) { + if (dateString.isEmpty()) { + return null; // 如果字符串为空,返回空的Date对象 + } else { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + try { + return dateFormat.parse(dateString); + } catch (ParseException e) { + return null; + } + } + } + + + } diff --git a/src/main/resources/com/jsl/oa/mapper/ProjectDailyMapper.xml b/src/main/resources/com/jsl/oa/mapper/ProjectDailyMapper.xml index 5bb6f20..8583963 100644 --- a/src/main/resources/com/jsl/oa/mapper/ProjectDailyMapper.xml +++ b/src/main/resources/com/jsl/oa/mapper/ProjectDailyMapper.xml @@ -7,7 +7,7 @@ - insert into oa_project_daily + insert into organize_oa.oa_project_daily user_id, project_id, @@ -27,15 +27,57 @@ + + + + + + + + + UPDATE organize_oa.oa_project_daily + SET is_delete = 1 + WHERE id = #{id} + + + + UPDATE organize_oa.oa_project_daily + + user_id = #{userId}, + project_id = #{projectId}, + content = #{content}, + daily_time = #{dailyTime}, + updated_at = #{updatedAt}, + is_delete = #{isDelete} + + WHERE id = #{id} + \ No newline at end of file