From b98d25d2425b932e70efb1b6ea6bec436cd3f6f2 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 금, 19 11월 2021 13:35:30 +0900
Subject: [PATCH] 프로젝트 담당부서 백엔드 수정 * 프로젝트에 속해있는 부서만 이슈 담당부서로 설정 가능

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java                 |    2 
 src/main/java/kr/wisestone/owl/domain/Department.java                             |    2 
 src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java |    2 
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java                         |    1 
 src/main/java/kr/wisestone/owl/vo/ProjectVo.java                                  |   10 ++
 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties                            |    1 
 src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java    |    3 
 src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml      |   11 --
 src/main/webapp/scripts/app/project/projectAdd.controller.js                      |    1 
 src/main/java/kr/wisestone/owl/service/ProjectRoleService.java                    |    4 
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java               |  106 ++++++++++++++++++++++++++
 src/main/java/kr/wisestone/owl/web/form/ProjectForm.java                          |   13 +++
 src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java                |   13 +++
 src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java           |   29 ++++++-
 src/main/java/kr/wisestone/owl/domain/ProjectRole.java                            |   20 +++++
 15 files changed, 194 insertions(+), 24 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index bdface4..cdb4a8b 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -223,4 +223,5 @@
 
     public static final String ISP_NOT_EXIST = "ISP_NOT_EXIST";   // ISP媛� 議댁옱�븯吏� �븡�뒿�땲�떎.
     public static final String ISP_REMOVE_NOT_SELECT = "ISP_REMOVE_NOT_SELECT";   // �궘�젣�븷 ISP媛� �꽑�깮�릺吏� �븡�븯�뒿�땲�떎.
+    public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT";   // �꽑�깮�븳 遺��꽌 以� �봽濡쒖젥�듃�뿉 李몄뿬�븯怨� �엳吏� �븡�� 遺��꽌媛� �엳�뒿�땲�떎.
 }
diff --git a/src/main/java/kr/wisestone/owl/domain/Department.java b/src/main/java/kr/wisestone/owl/domain/Department.java
index aaf363e..8ec34a2 100644
--- a/src/main/java/kr/wisestone/owl/domain/Department.java
+++ b/src/main/java/kr/wisestone/owl/domain/Department.java
@@ -48,7 +48,7 @@
 
     public void addProjectRole(ProjectRole projectRole) {
         if (this.projectRoleDepartments == null) {
-            this.projectRoleDepartments = new HashSet<ProjectRoleDepartment>();
+            this.projectRoleDepartments = new HashSet<>();
         }
         ProjectRoleDepartment projectRoleDepartment = new ProjectRoleDepartment(projectRole, this);
 
diff --git a/src/main/java/kr/wisestone/owl/domain/ProjectRole.java b/src/main/java/kr/wisestone/owl/domain/ProjectRole.java
index 832baa0..e536973 100644
--- a/src/main/java/kr/wisestone/owl/domain/ProjectRole.java
+++ b/src/main/java/kr/wisestone/owl/domain/ProjectRole.java
@@ -30,6 +30,9 @@
     private Set<ProjectRoleUser> projectRoleUsers = new HashSet<>();
 
     @OneToMany(mappedBy="projectRole", cascade={CascadeType.ALL}, orphanRemoval=true)
+    private Set<ProjectRoleDepartment> projectRoleDepartments = new HashSet<>();
+
+    @OneToMany(mappedBy="projectRole", cascade={CascadeType.ALL}, orphanRemoval=true)
     private Set<ProjectRolePermission> projectRolePermissions = new HashSet<>();
 
     public ProjectRole(){}
@@ -80,6 +83,14 @@
         this.projectRoleUsers = projectRoleUsers;
     }
 
+    public Set<ProjectRoleDepartment> getProjectRoleDepartments() {
+        return projectRoleDepartments;
+    }
+
+    public void setProjectRoleDepartments(Set<ProjectRoleDepartment> projectRoleDepartments) {
+        this.projectRoleDepartments = projectRoleDepartments;
+    }
+
     public Set<ProjectRolePermission> getProjectRolePermissions() {
         return projectRolePermissions;
     }
@@ -97,6 +108,15 @@
         this.projectRoleUsers.add(projectRoleUser);
     }
 
+    public void addDepartment(Department department) {
+        if (this.projectRoleDepartments == null) {
+            this.projectRoleDepartments = new HashSet<>();
+        }
+        ProjectRoleDepartment projectRoleDepartment = new ProjectRoleDepartment(this, department);
+
+        this.projectRoleDepartments.add(projectRoleDepartment);
+    }
+
     public void removeProjectRole(User user) {
         Iterator<ProjectRoleUser> iterator = this.projectRoleUsers.iterator();
 
diff --git a/src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java b/src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java
index 56f716e..5e38f1e 100644
--- a/src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java
+++ b/src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java
@@ -11,7 +11,4 @@
     List<ProjectRoleDepartment> findByProjectRoleId(@Param("projectRoleId") Long projectRoleId);
 
     ProjectRoleDepartment findByProjectRoleIdAndDepartmentId(@Param("projectRoleId") Long projectRoleId, @Param("departmentId") Long departmentId);
-
-    //ProjectRoleUser findByProjectRoleIdAndDepartmentId(@Param("projectRoleId") Long projectRoleId, @Param("departmentId") Long departmentId);
-
 }
diff --git a/src/main/java/kr/wisestone/owl/service/ProjectRoleService.java b/src/main/java/kr/wisestone/owl/service/ProjectRoleService.java
index 7940a56..c7d13d0 100644
--- a/src/main/java/kr/wisestone/owl/service/ProjectRoleService.java
+++ b/src/main/java/kr/wisestone/owl/service/ProjectRoleService.java
@@ -1,5 +1,6 @@
 package kr.wisestone.owl.service;
 
+import kr.wisestone.owl.domain.Department;
 import kr.wisestone.owl.domain.Project;
 import kr.wisestone.owl.domain.ProjectRole;
 import kr.wisestone.owl.domain.User;
@@ -9,7 +10,8 @@
 
 public interface ProjectRoleService extends AbstractService<ProjectRole, Long, JpaRepository<ProjectRole, Long>>{
 
-    void addDefaultProjectRole(Project project, List<User> managers, List<User> users);
+    //void addDefaultProjectRole(Project project, List<User> managers, List<User> users);
+    void addDefaultProjectRole(Project project, List<User> managers, List<Department> departments);
 
     ProjectRole findByProjectIdAndRoleType(Long projectId, String roleType);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index de17002..97eb0cc 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -1142,7 +1142,7 @@
                 //  �뜲�씠�꽣 蹂댁젙 �옉�뾽 - �봽濡쒖젥�듃�뿉�꽌 �젣�쇅�맂 �궗�슜�옄�뒗 �떞�떦�옄�뿉�꽌 �젣�쇅 �맆 �닔 �엳�룄濡� 泥섎━
                 if (!includeProject) {
                     throw new OwlRuntimeException(
-                            this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_USER));
+                            this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_DEPARTMENT));
                 }
             }
             //  李몄뿬 �솗�씤�맂 遺��꽌濡� �떞�떦遺��꽌 蹂�寃�
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java
index b9d6163..f98bae8 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java
@@ -57,7 +57,7 @@
         return this.projectRoleDepartmentRepository.findByProjectRoleIdAndDepartmentId(projectRoleId, departmentId);
     }
 
-    //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄, �봽濡쒖젥�듃 愿�由ъ옄瑜� �뙆�씪誘명꽣�뿉 �뵲�씪 議고쉶�븳�떎.
+    //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 遺��꽌瑜� �뙆�씪誘명꽣�뿉 �뵲�씪 議고쉶�븳�떎.
     @Override
     @Transactional(readOnly = true)
     public List<Map<String, Object>> findProjectRoleDepartment(Map<String, Object> projectRoleDepartmentMap) {
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java
index e9a70b6..c36dc52 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleServiceImpl.java
@@ -26,6 +26,9 @@
     private ProjectRoleUserService projectRoleUserService;
 
     @Autowired
+    private ProjectRoleDepartmentService projectRoleDepartmentService;
+
+    @Autowired
     private ProjectRolePermissionService projectRolePermissionService;
 
     @Override
@@ -34,7 +37,7 @@
     }
 
     //  湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븳�떎.
-    @Override
+    /*@Override
     @Transactional
     public void addDefaultProjectRole(Project project, List<User> managers, List<User> users) {
         ProjectRole projectRole = this.addProjectRole(project, "湲곕낯 �봽濡쒖젥�듃 �뿭�븷", ProjectRole.TYPE_DEFAULT, Permission.ROLE_TYPE_PROJECT_JOIN);
@@ -42,7 +45,23 @@
         //  �봽濡쒖젥�듃 愿�由ъ옄 ���옣
         this.projectRoleAssociatedUser(managers, managerProjectRole);
         //  �봽濡쒖젥�듃 �씪諛� �궗�슜�옄 ���옣
-        this.projectRoleAssociatedUser(users, projectRole);
+        //this.projectRoleAssociatedUser(users, projectRole);
+
+        this.projectRoleRepository.flush();
+    }*/
+
+    //  �봽濡쒖젥�듃 �뿭�븷 �깮�꽦(愿�由ъ옄, �떞�떦遺��꽌)
+    @Override
+    @Transactional
+    public void addDefaultProjectRole(Project project, List<User> managers, List<Department> departments) {
+        ProjectRole projectRole = this.addProjectRole(project, "湲곕낯 �봽濡쒖젥�듃 �뿭�븷", ProjectRole.TYPE_DEFAULT, Permission.ROLE_TYPE_PROJECT_JOIN);
+        ProjectRole managerProjectRole = this.addProjectRole(project, "�봽濡쒖젥�듃 愿�由ъ옄 �뿭�븷", ProjectRole.TYPE_MANAGER, Permission.ROLE_TYPE_PROJECT_MANAGER);
+        //  �봽濡쒖젥�듃 愿�由ъ옄 ���옣
+        this.projectRoleAssociatedUser(managers, managerProjectRole);
+        //  �봽濡쒖젥�듃 �씪諛� �궗�슜�옄 ���옣
+        //this.projectRoleAssociatedUser(users, projectRole);
+        //  �봽濡쒖젥�듃 �떞�떦 遺��꽌 ���옣
+        this.projectRoleAssociatedDepartment(departments, projectRole);
 
         this.projectRoleRepository.flush();
     }
@@ -64,7 +83,7 @@
         }
     }
 
-    /*// �봽濡쒖젥�듃 �뿭�븷怨� 遺��꽌 �뿰寃�
+    // �봽濡쒖젥�듃 �뿭�븷怨� 遺��꽌 �뿰寃�
     private void projectRoleAssociatedDepartment(List<Department> departments, ProjectRole projectRole) {
         for (Department department : departments) {
             this.addDefaultProjectRoleAssociatedDepartment(projectRole, department);
@@ -73,13 +92,13 @@
 
     //  �빐�떦 �뿭�븷怨� 遺��꽌瑜� �뿰寃곗떆�궓�떎.
     private void addDefaultProjectRoleAssociatedDepartment(ProjectRole projectRole, Department department) {
-        ProjectRoleUser projectRoleDepartment = this.projectRoleUserService.findByProjectRoleIdAndDepartmentId(projectRole.getId(), department.getId());
+        ProjectRoleDepartment projectRoleDepartment = this.projectRoleDepartmentService.findByProjectRoleIdAndDepartmentId(projectRole.getId(), department.getId());
 
         if (projectRoleDepartment == null) {
             //  �봽濡쒖젥�듃 愿�由ъ옄 - 湲곕낯 �봽濡쒖젥�듃 �뿭�븷�뿉 異붽�.
             department.addProjectRole(projectRole);
         }
-    }*/
+    }
 
     //  �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븳�떎.
     private ProjectRole addProjectRole(Project project, String projectRoleName, String projectRoleType, String permissionType) {
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..28299c9 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -46,6 +46,9 @@
     private UserService userService;
 
     @Autowired
+    private DepartmentService departmentService;
+
+    @Autowired
     private ProjectRoleService projectRoleService;
 
     @Autowired
@@ -64,6 +67,9 @@
     private ProjectRoleUserService projectRoleUserService;
 
     @Autowired
+    private ProjectRoleDepartmentService projectRoleDepartmentService;
+
+    @Autowired
     private AttachedFileService attachedFileService;
 
     @Autowired
@@ -71,6 +77,9 @@
 
     @Autowired
     private IssueUserService issueUserService;
+
+    @Autowired
+    private IssueDepartmentService issueDepartmentService;
 
     @Autowired
     private IssueNumberGeneratorService issueNumberGeneratorService;
@@ -148,7 +157,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 +184,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 +210,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 +405,10 @@
             //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄瑜� �뀑�똿�븳�떎. - 愿�由ъ옄 / �씪諛� �궗�슜�옄
             this.setProjectUser(projectVo, true);
             this.setProjectUser(projectVo, false);
+            
+            //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 遺��꽌 �꽭�똿
+            //this.setProjectDepartment(projectVo);
+
             //  �뾽臾닿났媛� �떞�떦�옄�뒗 紐⑤뱺 �봽濡쒖젥�듃瑜� �닔�젙/�궘�젣�븷 �닔 �엳�뼱�빞 �븳�떎.
             if (this.userWorkspaceService.checkWorkspaceManager()) {
                 projectVo.setModifyPermissionCheck(true);
@@ -401,6 +457,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 +500,7 @@
                 case "01": //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄, 愿�由ъ옄 �젙蹂대�� �뀑�똿�븳�떎.
                     this.setProjectUser(projectVo, true);
                     this.setProjectUser(projectVo, false);
+                    //this.setProjectDepartment(projectVo); //遺��꽌 �젙蹂� �꽭�똿
                     break;
             }
         }
@@ -449,6 +526,8 @@
         Project project = this.getProject(projectForm.getId());
         //  �봽濡쒖젥�듃 李몄뿬 �궗�슜�옄
         List<Long> existUserIds = this.getIncludeProjectUser(project);
+        //  �봽濡쒖젥�듃 李몄뿬 遺��꽌
+        List<Long> existDepartmentIds = this.getIncludeProjectDepartment(project);
 
         //  �썙�겕�뒪�럹�씠�뒪�뿉�꽌 湲곕낯�쑝濡� �젣怨듬릺�뒗 �봽濡쒖젥�듃�뿉 ���븳 泥댄겕
         this.checkDefaultProject(project, projectForm);
@@ -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) {
diff --git a/src/main/java/kr/wisestone/owl/vo/ProjectVo.java b/src/main/java/kr/wisestone/owl/vo/ProjectVo.java
index 13ad024..717cf69 100644
--- a/src/main/java/kr/wisestone/owl/vo/ProjectVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/ProjectVo.java
@@ -1,6 +1,7 @@
 package kr.wisestone.owl.vo;
 
 import com.google.common.collect.Lists;
+import kr.wisestone.owl.domain.Department;
 import kr.wisestone.owl.domain.Project;
 
 import java.util.ArrayList;
@@ -25,6 +26,7 @@
     private List<UserVo> projectUserVos = Lists.newArrayList();
     private List<UserVo> projectManagerVos = Lists.newArrayList();
     private List<ProjectVo> childProjects = Lists.newArrayList();
+    private List<DepartmentVo> projectDepartmentVos = Lists.newArrayList();
 
     public ProjectVo(){}
 
@@ -147,4 +149,12 @@
     public void setDefaultYn(Boolean defaultYn) {
         this.defaultYn = defaultYn;
     }
+
+    public List<DepartmentVo> getProjectDepartmentVos() {
+        return projectDepartmentVos;
+    }
+
+    public void setProjectDepartmentVos(List<DepartmentVo> projectDepartmentVos) {
+        this.projectDepartmentVos = projectDepartmentVos;
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java b/src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java
index 18448d6..9486dc6 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/ProjectCondition.java
@@ -25,6 +25,7 @@
     private List<String> roleTypes = Lists.newArrayList();  //  �봽濡쒖젥�듃 愿�由ъ옄, �씪諛� 李몄뿬�옄瑜� 援щ텇�빐�꽌 媛��졇�삩�떎.
     private List<Long> excludeIds = Lists.newArrayList();
     private List<Long> userIds = Lists.newArrayList();
+    private List<Long> departmentIds = Lists.newArrayList();
 
     public ProjectCondition(){}
 
@@ -49,6 +50,10 @@
 
         if (MapUtil.getLongs(conditions, "userIds") != null) {
             condition.setUserIds(MapUtil.getLongs(conditions, "userIds"));
+        }
+
+        if (MapUtil.getLongs(conditions, "departmentIds") != null) {
+            condition.setDepartmentIds(MapUtil.getLongs(conditions, "departmentIds"));
         }
 
         return condition;
@@ -165,4 +170,12 @@
     public void setWorkspaceManager(Boolean workspaceManager) {
         this.workspaceManager = workspaceManager;
     }
+
+    public List<Long> getDepartmentIds() {
+        return departmentIds;
+    }
+
+    public void setDepartmentIds(List<Long> departmentIds) {
+        this.departmentIds = departmentIds;
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/web/form/ProjectForm.java b/src/main/java/kr/wisestone/owl/web/form/ProjectForm.java
index a8ce414..161bcca 100644
--- a/src/main/java/kr/wisestone/owl/web/form/ProjectForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/ProjectForm.java
@@ -21,6 +21,7 @@
     private List<Long> managerIds = Lists.newArrayList();
     private List<Long> removeIds = Lists.newArrayList();
     private List<Long> userIds = Lists.newArrayList();
+    private List<Long> departmentIds = Lists.newArrayList();
 
     public ProjectForm() {
     }
@@ -34,6 +35,10 @@
 
         if (MapUtil.getLongs(params, "userIds") != null) {
             form.setUserIds(MapUtil.getLongs(params, "userIds"));
+        }
+
+        if (MapUtil.getLongs(params, "departmentIds") != null) {
+            form.setDepartmentIds(MapUtil.getLongs(params, "departmentIds"));
         }
 
         if (MapUtil.getLongs(params, "removeIds") != null) {
@@ -154,4 +159,12 @@
     public void addRemoveIds(Long removeId) {
         this.removeIds.add(removeId);
     }
+
+    public List<Long> getDepartmentIds() {
+        return departmentIds;
+    }
+
+    public void setDepartmentIds(List<Long> departmentIds) {
+        this.departmentIds = departmentIds;
+    }
 }
diff --git a/src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml b/src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml
index 20643a0..e752a69 100644
--- a/src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml
+++ b/src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml
@@ -27,16 +27,7 @@
         INNER JOIN project_role pr on p.id = pr.project_id
         INNER JOIN project_role_department prd on prd.project_role_id = pr.id
         INNER JOIN department d on d.id = prd.department_id
-        WHERE 1=1
-        <choose>
-            <when test="statuses.size != 0">
-                AND pr.role_type IN
-                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
-                    #{item}
-                </foreach>
-            </when>
-        </choose>
-        AND p.id = #{id}
+        WHERE p.id = #{id}
     </select>
 
 
diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
index abc0723..be165a9 100644
--- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
+++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -23,6 +23,7 @@
 DEFAULT_PROJECT_NOT_REMOVE = \uAE30\uBCF8\uC73C\uB85C \uC81C\uACF5\uB418\uB294 \uD504\uB85C\uC81D\uD2B8\uB294 \uC0AD\uC81C\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
 PROJECT_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
 PROJECT_NOT_INCLUDE_USER = \uC120\uD0DD\uD55C \uB2F4\uB2F9\uC790 \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\uAC00 \uC788\uC2B5\uB2C8\uB2E4.
+PROJECT_NOT_INCLUDE_DEPARTMENT = \uC120\uD0DD\uD55C \uBD80\uC11C \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uBD80\uC11C\uAC00 \uC788\uC2B5\uB2C8\uB2E4.
 PROJECT_USED_PROJECT_KEY = \uD504\uB85C\uC81D\uD2B8 \uD0A4\uAC00 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
 
 PAYMENT_TYPE_NOT_EXIST = \uACB0\uC81C \uBC29\uC2DD\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
diff --git a/src/main/webapp/scripts/app/project/projectAdd.controller.js b/src/main/webapp/scripts/app/project/projectAdd.controller.js
index 25711d7..05d486b 100644
--- a/src/main/webapp/scripts/app/project/projectAdd.controller.js
+++ b/src/main/webapp/scripts/app/project/projectAdd.controller.js
@@ -33,6 +33,7 @@
                             id : $rootScope.user.id
                         }],  //  愿�由ъ옄
                         users : [], //  �씪諛� �궗�슜�옄
+                        departments : []
                     },
                     userName : "",  //  �씪諛� �궗�슜�옄 �씠由� 寃��깋
                     projectName : "",   //  �긽�쐞 �봽濡쒖젥�듃 �씠由� 寃��깋

--
Gitblit v1.8.0