OWL ITS + 탐지시스템(인터넷 진흥원)
- 이슈 담당부서 수정시 프로젝트 내의 부서로 검색 가능하도록 수정
- 이슈 유형의 '사용 프로젝트'의 담당부서를 '워크플로우'의 담당부서로 세팅
8개 파일 변경됨
110 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MsgConstants.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueTypeService.java 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java 38 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/utils/autoComplete.controller.js 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -283,6 +283,7 @@
    public static final String ISP_EXIST_COMPANY = "ISP_EXIST_COMPANY";   // 업체에 설정되어있는 ISP가 존재합니다.
    public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT";   // 선택한 부서 중 프로젝트에 참여하고 있지 않은 부서가 있습니다.
    public static final String PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW = "PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW"; // 해당 프로젝트에 속해있는 워크플로우의 담당부서는 프로젝트의 담당부서에서 제외시킬 수 없습니다.
    public static final String EMAIL_TEMPLATE_NOT_EXIST = "EMAIL_TEMPLATE_NOT_EXIST"; //  이메일 템플릿을 찾을수 없습니다.
src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
@@ -16,4 +16,6 @@
    List<IssueType> findByWorkspaceId(@Param("workspaceId") Long workspaceId);
    List<IssueType> findByProjectId(@Param("projectId") Long projectId);
    List<IssueType> findByWorkflowId(@Param("workflowId") Long id);
}
src/main/java/kr/wisestone/owl/service/IssueTypeService.java
@@ -1,6 +1,7 @@
package kr.wisestone.owl.service;
import kr.wisestone.owl.domain.IssueType;
import kr.wisestone.owl.domain.Workflow;
import kr.wisestone.owl.domain.Workspace;
import kr.wisestone.owl.domain.enumType.ProjectType;
import kr.wisestone.owl.vo.IssueTypeVo;
@@ -41,5 +42,7 @@
    List<IssueType> findByWorkspaceId();
    List<IssueType> findByWorkflowId(Long workflowId);
    ModelAndView downloadExcel(HttpServletRequest request, Model model);
}
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -51,7 +51,13 @@
    private WorkflowService workflowService;
    @Autowired
    private WorkflowDepartmentService workflowDepartmentService;
    @Autowired
    private ProjectService projectService;
    @Autowired
    private ProjectRoleService projectRoleService;
    @Autowired
    private WorkspaceService workspaceService;
@@ -144,9 +150,31 @@
        Project project = this.projectService.getProject(issueTypeForm.getProjectId());
        issueType.setProject(project);
        //  워크플로우의 담당부서와 동일하게 세팅
        this.setDepartmentOfProject(project, workflow);
        issueType.setUsePartner(issueTypeForm.getUsePartner());
        return this.issueTypeRepository.saveAndFlush(issueType);
    }
    /**
     * 워크플로우의 담당부서와 동일하게 세팅
     * @param project Project
     * @param workflow Workflow
     */
    private void setDepartmentOfProject(Project project, Workflow workflow) {
        List<WorkflowDepartment> workflowDepartments = this.workflowDepartmentService.find(workflow.getId());
        //  해당 워크플로우의 담당부서가 존재 할 경우 해당 프로젝트의 담당부서에도 추가
        if (workflowDepartments != null && workflowDepartments.size() > 0) {
            ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT);
            for (WorkflowDepartment workflowDepartment : workflowDepartments) {
                //  프로젝트 담당부서로 추가
                projectRole.addDepartment(workflowDepartment.getDepartment());
            }
        }
    }
    //  이름 유효성 체크
@@ -402,6 +430,9 @@
        Project project = this.projectService.getProject(issueTypeForm.getProjectId());
        issueType.setProject(project);
        //  워크플로우의 담당부서와 동일하게 세팅
        this.setDepartmentOfProject(project, workflow);
        issueType.setUsePartner(issueTypeForm.getUsePartner());
        /*if(issueTypeForm.getCompanyId() != null){
@@ -485,6 +516,13 @@
        return this.issueTypeRepository.findByWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
    }
    //  워크플로우 ID로 이슈 유형 조회
    @Override
    @Transactional(readOnly = true)
    public List<IssueType> findByWorkflowId(Long id) {
        return this.issueTypeRepository.findByWorkflowId(id);
    }
    //  이슈 타입 필드 목록을 엑셀로 다운로드 한다.
    @Override
    @Transactional
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
@@ -819,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);
        }
@@ -836,6 +842,33 @@
    }
    /**
     * 프로젝트와 연결된 이슈유형의 워크플로우에서 설정한 부서는 프로젝트 담당부서에서 제외 불가
     * @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));
                        }
                    }
                }
            }
        }
    }
    //  프로젝트 참여, 제외 통지 정보를 중복으로 나가지 않도록 체크한다.
    private void notificationProjectRoleUser(Map<String, Object> changeProjectManagerNotifications, Map<String, Object> changeProjectUserNotifications, Project project) {
        List<String> projectManagerExcludeUsers = (List<String>) changeProjectManagerNotifications.get("excludeUsers");  //  관리자 제외 사용자
src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java
@@ -43,6 +43,12 @@
    @Autowired
    private DepartmentService departmentService;
    @Autowired
    private IssueTypeService issueTypeService;
    @Autowired
    private ProjectRoleService projectRoleService;
    @Override
    protected JpaRepository<WorkflowDepartment, Long> getRepository() {
        return workflowDepartmentRepository;
@@ -152,9 +158,31 @@
                workflowDepartment.setDepartment(department);
                workflowDepartmentList.add(workflowDepartment);
                //  변경한 워크플로우의 담당부서를 이슈유형과 연결된 프로젝트의 담당부서에도 세팅
                this.setDepartmentOfProject(workflow, department);
             }
        }
        this.workflowDepartmentRepository.saveAll(workflowDepartmentList);
    }
    /**
     * 워크플로우의 담당부서를 이슈유형과 연결된 프로젝트의 담당부서에도 세팅
     * @param workflow Workflow
     * @param department Department
     */
    private void setDepartmentOfProject(Workflow workflow, Department department) {
        List<IssueType> issueTypeList = this.issueTypeService.findByWorkflowId(workflow.getId());
        if (issueTypeList != null && issueTypeList.size() > 0) {
            for (IssueType issueType : issueTypeList) {
                if (issueType.getProject() != null) {
                    ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(issueType.getProject().getId(), ProjectRole.TYPE_DEFAULT);
                    //  프로젝트 담당부서로 추가
                    projectRole.addDepartment(department);
                }
            }
        }
    }
    @Override
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -25,6 +25,7 @@
PROJECT_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
PROJECT_NOT_INCLUDE_USER = \uC120\uD0DD\uD55C \uB2F4\uB2F9\uC790 \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\uAC00 \uC788\uC2B5\uB2C8\uB2E4.
PROJECT_NOT_INCLUDE_DEPARTMENT = \uC120\uD0DD\uD55C \uBD80\uC11C \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uBD80\uC11C\uAC00 \uC788\uC2B5\uB2C8\uB2E4.
PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW = \uD574\uB2F9 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC18D\uD574\uC788\uB294 \uC6CC\uD06C\uD50C\uB85C\uC6B0\uC758 \uB2F4\uB2F9\uBD80\uC11C\uB294 \uD504\uB85C\uC81D\uD2B8\uC758 \uB2F4\uB2F9\uBD80\uC11C\uC5D0\uC11C \uC81C\uC678\uC2DC\uD0AC \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
PROJECT_USED_PROJECT_KEY = \uD504\uB85C\uC81D\uD2B8 \uD0A4\uAC00 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.
PARENT_SECTOR_NOT_SELECT = \uC5C5\uC885(\uB300\uBD84\uB958)\uB97C \uBA3C\uC800 \uC120\uD0DD \uD574 \uC8FC\uC138\uC694.
PARENT_SECTOR_NOT_EQUAL = \uC120\uD0DD\uD55C \uC5C5\uC885(\uC911\uBD84\uB958)\uB294 \uC5C5\uC885(\uB300\uBD84\uB958)\uC5D0 \uC18D\uD574\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
src/main/webapp/scripts/components/utils/autoComplete.controller.js
@@ -434,8 +434,8 @@
                    var deferred = $q.defer();
                    //워크플로우에 속해있는 담당부서 찾기
                    UserWorkspace.findWorkflowDepartment($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                    //프로젝트에 속해있는 담당부서 찾기
                    UserWorkspace.findProjectDepartment($resourceProvider.getContent(         //  페이징 업데이트가 필요한 컴포넌트 일경우, page 업데이트가 있을 경우 기본 10개씩 가져오고 아닐경우 25개씩 가져온다.
                        conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) {
                        if (result.data.message.status === "success") {
                            const departments = result.data.data;