OWL ITS + 탐지시스템(인터넷 진흥원)
src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -60,6 +60,9 @@
    private WorkflowStatusService workflowStatusService;
    @Autowired
    private WorkflowDepartmentService workflowDepartmentService;
    @Autowired
    private WorkspaceService workspaceService;
    @Autowired
@@ -121,8 +124,10 @@
        project.setProjectKey("BTS");
        project.setStatus(Project.PROJECT_OPEN);
        project.setDescription(this.messageAccessor.message("common.intoTheSystemIssueManagementProject")); // 시스템에서 기본으로 제공되는 이슈 관리 프로젝트입니다.
        project.setStartDate(DateUtil.convertDateToYYYYMMDD(new Date()));
        project.setEndDate(DateUtil.convertDateToYYYYMMDD(DateUtil.addDays(new Date(), 3650)));
        //project.setStartDate(DateUtil.convertDateToYYYYMMDD(new Date()));
        //project.setEndDate(DateUtil.convertDateToYYYYMMDD(DateUtil.addDays(new Date(), 3650)));
        project.setStartDate("");//null표시 방지
        project.setEndDate("");
        //  기본으로 생성되는 프로젝트의 유형은 BTS
        project.setProjectType(ProjectType.BTS_PROJECT);
        project.setWorkspace(workspace);
@@ -389,6 +394,7 @@
        int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
        //  프로젝트 조회 결과를 ProjectVos 로 변환한다. - 관리자, 일반 사용자 정보 추가
        List<ProjectVo> projectVos = this.makeProjectVos(results, user);
        this.setParentProject(projectVos);
        this.setChildrenProject(projectVos, user);
        resJsonData.put(Constants.RES_KEY_CONTENTS, projectVos);
@@ -396,6 +402,13 @@
                totalPage, totalCount));
        return projectVos;
    }
    //  이슈유형에 속한 프로젝트 목록을 조회한다.
    @Override
    @Transactional(readOnly = true)
    public void findIssueType(Map<String, Object> resJsonData, ProjectCondition condition) {
        resJsonData.put(Constants.RES_KEY_CONTENTS, this.projectMapper.findByIssueType(condition));
    }
    void setChildrenProject(List<ProjectVo> projectVos, User user) {
@@ -449,6 +462,20 @@
        }
        return projectVos;
    }
    //  상위 프로젝트를 찾아준다.
    private void setParentProject(List<ProjectVo> projectVos) {
        for (ProjectVo projectVo : projectVos) {
            ProjectClosure projectClosure = this.projectClosureRepository.findByProjectId(projectVo.getId());
            if (projectClosure != null) {
                Project parentProject = this.getProject(projectClosure.getParentProject().getId());
                ProjectVo parentProjectVo = ConvertUtil.copyProperties(parentProject, ProjectVo.class);
                parentProjectVo.setParentYn(true);
                ConvertUtil.copyProperties(parentProjectVo, projectVo);
                this.setProjectDepartment(projectVo);
            }
        }
    }
    //  관리자, 일반 사용자를 조건에 따라 찾아준다.
@@ -795,8 +822,11 @@
        }
        projectRole.getProjectRoleDepartments().clear();
        this.checkDepartmentOfWorkflow(project, projectForm.getDepartmentIds());
        for (Long departmentId : projectForm.getDepartmentIds()) {
            Department department = this.departmentService.getDepartment(departmentId);
            department.addProjectRole(projectRole);
        }
@@ -810,6 +840,33 @@
        return results;
    }
    /**
     * 프로젝트와 연결된 이슈유형의 워크플로우에서 설정한 부서는 프로젝트 담당부서에서 제외 불가
     * @param project Project
     * @param departmentIds List<Long>
     */
    private void checkDepartmentOfWorkflow(Project project, List<Long> departmentIds) {
        List<IssueType> issueTypes = this.issueTypeService.findByProjectId(project.getId());
        List<Long> workflowDepartmentIds = Lists.newArrayList();
        if (issueTypes != null && issueTypes.size() > 0) {
            for (IssueType issueType : issueTypes) {
                List<WorkflowDepartment> workflowDepartments = this.workflowDepartmentService.find(issueType.getWorkflow().getId());
                if (workflowDepartments != null && workflowDepartments.size() > 0) {
                    for (WorkflowDepartment workflowDepartment : workflowDepartments) {
                        workflowDepartmentIds.add(workflowDepartment.getDepartment().getId());
                        if (!departmentIds.containsAll(workflowDepartmentIds)) {
                            throw new OwlRuntimeException(
                                    this.messageAccessor.getMessage(MsgConstants.PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW));
                        }
                    }
                }
            }
        }
    }
    //  프로젝트 참여, 제외 통지 정보를 중복으로 나가지 않도록 체크한다.
@@ -1293,4 +1350,4 @@
        resJsonData.put(Constants.RES_KEY_CONTENTS, ConvertUtil.copyProperties(project, ProjectVo.class));
    }
}
}