From 6be3aa4e139b3612e533bfb3db16ddbd671f3ce3 Mon Sep 17 00:00:00 2001 From: xiangZr-hhh <“2774915446@qq.com”> Date: Sun, 21 Apr 2024 14:44:09 +0800 Subject: [PATCH] =?UTF-8?q?patch:=20=E6=97=A5=E6=8A=A5=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E6=97=A5=E6=8A=A5=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加日报时添加发送消息 再再次修正日报时差问题 --- src/main/java/com/jsl/oa/dao/ProjectDAO.java | 73 +++++++++++++++++++ .../jsl/oa/model/dodata/ProjectDailyDO.java | 7 +- .../com/jsl/oa/services/MessageService.java | 5 ++ .../oa/services/impl/MessageServiceImpl.java | 43 ++++++++++- .../impl/ProjectDailyServiceImpl.java | 5 ++ 5 files changed, 126 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/jsl/oa/dao/ProjectDAO.java b/src/main/java/com/jsl/oa/dao/ProjectDAO.java index c541a3d..7ad5602 100644 --- a/src/main/java/com/jsl/oa/dao/ProjectDAO.java +++ b/src/main/java/com/jsl/oa/dao/ProjectDAO.java @@ -19,16 +19,20 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; @Slf4j @Component @RequiredArgsConstructor public class ProjectDAO { + private final ProjectMapper projectMapper; private final UserMapper userMapper; private final Gson gson; + + public void projectAdd(ProjectInfoVO projectAdd) { log.info("\t> 执行 DAO 层 ProjectDAO.projectAdd 方法"); log.info("\t\t> 从 MySQL 获取数据"); @@ -36,12 +40,16 @@ public class ProjectDAO { projectMapper.projectAdd(projectAdd); } + + public void projectWorkAdd(ProjectChildAddVO projectChildAddVO) { log.info("\t> 执行 DAO 层 ProjectDAO.projectWorkAdd 方法"); log.info("\t\t> 从 MySQL 获取数据"); projectMapper.projectWorkAdd(projectChildAddVO); } + + public ProjectDO projectEdit(@NotNull ProjectDO projectEdit) { log.info("\t> 执行 DAO 层 ProjectDAO.projectEdit 方法"); log.info("\t\t> 从 MySQL 更新数据"); @@ -50,12 +58,16 @@ public class ProjectDAO { return projectMapper.getProjectById(projectEdit.getId()); } + + 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 获取数据"); @@ -80,6 +92,8 @@ public class ProjectDAO { return getProjectShow; } + + private void sortProject(@NotNull ProjectShowDO projectShowDO) { log.info("\t> 执行 DAO 层 ProjectDAO.sortProject 方法"); for (int i = 0; i < projectShowDO.getData().size(); i++) { @@ -99,6 +113,8 @@ public class ProjectDAO { } } + + public boolean setProjectShow(ProjectShowDO projectShowDO) { log.info("\t> 执行 DAO 层 ProjectDAO.setProjectShow 方法"); sortProject(projectShowDO); @@ -108,12 +124,15 @@ public class ProjectDAO { } + public ProjectDO getProjectById(Long id) { log.info("\t> 执行 DAO 层 ProjectDAO.getProjectById 方法"); log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.getProjectById(id); } + + public List get(Long userId, List tags, List isFinish) { log.info("\t> 执行 DAO 层 ProjectDAO.get 方法"); log.info("\t\t> 从 MySQL 获取数据"); @@ -225,4 +244,58 @@ public class ProjectDAO { return userDO.getNickname(); } } + + + /** + * @Description: 获取该用户在这个项目的所有上级管理用户(比如管理该用户的项目经理,管理该用户的项目负责人) + * @Date: 2024/4/21 + * @Param pid: 项目id + * @Param uid: 用户id + **/ + public List getAllManagerUserByProject(Integer pid, Long uid) { + +// 储存 该用户 的 管理用户 数组 + List managerUserIds = new ArrayList<>(); +// 获取项目 + ProjectDO projectDO = projectMapper.getProjectById(Long.valueOf(pid)); + if (projectDO == null || projectDO.getPrincipalId() == null) { + return new ArrayList<>(); + } +// 获取该用户 + UserDO userDO = userMapper.getUserById(uid); + if (userDO == null || userDO.getUsername() == null) { + return new ArrayList<>(); + } + +// 获取用户负责的所有子模块 + List projectModuleDOS = projectMapper.getAllModuleByUserId(uid); +// 去除子模块里 具有相同所属子系统 的数据(查询出来的数据里会出现多个子模块属于同一子系统情况) + projectModuleDOS = projectModuleDOS.stream() + .collect(Collectors.groupingBy(ProjectModuleDO::getProjectChildId)) + .values() + .stream() + .map(projectModuleDOS1 -> projectModuleDOS1.get(0)) + .collect(Collectors.toList()); +// 获取这些子模块的上一级,子系统,添加对应负责人。 + for (ProjectModuleDO projectModuleDO: projectModuleDOS) { + ProjectChildDO projectChildDO = projectMapper. + getProjectChildById(Math.toIntExact(projectModuleDO.getProjectChildId())); + if (projectChildDO == null || projectChildDO.getPrincipalId() == null) { + continue; + } + managerUserIds.add(projectChildDO.getPrincipalId()); + } +// 添加项目负责人 + managerUserIds.add(projectDO.getPrincipalId()); +// 去重:去除管理用户数组里相同的人(子系统负责人可能项目,或者与项目负责人冲突) + managerUserIds = managerUserIds.stream() + .distinct().collect(Collectors.toList()); +// 如果管理用户数组有自己,去除 + managerUserIds.removeIf(userId -> userId.equals(uid)); + + return managerUserIds; + } + + + } diff --git a/src/main/java/com/jsl/oa/model/dodata/ProjectDailyDO.java b/src/main/java/com/jsl/oa/model/dodata/ProjectDailyDO.java index 2835921..f67d6cd 100644 --- a/src/main/java/com/jsl/oa/model/dodata/ProjectDailyDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/ProjectDailyDO.java @@ -1,6 +1,5 @@ package com.jsl.oa.model.dodata; -import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.experimental.Accessors; @@ -36,17 +35,17 @@ public class ProjectDailyDO { /** * 日志发布时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date dailyTime; /** * 创建时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createdAt; /** * 修改时间 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updatedAt; /** * 是否删除 diff --git a/src/main/java/com/jsl/oa/services/MessageService.java b/src/main/java/com/jsl/oa/services/MessageService.java index 5885df9..6795a2b 100644 --- a/src/main/java/com/jsl/oa/services/MessageService.java +++ b/src/main/java/com/jsl/oa/services/MessageService.java @@ -35,6 +35,11 @@ public interface MessageService { HttpServletRequest request); void messageAdd(Integer pId, Integer systemId, Integer moddleId); + void messageAdd( + Integer pId, + Long senderId, + Long receiverId); + void messageRemind(); BaseResponse messageGetById(Long id, Long uid); diff --git a/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java index 6acb433..4ae1fee 100644 --- a/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java @@ -4,9 +4,7 @@ import com.github.pagehelper.PageInfo; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.mapper.MessageMapper; import com.jsl.oa.mapper.ProjectMapper; -import com.jsl.oa.model.dodata.MessageDO; -import com.jsl.oa.model.dodata.ProjectChildDO; -import com.jsl.oa.model.dodata.ProjectModuleDO; +import com.jsl.oa.model.dodata.*; import com.jsl.oa.model.vodata.MessageAddVO; import com.jsl.oa.model.vodata.MessageGetVO; import com.jsl.oa.services.MessageService; @@ -279,6 +277,7 @@ public class MessageServiceImpl implements MessageService { } } + /** * 添加成员填写日报消息 * @@ -307,6 +306,44 @@ public class MessageServiceImpl implements MessageService { } + + /** + * 添加成员填写日报消息 + * + * @param pId 项目id + * @param senderId 填写用户id + * @param receiverId 接收消息用户id + */ + @Override + public void messageAdd( + Integer pId, + Long senderId, + Long receiverId) { + // 获取项目名 + ProjectDO projectDO = projectMapper.tgetProjectById(pId); + // 如果为空,则不发送消息 + if (projectDO == null) { + return; + } + String projectName = projectDO.getName(); + //获取填写者用户与接收消息用户信息 + UserDO sederUser = userDAO.getUserById(senderId); + UserDO receiverUser = userDAO.getUserById(receiverId); + // 如果为空,则不发送消息 + if (sederUser == null || receiverUser == null) { + return; + } + // 添加消息 + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(receiverUser.getId()); + messageAddVO.setTitle("日报消息"); + messageAddVO.setText(projectName + "项目的" + "成员" + sederUser.getUsername() + + "刚刚填写了日报"); + messageAddVO.setType("Project_daily"); + messageMapper.messageAdd(messageAddVO); + } + + /** * 添加提醒消息 * 系统/模块到期提醒 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 ffa5972..ec05810 100644 --- a/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ProjectDailyServiceImpl.java @@ -72,6 +72,11 @@ public class ProjectDailyServiceImpl implements ProjectDailyService { // 向数据库添加数据 projectDailyDAO.addProjectDaily(projectDailyDO); +// 发送消息 + List managerUserId = projectDAO.getAllManagerUserByProject(projectId, userId); + for (Long uid: managerUserId) { + messageService.messageAdd(projectId, userId, uid); + } return ResultUtil.success(); }