From c5ce099b314be4b296137415a146c610095ae92e Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 금, 11 3월 2022 13:54:09 +0900
Subject: [PATCH] - api로 이슈 추가 시 하위이슈기준이 2개 일 경우 코드 수정 - 업체 추가/수정 시 ip대역대 중복 체크 - 이슈 추가/수정 시 ip대역대 수정불가

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java        |   10 +++
 src/main/java/kr/wisestone/owl/util/ConvertUtil.java                     |   15 ++++-
 src/main/webapp/views/issue/issueAddDown.html                            |    8 +-
 src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java            |    3 +
 src/main/webapp/views/issue/issueAdd.html                                |    8 +-
 src/main/resources/mybatis/query-template/companyField-template.xml      |   35 +++++++++++
 src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java |   61 ++++++++++++++------
 src/main/webapp/views/issue/issueAddRelation.html                        |    8 +-
 src/main/webapp/views/issue/issueModify.html                             |    8 +-
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java                |    1 
 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties                   |    1 
 src/main/webapp/assets/styles/main.css                                   |   15 ++--
 12 files changed, 128 insertions(+), 45 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index 9e00613..73db78c 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -290,6 +290,7 @@
     public static final String EMAIL_NOT_INVALID = "EMAIL_NOT_INVALID";   //  �씠硫붿씪 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
     public static final String IP_NOT_INVALID = "IP_NOT_INVALID";   //  IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
     public static final String IP_START_NOT_LARGER_THAN_END = "IP_START_NOT_LARGER_THAN_END";   //  �떆�옉 IP媛� �걹 IP 蹂대떎 �겢 �닔 �뾾�뒿�땲�떎.
+    public static final String COMPANY_EXIST_IP = "COMPANY_EXIST_IP";   //  �빐�떦 ip ���뿭���뒗 �씠誘� 議댁옱�빀�땲�떎.
 
     public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT";   // �꽑�깮�븳 遺��꽌 以� �봽濡쒖젥�듃�뿉 李몄뿬�븯怨� �엳吏� �븡�� 遺��꽌媛� �엳�뒿�땲�떎.
     public static final String PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW = "PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW"; // �빐�떦 �봽濡쒖젥�듃�뿉 �냽�빐�엳�뒗 �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�뒗 �봽濡쒖젥�듃�쓽 �떞�떦遺��꽌�뿉�꽌 �젣�쇅�떆�궗 �닔 �뾾�뒿�땲�떎.
diff --git a/src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java b/src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java
index 4632105..63d8ab2 100644
--- a/src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java
+++ b/src/main/java/kr/wisestone/owl/mapper/CompanyFieldMapper.java
@@ -24,4 +24,7 @@
 
     List<CompanyField> findByUrlsAndIdNot(CompanyFieldCondition companyFieldCondition);
 
+    List<CompanyField> findByIps(CompanyFieldCondition companyFieldCondition);
+
+    List<CompanyField> findByIpsAndIdNot(CompanyFieldCondition companyFieldCondition);
 }
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 9b50065..a261137 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java
@@ -86,7 +86,7 @@
 
         if (companyFieldForm.getIpStart() != null && companyFieldForm.getIpEnd() != null) {
             //  �븘�씠�뵾 �쑀�슚�꽦 泥댄겕
-            this.verifyIp(companyFieldForm.getIpStart(), companyFieldForm.getIpEnd());
+            this.verifyIp(companyFieldForm.getIpStart(), companyFieldForm.getIpEnd(), null);
         }
 
         if (companyFieldForm.getUrl() != null) {
@@ -119,21 +119,41 @@
      * IP �쑀�슚�꽦 泥댄겕
      * @param ip String
      */
-    private void verifyIp(String ip, String ip2) {
-        if (ip2 == null) {
-            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));
-                }
+    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));
             }
-        } else {
-            if (!StringUtils.isEmpty(ip)) {
-                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));
-                }
+        }
+        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();
+            condition.setIpStart(String.valueOf(ipStart));
+            condition.setIpEnd(String.valueOf(ipEnd));
+            if (id != null) {
+                condition.setId(id);
+                companyFields = this.companyFieldMapper.findByIpsAndIdNot(condition);
+            } else {
+                companyFields = this.companyFieldMapper.findByIps(condition);
+            }
+
+            //  IP���뿭�� 以묐났 泥댄겕
+            if (companyFields != null && companyFields.size() > 0) {
+                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.COMPANY_EXIST_IP));
             }
         }
     }
@@ -276,6 +296,11 @@
     public void modifyCompany(CompanyFieldForm companyFieldForm) {
         //  �뾽泥대챸 �쑀�슚�꽦 泥댄겕
         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 �쑀�슚�꽦 泥댄겕
@@ -472,7 +497,7 @@
                     //  �뾽泥대줈 �벑濡앺븯湲� �쐞�빐 CompanyFieldForm �뿉 �뜲�씠�꽣瑜� �뀑�똿�븳�떎.
                     CompanyFieldForm newCompanyFieldForm = this.setCompanyFieldFormToExcelField(row, (rowIndex + 1), ispFieldMaps, hostingFieldMaps, companyTypeMaps, parentSectorMaps, childSectorMaps, regionMaps, statusMaps, headers);
                     //  ip �쑀�슚�꽦 泥댄겕
-                    this.verifyIp(newCompanyFieldForm.getIpStart(), newCompanyFieldForm.getIpEnd());
+                    this.verifyIp(newCompanyFieldForm.getIpStart(), newCompanyFieldForm.getIpEnd(), null);
 
                     companyFieldForms.add(newCompanyFieldForm);
                 }
@@ -651,7 +676,7 @@
             if (ipEnd.contains(" ")) {
                 ipEnd = ipEnd.replace(" ", "");
             }
-            this.verifyIp(ipEnd, null); //ip �쑀�슚�꽦 寃��궗
+            this.verifyIp(ipEnd, null, null); //ip �쑀�슚�꽦 寃��궗
 
             companyFieldForm.setIpEnd(ipEnd);
         }
@@ -662,7 +687,7 @@
             if (ipStart.contains(" ")) {
                 ipStart = ipStart.replace(" ", "");
             }
-            this.verifyIp(ipStart, null); //ip �쑀�슚�꽦 寃��궗
+            this.verifyIp(ipStart, null, null); //ip �쑀�슚�꽦 寃��궗
 
             companyFieldForm.setIpStart(ipStart);
         }
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 11bdddd..6cd7ff7 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -566,7 +566,15 @@
 //            issueCustomFieldValueCondition.setIssueStatusType("CLOSE");
             List<Map<String, Object>> results = Lists.newArrayList();
             if (customFieldType.equals(IP_ADDRESS.toString()) && issueForm.getIssueCompanyFields() != null && issueForm.getIssueCompanyFields().size() > 0) {
-                long ipValue = ConvertUtil.ipToLong(concatUseValue);
+                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));
                 //  �븯�쐞�씠�뒋議곌굔�쓽 ���엯�씠 IP�씪 寃쎌슦 媛숈� �뾽泥댁젙蹂댁씤 �씠�뒋 李얘린
                 results = this.issueMapper.findByCustomFieldValueOfIp(issueCustomFieldValueCondition);
diff --git a/src/main/java/kr/wisestone/owl/util/ConvertUtil.java b/src/main/java/kr/wisestone/owl/util/ConvertUtil.java
index 4ad54b3..bf303f0 100644
--- a/src/main/java/kr/wisestone/owl/util/ConvertUtil.java
+++ b/src/main/java/kr/wisestone/owl/util/ConvertUtil.java
@@ -8,6 +8,7 @@
 import kr.wisestone.owl.vo.CompanyFieldVo;
 import kr.wisestone.owl.vo.IspFieldVo;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -17,6 +18,7 @@
 import java.lang.reflect.Method;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.regex.Pattern;
 
 public class ConvertUtil {
     static final Logger LOGGER = LoggerFactory.getLogger(ConvertUtil.class);
@@ -565,11 +567,18 @@
      */
     public static long ipToLong(String ipAddress) {
         long result = 0;
-        String[] ipAddressArr = ipAddress.split("\\.");
+        String reg = "^(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]?)$";
+        if (!StringUtils.isEmpty(ipAddress) && !Pattern.matches(reg, ipAddress)) {
+            return result;
+        } else {
+            String[] ipAddressArr = ipAddress.split("\\.");
 
-        for (int i=0; i<ipAddressArr.length; i++) {
-            result += Integer.parseInt(ipAddressArr[i]) * Math.pow(256, 3-i);
+            for (int i=0; i<ipAddressArr.length; i++) {
+                result += Integer.parseInt(ipAddressArr[i]) * Math.pow(256, 3-i);
+            }
         }
+
         return result;
     }
 
diff --git a/src/main/resources/mybatis/query-template/companyField-template.xml b/src/main/resources/mybatis/query-template/companyField-template.xml
index 4973732..d7ce60a 100644
--- a/src/main/resources/mybatis/query-template/companyField-template.xml
+++ b/src/main/resources/mybatis/query-template/companyField-template.xml
@@ -107,4 +107,39 @@
             AND cf.id not like CONCAT('%',#{id},'%')
         </if>
     </select>
+
+    <select id="findByIps" resultType="kr.wisestone.owl.domain.CompanyField" parameterType="kr.wisestone.owl.web.condition.CompanyFieldCondition">
+        SELECT
+        cf.id as id,
+        cf.name as name,
+        cf.email as email,
+        cf.url as url
+        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}
+            </when>
+        </choose>
+    </select>
+
+    <select id="findByIpsAndIdNot" resultType="kr.wisestone.owl.domain.CompanyField" parameterType="kr.wisestone.owl.web.condition.CompanyFieldCondition">
+        SELECT
+        cf.id as id,
+        cf.name as name,
+        cf.email as email,
+        cf.url as url
+        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})
+            </when>
+        </choose>
+        <if test="id != '' and id != null">
+            AND cf.id not like CONCAT('%',#{id},'%')
+        </if>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
index c55a9da..e1e3ff9 100644
--- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
+++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -272,3 +272,4 @@
 EMAIL_NOT_INVALID=\uC774\uBA54\uC77C \uD615\uC2DD\uC774 \uB9DE\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
 IP_NOT_INVALID=IP\uC8FC\uC18C \uD615\uC2DD\uC774 \uB9DE\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
 IP_START_NOT_LARGER_THAN_END=\uC2DC\uC791 IP\uAC00 \uB05D IP \uBCF4\uB2E4 \uD074 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
+COMPANY_EXIST_IP=\uD574\uB2F9 ip \uB300\uC5ED\uB300\uB294 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4.
diff --git a/src/main/webapp/assets/styles/main.css b/src/main/webapp/assets/styles/main.css
index 5158252..d877d3c 100644
--- a/src/main/webapp/assets/styles/main.css
+++ b/src/main/webapp/assets/styles/main.css
@@ -1484,13 +1484,6 @@
         max-width: 25%;
     }
 
-    .col-lg-3-2 {
-        -webkit-box-flex: 0;
-        -ms-flex: 0 0 25%;
-        flex: 0 0 32.4%;
-        max-width: 32.4%;
-    }
-
     .col-lg-4 {
         -webkit-box-flex: 0;
         -ms-flex: 0 0 33.3333333333%;
@@ -7778,6 +7771,10 @@
 .ml-5,
 .mx-5 {
     margin-left: 3rem !important;
+}
+
+.ml--4 {
+    margin-left: -4px !important;
 }
 
 .ml--12 {
@@ -28596,6 +28593,10 @@
     margin-top: -14px; !important;
 }
 
+.mr--4 {
+    margin-right: -4px !important;
+}
+
 .ml-10 {
     margin-left: 10px !important;
 }
diff --git a/src/main/webapp/views/issue/issueAdd.html b/src/main/webapp/views/issue/issueAdd.html
index bdc533e..fcd17cc 100644
--- a/src/main/webapp/views/issue/issueAdd.html
+++ b/src/main/webapp/views/issue/issueAdd.html
@@ -484,7 +484,7 @@
                         </div>-->
                     </div>
                 </div>
-                <div class="col-lg-3-2">
+                <div class="col-lg-4">
                     <div class="form-group mgb5">
                         <label for="companyFieldUrlAddForm" class="issue-label"><span translate="companyField.url">url</span></label>
                         <input id="companyFieldUrlAddForm"
@@ -510,16 +510,16 @@
                                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.ipStart"
+                               disabled
                         >
                         <div ng-if="issueAddForm.ipStart.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                         </div>
                     </div>
                 </div>
-                <div class="mt-30">
+                <div class="mt-30 ml--4 mr--4">
                     <label class="issue-label">~</label>
                 </div>
                 <div class="col-lg-2 mt-1">
@@ -531,9 +531,9 @@
                                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.ipEnd"
+                               disabled
                         >
                         <div ng-if="issueAddForm.ipEnd.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
diff --git a/src/main/webapp/views/issue/issueAddDown.html b/src/main/webapp/views/issue/issueAddDown.html
index 9b41029..eb54a87 100644
--- a/src/main/webapp/views/issue/issueAddDown.html
+++ b/src/main/webapp/views/issue/issueAddDown.html
@@ -450,7 +450,7 @@
                         </div>-->
                     </div>
                 </div>
-                <div class="col-lg-3-2">
+                <div class="col-lg-4">
                     <div class="form-group mgb5">
                         <label for="companyFieldUrlAddForm" class="issue-label"><span translate="companyField.url">url</span></label>
                         <input id="companyFieldUrlAddForm"
@@ -476,16 +476,16 @@
                                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.ipStart"
+                               disabled
                         >
                         <div ng-if="issueAddDownForm.ipStart.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                         </div>
                     </div>
                 </div>
-                <div class="mt-30">
+                <div class="mt-30 ml--4 mr--4">
                     <label class="issue-label">~</label>
                 </div>
                 <div class="col-lg-2 mt-1">
@@ -497,9 +497,9 @@
                                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.ipEnd"
+                               disabled
                         >
                         <div ng-if="issueAddDownForm.ipEnd.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
diff --git a/src/main/webapp/views/issue/issueAddRelation.html b/src/main/webapp/views/issue/issueAddRelation.html
index 5bf1a34..4796601 100644
--- a/src/main/webapp/views/issue/issueAddRelation.html
+++ b/src/main/webapp/views/issue/issueAddRelation.html
@@ -453,7 +453,7 @@
                         </div>-->
                     </div>
                 </div>
-                <div class="col-lg-3-2">
+                <div class="col-lg-4">
                     <div class="form-group mgb5">
                         <label for="companyFieldUrlAddForm" class="issue-label"><span translate="companyField.url">url</span></label>
                         <input id="companyFieldUrlAddForm"
@@ -479,16 +479,16 @@
                                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.ipStart"
+                               disabled
                         >
                         <div ng-if="issueAddRelationForm.ipStart.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                         </div>
                     </div>
                 </div>
-                <div class="mt-30">
+                <div class="mt-30 ml--4 mr--4">
                     <label class="issue-label">~</label>
                 </div>
                 <div class="col-lg-2 mt-1">
@@ -500,9 +500,9 @@
                                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.ipEnd"
+                               disabled
                         >
                         <div ng-if="issueAddRelationForm.ipEnd.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
diff --git a/src/main/webapp/views/issue/issueModify.html b/src/main/webapp/views/issue/issueModify.html
index 50cf7d7..815c011 100644
--- a/src/main/webapp/views/issue/issueModify.html
+++ b/src/main/webapp/views/issue/issueModify.html
@@ -482,7 +482,7 @@
                         </div>-->
                     </div>
                 </div>
-                <div class="col-lg-3-2">
+                <div class="col-lg-4">
                     <div class="form-group mgb5">
                         <label for="companyFieldUrlAddForm" class="issue-label"><span translate="companyField.url">url</span></label>
                         <input id="companyFieldUrlAddForm"
@@ -508,16 +508,16 @@
                                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.ipStart"
+                               disabled
                         >
                         <div ng-if="issueModifyForm.ipStart.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.
                         </div>
                     </div>
                 </div>
-                <div class="mt-30">
+                <div class="mt-30 ml--4 mr--4">
                     <label class="issue-label">~</label>
                 </div>
                 <div class="col-lg-2 mt-1">
@@ -529,9 +529,9 @@
                                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.ipEnd"
+                               disabled
                         >
                         <div ng-if="issueModifyForm.ipEnd.$error.pattern" class="help-block form-text text-danger"
                              translate="common.invalidipAdressFormat">IP二쇱냼 �삎�떇�씠 留욎� �븡�뒿�땲�떎.

--
Gitblit v1.8.0