OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-11-25 2341721b26034622386864d0fe3e798f692c5a9e
프로젝트 담당부서 수정
4개 파일 변경됨
74 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/domain/Department.java 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/SystemEmailService.java 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java 25 ●●●●● 패치 | 보기 | raw | blame | 히스토리
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)