OWL ITS + 탐지시스템(인터넷 진흥원)
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -313,7 +313,7 @@
        }
    }
    private void findCompanyField(IssueForm issueForm) {
    private IssueForm findCompanyField(IssueForm issueForm) {
        if(issueForm.getIssueCustomFields() != null && issueForm.getIssueCustomFields().size() > 0) {
            CompanyFieldCondition condition = new CompanyFieldCondition();
            List<Map<String, Object>> companyFields = this.companyFieldService.find(condition);
@@ -356,6 +356,7 @@
                issueForm.setIssueHostingFields(issueHostingFields);
            }
        }
        return issueForm;
    }
    private User convertToUser(String token) {
@@ -381,7 +382,14 @@
        } else {
            // 가상 상위 이슈 추가
            IssueForm parentIssueForm = issueForm.clone();
            // 가상 상위 이슈 추가
            parentIssueForm.setUseIssueCustomFields(issueApiForm.getUseIssueCustomFieldIds());
            //  같은 도메인 업체 찾기
            IssueForm partners = this.findCompanyField(parentIssueForm);
            parentIssueForm.setIssueCompanyFields(partners.getIssueCompanyFields());
            parentIssueForm.setIssueIspFields(partners.getIssueIspFields());
            parentIssueForm.setIssueHostingFields(partners.getIssueHostingFields());
            Issue issue = addIssue(user, parentIssueForm, null);
            issues.add(issue);
            // 하위 이슈 추가
@@ -414,7 +422,9 @@
            IssueCustomFieldValueFormComparator comp = new IssueCustomFieldValueFormComparator();
            Collections.sort(issueCustomFieldValueForms, comp);
            List<String> userValues = Lists.newArrayList();
            for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) {
                userValues.add(issueCustomFieldValueForm.getUseValue());
                for(CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) {
                    if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValueForm.getCustomFieldId())) {
                        if (useIdx > 0) {
@@ -428,6 +438,7 @@
            IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
            issueCustomFieldValueCondition.setUseValue(concatUseValue);
            issueCustomFieldValueCondition.setUseValues(userValues);
            issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId());
            List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
            if (results != null && results.size() > 0) {
@@ -498,7 +509,6 @@
        this.issueIspService.modifyIssueIspField(issue, issueForm);
        //  HOSTING 정보 저장
        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
        //  첨부 파일 저장
        //  multipartFile 을 file Map List 객체로 변경한다.
@@ -716,7 +726,7 @@
    }
    //  이슈 정보를 이메일 전송에 사용하기 위해 Map 형태로 변환한다.
    private void makeIssueMapToIssue(Issue issue, Map<String, Object> issueMap) {
    public void makeIssueMapToIssue(Issue issue, Map<String, Object> issueMap) {
        issueMap.put("title", issue.getTitle());
        issueMap.put("issueNumber", issue.getIssueNumber());
        issueMap.put("issueTypeName", issue.getIssueType().getName());
@@ -1759,6 +1769,7 @@
        List<Issue> resultIssueVos = Lists.newArrayList();
        String comma = ",";
        List<String> userValues = Lists.newArrayList();
        if (issueCustomFieldValueForms.size() > 0) {
            IssueCustomFieldValueFormComparator comp = new IssueCustomFieldValueFormComparator();
            Collections.sort(issueCustomFieldValueForms, comp);
@@ -1766,6 +1777,7 @@
            String concatUseValue = "";
            for (int i = 0; i < issueCustomFieldValueForms.size(); i++) {
                IssueCustomFieldValueForm issueCustomFieldValueForm = issueCustomFieldValueForms.get(i);
                userValues.add(issueCustomFieldValueForm.getUseValue());
                if (i > 0) {
                    concatUseValue = concatUseValue.concat(comma);
                }
@@ -1774,6 +1786,7 @@
            IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
            issueCustomFieldValueCondition.setUseValue(concatUseValue);
            issueCustomFieldValueCondition.setUseValues(userValues);
            issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId());
            List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
            if (results != null && results.size() > 0) {
@@ -1897,6 +1910,13 @@
    // 이슈 수정(API용)
    private Issue modifyIssueForApi(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) {
        CheckIssueData checkIssueData = this.checkIssue(user, issueForm);
        if (issueForm.getComment() != null && !issueForm.getComment().equals("")) { //댓글 추가
            IssueCommentForm issueCommentForm = new IssueCommentForm();
            issueCommentForm.setDescription(issueForm.getComment());
            issueCommentForm.setIssueId(issueForm.getId());
            this.issueCommentService.addIssueComment(issueCommentForm, user);
        }
        // 이슈 이력 남기기
        this.addIssueHistoryModify(user, issueForm, checkIssueData, multipartFiles);
@@ -3712,28 +3732,31 @@
    @Transactional
    @Override
    public void modifyParentIssue(IssueForm issueDownForm) {
        Issue issue = this.getIssue(issueDownForm.getId()); //하위 이슈
        //Issue issue = this.getIssue(issueDownForm.getId()); //하위 이슈
        Long newParentIssueId = issueDownForm.getParentIssueId(); //변경할 하위이슈의 상위이슈
        StringBuilder sb = new StringBuilder();
        Issue parentIssue = issue.getParentIssue(); //변경 전 하위이슈의 상위이슈
        if(parentIssue != null && parentIssue.getId().equals(newParentIssueId)){ //변경 전 하위이슈의 상위이슈가 존재 할 경우
            this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
            this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString());
        }
        for (Long downId : issueDownForm.getIds()) {
            Issue issue = this.getIssue(downId);
        if (newParentIssueId != null) { // 추가 할 경우
            parentIssue = this.getIssue(newParentIssueId); //상위이슈(myIssue)
            issue.setParentIssue(parentIssue); //myIssue를 하위이슈의 상위이슈로 set
            this.issueHistoryService.detectDownIssues(IssueHistoryType.ADD, issue, sb); //issue = 하위이슈
        } else{
            // 삭제 할 경우
            this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
            issue.setParentIssue(null);
            Issue parentIssue = issue.getParentIssue(); //변경 전 하위이슈의 상위이슈
            if(parentIssue != null && parentIssue.getId().equals(newParentIssueId)){ //변경 전 하위이슈의 상위이슈가 존재 할 경우
                this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
                this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString());
            }
            if (newParentIssueId != null) { // 추가 할 경우
                parentIssue = this.getIssue(newParentIssueId); //상위이슈(myIssue)
                issue.setParentIssue(parentIssue); //myIssue를 하위이슈의 상위이슈로 set
                this.issueHistoryService.detectDownIssues(IssueHistoryType.ADD, issue, sb); //issue = 하위이슈
            } else{
                // 삭제 할 경우
                this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
                issue.setParentIssue(null);
            }
            this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(기록은 현재 상세페이지에 해야하니까)
            this.issueRepository.saveAndFlush(issue);
        }
        this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(기록은 현재 상세페이지에 해야하니까)
        this.issueRepository.saveAndFlush(issue);
    }
    @Override