OWL ITS + 탐지시스템(인터넷 진흥원)
- API 추가/수정시 사용자 정의 필드 항목이 없을 경우 오류 처리
- API 에서 도메인만 추출하여 같은 도메인을 갖는 업체/isp/hosting 자동 입력하도록 수정
7개 파일 변경됨
138 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MsgConstants.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 88 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/util/CommonUtil.java 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/ApiController.java 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/companyField-template.xml 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -251,4 +251,5 @@
    public static final String API_ISSUE_NOT_EXIST = "API_ISSUE_NOT_EXIST";     // 수정할 이슈를 찾을수 없습니다.
    public static final String API_COMPLETE_ISSUE_STATUS_NOT_EXIST = "API_COMPLETE_ISSUE_STATUS_NOT_EXIST";     // 자동 종료 처리할 상태가 설정되지 않았습니다.
    public static final String API_ISSUE_STATUS_NOT_EXIST = "API_ISSUE_STATUS_NOT_EXIST";     // 이슈 상태를 찾을수 없습니다
    public static final String API_CUSTOM_FIELD_NOT_EXIST = "API_CUSTOM_FIELD_NOT_EXIST";     // 사용자 정의 필드를 존재하지 않습니다.
}
src/main/java/kr/wisestone/owl/domain/CustomFieldApiOverlap.java
@@ -24,7 +24,7 @@
    @JoinColumn(name = "issue_type_id")
    private IssueType issueType;
    @ManyToOne(fetch = FetchType.LAZY)
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "custom_field_id")
    private CustomField customField;
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -280,6 +280,20 @@
            if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) {
                for (int i = 0; i < customFieldApiOverlaps.size(); i++) {
                    CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i);
                    CustomField customField = customFieldApiOverlap.getCustomField();
                    if (customField.getCustomFieldType() == CustomFieldType.SITE) {
                        for (Map<String, Object> map : issueApiForm.getCustomFieldValues()) {
                            if (customField.getId().equals(MapUtil.getLong(map, "customFieldId"))) {
                                String fullUrl = MapUtil.getString(map, "useValue");
                                String url = CommonUtil.getUrl(fullUrl);
                                if (!url.equals("")) {
                                    issueApiForm.setUrl(fullUrl);
                                    break;
                                }
                            }
                        }
                    }
                    issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId());
                }
@@ -301,7 +315,7 @@
            // 사용자 정의 필드 설정
            issueForm.setIssueCustomFields(issueApiForm.getCustomFieldValues());
            //  같은 도메인 업체 찾기
            this.findCompanyField(issueForm);
            this.findCompanyField(issueForm, issueApiForm.getUrl());
            // api 입력값 적용
            ConvertUtil.copyProperties(issueApiForm, issueForm);
@@ -313,45 +327,36 @@
        }
    }
    private void findCompanyField(IssueForm issueForm) {
    private void findCompanyField(IssueForm issueForm, String url) {
        if(issueForm.getIssueCustomFields() != null && issueForm.getIssueCustomFields().size() > 0) {
            CompanyFieldCondition condition = new CompanyFieldCondition();
            condition.setUrl(url);
            List<Map<String, Object>> companyFields = this.companyFieldService.find(condition);
            List<Map<String, Object>> issueCompanyFields = Lists.newArrayList();
            List<Map<String, Object>> issueIspFields = Lists.newArrayList();
            List<Map<String, Object>> issueHostingFields = Lists.newArrayList();
            for (Map<String, Object> issueCustomField : issueForm.getIssueCustomFields()) {
                int customFieldId = (Integer) issueCustomField.get("customFieldId");
                Long customId = (long) customFieldId;
                CustomField customField = this.customFieldService.getCustomField(customId);
                if(customField != null && customField.getCustomFieldType().toString().equals("SITE") && customField.getName().equals("도메인")) {
                    String useValue = issueCustomField.get("useValue").toString();
                    if(companyFields != null && companyFields.size() > 0) {
                        for (Map<String, Object> companyField : companyFields) {
                            CompanyFieldVo companyFieldVo = ConvertUtil.convertMapToClass(companyField, CompanyFieldVo.class);
                            if(useValue.equals(companyFieldVo.getUrl())) {
                                companyField.put("companyId", companyField.get("id"));
                                issueCompanyFields.add(companyField);
                                if(companyFieldVo.getIspId() != null) {
                                    Map<String, Object> ispField = this.ispFieldService.find(companyFieldVo.getIspId());
                                    if (ispField != null) {
                                        ispField.put("ispId", ispField.get("id"));
                                        issueIspFields.add(ispField);
                                    }
                                }
                                if(companyFieldVo.getHostingId() != null) {
                                    Map<String, Object> hostingField = this.hostingFieldService.find(companyFieldVo.getHostingId());
                                    if (hostingField != null) {
                                        hostingField.put("hostingId", hostingField.get("id"));
                                        issueHostingFields.add(hostingField);
                                    }
                                }
                            }
                        }
                    }
                }
            if (companyFields != null && companyFields.size() > 0) {
                Map<String, Object> companyFieldMap = companyFields.get(0);
                companyFieldMap.put("companyId", companyFieldMap.get("id"));
                issueCompanyFields.add(companyFieldMap);
                issueForm.setIssueCompanyFields(issueCompanyFields);
                IspField ispField = this.ispFieldService.getIsp(MapUtil.getLong(companyFieldMap, "ispId"));
                if (ispField != null) {
                    Map<String, Object> ispFieldMap = ConvertUtil.convertObjectToMap(ispField);
                    ispFieldMap.put("ispId", ispField.getId());
                    issueIspFields.add(ispFieldMap);
                }
                HostingField hostingField = this.hostingFieldService.getHosting(MapUtil.getLong(companyFieldMap, "hostingId"));
                if (hostingField != null) {
                    Map<String, Object> hostingFieldMap = ConvertUtil.convertObjectToMap(hostingField);
                    hostingFieldMap.put("hostingId", hostingField.getId());
                    issueHostingFields.add(hostingFieldMap);
                }
                issueForm.setIssueIspFields(issueIspFields);
                issueForm.setIssueHostingFields(issueHostingFields);
            }
@@ -928,7 +933,7 @@
//        if (!this.userWorkspaceService.checkWorkspaceManager(user)
//                && !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { //최고관리자 & 프로젝트,이슈 관리자 일 경우 모든 이슈 보기
//            this.SetMyDepartmentId(issueCondition);
            //this.SetAllDepartmentId(issueCondition);
        //this.SetAllDepartmentId(issueCondition);
//        } /*else{
//            results = this.issueMapper.findByDepartment(issueCondition);
//            totalCount = this.issueMapper.countByDepartment(issueCondition);
@@ -1812,15 +1817,14 @@
                Issue parentIssue = modifyIssue.getParentIssue();
                IssueType issueType = modifyIssue.getIssueType();
                Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses();
                IssueTypeApiEndStatus issueStatus = null;
                if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) {
                    issueStatus = issueTypeApiEndStatuses.iterator().next();
                } else {
                    throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST));
                }
                if (parentIssue != null) {
                    Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses();
                    IssueTypeApiEndStatus issueStatus = null;
                    if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) {
                        issueStatus = issueTypeApiEndStatuses.iterator().next();
                    } else {
                        throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST));
                    }
                    IssueCondition issueCondition = new IssueCondition(issueVo.getId(), parentIssue.getId());
                    List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(issueCondition);
@@ -3448,7 +3452,7 @@
        }
    }
    //  사용자 정의 필드 정보를 IssueForm 에 저장한다.-
    //  사용자 정의 필드 정보를 IssueForm 에 저장한다.
    private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) {
        if (cell != null) {
            String cellValue = CommonUtil.convertExcelStringToCell(cell);
src/main/java/kr/wisestone/owl/util/CommonUtil.java
@@ -42,6 +42,8 @@
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CommonUtil {
    private static final Logger LOGGER = LoggerFactory.getLogger(CommonUtil.class);
@@ -1005,4 +1007,30 @@
        }
    }
    // 메인 url만 추출
    public static String extractUrl(String content){
        try {
            String REGEX = "(http(s)?:\\/\\/)([a-z0-9\\w]+\\.*)+[a-z0-9]{2,4}";
            Pattern p = Pattern.compile(REGEX, Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(content);
            if (m.find()) {
                return m.group();
            }
            return "";
        } catch (Exception e) {
            return "";
        }
    }
    // 메인 url 추출을 위해 http: 확인
    public static String getUrl(String fullUrl) {
        if (fullUrl != null) {
            if (fullUrl.indexOf("http") == -1) {
                fullUrl = "http://" + fullUrl;
            }
            return extractUrl(fullUrl);
        }
        return "";
    }
}
src/main/java/kr/wisestone/owl/web/controller/ApiController.java
@@ -53,6 +53,11 @@
        if (issueForm == null) {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ERROR));
        }
        // 사용자 정의 필드가 없을 경우 검색을 할 수 없기 때문에 예외처리
        else if (issueForm.getCustomFieldValues() == null || issueForm.getCustomFieldValues().size() == 0) {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_CUSTOM_FIELD_NOT_EXIST));
        }
        if (issueForm.getApiType() == IssueApiForm.ApiType.add) {
            List<Issue> issues = this.issueService.addApiIssue(issueForm);
            //  버전 생성
@@ -60,6 +65,8 @@
                this.issueService.addIssueVersion(issue.getId(), issue.getRegisterId());
            }
        } else {
            this.issueService.modifyIssue(issueForm, request.getFiles("file"));
        }
src/main/java/kr/wisestone/owl/web/form/IssueApiForm.java
@@ -31,6 +31,7 @@
    private List<Map<String, Object>> CustomFieldValues = Lists.newArrayList();
    private List<MultipartFile> multipartFiles = Lists.newArrayList();
    private List<Long> useIssueCustomFieldIds = Lists.newArrayList();       // 사위일감용 사용자필드값
    private String url;             // 탐지 시스템에서만 적용
    public IssueApiForm() {
    }
@@ -228,4 +229,12 @@
            this.useIssueCustomFieldIds.add(customFieldId);
        }
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
}
src/main/resources/mybatis/query-template/companyField-template.xml
@@ -23,6 +23,9 @@
        <if test="id != '' and id != null">
            AND cf.id like CONCAT('%',#{id},'%')
        </if>
        <if test="url != '' and id != url">
            AND cf.url like CONCAT('%',#{url},'%')
        </if>
        ORDER BY cf.id DESC
        <if test="pageSize != '' and pageSize != null">
            limit #{pageSize} offset #{page};