From d3c662dfcd180602c5740837e0cecb51e78d4cb4 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 화, 16 11월 2021 17:16:56 +0900
Subject: [PATCH] - 이슈관리 업체,ISP,호스팅 추가 완료 - 프로젝트 부서담당자 백엔드 추가 * db날리고 실행

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java                 |   79 +++++++++---
 src/main/java/kr/wisestone/owl/domain/Issue.java                                  |   36 ++++++
 src/main/java/kr/wisestone/owl/service/ProjectRoleDepartmentService.java          |   15 ++
 src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java                |    2 
 src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java |   66 +++++++++++
 src/main/java/kr/wisestone/owl/mapper/ProjectRoleDepartmentMapper.java            |   19 +++
 src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java       |    7 -
 src/main/java/kr/wisestone/owl/web/form/IssueForm.java                            |   41 ++++++
 src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java    |   17 ++
 src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml      |   43 +++++++
 src/main/webapp/scripts/app/project/projectAdd.controller.js                      |    9 
 src/main/resources/migration/V1_1__Initial_Setup.sql                              |   15 ++
 12 files changed, 316 insertions(+), 33 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/domain/Issue.java b/src/main/java/kr/wisestone/owl/domain/Issue.java
index 38564bb..b9ed37a 100644
--- a/src/main/java/kr/wisestone/owl/domain/Issue.java
+++ b/src/main/java/kr/wisestone/owl/domain/Issue.java
@@ -46,6 +46,18 @@
     @JoinColumn(name = "severity_id")
     private Severity severity;
 
+    @ManyToOne(fetch=FetchType.LAZY)
+    @JoinColumn(name = "company_id")
+    private CompanyField companyField;
+
+    @ManyToOne(fetch=FetchType.LAZY)
+    @JoinColumn(name = "hosting_id")
+    private HostingField hostingFieldId;
+
+    @ManyToOne(fetch=FetchType.LAZY)
+    @JoinColumn(name = "isp_id")
+    private IspField ispFieldId;
+
     @OneToOne(mappedBy = "issue", cascade = {CascadeType.ALL}, orphanRemoval = true)
     private IssueRisk issueRisk;
 
@@ -161,6 +173,30 @@
         this.severity = severity;
     }
 
+    public CompanyField getCompanyField() {
+        return companyField;
+    }
+
+    public void setCompanyField(CompanyField companyField) {
+        this.companyField = companyField;
+    }
+
+    public HostingField getHostingFieldId() {
+        return hostingFieldId;
+    }
+
+    public void setHostingFieldId(HostingField hostingFieldId) {
+        this.hostingFieldId = hostingFieldId;
+    }
+
+    public IspField getIspFieldId() {
+        return ispFieldId;
+    }
+
+    public void setIspFieldId(IspField ispFieldId) {
+        this.ispFieldId = ispFieldId;
+    }
+
     public IssueRisk getIssueRisk() {
         return issueRisk;
     }
diff --git a/src/main/java/kr/wisestone/owl/mapper/ProjectRoleDepartmentMapper.java b/src/main/java/kr/wisestone/owl/mapper/ProjectRoleDepartmentMapper.java
new file mode 100644
index 0000000..7373992
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/mapper/ProjectRoleDepartmentMapper.java
@@ -0,0 +1,19 @@
+package kr.wisestone.owl.mapper;
+
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by wisestone on 2018-11-27.
+ */
+@Repository
+public interface ProjectRoleDepartmentMapper {
+    //void insertProjectRoleDepartment(List<Map<String, Long>> projectRoleDepartmentMaps);
+
+    //void deleteProjectRoleDepartment(Map<String, Long> projectRoleDepartmentMaps);
+
+    List<Map<String, Object>> findProjectRoleDepartment(Map<String, Object> projectRoleDepartmentMap);
+
+}
diff --git a/src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java b/src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java
new file mode 100644
index 0000000..56f716e
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/repository/ProjectRoleDepartmentRepository.java
@@ -0,0 +1,17 @@
+package kr.wisestone.owl.repository;
+
+import kr.wisestone.owl.domain.ProjectRoleDepartment;
+import kr.wisestone.owl.domain.ProjectRoleUser;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
+
+public interface ProjectRoleDepartmentRepository extends JpaRepository<ProjectRoleDepartment, Long> {
+    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/ProjectRoleDepartmentService.java b/src/main/java/kr/wisestone/owl/service/ProjectRoleDepartmentService.java
new file mode 100644
index 0000000..0d6e0c0
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/service/ProjectRoleDepartmentService.java
@@ -0,0 +1,15 @@
+package kr.wisestone.owl.service;
+
+import kr.wisestone.owl.domain.*;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ProjectRoleDepartmentService extends AbstractService<ProjectRoleDepartment, Long, JpaRepository<ProjectRoleDepartment, Long>>{
+    List<ProjectRoleDepartment> findByProjectRoleId(Long projectRoleId);
+
+    ProjectRoleDepartment findByProjectRoleIdAndDepartmentId(Long projectRoleId, Long departmentId); //�떞�떦遺��꽌
+
+    List<Map<String, Object>> findProjectRoleDepartment(Map<String, Object> projectRoleDepartmentMap);
+}
diff --git a/src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java b/src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java
index 8cd03ea..a7afb29 100644
--- a/src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java
+++ b/src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java
@@ -14,8 +14,6 @@
 
     ProjectRoleUser findByProjectRoleIdAndUserId(Long projectRoleId, Long userId); //�떞�떦�옄
 
-    //ProjectRoleUser findByProjectRoleIdAndDepartmentId(Long projectRoleId, Long departmentId); //�떞�떦遺��꽌
-
     void withDrawWorkspaceManagerModifyProjectRole(Workspace workspace, User user);
 
     List<Map<String, Object>> findProjectRoleUser(Map<String, Object> projectRoleUserMap);
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 c692a5e..c6c5436 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -70,6 +70,15 @@
     private SeverityService severityService;
 
     @Autowired
+    private CompanyFieldService companyFieldService;
+
+    @Autowired
+    private IspFieldService ispFieldService;
+
+    @Autowired
+    private HostingFieldService hostingFieldService;
+
+    @Autowired
     private CommonConfiguration configuration;
 
     @Autowired
@@ -104,6 +113,9 @@
 
     @Autowired
     private ProjectRoleUserService projectRoleUserService;
+
+    @Autowired
+    private ProjectRoleDepartmentService projectRoleDepartmentService;
 
     @Autowired
     private IssueRiskService issueRiskService;
@@ -184,6 +196,23 @@
         issue.setIssueType(issueType);
         issue.setPriority(priority);
         issue.setSeverity(severity);
+
+        //  �뾽泥� �븘�뱶 �쑀�슚�꽦 泥댄겕
+        if(issueForm.getCompanyId() != null){
+            CompanyField companyField = this.companyFieldService.getCompany(issueForm.getCompanyId());
+            issue.setCompanyField(companyField);
+        }
+        //  ISP �븘�뱶 �쑀�슚�꽦 泥댄겕
+        if(issueForm.getIspId() != null) {
+            IspField ispField = this.ispFieldService.getIsp(issueForm.getIspId());
+            issue.setIspFieldId(ispField);
+        }
+        //  HOSTING �븘�뱶 �쑀�슚�꽦 泥댄겕
+        if (issueForm.getHostingId() != null){
+            HostingField hostingField = this.hostingFieldService.getHosting(issueForm.getHostingId());
+            issue.setHostingFieldId(hostingField);
+        }
+
         issue.setIssueNumber(this.issueNumberGeneratorService.generateIssueNumber(project));    //  媛� �봽濡쒖젥�듃�쓽 怨좎쑀 �씠�뒋 踰덊샇 �깮�꽦
 
         this.issueRepository.saveAndFlush(issue);
@@ -247,18 +276,25 @@
         issueMap.put("issueTypeName", issue.getIssueType().getName());
         issueMap.put("issueStatusName", issue.getIssueStatus().getName());
 
-        //  �떞�떦遺��꽌
+        //  �떞�떦�옄
         StringBuilder assigneeBuilder = new StringBuilder();
-        for (IssueDepartment issueDepartment : issue.getIssueDepartments()) {
-            //assigneeBuilder.append(issueUser.getUser().getName());
-            assigneeBuilder.append(issueDepartment.getDepartment().getDepartmentName());
-            /*assigneeBuilder.append("(");
+        for (IssueUser issueUser : issue.getIssueUsers()) {
+            assigneeBuilder.append(issueUser.getUser().getName());
+            assigneeBuilder.append("(");
             assigneeBuilder.append(CommonUtil.decryptAES128(issueUser.getUser().getAccount()));
-            assigneeBuilder.append(")");*/
+            assigneeBuilder.append(")");
             assigneeBuilder.append("\n");
         }
-
         issueMap.put("assignees", assigneeBuilder.toString());
+
+        //  �떞�떦遺��꽌
+        StringBuilder departsBuilder = new StringBuilder();
+        for (IssueDepartment issueDepartment : issue.getIssueDepartments()) {
+            departsBuilder.append(issueDepartment.getDepartment().getDepartmentName());
+            departsBuilder.append("\n");
+        }
+        issueMap.put("departsBuilder", departsBuilder.toString());
+
         //  湲곌컙
         if (!StringUtils.isEmpty(issue.getStartDate())) {
             issueMap.put("period", issue.getStartDate() + " ~ " + issue.getCompleteDate());
@@ -763,6 +799,7 @@
                     this.setAttachedFiles(issue, issueVo);  //  泥⑤� �뙆�씪 �젙蹂� �뀑�똿
                     this.setIssueCustomFields(issue, issueVo);  //  �궗�슜�옄 �젙�쓽 �븘�뱶 媛� �젙蹂� �뀑�똿
                     this.setRelationIssue(issue, issueVo);        //�뿰愿� �씪媛� �뀑�똿
+
                     break;
 
                 case "02": //  �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭,  �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎.
@@ -934,7 +971,7 @@
         //  �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎.
         this.workspaceService.checkUseWorkspace();
         //  �씠�뒋 �닔�젙 沅뚰븳 泥댄겕
-        //this.verifyIssueModifyPermission(issueForm.getId());
+        this.verifyIssueModifyPermission(issueForm.getId());
         //  �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕
         Project project = this.projectService.getProject(issueForm.getProjectId());
         //  �씠�뒋 �긽�깭 �쑀�슚�꽦 泥댄겕
@@ -950,8 +987,10 @@
         //  �궇吏� �쑀�슚�꽦 泥댄겕
         this.checkStartCompleteDate(issueForm.getStartDate(), issueForm.getCompleteDate());
 
-        //  �떞�떦�옄 �쑀�슚�꽦 泥댄겕 => �떞�떦遺��꽌濡� 蹂�寃�
+        //  �떞�떦�옄 �쑀�슚�꽦 泥댄겕
         //this.verifyIssueAssignee(project, issueForm);
+        //  �떞�떦遺��꽌 �쑀�슚�꽦 泥댄겕
+        this.verifyIssueDepartment(project, issueForm);
 
         Issue issue = this.getIssue(issueForm.getId());
 
@@ -1057,35 +1096,35 @@
     }
 
     //  �씠�뒋 �떞�떦遺��꽌濡� 吏��젙�맆 遺��꽌媛� �빐�떦 �봽濡쒖젥�듃�뿉 李몄뿬 �븯怨� �엳�뒗 遺��꽌�씤吏� �솗�씤
-    private void verifyIssueAssignee(Project project, IssueForm issueForm) {
+    private void verifyIssueDepartment(Project project, IssueForm issueForm) {
         if (issueForm.getDepartmentIds().size() > 0) {
             List<Long> trustDepartmentIds = Lists.newArrayList(); //  李몄뿬 �솗�씤�맂 遺��꽌
 
             for (Long departmentId : issueForm.getDepartmentIds()) {
                 boolean includeProject = false;
 
-                /*for (ProjectRole projectRole : project.getProjectRoles()) {
-                    ProjectRoleUser projectRoleUser = this.projectRoleUserService.findByProjectRoleIdAndDepartmentId(projectRole.getId(), departmentId);
+                for (ProjectRole projectRole : project.getProjectRoles()) {
+                    ProjectRoleDepartment projectRoleDepartment = this.projectRoleDepartmentService.findByProjectRoleIdAndDepartmentId(projectRole.getId(), departmentId);
 
-                    if (projectRoleUser != null) {
+                    if (projectRoleDepartment != null) {
                         includeProject = true;
                         trustDepartmentIds.add(departmentId);
                         break;
                     }
-                }*/
+                }
 
                 //  �뜲�씠�꽣 蹂댁젙 �옉�뾽 - �봽濡쒖젥�듃�뿉�꽌 �젣�쇅�맂 �궗�슜�옄�뒗 �떞�떦�옄�뿉�꽌 �젣�쇅 �맆 �닔 �엳�룄濡� 泥섎━
-                /*if (!includeProject) {
+                if (!includeProject) {
                     throw new OwlRuntimeException(
                             this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_USER));
-                }*/
+                }
             }
             //  李몄뿬 �솗�씤�맂 遺��꽌濡� �떞�떦遺��꽌 蹂�寃�
             issueForm.setDepartmentIds(trustDepartmentIds);
         }
     }
 
-    /*//  �씠�뒋 �떞�떦�옄濡� 吏��젙�맆 �궗�슜�옄媛� �빐�떦 �봽濡쒖젥�듃�뿉 李몄뿬 �븯怨� �엳�뒗 �궗�슜�옄 �씤吏� �솗�씤
+    //  �씠�뒋 �떞�떦�옄濡� 吏��젙�맆 �궗�슜�옄媛� �빐�떦 �봽濡쒖젥�듃�뿉 李몄뿬 �븯怨� �엳�뒗 �궗�슜�옄 �씤吏� �솗�씤
     private void verifyIssueAssignee(Project project, IssueForm issueForm) {
         if (issueForm.getUserIds().size() > 0) {
             List<Long> trustUserIds = Lists.newArrayList(); //  李몄뿬 �솗�씤�맂 �궗�슜�옄
@@ -1104,15 +1143,15 @@
                 }
 
                 //  �뜲�씠�꽣 蹂댁젙 �옉�뾽 - �봽濡쒖젥�듃�뿉�꽌 �젣�쇅�맂 �궗�슜�옄�뒗 �떞�떦�옄�뿉�꽌 �젣�쇅 �맆 �닔 �엳�룄濡� 泥섎━
-                *//*if (!includeProject) {
+                if (!includeProject) {
                     throw new OwlRuntimeException(
                             this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_USER));
-                }*//*
+                }
             }
             //  李몄뿬 �솗�씤�맂 �궗�슜�옄濡� �떞�떦�옄 蹂�寃�
             issueForm.setUserIds(trustUserIds);
         }
-    }*/
+    }
 
     //  �씠�뒋 �닔�젙 沅뚰븳 泥댄겕
     private void verifyIssueModifyPermission(Long issueId) {
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java
new file mode 100644
index 0000000..b9d6163
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleDepartmentServiceImpl.java
@@ -0,0 +1,66 @@
+package kr.wisestone.owl.service.impl;
+
+import com.google.common.collect.Lists;
+import kr.wisestone.owl.constant.MsgConstants;
+import kr.wisestone.owl.domain.*;
+import kr.wisestone.owl.exception.OwlRuntimeException;
+import kr.wisestone.owl.mapper.ProjectRoleDepartmentMapper;
+import kr.wisestone.owl.mapper.ProjectRoleUserMapper;
+import kr.wisestone.owl.repository.ProjectRoleDepartmentRepository;
+import kr.wisestone.owl.repository.ProjectRoleUserRepository;
+import kr.wisestone.owl.service.ProjectRoleDepartmentService;
+import kr.wisestone.owl.service.ProjectRoleService;
+import kr.wisestone.owl.service.UserWorkspaceService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class ProjectRoleDepartmentServiceImpl extends AbstractServiceImpl<ProjectRoleDepartment, Long, JpaRepository<ProjectRoleDepartment, Long>> implements ProjectRoleDepartmentService {
+
+    private static final Logger log = LoggerFactory.getLogger(ProjectRoleDepartmentServiceImpl.class);
+
+    @Autowired
+    private ProjectRoleDepartmentRepository projectRoleDepartmentRepository;
+
+    @Autowired
+    private ProjectRoleService projectRoleService;
+
+    @Autowired
+    private UserWorkspaceService userWorkspaceService;
+
+    @Autowired
+    private ProjectRoleDepartmentMapper projectRoleDepartmentMapper;
+
+    @Override
+    protected JpaRepository<ProjectRoleDepartment, Long> getRepository() {
+        return this.projectRoleDepartmentRepository;
+    }
+
+    @Override
+    @Transactional(readOnly = true)
+    public List<ProjectRoleDepartment> findByProjectRoleId(Long projectRoleId) {
+        return this.projectRoleDepartmentRepository.findByProjectRoleId(projectRoleId);
+    }
+
+    //  �빐�떦 遺��꽌媛� �듅�젙 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
+    @Override
+    @Transactional(readOnly = true)
+    public ProjectRoleDepartment findByProjectRoleIdAndDepartmentId(Long projectRoleId, Long departmentId) {
+        return this.projectRoleDepartmentRepository.findByProjectRoleIdAndDepartmentId(projectRoleId, departmentId);
+    }
+
+    //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄, �봽濡쒖젥�듃 愿�由ъ옄瑜� �뙆�씪誘명꽣�뿉 �뵲�씪 議고쉶�븳�떎.
+    @Override
+    @Transactional(readOnly = true)
+    public List<Map<String, Object>> findProjectRoleDepartment(Map<String, Object> projectRoleDepartmentMap) {
+        return this.projectRoleDepartmentMapper.findProjectRoleDepartment(projectRoleDepartmentMap);
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java
index 2b581ca..f158fe0 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java
@@ -54,13 +54,6 @@
         return this.projectRoleUserRepository.findByProjectRoleIdAndUserId(projectRoleId, userId);
     }
 
-    //  �빐�떦 遺��꽌媛� �듅�젙 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
-    /*@Override
-    @Transactional(readOnly = true)
-    public ProjectRoleUser findByProjectRoleIdAndDepartmentId(Long projectRoleId, Long departmentId) {
-        return this.projectRoleUserRepository.findByProjectRoleIdAndDepartmentId(projectRoleId, departmentId);
-    }*/
-
     //  �뾽臾� 怨듦컙�쓣 �깉�눜�븳 �궗�슜�옄媛� �떎瑜� �뾽臾� 怨듦컙�쓽 �봽濡쒖젥�듃 愿�由ъ옄, �씪諛� �궗�슜�옄濡� �엳�쓣 寃쎌슦 �젣嫄고븳�떎.
     @Override
     @Transactional
diff --git a/src/main/java/kr/wisestone/owl/web/form/IssueForm.java b/src/main/java/kr/wisestone/owl/web/form/IssueForm.java
index ebd2662..094aed4 100644
--- a/src/main/java/kr/wisestone/owl/web/form/IssueForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/IssueForm.java
@@ -37,6 +37,9 @@
     private List<Long> removeIds = Lists.newArrayList();
     private List<Long> ids = Lists.newArrayList();  //  �씠�뒋 �떎以� �긽�깭 蹂�寃쎌뿉�꽌 �궗�슜
     private String comment; //  �씠�뒋 �긽�깭 蹂�寃쎌뿉�꽌 蹂�寃� �궗�쑀瑜� �엯�젰�븷 �븣 �궗�슜
+    private Long companyId;    //�뾽泥댄븘�뱶
+    private Long ispId;    //ISP�븘�뱶
+    private Long hostingId;    //�샇�뒪�똿�븘�뱶
 
     public IssueForm() {
     }
@@ -93,6 +96,20 @@
             form.setIds(MapUtil.getLongs(params, "ids"));
         }
 
+        //  �뾽泥� �븘�뱶 �젙蹂�
+        if (MapUtil.getLongs(params, "companyFieldId") != null){
+            form.setCompanyId(MapUtil.getLong(params, "companyFieldId"));
+        }
+
+        //  ISP �븘�뱶 �젙蹂�
+        if (MapUtil.getLongs(params, "ispFieldId") != null){
+            form.setIspId(MapUtil.getLong(params, "ispFieldId"));
+        }
+
+        //  HOSTING �븘�뱶 �젙蹂�
+        if (MapUtil.getLongs(params, "hostingFieldId") != null){
+            form.setHostingId(MapUtil.getLong(params, "hostingFieldId"));
+        }
         return form;
     }
 
@@ -271,4 +288,28 @@
     public void setComment(String comment) {
         this.comment = comment;
     }
+
+    public Long getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Long companyId) {
+        this.companyId = companyId;
+    }
+
+    public Long getIspId() {
+        return ispId;
+    }
+
+    public void setIspId(Long ispId) {
+        this.ispId = ispId;
+    }
+
+    public Long getHostingId() {
+        return hostingId;
+    }
+
+    public void setHostingId(Long hostingId) {
+        this.hostingId = hostingId;
+    }
 }
diff --git a/src/main/resources/migration/V1_1__Initial_Setup.sql b/src/main/resources/migration/V1_1__Initial_Setup.sql
index 0ea3a43..54b934e 100644
--- a/src/main/resources/migration/V1_1__Initial_Setup.sql
+++ b/src/main/resources/migration/V1_1__Initial_Setup.sql
@@ -545,6 +545,21 @@
 CREATE TABLE IF NOT EXISTS `project_role_department` (
     `id` bigint(20) NOT NULL AUTO_INCREMENT,
     `project_role_id` bigint(20) NOT NULL,
+    `department_id` bigint(20) NOT NULL,
+    `register_id` bigint(20) NOT NULL,
+    `register_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+    `modify_id` bigint(20) NOT NULL,
+    `modify_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+    PRIMARY KEY (`id`),
+    KEY `projectRoleIdAndDepartmentIdIndex` (`project_role_id`,`department_id`),
+    KEY `departmentIdIndex` (`department_id`),
+    KEY `projectRoleIdIndex` (`project_role_id`)
+    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+-- �뀒�씠釉� owl_en_1.5.project_role_department 援ъ“ �궡蹂대궡湲�
+CREATE TABLE IF NOT EXISTS `project_role_department` (
+    `id` bigint(20) NOT NULL AUTO_INCREMENT,
+    `project_role_id` bigint(20) NOT NULL,
     `department_id` bigint(20) NULL,
     `register_id` bigint(20) NOT NULL,
     `register_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
diff --git a/src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml b/src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml
new file mode 100644
index 0000000..20643a0
--- /dev/null
+++ b/src/main/resources/mybatis/query-template/projectRoleDepartment-template.xml
@@ -0,0 +1,43 @@
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="kr.wisestone.owl.mapper.ProjectRoleUserMapper">
+
+    <!--    �봽濡쒖젥�듃 �뿭�븷怨� �궗�슜�옄瑜� �뿰寃고븳�떎. -->
+    <insert id="insertProjectRoleDepartment" keyColumn="id" keyProperty="id" useGeneratedKeys="true" parameterType="java.util.HashMap">
+        INSERT INTO project_role_department(project_role_id, department_id, register_id, modify_id, register_date, modify_date)
+        VALUES
+        <foreach collection="list" item="map" index="index" separator="," open="" close="">
+            (#{map.projectRoleId}, #{map.departmentId}, #{map.registerId}, #{map.registerId}, NOW(), NOW())
+        </foreach>
+    </insert>
+
+    <!--    �봽濡쒖젥�듃 �뿭�븷怨� �궗�슜�옄 �뿰寃� �젙蹂대�� �궘�젣�븳�떎.  -->
+    <delete id="deleteProjectRoleDepartment" parameterType="java.util.HashMap">
+        DELETE FROM project_role_department WHERE project_role_id = #{projectRoleId} AND department_id = #{departmentId}
+    </delete>
+
+    <!--    �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 遺��꽌瑜� 議고쉶�븳�떎.   -->
+    <select id="findProjectRoleDepartment" resultType="java.util.HashMap" parameterType="java.util.HashMap">
+        SELECT
+        DISTINCT d.id as id,
+        d.department_name as name
+        FROM
+        project p
+        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}
+    </select>
+
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/webapp/scripts/app/project/projectAdd.controller.js b/src/main/webapp/scripts/app/project/projectAdd.controller.js
index a729af7..25711d7 100644
--- a/src/main/webapp/scripts/app/project/projectAdd.controller.js
+++ b/src/main/webapp/scripts/app/project/projectAdd.controller.js
@@ -93,12 +93,13 @@
                             });
                             return managerIds;
                         })(),
-                        userIds : (function () {
-                            var userIds = [];
+                        //遺��꽌id 異붽� �븘�슂
+                        departmentIds : (function () {
+                            var departmentIds = [];
                             angular.forEach($scope.vm.form.users, function (user) {
-                                userIds.push(user.id);
+                                departmentIds.push(user.id);
                             });
-                            return userIds;
+                            return departmentIds;
                         })()
                     };
 

--
Gitblit v1.8.0