src/main/java/kr/wisestone/owl/constant/MngPermission.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/resources/mybatis/query-template/project-template.xml | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/resources/mybatis/query-template/widget-template.xml | ●●●●● 패치 | 보기 | raw | blame | 히스토리 | |
src/main/webapp/scripts/app/issue/issueList.controller.js | ●●●●● 패치 | 보기 | raw | blame | 히스토리 |
src/main/java/kr/wisestone/owl/constant/MngPermission.java
@@ -39,15 +39,15 @@ public static int makeAllPermission() { return (USER_PERMISSION_MNG_ISSUE | USER_PERMISSION_MNG_PARTNER | USER_PERMISSION_MNG_WORKSPACE | return ( USER_PERMISSION_MNG_PROJECT | USER_PERMISSION_MNG_ISSUE | USER_PERMISSION_MNG_WORKSPACE | USER_PERMISSION_MNG_PARTNER | USER_PERMISSION_MNG_API | USER_PERMISSION_MNG_NOTICE | USER_PERMISSION_MNG_FAQ | USER_PERMISSION_MNG_QNA | USER_PERMISSION_MNG_EVENT | USER_PERMISSION_MNG_GUIDE | USER_PERMISSION_MNG_ISSUE_SETTING); } src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -892,7 +892,6 @@ @Override @Transactional(readOnly = true) public List<IssueVo> findIssue(Map<String, Object> resJsonData, IssueCondition issueCondition, Pageable pageable) { // 검색 조건을 만든다 if (!this.makeIssueSearchCondition(issueCondition, Lists.newArrayList("01", "02", "03"), pageable)) { // 이슈 목록을 찾지 못할 경우 기본 정보로 리턴한다. @@ -926,15 +925,14 @@ Long totalCount = 0L; 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))) { this.SetAllDepartmentId(issueCondition); } else{ this.SetMyDepartmentId(issueCondition); /*results = this.issueMapper.findByDepartment(issueCondition); totalCount = this.issueMapper.countByDepartment(issueCondition);*/ } // if (!this.userWorkspaceService.checkWorkspaceManager(user) // && !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { //최고관리자 & 프로젝트,이슈 관리자 일 경우 모든 이슈 보기 // this.SetMyDepartmentId(issueCondition); //this.SetAllDepartmentId(issueCondition); // } /*else{ // results = this.issueMapper.findByDepartment(issueCondition); // totalCount = this.issueMapper.countByDepartment(issueCondition); // }*/ results = this.issueMapper.find(issueCondition); totalCount = this.issueMapper.count(issueCondition); @@ -1241,16 +1239,27 @@ condition.setLoginUserId(this.webAppUtil.getLoginId()); condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); User user = this.webAppUtil.getLoginUserObject(); UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId()); // 프로젝트 키가 존재할 경우 프로젝트 키에 해당하는 프로젝트를 조회하고 검색 조건에 셋팅한다. if (!this.getProjectByProjectKey(condition.getProjectKey(), condition)) { return false; } // 프로젝트를 선택하지 않았으면 해당 업무 공간에서 참여하고 있는 프로젝트를 찾는다. /*if (condition.getProjectIds().size() < 1) { List<Map<String, Object>> projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType()); List<Long> projectIds = Lists.newArrayList(); if (condition.getProjectIds().size() < 1) { List<Map<String, Object>> projects = Lists.newArrayList(); if (this.userWorkspaceService.checkWorkspaceManager(user) || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)){ return true; }/*else if (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)){ projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType()); }*/ else { projects = this.projectService.findByWorkspaceIdAndIncludeProject(projectStatues, condition.getProjectType()); } List<Long> projectIds = Lists.newArrayList(); for (Map<String, Object> result : projects) { Long projectId = MapUtil.getLong(result, "id"); @@ -1264,7 +1273,7 @@ if (projectIds.size() < 1) { return false; } }*/ } return true; } src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
@@ -54,6 +54,9 @@ private ProjectService projectService; @Autowired private ProjectRoleDepartmentService projectRoleDepartmentService; @Autowired private ProjectClosureService projectClosureService; @Autowired @@ -214,8 +217,20 @@ void SetMeAndDownProjectIds(List<Long> parentProjectIds, WidgetCondition widgetCondition) { List<Long> downProjectIds = Lists.newArrayList(); List<Long> projectIds = Lists.newArrayList(); projectIds.add(-1L); User user = this.webAppUtil.getLoginUserObject(); UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId()); if(parentProjectIds != null && parentProjectIds.size() > 0){ for(Long parentProjectId : parentProjectIds){ if(!this.userWorkspaceService.checkWorkspaceManager(user) || !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)){ Project project = this.projectService.getProject(parentProjectId); List<Map<String, Object>> results = this.projectService.findByWorkspaceIdAndIncludeProject(Lists.newArrayList("01", "02", "03"), project.getProjectType().toString()); if(results == null || results.size() < 1) { widgetCondition.setMeAndDownProjectIds(projectIds); break; } } List<ProjectClosure> projectClosures = this.projectClosureRepository.findByParentProjectId(parentProjectId); //내 프로젝트ID가 상위프로젝트인게 있는지 if(projectClosures != null && projectClosures.size() > 0){ for(ProjectClosure projectClosure : projectClosures){ @@ -257,8 +272,7 @@ if (widgetCondition.getProjectIds().size() > 0) { SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition); if (this.userWorkspaceService.checkWorkspaceManager(user) || (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT) && MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE))) { || (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE))) { remainIssue = this.widgetMapper.countRemainIssue(widgetCondition); // 잔여 이슈 delayIssue = this.widgetMapper.countTodayDelayIssue(widgetCondition); // 지연된 이슈 assigneeIssue = this.widgetMapper.countAssigneeIssue(widgetCondition); // 할당된 이슈 @@ -514,7 +528,7 @@ SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition); List<Map<String, Object>> projectMemberIssues = Lists.newArrayList(); if (this.userWorkspaceService.checkWorkspaceManager(user) || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) { || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { projectMemberIssues = this.widgetMapper.findProjectMemberIssue(widgetCondition); } else { projectMemberIssues = this.widgetMapper.findProjectMemberIssueByDepartment(widgetCondition); @@ -834,6 +848,13 @@ UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId()); if (widgetCondition.getProjectId() != null) { SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition); if (widgetCondition.getMeAndDownProjectIds() != null) { for (Long meAndProjectId : widgetCondition.getMeAndDownProjectIds()) { if(meAndProjectId == -1L) { results.replace("projectVos", null); } } } List<Map<String, Object>> issueTypeIssues = Lists.newArrayList(); if (this.userWorkspaceService.checkWorkspaceManager(user) || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { @@ -853,6 +874,7 @@ // 위젯 검색 조건을 만들고 전체 프로젝트 정보를 리턴한다. private Map<String, Object> makeWidgetConditionAllProject(WidgetCondition widgetCondition, boolean getWidgetCondition) { Map<String, Object> results = new HashMap<>(); SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition); // 위젯 검색 조건을 얻어야 할 상황일 때 - 화면에서 탭을 눌러 데이터를 재요청했을 때 if (getWidgetCondition) { src/main/resources/mybatis/query-template/project-template.xml
@@ -378,9 +378,7 @@ </choose> </select> <!-- 해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다 --> <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap" <!-- <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.ProjectCondition"> SELECT DISTINCT p.id as id, @@ -416,6 +414,55 @@ </foreach> </when> </choose> </select>--> <!-- 해당 업무 공간에서 참여하고 있는 진행중인 프로젝트를 조회한다 --> <select id="findByWorkspaceIdAndIncludeProjectAll" 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 LEFT OUTER JOIN project_role_user pru on pru.project_role_id = pr.id LEFT OUTER JOIN project_role_department prd ON prd.project_role_id = pr.id LEFT OUTER JOIN department d on d.id = prd.department_id WHERE p.workspace_id = #{workspaceId} AND pru.user_id = #{loginUserId} <choose> <when test="myDepartmentIds != null and myDepartmentIds.size != 0"> OR prd.department_id IN <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </when> </choose> <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/resources/mybatis/query-template/widget-template.xml
@@ -1325,7 +1325,15 @@ parameterType="kr.wisestone.owl.web.condition.WidgetCondition"> SELECT issue_type.name as name, COUNT(issue.id) as issueCount FROM issue INNER JOIN issue_type ON issue.issue_type_id = issue_type.id WHERE issue.project_id = #{projectId} WHERE 1=1 <choose> <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0"> AND issue.project_id IN <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </when> </choose> GROUP BY issue_type.name </select> src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -411,6 +411,7 @@ .setDType("renderer") .setHWidth("bold " + issueTableConfig.width) .setDAlign("text-center") .setColumnTooltip("미완료 하위이슈/전체 하위이슈") .setDRenderer("DOWN_ISSUE_COUNT")); break; }