From 3c54a4671cf489fd2c32e24685338bc3590e8d4b Mon Sep 17 00:00:00 2001
From: minhee <alsdldlfrl@gmail.com>
Date: 화, 15 3월 2022 17:34:41 +0900
Subject: [PATCH] - api로 이슈 추가 시 사용자정의필드 타입으로 체크 => 정규식표현검사로 체크로 변경

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |  126 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 110 insertions(+), 16 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 539c6f5..0c6dee8 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -48,6 +48,7 @@
 import java.io.IOException;
 import java.text.ParseException;
 import java.util.*;
+import java.util.regex.Pattern;
 
 import static kr.wisestone.owl.domain.enumType.CustomFieldType.*;
 
@@ -364,7 +365,7 @@
                     } else {
                         urls.add(useValue);
                     }
-                    condition.setUrl(urls);
+                    condition.setUrls(urls);
                     companyFields = this.companyFieldService.find(condition);
 
                     if(companyFields != null && companyFields.size() > 0) {
@@ -485,6 +486,38 @@
         return null;
     }
 
+    /**
+     * url �젙洹쒖떇 �몴�쁽
+     * @param url String
+     */
+    private boolean verifyUrl(String url) {
+        boolean urlChk = false;
+        if (!StringUtils.isEmpty(url)) {
+            String reg = "^((http|https)://)?(www.)?([a-zA-Z0-9]+)\\.[a-z]+([a-zA-z0-9.?#]+)?";
+            if(Pattern.matches(reg, url)) {
+                urlChk = true;
+            }
+        }
+        return urlChk;
+    }
+
+    /**
+     * ip �젙洹쒖떇 �몴�쁽
+     * @param ip String
+     * @return boolean
+     */
+    private boolean verifyIp(String ip) {
+        boolean ipChk = false;
+        if (!StringUtils.isEmpty(ip)) {
+            if (Pattern.matches("^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\" +
+                    ".(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$", ip)) {
+                ipChk = true;
+            }
+        }
+
+        return ipChk;
+    }
+
     // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋
     private List<Issue> findIssue(IssueApiForm issueApiform, IssueForm issueForm, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) {
         List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues();
@@ -493,6 +526,7 @@
 
         if (issueCustomFieldValueForms.size() > 0) {
             String concatUseValue = "";
+            String customFieldType = "";
             int useIdx = 0;
             int cntIp = 0;
             int cntSite = 0;
@@ -517,15 +551,34 @@
                             useValue = useValue.replace(" ","");
                         }
 
-                        if (customFieldApiOverlap.getCustomField().getCustomFieldType().equals(IP_ADDRESS)) {
+                        if (this.verifyIp(useValue)) {
                             long ip = ConvertUtil.ipToLong(useValue);
+                            customFieldType = IP_ADDRESS.toString();
                             if (cntIp == 0){
                                 condition.setIp(ip);
                             }
                             cntIp ++;
                         }
 
-                        if(customFieldApiOverlap.getCustomField().getCustomFieldType().equals(SITE)) {
+                        if (this.verifyUrl(useValue)) {
+                            customFieldType = SITE.toString();
+                            if (cntSite == 0) {
+                                condition.setUrl(useValue);
+                            }
+                            cntSite ++;
+                        }
+
+                        /*if (customFieldApiOverlap.getCustomField().getCustomFieldType().equals(IP_ADDRESS)) {
+                            long ip = ConvertUtil.ipToLong(useValue);
+                            customFieldType = IP_ADDRESS.toString();
+                            if (cntIp == 0){
+                                condition.setIp(ip);
+                            }
+                            cntIp ++;
+                        }*/
+
+                        /*if(customFieldApiOverlap.getCustomField().getCustomFieldType().equals(SITE)) {
+                            customFieldType = SITE.toString();
                             String[] urlArr = null;
                             List<String> urls = Lists.newArrayList();
                             if (useValue.contains(",")) {
@@ -538,7 +591,7 @@
                                 condition.setUrl(urls);
                             }
                             cntSite ++;
-                        }
+                        }*/
 
                         if (useIdx > 0) {
                             concatUseValue = concatUseValue.concat(comma);
@@ -550,7 +603,9 @@
             }
 
             // 異붽� �븷 url or ip�뿉 �룷�븿�릺�뼱�엳�뒗 �뙆�듃�꼫 李얘린
-            this.findPartner(condition, issueCompanyFields, issueIspFields, issueHostingFields);
+            if ((condition.getIp() > 0) || (condition.getUrl() != null && !condition.getUrl().equals(""))) {
+                this.findPartner(condition, issueCompanyFields, issueIspFields, issueHostingFields);
+            }
 
             issueForm.setIssueCompanyFields(issueCompanyFields);
             issueForm.setIssueIspFields(issueIspFields);
@@ -560,8 +615,29 @@
             issueCustomFieldValueCondition.setUseValue(concatUseValue);
             issueCustomFieldValueCondition.setUseValues(userValues);
             issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId());
+            issueCustomFieldValueCondition.setCustomFieldType(customFieldType);
 //            issueCustomFieldValueCondition.setIssueStatusType("CLOSE");
-            List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
+            List<Map<String, Object>> results = Lists.newArrayList();
+            if (customFieldType.equals(IP_ADDRESS.toString()) && issueForm.getIssueCompanyFields() != null && issueForm.getIssueCompanyFields().size() > 0) {
+                long ipValue = 0;
+                if (concatUseValue.contains(",")) {
+                    String[] arr = concatUseValue.split(",");
+                    for (String str : arr) {
+                        ipValue = ConvertUtil.ipToLong(str);
+                    }
+                } else {
+                    ipValue = ConvertUtil.ipToLong(concatUseValue);
+                }
+                issueCustomFieldValueCondition.setUseValue(String.valueOf(ipValue));
+            }
+
+            if (issueCustomFieldValueCondition.getCustomFieldType() != null && !issueCustomFieldValueCondition.getCustomFieldType().equals("")) {
+                //  �궗�슜�옄�젙�쓽�븘�뱶 ���엯�씠 IP_ADDRESS �삉�뒗 SITE �씪 寃쎌슦 
+                results = this.issueMapper.findByCustomFieldValueByCompany(issueCustomFieldValueCondition);
+            } else {
+                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")));
@@ -1672,11 +1748,14 @@
                     this.setAttachedFiles(issue, issueVo);  //  泥⑤� �뙆�씪 �젙蹂� �뀑�똿
                     this.setIssueCustomFields(issue, issueVo);  //  �궗�슜�옄 �젙�쓽 �븘�뱶 媛� �젙蹂� �뀑�똿
                     this.setRelationIssue(issue, issueVo);        //�뿰愿� �씪媛� �뀑�똿
-                    this.setDownIssues(issue, issueVo); //�븯�쐞 �씠�뒋 �꽭�똿
+                    this.setDownIssues(issue, issueVo, issueCondition.getHideCompleteIssue()); //�븯�쐞 �씠�뒋 �꽭�똿
                     break;
 
                 case "02": //  �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭,  �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎.
-                    this.setIssueDetail(issueVo, issue, user);    //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
+                    if (issueCondition.getHideCompleteIssue() == null) {
+                        issueCondition.setHideCompleteIssue(true);
+                    }
+                    this.setIssueDetail(issueVo, issue, user, issueCondition.getHideCompleteIssue());    //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
                     this.setIssueTableConfigs(issue, issueVo, issueCondition);
                     issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class));
                     break;
@@ -1710,7 +1789,7 @@
 
 
     // �븯�쐞 �씠�뒋 �젙蹂대�� �뀑�똿�븳�떎
-    private void setDownIssues(Issue issue, IssueVo issueVo) {
+    private void setDownIssues(Issue issue, IssueVo issueVo, boolean hideCompleteIssue) {
         Page<Issue> downIssues = null;
 
         List<Issue> downIssueList = this.issueRepository.findByParentIssueId(issue.getId());
@@ -1720,7 +1799,13 @@
                 startPage = (int) Math.floor(issueVo.getDownPage()/issueVo.getDownPageSize());
             }
             Pageable pageable = PageRequest.of(startPage, issueVo.getDownPageSize());
-            downIssues = this.issueRepository.findByParentIssueId(issue.getId(), pageable);
+
+            if(hideCompleteIssue){
+                downIssues = this.issueRepository.findByParentIssueId(issue.getId(), IssueStatusType.CLOSE, pageable);
+            }else {
+                downIssues = this.issueRepository.findByParentIssueId(issue.getId(), pageable);
+            }
+
         }
         if(downIssues != null){
             issueVo.setDownTotalPage(downIssues.getTotalPages());
@@ -1758,6 +1843,12 @@
     @Override
     @Transactional(readOnly = true)
     public void setIssueDetail(IssueVo issueVo, Issue issue, User user) {
+        setIssueDetail(issueVo, issue, user, false);
+    }
+
+    @Override
+    @Transactional(readOnly = true)
+    public void setIssueDetail(IssueVo issueVo, Issue issue, User user, boolean hideCompleteIssue) {
         //  �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤
         if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) {
             issueVo.setModifyPermissionCheck(Boolean.TRUE);
@@ -1776,7 +1867,7 @@
         this.setAttachedFiles(issue, issueVo);  //  泥⑤� �뙆�씪 �젙蹂� �뀑�똿
         this.setIssueCustomFields(issue, issueVo);  //  �궗�슜�옄 �젙�쓽 �븘�뱶 媛� �젙蹂� �뀑�똿
         this.setRelationIssue(issue, issueVo);        //�뿰愿� �씪媛� �뀑�똿
-        this.setDownIssues(issue, issueVo); //�븯�쐞 �씪媛� �꽭�똿
+        this.setDownIssues(issue, issueVo, hideCompleteIssue); //�븯�쐞 �씪媛� �꽭�똿
         this.setIssueComments(issue, issueVo);  //  �뙎湲� �젙蹂� �뀑�똿
         this.setIssueHistory(issue, issueVo);   //  �씠�뒋 湲곕줉 �젙蹂� �뀑�똿
 
@@ -2696,21 +2787,24 @@
                     this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT));
         }
 
-        List<Issue> removeIssues = Lists.newArrayList();
+        Set<Long> removeIds = new HashSet<>();
 
         for (Long issueId : issueForm.getRemoveIds()) {
+            removeIds.add(issueId);
             //�븯�쐞�씠�뒋 泥댄겕
             List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
             if(downIssues != null && downIssues.size() > 0){
                 for(Issue downIssue : downIssues){
                     Long downIssueId = downIssue.getId();
-                    downIssue = this.issueRemoves(downIssueId, user);
-                    removeIssues.add(downIssue);
+                    removeIds.add(downIssueId);
                 }
             }
-            Issue issue = this.issueRemoves(issueId, user);
-            removeIssues.add(issue);
         }
+
+        for (Long removeId : removeIds) {
+            this.issueRemoves(removeId, user);
+        }
+
         //  �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏�
         log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
     }

--
Gitblit v1.8.0