From 93198fd2adef50d63862e603476a1d4a28db37ab Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 화, 07 12월 2021 13:29:21 +0900
Subject: [PATCH] - api 이슈 추가시 두가지 이슈 자동 추가(중복된 이슈가 없을 경우) 하도록 수정

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java      |   34 ++++++++++++----
 src/main/java/kr/wisestone/owl/service/IssueService.java               |    3 +
 src/main/java/kr/wisestone/owl/web/controller/ApiController.java       |    9 +++-
 src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java              |   28 +++++++------
 src/main/java/kr/wisestone/owl/web/form/IssueForm.java                 |   27 +++++++++++--
 src/main/java/kr/wisestone/owl/web/form/CustomFieldApiOverlapForm.java |    6 +++
 6 files changed, 76 insertions(+), 31 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/IssueService.java b/src/main/java/kr/wisestone/owl/service/IssueService.java
index 4cafaee..b5e580f 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueService.java
+++ b/src/main/java/kr/wisestone/owl/service/IssueService.java
@@ -31,7 +31,8 @@
 
     Issue addRelIssue(User user, IssueForm issueForm, List<MultipartFile> multipartFiles);
 
-    Issue addApiIssue(IssueApiForm issueApiForm);
+    List<Issue> addApiIssue(IssueApiForm issueApiForm) throws CloneNotSupportedException;
+
     List<Issue> modifyIssue(IssueApiForm issueApiForm, List<MultipartFile> files);
 
     List<IssueVo> findIssue(IssueApiForm issueApiform);
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 bb52d12..ff02b9d 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -214,7 +214,6 @@
             }
         }
 
-
         // �봽濡쒖젥�듃 �엯�젰
         Project project = issueType.getProject();
         if (project == null){
@@ -240,7 +239,14 @@
             customFieldApiOverlapForm.setUserId(user.getId());
             customFieldApiOverlapForm.setIssueTypeId(issueForm.getIssueTypeId());
 
-            List<IssueVo> issueVos = this.findIssue(issueApiForm, user.getId());
+            // �긽�쐞�씪媛먯뿉 �궗�슜�븷 以묐났媛� �꽕�젙
+            List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(user.getId(), issueApiForm.getIssueTypeId());
+            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());
@@ -276,19 +282,29 @@
     //  API 瑜� �넻�빐 �씠�뒋 異붽�.
     @Override
     @Transactional
-    public Issue addApiIssue(IssueApiForm issueApiForm) {
+    public List<Issue> addApiIssue(IssueApiForm issueApiForm) throws CloneNotSupportedException {
         User user = convertToUser(issueApiForm.getToken());
         IssueForm issueForm = this.convertToIssueForm(issueApiForm, user);
 
-        return addIssue(user, issueForm, issueApiForm.getMultipartFiles());
+        List<Issue> issues = Lists.newArrayList();
+        if (issueForm.getParentIssueId() != null) {
+            issues.add(addIssue(user, issueForm, issueApiForm.getMultipartFiles()));
+        } else {
+            // �긽�쐞 �씠�뒋 異붽�
+            IssueForm parentIssueForm = issueForm.clone();
+            parentIssueForm.setUseIssueCustomFields(issueApiForm.getUseIssueCustomFieldIds());
+            Issue issue = addIssue(user, parentIssueForm, null);
+            issues.add(issue);
+            // �븯�쐞 �씠�뒋 異붽�
+            issueForm.setParentIssueId(issue.getId());
+            issues.add(addIssue(user, issueForm, issueApiForm.getMultipartFiles()));
+        }
+
+        return issues;
     }
 
-
-
     // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋
-    private List<IssueVo> findIssue(IssueApiForm issueApiForm, Long userId) {
-
-        List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(userId, issueApiForm.getIssueTypeId());
+    private List<IssueVo> findIssue(IssueApiForm issueApiForm, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) {
 
         List<IssueVo> resultIssueVos = new ArrayList<>();
         if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) {
diff --git a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java
index f056a56..7033cf2 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java
@@ -18,6 +18,7 @@
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Controller
@@ -42,7 +43,7 @@
     @RequestMapping(value = "api/issue", method = RequestMethod.POST)
     public
     @ResponseBody
-    Map<String, Object> addIssue(MultipartHttpServletRequest request) throws OwlRuntimeException {
+    Map<String, Object> addIssue(MultipartHttpServletRequest request) throws OwlRuntimeException, CloneNotSupportedException {
         Map<String, Object> resJsonData = new HashMap<>();
 
         IssueApiForm issueForm = IssueApiForm.make(ConvertUtil.convertJsonToMap(request.getParameter(Constants.REQ_KEY_CONTENT)), request.getFiles("file"));
@@ -50,9 +51,11 @@
             throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ERROR));
         }
         if (issueForm.getApiType() == IssueApiForm.ApiType.add) {
-            Issue issue = this.issueService.addApiIssue(issueForm);
+            List<Issue> issues = this.issueService.addApiIssue(issueForm);
             //  踰꾩쟾 �깮�꽦
-            this.issueService.addIssueVersion(issue.getId());
+            for (Issue issue : issues) {
+                this.issueService.addIssueVersion(issue.getId());
+            }
         } else {
             this.issueService.modifyIssue(issueForm, request.getFiles("file"));
         }
diff --git a/src/main/java/kr/wisestone/owl/web/form/CustomFieldApiOverlapForm.java b/src/main/java/kr/wisestone/owl/web/form/CustomFieldApiOverlapForm.java
index 95f3920..377c8a7 100644
--- a/src/main/java/kr/wisestone/owl/web/form/CustomFieldApiOverlapForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/CustomFieldApiOverlapForm.java
@@ -58,4 +58,10 @@
     public void setCustomFieldIds(List<Long> customFieldIds) {
         this.customFieldIds = customFieldIds;
     }
+
+    public void addCustomFieldId(Long customFieldId) {
+        if (this.customFieldIds != null) {
+            this.customFieldIds.add(customFieldId);
+        }
+    }
 }
diff --git a/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java b/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java
index 93d7e48..698375e 100644
--- a/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java
@@ -1,12 +1,8 @@
 package kr.wisestone.owl.web.form;
 
 import com.google.common.collect.Lists;
-import kr.wisestone.owl.constant.MsgConstants;
-import kr.wisestone.owl.domain.IssueCustomFieldValue;
-import kr.wisestone.owl.exception.OwlRuntimeException;
 import kr.wisestone.owl.util.ConvertUtil;
 import kr.wisestone.owl.util.MapUtil;
-import kr.wisestone.owl.vo.CustomFieldVo;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.*;
@@ -33,8 +29,8 @@
     private List<DepartmentForm> departments = Lists.newArrayList();
     private List<IssueCustomFieldValueForm> issueCustomFieldValues = Lists.newArrayList();
     private List<Map<String, Object>> CustomFieldValues = Lists.newArrayList();
-//    private List<Map<String, Object>> files = Lists.newArrayList();
     private List<MultipartFile> multipartFiles = Lists.newArrayList();
+    private List<Long> useIssueCustomFieldIds = Lists.newArrayList();       // �궗�쐞�씪媛먯슜 �궗�슜�옄�븘�뱶媛�
 
     public IssueApiForm() {
     }
@@ -203,14 +199,6 @@
         this.apiType = apiType;
     }
 
-    //    public List<Map<String, Object>> getFiles() {
-//        return files;
-//    }
-//
-//    public void setFiles(List<Map<String, Object>> files) {
-//        this.files = files;
-//    }
-
     public List<MultipartFile> getMultipartFiles() {
         return multipartFiles;
     }
@@ -226,4 +214,18 @@
     public void setIssueStatusId(Long issueStatusId) {
         this.issueStatusId = issueStatusId;
     }
+
+    public List<Long> getUseIssueCustomFieldIds() {
+        return useIssueCustomFieldIds;
+    }
+
+    public void setUseIssueCustomFieldIds(List<Long> useIssueCustomFieldIds) {
+        this.useIssueCustomFieldIds = useIssueCustomFieldIds;
+    }
+
+    public void addUseIssueCustomFieldId(Long customFieldId) {
+        if (this.useIssueCustomFieldIds != null) {
+            this.useIssueCustomFieldIds.add(customFieldId);
+        }
+    }
 }
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 482f023..f5f185d 100644
--- a/src/main/java/kr/wisestone/owl/web/form/IssueForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/IssueForm.java
@@ -1,20 +1,16 @@
 package kr.wisestone.owl.web.form;
 
 import com.google.common.collect.Lists;
-import kr.wisestone.owl.domain.enumType.IssueModifyType;
 import kr.wisestone.owl.util.ConvertUtil;
-import kr.wisestone.owl.util.DateUtil;
 import kr.wisestone.owl.util.MapUtil;
-import org.springframework.util.StringUtils;
 
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 /**
  * Created by wisestone on 2018-01-03.
  */
-public class IssueForm {
+public class IssueForm implements Cloneable {
 
 
     private Long id;
@@ -48,6 +44,11 @@
     private String isApi;
 
     public IssueForm() {
+    }
+
+    @Override
+    public IssueForm clone() throws CloneNotSupportedException {
+        return (IssueForm) super.clone();
     }
 
     public static IssueForm make(Map<String, Object> params) {
@@ -129,6 +130,22 @@
         return form;
     }
 
+    // 以묐났媛믪쑝濡� �궗�슜�븯�뒗 �궗�슜�옄�젙�쓽�븘�뱶留� �떎�떆 �꽕�젙
+    public void setUseIssueCustomFields(List<Long> useIssueCustomFields) {
+        List<Map<String, Object>> results = Lists.newArrayList();
+
+        for (Map<String, Object> customValue : this.getIssueCustomFields()) {
+            for (Long customFieldId : useIssueCustomFields) {
+//                Map<String, Object> customFieldVo = (Map<String, Object>)MapUtil.getObject(customValue, "customFieldVo");
+                if (customFieldId.equals(MapUtil.getLong(customValue, "customFieldId"))) {
+                    results.add(customValue);
+                }
+            }
+        }
+
+        this.setIssueCustomFields(results);
+    }
+
     public Long getId() {
         return id;
     }

--
Gitblit v1.8.0