From 719c18acfac48943d3a7e83d632234c1f8b3dab6 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 금, 10 12월 2021 18:43:44 +0900
Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |  177 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 106 insertions(+), 71 deletions(-)

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 7aadab6..dafd80e 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -257,15 +257,24 @@
 
             // �긽�쐞�씪媛먯뿉 �궗�슜�븷 以묐났媛� �꽕�젙
             List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(user.getId(), issueApiForm.getIssueTypeId());
+            if (customFieldApiOverlaps == null || customFieldApiOverlaps.size() == 0){
+                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_SETTING_NOT_EXIST));
+            }
             for(int i=0; i < customFieldApiOverlaps.size() ; i++ ){
                 CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i);
                 issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId());
             }
 
-            List<IssueVo> issueVos = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId());
-            int size = issueVos.size();
+            // 以묐났�맂 �씠�뒋寃��깋
+            List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId());
+            int size = issues.size();
             if (size > 0) {
-                issueForm.setParentIssueId(issueVos.get(0).getId());
+                Issue targetIssue = issues.get(0);
+                if (targetIssue.getParentIssue() != null) {
+                    issueForm.setParentIssueId(targetIssue.getParentIssue().getId());
+                } else {
+                    issueForm.setParentIssueId(targetIssue.getId());
+                }
             }
 
             issueForm.setIsApi(Issue.IS_API_YES);
@@ -326,9 +335,9 @@
     }
 
     // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋
-    private List<IssueVo> findIssue(IssueApiForm issueApiform, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) {
+    private List<Issue> findIssue(IssueApiForm issueApiform, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) {
         List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues();
-        List<IssueVo> resultIssueVos = Lists.newArrayList();
+        List<Issue> resultIssueVos = Lists.newArrayList();
         String comma = ",";
 
         if (issueCustomFieldValueForms.size() > 0) {
@@ -352,10 +361,11 @@
 
             IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
             issueCustomFieldValueCondition.setUseValue(concatUseValue);
+            issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId());
             List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
             if (results != null && results.size() > 0) {
                 for (Map<String, Object> result : results) {
-                    resultIssueVos.add(ConvertUtil.convertMapToClass(result, IssueVo.class));
+                    resultIssueVos.add(this.getIssue(MapUtil.getLong(result, "id")));
                 }
             }
         }
@@ -718,11 +728,11 @@
     public List<IssueVo> findIssue(Map<String, Object> resJsonData, IssueCondition issueCondition, Pageable pageable) {
 
         //  寃��깋 議곌굔�쓣 留뚮뱺�떎
-        /*if (!this.makeIssueSearchCondition(issueCondition, Lists.newArrayList("01", "02", "03"), pageable)) {
+        if (!this.makeIssueSearchCondition(issueCondition, Lists.newArrayList("01", "02", "03"), pageable)) {
             //  �씠�뒋 紐⑸줉�쓣 李얠� 紐삵븷 寃쎌슦 湲곕낯 �젙蹂대줈 由ы꽩�븳�떎.
             this.notFoundIssueList(resJsonData, pageable);
             return Lists.newArrayList();
-        }*/
+        }
 
         Set<String> issueIds = new HashSet<>(); //  �궗�슜�옄 �젙�쓽 �븘�뱶 寃��깋�떆 �굹�삤�뒗 �씠�뒋 �븘�씠�뵒 ���옣 而щ젆�뀡
 
@@ -771,12 +781,19 @@
 
         int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
         //  �씠�뒋 �븘�씠�뵒 珥덇린�솕
+
         issueCondition.setIsApi(issueCondition.getIsApi());
+
         issueCondition.setIssueIds(Lists.newArrayList());
         //  Map �뿉 �엳�뒗 �뜲�씠�꽣瑜� IssueVo �뜲�씠�꽣濡� 蹂��솚�븳�떎.
         this.setMapToIssueVo(results, issueVos, issueCondition, user);
 
+        if (issueCondition.getTree()) {
+            this.setDownIssues(issueVos);
+            this.setRelationIssues(issueVos);
+        }
         this.setCountDownIssues(results, issueVos);
+
         this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
 
         resJsonData.put(Constants.RES_KEY_CONTENTS, issueVos);
@@ -786,6 +803,27 @@
         //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
         log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_FIND));
         return issueVos;
+    }
+
+
+    // �븯�쐞 �씠�뒋 �꽭�똿
+    private void setDownIssues(List<IssueVo> issueVos) {
+        for(IssueVo issueVo : issueVos) {
+            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueVo.getId());
+            for(Issue downIssue : downIssues){
+                issueVo.addIssueDownVo(ConvertUtil.copyProperties(downIssue, IssueVo.class));
+            }
+        }
+    }
+
+    // �뿰愿� �씠�뒋 �꽭�똿
+    private void setRelationIssues(List<IssueVo> issueVos) {
+        for(IssueVo issueVo : issueVos) {
+            List<IssueVo> relationIssues = this.issueRelationService.findRelationIssue(issueVo.getId());
+            for(IssueVo relationIssue : relationIssues){
+                issueVo.addRelationIssueVo(ConvertUtil.copyProperties(relationIssue, IssueVo.class));
+            }
+        }
     }
 
     @Override
@@ -1038,7 +1076,6 @@
         condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
         projectCondition.setWorkspaceId(condition.getWorkspaceId());
 
-
         //  �봽濡쒖젥�듃 �궎媛� 議댁옱�븷 寃쎌슦 �봽濡쒖젥�듃 �궎�뿉 �빐�떦�븯�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븯怨� 寃��깋 議곌굔�뿉 �뀑�똿�븳�떎.
         if (!this.getProjectByProjectKey(condition.getProjectKey(), condition)) {
             return false;
@@ -1047,9 +1084,7 @@
         //  �봽濡쒖젥�듃瑜� �꽑�깮�븯吏� �븡�븯�쑝硫� �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 李얜뒗�떎.
         if (condition.getProjectIds().size() < 1) {
             List<Map<String, Object>> projects = null;
-            UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
-            if (this.userWorkspaceService.checkWorkspaceManager(user)
-                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) {
+            if (this.userWorkspaceService.checkWorkspaceManager(user)) {
                 projects = this.projectMapper.findByWorkspaceManagerAll(projectCondition);
             } else  {
                 projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
@@ -1266,26 +1301,26 @@
     // �븯�쐞 �씠�뒋 �젙蹂대�� �뀑�똿�븳�떎
     private void setDownIssues(Issue issue, IssueVo issueVo) {
         List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId());
-            if(downIssues != null && downIssues.size()>0){
-                List<IssueVo> resultList = new ArrayList<>();
-                for(Issue downIssue : downIssues){
-                    IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
-                    downIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class));
-                    downIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class));
-                    downIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class));
-                    //�씠�뒋 �긽�깭 異붽�
-                    IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(downIssue.getIssueStatus(), IssueStatusVo.class, "issueStatusType");
-                    issueStatusVo.setIssueStatusType(downIssue.getIssueStatus().getIssueStatusType().toString());
-                    downIssueVo.setIssueStatusVo(issueStatusVo);
+        if(downIssues != null && downIssues.size()>0){
+            List<IssueVo> resultList = new ArrayList<>();
+            for(Issue downIssue : downIssues){
+                IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
+                downIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class));
+                downIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class));
+                downIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class));
+                //�씠�뒋 �긽�깭 異붽�
+                IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(downIssue.getIssueStatus(), IssueStatusVo.class, "issueStatusType");
+                issueStatusVo.setIssueStatusType(downIssue.getIssueStatus().getIssueStatusType().toString());
+                downIssueVo.setIssueStatusVo(issueStatusVo);
 
-                    this.setRegister(downIssue, downIssueVo); // �벑濡앹옄
-                    this.setIssueDepartment(downIssue, downIssueVo);  //  �떞�떦遺��꽌 �젙蹂� �뀑�똿
-                    this.setIssueCustomFields(downIssue, downIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
+                this.setRegister(downIssue, downIssueVo); // �벑濡앹옄
+                this.setIssueDepartment(downIssue, downIssueVo);  //  �떞�떦遺��꽌 �젙蹂� �뀑�똿
+                this.setIssueCustomFields(downIssue, downIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
 
-                    resultList.add(downIssueVo);
-                }
-                issueVo.setIssueDownVos(resultList);
+                resultList.add(downIssueVo);
             }
+            issueVo.setIssueDownVos(resultList);
+        }
     }
 
     //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
@@ -1482,10 +1517,10 @@
     // �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪씠 媛숈� �씠�뒋 李얘린
     @Override
     @Transactional
-    public List<IssueVo> findIssue(IssueApiForm issueApiform) {
+    public List<Issue> findIssue(IssueApiForm issueApiform) {
 
         List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues();
-        List<IssueVo> resultIssueVos = Lists.newArrayList();
+        List<Issue> resultIssueVos = Lists.newArrayList();
         String comma = ",";
 
         if (issueCustomFieldValueForms.size() > 0) {
@@ -1500,10 +1535,11 @@
 
             IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
             issueCustomFieldValueCondition.setUseValue(concatUseValue);
+            issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId());
             List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
             if (results != null && results.size() > 0) {
                 for (Map<String, Object> result : results) {
-                    resultIssueVos.add(ConvertUtil.convertMapToClass(result, IssueVo.class));
+                    resultIssueVos.add(this.getIssue(MapUtil.getLong(result, "id")));
                 }
             }
         }
@@ -1529,11 +1565,10 @@
         User user = this.convertToUser(issueApiForm.getToken());
         IssueForm issueForm = this.convertToIssueForm(issueApiForm, user);
 
-        List<IssueVo> issueVos = this.findIssue(issueApiForm);
-        if (issueVos != null && issueVos.size() > 0) {
-            List<Issue> issue = Lists.newArrayList();
-            for (IssueVo issueVo : issueVos) {
-                IssueVo parentIssueVo = issueVo.getParentIssueVo();
+        List<Issue> issue = this.findIssue(issueApiForm);
+        if (issue != null && issue.size() > 0) {
+            List<Issue> issues = Lists.newArrayList();
+            for (Issue issueVo : issue) {
                 issueForm.setId(issueVo.getId());
 
                 // �옄�룞 醫낅즺 �긽�깭 �꽕�젙�씠 �릺�뼱 �엳吏� �븡�쑝硫� �삤瑜섎컻�깮
@@ -1555,9 +1590,9 @@
                     }
                 }
 
-                issue.add(modifyIssue);
+                issues.add(modifyIssue);
             }
-            return issue;
+            return issues;
         } else {
             throw new OwlRuntimeException(
                     this.messageAccessor.getMessage(MsgConstants.API_ISSUE_NOT_EXIST));
@@ -2163,38 +2198,39 @@
     }
 
     private Issue issueRemoves(Long issueId, User user) {
-        Issue issue = this.findOne(issueId);
-        if(issue != null){
-            //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
-            this.verifyIssueModifyPermission(issue, user);
-
-            //  �씠�뒋 泥⑤� �뙆�씪�쓣 �궘�젣�븳�떎.
-            if (issue.getAttachedFiles().size() > 0) {
-                List<Long> attachedFileIds = Lists.newArrayList();
-
-                for (AttachedFile attachedFile : issue.getAttachedFiles()) {
-                    attachedFileIds.add(attachedFile.getId());
-                }
-                //  泥⑤��뙆�씪 �궘�젣
-                this.attachedFileService.removeAttachedFiles(attachedFileIds);
-            }
-
-            // 吏��슱 �씠�뒋媛� �뿰愿��씠�뒋�씤吏� 泥댄겕 �썑 �뿰愿��씠�뒋 �뀒�씠釉붿뿉�꽌�룄 �궘�젣�븳�떎.
-            List<IssueRelation> issueRelationList = this.issueRelationRepository.findByRelationIssueId(issueId);
-            if (issueRelationList != null && issueRelationList.size() > 0) {
-                for(IssueRelation issueRelation : issueRelationList){
-                    StringBuilder sb = new StringBuilder();
-                    issueHistoryService.detectRelationIssue(IssueHistoryType.DELETE, issueRelation, sb);
-                    issueHistoryService.addIssueHistory(issueRelation.getIssue(), IssueHistoryType.MODIFY, sb.toString());
-                    this.issueRelationRepository.delete(issueRelation);
-                }
-            }
-
-            //  �씠�뒋 �깮�꽦, �궘�젣�떆 �삁�빟 �씠硫붿씪�뿉 �벑濡앺빐�넃�뒗�떎.
-            this.reservationIssueEmail(issue, EmailType.ISSUE_REMOVE);
-            //  �씠�뒋 �궘�젣
-            this.issueRepository.delete(issue);
+        Issue issue = null;
+        if(issueId != null){
+            issue = this.getIssue(issueId);
         }
+        //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
+        this.verifyIssueModifyPermission(issue, user);
+
+        //  �씠�뒋 泥⑤� �뙆�씪�쓣 �궘�젣�븳�떎.
+        if (issue.getAttachedFiles().size() > 0) {
+            List<Long> attachedFileIds = Lists.newArrayList();
+
+            for (AttachedFile attachedFile : issue.getAttachedFiles()) {
+                attachedFileIds.add(attachedFile.getId());
+            }
+            //  泥⑤��뙆�씪 �궘�젣
+            this.attachedFileService.removeAttachedFiles(attachedFileIds);
+        }
+
+        // 吏��슱 �씠�뒋媛� �뿰愿��씠�뒋�씤吏� 泥댄겕 �썑 �뿰愿��씠�뒋 �뀒�씠釉붿뿉�꽌�룄 �궘�젣�븳�떎.
+        List<IssueRelation> issueRelationList = this.issueRelationRepository.findByRelationIssueId(issueId);
+        if (issueRelationList != null && issueRelationList.size() > 0) {
+            for(IssueRelation issueRelation : issueRelationList){
+                StringBuilder sb = new StringBuilder();
+                issueHistoryService.detectRelationIssue(IssueHistoryType.DELETE, issueRelation, sb);
+                issueHistoryService.addIssueHistory(issueRelation.getIssue(), IssueHistoryType.MODIFY, sb.toString());
+                this.issueRelationRepository.delete(issueRelation);
+            }
+        }
+
+        //  �씠�뒋 �깮�꽦, �궘�젣�떆 �삁�빟 �씠硫붿씪�뿉 �벑濡앺빐�넃�뒗�떎.
+        this.reservationIssueEmail(issue, EmailType.ISSUE_REMOVE);
+        //  �씠�뒋 �궘�젣
+        this.issueRepository.delete(issue);
 
         return issue;
     }
@@ -3458,7 +3494,6 @@
         }
         this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(湲곕줉�� �쁽�옱 �긽�꽭�럹�씠吏��뿉 �빐�빞�븯�땲源�)
         this.issueRepository.saveAndFlush(issue);
-
     }
 
     @Override

--
Gitblit v1.8.0