OWL ITS + 탐지시스템(인터넷 진흥원)
jhjang
2022-02-07 6c05919c8fdaeca34a81bf0a84e5ae12dc99d1e0
- 임포트 로직 수정중
- 인터넷진흥원 설정파일 수정
7개 파일 변경됨
404 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MsgConstants.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 329 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/util/CommonUtil.java 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/util/DateUtil.java 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/system_prod.properties 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/system_test.properties 65 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -160,6 +160,7 @@
    public static final String USER_RETURN_PASSWORD_NOT_PROVIDER_SOCIAL_JOIN_USER = "USER_RETURN_PASSWORD_NOT_PROVIDER_SOCIAL_JOIN_USER";   //  비밀번호 찾기 기능을 소셜 계정 가입 사용자는 사용할 수 없습니다.
    public static final String USER_NOT_USE_ACTIVE_STATUS = "USER_NOT_USE_ACTIVE_STATUS";   //  사용자는 활성 상태가 아니면 로그인할 수 없습니다.
    public static final String EXCEL_IMPORT_ERROR = "EXCEL_IMPORT_ERROR"; //  엑셀 임포트 오류입니다.
    public static final String EXCEL_NOT_EXTENSION = "EXCEL_NOT_EXTENSION"; //  엑셀 파일 확장자 (xlsx)만 업로드가 가능합니다.
    public static final String EXCEL_DOWNLOAD_MAX_ROWS_OVER = "EXCEL_DOWNLOAD_MAX_ROWS_OVER";   //  검색된 엑셀 행이 1,000건을 초과하여 다운로드 할 수 없습니다. 검색 조건을 사용하여 1,000 건 이하로 다운로드를 진행해야 합니다.
    public static final String EXCEL_IMPORT_MAX_ROWS_OVER = "EXCEL_IMPORT_MAX_ROWS_OVER";   //  엑셀 업로드로 이슈 등록은 최대 1,000 건까지만 가능합니다.
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -46,6 +46,7 @@
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -867,15 +868,28 @@
        }
    }
    //  날짜 유효성 체크
    /**
     * 날짜 유효성 체크
     * @param startDate 시작 일자(문자)
     * @param completeDate 종료 일자(문자)
     */
    private void checkStartCompleteDate(String startDate, String completeDate) {
        if (!StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(completeDate)) {
            Date start = DateUtil.convertStrToDate(startDate, "yy-MM-dd");
            Date end = DateUtil.convertStrToDate(completeDate, "yy-MM-dd");
            if (start.getTime() > end.getTime()) {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.DATE_PICKER_NOT_AVAILABLE));
            }
            checkStartCompleteDate(start, end);
        }
    }
    /**
     * 날짜 유효성 체크
     * @param start 시작 일자
     * @param end 종료 일자
     */
    private void checkStartCompleteDate(Date start, Date end) {
        if (start.getTime() > end.getTime()) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.DATE_PICKER_NOT_AVAILABLE));
        }
    }
@@ -3451,36 +3465,30 @@
    /**
     * cell NULL 체크 함수
     * 문자형식 cell 체크
     * @param cell Cell
     * @return boolean
     */
    private Boolean cellNullCheck (Cell cell, int rowIndex) {
        boolean result = false;
        //  문자형식인지 체크
        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, rowIndex));
    private Boolean cellNullCheck (Cell cell) {
        if (cell != null ) {
            if (cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                if (cell.getCellType() == Cell.CELL_TYPE_STRING && cell.getStringCellValue() != null) {
                    return false;
                }
            }
        }
        //  공백 제거
        if (cell != null && cell.getStringCellValue() != null) {
            cell.setCellValue(cell.getStringCellValue().trim());
        }
        if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK && cell.getCellType() == cell.CELL_TYPE_STRING
                && cell.getStringCellValue() != null && !cell.getStringCellValue().equals("")) {
            result = true;
        }
        return result;
        return true;
    }
    //  엑셀 필드에 있는 정보를 이슈 form 으로 옮긴다.
    private IssueForm setIssueFormToExcelField(Row row, int rowIndex, Map<String, Priority> priorityMaps,
                                               Map<String, Severity> severityMaps, Map<String, DepartmentVo> departmentMaps,
                                               Map<String, CustomField> customFieldMaps, Map<String, CompanyField> companyFieldMaps,
                                               Map<String, IspField> ispFieldMaps, Map<String, HostingField> hostingFieldMaps,
                                               List<String> headers) {
                                               List<String> headers) throws ParseException {
        IssueForm issueForm = new IssueForm();
        issueForm.setRegisterId(this.webAppUtil.getLoginId());
        Project project = null;
@@ -3488,30 +3496,48 @@
        //  제목, 내용, 프로젝트 키, 이슈 타입, 우선순위, 중요도, 담당자, 시작일, 종료일, 사용자 정의 필드
        for (int cellIndex = 0; cellIndex < headers.size(); cellIndex++) {
            Cell cell = row.getCell(cellIndex);
            boolean isNull = cellNullCheck(cell);
            String cellStr = "";
            if (!isNull) {
                cellStr = CommonUtil.convertExcelStringToCell(cell);
                //  공백 제거
                cell.setCellValue(cellStr.trim());
            } else {
                cell.setCellValue(cellStr);
            }
            switch (cellIndex) {
                case 0:
                    //  이슈 제목을 IssueForm 에 저장한다.
                    this.setIssueFormTitle(cell, issueForm, rowIndex);
                    if (isNull) {
                        throw new OwlRuntimeException(
                                this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISSUE_TITLE_IS_NULL, rowIndex));
                    }
                    this.setIssueFormTitle(cellStr, issueForm, rowIndex);
                    break;
                case 1:    //  내용
                    if (cellNullCheck(cell, rowIndex)) {
                        issueForm.setDescription(CommonUtil.convertExcelStringToCell(cell));
                    } else {
                        //  null 입력 방지
                        issueForm.setDescription("");
                    }
                    issueForm.setDescription(cellStr);
                    break;
                case 2:
                    //  우선순위를 IssueForm 에 저장한다.
                    this.setIssueFormPriority(cell, priorityMaps, issueForm, rowIndex);
                    if (isNull) {
                        throw new OwlRuntimeException(
                                this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PRIORITY_IS_NULL, rowIndex));
                    }
                    this.setIssueFormPriority(cellStr, priorityMaps, issueForm, rowIndex);
                    break;
                case 3:
                    //  중요도를 IssueForm 에 저장한다.
                    this.setIssueFormSeverity(cell, severityMaps, issueForm, rowIndex);
                    if (isNull) {
                        throw new OwlRuntimeException(
                                this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_SEVERITY_IS_NULL, rowIndex));
                    }
                    this.setIssueFormSeverity(cellStr, severityMaps, issueForm, rowIndex);
                    break;
                /*case 6:
                    //  담당자를 IssueForm 에 저장한다.
@@ -3519,47 +3545,37 @@
                    break;*/
                case 4:
                    //  시작일을 IssueForm 에 저장한다.
                    if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                        this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
                    }
                    this.setIssueFormPeriod(cellStr, issueForm, true, rowIndex, isNull);
                    break;
                case 5:
                    //  종료일을 IssueForm 에 저장한다.
                    if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                        this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
                    }
                    this.setIssueFormPeriod(cellStr, issueForm, false, rowIndex, isNull);
                    break;
                case 6:
                    //  업체를 IssueForm 에 저장한다.
                    if (cellNullCheck(cell, rowIndex)) {
                        this.setIssueFormCompanyField(cell, companyFieldMaps, issueForm, rowIndex);
                    }
                    this.setIssueFormCompanyField(cellStr, companyFieldMaps, issueForm, rowIndex);
                    break;
                case 7:
                    //  ISP를 IssueForm 에 저장한다.
                    if (cellNullCheck(cell, rowIndex)) {
                        this.setIssueFormIspField(cell, ispFieldMaps, issueForm, rowIndex);
                    }
                    this.setIssueFormIspField(cellStr, ispFieldMaps, issueForm, rowIndex);
                    break;
                case 8:
                    //  호스팅을 IssueForm 에 저장한다.
                    if (cellNullCheck(cell, rowIndex)) {
                        this.setIssueFormHostingField(cell, hostingFieldMaps, issueForm, rowIndex);
                    }
                    this.setIssueFormHostingField(cellStr, hostingFieldMaps, issueForm, rowIndex);
                    break;
                default:
                    //  9번 부터는 사용자 정의 필드. 사용자 정의 필드 정보를 IssueForm 에 저장한다.
                    this.setIssueFormCustomFieldValue(cell, customFieldMaps, issueForm, headers.get(cellIndex), rowIndex);
                    this.setIssueFormCustomFieldValue(cellStr, customFieldMaps, issueForm, headers.get(cellIndex), rowIndex);
            }
        }
        return issueForm;
    }
    private void setIssueFormHostingField(Cell cell, Map<String, HostingField> hostingFieldMaps, IssueForm issueForm, int rowIndex) {
        if (cell != null) {
    private void setIssueFormHostingField(String cell, Map<String, HostingField> hostingFieldMaps, IssueForm issueForm, int rowIndex) {
        if (cell.length() > 0) {
            Map<String, Object> issueHostingFields = new HashMap<>();
            HostingField hostingFieldMap = hostingFieldMaps.get(CommonUtil.convertExcelStringToCell(cell));
            HostingField hostingFieldMap = hostingFieldMaps.get(cell);
            if (hostingFieldMap == null) {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HOSTING_NOT_EXIST, rowIndex));
@@ -3569,10 +3585,10 @@
        }
    }
    private void setIssueFormIspField(Cell cell, Map<String, IspField> ispFieldMaps, IssueForm issueForm, int rowIndex) {
        if (cell != null) {
    private void setIssueFormIspField(String cell, Map<String, IspField> ispFieldMaps, IssueForm issueForm, int rowIndex) {
        if (cell.length() > 0) {
            Map<String, Object> issueIspFields = new HashMap<>();
            IspField ispFieldMap = ispFieldMaps.get(CommonUtil.convertExcelStringToCell(cell));
            IspField ispFieldMap = ispFieldMaps.get(cell);
            if (ispFieldMap == null) {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISP_NOT_EXIST, rowIndex));
@@ -3582,10 +3598,10 @@
        }
    }
    private void setIssueFormCompanyField(Cell cell, Map<String, CompanyField> companyFieldMaps, IssueForm issueForm, int rowIndex) {
        if (cell != null) {
    private void setIssueFormCompanyField(String cell, Map<String, CompanyField> companyFieldMaps, IssueForm issueForm, int rowIndex) {
        if (cell.length() > 0) {
            Map<String, Object> issueCompanyFields = new HashMap<>();
            CompanyField companyFieldMap = companyFieldMaps.get(CommonUtil.convertExcelStringToCell(cell));
            CompanyField companyFieldMap = companyFieldMaps.get(cell);
            if (companyFieldMap == null) {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_COMPANY_NOT_EXIST, rowIndex));
@@ -3596,14 +3612,7 @@
    }
    //  이슈 제목을 IssueForm 에 저장한다.
    private void setIssueFormTitle(Cell cell, IssueForm issueForm, int rowIndex) {
        if (!cellNullCheck(cell, rowIndex)) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISSUE_TITLE_IS_NULL, rowIndex));
        }
        String title = CommonUtil.convertExcelStringToCell(cell);
    private void setIssueFormTitle(String title, IssueForm issueForm, int rowIndex) {
        //  제목 유효성 체크
        this.verifyTitle(title);
        issueForm.setTitle(title);
@@ -3644,13 +3653,8 @@
    //  우선순위를 IssueForm 에 저장한다.
    private void setIssueFormPriority(Cell cell, Map<String, Priority> priorityMaps, IssueForm issueForm, int rowIndex) {
        if (!cellNullCheck(cell, rowIndex)) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PRIORITY_IS_NULL, rowIndex));
        }
        Priority priority = priorityMaps.get(CommonUtil.convertExcelStringToCell(cell));
    private void setIssueFormPriority(String priorityStr, Map<String, Priority> priorityMaps, IssueForm issueForm, int rowIndex) {
        Priority priority = priorityMaps.get(priorityStr);
        if (priority == null) {
            throw new OwlRuntimeException(
@@ -3661,13 +3665,8 @@
    }
    //  중요도를 IssueForm 에 저장한다.
    private void setIssueFormSeverity(Cell cell, Map<String, Severity> severityMaps, IssueForm issueForm, int rowIndex) {
        if (!cellNullCheck(cell, rowIndex)) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_SEVERITY_IS_NULL, rowIndex));
        }
        Severity severity = severityMaps.get(CommonUtil.convertExcelStringToCell(cell));
    private void setIssueFormSeverity(String strSeverity, Map<String, Severity> severityMaps, IssueForm issueForm, int rowIndex) {
        Severity severity = severityMaps.get(strSeverity);
        if (severity == null) {
            throw new OwlRuntimeException(
@@ -3693,33 +3692,19 @@
        }
    }
    //  시작일, 종료일을 IssueForm 에 저장한다.
    private void setIssueFormPeriod(Cell cell, IssueForm issueForm, Boolean checkStartDate, int rowIndex) {
        if (cell != null && !cell.toString().equals("")) {
    private void setIssueFormPeriod(String periodDate, IssueForm issueForm, Boolean checkStartDate, int rowIndex, boolean isNull) throws ParseException {
        if (!isNull) {
            //  값이 공백이면 중지
            String cellValue = CommonUtil.convertExcelStringToCell(cell);
            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;
            try {
                startDate = cell.getDateCellValue();
            } catch (Exception e) {
            Date startDate = DateUtil.convertStrToDateOnly(periodDate);
            if (startDate == null) {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PERIOD_NOT_VALIDITY_EMPTY, rowIndex));
            }
            if (checkStartDate) {
                issueForm.setStartDate(DateUtil.convertDateToStr(startDate, "yyyy-MM-dd"));
                issueForm.setStartDate(periodDate);
            } else {
                issueForm.setCompleteDate(DateUtil.convertDateToStr(startDate, "yyyy-MM-dd"));
                issueForm.setCompleteDate(periodDate);
                
                //  종료일만 입력 했을 경우
                if (issueForm.getCompleteDate() != null && issueForm.getStartDate() == null) {
@@ -3739,93 +3724,89 @@
    }
    //  사용자 정의 필드 정보를 IssueForm 에 저장한다.-
    private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) {
        if (cell != null) {
            String cellValue = CommonUtil.convertExcelStringToCell(cell);
            Map<String, Object> issueCustomFieldMap = new HashMap<>();
            CustomField customField = customFieldMaps.get(customFieldName);
    private void setIssueFormCustomFieldValue(String cellValue, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) {
        Map<String, Object> issueCustomFieldMap = new HashMap<>();
        CustomField customField = customFieldMaps.get(customFieldName);
            if (customField == null) {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST, rowIndex));
            }
            //  사용자 정의 필드 값이 공백이면 중지
            if (StringUtils.isEmpty(cellValue)) {
                return;
            }
        if (customField == null) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST, rowIndex));
        }
        //  사용자 정의 필드 값이 공백이면 중지
        if (StringUtils.isEmpty(cellValue)) {
            return;
        }
            boolean validity = false;
        boolean validity = false;
            switch (customField.getCustomFieldType()) {
                case INPUT:
                case NUMBER:
                case DATETIME:
                case IP_ADDRESS:
                case EMAIL:
                case SITE:
                case TEL:
                    if (customField.getCustomFieldType() != INPUT && cellValue.length() > 100) { //INPUT 타입은 100자 제한 없음
        switch (customField.getCustomFieldType()) {
            case INPUT:
            case NUMBER:
            case DATETIME:
            case IP_ADDRESS:
            case EMAIL:
            case SITE:
            case TEL:
                if (customField.getCustomFieldType() != INPUT && cellValue.length() > 100) { //INPUT 타입은 100자 제한 없음
                    throw new OwlRuntimeException(
                            this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_TEXT_TYPE_MAX_LENGTH_OUT));
                }
                if (customField.getCustomFieldType() == DATETIME) { //DATETIME일 경우 format 변경
                    Date date = DateUtil.convertStrToDate(cellValue);
                    if (date == null) {
                        throw new OwlRuntimeException(
                                this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_TEXT_TYPE_MAX_LENGTH_OUT));
                                this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_DATETIME_NOT_DASH, rowIndex));
                    }
                }
                    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);
                issueCustomFieldMap.put("customFieldId", customField.getId());
                issueCustomFieldMap.put("useValue", cellValue);
                issueForm.addIssueCustomFields(issueCustomFieldMap);
                break;
            case SINGLE_SELECT:
                //  값 유효성 체크
                for (CustomFieldValue customFieldValue : customField.getCustomFieldValues()) {
                    if (customFieldValue.getValue().equals(cellValue)) {
                        validity = true;
                        break;
                    }
                }
                    issueCustomFieldMap.put("customFieldId", customField.getId());
                    issueCustomFieldMap.put("useValue", cellValue);
                    issueForm.addIssueCustomFields(issueCustomFieldMap);
                    break;
                case SINGLE_SELECT:
                    //  값 유효성 체크
                if (!validity) {
                    throw new OwlRuntimeException(
                            this.messageAccessor.getMessage(MsgConstants.EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY, rowIndex));
                }
                issueCustomFieldMap.put("customFieldId", customField.getId());
                issueCustomFieldMap.put("useValue", cellValue);
                issueForm.addIssueCustomFields(issueCustomFieldMap);
                break;
            case MULTI_SELECT:
                //  값 유효성 체크
                String[] useValues = cellValue.split("#");
                //  해, 달
                for (String useValue : useValues) {
                    for (CustomFieldValue customFieldValue : customField.getCustomFieldValues()) {
                        if (customFieldValue.getValue().equals(cellValue)) {
                        if (customFieldValue.getValue().equals(useValue)) {
                            validity = true;
                            break;
                            Map<String, Object> multiValueMap = new HashMap<>();
                            multiValueMap.put("customFieldId", customField.getId());
                            multiValueMap.put("useValue", useValue);
                            issueForm.addIssueCustomFields(multiValueMap);
                        }
                    }
                }
                    if (!validity) {
                        throw new OwlRuntimeException(
                                this.messageAccessor.getMessage(MsgConstants.EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY, rowIndex));
                    }
                if (!validity) {
                    throw new OwlRuntimeException(
                            this.messageAccessor.getMessage(MsgConstants.EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY, rowIndex));
                }
                    issueCustomFieldMap.put("customFieldId", customField.getId());
                    issueCustomFieldMap.put("useValue", cellValue);
                    issueForm.addIssueCustomFields(issueCustomFieldMap);
                    break;
                case MULTI_SELECT:
                    //  값 유효성 체크
                    String[] useValues = cellValue.split("#");
                    //  해, 달
                    for (String useValue : useValues) {
                        for (CustomFieldValue customFieldValue : customField.getCustomFieldValues()) {
                            if (customFieldValue.getValue().equals(useValue)) {
                                validity = true;
                                Map<String, Object> multiValueMap = new HashMap<>();
                                multiValueMap.put("customFieldId", customField.getId());
                                multiValueMap.put("useValue", useValue);
                                issueForm.addIssueCustomFields(multiValueMap);
                            }
                        }
                    }
                    if (!validity) {
                        throw new OwlRuntimeException(
                                this.messageAccessor.getMessage(MsgConstants.EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY, rowIndex));
                    }
                    break;
            }
                break;
        }
    }
src/main/java/kr/wisestone/owl/util/CommonUtil.java
@@ -40,6 +40,7 @@
import java.security.MessageDigest;
import java.security.spec.KeySpec;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
@@ -962,7 +963,7 @@
                double doubleValue = cell.getNumericCellValue();
                int intValue;
                if (doubleValue%1 == 0) {
                if (doubleValue % 1 == 0) {
                    intValue = (int)doubleValue;
                    cellValue = intValue + "";
                }
src/main/java/kr/wisestone/owl/util/DateUtil.java
@@ -24,6 +24,10 @@
        return convertStrToDate(source, "yyyy-MM-dd HH:mm:ss");
    }
    public static Date convertStrToDateOnly(String source) {
        return convertStrToDate(source, "yyyy-MM-dd");
    }
    public static Date convertStrToDate(String source, String pattern) {
        return convertStrToDate(source, pattern, Locale.KOREA);
    }
src/main/resources/system_prod.properties
@@ -40,6 +40,7 @@
# email \uC124\uC815
email.host=221.149.161.20
email.port=25
email.sender=KISA
email.userName=detect@krcert.or.kr
email.password=kisc%2004
email.transport.protocol=smtp
src/main/resources/system_test.properties
@@ -1,42 +1,54 @@
# mariaDB \uC124\uC815
db.primary.url=jdbc:mariadb://IP\uC8FC\uC18C \uC785\uB825/dev_db?allowMultiQueries=true
db.replica1.url=jdbc:mariadb://IP\uC8FC\uC18C \uC785\uB825/dev_db?allowMultiQueries=true
db.primary.driverName=org.mariadb.jdbc.Driver
db.primary.url=jdbc:mariadb://127.0.0.1/prod_db?allowMultiQueries=true
db.replica1.url=jdbc:mariadb://127.0.0.1/prod_db?allowMultiQueries=true
db.replica2.url=
db.replica3.url=
db.replica4.url=
db.replica5.url=
db.primary.userName=ID
db.primary.password=\uBE44\uBC00\uBC88\uD638
db.primary.userName=root
db.primary.password=maponrex
# elasticSearch \uC124\uC815
elastic.search.hosts=http://52.78.198.178:9200
# kafka \uC124\uC815
kafka.bootstrap.servers=ec2-52-78-150-61.ap-northeast-2.compute.amazonaws.com:9092,ec2-52-79-150-7.ap-northeast-2.compute.amazonaws.com:9092,ec2-52-79-193-191.ap-northeast-2.compute.amazonaws.com:9092
kafka.consumer.group.id=test-common-group
kafka.common.topic=test-common-topic
# use kafka or not
# kafka by zenith at 20200625
use.kafka=false
# kafka.bootstrap.servers=ec2-52-78-150-61.ap-northeast-2.compute.amazonaws.com:9092,ec2-52-79-150-7.ap-northeast-2.compute.amazonaws.com:9092,ec2-52-79-193-191.ap-northeast-2.compute.amazonaws.com:9092
kafka.bootstrap.servers=127.0.0.2:9092
kafka.consumer.group.id=dev-common-group
kafka.common.topic=dev-common-topic
# redis \uC124\uC815
#  test-session-01.9pesbb.ng.0001.apn2.cache.amazonaws.com
redis.host=192.168.0.64
redis.host=127.0.0.1
redis.port=6379
redis.common.topic=test-common-topic
redis.common.topic=dev-common-topic
spring.session.timeout=36000
# License Key \uC124\uC815
owl.license.key=1234
# mail attached file path
mail.file.path=C:/downloads/
mail.account=
mail.password=
# email send
# email \uC124\uC815
email.host=mail.g2works.kr
email.port=587
email.sender=OWL-ITS
email.userName=supportowl@wisestone.kr
email.password=Stone0620**
email.transport.protocol=smtp
email.smtp.auth=true
email.smtp.starttle.enable=true
email.debug=true
email.sendUrl=http://localhost:8080
# \uD68C\uACC4 \uB2F4\uB2F9\uC790 \uACB0\uC81C \uCDE8\uC18C \uC54C\uB9BC - \uD68C\uACC4 \uB2F4\uB2F9\uC790\uB294 \uAF2D \uC2DC\uC2A4\uD15C\uC5D0 \uAC00\uC785 \uB418\uC5B4 \uC788\uC5B4\uC57C \uD55C\uB2E4.
payment.cancel.manager.email=jslee1@wisestone.kr
@@ -48,28 +60,35 @@
total.statistics.email=jslee1@wisestone.kr
# saas service max user & use period
saas.maxUser=10
saas.period=30
# packageteyp 1 : lite (~200 Users), 2 : medium (~500 users), 3 : Enterprice (~1000 users) (0 \uC740 demo version)
saas.packagetype=1
saas.maxUser=200
saas.period=3650
# \uD658\uC728
saas.usdkrw=1163
saas.usdkrw=1183
# use aws or not
# added by zenith at 20200623
use.aws=false
# aws upload path
attached.file.path=/test-upload/
profile.file.path=/test-profile
use.scheduler=false
# upload path
attached.file.path=/dev-upload/
profile.file.path=/dev-profile
# aws bucket name
aws.bucket.name=wisestone-test
# aws bucket access key
aws.access.key=AKIARX6BJQMZKUYEEJVD
aws.access.password=eAQvouvSJJFl47h2dkMJji/6OtzsGBGF4h9Df3qH
# aws s3 url
aws.s3.url=https://s3.ap-northeast-2.amazonaws.com/
# OAuth 2.0 \uC778\uC99D \uC815\uBCF4
# aws.s3.url=https://s3.ap-northeast-2.amazonaws.com/
aws.s3.url=http://localhost:8081/
# OAuth 2.0 \uC778\uC99D \uC815\uBCF4 \uC124\uC815
OAuth.google.clientId=545115864261-lumkhr0qhei643koiva5b130410s032e.apps.googleusercontent.com
OAuth.google.clientSecret=olvwp9OipUzaAj86Hx5HKPE5
OAuth.google.redirectUri=http://localhost:8080/googleOAuth2CallBack
@@ -77,14 +96,12 @@
OAuth.naver.clientId=Trl8vV30ctsUDlgGoWqZ
OAuth.naver.clientSecret=suJXIbB8dz
OAuth.kakao.clientId=13d56a63b9b9b1003d779261ce1651e3
OAuth.kakao.clientSecret=kumDB7dtnBumpjydGZPqScl7Vd1tezcq
OAuth.kakao.clientId=8db70e7979edc86b76c7b1d33312282d
OAuth.kakao.clientSecret=yIpsPh81H326UL7jdcXAu4OhfmKnmmpx
OAuth.facebook.clientId=1967163700251105
OAuth.facebook.clientSecret=34c4c009bc85caf08a6e27ecfe65744d
OAuth.facebook.redirectUri=https://www.owlsolution.io/facebookOAuth2CallBack
OAuth.common.state=state_parameter_owl_its_value
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -47,6 +47,7 @@
WORKSPACE_INCLUDE_DISABLED = \uD574\uB2F9 \uC5C5\uBB34 \uACF5\uAC04\uC5D0\uC11C \uBE44\uD65C\uC131 \uC0C1\uD0DC\uC774\uBBC0\uB85C \uC0DD\uC131, \uC218\uC815, \uC0AD\uC81C, \uC774\uBBF8\uC9C0/\uC5D1\uC140 \uB2E4\uC6B4\uB85C\uB4DC \uAE30\uB2A5\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
ATTACHED_FILE_NOT_EXIST = \uCCA8\uBD80 \uD30C\uC77C \uC815\uBCF4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
EXCEL_IMPORT_ERROR = \uC5D1\uC140 \uC784\uD3EC\uD2B8 \uC624\uB958\uC785\uB2C8\uB2E4. {0}\uC904 {1}\uCEEC\uB7FC
START_ISSUE_STATUS_NOT_EXIST = \uC2DC\uC791\uD558\uB294 \uC774\uC288 \uC0C1\uD0DC\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
END_ISSUE_STATUS_NOT_EXIST = \uC885\uB8CC\uD558\uB294 \uC774\uC288 \uC0C1\uD0DC\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.