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

---
 src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java     |    2 
 src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java   |   19 +
 src/main/resources/mybatis/query-template/companyField-template.xml       |   18 +
 src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js |  119 ++++++++++
 src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java  |  154 +++++++++++--
 src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js    |  136 +++++++++++
 src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java             |   23 ++
 src/main/webapp/i18n/ko/global.json                                       |    6 
 src/main/webapp/views/companyField/companyFieldModify.html                |   66 +++--
 src/main/resources/migration/V1_11__alter_data.sql                        |    6 
 src/main/webapp/assets/styles/main.css                                    |   19 +
 src/main/webapp/views/companyField/companyFieldAdd.html                   |   69 +++--
 12 files changed, 538 insertions(+), 99 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java b/src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java
index 5c0f392..5c91c4a 100644
--- a/src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java
+++ b/src/main/java/kr/wisestone/owl/repository/CompanyFieldRepository.java
@@ -19,4 +19,6 @@
     List<CompanyField> findByIspId(@Param("isp_id") Long id);
 
     List<CompanyField> findByHostingId(@Param("hosting_id") Long id);
+
+    List<CompanyField> findByIdNot(@Param("id") Long id);
 }
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 f2f56c6..0b9734d 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java
@@ -84,30 +84,41 @@
         //  �뾽泥대챸 以묐났 泥댄겕
         this.verifyTitle(companyFieldForm.getName(), null);
 
-        if (companyFieldForm.getIpStart() != null && companyFieldForm.getIpEnd() != null) {
-            //  �븘�씠�뵾 �쑀�슚�꽦 泥댄겕
-            this.verifyIp(companyFieldForm.getIpStart(), companyFieldForm.getIpEnd(), null);
-        }
-
         if (companyFieldForm.getUrl() != null) {
             //  url �쑀�슚�꽦 泥댄겕
             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);
@@ -116,8 +127,23 @@
     }
 
     /**
+     * ��愿꾪샇([]) �젣嫄� �븿�닔
+     * @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)) {
@@ -146,14 +172,76 @@
             condition.setIpEnd(String.valueOf(ipEnd));
             if (id != null) {
                 condition.setId(id);
-                companyFields = this.companyFieldMapper.findByIpsAndIdNot(condition);
+                companyFields = this.companyFieldRepository.findByIdNot(condition.getId());
             } else {
-                companyFields = this.companyFieldMapper.findByIps(condition);
+                companyFields = this.companyFieldRepository.findAll();
             }
 
             //  IP���뿭�� 以묐났 泥댄겕
-            if (companyFields != null && companyFields.size() > 0) {
+            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));
+                }
             }
         }
     }
@@ -297,28 +385,40 @@
         //  �뾽泥대챸 �쑀�슚�꽦 泥댄겕
         this.verifyTitle(companyFieldForm.getName(), companyFieldForm.getId());
 
-        if (companyFieldForm.getIpStart() != null && companyFieldForm.getIpEnd() != null) {
-            //  �븘�씠�뵾 �쑀�슚�꽦 泥댄겕
-            this.verifyIp(companyFieldForm.getIpStart(), companyFieldForm.getIpEnd(), companyFieldForm.getId());
-        }
-
         if (companyFieldForm.getUrl() != null) {
             //  url �쑀�슚�꽦 泥댄겕
             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());
         }
 
diff --git a/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java b/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java
index e55ccf4..e97f840 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/CompanyFieldCondition.java
@@ -2,6 +2,7 @@
 
 import kr.wisestone.owl.util.ConvertUtil;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -16,6 +17,8 @@
     private long ip;
     private String ipStart;
     private String ipEnd;
+    private List<String> ipStarts = new ArrayList<>();
+    private List<String> ipEnds = new ArrayList<>();
     private String memo;
     private Long ispId;
     private Long hostingId;
@@ -131,6 +134,22 @@
         this.ipEnd = ipEnd;
     }
 
+    public List<String> getIpStarts() {
+        return ipStarts;
+    }
+
+    public void setIpStarts(List<String> ipStarts) {
+        this.ipStarts = ipStarts;
+    }
+
+    public List<String> getIpEnds() {
+        return ipEnds;
+    }
+
+    public void setIpEnds(List<String> ipEnds) {
+        this.ipEnds = ipEnds;
+    }
+
     public Long getIspId() {
         return ispId;
     }
diff --git a/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java b/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java
index dbd1d3f..6d2c96d 100644
--- a/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java
@@ -13,6 +13,8 @@
     private String url;
     private String ipStart;
     private String ipEnd;
+    private List<String> ipStarts = new ArrayList<>();
+    private List<String> ipEnds = new ArrayList<>();
     private String memo;
     private String tel;
     private Long ispId;
@@ -43,6 +45,11 @@
 
         if (MapUtil.getStrings(params, "emails") != null) {
             form.setEmailList(MapUtil.getStrings(params, "emails"));
+        }
+
+        if (MapUtil.getStrings(params, "ipStarts") != null && MapUtil.getStrings(params, "ipEnds") != null) {
+            form.setIpStarts(MapUtil.getStrings(params, "ipStarts"));
+            form.setIpEnds(MapUtil.getStrings(params, "ipEnds"));
         }
 
         if (MapUtil.getLongs(params,"removeIds") != null) {
@@ -91,6 +98,22 @@
         this.ipEnd = ipEnd;
     }
 
+    public List<String> getIpStarts() {
+        return ipStarts;
+    }
+
+    public void setIpStarts(List<String> ipStarts) {
+        this.ipStarts = ipStarts;
+    }
+
+    public List<String> getIpEnds() {
+        return ipEnds;
+    }
+
+    public void setIpEnds(List<String> ipEnds) {
+        this.ipEnds = ipEnds;
+    }
+
     public String getMemo() {
         return memo;
     }
diff --git a/src/main/resources/migration/V1_11__alter_data.sql b/src/main/resources/migration/V1_11__alter_data.sql
new file mode 100644
index 0000000..f4212ab
--- /dev/null
+++ b/src/main/resources/migration/V1_11__alter_data.sql
@@ -0,0 +1,6 @@
+
+/* �뾽泥� IP ���뿭�� 而щ읆 蹂�寃� */
+ALTER TABLE `company_field` MODIFY COLUMN `ip_start` varchar(255) NULL;
+ALTER TABLE `company_field` MODIFY COLUMN `ip_end` varchar(255) NULL;
+ALTER TABLE `issue_company` MODIFY COLUMN `ip_start` varchar(255) NULL;
+ALTER TABLE `issue_company` MODIFY COLUMN `ip_end` varchar(255) NULL;
\ No newline at end of file
diff --git a/src/main/resources/mybatis/query-template/companyField-template.xml b/src/main/resources/mybatis/query-template/companyField-template.xml
index a4a8708..6e3eab6 100644
--- a/src/main/resources/mybatis/query-template/companyField-template.xml
+++ b/src/main/resources/mybatis/query-template/companyField-template.xml
@@ -97,7 +97,9 @@
         cf.id as id,
         cf.name as name,
         cf.email as email,
-        cf.url as url
+        cf.url as url,
+        cf.ip_start AS ipStart,
+        cf.ip_end AS ipEnd
         FROM
         company_field cf
         WHERE 1=1
@@ -122,13 +124,16 @@
         cf.id as id,
         cf.name as name,
         cf.email as email,
-        cf.url as url
+        cf.url as url,
+        cf.ip_start AS ipStart,
+        cf.ip_end AS ipEnd
         FROM
         company_field cf
         WHERE 1=1
         <choose>
             <when test="ipStart != null and ipStart != '' and ipEnd != null and ipEnd != ''">
-                AND INET_ATON(cf.ip_start) BETWEEN #{ipStart} AND #{ipEnd} OR INET_ATON(cf.ip_end) BETWEEN #{ipStart} AND #{ipEnd}
+                AND (INET_ATON(cf.ip_start) BETWEEN #{ipStart} AND #{ipEnd} OR INET_ATON(cf.ip_end) BETWEEN #{ipStart} AND #{ipEnd}
+                OR #{ipStart} BETWEEN INET_ATON(cf.ip_start) AND INET_ATON(cf.ip_end) OR #{ipEnd} BETWEEN INET_ATON(cf.ip_start) AND INET_ATON(cf.ip_end))
             </when>
         </choose>
     </select>
@@ -138,13 +143,16 @@
         cf.id as id,
         cf.name as name,
         cf.email as email,
-        cf.url as url
+        cf.url as url,
+        cf.ip_start AS ipStart,
+        cf.ip_end AS ipEnd
         FROM
         company_field cf
         WHERE 1=1
         <choose>
             <when test="ipStart != null and ipStart != '' and ipEnd != null and ipEnd != ''">
-                AND (INET_ATON(cf.ip_start) BETWEEN #{ipStart} AND #{ipEnd} OR INET_ATON(cf.ip_end) BETWEEN #{ipStart} AND #{ipEnd})
+                AND (INET_ATON(cf.ip_start) BETWEEN #{ipStart} AND #{ipEnd} OR INET_ATON(cf.ip_end) BETWEEN #{ipStart} AND #{ipEnd}
+                OR #{ipStart} BETWEEN INET_ATON(cf.ip_start) AND INET_ATON(cf.ip_end) OR #{ipEnd} BETWEEN INET_ATON(cf.ip_start) AND INET_ATON(cf.ip_end))
             </when>
         </choose>
         <if test="id != '' and id != null">
diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css
index 0d485e4..b53f33d 100644
--- a/src/main/webapp/assets/styles/main.css
+++ b/src/main/webapp/assets/styles/main.css
@@ -11326,11 +11326,28 @@
 .select3-selection__email__remove {
     color: #0066ff;
     margin-left: 8px;
-    margin-top: 7px;
+    margin-top: 9px;
     cursor: pointer;
     font-size: 0.79rem;
 }
 
+.select3-selection__ipRange__remove {
+    color: #0066ff;
+    padding-left: 9px;
+    margin-top: 7px;
+    margin-left: -2px;
+    margin-right: 9px;
+    cursor: pointer;
+    font-size: 0.79rem;
+}
+
+.select3-selection__ipRange__tilde {
+    padding-left: 9px;
+    margin-top: 7px;
+    margin-left: 6px;
+    margin-right: -18px;
+}
+
 .select4-selection__choice {
     font-size: 0.66rem;
     letter-spacing: -0.01em;
diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json
index 045c675..4c8e0ee 100644
--- a/src/main/webapp/i18n/ko/global.json
+++ b/src/main/webapp/i18n/ko/global.json
@@ -1017,6 +1017,12 @@
         "invalidTelFormat": "�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂.",
         "writeCompanyTel": "�쟾�솕踰덊샇瑜� �엯�젰�빐二쇱꽭�슂.",
         "writeTel": "�쟾�솕踰덊샇瑜� �엯�젰�븯�뀛�빞 異붽��븷�닔 �엳�뒿�땲�떎.",
+        "ipRangeError": "IP ���뿭�� �엯�젰 �떎�뙣",
+        "ipStartNotLargerThanEnd": "�떆�옉 IP媛� �걹 IP 蹂대떎 �겢 �닔 �뾾�뒿�땲�떎.",
+        "ipRangeNotEnter": "�떆�옉 IP�� �걹 IP 紐⑤몢 �엯�젰 �빐�빞 �빀�땲�떎.",
+        "ipRangeNotOverlap": "以묐났�릺�뒗 ip ���뿭��媛� 議댁옱�빀�땲�떎.",
+        "writeCompanyIpRange": "IP ���뿭��瑜� �엯�젰�빐二쇱꽭�슂.",
+        "writeIpRange": "IP ���뿭��瑜� �엯�젰�븯�뀛�빞 異붽��븷�닔 �엳�뒿�땲�떎.",
         "registerExcelCompanyFields": "�뿊��濡� �뾽泥� �벑濡앺븯湲�",
         "registerExcelUploadCompanyField": "�뿊�� �뾽濡쒕뱶 �뾽泥� �벑濡�",
         "succeededCompanyFieldRegistration": "�뾽泥� �벑濡� �꽦怨�",
diff --git a/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js
index e2a2c5c..5465d18 100644
--- a/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js
+++ b/src/main/webapp/scripts/app/companyField/companyFieldAdd.controller.js
@@ -23,8 +23,10 @@
                     getStatusListCallBack : getStatusListCallBack,
                     addTel : addTel,
                     addMail : addMail,
+                    addIpRange : addIpRange,
                     removeTelInput : removeTelInput,
-                    removeMailInput : removeMailInput
+                    removeMailInput : removeMailInput,
+                    removeIpRangeInput : removeIpRangeInput
                 };
 
                 $scope.vm = {
@@ -52,9 +54,13 @@
                         statusId : "",
                         status : "", //�긽�깭
                         inputTels : [0], //�뿰�씫泥�
-                        tels : {},
+                        tels : [],
                         inputMails : [0], //�씠硫붿씪
-                        emails : {}
+                        emails : [],
+                        inputIpStarts : [0], //ip �떆�옉�젏
+                        ipStarts : [],
+                        inputIpEnds : [0], //ip 醫낅즺�젏
+                        ipEnds : []
                     },
                     typeCategory : {
                         companyType : "COMPANYTYPE",
@@ -260,8 +266,30 @@
                             }
                             return url;
                         })(),
-                        ipStart : $scope.vm.form.ipStart, // ip�떆�옉二쇱냼
-                        ipEnd : $scope.vm.form.ipEnd, // ip醫낅즺二쇱냼
+                        ipStarts : (function () {
+                            var ipStarts = [];
+                            if ($scope.vm.form.ipStarts != null) {
+                                angular.forEach($scope.vm.form.ipStarts, function (ipS) {
+                                    ipStarts.push(ipS);
+                                });
+                                ipStarts  = ipStarts.filter(function(item) { //�벐�젅湲� �뜲�씠�꽣 �븘�꽣留�
+                                    return item !== null && item !== undefined && item !== '';
+                                });
+                            }
+                            return ipStarts;
+                        })(),
+                        ipEnds : (function () {
+                            var ipEnds = [];
+                            if ($scope.vm.form.ipEnds != null) {
+                                angular.forEach($scope.vm.form.ipEnds, function (ipE) {
+                                    ipEnds.push(ipE);
+                                });
+                                ipEnds  = ipEnds.filter(function(item) { //�벐�젅湲� �뜲�씠�꽣 �븘�꽣留�
+                                    return item !== null && item !== undefined && item !== '';
+                                });
+                            }
+                            return ipEnds;
+                        })(),
                         memo : $scope.vm.form.memo,  //鍮꾧퀬
                         companyTypeId : (function () {
                             var companyTypeId = null;
@@ -303,6 +331,13 @@
                         statusName : $scope.vm.form.status
                     };
 
+                    //  ip ���뿭�� �쑀�슚�꽦 泥댄겕
+                    let result = ipRangeChk(content.ipStarts, content.ipEnds);
+                    if (!result) {
+                        $rootScope.spinner = false;
+                        return;
+                    }
+                    
                     CompanyField.add($resourceProvider.getContent(content,
                         $resourceProvider.getPageContent(0, 10))).then(function (result) {
 
@@ -312,12 +347,62 @@
                             $rootScope.$broadcast("getPageList", {});
                         }
                         else {
-                            SweetAlert.error($filter("translate")("companyField.failedCompanyFieldRegistration"), result.data.message.message);
+                            SweetAlert.warning($filter("translate")("companyField.failedCompanyFieldRegistration"), result.data.message.message);
                         }
 
                         $rootScope.spinner = false;
                     });
+                }
+                
+                //  ip ���뿭�� �쑀�슚�꽦 寃��궗
+                function ipRangeChk(ipStarts, ipEnds) {
+                    let result = true;
 
+                    if ($rootScope.isDefined(ipStarts) && $rootScope.isDefined(ipEnds)) {
+                        if (ipStarts.length !== ipEnds.length) {
+                            SweetAlert.warning($filter("translate")("companyField.ipRangeError"), $filter("translate")("companyField.ipRangeNotEnter"));
+                            result = false;
+                            return;
+                        }
+
+                        let ipStartArr = [];
+                        let ipEndArr = [];
+
+                        for (let i=0; i<ipStarts.length; i++) {
+                            let ipStart = ipToLong(ipStarts[i]);
+                            let ipEnd = ipToLong(ipEnds[i]);
+                            if (ipEnd < ipStart) {
+                                SweetAlert.warning($filter("translate")("companyField.ipRangeError"), $filter("translate")("companyField.ipStartNotLargerThanEnd"));
+                                result = false;
+                                return;
+                            }
+                            ipStartArr.push(ipStart);
+                            ipEndArr.push(ipEnd);
+                        }
+
+                        for (let i=0; i<ipStartArr.length; i++) {
+                            if ($rootScope.isDefined(ipStartArr[i+1])) {
+                                if((ipStartArr[i] >= ipStartArr[i+1] && ipStartArr[i] <= ipEndArr[i+1])
+                                    || (ipEndArr[i] >= ipStartArr[i+1] && ipEndArr[i] <= ipEndArr[i+1])) {
+                                    SweetAlert.warning($filter("translate")("companyField.ipRangeError"), $filter("translate")("companyField.ipRangeNotOverlap"));
+                                    result = false;
+                                    return;
+                                }
+                            }
+                        }
+                    }
+                    return result;
+                }
+                
+                //  ip 二쇱냼 �닽�옄濡� 蹂��솚
+                function ipToLong(ip) {
+                    let result = 0;
+                    let ipArr = ip.split(".");
+
+                    for (let i=0; i<ipArr.length; i++) {
+                        result += parseInt(ipArr[i]) * Math.pow(256, 3-i);
+                    }
+                    return result;
                 }
 
                 // �뿰�씫泥� input 李� 異붽� 踰꾪듉
@@ -358,14 +443,53 @@
                     }
                 }
 
+                // IPRange input 李� 異붽� 踰꾪듉
+                function addIpRange() {
+                    var arrayFull = true;      // 諛곗뿴�씠 媛��뱷 李� �엳�뒗吏� �뿬遺�
+                    var startIdx = 0;
+                    var endIdx = 0;
+                    $scope.vm.form.inputIpStarts.forEach(function (start) {
+                        if (!$rootScope.isDefined($scope.vm.form.ipStarts[startIdx])) {
+                            arrayFull = false;
+                        }
+                        startIdx++;
+                    });
+
+                    $scope.vm.form.inputIpEnds.forEach(function (start) {
+                        if (!$rootScope.isDefined($scope.vm.form.ipEnds[endIdx])) {
+                            arrayFull = false;
+                        }
+                        endIdx++;
+                    });
+
+                    if (arrayFull) {
+                        $scope.vm.form.inputIpStarts.push(startIdx);
+                        $scope.vm.form.ipStarts[startIdx] = "";
+                        $scope.vm.form.inputIpEnds.push(endIdx);
+                        $scope.vm.form.ipEnds[endIdx] = "";
+                    } else {
+                        SweetAlert.warning($filter("translate")("companyField.writeCompanyIpRange"), $filter("translate")("companyField.writeIpRange")); // 異붽�踰꾪듉 寃쎄퀬
+                    }
+                }
+
                 // �뿰�씫泥� input �궘�젣
                 function removeTelInput(index) {
                     $scope.vm.form.inputTels.splice(index, 1);
+                    $scope.vm.form.tels.splice(index, 1);
                 }
 
                 // �씠硫붿씪 二쇱냼 input �궘�젣
                 function removeMailInput(index) {
                     $scope.vm.form.inputMails.splice(index, 1);
+                    $scope.vm.form.emails.splice(index, 1);
+                }
+
+                // ipRange input �궘�젣
+                function removeIpRangeInput(index) {
+                    $scope.vm.form.inputIpStarts.splice(index, 1);
+                    $scope.vm.form.ipStarts.splice(index, 1);
+                    $scope.vm.form.inputIpEnds.splice(index, 1);
+                    $scope.vm.form.ipEnds.splice(index, 1);
                 }
 
                 //  �뙘�뾽 李� �떕湲�
diff --git a/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js
index de4a45f..0a71bb4 100644
--- a/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js
+++ b/src/main/webapp/scripts/app/companyField/companyFieldModify.controller.js
@@ -25,8 +25,10 @@
                     getStatusListCallBack : getStatusListCallBack,
                     addTel : addTel,
                     addMail : addMail,
+                    addIpRange : addIpRange,
                     removeTelInput : removeTelInput,
-                    removeMailInput : removeMailInput
+                    removeMailInput : removeMailInput,
+                    removeIpRangeInput : removeIpRangeInput
                 };
 
                 $scope.vm = {
@@ -55,9 +57,13 @@
                         statusId : "",
                         status : "", //�긽�깭
                         inputTels : [0],
-                        tels : {},
+                        tels : [],
                         inputMails : [0],
-                        emails : {}
+                        emails : [],
+                        inputIpStarts : [0], //ip �떆�옉�젏
+                        ipStarts : [],
+                        inputIpEnds : [0], //ip 醫낅즺�젏
+                        ipEnds : []
                     },
                     typeCategory : {
                         companyType : "COMPANYTYPE",
@@ -270,8 +276,30 @@
                             }
                             return url;
                         })(),
-                        ipStart : $scope.vm.form.ipStart, // ip�떆�옉二쇱냼
-                        ipEnd : $scope.vm.form.ipEnd, // ip醫낅즺二쇱냼
+                        ipStarts : (function () {
+                            var ipStarts = [];
+                            if ($scope.vm.form.ipStarts != null) {
+                                angular.forEach($scope.vm.form.ipStarts, function (ipS) {
+                                    ipStarts.push(ipS);
+                                });
+                                ipStarts  = ipStarts.filter(function(item) { //�벐�젅湲� �뜲�씠�꽣 �븘�꽣留�
+                                    return item !== null && item !== undefined && item !== '';
+                                });
+                            }
+                            return ipStarts;
+                        })(),
+                        ipEnds : (function () {
+                            var ipEnds = [];
+                            if ($scope.vm.form.ipEnds != null) {
+                                angular.forEach($scope.vm.form.ipEnds, function (ipE) {
+                                    ipEnds.push(ipE);
+                                });
+                                ipEnds  = ipEnds.filter(function(item) { //�벐�젅湲� �뜲�씠�꽣 �븘�꽣留�
+                                    return item !== null && item !== undefined && item !== '';
+                                });
+                            }
+                            return ipEnds;
+                        })(),
                         memo : $scope.vm.form.memo,
                         companyTypeId : (function () {
                             var companyTypeId = null;
@@ -377,14 +405,53 @@
                     }
                 }
 
+                // IPRange input 李� 異붽� 踰꾪듉
+                function addIpRange() {
+                    var arrayFull = true;      // 諛곗뿴�씠 媛��뱷 李� �엳�뒗吏� �뿬遺�
+                    var startIdx = 0;
+                    var endIdx = 0;
+                    $scope.vm.form.inputIpStarts.forEach(function (start) {
+                        if (!$rootScope.isDefined($scope.vm.form.ipStarts[startIdx])) {
+                            arrayFull = false;
+                        }
+                        startIdx++;
+                    });
+
+                    $scope.vm.form.inputIpEnds.forEach(function (start) {
+                        if (!$rootScope.isDefined($scope.vm.form.ipEnds[endIdx])) {
+                            arrayFull = false;
+                        }
+                        endIdx++;
+                    });
+
+                    if (arrayFull) {
+                        $scope.vm.form.inputIpStarts.push(startIdx);
+                        $scope.vm.form.ipStarts[startIdx] = "";
+                        $scope.vm.form.inputIpEnds.push(endIdx);
+                        $scope.vm.form.ipEnds[endIdx] = "";
+                    } else {
+                        SweetAlert.warning($filter("translate")("companyField.writeCompanyIpRange"), $filter("translate")("companyField.writeIpRange")); // 異붽�踰꾪듉 寃쎄퀬
+                    }
+                }
+
                 // �뿰�씫泥� input �궘�젣
                 function removeTelInput(index) {
                     $scope.vm.form.inputTels.splice(index, 1);
+                    $scope.vm.form.tels.splice(index, 1);
                 }
 
                 // �씠硫붿씪 二쇱냼 input �궘�젣
                 function removeMailInput(index) {
                     $scope.vm.form.inputMails.splice(index, 1);
+                    $scope.vm.form.emails.splice(index, 1);
+                }
+
+                // ipRange input �궘�젣
+                function removeIpRangeInput(index) {
+                    $scope.vm.form.inputIpStarts.splice(index, 1);
+                    $scope.vm.form.ipStarts.splice(index, 1);
+                    $scope.vm.form.inputIpEnds.splice(index, 1);
+                    $scope.vm.form.ipEnds.splice(index, 1);
                 }
 
                 //  �뙘�뾽 李� �떕湲�
@@ -453,6 +520,48 @@
                                     $scope.vm.form.emails = angular.copy(inputMails);
                                 }
 
+                                if (result.data.content.ipStart != null) {
+                                    var inputIpStarts = $scope.vm.form.inputIpStarts;
+                                    var ipStarts = result.data.content.ipStart
+                                    if (result.data.content.ipStart.indexOf("[") !== -1){
+                                        ipStarts = result.data.content.ipStart.substr(1, result.data.content.ipStart.indexOf("]")-1);
+                                    }
+                                    var ipStartArr = ipStarts.split(",");
+                                    angular.forEach(ipStartArr, function (ipS) {
+                                        var ipStart = ipS.trim();
+                                        inputIpStarts.push(ipStart);
+                                    });
+                                    inputIpStarts = inputIpStarts.filter(function(item) {
+                                        return item !== null && item !== undefined && item !== '';
+                                    });
+                                    if(inputIpStarts[0] === 0 || inputIpStarts[0] === "") { // 泥ル쾲吏� 諛곗뿴�� 怨듬갚�쑝濡�
+                                        inputIpStarts.shift();
+                                    }
+                                    inputIpStarts.push("");
+                                    $scope.vm.form.ipStarts = angular.copy(inputIpStarts);
+                                }
+
+                                if (result.data.content.ipEnd != null) {
+                                    var inputIpEnds = $scope.vm.form.inputIpEnds;
+                                    var ipEnds = result.data.content.ipEnd
+                                    if (result.data.content.ipEnd.indexOf("[") !== -1){
+                                        ipEnds = result.data.content.ipEnd.substr(1, result.data.content.ipEnd.indexOf("]")-1);
+                                    }
+                                    var ipEndArr = ipEnds.split(",");
+                                    angular.forEach(ipEndArr, function (ipS) {
+                                        var ipEnd = ipS.trim();
+                                        inputIpEnds.push(ipEnd);
+                                    });
+                                    inputIpEnds = inputIpEnds.filter(function(item) {
+                                        return item !== null && item !== undefined && item !== '';
+                                    });
+                                    if(inputIpEnds[0] === 0 || inputIpEnds[0] === "") { // 泥ル쾲吏� 諛곗뿴�� 怨듬갚�쑝濡�
+                                        inputIpEnds.shift();
+                                    }
+                                    inputIpEnds.push("");
+                                    $scope.vm.form.ipEnds = angular.copy(inputIpEnds);
+                                }
+
                                 $scope.vm.form.url = result.data.content.url;
                                 $scope.vm.form.ipStart = result.data.content.ipStart;
                                 $scope.vm.form.ipEnd = result.data.content.ipEnd;
diff --git a/src/main/webapp/views/companyField/companyFieldAdd.html b/src/main/webapp/views/companyField/companyFieldAdd.html
index 2f7d840..bf104c4 100644
--- a/src/main/webapp/views/companyField/companyFieldAdd.html
+++ b/src/main/webapp/views/companyField/companyFieldAdd.html
@@ -53,45 +53,58 @@
             </div>
 
             <div class="row">
-                <div class="col-lg-6 mw-49">
+                <div class="col-lg-5 mw-49">
                     <div class="form-group">
                         <label for="companyFieldAddForm11" class="issue-label">
                             <span translate="companyField.ipRange">ip ���뿭��</span>
                         </label>
-                        <input id="companyFieldAddForm11"
-                               name="ipStart"
-                               type="text"
-                               class="form-control"
-                               kr-input
-                               ng-pattern="/^(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]?)$/"
-                               placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
-                               autocomplete="off"
-                               ng-model="vm.form.ipStart"
-                        >
+                        <div ng-repeat="s in vm.form.inputIpStarts" style="display: flex">
+                            <input id="companyFieldAddForm11"
+                                   name="ipStart"
+                                   type="text"
+                                   class="form-control mt-1"
+                                   kr-input
+                                   ng-model="vm.form.ipStarts[$index]"
+                                   ng-pattern="/^(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]?)$/"
+                                   placeholder="IP �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
+                                   autocomplete="off"
+                                   style="width: 189px;"
+                            >
+                            <div class="issue-label select3-selection__ipRange__tilde">~</div>
+                        </div>
                         <div ng-if="companyFieldAddForm.ipStart.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                         </div>
                     </div>
                 </div>
-                <div class="mt-30">
-                    <label class="issue-label">~</label>
-                </div>
-                <div class="col-lg-6 mw-49">
+                <div class="col-lg-5 mw-49" style="margin-top: 4px;">
                     <div class="form-group">
                         <label for="companyFieldAddForm12" class="issue-label"></label>
-                        <input id="companyFieldAddForm12"
-                               name="ipEnd"
-                               type="text"
-                               class="form-control"
-                               kr-input
-                               ng-pattern="/^(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]?)$/"
-                               placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
-                               autocomplete="off"
-                               ng-model="vm.form.ipEnd"
-                        >
+                        <div ng-repeat="e in vm.form.inputIpEnds" style="display: flex">
+                            <input id="companyFieldAddForm12"
+                                   name="ipEnd"
+                                   type="text"
+                                   class="form-control mt-1"
+                                   kr-input
+                                   ng-model="vm.form.ipEnds[$index]"
+                                   ng-pattern="/^(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]?)$/"
+                                   placeholder="IP �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
+                                   autocomplete="off"
+                                   style="width: 189px;"
+                            >
+                            <div class="select3-selection__ipRange__remove"
+                                 ng-click="fn.removeIpRangeInput($index)">횞</div>
+                        </div>
                         <div ng-if="companyFieldAddForm.ipEnd.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                         </div>
+                    </div>
+                </div>
+                <div class="col-lg-2 mt-25" style="margin-left: -15px">
+                    <div>
+                        <button type="button" class="btn btn-secondary" ng-click="fn.addIpRange()">
+                            <span translate="common.add">異붽�</span>
+                        </button>
                     </div>
                 </div>
             </div>
@@ -158,14 +171,14 @@
                         </div>-->
                     </div>
                 </div>
-                <div class="col-lg-2 mt-25" style="margin-left: -15px">
+                <div class="col-lg-2" style="margin-left: -19px; margin-top: 28px;">
                     <div>
                         <button type="button" class="btn btn-secondary" ng-click="fn.addTel()">
                             <span translate="common.add">異붽�</span>
                         </button>
                     </div>
                 </div>
-                <div class="col-lg-5">
+                <div class="col-lg-5 ml--12">
                     <div class="form-group">
                         <label class="issue-label">
                             <span translate="companyField.email">�씠硫붿씪</span>
@@ -185,7 +198,7 @@
                         </div>
                     </div>
                 </div>
-                <div class="col-lg-2 mt-25" style="margin-left: -15px; margin-right: -16px;">
+                <div class="col-lg-2" style="margin-left: -19px; margin-right: -16px; margin-top: 28px;">
                     <div>
                         <button type="button" class="btn btn-secondary" ng-click="fn.addMail()">
                             <span translate="common.add">異붽�</span>
diff --git a/src/main/webapp/views/companyField/companyFieldModify.html b/src/main/webapp/views/companyField/companyFieldModify.html
index 33ed903..1602c25 100644
--- a/src/main/webapp/views/companyField/companyFieldModify.html
+++ b/src/main/webapp/views/companyField/companyFieldModify.html
@@ -50,48 +50,60 @@
                 </div>-->
             </div>
             <div class="row">
-                <div class="col-lg-6 mw-49">
+                <div class="col-lg-5 mw-49">
                     <div class="form-group">
                         <label for="companyFieldModifyForm11" class="issue-label">
                             <span translate="companyField.ipRange">ip ���뿭��</span>
                         </label>
-                        <input id="companyFieldModifyForm11"
-                               name="ipStart"
-                               type="text"
-                               class="form-control"
-                               kr-input
-                               ng-pattern="/^(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]?)$/"
-                               placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
-                               autocomplete="off"
-                               ng-model="vm.form.ipStart"
-                        >
+                        <div ng-repeat="s in vm.form.inputIpStarts" style="display: flex">
+                            <input id="companyFieldModifyForm11"
+                                   name="ipStart"
+                                   type="text"
+                                   class="form-control mt-1"
+                                   kr-input
+                                   ng-model="vm.form.ipStarts[$index]"
+                                   ng-pattern="/^(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]?)$/"
+                                   placeholder="IP �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
+                                   autocomplete="off"
+                                   style="width: 189px;"
+                            >
+                            <div class="issue-label select3-selection__ipRange__tilde">~</div>
+                        </div>
                         <div ng-if="companyFieldModifyForm.ipStart.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                         </div>
                     </div>
                 </div>
-                <div class="mt-30">
-                    <label class="issue-label">~</label>
-                </div>
-                <div class="col-lg-6 mw-49">
+                <div class="col-lg-5 mw-49" style="margin-top: 4px;">
                     <div class="form-group">
-                        <label for="companyFieldModifyForm12" class="issue-label">
-                        </label>
-                        <input id="companyFieldModifyForm12"
-                               name="ipEnd"
-                               type="text"
-                               class="form-control"
-                               kr-input
-                               ng-pattern="/^(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]?)$/"
-                               placeholder="IP 二쇱냼 �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
-                               autocomplete="off"
-                               ng-model="vm.form.ipEnd"
-                        >
+                        <label for="companyFieldModifyForm12" class="issue-label"></label>
+                        <div ng-repeat="e in vm.form.inputIpEnds" style="display: flex">
+                            <input id="companyFieldModifyForm12"
+                                   name="ipEnd"
+                                   type="text"
+                                   class="form-control mt-1"
+                                   kr-input
+                                   ng-model="vm.form.ipEnds[$index]"
+                                   ng-pattern="/^(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]?)$/"
+                                   placeholder="IP �삎�떇留� �엯�젰 媛��뒫�빀�땲�떎."
+                                   autocomplete="off"
+                                   style="width: 189px;"
+                            >
+                            <div class="select3-selection__ipRange__remove"
+                                 ng-click="fn.removeIpRangeInput($index)">횞</div>
+                        </div>
                         <div ng-if="companyFieldModifyForm.ipEnd.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                         </div>
                     </div>
                 </div>
+                <div class="col-lg-2 mt-25" style="margin-left: -15px">
+                    <div>
+                        <button type="button" class="btn btn-secondary" ng-click="fn.addIpRange()">
+                            <span translate="common.add">異붽�</span>
+                        </button>
+                    </div>
+                </div>
             </div>
             <div class="row">
                 <div class="col-lg-6">

--
Gitblit v1.8.0