OWL ITS + 탐지시스템(인터넷 진흥원)
jhjang
2022-02-07 6c05919c8fdaeca34a81bf0a84e5ae12dc99d1e0
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,22 +3465,30 @@
    /**
     * cell NULL 체크 함수
     * 문자형식 cell 체크
     * @param cell Cell
     * @return boolean
     */
    private Boolean cellNullCheck (Cell cell) {
        if (cell != null && cell.getStringCellValue() != null) {
            cell.setCellValue(cell.getStringCellValue().trim());//셀 값 공백 제거
        if (cell != null ) {
            if (cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                if (cell.getCellType() == Cell.CELL_TYPE_STRING && cell.getStringCellValue() != null) {
                    return false;
                }
            }
        }
        return cell != null && cell.getStringCellValue() != null && !cell.getStringCellValue().equals("") && cell.getCellType() != Cell.CELL_TYPE_BLANK;
        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;
@@ -3474,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)) {
                        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 에 저장한다.
@@ -3505,47 +3545,37 @@
                    break;*/
                case 4:
                    //  시작일을 IssueForm 에 저장한다.
                    if (cellNullCheck(cell)) {
                        this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
                    }
                    this.setIssueFormPeriod(cellStr, issueForm, true, rowIndex, isNull);
                    break;
                case 5:
                    //  종료일을 IssueForm 에 저장한다.
                    if (cellNullCheck(cell)) {
                        this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
                    }
                    this.setIssueFormPeriod(cellStr, issueForm, false, rowIndex, isNull);
                    break;
                case 6:
                    //  업체를 IssueForm 에 저장한다.
                    if (cellNullCheck(cell)) {
                        this.setIssueFormCompanyField(cell, companyFieldMaps, issueForm, rowIndex);
                    }
                    this.setIssueFormCompanyField(cellStr, companyFieldMaps, issueForm, rowIndex);
                    break;
                case 7:
                    //  ISP를 IssueForm 에 저장한다.
                    if (cellNullCheck(cell)) {
                        this.setIssueFormIspField(cell, ispFieldMaps, issueForm, rowIndex);
                    }
                    this.setIssueFormIspField(cellStr, ispFieldMaps, issueForm, rowIndex);
                    break;
                case 8:
                    //  호스팅을 IssueForm 에 저장한다.
                    if (cellNullCheck(cell)) {
                        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));
@@ -3555,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));
@@ -3568,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));
@@ -3582,14 +3612,7 @@
    }
    //  이슈 제목을 IssueForm 에 저장한다.
    private void setIssueFormTitle(Cell cell, IssueForm issueForm, int rowIndex) {
        if (cell == null) {
            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);
@@ -3630,13 +3653,8 @@
    //  우선순위를 IssueForm 에 저장한다.
    private void setIssueFormPriority(Cell cell, Map<String, Priority> priorityMaps, IssueForm issueForm, int rowIndex) {
        if (cell == null) {
            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(
@@ -3647,13 +3665,8 @@
    }
    //  중요도를 IssueForm 에 저장한다.
    private void setIssueFormSeverity(Cell cell, Map<String, Severity> severityMaps, IssueForm issueForm, int rowIndex) {
        if (cell == null) {
            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(
@@ -3679,28 +3692,25 @@
        }
    }
    //  시작일, 종료일을 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;
            }
            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) {
                    throw new OwlRuntimeException(
                            this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PERIOD_NOT_VALIDITY_EMPTY_START, rowIndex));
                }
                try {
                    //  날짜 유효성 체크
@@ -3714,89 +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 변경
                        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;
        }
    }