From 916a3cbabe4e50062fce61ff6f2f5d46c05dfbd1 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 17 3월 2022 17:47:45 +0900
Subject: [PATCH] - api로 이슈 추가 시 url/ip로 업체 찾는 코드 수정

---
 src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java |  317 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 278 insertions(+), 39 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java
index 1b771bb..b5365d7 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java
@@ -9,7 +9,6 @@
 import kr.wisestone.owl.util.MapUtil;
 import kr.wisestone.owl.web.condition.CompanyFieldCondition;
 import kr.wisestone.owl.web.form.CompanyFieldForm;
-import kr.wisestone.owl.web.form.IssueForm;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.*;
 import org.springframework.transaction.annotation.Transactional;
@@ -33,6 +32,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
+import java.util.regex.Pattern;
 
 @Service
 public class CompanyFieldServiceImpl extends AbstractServiceImpl<CompanyField, Long, JpaRepository<CompanyField, Long>> implements CompanyFieldService {
@@ -89,25 +89,159 @@
             this.verifyUrl(companyFieldForm.getUrl(), null);
         }
 
+        if (companyFieldForm.getIpStarts() != null && companyFieldForm.getIpStarts().size() > 0
+                && companyFieldForm.getIpEnds() != null && companyFieldForm.getIpEnds().size() > 0) {
+
+            for (int i=0; i<companyFieldForm.getIpStarts().size(); i++) {
+                //  �븘�씠�뵾 �쑀�슚�꽦 泥댄겕
+                this.verifyIp(companyFieldForm.getIpStarts().get(i), companyFieldForm.getIpEnds().get(i), null);
+            }
+
+            String startIps = companyFieldForm.getIpStarts().toString();
+            //  ��愿꾪샇 �젣嫄�
+            startIps = this.removeSquare(startIps);
+            companyFieldForm.setIpStart(startIps.trim());
+
+            String endIps = companyFieldForm.getIpEnds().toString();
+            //  ��愿꾪샇 �젣嫄�
+            endIps = this.removeSquare(endIps);
+            companyFieldForm.setIpEnd(endIps.trim());
+        }
+
         if (companyFieldForm.getTelList() != null && companyFieldForm.getTelList().size() > 0) {
             String tels = companyFieldForm.getTelList().toString();
-            if (tels.contains("[")) {
-                tels = tels.substring(1, tels.indexOf("]"));
-            }
+            //  ��愿꾪샇 �젣嫄�
+            tels = this.removeSquare(tels);
             companyFieldForm.setTel(tels.trim());
         }
         if (companyFieldForm.getEmailList() != null && companyFieldForm.getEmailList().size() > 0) {
             String emails = companyFieldForm.getEmailList().toString();
-            String email = "";
-            if (emails.contains("[")) {
-                email = emails.substring(1, emails.indexOf("]"));
-            }
-            companyFieldForm.setEmail(email.trim());
+            //  ��愿꾪샇 �젣嫄�
+            emails = this.removeSquare(emails);
+            companyFieldForm.setEmail(emails.trim());
         }
 
         CompanyField companyField = ConvertUtil.copyProperties(companyFieldForm, CompanyField.class);
         companyFieldRepository.saveAndFlush(companyField);
         return companyField;
+    }
+
+    /**
+     * ��愿꾪샇([]) �젣嫄� �븿�닔
+     * @param str String
+     * @return str
+     */
+    private String removeSquare(String str) {
+        if (str.contains("[")) {
+            str = str.substring(1, str.indexOf("]"));
+        }
+        
+        return str;
+    }
+
+    /**
+     * IP �쑀�슚�꽦 泥댄겕
+     * @param ip String
+     * @param ip2 String
+     * @param id Long
+     */
+    private void verifyIp(String ip, String ip2, Long id) {
+        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)) {
+                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.IP_NOT_INVALID));
+            }
+        }
+        if (!StringUtils.isEmpty(ip2)) {
+            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]?)$", ip2)) {
+                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.IP_NOT_INVALID));
+            }
+        }
+
+        if (!StringUtils.isEmpty(ip) && !StringUtils.isEmpty(ip2)) {
+            long ipStart = ConvertUtil.ipToLong(ip);
+            long ipEnd = ConvertUtil.ipToLong(ip2);
+            if (ipEnd < ipStart) {
+                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.IP_START_NOT_LARGER_THAN_END));
+            }
+
+            List<CompanyField> companyFields = Lists.newArrayList();
+            CompanyFieldCondition condition = new CompanyFieldCondition();
+            if (id != null) {
+                condition.setId(id);
+                companyFields = this.companyFieldRepository.findByIdNot(condition.getId());
+            } else {
+                companyFields = this.companyFieldRepository.findAll();
+            }
+
+            //  IP���뿭�� 以묐났 泥댄겕
+            this.ipOverlapChk(companyFields, ipStart, ipEnd);
+
+            /*if (companyFields != null && companyFields.size() > 0) {
+                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.COMPANY_EXIST_IP));
+            }*/
+        }
+    }
+
+    /**
+     * ip ���뿭�� 以묐났 泥댄겕
+     * @param companyFields List<CompanyField>
+     */
+    private void ipOverlapChk(List<CompanyField> companyFields, long ipStart, long ipEnd) {
+        String[] ipStartArr = null;
+        String[] ipEndArr = null;
+        List<String> startIpList = Lists.newArrayList();
+        List<String> endIpList = Lists.newArrayList();
+        String startIp = "";
+        String endIp = "";
+        List<Long> startIps = Lists.newArrayList();
+        List<Long> endIps = Lists.newArrayList();
+
+        if (companyFields.size() > 0) {
+            for (CompanyField companyField : companyFields) {
+                if(companyField.getIpStart() != null && companyField.getIpEnd() != null) {
+                    startIp = companyField.getIpStart();
+                    if (startIp.contains(" ")) {
+                        startIp = startIp.replace(" ","");
+                    }
+                    if (startIp.contains(",")) {
+                        ipStartArr = startIp.split(",");
+                        startIpList.addAll(Arrays.asList(ipStartArr));
+                    } else {
+                        startIpList.add(startIp.trim());
+                    }
+
+                    endIp = companyField.getIpEnd();
+                    if (endIp.contains(" ")) {
+                        endIp = endIp.replace(" ","");
+                    }
+                    if (endIp.contains(",")) {
+                        ipEndArr = endIp.split(",");
+                        endIpList.addAll(Arrays.asList(ipEndArr));
+                    } else {
+                        endIpList.add(endIp.trim());
+                    }
+                }
+            }
+            if (startIpList.size() > 0) {
+                for (String ipS : startIpList) {
+                    long start = ConvertUtil.ipToLong(ipS);
+                    startIps.add(start);
+                }
+                for (String ipE : endIpList) {
+                    long end = ConvertUtil.ipToLong(ipE);
+                    endIps.add(end);
+                }
+            }
+
+            for (int i=0; i<startIps.size(); i++) {
+                if (startIps.get(i) >= ipStart && startIps.get(i) <= ipEnd || endIps.get(i) >= ipStart && endIps.get(i) <= ipEnd
+                    || ipStart >= startIps.get(i) && ipStart <= endIps.get(i) || ipEnd >= startIps.get(i) && ipEnd <= endIps.get(i)) {
+                    throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.COMPANY_EXIST_IP));
+                }
+            }
+        }
     }
 
     //  url �쑀�슚�꽦 泥댄겕
@@ -117,14 +251,33 @@
                     this.messageAccessor.getMessage(MsgConstants.COMPANY_NOT_URL));
         }*/
         if (!StringUtils.isEmpty(url)) {
-            CompanyField companyField;
-            if(id == null){
-                companyField = this.companyFieldRepository.findByUrl(url);
+            List<CompanyField> companyFieldList = Lists.newArrayList();
+            CompanyFieldCondition condition = new CompanyFieldCondition();
+            String[] urlArr = null;
+            List<String> urls = Lists.newArrayList();
+
+            if (url.contains(" ")) {
+                url = url.replace(" ","");
+            }
+            if (url.contains(",")) {
+                urlArr = url.split(",");
+                urls.addAll(Arrays.asList(urlArr));
             } else {
-                companyField = this.companyFieldRepository.findByUrlAndIdNot(url,id);
+                urls.add(url);
             }
 
-            if (companyField != null) {
+            if (urls.size() > 0) {
+                condition.setUrls(urls);
+
+                if(id == null){
+                    companyFieldList = this.companyFieldMapper.findByUrls(condition);
+                } else {
+                    condition.setId(id);
+                    companyFieldList = this.companyFieldMapper.findByUrlsAndIdNot(condition);
+                }
+            }
+
+            if (companyFieldList != null && companyFieldList.size() > 0) {
                 throw new OwlRuntimeException(
                         this.messageAccessor.getMessage(MsgConstants.COMPANY_USED_URL));
             }
@@ -235,18 +388,35 @@
             this.verifyUrl(companyFieldForm.getUrl(), companyFieldForm.getId());
         }
 
+        if (companyFieldForm.getIpStarts() != null && companyFieldForm.getIpStarts().size() > 0
+                && companyFieldForm.getIpEnds() != null && companyFieldForm.getIpEnds().size() > 0) {
+
+            for (int i=0; i<companyFieldForm.getIpStarts().size(); i++) {
+                //  �븘�씠�뵾 �쑀�슚�꽦 泥댄겕
+                this.verifyIp(companyFieldForm.getIpStarts().get(i), companyFieldForm.getIpEnds().get(i), companyFieldForm.getId());
+            }
+
+            String startIps = companyFieldForm.getIpStarts().toString();
+            //  ��愿꾪샇 �젣嫄�
+            startIps = this.removeSquare(startIps);
+            companyFieldForm.setIpStart(startIps.trim());
+
+            String endIps = companyFieldForm.getIpEnds().toString();
+            //  ��愿꾪샇 �젣嫄�
+            endIps = this.removeSquare(endIps);
+            companyFieldForm.setIpEnd(endIps.trim());
+        }
+
         if (companyFieldForm.getTelList() != null && companyFieldForm.getTelList().size() > 0) {
             String tels = companyFieldForm.getTelList().toString();
-            if (tels.contains("[")) {
-                tels = tels.substring(1, tels.indexOf("]"));
-            }
+            //  ��愿꾪샇 �젣嫄�
+            tels = this.removeSquare(tels);
             companyFieldForm.setTel(tels.trim());
         }
         if (companyFieldForm.getEmailList() != null && companyFieldForm.getEmailList().size() > 0) {
             String emails = companyFieldForm.getEmailList().toString();
-            if (emails.contains("[")) {
-                emails = emails.substring(1, emails.indexOf("]"));
-            }
+            //  ��愿꾪샇 �젣嫄�
+            emails = this.removeSquare(emails);
             companyFieldForm.setEmail(emails.trim());
         }
 
@@ -286,6 +456,8 @@
         excelInfo.setFileName(this.messageAccessor.message("common.registerExcelCompanyField")); // �뿊��濡� �뾽泥� �벑濡앺븯湲�
         excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽泥대챸
         excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyUrl"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // url
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyIpStart"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // ip �떆�옉 二쇱냼
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyIpEnd"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // ip 醫낅즺 二쇱냼
         excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("isp.ispName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // isp紐�
         excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("Hosting.HostingName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �샇�뒪�똿紐�
         excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyTel"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �뿰�씫泥�
@@ -422,6 +594,8 @@
                 if (rowIndex > 1) {
                     //  �뾽泥대줈 �벑濡앺븯湲� �쐞�빐 CompanyFieldForm �뿉 �뜲�씠�꽣瑜� �뀑�똿�븳�떎.
                     CompanyFieldForm newCompanyFieldForm = this.setCompanyFieldFormToExcelField(row, (rowIndex + 1), ispFieldMaps, hostingFieldMaps, companyTypeMaps, parentSectorMaps, childSectorMaps, regionMaps, statusMaps, headers);
+                    //  ip �쑀�슚�꽦 泥댄겕
+                    this.verifyIp(newCompanyFieldForm.getIpStart(), newCompanyFieldForm.getIpEnd(), null);
 
                     companyFieldForms.add(newCompanyFieldForm);
                 }
@@ -526,63 +700,95 @@
                     break;
 
                 case 2:
+                    //  ip�떆�옉二쇱냼
+                    this.setCompanyFormIpStart(cellStr, companyFieldForm, isNull);
+                    break;
+
+                case 3:
+                    //  ip醫낅즺二쇱냼
+                    this.setCompanyFormIpEnd(cellStr, companyFieldForm, isNull);
+                    break;
+
+                case 4:
                     // isp紐�
                     this.setCompanyFormIspName(cellStr, ispFieldMaps, companyFieldForm, rowIndex, isNull);
                     break;
 
-                case 3:
+                case 5:
                     // �샇�뒪�똿紐�
                     this.setCompanyFormHostingName(cellStr, hostingFieldMaps, companyFieldForm, rowIndex, isNull);
                     break;
 
-                case 4:
+                case 6:
                     // �뿰�씫泥�
                     telTypeCheck(cell, rowIndex);
                     this.setCompanyFormTel(cellStr, companyFieldForm, isNull);
                     break;
 
-                case 5:
+                case 7:
                     // �씠硫붿씪
                     this.setCompanyFormEmail(cellStr, companyFieldForm, isNull);
                     break;
 
-                case 6:
+                case 8:
                     // �떞�떦�옄
                     this.setCompanyFormManager(cellStr, companyFieldForm, isNull);
                     break;
 
-                case 7:
+                case 9:
                     // 湲곗뾽援щ텇
                     this.setCompanyFormCompanyType(cellStr, companyTypeMaps, companyFieldForm, rowIndex, isNull);
                     break;
 
-                case 8:
+                case 10:
                     // �뾽醫�(��遺꾨쪟)
                     this.setCompanyFormParentSector(cellStr, parentSectorMaps, companyFieldForm, rowIndex, isNull);
                     break;
 
-                case 9:
+                case 11:
                     // �뾽醫�(以묐텇瑜�)
                     this.setCompanyFormChildSector(cellStr, childSectorMaps, companyFieldForm, rowIndex, isNull);
                     break;
 
-                case 10:
+                case 12:
                     // 吏��뿭
                     this.setCompanyFormRegion(cellStr, regionMaps, companyFieldForm, rowIndex, isNull);
                     break;
 
-                case 11:
+                case 13:
                     // �긽�깭
                     this.setCompanyFormStatus(cellStr, statusMaps, companyFieldForm, isNull);
                     break;
 
-                case 12:
+                case 14:
                     // 鍮꾧퀬
                     this.setCompanyFormMemo(cellStr, companyFieldForm, isNull);
             }
         }
 
         return companyFieldForm;
+    }
+
+    private void setCompanyFormIpEnd(String ipEnd, CompanyFieldForm companyFieldForm, boolean isNull) {
+        if (!isNull) {
+            if (ipEnd.contains(" ")) {
+                ipEnd = ipEnd.replace(" ", "");
+            }
+            this.verifyIp(ipEnd, null, null); //ip �쑀�슚�꽦 寃��궗
+
+            companyFieldForm.setIpEnd(ipEnd);
+        }
+    }
+
+    private void setCompanyFormIpStart(String ipStart, CompanyFieldForm companyFieldForm, boolean isNull) {
+        if (!isNull) {
+            if (ipStart.contains(" ")) {
+                ipStart = ipStart.replace(" ", "");
+            }
+            this.verifyIp(ipStart, null, null); //ip �쑀�슚�꽦 寃��궗
+
+            companyFieldForm.setIpStart(ipStart);
+        }
     }
 
     private void setCompanyFormMemo(String cellStr, CompanyFieldForm companyFieldForm, boolean isNull) {
@@ -664,23 +870,55 @@
 
     private void setCompanyFormEmail(String email, CompanyFieldForm companyFieldForm, boolean isNull) {
         if (!isNull) {
-            if (email.contains(" ")) {
-                email = email.replace(" ", "");
-            }
+            //  �씠硫붿씪 �쑀�슚�꽦 寃��궗
+            email = this.verifyEmail(email);
             companyFieldForm.setEmail(email);
         }
     }
 
+    /**
+     * �씠硫붿씪 �쑀�슚�꽦 寃��궗
+     * @param email String
+     * @return String
+     */
+    private String verifyEmail(String email) {
+        /*if (!Pattern.matches("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$", email)) {
+            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.EMAIL_NOT_INVALID));
+        }*/
+
+        if (email.contains(" ")) {
+            email = email.replace(" ", "");
+        }
+
+        return email;
+    }
+
     private void setCompanyFormTel(String tel, CompanyFieldForm companyFieldForm, boolean isNull) {
         if (!isNull) {
-            if (tel.contains("-")) {
-                tel = tel.replace("-", "");
-            }
-            if (tel.contains(" ")) {
-                tel = tel.replace(" ", "");
-            }
+            //  �뿰�씫泥� �쑀�슚�꽦 寃��궗
+            tel = this.verifyTel(tel);
             companyFieldForm.setTel(tel);
         }
+    }
+
+    /**
+     * �뿰�씫泥� �쑀�슚�꽦 寃��궗
+     * @param tel String
+     * @return String
+     */
+    private String verifyTel(String tel) {
+        if (!Pattern.matches("^[0-9-]{2,20}$", tel)) {
+            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.TEL_NOT_INVALID));
+        }
+
+        if (tel.contains("-")) {
+            tel = tel.replace("-", "");
+        }
+        if (tel.contains(" ")) {
+            tel = tel.replace(" ", "");
+        }
+
+        return tel;
     }
 
     private void setCompanyFormHostingName(String cellStr, Map<String, HostingField> hostingFieldMaps, CompanyFieldForm companyFieldForm, int rowIndex, boolean isNull) {
@@ -791,6 +1029,7 @@
         excelInfo.addAttrInfos(new ExportExcelAttrVo("tel", this.messageAccessor.message("companyField.companyTel"), 10, ExportExcelAttrVo.ALIGN_CENTER));
         excelInfo.addAttrInfos(new ExportExcelAttrVo("email", this.messageAccessor.message("companyField.companyEmail"), 10, ExportExcelAttrVo.ALIGN_CENTER));
         excelInfo.addAttrInfos(new ExportExcelAttrVo("url", this.messageAccessor.message("companyField.companyUrl"), 10, ExportExcelAttrVo.ALIGN_CENTER));
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("ipRange", this.messageAccessor.message("companyField.companyIp"), 10, ExportExcelAttrVo.ALIGN_CENTER));
         excelInfo.addAttrInfos(new ExportExcelAttrVo("companyTypeName", this.messageAccessor.message("companyField.companyTypeName"), 10, ExportExcelAttrVo.ALIGN_CENTER));
         excelInfo.addAttrInfos(new ExportExcelAttrVo("parentSectorName", this.messageAccessor.message("companyField.parentSectorName"), 10, ExportExcelAttrVo.ALIGN_CENTER));
         excelInfo.addAttrInfos(new ExportExcelAttrVo("childSectorName", this.messageAccessor.message("companyField.childSectorName"), 10, ExportExcelAttrVo.ALIGN_CENTER));

--
Gitblit v1.8.0