src/main/java/kr/wisestone/owl/domain/Department.java
@@ -3,6 +3,7 @@ import javax.persistence.*; import java.io.Serializable; import java.util.HashSet; import java.util.Iterator; import java.util.Set; @Entity @@ -54,4 +55,16 @@ this.projectRoleDepartments.add(projectRoleDepartment); } public void removeProjectRole(ProjectRole projectRole) { Iterator<ProjectRoleDepartment> iterator = this.projectRoleDepartments.iterator(); while (iterator.hasNext()) { ProjectRoleDepartment projectRoleDepartment = iterator.next(); if (projectRole.getId().equals(projectRoleDepartment.getProjectRole().getId())) { this.projectRoleDepartments.remove(projectRoleDepartment); break; } } } } src/main/java/kr/wisestone/owl/service/SystemEmailService.java
@@ -1,5 +1,6 @@ package kr.wisestone.owl.service; import kr.wisestone.owl.domain.Department; import kr.wisestone.owl.domain.SystemEmail; import kr.wisestone.owl.domain.User; import kr.wisestone.owl.domain.enumType.EmailType; @@ -16,6 +17,8 @@ List<String> notificationUserChange(List<User> totalUsers, List<User> targetUsers); List<String> notificationDepartmentChange(List<Department> totalDepartments, List<Department> targetDepartments); void reservationEmail(String[] sendUsers, EmailType emailType, Map<String, Object> params); List<SystemEmail> findBySendAddressAndSendYn(String sendAddress); src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -15,7 +15,6 @@ import kr.wisestone.owl.util.CommonUtil; import kr.wisestone.owl.util.ConvertUtil; import kr.wisestone.owl.util.DateUtil; import kr.wisestone.owl.util.MapUtil; import kr.wisestone.owl.vo.*; import kr.wisestone.owl.web.condition.ProjectCondition; import kr.wisestone.owl.web.form.ProjectForm; @@ -537,6 +536,7 @@ Map<String, Object> changeProjectManagerNotifications = this.modifyProjectManagers(project, projectForm, ProjectRole.TYPE_MANAGER); // 일반 사용자 변경 Map<String, Object> changeProjectUserNotifications = this.modifyProjectManagers(project, projectForm, ProjectRole.TYPE_DEFAULT); Map<String, Object> changeProjectDepartmentNotifications = this.modifyProjectDepartments(project, projectForm); ConvertUtil.copyProperties(projectForm, project, "id", "projectType"); this.projectRepository.saveAndFlush(project); @@ -728,6 +728,37 @@ } // 관리자를 변경한다. private Map<String, Object> modifyProjectDepartments(Project project, ProjectForm projectForm) { ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT); List<Department> oldDepartment = Lists.newArrayList(); List<Department> newDepartment = Lists.newArrayList(); Map<String, Object> results = new HashMap<>(); for (ProjectRoleDepartment projectRoleDepartment : projectRole.getProjectRoleDepartments()) { Department department = projectRoleDepartment.getDepartment(); oldDepartment.add(department); department.removeProjectRole(projectRole); } projectRole.getProjectRoleDepartments().clear(); for (Long departmentId : projectForm.getDepartmentIds()) { Department department = this.departmentService.getDepartment(departmentId); department.addProjectRole(projectRole); } // 제외 대상자 찾기, oldManager 에는 있는데 newManager 에 없으면 제외 대상 List<String> excludeDepartments = this.systemEmailService.notificationDepartmentChange(oldDepartment, newDepartment); // 참여 대상자 찾기, newManager 에는 있는데 oldManager 에 없으면 초대받은 대상 List<String> includeDepartments = this.systemEmailService.notificationDepartmentChange(newDepartment, oldDepartment); results.put("excludeDepartments", excludeDepartments); results.put("includeDepartments", includeDepartments); return results; } // 프로젝트 참여, 제외 통지 정보를 중복으로 나가지 않도록 체크한다. private void notificationProjectRoleUser(Map<String, Object> changeProjectManagerNotifications, Map<String, Object> changeProjectUserNotifications, Project project) { List<String> projectManagerExcludeUsers = (List<String>) changeProjectManagerNotifications.get("excludeUsers"); // 관리자 제외 사용자 src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
@@ -9,6 +9,7 @@ import kr.wisestone.owl.config.CommonConfiguration; import kr.wisestone.owl.constant.MailConstants; import kr.wisestone.owl.constant.MsgConstants; import kr.wisestone.owl.domain.Department; import kr.wisestone.owl.domain.SystemEmail; import kr.wisestone.owl.domain.User; import kr.wisestone.owl.domain.enumType.EmailType; @@ -298,6 +299,30 @@ return results; } // 프로젝트에서 변경된 담당부서를 찾기 위해 사용 @Override @Transactional(readOnly = true) public List<String> notificationDepartmentChange(List<Department> totalDepartments, List<Department> targetDepartments) { List<String> results = Lists.newArrayList(); // 제외 대상자 찾기 for (Department department : totalDepartments) { boolean excludeCheck = true; for (Department newDepartment : targetDepartments) { if (department.getId().equals(newDepartment.getId())) { excludeCheck = false; break; } } if (excludeCheck) { results.add(department.getDepartmentName()); } } return results; } // 아직 발송되지 않은 이메일을 조회한다. @Override @Transactional(readOnly = true)