From 11e27ddf54f5b4e2310591f74e8dd446e65a18ac Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 월, 07 2월 2022 14:31:37 +0900
Subject: [PATCH] 이슈 엑셀 임포트시 상위이슈 null 체크 및 코드 보완

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |   21 +++++++++++++++++----
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java         |    3 +++
 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties            |    3 +++
 src/main/webapp/scripts/app/issue/issueImportExcel.controller.js  |    6 ++++--
 4 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index 85c9443..0e8834c 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -178,6 +178,8 @@
     public static final String EXCEL_IMPORT_SEVERITY_NOT_EXIST = "EXCEL_IMPORT_SEVERITY_NOT_EXIST";   //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 以묒슂�룄 紐낆쑝濡� 寃��깋�릺�뒗 �슦�꽑�닚�쐞媛� �뾾�뒿�땲�떎.
     public static final String EXCEL_IMPORT_PERIOD_NOT_VALIDITY = "EXCEL_IMPORT_PERIOD_NOT_VALIDITY"; //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�븳 �떆�옉�씪, 醫낅즺�씪�뿉 臾몄젣媛� �엳�뒿�땲�떎. �떆�옉�씪�� 醫낅즺�씪蹂대떎 鍮⑤씪�빞 �빀�땲�떎.
     public static final String EXCEL_IMPORT_PERIOD_NOT_VALIDITY_EMPTY = "EXCEL_IMPORT_PERIOD_NOT_VALIDITY_EMPTY"; //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�븳 �떆�옉�씪, 醫낅즺�씪�뿉 臾몄젣媛� �엳�뒿�땲�떎. 怨듬갚�씠 �룷�븿�릺�뼱 �엳�뒗吏� �솗�씤 �썑 怨듬갚�쓣 �젣嫄고븯�꽭�슂.
+    public static final String EXCEL_IMPORT_PERIOD_NOT_DASH = "EXCEL_IMPORT_PERIOD_NOT_DASH"; //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�븳 �떆�옉�씪, 醫낅즺�씪�뿉 臾몄젣媛� �엳�뒿�땲�떎. '-'�씠 �룷�븿�릺�뼱 �엳�뒗吏� �솗�씤 �썑 '-'瑜� �룷�븿 �떆耳쒖<�꽭�슂. ex) 2022-01-01
+    public static final String EXCEL_IMPORT_DATETIME_NOT_DASH = "EXCEL_IMPORT_DATETIME_NOT_DASH"; //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�븳 �궗�슜�옄 �젙�쓽 �븘�뱶�뿉 臾몄젣媛� �엳�뒿�땲�떎. '-'�씠 �룷�븿�릺�뼱 �엳�뒗吏� �솗�씤 �썑 '-'瑜� �룷�븿 �떆耳쒖<�꽭�슂. ex) 2022-01-01
     public static final String EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY = "EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY"; //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�븳 �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪씠 �쑀�슚�븯吏� �븡�뒿�땲�떎.
     public static final String EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST = "EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST";   //  �벑濡앺븯�젮�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 李얠쓣 �닔 �뾾�뒿�땲�떎. �빐�떦 �궗�슜�옄 �젙�쓽�븘�뱶�쓽 �씠由꾩씠 蹂�寃쎈릺�뿀嫄곕굹 �궘�젣�릺�뿀�뒿�땲�떎.
 
@@ -189,6 +191,7 @@
     public static final String EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL = "EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL";   //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �뾽醫�(以묐텇瑜�)�� �뾽醫�(��遺꾨쪟)�뿉 �냽�빐�엳吏� �븡�뒿�땲�떎.
     public static final String EXCEL_IMPORT_PARENT_SECTOR_IS_NULL = "EXCEL_IMPORT_PARENT_SECTOR_IS_NULL";   //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �뾽醫�(以묐텇瑜�)留� �엯�젰 �뻽�뒿�땲�떎. �뾽醫�(��遺꾨쪟)�룄 �엯�젰�씠 �븘�슂�빀�땲�떎.
     public static final String EXCEL_IMPORT_TEL_NOT_STRING_TYPE = "EXCEL_IMPORT_TEL_NOT_STRING_TYPE";   //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �뿰�씫泥섏쓽 �삎�떇�씠 �옒紐� �릺�뿀�뒿�땲�떎.
+    public static final String EXCEL_IMPORT_NOT_STRING_TYPE = "EXCEL_IMPORT_NOT_STRING_TYPE";   //  �� �꽌�떇�쓽 �삎�떇�씠 臾몄옄 �삎�떇�씠 �븘�떃�땲�떎.
 
     public static final String EXCEL_IMPORT_COMPANY_TYPE_NOT_EXIST = "EXCEL_IMPORT_COMPANY_TYPE_NOT_EXIST";   //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 湲곗뾽援щ텇紐낆쑝濡� 寃��깋�릺�뒗 湲곗뾽援щ텇�씠 �뾾�뒿�땲�떎
     public static final String EXCEL_IMPORT_PARENT_SECTOR_NOT_EXIST = "EXCEL_IMPORT_PARENT_SECTOR_NOT_EXIST";   //  �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �뾽醫낅챸�쑝濡� 寃��깋�릺�뒗 �뾽醫�(��遺꾨쪟)�씠 �뾾�뒿�땲�떎
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 62f8272..1802cb4 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -3455,6 +3455,10 @@
      * @return boolean
      */
     private Boolean cellNullCheck (Cell cell) {
+        if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && cell.getCellType() != Cell.CELL_TYPE_STRING) {
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_NOT_STRING_TYPE));
+        }
         if (cell != null && cell.getStringCellValue() != null) {
             cell.setCellValue(cell.getStringCellValue().trim());//�� 媛� 怨듬갚 �젣嫄�
         }
@@ -3505,13 +3509,13 @@
                     break;*/
                 case 4:
                     //  �떆�옉�씪�쓣 IssueForm �뿉 ���옣�븳�떎.
-                    if (cellNullCheck(cell)) {
+                    if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                         this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
                     }
                     break;
                 case 5:
                     //  醫낅즺�씪�쓣 IssueForm �뿉 ���옣�븳�떎.
-                    if (cellNullCheck(cell)) {
+                    if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                         this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
                     }
                     break;
@@ -3684,8 +3688,13 @@
 
             //  媛믪씠 怨듬갚�씠硫� 以묒�
             String cellValue = CommonUtil.convertExcelStringToCell(cell);
-            if (StringUtils.isEmpty(cellValue) || !cell.toString().equals("null")) {
+            if (StringUtils.isEmpty(cellValue) || cell.toString().equals("null")) {
                 return;
+            }
+
+            if (cell.toString().length() < 10 && cell.toString().contains("-")) { //�궇吏� �삎�떇 泥댄겕
+                throw new OwlRuntimeException(
+                        this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PERIOD_NOT_DASH, rowIndex));
             }
 
             Date startDate;
@@ -3715,7 +3724,7 @@
 
     //  �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.-
     private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) {
-        if (!cellNullCheck(cell)) {
+        if (cell != null) {
             String cellValue = CommonUtil.convertExcelStringToCell(cell);
             Map<String, Object> issueCustomFieldMap = new HashMap<>();
             CustomField customField = customFieldMaps.get(customFieldName);
@@ -3745,6 +3754,10 @@
                     }
 
                     if (customField.getCustomFieldType() == DATETIME) { //DATETIME�씪 寃쎌슦 format 蹂�寃�
+                        if (cell.toString().length() < 10 && cell.toString().contains("-")) { //�궇吏� �삎�떇 泥댄겕
+                            throw new OwlRuntimeException(
+                                    this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_DATETIME_NOT_DASH, rowIndex));
+                        }
                         Date date = cell.getDateCellValue();
                         cellValue = new SimpleDateFormat("yyyy-MM-dd H:mm:ss").format(date);
                     }
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 98da405..ebc051c 100644
--- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
+++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -181,6 +181,8 @@
 EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST=\uB4F1\uB85D\uD558\uB824\uB294 \uC0AC\uC6A9\uC790 \uC815\uC758 \uD544\uB4DC\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uD574\uB2F9 \uC0AC\uC6A9\uC790 \uC815\uC758\uD544\uB4DC\uC758 \uC774\uB984\uC774 \uBCC0\uACBD\uB418\uC5C8\uAC70\uB098 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0}
 EXCEL_IMPORT_PERIOD_NOT_VALIDITY= \uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uD55C \uC2DC\uC791\uC77C, \uC885\uB8CC\uC77C\uC5D0 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uC2DC\uC791\uC77C\uC740 \uC885\uB8CC\uC77C\uBCF4\uB2E4 \uBE68\uB77C\uC57C \uD569\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0}
 EXCEL_IMPORT_PERIOD_NOT_VALIDITY_EMPTY=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uD55C \uC2DC\uC791\uC77C, \uC885\uB8CC\uC77C\uC5D0 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uACF5\uBC31\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uB294\uC9C0 \uD655\uC778 \uD6C4 \uACF5\uBC31\uC744 \uC81C\uAC70\uD558\uC138\uC694. \n \uB77C\uC778 \uC815\uBCF4 : {0}
+EXCEL_IMPORT_PERIOD_NOT_DASH=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uD55C \uC2DC\uC791\uC77C, \uC885\uB8CC\uC77C\uC5D0 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uB0A0\uC9DC \uD615\uC2DD\uC73C\uB85C \uC785\uB825 \uD574\uC8FC\uC138\uC694. ex) 2022-01-01 \n \uB77C\uC778 \uC815\uBCF4 : {0}
+EXCEL_IMPORT_DATETIME_NOT_DASH=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uD55C \uC0AC\uC6A9\uC790 \uC815\uC758 \uD544\uB4DC\uC5D0 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uB0A0\uC9DC \uD615\uC2DD\uC73C\uB85C \uC785\uB825 \uD574\uC8FC\uC138\uC694. ex) 2022-01-01 00:00:00  \n \uB77C\uC778 \uC815\uBCF4 : {0}
 EXCEL_IMPORT_MAX_ROWS_OVER = \uC5D1\uC140 \uC5C5\uB85C\uB4DC\uB85C \uC774\uC288 \uB4F1\uB85D\uC740 \uCD5C\uB300 1,000 \uAC74\uAE4C\uC9C0\uB9CC \uAC00\uB2A5\uD569\uB2C8\uB2E4. \uB9CC\uC57D \uC791\uC131\uB41C \uC5D1\uC140\uC774 1,000 \uAC74 \uC774\uD558\uC77C \uACBD\uC6B0 \uC774 \uBA54\uC2DC\uC9C0\uAC00 \uD45C\uC2DC\uB418\uBA74 \uB9C8\uC9C0\uB9C9 \uC791\uC131\uB41C \uD589\uC774\uD6C4\uC758 \uBAA8\uB4E0 \uD589\uC744 \uC0AD\uC81C\uD55C \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574\uC8FC\uC138\uC694.
 RESERVATION_EMAIL_TITLE=[OWL ITS] \uC5B4\uC81C \uC774\uC288 \uBC0F \uD65C\uB3D9 \uD604\uD669\uC785\uB2C8\uB2E4.
 REALTIME_EMAIL_TITLE=[OWL ITS] \uC2E4\uC2DC\uAC04 \uC774\uC288 \uBC0F \uD65C\uB3D9 \uD604\uD669\uC785\uB2C8\uB2E4.
@@ -197,6 +199,7 @@
 EXCEL_IMPORT_REGION_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uC9C0\uC5ED\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 \uC9C0\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0}
 EXCEL_IMPORT_PARENT_SECTOR_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC5C5\uC885(\uC911\uBD84\uB958)\uB9CC \uC785\uB825 \uD588\uC2B5\uB2C8\uB2E4. \n \uC5C5\uC885(\uB300\uBD84\uB958)\uB3C4 \uC785\uB825\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0}
 EXCEL_IMPORT_TEL_NOT_STRING_TYPE=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uC5F0\uB77D\uCC98\uC758 \uD615\uC2DD\uC774 \uC798\uBABB \uB418\uC5C8\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0}
+EXCEL_IMPORT_NOT_STRING_TYPE=\uC140 \uC11C\uC2DD\uC758 \uD615\uC2DD\uC774 \uBB38\uC790 \uD615\uC2DD\uC774 \uC544\uB2D9\uB2C8\uB2E4.
 
 ISSUE_RESERVATION_VALUE_INVALID=\uC774\uC288 \uBC1C\uC0DD \uC608\uC57D\uC77C\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
 ISSUE_RESERVATION_NOT_EXIST=\uC774\uC288 \uBC1C\uC0DD \uC608\uC57D \uC815\uBCF4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
diff --git a/src/main/webapp/scripts/app/issue/issueImportExcel.controller.js b/src/main/webapp/scripts/app/issue/issueImportExcel.controller.js
index b8f88aa..2565985 100644
--- a/src/main/webapp/scripts/app/issue/issueImportExcel.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueImportExcel.controller.js
@@ -131,9 +131,11 @@
                                 projectId : $scope.vm.form.projects[0].id,
                                 issueTypeId : $scope.vm.form.issueTypeId,
                                 parentIssueId : (function () {
-                                    var id = -1;
+                                    let id = -1;
                                     if ($rootScope.isDefined($scope.vm.form.issues)) {
-                                        id = $scope.vm.form.issues[0].id
+                                        if ($rootScope.isDefined($scope.vm.form.issues[0])) {
+                                            id = $scope.vm.form.issues[0].id;
+                                        }
                                     }
                                     return id;
                                 })()

--
Gitblit v1.8.0