From 1b960584383766692a257a4cdd92daf19bab172d Mon Sep 17 00:00:00 2001
From: jhjang <jhjang@maprex.co.kr>
Date: 월, 27 12월 2021 09:32:50 +0900
Subject: [PATCH] - API 추가/수정시 사용자 정의 필드 항목이 없을 경우 오류 처리 - API 에서 도메인만 추출하여 같은 도메인을 갖는 업체/isp/hosting 자동 입력하도록 수정

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java   |   88 +++++++++++++++--------------
 src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java    |    2 
 src/main/resources/mybatis/query-template/companyField-template.xml |    3 +
 src/main/java/kr/wisestone/owl/web/controller/ApiController.java    |    7 ++
 src/main/java/kr/wisestone/owl/util/CommonUtil.java                 |   28 +++++++++
 src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java           |    9 +++
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java           |    1 
 7 files changed, 95 insertions(+), 43 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index 5a278a0..349f92a 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -251,4 +251,5 @@
     public static final String API_ISSUE_NOT_EXIST = "API_ISSUE_NOT_EXIST";     // �닔�젙�븷 �씠�뒋瑜� 李얠쓣�닔 �뾾�뒿�땲�떎.
     public static final String API_COMPLETE_ISSUE_STATUS_NOT_EXIST = "API_COMPLETE_ISSUE_STATUS_NOT_EXIST";     // �옄�룞 醫낅즺 泥섎━�븷 �긽�깭媛� �꽕�젙�릺吏� �븡�븯�뒿�땲�떎.
     public static final String API_ISSUE_STATUS_NOT_EXIST = "API_ISSUE_STATUS_NOT_EXIST";     // �씠�뒋 �긽�깭瑜� 李얠쓣�닔 �뾾�뒿�땲�떎
+    public static final String API_CUSTOM_FIELD_NOT_EXIST = "API_CUSTOM_FIELD_NOT_EXIST";     // �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 議댁옱�븯吏� �븡�뒿�땲�떎.
 }
diff --git a/src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java b/src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java
index 3d52d10..8f80889 100644
--- a/src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java
+++ b/src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java
@@ -24,7 +24,7 @@
     @JoinColumn(name = "issue_type_id")
     private IssueType issueType;
 
-    @ManyToOne(fetch = FetchType.LAZY)
+    @ManyToOne(fetch = FetchType.EAGER)
     @JoinColumn(name = "custom_field_id")
     private CustomField customField;
 
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 5c2d587..b132251 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -280,6 +280,20 @@
             if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) {
                 for (int i = 0; i < customFieldApiOverlaps.size(); i++) {
                     CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i);
+                    CustomField customField = customFieldApiOverlap.getCustomField();
+                    if (customField.getCustomFieldType() == CustomFieldType.SITE) {
+                        for (Map<String, Object> map : issueApiForm.getCustomFieldValues()) {
+                            if (customField.getId().equals(MapUtil.getLong(map, "customFieldId"))) {
+                                String fullUrl = MapUtil.getString(map, "useValue");
+                                String url = CommonUtil.getUrl(fullUrl);
+                                if (!url.equals("")) {
+                                    issueApiForm.setUrl(fullUrl);
+                                    break;
+                                }
+                            }
+                        }
+
+                    }
                     issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId());
                 }
 
@@ -301,7 +315,7 @@
             // �궗�슜�옄 �젙�쓽 �븘�뱶 �꽕�젙
             issueForm.setIssueCustomFields(issueApiForm.getCustomFieldValues());
             //  媛숈� �룄硫붿씤 �뾽泥� 李얘린
-            this.findCompanyField(issueForm);
+            this.findCompanyField(issueForm, issueApiForm.getUrl());
 
             // api �엯�젰媛� �쟻�슜
             ConvertUtil.copyProperties(issueApiForm, issueForm);
@@ -313,45 +327,36 @@
         }
     }
 
-    private void findCompanyField(IssueForm issueForm) {
+    private void findCompanyField(IssueForm issueForm, String url) {
         if(issueForm.getIssueCustomFields() != null && issueForm.getIssueCustomFields().size() > 0) {
             CompanyFieldCondition condition = new CompanyFieldCondition();
+            condition.setUrl(url);
             List<Map<String, Object>> companyFields = this.companyFieldService.find(condition);
             List<Map<String, Object>> issueCompanyFields = Lists.newArrayList();
             List<Map<String, Object>> issueIspFields = Lists.newArrayList();
             List<Map<String, Object>> issueHostingFields = Lists.newArrayList();
 
-            for (Map<String, Object> issueCustomField : issueForm.getIssueCustomFields()) {
-                int customFieldId = (Integer) issueCustomField.get("customFieldId");
-                Long customId = (long) customFieldId;
-                CustomField customField = this.customFieldService.getCustomField(customId);
-                if(customField != null && customField.getCustomFieldType().toString().equals("SITE") && customField.getName().equals("�룄硫붿씤")) {
-                    String useValue = issueCustomField.get("useValue").toString();
-                    if(companyFields != null && companyFields.size() > 0) {
-                        for (Map<String, Object> companyField : companyFields) {
-                            CompanyFieldVo companyFieldVo = ConvertUtil.convertMapToClass(companyField, CompanyFieldVo.class);
-                            if(useValue.equals(companyFieldVo.getUrl())) {
-                                companyField.put("companyId", companyField.get("id"));
-                                issueCompanyFields.add(companyField);
-                                if(companyFieldVo.getIspId() != null) {
-                                    Map<String, Object> ispField = this.ispFieldService.find(companyFieldVo.getIspId());
-                                    if (ispField != null) {
-                                        ispField.put("ispId", ispField.get("id"));
-                                        issueIspFields.add(ispField);
-                                    }
-                                }
-                                if(companyFieldVo.getHostingId() != null) {
-                                    Map<String, Object> hostingField = this.hostingFieldService.find(companyFieldVo.getHostingId());
-                                    if (hostingField != null) {
-                                        hostingField.put("hostingId", hostingField.get("id"));
-                                        issueHostingFields.add(hostingField);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
+            if (companyFields != null && companyFields.size() > 0) {
+                Map<String, Object> companyFieldMap = companyFields.get(0);
+                companyFieldMap.put("companyId", companyFieldMap.get("id"));
+
+                issueCompanyFields.add(companyFieldMap);
                 issueForm.setIssueCompanyFields(issueCompanyFields);
+
+                IspField ispField = this.ispFieldService.getIsp(MapUtil.getLong(companyFieldMap, "ispId"));
+                if (ispField != null) {
+                    Map<String, Object> ispFieldMap = ConvertUtil.convertObjectToMap(ispField);
+                    ispFieldMap.put("ispId", ispField.getId());
+                    issueIspFields.add(ispFieldMap);
+                }
+
+                HostingField hostingField = this.hostingFieldService.getHosting(MapUtil.getLong(companyFieldMap, "hostingId"));
+                if (hostingField != null) {
+                    Map<String, Object> hostingFieldMap = ConvertUtil.convertObjectToMap(hostingField);
+                    hostingFieldMap.put("hostingId", hostingField.getId());
+                    issueHostingFields.add(hostingFieldMap);
+                }
+
                 issueForm.setIssueIspFields(issueIspFields);
                 issueForm.setIssueHostingFields(issueHostingFields);
             }
@@ -928,7 +933,7 @@
 //        if (!this.userWorkspaceService.checkWorkspaceManager(user)
 //                && !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { //理쒓퀬愿�由ъ옄 & �봽濡쒖젥�듃,�씠�뒋 愿�由ъ옄 �씪 寃쎌슦 紐⑤뱺 �씠�뒋 蹂닿린
 //            this.SetMyDepartmentId(issueCondition);
-            //this.SetAllDepartmentId(issueCondition);
+        //this.SetAllDepartmentId(issueCondition);
 //        } /*else{
 //            results = this.issueMapper.findByDepartment(issueCondition);
 //            totalCount = this.issueMapper.countByDepartment(issueCondition);
@@ -1812,15 +1817,14 @@
                 Issue parentIssue = modifyIssue.getParentIssue();
                 IssueType issueType = modifyIssue.getIssueType();
 
-                Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses();
-                IssueTypeApiEndStatus issueStatus = null;
-                if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) {
-                    issueStatus = issueTypeApiEndStatuses.iterator().next();
-                } else {
-                    throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST));
-                }
-
                 if (parentIssue != null) {
+                    Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses();
+                    IssueTypeApiEndStatus issueStatus = null;
+                    if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) {
+                        issueStatus = issueTypeApiEndStatuses.iterator().next();
+                    } else {
+                        throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST));
+                    }
 
                     IssueCondition issueCondition = new IssueCondition(issueVo.getId(), parentIssue.getId());
                     List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(issueCondition);
@@ -3448,7 +3452,7 @@
         }
     }
 
-    //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.-
+    //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.
     private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) {
         if (cell != null) {
             String cellValue = CommonUtil.convertExcelStringToCell(cell);
diff --git a/src/main/java/kr/wisestone/owl/util/CommonUtil.java b/src/main/java/kr/wisestone/owl/util/CommonUtil.java
index afcb056..079f3a4 100644
--- a/src/main/java/kr/wisestone/owl/util/CommonUtil.java
+++ b/src/main/java/kr/wisestone/owl/util/CommonUtil.java
@@ -42,6 +42,8 @@
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 public class CommonUtil {
     private static final Logger LOGGER = LoggerFactory.getLogger(CommonUtil.class);
@@ -1005,4 +1007,30 @@
         }
     }
 
+    // 硫붿씤 url留� 異붿텧
+    public static String extractUrl(String content){
+        try {
+            String REGEX = "(http(s)?:\\/\\/)([a-z0-9\\w]+\\.*)+[a-z0-9]{2,4}";
+            Pattern p = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE);
+            Matcher m = p.matcher(content);
+            if (m.find()) {
+                return m.group();
+            }
+            return "";
+        } catch (Exception e) {
+            return "";
+        }
+    }
+
+    // 硫붿씤 url 異붿텧�쓣 �쐞�빐 http: �솗�씤
+    public static String getUrl(String fullUrl) {
+        if (fullUrl != null) {
+            if (fullUrl.indexOf("http") == -1) {
+                fullUrl = "http://" + fullUrl;
+            }
+
+            return extractUrl(fullUrl);
+        }
+        return "";
+    }
 }
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 fb3a53a..9c7b5f4 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/ApiController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/ApiController.java
@@ -53,6 +53,11 @@
         if (issueForm == null) {
             throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ERROR));
         }
+        // �궗�슜�옄 �젙�쓽 �븘�뱶媛� �뾾�쓣 寃쎌슦 寃��깋�쓣 �븷 �닔 �뾾湲� �븣臾몄뿉 �삁�쇅泥섎━
+        else if (issueForm.getCustomFieldValues() == null || issueForm.getCustomFieldValues().size() == 0) {
+            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST));
+        }
+        
         if (issueForm.getApiType() == IssueApiForm.ApiType.add) {
             List<Issue> issues = this.issueService.addApiIssue(issueForm);
             //  踰꾩쟾 �깮�꽦
@@ -60,6 +65,8 @@
                 this.issueService.addIssueVersion(issue.getId(), issue.getRegisterId());
             }
         } else {
+
+
             this.issueService.modifyIssue(issueForm, request.getFiles("file"));
         }
 
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 698375e..42c5467 100644
--- a/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java
@@ -31,6 +31,7 @@
     private List<Map<String, Object>> CustomFieldValues = Lists.newArrayList();
     private List<MultipartFile> multipartFiles = Lists.newArrayList();
     private List<Long> useIssueCustomFieldIds = Lists.newArrayList();       // �궗�쐞�씪媛먯슜 �궗�슜�옄�븘�뱶媛�
+    private String url;             // �깘吏� �떆�뒪�뀥�뿉�꽌留� �쟻�슜
 
     public IssueApiForm() {
     }
@@ -228,4 +229,12 @@
             this.useIssueCustomFieldIds.add(customFieldId);
         }
     }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }
diff --git a/src/main/resources/mybatis/query-template/companyField-template.xml b/src/main/resources/mybatis/query-template/companyField-template.xml
index 0ee3d09..2393acf 100644
--- a/src/main/resources/mybatis/query-template/companyField-template.xml
+++ b/src/main/resources/mybatis/query-template/companyField-template.xml
@@ -23,6 +23,9 @@
         <if test="id != '' and id != null">
             AND cf.id like CONCAT('%',#{id},'%')
         </if>
+        <if test="url != '' and id != url">
+            AND cf.url like CONCAT('%',#{url},'%')
+        </if>
         ORDER BY cf.id DESC
         <if test="pageSize != '' and pageSize != null">
             limit #{pageSize} offset #{page};

--
Gitblit v1.8.0