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

---
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java |  139 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 136 insertions(+), 3 deletions(-)

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 e6ace4a..adf2ad1 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;
@@ -46,6 +45,9 @@
     private UserService userService;
 
     @Autowired
+    private DepartmentService departmentService;
+
+    @Autowired
     private ProjectRoleService projectRoleService;
 
     @Autowired
@@ -64,6 +66,9 @@
     private ProjectRoleUserService projectRoleUserService;
 
     @Autowired
+    private ProjectRoleDepartmentService projectRoleDepartmentService;
+
+    @Autowired
     private AttachedFileService attachedFileService;
 
     @Autowired
@@ -71,6 +76,9 @@
 
     @Autowired
     private IssueUserService issueUserService;
+
+    @Autowired
+    private IssueDepartmentService issueDepartmentService;
 
     @Autowired
     private IssueNumberGeneratorService issueNumberGeneratorService;
@@ -148,7 +156,8 @@
         //  媛� �봽濡쒖젥�듃�쓽 �씠�뒋 踰덊샇瑜� �옄�룞�쑝濡� �깮�꽦�븳�떎.
         this.issueNumberGeneratorService.generateIssueNumber(project);
         //  �씪諛� �궗�슜�옄 諛� 愿�由ъ옄瑜� �벑濡앺븯怨� �궗�슜�옄�뱾�뿉寃� �빐�떦 �뿭�븷�쓣 諛곗젙�븳�떎.
-        this.registerManagerAndUser(projectForm, project);
+        //this.registerManagerAndUser(projectForm, project);
+        this.registerManagerAndDepartment(projectForm, project);
 
         //  �봽濡쒖젥�듃 �쑀�삎�뿉 �뵲瑜� �썙�겕�뵆濡쒖슦 �깮�꽦
         this.workflowStatusService.addDefaultWorkflowStatus(project, ProjectType.valueOf(projectForm.getProjectType()));
@@ -174,8 +183,16 @@
             sendEmails.add(user.getAccount());
         }
 
+        List<Department> departments = Lists.newArrayList();
+        //  遺��꽌 �벑濡�
+        for (Long departmentId : projectForm.getDepartmentIds()) {
+            Department department = this.departmentService.getDepartment(departmentId);
+            departments.add(department);
+        }
+
         //  湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �궗�슜�옄瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎.
-        this.projectRoleService.addDefaultProjectRole(project, managers, users);
+        //this.projectRoleService.addDefaultProjectRole(project, managers, users);
+        this.projectRoleService.addDefaultProjectRole(project, managers, departments);
 
         //  �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎.
         Map<String, Object> projectMap = new HashMap<>();
@@ -192,6 +209,40 @@
         projectMap.put("projectManagerName", stringBuilder.toString());
         //  �봽濡쒖젥�듃 �씪諛� 李몄뿬 硫붿씪 諛쒖넚 �삁�빟
         this.systemEmailService.reservationEmail(sendEmails.toArray(new String[sendEmails.size()]), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap);
+    }
+
+    private void registerManagerAndDepartment(ProjectForm projectForm, Project project) {
+        List<User> managers = Lists.newArrayList();
+        //  愿�由ъ옄 �벑濡�
+        for (Long managerId : projectForm.getManagerIds()) {
+            User user = this.userService.getUser(managerId);
+            managers.add(user);
+        }
+
+        List<Department> departments = Lists.newArrayList();
+        //  遺��꽌 �벑濡�
+        for (Long departmentId : projectForm.getDepartmentIds()) {
+            Department department = this.departmentService.getDepartment(departmentId);
+            departments.add(department);
+        }
+
+        //  湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �궗�슜�옄瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎.
+        //this.projectRoleService.addDefaultProjectRole(project, managers, users);
+        this.projectRoleService.addDefaultProjectRole(project, managers, departments);
+
+        //  �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎.
+        Map<String, Object> projectMap = new HashMap<>();
+        projectMap.put("workspaceName", project.getWorkspace().getName());
+        projectMap.put("projectName", project.getName());
+        projectMap.put("registerDate", DateUtil.convertDateToStr(new Date()));
+
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(managers.get(0).getName());
+        stringBuilder.append("(");
+        stringBuilder.append(CommonUtil.decryptAES128(managers.get(0).getAccount()));
+        stringBuilder.append(")");
+
+        projectMap.put("projectManagerName", stringBuilder.toString());
     }
 
 
@@ -353,6 +404,10 @@
             //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄瑜� �뀑�똿�븳�떎. - 愿�由ъ옄 / �씪諛� �궗�슜�옄
             this.setProjectUser(projectVo, true);
             this.setProjectUser(projectVo, false);
+            
+            //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 遺��꽌 �꽭�똿
+            this.setProjectDepartment(projectVo);
+
             //  �뾽臾닿났媛� �떞�떦�옄�뒗 紐⑤뱺 �봽濡쒖젥�듃瑜� �닔�젙/�궘�젣�븷 �닔 �엳�뼱�빞 �븳�떎.
             if (this.userWorkspaceService.checkWorkspaceManager()) {
                 projectVo.setModifyPermissionCheck(true);
@@ -401,6 +456,26 @@
         }
     }
 
+    //  �떞�떦遺��꽌瑜� 議곌굔�뿉 �뵲�씪 李얠븘以��떎.
+    private void setProjectDepartment(ProjectVo projectVo) {
+        Map<String, Object> projectRoleDepartmentMap = new HashMap<>();
+        projectRoleDepartmentMap.put("id", projectVo.getId());
+
+        //  遺��꽌 �젙蹂� �뀑�똿
+        List<Map<String, Object>> projectRoleDepartments = this.projectRoleDepartmentService.findProjectRoleDepartment(projectRoleDepartmentMap);
+
+        if (projectRoleDepartments != null && !projectRoleDepartments.isEmpty()) {
+            List<DepartmentVo> departmentVos = Lists.newArrayList();
+
+            for (Map<String, Object> projectRoleDepartment : projectRoleDepartments) {
+                DepartmentVo departmentVo = ConvertUtil.convertMapToClass(projectRoleDepartment, DepartmentVo.class);
+                departmentVo.setByName(departmentVo.getDepartmentName());
+                departmentVos.add(departmentVo);
+            }
+            projectVo.setProjectDepartmentVos(departmentVos);
+        }
+    }
+
 
     //  �봽濡쒖젥�듃 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎.
     @Override
@@ -424,6 +499,7 @@
                 case "01": //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄, 愿�由ъ옄 �젙蹂대�� �뀑�똿�븳�떎.
                     this.setProjectUser(projectVo, true);
                     this.setProjectUser(projectVo, false);
+                    this.setProjectDepartment(projectVo); //遺��꽌 �젙蹂� �꽭�똿
                     break;
             }
         }
@@ -449,6 +525,8 @@
         Project project = this.getProject(projectForm.getId());
         //  �봽濡쒖젥�듃 李몄뿬 �궗�슜�옄
         List<Long> existUserIds = this.getIncludeProjectUser(project);
+        //  �봽濡쒖젥�듃 李몄뿬 遺��꽌
+        List<Long> existDepartmentIds = this.getIncludeProjectDepartment(project);
 
         //  �썙�겕�뒪�럹�씠�뒪�뿉�꽌 湲곕낯�쑝濡� �젣怨듬릺�뒗 �봽濡쒖젥�듃�뿉 ���븳 泥댄겕
         this.checkDefaultProject(project, projectForm);
@@ -458,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);
@@ -469,9 +548,11 @@
         //  �빐�떦 �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 紐⑤뱺 �궗�슜�옄 議고쉶
         //  鍮좎쭊 �궗�엺�씠 愿�由ы븯�뒗 �씠�뒋 �쟾泥� 議고쉶 �썑 �뜲�씠�꽣 �궘�젣
         List<Long> changeUserIds = this.getIncludeProjectUser(project);
+        List<Long> changeDepartmentIds = this.getIncludeProjectDepartment(project);
 
         //  李몄뿬�뿉�꽌 �젣�쇅�맂 �궗�슜�옄瑜� 李얘퀬 �떞�떦�븯怨� �엳�뜕 �씠�뒋�뿉�꽌 �젣�쇅�븳�떎.
         this.checkExcludeUserAndRemoveIssueAssignee(project, existUserIds, changeUserIds);
+        this.checkExcludeDepartmentAndRemoveIssueDepartment(project, existDepartmentIds, changeDepartmentIds);
 
         //  愿�由ъ옄/�씪諛� �궗�슜�옄 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎.
         this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project);
@@ -512,6 +593,20 @@
         return Lists.newArrayList(includeUserIds);
     }
 
+    //  �봽濡쒖젥�듃 李몄뿬 遺��꽌
+    private List<Long> getIncludeProjectDepartment(Project project) {
+        Set<Long> includeDepartmentIds = new HashSet<>();
+
+        for (ProjectRole projectRole : project.getProjectRoles()) {
+            List<ProjectRoleDepartment> projectRoleDepartments =  this.projectRoleDepartmentService.findByProjectRoleId(projectRole.getId());
+
+            for (ProjectRoleDepartment projectRoleDepartment : projectRoleDepartments) {
+                includeDepartmentIds.add(projectRoleDepartment.getDepartment().getId());
+            }
+        }
+        return Lists.newArrayList(includeDepartmentIds);
+    }
+
     //  李몄뿬�뿉�꽌 �젣�쇅�맂 �궗�슜�옄瑜� 李얘퀬 �떞�떦�븯怨� �엳�뜕 �씠�뒋�뿉�꽌 �젣�쇅�븳�떎.
     private void checkExcludeUserAndRemoveIssueAssignee(Project project, List<Long> existUserIds, List<Long> changeUserIds) {
         List<Long> excludeUserIds = CommonUtil.searchChangeList(changeUserIds, existUserIds);
@@ -521,7 +616,14 @@
         }
     }
 
+    //  李몄뿬�뿉�꽌 �젣�쇅�맂 遺��꽌瑜� 李얘퀬 �떞�떦�븯怨� �엳�뜕 �씠�뒋�뿉�꽌 �젣�쇅�븳�떎.
+    private void checkExcludeDepartmentAndRemoveIssueDepartment(Project project, List<Long> existDepartmentIds, List<Long> changeDepartmentIds) {
+        List<Long> excludeDepartmentIds = CommonUtil.searchChangeList(changeDepartmentIds, existDepartmentIds);
 
+        if (excludeDepartmentIds.size() > 0) {
+            this.issueDepartmentService.removeIssueDepartment(project.getId(), excludeDepartmentIds);
+        }
+    }
 
     //  湲곕낯 �젣怨듬릺�뒗 �봽濡쒖젥�듃�쓽 愿�由ъ옄�뒗 �썙�겕�뒪�럹�씠�뒪 愿�由ъ옄媛� �룷�븿�릺�뼱 �엳�뼱�빞 �븳�떎.
     private void checkDefaultProject(Project project, ProjectForm projectForm) {
@@ -626,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");  //  愿�由ъ옄 �젣�쇅 �궗�슜�옄

--
Gitblit v1.8.0