From f90e288fdd0e4d4a58b72a445fcbac135351d458 Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 월, 06 12월 2021 08:45:27 +0900
Subject: [PATCH] - API 중복 처리 오류 수정

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |  154 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 97 insertions(+), 57 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 eb5524e..8383256 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -1,6 +1,7 @@
 package kr.wisestone.owl.service.impl;
 
 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.config.CommonConfiguration;
 import kr.wisestone.owl.constant.Constants;
@@ -239,9 +240,13 @@
             customFieldApiOverlapForm.setUserId(user.getId());
             customFieldApiOverlapForm.setIssueTypeId(issueForm.getIssueTypeId());
 
-            IssueVo issueVo = this.findIssue(issueApiForm, user.getId());
-            if (issueVo != null) {
-                issueForm.setParentIssueId(issueVo.getId());
+            List<IssueVo> issueVos = this.findIssue(issueApiForm, 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));
             }
 
             issueForm.setIsApi(Issue.IS_API_YES);
@@ -281,26 +286,43 @@
 
 
     // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋
-    private IssueVo findIssue(IssueApiForm issueApiForm, Long userId) {
-        IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
+    private List<IssueVo> findIssue(IssueApiForm issueApiForm, Long userId) {
 
         List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(userId, issueApiForm.getIssueTypeId());
+
+        List<IssueVo> resultIssueVos = new ArrayList<>();
         if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) {
             for (CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) {
                 for (IssueCustomFieldValueForm issueCustomFieldValue : issueApiForm.getIssueCustomFieldValues()) {
+                    IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
                     if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValue.getCustomFieldId())) {
-                        issueCustomFieldValueCondition.addUseValues(issueCustomFieldValue.getUseValue());
+                        issueCustomFieldValueCondition.setUseValue(issueCustomFieldValue.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);
+                                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;
+                        }
                     }
                 }
             }
-            List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
-            if (results != null && results.size() > 0) {
-                IssueVo issueVo = new IssueVo();
-                ConvertUtil.convertMapToObject(results.get(0), issueVo);
-                return issueVo;
-            }
         }
-        return null;
+        return resultIssueVos;
     }
 
     //  �씠�뒋瑜� �깮�꽦�븳�떎.
@@ -1038,38 +1060,21 @@
     // �븯�쐞 �씠�뒋 �젙蹂대�� �뀑�똿�븳�떎
     private void setDownIssues(Issue issue, IssueVo issueVo) {
         List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId());
-        /*if(issueVo != null && downIssues.size()>0){
-            for(Issue downIssue : downIssues){
-                IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
-                IssueDownVo issueDownVo = ConvertUtil.copyProperties(downIssueVo, IssueDownVo.class);
-                issueDownVo.setIssueDown(downIssueVo);
-                issueDownVo.setTitle(downIssue.getTitle());
-                issueDownVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class));
-                issueDownVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class));
-                issueDownVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class));
-                this.setRegister(downIssue, downIssueVo); // �벑濡앹옄
-                this.setIssueDepartment(downIssue, downIssueVo);  //  �떞�떦遺��꽌 �젙蹂� �뀑�똿
-                this.setIssueCustomFields(downIssue, downIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
-                issueVo.addIssueDownVo(issueDownVo);
-            }
-        }*/
-
-        List<IssueVo> downIssueVos = ConvertUtil.convertObjectsToClasses(downIssues, IssueVo.class);
-        List<IssueVo> resultList = new ArrayList<>();
-        if(downIssueVos != null && downIssueVos.size()>0){
-            for(IssueVo downIssueVo : downIssueVos){
+            if(downIssues != null && downIssues.size()>0){
+                List<IssueVo> resultList = new ArrayList<>();
                 for(Issue downIssue : downIssues){
-                    downIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class));
-                    downIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class));
-                    downIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class));
-                    this.setRegister(downIssue, downIssueVo); // �벑濡앹옄
-                    this.setIssueDepartment(downIssue, downIssueVo);  //  �떞�떦遺��꽌 �젙蹂� �뀑�똿
-                    this.setIssueCustomFields(downIssue, downIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
+                    IssueVo newIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
+                    newIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class));
+                    newIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class));
+                    newIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class));
+                    this.setRegister(downIssue, newIssueVo); // �벑濡앹옄
+                    this.setIssueDepartment(downIssue, newIssueVo);  //  �떞�떦遺��꽌 �젙蹂� �뀑�똿
+                    this.setIssueCustomFields(downIssue, newIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
+
+                    resultList.add(newIssueVo);
                 }
-                resultList.add(downIssueVo);
+                issueVo.setIssueDownVos(resultList);
             }
-            issueVo.setIssueDownVos(resultList);
-        }
     }
 
     //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
@@ -1232,7 +1237,7 @@
     }
 
     //  �씠�뒋(�씠�뒋 �쑀�삎)�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� �뀑�똿�븳�떎.
-    private void setIssueCustomFields(Issue issue, IssueVo issueVo) {
+    private IssueVo setIssueCustomFields(Issue issue, IssueVo issueVo) {
 
         //  �빐�떦 �봽濡쒖젥�듃�쓽 �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� 媛��졇�삩�떎.
         IssueTypeCustomFieldCondition issueTypeCustomFieldCondition = new IssueTypeCustomFieldCondition();
@@ -1244,6 +1249,8 @@
         //  �씠�뒋�뿉�꽌 �궗�슜�맂 �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪쓣 媛��졇�삩�떎.
         List<IssueCustomFieldValueVo> issueCustomFieldValueVos = this.issueCustomFieldValueService.findByIssueId(issue.getId());
         issueVo.setIssueCustomFieldValueVos(issueCustomFieldValueVos);
+
+        return issueVo;
     }
 
     //  �씠�뒋�뿉 �벑濡앸맂 �뙎湲� �젙蹂대�� �뀑�똿�븳�떎.
@@ -1261,19 +1268,48 @@
     @Transactional
     public List<IssueVo> findIssue(IssueApiForm issueApiform) {
         List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues();
+        List<IssueVo> resultIssueVos = new ArrayList<>();
+
         IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
-        if (issueCustomFieldValueForms != null && issueCustomFieldValueForms.size() > 0) {
+        if (issueCustomFieldValueForms.size() > 0) {
             for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) {
-                issueCustomFieldValueCondition.addUseValues(issueCustomFieldValueForm.getUseValue());
+//                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);
+
+                        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;
+                }
             }
         }
-        List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
-        List<IssueVo> issueVos = Lists.newArrayList();
-        if (results != null && results.size() > 0) {
-            issueVos.add(ConvertUtil.convertMapToClass(results.get(0), IssueVo.class));
-        }
 
-        return issueVos;
+        return resultIssueVos;
+    }
+
+    // 由ъ뒪�듃�뿉�꽌 �빐�떦 �븘�씠�뵒瑜� 媛�吏�怨� �엳�뒗 �씠�뒋 寃��깋
+    private IssueVo findIssueVo(List<IssueVo> list, Long id) {
+        for (IssueVo issueVo : list) {
+            if (id.equals(issueVo.getId())) {
+                return issueVo;
+            }
+        }
+        return null;
     }
 
 
@@ -1285,13 +1321,17 @@
         IssueForm issueForm = this.convertToIssueForm(issueApiForm, user);
 
         List<IssueVo> issueVos = this.findIssue(issueApiForm);
-        List<Issue> issue = Lists.newArrayList();
-        for (IssueVo issueVo : issueVos) {
-            issueForm.setId(issueVo.getId());
-            issue.add(this.modifyIssueForApi(user, issueForm, files));
+        if (issueVos != null && issueVos.size() > 0) {
+            List<Issue> issue = Lists.newArrayList();
+            for (IssueVo issueVo : issueVos) {
+                issueForm.setId(issueVo.getId());
+                issue.add(this.modifyIssueForApi(user, issueForm, files));
+            }
+            return issue;
+        } else {
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.API_ISSUE_NOT_EXIST));
         }
-
-        return issue;
     }
 
     //  �씠�뒋瑜� �닔�젙�븳�떎.

--
Gitblit v1.8.0