OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-03 ce94f7bc88b93c3059e4b7e7581e5ee80ef381b7
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -188,11 +188,7 @@
    }
    //  API 를 통해 이슈 추가.
    @Override
    @Transactional
    public Issue addApiIssue(IssueApiForm issueApiForm) {
    private IssueForm convertToIssueForm(IssueApiForm issueApiForm, User user) {
        if (issueApiForm.getIssueTypeId() == null) {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR));
        }
@@ -211,14 +207,7 @@
        }
        issueForm.setProjectId(project.getId());
        // 토큰으로 유저 정보 가져오기
        String token = issueApiForm.getToken();
        UserVo userVo = this.apiTokenService.certification(token);
        // 해당 유저 정보가 현재 db에 있는지 확인
        User user = this.userService.getUser(userVo.getId());
        if (user != null) {
            // 기본값 입력하기
            IssueApiDefaultForm issueApiDefaultForm = new IssueApiDefaultForm();
            issueApiDefaultForm.setUserId(user.getId());
@@ -226,6 +215,7 @@
            IssueApiDefault issueApiDefault = this.issueApiDefaultService.find(issueApiDefaultForm);
            if (issueApiDefault != null) {
                ConvertUtil.copyProperties(issueApiDefault, issueForm);
                issueForm.setId(null);
                issueForm.setPriorityId(issueApiDefault.getPriority().getId());
                issueForm.setSeverityId(issueApiDefault.getSeverity().getId());
            }
@@ -248,11 +238,33 @@
            // api 입력값 적용
            ConvertUtil.copyProperties(issueApiForm, issueForm);
            return addIssue(user, issueForm, issueApiForm.getMultipartFiles());
            return issueForm;
        } else {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_USER_ERROR));
        }
    }
    private User convertToUser(String token) {
        // 토큰으로 유저 정보 가져오기
        UserVo userVo = this.apiTokenService.certification(token);
        // 해당 유저 정보가 현재 db에 있는지 확인
        return this.userService.getUser(userVo.getId());
    }
    //  API 를 통해 이슈 추가.
    @Override
    @Transactional
    public Issue addApiIssue(IssueApiForm issueApiForm) {
        User user = convertToUser(issueApiForm.getToken());
        IssueForm issueForm = this.convertToIssueForm(issueApiForm, user);
        return addIssue(user, issueForm, issueApiForm.getMultipartFiles());
    }
    // 중복된 상위 이슈 검색
    private IssueVo findIssue(IssueApiForm issueApiForm, Long userId) {
@@ -316,6 +328,10 @@
        issue.setIssueType(issueType);
        issue.setPriority(priority);
        issue.setSeverity(severity);
        if (issueForm.getParentIssueId() != null){
            Issue parentIssue = this.getIssue(issueForm.getParentIssueId());
            issue.setParentIssue(parentIssue);
        }
        issue.setIssueNumber(this.issueNumberGeneratorService.generateIssueNumber(project));    //  각 프로젝트의 고유 이슈 번호 생성
@@ -1010,7 +1026,6 @@
        if(downIssues != null && downIssueVos.size()>0){
            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));
@@ -1210,12 +1225,29 @@
        issueVo.setIssueHistoryVos(this.issueHistoryService.findIssueHistory(issue.getId()));
    }
    // 이슈를 수정한다
    @Override
    public Issue modifyIssue(IssueApiForm issueApiForm, List<MultipartFile> files) {
        User user = this.convertToUser(issueApiForm.getToken());
        IssueForm issueForm = this.convertToIssueForm(issueApiForm, user);
        return this.modifyIssue(user, issueForm, files);
    }
    //  이슈를 수정한다.
    @Override
    @Transactional
    public Issue modifyIssue(IssueForm issueForm, List<MultipartFile> multipartFiles) {
        User user = this.webAppUtil.getLoginUserObject();
        return modifyIssue(user, issueForm, multipartFiles);
    }
    //  이슈를 수정한다.
    @Override
    @Transactional
    public Issue modifyIssue(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) {
        //  사용하고 있는 업무 공간이 활성 상태인지 확인한다. 사용 공간에서 로그인한 사용자가 비활성인지 확인한다.
        this.workspaceService.checkUseWorkspace();
        this.workspaceService.checkUseWorkspace(user, user.getLastWorkspaceId());
        //  이슈 수정 권한 체크
        this.verifyIssueModifyPermission(issueForm.getId());
        //  프로젝트 유효성 체크
@@ -1267,14 +1299,14 @@
        //this.issueUserService.modifyIssueUser(issue, project.getWorkspace(), issueForm.getUserIds());
        //  담당부서 지정
        if(issueForm.getDepartmentIds().size()>0){
            this.issueDepartmentService.modifyIssueDepartment(issue, project.getWorkspace(), issueForm.getDepartmentIds());
            this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
        }
        //  multipartFile 을 file Map List 객체로 변경한다.
        List<Map<String, Object>> convertFileMaps = this.convertMultipartFileToFile(multipartFiles);
        //  첨부 파일 저장 - 비동기로 작동
        this.attachedFileService.addAttachedFile(convertFileMaps, issue, this.webAppUtil.getLoginUser().getAccount());
        this.attachedFileService.addAttachedFile(convertFileMaps, issue, user.getAccount());
        //  삭제된 첨부파일 처리
        this.attachedFileService.removeAttachedFiles(issueForm.getRemoveFiles());
        //  텍스트 에디터에 첨부한 파일을 이슈와 연결
@@ -1283,7 +1315,7 @@
        this.issueCustomFieldValueService.modifyIssueCustomFieldValue(issue, issueForm.getIssueCustomFields());
        //  이슈 이력 등록
        if (!StringUtils.isEmpty(detectIssueChange.toString())) {
            this.issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, detectIssueChange.toString());
            this.issueHistoryService.addIssueHistory(issue, user, IssueHistoryType.MODIFY, detectIssueChange.toString());
        }
        //  사용자 시스템 기능 사용 정보 수집
        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_MODIFY));