OWL ITS + 탐지시스템(인터넷 진흥원)
- 이슈 목록 하위이슈 숨기기 버튼 생성
- 이슈 Tree 목록 중복 이슈 필터링
6개 파일 변경됨
116 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 21 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java 27 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/issue-template.xml 29 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/custom_components/js-tree/js-tree.directive.js 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueList.controller.js 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/issue/issueListNormal.html 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
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) {
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() {
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>
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) {
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--;
                                    }
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" >