OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-11-26 247dcf648bbceb4cc4f2fa405c1e331e9b901181
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -6,6 +6,7 @@
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.constant.ElasticSearchConstants;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.constant.UseCompany;
import kr.wisestone.owl.domain.*;
import kr.wisestone.owl.domain.enumType.CustomFieldType;
import kr.wisestone.owl.domain.enumType.EmailType;
@@ -573,13 +574,6 @@
        //  사용자 정의 필드 정보 추가
        this.setIssueCustomFieldValue(issueVos, issueCondition);
        //  업체 정보 추가
        //this.setIssueCompanyField(issueVos, issueCondition);
        //  ISP 정보 추가
        //this.setIssueIspField(issueVos, issueCondition);
        //  HOSTING 정보 추가
        //this.setIssueHostingField(issueVos, issueCondition);
    }
    //  검색 조건을 만든다
@@ -815,7 +809,7 @@
                    this.setAttachedFiles(issue, issueVo);  //  첨부 파일 정보 셋팅
                    this.setIssueCustomFields(issue, issueVo);  //  사용자 정의 필드 값 정보 셋팅
                    this.setRelationIssue(issue, issueVo);        //연관 일감 셋팅
                    this.setDownIssues(issue, issueVo);
                    this.setDownIssues(issue, issueVo); //하위 이슈 세팅
                    break;
@@ -834,8 +828,22 @@
    // 하위 이슈 정보를 셋팅한다
    private void setDownIssues(Issue issue, IssueVo issueVo) {
        List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId());
        List<IssueVo> issueVos = ConvertUtil.convertObjectsToClasses(downIssues, IssueVo.class);
        issueVo.setIssueDownVos(issueVos);
        List<IssueVo> downIssueVos = ConvertUtil.convertObjectsToClasses(downIssues, IssueVo.class);
        List<IssueVo> resultList = new ArrayList<>();
        for(IssueVo downIssueVo : downIssueVos){
            for(Issue downIssue : downIssues){
                downIssueVo.setTitle(downIssue.getTitle());
                downIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class));
                downIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class));
                downIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class));
                this.setRegister(downIssue, downIssueVo); // 등록자
                this.setIssueDepartment(downIssue, downIssueVo);  //  담당부서 정보 셋팅
                this.setIssueCustomFields(downIssue, downIssueVo);   // 사용자정의필드 정보 세팅
            }
            resultList.add(downIssueVo);
        }
        issueVo.setIssueDownVos(resultList); //프론트에서 List형태로 받아줘서 리스트 형식으로 보내줌
    }
    //  이슈 상세 정보를 셋팅한다.
@@ -858,9 +866,35 @@
        this.setIssueHistory(issue, issueVo);   //  이슈 기록 정보 셋팅
        this.setRelationIssue(issue, issueVo);        //연관 일감 셋팅
        this.setDownIssues(issue, issueVo);
        IssueType issueType = this.issueTypeService.getIssueType(issueVo.getIssueTypeVo().getId()); // 이슈의 이슈유형 객체
        Integer using = issueType.getUseCompany() != null ? issueType.getUseCompany().intValue() : 0; // 이슈유형별로 사용중인 업체/ISP/호스팅 값
        List<UseCompanyVo> useCompanyVos = Lists.newArrayList();
        for (Integer useAbleCompany : UseCompany.useCompanies) { //1(업체), 2(ISP), 4(호스팅)
            UseCompanyVo useCompanyVo = UseCompany.checkUseCompany(using, useAbleCompany);
            if (useCompanyVo != null) {
                useCompanyVos.add(useCompanyVo);
                //useCompanyVo.setValues();
            }
            issueVo.setUseCompanyVo(useCompanyVos);
        }
//        List<UseCompanyVo> useCompanyVoList =issueVo.getIssueTypeVo().getUseCompanyVos();
//        for (Integer useCompany : UseCompany.useCompanies) {
//            UseCompanyVo useCompanyVo = UseCompany.checkUseCompany(use, useCompany);
//
//            if (useCompanyVo != null) {
//                useCompanyVoList.add(useCompanyVo);
//            }
//        }
        this.setIssueCompanyField(issue, issueVo);  //업체 정보 세팅
        this.setIssueIspField(issue, issueVo);  //ISP 정보 세팅
        this.setIssueHostingField(issue, issueVo);  //HOSTING 정보 세팅
        this.setParentIssue(issue,issueVo); //상위 이슈 정보 세팅
    }
@@ -908,6 +942,12 @@
                issueRelationVo.setIssueRelation(relIssueVo);
                issueRelationVo.setTitle(relationIssue.getTitle());
                issueRelationVo.setIssueTypeVo(ConvertUtil.copyProperties(relationIssue.getIssueType(), IssueTypeVo.class));
                issueRelationVo.setPriorityVo(ConvertUtil.copyProperties(relationIssue.getPriority(), PriorityVo.class));
                issueRelationVo.setSeverityVo(ConvertUtil.copyProperties(relationIssue.getSeverity(), SeverityVo.class));
                this.setRegister(relationIssue, relIssueVo); // 등록자
                this.setIssueDepartment(relationIssue, relIssueVo);  //  담당부서 정보 셋팅
                this.setIssueCustomFields(relationIssue, relIssueVo);   // 사용자정의필드 정보 세팅
                issueVo.addIssueRelationVo(issueRelationVo);
            }
        } else {
@@ -1770,6 +1810,14 @@
            //  이슈 상태 변경
            this.modifyIssueStatus(issueForm);
        }
        // 담당 부서 수정
        if (issueForm.getDepartmentIds().size() > 0) {
            Issue issue = this.getIssue(issueForm.getId());
            Project project = this.projectService.getProject(issueForm.getProjectId());
            this.issueDepartmentService.modifyIssueDepartment(issue, project.getWorkspace(), issueForm.getDepartmentIds());
        }
    }
    //  이슈 Import 용 엑셀 템플릿 다운로드
@@ -2627,28 +2675,23 @@
    @Transactional
    @Override
    public void modifyParentIssue(IssueForm issueDownForm) {
        System.out.println(issueDownForm.getTitle());
        Issue issue = this.getIssue(issueDownForm.getId());
        Issue parentIssue = issue.getParentIssue();
        Issue issue = this.getIssue(issueDownForm.getId()); //하위 이슈
        Issue parentIssue = issue.getParentIssue(); //변경 전 하위이슈의 상위이슈
        Long newParentIssueId = issueDownForm.getParentIssueId();
        Long newParentIssueId = issueDownForm.getParentIssueId(); //변경할 하위이슈의 상위이슈
        StringBuilder sb = new StringBuilder();
        IssueHistoryType type =  IssueHistoryType.ADD;
        if (newParentIssueId != null) {
        if (newParentIssueId != null) { // 추가 할 경우
           // todo 이전 하위 일감 히스토리기록 필요
            type = IssueHistoryType.ADD;
            parentIssue = this.getIssue(newParentIssueId);
            issue.setParentIssue(parentIssue);
            this.issueHistoryService.detectDownIssues(type, issue, sb);
            parentIssue = this.getIssue(newParentIssueId); //상위이슈(myIssue)
            issue.setParentIssue(parentIssue); //myIssue를 하위이슈의 상위이슈로 set
            this.issueHistoryService.detectDownIssues(IssueHistoryType.ADD, issue, sb); //issue = 하위이슈
        } else  {
            // remove
            type = IssueHistoryType.DELETE;
            this.issueHistoryService.detectDownIssues(type, issue, sb);
            // 삭제 할 경우
            this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb);
            issue.setParentIssue(null);
        }
        this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString());
        this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(기록은 현재 상세페이지에 해야하니까)
        this.issueRepository.saveAndFlush(issue);
    }