OWL ITS + 탐지시스템(인터넷 진흥원)
- 일반 사용자로 검색 기능 제대로 동작안되는 문제 해결
- 이슈 유형에서 사용중인 프로젝트는 삭제 불가
- 이슈 유형에서 프로젝트 검색 시 워크스페이스 관리자는 모든 프로젝트 검색 가능(기존엔 참여하고있는 프로젝트만 검색가능하게되어있었음)
11개 파일 변경됨
127 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MsgConstants.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueTypeService.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java 34 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/project-template.xml 38 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/common/common.controller.js 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueList.controller.js 36 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -10,6 +10,7 @@
    public static final String PROJECT_NOT_EXIST = "PROJECT_NOT_EXIST";    //    프로젝트가 존재하지 않습니다.
    public static final String PROJECT_NOT_MANAGER = "PROJECT_NOT_MANAGER"; //  프로젝트 관리자가 존재하지 않습니다.
    public static final String PROJECT_NOT_MODIFY_PERMISSION = "PROJECT_NOT_MODIFY_PERMISSION"; //  프로젝트 관리 권한이 없습니다.
    public static final String PROJECT_NOT_DELETE = "PROJECT_NOT_DELETE"; //  이슈유형에서 사용중인 프로젝트 입니다.
    public static final String PROJECT_NOT_NAME = "PROJECT_NOT_NAME";   //  프로젝트 이름이 입력되지 않았습니다.
    public static final String PROJECT_NOT_STATUS = "PROJECT_NOT_STATUS";   //  프로젝트의 상태가 선택되지 않았습니다.
    public static final String DATE_NOT_EXIST = "DATE_NOT_EXIST";   //  날짜가 선택되지 않았습니다.
src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java
@@ -24,6 +24,8 @@
    List<Map<String, Object>> findByWorkspaceIdAndIncludeProject(ProjectCondition projectCondition);
    List<Map<String, Object>> findByWorkspaceIdAndProjectAll(ProjectCondition projectCondition);
    List<Map<String, Object>> findByWorkspaceIdAndIncludeProjectAll(ProjectCondition projectCondition);
    void deleteProject(Map<String, Object> deleteProjectMap);
src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java
@@ -15,4 +15,5 @@
    List<IssueType> findByWorkspaceId(@Param("workspaceId") Long workspaceId);
    List<IssueType> findByProjectId(@Param("projectId") Long projectId);
}
src/main/java/kr/wisestone/owl/service/IssueTypeService.java
@@ -37,6 +37,8 @@
    IssueType getIssueType(Long id);
    List<IssueType> findByProjectId(Long projectId);
    void removeIssueTypes(IssueTypeForm issueTypeForm);
    List<IssueType> findByWorkspaceId();
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -1246,7 +1246,7 @@
        }
        //  프로젝트를 선택하지 않았으면 해당 업무 공간에서 참여하고 있는 프로젝트를 찾는다.
        if (condition.getProjectIds().size() < 1) {
        /*if (condition.getProjectIds().size() < 1) {
            List<Map<String, Object>> projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType());
            List<Long> projectIds = Lists.newArrayList();
@@ -1263,7 +1263,7 @@
            if (projectIds.size() < 1) {
                return false;
            }
        }
        }*/
        return true;
    }
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -261,6 +261,11 @@
        }
    }
    //  이슈 유형에 프로젝트ID로 조회
    public List<IssueType> findByProjectId(Long projectId) {
        return this.issueTypeRepository.findByProjectId(projectId);
    }
    private void setUseIssueTypeByIssueStatus(List<IssueTypeVo> issueTypeVos) {
        for (IssueTypeVo issueTypeVo : issueTypeVos) {
            IssueType issueType = this.getIssueType(issueTypeVo.getId());
src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -66,6 +66,9 @@
    private UserWorkspaceService userWorkspaceService;
    @Autowired
    private IssueTypeService issueTypeService;
    @Autowired
    private UserLevelService userLevelService;
    @Autowired
@@ -561,7 +564,7 @@
        User user = this.webAppUtil.getLoginUserObject();
        //  워크스페이스에서 기본으로 제공되는 프로젝트에 대한 체크
        this.checkDefaultProject(project, projectForm);
        //this.checkDefaultProject(project, projectForm);
        //  수정 권한 체크
        this.checkModifyPermission(project.getId(), user);
        //  관리자 변경
@@ -683,6 +686,20 @@
                            this.messageAccessor.getMessage(MsgConstants.DEFAULT_PROJECT_MANAGER_NOT_CHANGE));
                }
            }
        }
    }
    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));
        }
    }
@@ -1024,10 +1041,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());
@@ -1118,7 +1136,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;
    }
    //  현재 접근한 업무공간에서 참여하고 있는 프로젝트를 조회한다. - 상단 프로젝트 목록에서 사용
src/main/resources/mybatis/query-template/project-template.xml
@@ -340,6 +340,44 @@
        AND p.workspace_id = #{workspaceId}
    </select>
    <!--    해당 업무 공간에서 진행중인 모든 프로젝트를 조회한다  -->
    <select id="findByWorkspaceIdAndProjectAll" resultType="java.util.HashMap"
            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
        SELECT
        DISTINCT p.id as id,
        p.name as name,
        p.description as description,
        p.status as status,
        p.start_date as startDate,
        p.end_date as endDate,
        p.project_key as projectKey,
        CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn
        FROM
        project p
        INNER JOIN project_role pr on p.id = pr.project_id
        INNER JOIN project_role_user pru on pru.project_role_id = pr.id
        WHERE p.workspace_id = #{workspaceId}
        <if test="name != '' and name != null">
            AND p.name like CONCAT('%',#{name},'%')
        </if>
        <choose>
            <when test="statuses.size != 0">
                AND p.status IN
                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
        <choose>
            <when test="excludeIds.size != 0">
                AND p.id NOT IN
                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </when>
        </choose>
    </select>
    <!--    해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다  -->
    <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties
@@ -14,6 +14,7 @@
PROJECT_NOT_EXIST = \uD504\uB85C\uC81D\uD2B8\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
PROJECT_NOT_MANAGER = \uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC\uC790\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
PROJECT_NOT_MODIFY_PERMISSION = \uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
PROJECT_NOT_DELETE = \uC774\uC288\uC720\uD615\uC5D0\uC11C \uC0AC\uC6A9\uC911\uC778 \uD504\uB85C\uC81D\uD2B8 \uC785\uB2C8\uB2E4.
PROJECT_NOT_NAME = \uD504\uB85C\uC81D\uD2B8 \uC774\uB984\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
PROJECT_NOT_STATUS = \uD504\uB85C\uC81D\uD2B8\uC758 \uC0C1\uD0DC\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
DATE_NOT_EXIST = \uAE30\uAC04\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.
src/main/webapp/scripts/app/common/common.controller.js
@@ -67,7 +67,8 @@
                    } else {
                        $rootScope.$broadcast("searchIssueList", {keyWord: $scope.vm.searchAll.keyWord});
                    }
                    //$scope.vm.searchAll.keyWord = "";
                    //$rootScope.previousGetParams = null;
                }
                function setLastIssueType() {
src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -52,7 +52,7 @@
                    issueTypeId : "",
                    partnerVos : "",
                    search : {
                        keyWord : "", //  전체 검색
                        keyWord : "", //  검색
                        title : "", //  제목
                        description : "",   //  내용
                        combinationIssueNumber : "",   //  이슈 번호
@@ -65,6 +65,9 @@
                        priorityIds : [],   //  우선순위 검색
                        issueStatusIds : [],    //  이슈 상태 검색
                        issueTypeIds : []   //  이슈 유형 검색
                    },
                    searchAll : {
                        keyWord : "", //  전체 검색
                    },
                    searchView : false, //  상세 검색 조건 표시 여부
                    detailView : false, //  상세 모드 변경 값
@@ -131,7 +134,7 @@
                // 상단 검색시
                $rootScope.$on("searchIssueList", function (event, args) {
                    $scope.vm.search.keyWord = args.keyWord;
                    $scope.vm.searchAll.keyWord = args.keyWord;
                    $scope.fn.getPageList(0);
                });
@@ -622,7 +625,7 @@
                    // 검색 기본값 세팅
                    $scope.vm.search.issueTypeIds = [];
                    $scope.vm.projects = [];
                    if ($scope.vm.search.keyWord == null || $scope.vm.search.keyWord === "") {
                    if ($scope.vm.searchAll.keyWord == null || $scope.vm.searchAll.keyWord === "") {
                        // 메뉴에서 선택된 이슈 유형을 기본으로 추가
                        if ($rootScope.issueTypeMenu != null) {
                            //$scope.vm.pageTitle = $rootScope.issueTypeMenu.name;
@@ -631,19 +634,19 @@
                                fieldKey: $rootScope.issueTypeMenu.id,
                                fieldValue: $rootScope.issueTypeMenu.name
                            });
                            //  검색 조건을 저장한다.
                            //$scope.fn.makeVmSearchObject();
                            // 현재 선택된 프로젝트를 검색 기본으로 추가
                            if ($rootScope.workProject != null && $rootScope.workProject.id > -1) {
                                var find = findProjectSearch($rootScope.workProject.id);
                                if (!find) {
                                    $scope.vm.projects.push($rootScope.workProject);
                                }
                            }
                        }
                        //  검색 조건을 저장한다.
                        //$scope.fn.makeVmSearchObject();
                        // 현재 선택된 프로젝트를 검색 기본으로 추가
                        if ($rootScope.workProject != null && $rootScope.workProject.id > -1) {
                            var find = findProjectSearch($rootScope.workProject.id);
                            if (!find) {
                                $scope.vm.projects.push($rootScope.workProject);
                            }
                        }
                        //$scope.vm.searchAll.keyWord = "";
                    }
                    //  이슈 검색 조건을 만든다.
@@ -682,7 +685,6 @@
                            } else {
                                $scope.vm.responseData = result.data;
                            }
                        }
                        else {
                            SweetAlert.error($filter("translate")("issue.failedIssueLookup"), result.data.message.message); // 이슈 조회 실패
@@ -1260,12 +1262,12 @@
                    if ($rootScope.isDefined(params)) {
                        // $rootScope.$broadcast("makeIssueSearch", {  projectKey : params.projectKey, issueNumber : params.issueNumber });
                         if (params.keyWord != null) {
                             getPageList(0,false,params.keyWord);
                             $scope.vm.searchAll.keyWord = params.keyWord;
                             getPageList(0,false, params.keyWord);
                         }else {
                            getDetailList(params.projectKey, params.issueNumber);
                            return;
                        }
                        $rootScope.previousGetParams = null;
                        // $rootScope.issueTypeId = $rootScope.issueTypeMenu.id;
                    }