From 9ff3e8c43d01f758381b4925cff44502f1241750 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 수, 22 12월 2021 14:26:36 +0900 Subject: [PATCH] - 일반 사용자로 검색 기능 제대로 동작안되는 문제 해결 - 이슈 유형에서 사용중인 프로젝트는 삭제 불가 - 이슈 유형에서 프로젝트 검색 시 워크스페이스 관리자는 모든 프로젝트 검색 가능(기존엔 참여하고있는 프로젝트만 검색가능하게되어있었음) --- src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java | 2 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 4 src/main/resources/mybatis/query-template/project-template.xml | 38 ++++++++++++ src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java | 34 ++++++++++- src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java | 1 src/main/java/kr/wisestone/owl/service/IssueTypeService.java | 2 src/main/webapp/scripts/app/common/common.controller.js | 3 src/main/webapp/scripts/app/issue/issueList.controller.js | 36 ++++++----- src/main/java/kr/wisestone/owl/constant/MsgConstants.java | 1 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties | 1 src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java | 5 + 11 files changed, 103 insertions(+), 24 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java index 559d4cc..6ed48e3 100644 --- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java +++ b/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"; // �궇吏쒓� �꽑�깮�릺吏� �븡�븯�뒿�땲�떎. diff --git a/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java b/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java index 118fe38..5ef5ae6 100644 --- a/src/main/java/kr/wisestone/owl/mapper/ProjectMapper.java +++ b/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); diff --git a/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java index c0a8a75..939ce23 100644 --- a/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java +++ b/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); } diff --git a/src/main/java/kr/wisestone/owl/service/IssueTypeService.java b/src/main/java/kr/wisestone/owl/service/IssueTypeService.java index 738a26a..1f7a4c1 100644 --- a/src/main/java/kr/wisestone/owl/service/IssueTypeService.java +++ b/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(); diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java index 4cd121d..af302ce 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/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; } diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java index 5519b9e..78c915a 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java +++ b/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()); diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java index 6689f61..16c21d2 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java +++ b/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; } // �쁽�옱 �젒洹쇳븳 �뾽臾닿났媛꾩뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎. - �긽�떒 �봽濡쒖젥�듃 紐⑸줉�뿉�꽌 �궗�슜 diff --git a/src/main/resources/mybatis/query-template/project-template.xml b/src/main/resources/mybatis/query-template/project-template.xml index ed1a5fd..1ec4ee1 100644 --- a/src/main/resources/mybatis/query-template/project-template.xml +++ b/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" diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties index 51e977e..d26b1a2 100644 --- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties +++ b/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. diff --git a/src/main/webapp/scripts/app/common/common.controller.js b/src/main/webapp/scripts/app/common/common.controller.js index e1c0035..8642c6f 100644 --- a/src/main/webapp/scripts/app/common/common.controller.js +++ b/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() { diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js index 197ce4d..46c4c54 100644 --- a/src/main/webapp/scripts/app/issue/issueList.controller.js +++ b/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; } -- Gitblit v1.8.0