OWL ITS + 탐지시스템(인터넷 진흥원)
박지현
2022-03-07 398a4927e195755bd6a46be99337efd8dacc3dc2
src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -60,10 +60,16 @@
    private WorkflowStatusService workflowStatusService;
    @Autowired
    private WorkflowDepartmentService workflowDepartmentService;
    @Autowired
    private WorkspaceService workspaceService;
    @Autowired
    private UserWorkspaceService userWorkspaceService;
    @Autowired
    private IssueTypeService issueTypeService;
    @Autowired
    private UserLevelService userLevelService;
@@ -118,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);
@@ -368,8 +376,7 @@
            //  관리자일 때
            UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
            if (this.userWorkspaceService.checkWorkspaceManager(user)
                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)
                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) {
                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
                results = this.projectMapper.findByWorkspaceManager(condition);
                totalCount = this.projectMapper.countByWorkspaceManager(condition);
            }
@@ -387,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);
@@ -394,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) {
@@ -447,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);
            }
        }
    }
    //  관리자, 일반 사용자를 조건에 따라 찾아준다.
@@ -562,7 +591,7 @@
        User user = this.webAppUtil.getLoginUserObject();
        //  워크스페이스에서 기본으로 제공되는 프로젝트에 대한 체크
        this.checkDefaultProject(project, projectForm);
        //this.checkDefaultProject(project, projectForm);
        //  수정 권한 체크
        this.checkModifyPermission(project.getId(), user);
        //  관리자 변경
@@ -687,6 +716,20 @@
        }
    }
    private void checkUsingIssueType(Long projectId) {
        Boolean del = Boolean.FALSE;
        List<IssueType> usingIssueTypes = this.issueTypeService.findByProjectId(projectId);
        if (usingIssueTypes == null || usingIssueTypes.isEmpty()) {
            del = true;
        }
        if (!del) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_DELETE));
        }
    }
    //  로그인한 사용자가 관리자 역할에 소속되어 있는지 확인한다.
    private void checkModifyPermission(Long projectId, User user) {
        Boolean hasPermission = Boolean.FALSE;
@@ -779,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);
        }
@@ -794,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));
                        }
                    }
                }
            }
        }
    }
    //  프로젝트 참여, 제외 통지 정보를 중복으로 나가지 않도록 체크한다.
@@ -1025,10 +1098,11 @@
    private void removeProjects(Long projectId) {
        Project project = this.getProject(projectId);
        //  기본 프로젝트는 삭제 금지
        if (project.getDefaultYn()) {
        /*if (project.getDefaultYn()) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.DEFAULT_PROJECT_NOT_REMOVE));
        }
        }*/
        this.checkUsingIssueType(project.getId());
        //  로그인한 사용자가 관리자 역할에 소속되어 있는지 확인한다.
        this.checkModifyPermission(project.getId(), this.webAppUtil.getLoginUserObject());
@@ -1083,7 +1157,7 @@
        projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
        projectCondition.setProjectType(projectType);
        projectCondition.setStatuses(statuses);
        this.SetMyDepartmentId(projectCondition);
        return this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition);
    }
@@ -1092,6 +1166,7 @@
    public List<Map<String, Object>> findByWorkspaceIdAndIncludeProject(ProjectCondition projectCondition) {
        projectCondition.setLoginUserId(this.webAppUtil.getLoginId());
        projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
        this.SetMyDepartmentId(projectCondition);
        return this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition);
    }
@@ -1118,7 +1193,15 @@
    public List<Map<String, Object>> findByWorkspaceIdAndIncludeProjectAll(ProjectCondition projectCondition) {
        projectCondition.setLoginUserId(this.webAppUtil.getLoginId());
        projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
        return this.projectMapper.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
        UserWorkspace userWorkspace = this.userWorkspaceService.findWorkspaceManager(this.webAppUtil.getLoginId());
        List<Map<String, Object>> results = Lists.newArrayList();
        if(userWorkspace != null) {// 워크스페이스 관리자일경우
            results = this.projectMapper.findByWorkspaceIdAndProjectAll(projectCondition);
        } else {
            results = this.projectMapper.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
        }
        return results;
    }
    //  현재 접근한 업무공간에서 참여하고 있는 프로젝트를 조회한다. - 상단 프로젝트 목록에서 사용
@@ -1137,10 +1220,10 @@
        List<Map<String, Object>> results;
        if (this.userWorkspaceService.checkWorkspaceManager(user)
                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)
                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) {
                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
            results = this.projectMapper.findByWorkspaceManager(projectCondition);
        } else {
            this.SetMyDepartmentId(projectCondition);
            results = this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition);
        }
        List<ProjectVo> projectVos = this.makeProjectByVos(results);
@@ -1175,8 +1258,7 @@
        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
        if (this.userWorkspaceService.checkWorkspaceManager(user)
                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)
                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) {
                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
            results = this.projectMapper.findByWorkspaceManager(projectCondition);
        }
        else {
@@ -1268,4 +1350,4 @@
        resJsonData.put(Constants.RES_KEY_CONTENTS, ConvertUtil.copyProperties(project, ProjectVo.class));
    }
}
}