From cf8b7c72a5da789d140b6746ac2fa1fb3d90cfda Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 토, 11 12월 2021 15:41:31 +0900
Subject: [PATCH] 프로젝트 이름 클릭시 이슈 리스트로 이동

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |  232 +++++++++++++++++++++++++++++++---------------------------
 1 files changed, 124 insertions(+), 108 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 2a11e37..dafd80e 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -3,11 +3,9 @@
 import com.google.common.collect.Lists;
 import com.sun.org.apache.bcel.internal.generic.NEW;
 import kr.wisestone.owl.common.ExcelConditionCheck;
+import kr.wisestone.owl.common.IssueCustomFieldValueFormComparator;
 import kr.wisestone.owl.config.CommonConfiguration;
-import kr.wisestone.owl.constant.Constants;
-import kr.wisestone.owl.constant.ElasticSearchConstants;
-import kr.wisestone.owl.constant.MsgConstants;
-import kr.wisestone.owl.constant.UsePartner;
+import kr.wisestone.owl.constant.*;
 import kr.wisestone.owl.data.CheckIssueData;
 import kr.wisestone.owl.domain.*;
 import kr.wisestone.owl.domain.enumType.CustomFieldType;
@@ -153,6 +151,9 @@
     private UserWorkspaceService userWorkspaceService;
 
     @Autowired
+    private UserLevelService userLevelService;
+
+    @Autowired
     private WorkflowDepartmentService workflowDepartmentService;
 
     @Autowired
@@ -256,18 +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();
-            if (size == 1) {
-                issueForm.setParentIssueId(issueVos.get(0).getId());
-            } else if (size > 1) {
-                throw new OwlRuntimeException(
-                        this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_ERROR));
+            // 以묐났�맂 �씠�뒋寃��깋
+            List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId());
+            int size = issues.size();
+            if (size > 0) {
+                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);
@@ -328,39 +335,37 @@
     }
 
     // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋
-    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<Issue> resultIssueVos = Lists.newArrayList();
+        String comma = ",";
 
-        List<IssueVo> resultIssueVos = new ArrayList<>();
+        if (issueCustomFieldValueForms.size() > 0) {
+            String concatUseValue = "";
+            int useIdx = 0;
 
-        if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) {
-            for (CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) {
-                for (IssueCustomFieldValueForm issueCustomFieldValue : issueApiForm.getIssueCustomFieldValues()) {
-                    IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
-                    issueCustomFieldValueCondition.setUseParentIssueId(true);
-                    if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValue.getCustomFieldId())) {
-                        issueCustomFieldValueCondition.setUseValue(issueCustomFieldValue.getUseValue());
+            IssueCustomFieldValueFormComparator comp = new IssueCustomFieldValueFormComparator();
+            Collections.sort(issueCustomFieldValueForms, comp);
 
-                        List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
-                        if (results != null && results.size() > 0) {
-                            List<IssueVo> findIssueVos = new ArrayList<>();
-                            Collections.copy(resultIssueVos, findIssueVos);
-                            resultIssueVos.clear();
-                            for (Map<String, Object> result : results) {
-                                IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class);
-                                if (findIssueVos.size() == 0) {
-                                    resultIssueVos.add(issueVo);
-                                } else {
-                                    IssueVo findIssueVo = findIssueVo(findIssueVos, issueVo.getId());
-                                    if (findIssueVo != null) {
-                                        resultIssueVos.add(findIssueVo);
-                                    }
-                                }
-                            }
-                        } else {
-                            resultIssueVos.clear();
-                            return resultIssueVos;
+            for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) {
+                for(CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) {
+                    if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValueForm.getCustomFieldId())) {
+                        if (useIdx > 0) {
+                            concatUseValue = concatUseValue.concat(comma);
                         }
+                        concatUseValue = concatUseValue.concat(issueCustomFieldValueForm.getUseValue());
+                        useIdx++;
                     }
+                }
+            }
+
+            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(this.getIssue(MapUtil.getLong(result, "id")));
                 }
             }
         }
@@ -750,10 +755,13 @@
         issueCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
         User user = this.webAppUtil.getLoginUserObject();
 
+
         List<Map<String, Object>> results = Lists.newArrayList();
         Long totalCount = 0L;
+        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
 
-        if (this.userWorkspaceService.checkWorkspaceManager(user)) {
+        if (this.userWorkspaceService.checkWorkspaceManager(user)
+                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) {
             results = this.issueMapper.find(issueCondition);
             totalCount = this.issueMapper.count(issueCondition);
         } else{
@@ -773,11 +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);
@@ -787,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
@@ -1264,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);
+        }
     }
 
     //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
@@ -1480,45 +1517,29 @@
     // �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪씠 媛숈� �씠�뒋 李얘린
     @Override
     @Transactional
-    public List<IssueVo> findIssue(IssueApiForm issueApiform) {
+    public List<Issue> findIssue(IssueApiForm issueApiform) {
 
         List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues();
-        List<IssueVo> resultIssueVos = new ArrayList<>();
+        List<Issue> resultIssueVos = Lists.newArrayList();
+        String comma = ",";
 
-        IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
-        issueCustomFieldValueCondition.setUseParentIssueId(false);
         if (issueCustomFieldValueForms.size() > 0) {
-            for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) {
-
-                CustomField customField = this.customFieldService.getCustomField(issueCustomFieldValueForm.getCustomFieldId());
-                CustomFieldType customFieldType = CustomFieldType.DATETIME;
-                if (customFieldType.equals(customField.getCustomFieldType())) {
-                    continue;
+            String concatUseValue = "";
+            for (int i = 0; i < issueCustomFieldValueForms.size(); i++) {
+                IssueCustomFieldValueForm issueCustomFieldValueForm = issueCustomFieldValueForms.get(i);
+                if (i > 0) {
+                    concatUseValue = concatUseValue.concat(comma);
                 }
-//                issueCustomFieldValueCondition.addUseValue(issueCustomFieldValueForm.getUseValue());
-                issueCustomFieldValueCondition.setUseValue(issueCustomFieldValueForm.getUseValue());
-                List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
-                if (results != null && results.size() > 0) {
-                    List<IssueVo> findIssueVos = new ArrayList<>();
-                    Collections.copy(resultIssueVos, findIssueVos);
-                    resultIssueVos.clear();
-                    for (Map<String, Object> result : results) {
-                        IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class);
+                concatUseValue = concatUseValue.concat(issueCustomFieldValueForm.getUseValue());
+            }
 
-                        issueVo.setParentIssueVo(this.getParentIssueVo(MapUtil.getLong(result, "parentIssueId")));
-
-                        if (findIssueVos.size() == 0) {
-                            resultIssueVos.add(issueVo);
-                        } else {
-                            IssueVo findIssueVo = findIssueVo(findIssueVos, issueVo.getId());
-                            if (findIssueVo != null) {
-                                resultIssueVos.add(findIssueVo);
-                            }
-                        }
-                    }
-                } else {
-                    resultIssueVos.clear();
-                    return resultIssueVos;
+            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(this.getIssue(MapUtil.getLong(result, "id")));
                 }
             }
         }
@@ -1537,15 +1558,6 @@
     }
 
 
-    // �븯�쐞 �씠�뒋媛� 紐⑤몢 醫낅즺 泥섎━ �릺�뿀�쓣 寃쎌슦 �긽�쐞�씠�뒋�룄 �셿猷� 泥섎━
-    private void setParentIssueComplete(Issue parentIssue) {
-        if (parentIssue != null) {
-            this.issueMapper.findNotCompleteByParentIssueId(parentIssue.getId());
-
-        }
-    }
-
-
     // �씠�뒋瑜� �닔�젙�븳�떎(api�슜)
     @Override
     @Transactional
@@ -1553,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());
 
                 // �옄�룞 醫낅즺 �긽�깭 �꽕�젙�씠 �릺�뼱 �엳吏� �븡�쑝硫� �삤瑜섎컻�깮
@@ -1570,16 +1581,18 @@
                 }
 
                 if (parentIssue != null) {
-                    List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(parentIssue.getId());
+                    IssueCondition issueCondition = new IssueCondition(issueVo.getId(), parentIssue.getId());
+                    List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(issueCondition);
                     // �븯�쐞 �씪媛먯씠 紐⑤몢 醫낅즺 �긽�깭�씪�븣 �긽�쐞 �씪媛먮룄 醫낅즺 泥섎━
                     if (results == null || results.size() == 0) {
                         parentIssue.setIssueStatus(issueType.getIssueStatus());
+                        this.issueRepository.saveAndFlush(parentIssue);
                     }
                 }
 
-                issue.add(modifyIssue);
+                issues.add(modifyIssue);
             }
-            return issue;
+            return issues;
         } else {
             throw new OwlRuntimeException(
                     this.messageAccessor.getMessage(MsgConstants.API_ISSUE_NOT_EXIST));
@@ -1660,6 +1673,7 @@
             this.issueHistoryService.detectIssueStatus(issue, issueForm, detectIssueChange, oldIssueStatus, issueStatus);
         }
 
+        // db�뿉 ���옣
         issue = this.saveIssue(issueForm, checkIssueData);
 
         //  �씠�뒋 �씠�젰 �벑濡�
@@ -1899,6 +1913,9 @@
         //  �씠�뒋 �떞�떦�옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. => �떞�떦遺��꽌濡� �닔�젙 - 泥댄겕
         //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ASSIGNEE, issueVo, issueUserVos);
         //  �떞�떦�옄媛� �뾾�쑝硫� 紐⑤뱺 �궗�슜�옄媛� �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎.
+
+        //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ALL_ISSUE_MANAGER, issueVo, null, null, user);
+        //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ALL_PROJECT_MANAGER, issueVo, null, null, user);
 
         return hasPermission;
     }
@@ -3477,7 +3494,6 @@
         }
         this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(湲곕줉�� �쁽�옱 �긽�꽭�럹�씠吏��뿉 �빐�빞�븯�땲源�)
         this.issueRepository.saveAndFlush(issue);
-
     }
 
     @Override

--
Gitblit v1.8.0