From c88104169bc4fe457f98f33a91574c4dd33da573 Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 금, 03 12월 2021 20:08:01 +0900
Subject: [PATCH] - api 입력 오류 수정 - api 기본값 및 중복 설정 적용 수정

---
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java |  116 ++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 97 insertions(+), 19 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 28299c9..255db28 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;
@@ -47,6 +46,9 @@
 
     @Autowired
     private DepartmentService departmentService;
+
+    @Autowired
+    private UserDepartmentService userDepartmentService;
 
     @Autowired
     private ProjectRoleService projectRoleService;
@@ -118,7 +120,7 @@
         project.setDefaultYn(true);
         this.projectRepository.saveAndFlush(project);
         //  �봽濡쒖젥�듃 湲곕낯 �뿭�븷怨� 愿�由ъ옄 �뿭�븷�쓣 �깮�꽦�븳�떎. 愿�由ъ옄�뒗 �깮�꽦�븳 �궗�슜�옄
-        this.projectRoleService.addDefaultProjectRole(project, Lists.newArrayList(user), Lists.newArrayList());
+        this.projectRoleService.addDefaultProjectRoleUser(project, Lists.newArrayList(user), Lists.newArrayList());
         //  媛� �봽濡쒖젥�듃�쓽 �씠�뒋 踰덊샇瑜� �옄�룞�쑝濡� �깮�꽦�븳�떎.
         this.issueNumberGeneratorService.generateIssueNumber(project);
 
@@ -141,7 +143,7 @@
         //  �긽�깭 泥댄겕
         this.verifyProjectStatus(projectForm.getStatus());
         //  �궇吏� �쑀�슚�꽦 泥댄겕
-        this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate());
+        //this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate());
         //  愿�由ъ옄 �쑀�슚�꽦 泥댄겕
         this.verifyManager(projectForm.getManagerIds());
 
@@ -184,16 +186,8 @@
             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, departments);
+        this.projectRoleService.addDefaultProjectRoleUser(project, managers, users);
 
         //  �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎.
         Map<String, Object> projectMap = new HashMap<>();
@@ -221,15 +215,22 @@
         }
 
         List<Department> departments = Lists.newArrayList();
+        List<String> sendEmails = Lists.newArrayList(); //  硫붿씪 ���긽�옄
         //  遺��꽌 �벑濡�
         for (Long departmentId : projectForm.getDepartmentIds()) {
             Department department = this.departmentService.getDepartment(departmentId);
+            /*List<UserDepartment> userDepartments = this.userDepartmentService.getUserDepartments(departmentId);
+            if(userDepartments != null){
+                for (UserDepartment userDepartment : userDepartments){
+                    User user = this.userService.getUser(userDepartment.getUserId());
+                    sendEmails.add(user.getAccount());
+                }
+            }*/
             departments.add(department);
         }
 
-        //  湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �궗�슜�옄瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎.
-        //this.projectRoleService.addDefaultProjectRole(project, managers, users);
-        this.projectRoleService.addDefaultProjectRole(project, managers, departments);
+        //  湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �떞�떦遺��꽌瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎.
+        this.projectRoleService.addDefaultProjectRoleDepartment(project, managers, departments);
 
         //  �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎.
         Map<String, Object> projectMap = new HashMap<>();
@@ -244,6 +245,8 @@
         stringBuilder.append(")");
 
         projectMap.put("projectManagerName", stringBuilder.toString());
+        //  �봽濡쒖젥�듃 �떞�떦遺��꽌 硫붿씪 諛쒖넚 �삁�빟
+        this.systemEmailService.reservationEmail(sendEmails.toArray(new String[sendEmails.size()]), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap);
     }
 
 
@@ -407,7 +410,7 @@
             this.setProjectUser(projectVo, false);
             
             //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 遺��꽌 �꽭�똿
-            //this.setProjectDepartment(projectVo);
+            this.setProjectDepartment(projectVo);
 
             //  �뾽臾닿났媛� �떞�떦�옄�뒗 紐⑤뱺 �봽濡쒖젥�듃瑜� �닔�젙/�궘�젣�븷 �닔 �엳�뼱�빞 �븳�떎.
             if (this.userWorkspaceService.checkWorkspaceManager()) {
@@ -500,7 +503,7 @@
                 case "01": //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄, 愿�由ъ옄 �젙蹂대�� �뀑�똿�븳�떎.
                     this.setProjectUser(projectVo, true);
                     this.setProjectUser(projectVo, false);
-                    //this.setProjectDepartment(projectVo); //遺��꽌 �젙蹂� �꽭�똿
+                    this.setProjectDepartment(projectVo); //遺��꽌 �젙蹂� �꽭�똿
                     break;
             }
         }
@@ -519,7 +522,7 @@
         //  �긽�깭 泥댄겕
         this.verifyProjectStatus(projectForm.getStatus());
         //  �궇吏� �쑀�슚�꽦 泥댄겕
-        this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate());
+        //this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate());
         //  愿�由ъ옄 �쑀�슚�꽦 泥댄겕
         this.verifyManager(projectForm.getManagerIds());
 
@@ -537,6 +540,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);
@@ -555,7 +559,9 @@
         this.checkExcludeDepartmentAndRemoveIssueDepartment(project, existDepartmentIds, changeDepartmentIds);
 
         //  愿�由ъ옄/�씪諛� �궗�슜�옄 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎.
-        this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project);
+        //this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project);
+        //  愿�由ъ옄/�떞�떦遺��꽌 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎.
+        this.notificationProjectRoleDepartment(changeProjectManagerNotifications, changeProjectDepartmentNotifications, project);
 
         return project;
     }
@@ -728,6 +734,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);
+        }
+
+        //  �젣�쇅 ���긽�옄 李얘린, oldDepartment �뿉�뒗 �엳�뒗�뜲 newDepartment �뿉 �뾾�쑝硫� �젣�쇅 ���긽
+        List<String> excludeDepartments = this.systemEmailService.notificationDepartmentChange(oldDepartment, newDepartment);
+        //  李몄뿬 ���긽�옄 李얘린, newDepartment �뿉�뒗 �엳�뒗�뜲 oldDepartment �뿉 �뾾�쑝硫� 珥덈�諛쏆� ���긽
+        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");  //  愿�由ъ옄 �젣�쇅 �궗�슜�옄
@@ -795,6 +832,47 @@
         this.sendEmailProjectRoleChange(this.checkDuplicationEmails(projectUserIncludeUsers, excludeManagerAndIncludeUser, excludeUserAndIncludeManager), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap);
     }
 
+    //  �봽濡쒖젥�듃 李몄뿬, �젣�쇅 �넻吏� �젙蹂� 泥댄겕
+    private void notificationProjectRoleDepartment(Map<String, Object> changeProjectManagerNotifications, Map<String, Object> changeProjectDepartmentNotifications, Project project) {
+        List<String> projectManagerExcludeUsers = (List<String>) changeProjectManagerNotifications.get("excludeUsers");  //  愿�由ъ옄 �젣�쇅 �궗�슜�옄
+        List<String> projectManagerIncludeUsers = (List<String>) changeProjectManagerNotifications.get("includeUsers");  //  愿�由ъ옄 李몄뿬 �궗�슜�옄
+        List<String> projectDepartmentExcludeDepartments = (List<String>) changeProjectDepartmentNotifications.get("excludeDepartments");    //  �젣�쇅�맂 �떞�떦 遺��꽌
+        List<String> projectDepartmentIncludeDepartments = (List<String>) changeProjectDepartmentNotifications.get("includeDepartments");    //  李몄뿬�맂 �떞�떦 遺��꽌
+        Map<String, Object> projectMap = new HashMap<>();
+        projectMap.put("workspaceName", project.getWorkspace().getName());
+        projectMap.put("projectName", project.getName());
+        projectMap.put("registerDate", DateUtil.convertDateToStr(new Date()));
+
+        Map<String, Object> projectRoleManagerMap = new HashMap<>();
+        projectRoleManagerMap.put("id", project.getId());
+        projectRoleManagerMap.put("statuses", Lists.newArrayList("02"));   //  愿�由ъ옄 議고쉶
+
+        //  愿�由ъ옄 �젙蹂� �뀑�똿
+        List<Map<String, Object>> projectRoleManagers = this.projectRoleUserService.findProjectRoleUser(projectRoleManagerMap);
+
+        if (projectRoleManagers != null && !projectRoleManagers.isEmpty()) {
+            for (Map<String, Object> projectRoleManager : projectRoleManagers) {
+                UserVo userVo = ConvertUtil.convertMapToClass(projectRoleManager, UserVo.class);
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.append(userVo.getName());
+                stringBuilder.append("(");
+                stringBuilder.append(CommonUtil.decryptAES128(userVo.getAccount()));
+                stringBuilder.append(")");
+
+                projectMap.put("projectManagerName", stringBuilder.toString());
+            }
+        }
+
+        //  愿�由ъ옄 �젣�쇅 硫붿씪
+        this.sendEmailProjectRoleChange(projectManagerExcludeUsers, EmailType.PROJECT_MANAGER_EXCLUDE, projectMap);
+        //  愿�由ъ감 李몄뿬 硫붿씪
+        this.sendEmailProjectRoleChange(projectManagerIncludeUsers, EmailType.PROJECT_MANAGER_INCLUDE, projectMap);
+        //  �떞�떦 遺��꽌 �젣�쇅 硫붿씪
+        this.sendEmailProjectRoleChange(projectDepartmentExcludeDepartments, EmailType.PROJECT_DEFAULT_EXCLUDE, projectMap);
+        //  �떞�떦 遺��꽌 李몄뿬 硫붿씪
+        this.sendEmailProjectRoleChange(projectDepartmentIncludeDepartments, EmailType.PROJECT_DEFAULT_INCLUDE, projectMap);
+    }
+
     //  以묐났�쑝濡� �굹媛��뒗 硫붿씪�씠 �엳�뒗吏� 泥댄겕�븳�떎.
     private List<String> checkDuplicationEmails(List<String> checkEmails, List<String> excludeManagerAndIncludeUser, List<String> excludeUserAndIncludeManager) {
         List<String> sendProjectManagerExcludeUserEmails = Lists.newArrayList();

--
Gitblit v1.8.0