From 716586b849dd2368fb59a54adeda2d65122f643b Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 금, 14 1월 2022 21:07:07 +0900
Subject: [PATCH] - 이슈 수정 시 파트너 정보 수정 오류 - 이슈 상세 페이지에서 연관/하위 이슈의 파트너 정보 보여주기

---
 src/main/java/kr/wisestone/owl/repository/IssueIspRepository.java          |    3 
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java          |   22 +++
 src/main/webapp/scripts/components/utils/autoComplete.controller.js        |    6 
 src/main/java/kr/wisestone/owl/repository/IssueHostingRepository.java      |    2 
 src/main/java/kr/wisestone/owl/vo/IssueRelationVo.java                     |   50 +++++++
 src/main/webapp/scripts/app/issue/issueDetail.controller.js                |   12 
 src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java       |  112 ++++++++++------
 src/main/webapp/custom_components/js-down/downColumnGenerator.directive.js |   27 +++
 src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java   |    4 
 src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java   |  106 +++++++++------
 src/main/webapp/custom_components/js-rel/relColumnGenerator.directive.js   |   27 +++
 11 files changed, 276 insertions(+), 95 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/repository/IssueHostingRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueHostingRepository.java
index 7a22ef4..0f84af0 100644
--- a/src/main/java/kr/wisestone/owl/repository/IssueHostingRepository.java
+++ b/src/main/java/kr/wisestone/owl/repository/IssueHostingRepository.java
@@ -8,5 +8,7 @@
 import java.util.Set;
 
 public interface IssueHostingRepository extends JpaRepository<IssueHosting, Long> {
+    void deleteByIssueId(@Param("issueId") Long issueId);
 
+    IssueHosting findByIssueId (@Param("issueId") Long issueId);
 }
diff --git a/src/main/java/kr/wisestone/owl/repository/IssueIspRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueIspRepository.java
index c2ceb72..8ed0d2b 100644
--- a/src/main/java/kr/wisestone/owl/repository/IssueIspRepository.java
+++ b/src/main/java/kr/wisestone/owl/repository/IssueIspRepository.java
@@ -1,5 +1,6 @@
 package kr.wisestone.owl.repository;
 
+import kr.wisestone.owl.domain.IssueHosting;
 import kr.wisestone.owl.domain.IssueIsp;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.repository.query.Param;
@@ -8,5 +9,7 @@
 import java.util.Set;
 
 public interface IssueIspRepository extends JpaRepository<IssueIsp, Long> {
+    void deleteByIssueId(@Param("issueId") Long issueId);
 
+    IssueIsp findByIssueId (@Param("issueId") Long issueId);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
index 1e2a2b3..8753a2e 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java
@@ -601,7 +601,7 @@
     public void detectIssueIsp(IssueHistoryType type, Map<String, Object> param, IspField ispField, IssueIsp issueIsp, StringBuilder description) {
         Long id = 0L;
         if (param != null) {
-            id = MapUtil.getLong(param, "companyId");
+            id = MapUtil.getLong(param, "ispId");
         } else if(ispField != null) {
             id = ispField.getId();
         }
@@ -642,7 +642,7 @@
     public void detectIssueHosting(IssueHistoryType type, Map<String, Object> param, HostingField hostingField, IssueHosting issueHosting, StringBuilder description) {
         Long id = 0L;
         if (param != null) {
-            id = MapUtil.getLong(param, "companyId");
+            id = MapUtil.getLong(param, "hostingId");
         }else if(hostingField != null) {
             id = hostingField.getId();
         }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
index 0817429..5e55c83 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHostingServiceImpl.java
@@ -11,6 +11,7 @@
 import kr.wisestone.owl.vo.IssueHostingVo;
 import kr.wisestone.owl.web.condition.IssueCondition;
 import kr.wisestone.owl.web.form.HostingFieldForm;
+import kr.wisestone.owl.web.form.IspFieldForm;
 import kr.wisestone.owl.web.form.IssueForm;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,6 +34,9 @@
     private HostingFieldService hostingFieldService;
 
     @Autowired
+    private IssueService issueService;
+
+    @Autowired
     private IssueHistoryService issueHistoryService;
 
     @Autowired
@@ -43,52 +47,70 @@
         return this.issueHostingRepository;
     }
 
+    /**
+     * �씠�뒋 �샇�뒪�똿 留뚮뱾湲�
+     * @param hostingFieldForm HostingFieldForm
+     * @param issue �씠�뒋
+     * @return IssueHosting
+     */
+    private IssueHosting CreateIssueHosting(HostingFieldForm hostingFieldForm, Issue issue) {
+        IssueHosting issueHosting = ConvertUtil.copyProperties(hostingFieldForm, IssueHosting.class);
+        issueHosting.setIssue(issue);
+        HostingField hostingField = this.hostingFieldService.getHosting(hostingFieldForm.getId());
+        if (hostingField != null) {
+            issueHosting.setHostingField(hostingField);
+        }
+        return issueHosting;
+    }
+
+
+    /**
+     *  �씠�뒋 �샇�뒪�똿 留뚮뱾湲�
+     * @param hostingFieldMap Map<String, Object> hostingFieldMap
+     * @param issue �씠�뒋
+     * @return IssueHosting
+     */
+    private IssueHosting CreateIssueHosting(Map<String, Object> hostingFieldMap, Issue issue) {
+        HostingFieldForm hostingFieldForm = ConvertUtil.convertMapToClass(hostingFieldMap, HostingFieldForm.class);
+        hostingFieldForm.setId(MapUtil.getLong(hostingFieldMap, "hostingId"));
+        return CreateIssueHosting(hostingFieldForm, issue);
+    }
+
     //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �뾽泥� 媛믪쓣 �뾽�뜲�씠�듃�븳�떎.
     @Override
     @Transactional
     public void modifyIssueHostingField(Issue issue, IssueForm issueForm) {
         if (issue != null) {
             List<Map<String, Object>> issueHostingFields = issueForm.getIssueHostingFields();
+            Map<String, Object> param = issueHostingFields.get(0);
+
             if (issueHostingFields != null && issueHostingFields.size() > 0) {
-                Map<String, Object> param = issueHostingFields.get(0);
+                IssueHosting issueHosting = this.issueHostingRepository.findByIssueId(issue.getId());
 
-                if (param != null && param.get("hostingId") != null  && param.get("hostingId") != "") {
-                    HostingField hostingField = this.hostingFieldService.getHosting(MapUtil.getLong(param, "hostingId"));
-
-                    Set<IssueHosting> issueHostings = issue.getIssueHostingFields();
-                    IssueHosting issueHosting = new IssueHosting();
-
-                    if (issueHostings != null && issueHostings.size() >0){//�닔�젙 �븷 寃쎌슦
-                        issueHosting = issueHostings.iterator().next();
-                        // 蹂�寃� �씠�젰
-                        StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, param, null, issueHosting, sb);
-                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-
-                        issueHosting.setHostingField(hostingField);
-                        issueHosting.setName(MapUtil.getString(param, "name"));
-                        issueHosting.setEmail(MapUtil.getString(param, "email"));
-                        issueHosting.setCode(MapUtil.getString(param, "code"));
-                        issueHosting.setUrl(MapUtil.getString(param, "url"));
-                        issueHosting.setManager(MapUtil.getString(param, "manager"));
-                        issueHosting.setTel(MapUtil.getString(param, "tel"));
-                        issueHosting.setMemo(MapUtil.getString(param, "memo"));
-                    }else{//異붽� �븷 寃쎌슦
-                        issueHosting = ConvertUtil.convertMapToClass(param, IssueHosting.class);
-                        issueHosting.setIssue(issue);
-                        if (hostingField != null) {
-                            issueHosting.setHostingField(hostingField);
-                        }
-                        // 異붽� �씠�젰
-                        StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, null, issueHosting, sb);
-                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-                    }
+                if (issueHosting != null) { //�닔�젙 �떆
+                    issueHosting.setName(MapUtil.getString(param, "name"));
+                    issueHosting.setEmail(MapUtil.getString(param, "email"));
+                    issueHosting.setCode(MapUtil.getString(param, "code"));
+                    issueHosting.setUrl(MapUtil.getString(param, "url"));
+                    issueHosting.setManager(MapUtil.getString(param, "manager"));
+                    issueHosting.setTel(MapUtil.getString(param, "tel"));
+                    issueHosting.setMemo(MapUtil.getString(param, "memo"));
+                    // 蹂�寃� �씠�젰
+                    StringBuilder sb = new StringBuilder();
+                    issueHistoryService.detectIssueHosting(IssueHistoryType.MODIFY, param, null, issueHosting, sb);
+                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                     this.issueHostingRepository.saveAndFlush(issueHosting);
-                }else {
-                    this.issueHostingRepository.deleteById(MapUtil.getLong(param, "id"));
+
+                } else { //異붽� �떆
+                    IssueHosting newIssueHosting = CreateIssueHosting(param, issue);
+                    // 異붽� �씠�젰
+                    StringBuilder sb = new StringBuilder();
+                    issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, null, newIssueHosting, sb);
+                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                    this.issueHostingRepository.saveAndFlush(newIssueHosting);
                 }
             } else if(issueForm.getHostingName() != null && !issueForm.getHostingName().equals("")) {
+                // issueHosting �븘�뱶 �뤌 留뚮뱾湲�
                 HostingFieldForm hostingFieldForm = new HostingFieldForm();
                 hostingFieldForm.setName(issueForm.getHostingName());
                 hostingFieldForm.setCode(issueForm.getHostingCode());
@@ -98,17 +120,17 @@
                 hostingFieldForm.setTel(issueForm.getHostingTel());
                 hostingFieldForm.setMemo(issueForm.getHostingMemo());
 
-                HostingField hostingField = this.hostingFieldService.add(hostingFieldForm);
-                IssueHosting issueHosting = ConvertUtil.copyProperties(hostingFieldForm, IssueHosting.class);
-                issueHosting.setIssue(issue);
-                if (hostingField != null) {
-                    issueHosting.setHostingField(hostingField);
+                IssueHosting newIssueHosting = CreateIssueHosting(hostingFieldForm, issue);
+                HostingField hostingField = new HostingField();
+                if (newIssueHosting.getHostingField() == null) { // �궗�슜�옄媛� 吏곸젒 �엯�젰�떆�뿉 �샇�뒪�똿 紐⑸줉�뿉 異붽�
+                    hostingField = this.hostingFieldService.add(hostingFieldForm);
+                    newIssueHosting.setHostingField(hostingField);
                 }
                 // 異붽� �씠�젰
                 StringBuilder sb = new StringBuilder();
-                issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, null, hostingField, issueHosting, sb);
+                issueHistoryService.detectIssueHosting(IssueHistoryType.ADD, param, null, newIssueHosting, sb);
                 issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-                this.issueHostingRepository.saveAndFlush(issueHosting);
+                this.issueHostingRepository.saveAndFlush(newIssueHosting);
             }
         }
     }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
index c5203db..a87e858 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueIspServiceImpl.java
@@ -31,6 +31,9 @@
     private IspFieldService ispFieldService;
 
     @Autowired
+    private IssueService issueService;
+
+    @Autowired
     private IssueHistoryService issueHistoryService;
 
     @Autowired
@@ -41,51 +44,75 @@
         return this.issueIspRepository;
     }
 
+
+    /**
+     * �씠�뒋 ISP 留뚮뱾湲�
+     * @param ispFieldForm IspFieldForm
+     * @param issue �씠�뒋
+     * @return IssueIsp
+     */
+    private IssueIsp CreateIssueIsp(IspFieldForm ispFieldForm, Issue issue) {
+        IssueIsp issueIsp = ConvertUtil.copyProperties(ispFieldForm, IssueIsp.class);
+        issueIsp.setIssue(issue);
+        IspField ispField = this.ispFieldService.getIsp(ispFieldForm.getId());
+        if (ispField != null) {
+            issueIsp.setIspField(ispField);
+        }
+
+        return issueIsp;
+    }
+
+
+    /**
+     *  �씠�뒋 ISP 留뚮뱾湲�
+     * @param ispFieldMap Map<String, Object> IspFieldForm map
+     * @param issue �씠�뒋
+     * @return ISPIssue
+     */
+    private IssueIsp CreateIssueIsp(Map<String, Object> ispFieldMap, Issue issue) {
+        IspFieldForm ispFieldForm = ConvertUtil.convertMapToClass(ispFieldMap, IspFieldForm.class);
+        ispFieldForm.setId(MapUtil.getLong(ispFieldMap, "ispId"));
+        return CreateIssueIsp(ispFieldForm, issue);
+    }
+
+
     //  �씠�뒋�뿉�꽌 �궗�슜�릺�뒗 �뾽泥� 媛믪쓣 �뾽�뜲�씠�듃�븳�떎.
     @Override
     @Transactional
     public void modifyIssueIspField(Issue issue, IssueForm issueForm) {
         if (issue != null) {
             List<Map<String, Object>> issueIspFields = issueForm.getIssueIspFields();
+            Map<String, Object> param = issueIspFields.get(0);
+
             if (issueIspFields != null && issueIspFields.size() > 0) {
-                Map<String, Object> param = issueIspFields.get(0);
+                IssueIsp issueIsp = this.issueIspRepository.findByIssueId(issue.getId());
 
-                if (param != null && param.get("ispId") != null  && param.get("ispId") != "") {
-                    IspField ispField = this.ispFieldService.getIsp(MapUtil.getLong(param, "ispId"));
-
-                    Set<IssueIsp> issueIsps = issue.getIssueIspFields();
-                    IssueIsp issueIsp = new IssueIsp();
-                    if (issueIsps != null && issueIsps.size() > 0) {//�닔�젙 �븷 寃쎌슦
-                        issueIsp = issueIsps.iterator().next();
-                        // 蹂�寃� �씠�젰
-                        StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, null, issueIsp, sb);
-                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-
-                        issueIsp.setIspField(ispField);
-                        issueIsp.setName(MapUtil.getString(param, "name"));
-                        issueIsp.setEmail(MapUtil.getString(param, "email"));
-                        issueIsp.setCode(MapUtil.getString(param, "code"));
-                        issueIsp.setUrl(MapUtil.getString(param, "url"));
-                        issueIsp.setManager(MapUtil.getString(param, "manager"));
-                        issueIsp.setTel(MapUtil.getString(param, "tel"));
-                        issueIsp.setMemo(MapUtil.getString(param, "memo"));
-                    } else  {//異붽� �븷 寃쎌슦
-                        issueIsp = ConvertUtil.convertMapToClass(param, IssueIsp.class);
-                        issueIsp.setIssue(issue);
-                        if (ispField != null) {
-                            issueIsp.setIspField(ispField);
-                        }
-                        // 異붽� �씠�젰
-                        StringBuilder sb = new StringBuilder();
-                        issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, null, issueIsp, sb);
-                        issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-                    }
+                if (issueIsp != null) {//�닔�젙 �떆
+                    issueIsp.setName(MapUtil.getString(param, "name"));
+                    issueIsp.setEmail(MapUtil.getString(param, "email"));
+                    issueIsp.setCode(MapUtil.getString(param, "code"));
+                    issueIsp.setUrl(MapUtil.getString(param, "url"));
+                    issueIsp.setManager(MapUtil.getString(param, "manager"));
+                    issueIsp.setTel(MapUtil.getString(param, "tel"));
+                    issueIsp.setMemo(MapUtil.getString(param, "memo"));
+                    // 蹂�寃� �씠�젰
+                    StringBuilder sb = new StringBuilder();
+                    issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, null, issueIsp, sb);
+                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
                     this.issueIspRepository.saveAndFlush(issueIsp);
-                }else {
-                    this.issueIspRepository.deleteById(MapUtil.getLong(param, "id"));
+
+                } else { //異붽� �떆
+                    IssueIsp newIssueIsp = CreateIssueIsp(param, issue);
+                    // 異붽� �씠�젰
+                    StringBuilder sb = new StringBuilder();
+                    issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, null, newIssueIsp, sb);
+                    issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
+                    this.issueIspRepository.saveAndFlush(newIssueIsp);
                 }
-            } else if(issueForm.getIspName() != null && !issueForm.getIspName().equals("")) {
+            }
+            // �궗�슜�옄媛� 吏곸젒 �엯�젰�떆
+            else if(issueForm.getIspName() != null && !issueForm.getIspName().equals("")) {
+                // issueIsp �븘�뱶 �뤌 留뚮뱾湲�
                 IspFieldForm ispFieldForm = new IspFieldForm();
                 ispFieldForm.setName(issueForm.getIspName());
                 ispFieldForm.setCode(issueForm.getIspCode());
@@ -95,17 +122,18 @@
                 ispFieldForm.setTel(issueForm.getIspTel());
                 ispFieldForm.setMemo(issueForm.getIspMemo());
 
-                IspField ispField = this.ispFieldService.add(ispFieldForm);
-                IssueIsp issueIsp = ConvertUtil.copyProperties(ispFieldForm, IssueIsp.class);
-                issueIsp.setIssue(issue);
-                if (ispField != null) {
-                    issueIsp.setIspField(ispField);
+                IssueIsp newIssueIsp = CreateIssueIsp(ispFieldForm, issue);
+                IspField ispField = new IspField();
+                // �궗�슜�옄媛� 吏곸젒 �엯�젰�떆�뿉 ISP 紐⑸줉�뿉 異붽�
+                if (newIssueIsp.getIspField() == null) {
+                    ispField = this.ispFieldService.add(ispFieldForm);
+                    newIssueIsp.setIspField(ispField);
                 }
                 // 異붽� �씠�젰
                 StringBuilder sb = new StringBuilder();
-                issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, null, ispField, issueIsp, sb);
+                issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, null, newIssueIsp, sb);
                 issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
-                this.issueIspRepository.saveAndFlush(issueIsp);
+                this.issueIspRepository.saveAndFlush(newIssueIsp);
             }
         }
     }
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 9ff385d..4ec7642 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -1592,6 +1592,9 @@
                 this.setIssueCustomFields(downIssue, downIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
                 this.setIssueHistory(downIssue, downIssueVo);   //  �씠�뒋 湲곕줉 �젙蹂� �뀑�똿
                 this.setIssueComments(downIssue, downIssueVo);  //  �뙎湲� �젙蹂� �뀑�똿
+                this.setIssueCompanyField(downIssue, downIssueVo);  //�뾽泥� �젙蹂� �꽭�똿
+                this.setIssueIspField(downIssue, downIssueVo);  //ISP �젙蹂� �꽭�똿
+                this.setIssueHostingField(downIssue, downIssueVo);  //HOSTING �젙蹂� �꽭�똿
 
                 downIssueVo.setModifyPermissionCheck(issueVo.getModifyPermissionCheck());
 
@@ -1708,6 +1711,25 @@
                 this.setRegister(relationIssue, relIssueVo); // �벑濡앹옄
                 this.setIssueDepartment(relationIssue, relIssueVo);  //  �떞�떦遺��꽌 �젙蹂� �뀑�똿
                 this.setIssueCustomFields(relationIssue, relIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
+
+                Set<IssueCompany> issueCompanies = relationIssue.getIssueCompanies();
+                Iterator<IssueCompany> itrCompany = issueCompanies.iterator();
+                while (itrCompany.hasNext()) {
+                    issueRelationVo.addIssueCompanyVo(ConvertUtil.copyProperties(itrCompany.next(), IssueCompanyVo.class));
+                }
+
+                Set<IssueIsp> issueIsps = relationIssue.getIssueIspFields();
+                Iterator<IssueIsp> itrIsp = issueIsps.iterator();
+                while (itrIsp.hasNext()) {
+                    issueRelationVo.addIssueIspVo(ConvertUtil.copyProperties(itrIsp.next(), IssueIspVo.class));
+                }
+
+                Set<IssueHosting> issueHostings = relationIssue.getIssueHostingFields();
+                Iterator<IssueHosting> itrHosting = issueHostings.iterator();
+                while (itrHosting.hasNext()) {
+                    issueRelationVo.addIssueHostingVo(ConvertUtil.copyProperties(itrHosting.next(), IssueHostingVo.class));
+                }
+
                 issueVo.addIssueRelationVo(issueRelationVo);
             }
         } else {
diff --git a/src/main/java/kr/wisestone/owl/vo/IssueRelationVo.java b/src/main/java/kr/wisestone/owl/vo/IssueRelationVo.java
index b7dff4d..69007f0 100644
--- a/src/main/java/kr/wisestone/owl/vo/IssueRelationVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/IssueRelationVo.java
@@ -3,6 +3,7 @@
 import com.google.common.collect.Lists;
 
 import java.util.List;
+import java.util.Set;
 
 public class IssueRelationVo extends BaseVo {
     private Long id;
@@ -18,6 +19,10 @@
     private IssueStatusVo issueStatusVo;    //  �씠�뒋 �긽�꽭�뿉�꽌 �궗�슜
     private List<DepartmentVo> departmentVos = Lists.newArrayList(); //�떞�떦遺��꽌
     private Boolean modifyPermissionCheck = Boolean.FALSE;
+
+    private List<IssueCompanyVo> issueCompanyVos;
+    private List<IssueIspVo> issueIspVos;
+    private List<IssueHostingVo> issueHostingVos;
 
     public IssueRelationVo() {}
 
@@ -104,4 +109,49 @@
     public void setIssueStatusVo(IssueStatusVo issueStatusVo) {
         this.issueStatusVo = issueStatusVo;
     }
+
+    public List<IssueCompanyVo> getIssueCompanyVos() {
+        return issueCompanyVos;
+    }
+
+    public void setIssueCompanyVos(List<IssueCompanyVo> issueCompanyVos) {
+        this.issueCompanyVos = issueCompanyVos;
+    }
+
+    public void addIssueCompanyVo(IssueCompanyVo issueCompanyVo) {
+        if (this.issueCompanyVos == null)
+            this.issueCompanyVos = Lists.newArrayList();
+
+        this.issueCompanyVos.add(issueCompanyVo);
+    }
+
+    public List<IssueIspVo> getIssueIspVos() {
+        return issueIspVos;
+    }
+
+    public void addIssueIspVo(IssueIspVo issueIspVo) {
+        if (this.issueIspVos == null)
+            this.issueIspVos = Lists.newArrayList();
+
+        this.issueIspVos.add(issueIspVo);
+    }
+
+    public void setIssueIspVos(List<IssueIspVo> issueIspVos) {
+        this.issueIspVos = issueIspVos;
+    }
+
+    public void addIssueHostingVo(IssueHostingVo issueHostingVo) {
+        if (this.issueHostingVos == null)
+            this.issueHostingVos = Lists.newArrayList();
+
+        this.issueHostingVos.add(issueHostingVo);
+    }
+
+    public List<IssueHostingVo> getIssueHostingVos() {
+        return issueHostingVos;
+    }
+
+    public void setIssueHostingVos(List<IssueHostingVo> issueHostingVos) {
+        this.issueHostingVos = issueHostingVos;
+    }
 }
diff --git a/src/main/webapp/custom_components/js-down/downColumnGenerator.directive.js b/src/main/webapp/custom_components/js-down/downColumnGenerator.directive.js
index 2d070fb..0984c32 100644
--- a/src/main/webapp/custom_components/js-down/downColumnGenerator.directive.js
+++ b/src/main/webapp/custom_components/js-down/downColumnGenerator.directive.js
@@ -124,6 +124,33 @@
                                             });
 
                                             break;
+
+                                        // �뾽泥�
+                                        case "DOWN_USE_COMPANY" :
+                                            if (scope.data.issueCompanyVos !== null && scope.data.issueCompanyVos[0] !== null) {
+                                                makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='cursor' translate='" + scope.data.issueCompanyVos[0].name + "'></span>";
+                                            }else {
+                                                makeTag += "<span></span>";
+                                            }
+                                            break;
+
+                                        // ISP
+                                        case "DOWN_USE_ISP" :
+                                            if (scope.data.issueIspVos !== null && scope.data.issueIspVos[0] !== null) {
+                                                makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='cursor' translate='" + scope.data.issueIspVos[0].name + "'></span>";
+                                            }else {
+                                                makeTag += "<span></span>";
+                                            }
+                                            break;
+
+                                        // �샇�뒪�똿
+                                        case "DOWN_USE_HOSTING" :
+                                            if (scope.data.issueHostingVos !== null && scope.data.issueHostingVos[0] !== null) {
+                                                makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='cursor' translate='" + scope.data.issueHostingVos[0].name + "'></span>";
+                                            }else {
+                                                makeTag += "<span></span>";
+                                            }
+                                            break;
                                     }
                                 }
 
diff --git a/src/main/webapp/custom_components/js-rel/relColumnGenerator.directive.js b/src/main/webapp/custom_components/js-rel/relColumnGenerator.directive.js
index c7e184f..eb901f1 100644
--- a/src/main/webapp/custom_components/js-rel/relColumnGenerator.directive.js
+++ b/src/main/webapp/custom_components/js-rel/relColumnGenerator.directive.js
@@ -125,6 +125,33 @@
                                             });
 
                                             break;
+
+                                        // �뾽泥�
+                                        case "REL_USE_COMPANY" :
+                                            if (scope.data.issueCompanyVos !== null && scope.data.issueCompanyVos[0] !== null) {
+                                                makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='cursor' translate='" + scope.data.issueCompanyVos[0].name + "'></span>";
+                                            }else {
+                                                makeTag += "<span></span>";
+                                            }
+                                            break;
+
+                                        // ISP
+                                        case "REL_USE_ISP" :
+                                            if (scope.data.issueIspVos !== null && scope.data.issueIspVos[0] !== null) {
+                                                makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='cursor' translate='" + scope.data.issueIspVos[0].name + "'></span>";
+                                            }else {
+                                                makeTag += "<span></span>";
+                                            }
+                                            break;
+
+                                        // �샇�뒪�똿
+                                        case "REL_USE_HOSTING" :
+                                            if (scope.data.issueHostingVos !== null && scope.data.issueHostingVos[0] !== null) {
+                                                makeTag += "<span ng-click=\"event.changeDetailView(data.id)\" class='cursor' translate='" + scope.data.issueHostingVos[0].name + "'></span>";
+                                            }else {
+                                                makeTag += "<span></span>";
+                                            }
+                                            break;
                                     }
                                 }
 
diff --git a/src/main/webapp/scripts/app/issue/issueDetail.controller.js b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
index 5802b90..b4c7884 100644
--- a/src/main/webapp/scripts/app/issue/issueDetail.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -412,7 +412,7 @@
                                 .setDType("renderer")
                                 .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
-                                .setDRenderer("USE_COMPANY"));
+                                .setDRenderer("REL_USE_COMPANY"));
                             break;
                         case "REL_ISP" :   //  ISP
                             $scope.vm.relTableConfigs.push($tableProvider.config()
@@ -421,7 +421,7 @@
                                 .setDType("renderer")
                                 .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
-                                .setDRenderer("USE_ISP"));
+                                .setDRenderer("REL_USE_ISP"));
                             break;
                         case "REL_HOSTING" :   //  HOSTING
                             $scope.vm.relTableConfigs.push($tableProvider.config()
@@ -430,7 +430,7 @@
                                 .setDType("renderer")
                                 .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
-                                .setDRenderer("USE_HOSTING"));
+                                .setDRenderer("REL_USE_HOSTING"));
                             break;
                     }
 
@@ -540,7 +540,7 @@
                                 .setDType("renderer")
                                 .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
-                                .setDRenderer("USE_COMPANY"));
+                                .setDRenderer("DOWN_USE_COMPANY"));
                             break;
                         case "DOWN_ISP" :   //  ISP
                             $scope.vm.downTableConfigs.push($tableProvider.config()
@@ -549,7 +549,7 @@
                                 .setDType("renderer")
                                 .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
-                                .setDRenderer("USE_ISP"));
+                                .setDRenderer("DOWN_USE_ISP"));
                             break;
                         case "DOWN_HOSTING" :   //  HOSTING
                             $scope.vm.downTableConfigs.push($tableProvider.config()
@@ -558,7 +558,7 @@
                                 .setDType("renderer")
                                 .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
-                                .setDRenderer("USE_HOSTING"));
+                                .setDRenderer("DOWN_USE_HOSTING"));
                             break;
                     }
 
diff --git a/src/main/webapp/scripts/components/utils/autoComplete.controller.js b/src/main/webapp/scripts/components/utils/autoComplete.controller.js
index e0c6fe9..0e0b256 100644
--- a/src/main/webapp/scripts/components/utils/autoComplete.controller.js
+++ b/src/main/webapp/scripts/components/utils/autoComplete.controller.js
@@ -428,7 +428,7 @@
                     var deferred = $q.defer();
 
                     IspField.find($resourceProvider.getContent(         //  �럹�씠吏� �뾽�뜲�씠�듃媛� �븘�슂�븳 而댄룷�꼳�듃 �씪寃쎌슦, page �뾽�뜲�씠�듃媛� �엳�쓣 寃쎌슦 湲곕낯 10媛쒖뵫 媛��졇�삤怨� �븘�땺寃쎌슦 25媛쒖뵫 媛��졇�삩�떎.
-                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
+                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 100 : 1000))).then(function (result) {
                         if (result.data.message.status === "success") {
                             if ($rootScope.isDefined(callBack)) {
                                 callBack(result);
@@ -500,7 +500,7 @@
                     }
 
                     CompanyFieldCategory.find($resourceProvider.getContent(         //  �럹�씠吏� �뾽�뜲�씠�듃媛� �븘�슂�븳 而댄룷�꼳�듃 �씪寃쎌슦, page �뾽�뜲�씠�듃媛� �엳�쓣 寃쎌슦 湲곕낯 10媛쒖뵫 媛��졇�삤怨� �븘�땺寃쎌슦 25媛쒖뵫 媛��졇�삩�떎.
-                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
+                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 100 : 1000))).then(function (result) {
                         if (result.data.message.status === "success") {
                             if ($rootScope.isDefined(callBack)) {
                                 callBack(result);
@@ -547,7 +547,7 @@
                     }
 
                     CompanyFieldCategory.find($resourceProvider.getContent(         //  �럹�씠吏� �뾽�뜲�씠�듃媛� �븘�슂�븳 而댄룷�꼳�듃 �씪寃쎌슦, page �뾽�뜲�씠�듃媛� �엳�쓣 寃쎌슦 湲곕낯 10媛쒖뵫 媛��졇�삤怨� �븘�땺寃쎌슦 25媛쒖뵫 媛��졇�삩�떎.
-                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
+                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 100 : 1000))).then(function (result) {
                         if (result.data.message.status === "success") {
                             if ($rootScope.isDefined(callBack)) {
                                 callBack(result);

--
Gitblit v1.8.0