From 2341721b26034622386864d0fe3e798f692c5a9e Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 25 11월 2021 15:11:32 +0900
Subject: [PATCH] 프로젝트 담당부서 수정

---
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java     |   33 ++++++++++++++++
 src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java |   25 ++++++++++++
 src/main/java/kr/wisestone/owl/domain/Department.java                   |   13 ++++++
 src/main/java/kr/wisestone/owl/service/SystemEmailService.java          |    3 +
 4 files changed, 73 insertions(+), 1 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/domain/Department.java b/src/main/java/kr/wisestone/owl/domain/Department.java
index 8ec34a2..1fad1bd 100644
--- a/src/main/java/kr/wisestone/owl/domain/Department.java
+++ b/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;
+            }
+        }
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/service/SystemEmailService.java b/src/main/java/kr/wisestone/owl/service/SystemEmailService.java
index cd86e74..d74e2f7 100644
--- a/src/main/java/kr/wisestone/owl/service/SystemEmailService.java
+++ b/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);
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
index 28299c9..b973a4c 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
+++ b/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");  //  愿�由ъ옄 �젣�쇅 �궗�슜�옄
diff --git a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
index d6f06f8..60a400c 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/SystemEmailServiceImpl.java
+++ b/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)

--
Gitblit v1.8.0