From 24fa2d1e6138c3ad6c4db2790ee98edcc42b459c Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 화, 14 12월 2021 10:52:34 +0900 Subject: [PATCH] - 이슈 목록 하위이슈 숨기기 버튼 생성 - 이슈 Tree 목록 중복 이슈 필터링 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 21 ++++++++-- src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java | 27 ++++++++++--- src/main/webapp/views/issue/issueListNormal.html | 8 +++- src/main/resources/mybatis/query-template/issue-template.xml | 29 ++++++++++---- src/main/webapp/scripts/app/issue/issueList.controller.js | 21 +++++++--- src/main/webapp/custom_components/js-tree/js-tree.directive.js | 10 ++++ 6 files changed, 87 insertions(+), 29 deletions(-) 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 ddedab6..fcb0a1e 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -802,6 +802,7 @@ if (issueCondition.getTree()) { this.setDownIssues(user, issueVos); this.setRelationIssues(issueVos); + this.setParentIssue(issueVos); } this.setCountDownIssues(issueVos); @@ -829,9 +830,9 @@ IssueVo addIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); addIssueVo.setIssueTypeId(downIssue.getIssueType().getId()); downIssueVos.add(addIssueVo); - } issueVo.setIssueDownVos(downIssueVos); + if (downIssueVos.size() > 0) { this.setDownIssues(user, downIssueVos); } @@ -841,11 +842,12 @@ this.setIssueDepartmentList(issueVos, issueCondition, user); // �벑濡앹옄 �젙蹂� 異붽� this.setRegister(issueVos); // �떞�떦�옄 �젙蹂� �뀑�똿 - // �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� 異붽� this.setIssueCustomFieldValue(issueVos, issueCondition); - - this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲� + //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲� + this.SetWorkflowDepartment(issueVos); + // �긽�쐞 �씠�뒋 泥댄겕 + this.setParentIssue(issueVos); } } @@ -859,6 +861,17 @@ } } + // �긽�쐞 �씠�뒋 泥댄겕 + private void setParentIssue(List<IssueVo> issueVos) { + for(IssueVo issueVo : issueVos) { + if(issueVo.getParentIssueId() != null) { + Issue parentIssue = this.getIssue(issueVo.getParentIssueId()); + issueVo.setParentIssueVo(ConvertUtil.copyProperties(parentIssue, IssueVo.class)); + ConvertUtil.copyProperties(issueVo.getParentIssueVo(), issueVo); + } + } + } + @Override @Transactional(readOnly = true) public void setCountDownIssues(List<IssueVo> issueVos) { diff --git a/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java b/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java index fcddc53..0113fcd 100644 --- a/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java +++ b/src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java @@ -53,7 +53,8 @@ private List<Long> statusIds = Lists.newArrayList(); private List<Long> excludeIds = Lists.newArrayList(); private List<Long> myDepartmentIds; // �궡媛� �냽�빐�엳�뒗 遺��꽌 ID - private Boolean hideIssue; + private Boolean hideDownIssue; + private Boolean hideCompleteIssue; private Boolean isTree; // �듃由ш뎄議� 紐⑤뱶 �씪�븣 public IssueCondition(){} @@ -181,8 +182,12 @@ condition.setId(MapUtil.getLong(conditions, "issueId")); } - if (MapUtil.getBoolean(conditions, "hideIssue") != null) { - condition.setHideIssue(MapUtil.getBoolean(conditions, "hideIssue")); + if (MapUtil.getBoolean(conditions, "hideDownIssue") != null) { + condition.setHideDownIssue(MapUtil.getBoolean(conditions, "hideDownIssue")); + } + + if (MapUtil.getBoolean(conditions, "hideCompleteIssue") != null) { + condition.setHideCompleteIssue(MapUtil.getBoolean(conditions, "hideCompleteIssue")); } if (MapUtil.getBoolean(conditions, "isTree") != null) { @@ -510,12 +515,20 @@ this.myDepartmentIds = myDepartmentIds; } - public Boolean getHideIssue() { - return hideIssue; + public Boolean getHideDownIssue() { + return hideDownIssue; } - public void setHideIssue(Boolean hideIssue) { - this.hideIssue = hideIssue; + public void setHideDownIssue(Boolean hideDownIssue) { + this.hideDownIssue = hideDownIssue; + } + + public Boolean getHideCompleteIssue() { + return hideCompleteIssue; + } + + public void setHideCompleteIssue(Boolean hideCompleteIssue) { + this.hideCompleteIssue = hideCompleteIssue; } public Boolean getTree() { diff --git a/src/main/resources/mybatis/query-template/issue-template.xml b/src/main/resources/mybatis/query-template/issue-template.xml index d4dea19..6dc4ea1 100644 --- a/src/main/resources/mybatis/query-template/issue-template.xml +++ b/src/main/resources/mybatis/query-template/issue-template.xml @@ -105,7 +105,13 @@ ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate} </if> - <if test="hideIssue != null and hideIssue == true"> + <if test="combinationIssueNumber == null or combinationIssueNumber.equals('')"> + <if test="hideDownIssue != null and hideDownIssue == true"> + AND issue.parent_issue_id IS NULL + </if> + </if> + + <if test="hideCompleteIssue != null and hideCompleteIssue == true"> AND issue_status.issue_status_type != 'CLOSE' </if> @@ -206,9 +212,6 @@ </foreach> </when> </choose> - <if test="combinationIssueNumber == null or combinationIssueNumber.equals('')"> - AND issue.parent_issue_id IS NULL - </if> AND issue.reverse_index <![CDATA[ < ]]> 0 AND workspace.id = #{workspaceId} GROUP BY issue.id @@ -554,7 +557,6 @@ LEFT OUTER JOIN issue_status iss ON iss.id = issue.issue_status_id LEFT OUTER JOIN user_department ud ON ud.department_id = isd.department_id WHERE 1=1 - AND issue.parent_issue_id IS NULL <if test="title != null and !title.equals('') "> AND issue.title like CONCAT('%',#{title},'%') </if> @@ -591,8 +593,14 @@ ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate} </if> - <if test="hideIssue != null and hideIssue == true"> + <if test="hideCompleteIssue != null and hideCompleteIssue == true"> AND iss.issue_status_type != 'CLOSE' + </if> + + <if test="combinationIssueNumber == null or combinationIssueNumber.equals('')"> + <if test="hideDownIssue != null and hideDownIssue == true"> + AND issue.parent_issue_id IS NULL + </if> </if> <choose> @@ -692,7 +700,6 @@ LEFT OUTER JOIN issue_department isd ON issue.id = isd.issue_id LEFT OUTER JOIN issue_status iss ON iss.id = issue.issue_status_id WHERE 1=1 - AND issue.parent_issue_id IS NULL <if test="title != null and !title.equals('') "> AND issue.title like CONCAT('%',#{title},'%') </if> @@ -729,7 +736,13 @@ ANd issue.complete_date <![CDATA[ <= ]]> #{endCompleteDate} </if> - <if test="hideIssue != null and hideIssue == true"> + <if test="combinationIssueNumber == null or combinationIssueNumber.equals('')"> + <if test="hideDownIssue != null and hideDownIssue == true"> + AND issue.parent_issue_id IS NULL + </if> + </if> + + <if test="hideCompleteIssue != null and hideCompleteIssue == true"> AND iss.issue_status_type != 'CLOSE' </if> diff --git a/src/main/webapp/custom_components/js-tree/js-tree.directive.js b/src/main/webapp/custom_components/js-tree/js-tree.directive.js index dea51c0..203870b 100644 --- a/src/main/webapp/custom_components/js-tree/js-tree.directive.js +++ b/src/main/webapp/custom_components/js-tree/js-tree.directive.js @@ -22,7 +22,15 @@ // �뀒�씠釉� �젙蹂� 媛��졇�삤湲� function getResponseData() { - return $scope.data; + const data = $scope.data; + + var filterData = data.filter(function(item, idx){ + return data.findIndex(function(item2, idx2){ + return item.id === item2.id + }) == idx; + }); + + return filterData; } }, link : function (scope, element, attrs) { diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js index a4eeb0e..8d51e5a 100644 --- a/src/main/webapp/scripts/app/issue/issueList.controller.js +++ b/src/main/webapp/scripts/app/issue/issueList.controller.js @@ -90,7 +90,8 @@ issueTableConfigs : [], // �씠�뒋 �뀒�씠釉� �꽕�젙 issueTreeConfigs : [], // �씠�뒋 �뀒�씠釉� �꽕�젙 parentIssueId : "", - hideIssue : false, + hideCompleteIssue : false, + hideDownIssue : true, listMode : 0, // 紐⑸줉 紐⑤뱶 0:湲곕낯 由ъ뒪�듃 1:�듃由ш뎄議� 由ъ뒪�듃 }; @@ -441,7 +442,8 @@ endStartDate : "", beginCompleteDate : "", endCompleteDate : "", - hideIssue : $scope.vm.hideIssue, + hideCompleteIssue: $scope.vm.hideCompleteIssue, + hideDownIssue : $scope.vm.hideDownIssue, isTree : $scope.vm.listMode === 1, projectIds : (function () { var projectIds = []; @@ -574,8 +576,12 @@ selectedPage = 0; } - if ($scope.vm.hideIssue) { - $scope.vm.hideIssue = true; + if ($scope.vm.hideCompleteIssue) { + $scope.vm.hideCompleteIssue = true; + } + + if ($scope.vm.hideDownIssue) { + $scope.vm.hideDownIssue = true; } // �쁽�옱 �럹�씠吏� �젙蹂� var currentPage = 0; @@ -626,11 +632,12 @@ if (result.data.data != null && result.data.data.length > 0) { //var resultSize = result.data.data.length; for (var i = 0; i < result.data.data.length; i++) { - if (result.data.data[i].parentIssueId != null) { + /*if (result.data.data[i].parentIssueId != null) {//�븯�쐞�씠�뒋�뒗 由ъ뒪�듃�뿉�꽌 �궘�젣 result.data.data.splice(i, 1); i--; - }else if ($scope.vm.search.issueTypeIds !== null && $scope.vm.search.issueTypeIds.length > 0 - && result.data.data[i].issueTypeId !== $scope.vm.search.issueTypeIds[0].fieldKey) { + }else*/ + if ($scope.vm.search.issueTypeIds !== null && $scope.vm.search.issueTypeIds.length > 0 + && result.data.data[i].issueTypeId !== $scope.vm.search.issueTypeIds[0].fieldKey) { //�씠�뒋���엯 泥댄겕 result.data.data.splice(i, 1); i--; } diff --git a/src/main/webapp/views/issue/issueListNormal.html b/src/main/webapp/views/issue/issueListNormal.html index 9de5670..847261d 100644 --- a/src/main/webapp/views/issue/issueListNormal.html +++ b/src/main/webapp/views/issue/issueListNormal.html @@ -336,8 +336,12 @@ <!-- �슦痢� --> <div class="col-5" > - <span class="issue-detail-label" style="position: relative; left: 16.8rem; bottom: 5px"><span style="color: #0a7cf8">�뾾</span> �셿猷� �씠�뒋 �닲湲곌린</span> - <label class='switch' style="left: 17.3rem"><input type='checkbox' ng-model='vm.hideIssue' ng-click='fn.getPageList(0)'> + <span class="issue-detail-label" style="position: relative; left: 2.8rem; bottom: 5px"><span style="color: #0a7cf8">�뾾</span> �븯�쐞 �씠�뒋 �닲湲곌린</span> + <label class='switch' style="left: 3.3rem"><input type='checkbox' ng-model='vm.hideDownIssue' ng-click='fn.getPageList(0)'> + <span class='slider round'></span> + </label> + <span class="issue-detail-label" style="position: relative; left: 5.8rem; bottom: 5px"><span style="color: #0a7cf8">�뾾</span> �셿猷� �씠�뒋 �닲湲곌린</span> + <label class='switch' style="left: 6.3rem"><input type='checkbox' ng-model='vm.hideCompleteIssue' ng-click='fn.getPageList(0)'> <span class='slider round'></span> </label> <form class="form-inline justify-content-sm-end pull-right" method="post" action="/issue/downloadExcel" name="issueListForm" > -- Gitblit v1.8.0