OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-09 264359a48d95948ea1b67bf1660521a4d8c1d598
삭제할 이슈의 하위이슈가 존재할 경우 모두 삭제 & 이슈만 삭제
6개 파일 변경됨
236 ■■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/service/IssueService.java 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 83 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/IssueController.java 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/i18n/ko/global.json 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueList.controller.js 110 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/issue/issue.service.js 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueService.java
@@ -54,6 +54,10 @@
    void removeIssues(IssueForm issueForm);
    void removeAllIssues(IssueForm issueForm);
    void removeDownIssues(IssueForm issueForm);
    void modifyIssueStatus(IssueForm issueForm, User user);
    Issue getIssue(Long taskId);
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -2096,20 +2096,95 @@
        List<Issue> removeIssues = Lists.newArrayList();
        for (Long issueId : issueForm.getRemoveIds()) {
            //하위이슈 체크
            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
            if(downIssues != null && downIssues.size() > 0){
                for(Issue downIssue : downIssues){
                    if(downIssue.getParentIssue() != null){
                        downIssue.setParentIssue(null);
                    }
                }
            }
            Issue issue = this.issueRemoves(issueId, user);
            removeIssues.add(issue);
        }
        if (removeIssues.size() > 0) {
            //this.issueRepository.deleteAll(removeIssues);
        }
        /*if (removeIssues.size() > 0) {
            this.issueRepository.deleteAll(removeIssues);
        }*/
        //  사용자 시스템 기능 사용 정보 수집
        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
    }
    //  이슈를 삭제한다.
    @Override
    @Transactional
    public void removeAllIssues(IssueForm issueForm) {
        //  사용하고 있는 업무 공간이 활성 상태인지 확인한다. 사용 공간에서 로그인한 사용자가 비활성인지 확인한다.
        User user = this.webAppUtil.getLoginUserObject();
        this.workspaceService.checkUseWorkspace();
        if (issueForm.getRemoveIds().size() < 1) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT));
        }
        List<Issue> removeIssues = Lists.newArrayList();
        for (Long issueId : issueForm.getRemoveIds()) {
            //하위이슈 체크
            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
            if(downIssues != null && downIssues.size() > 0){
                for(Issue downIssue : downIssues){
                    Long downIssueId = downIssue.getId();
                    downIssue = this.issueRemoves(downIssueId, user);
                    removeIssues.add(downIssue);
                }
            }
            Issue issue = this.issueRemoves(issueId, user);
            removeIssues.add(issue);
        }
        //  사용자 시스템 기능 사용 정보 수집
        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
    }
    //  하위이슈를 삭제한다.
    @Override
    @Transactional
    public void removeDownIssues(IssueForm issueForm) {
        //  사용하고 있는 업무 공간이 활성 상태인지 확인한다. 사용 공간에서 로그인한 사용자가 비활성인지 확인한다.
        User user = this.webAppUtil.getLoginUserObject();
        this.workspaceService.checkUseWorkspace();
        if (issueForm.getRemoveIds().size() < 1) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT));
        }
        List<Issue> removeIssues = Lists.newArrayList();
        Long downIssueId = 0L;
        for (Long issueId : issueForm.getRemoveIds()) {
            //삭제 할 이슈의 하위이슈 체크
            List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId);
            if(downIssues != null && downIssues.size() > 0){
                for(Issue downIssue : downIssues){
                    downIssueId = downIssue.getId();
                }
            }
            Issue issue = this.issueRemoves(downIssueId, user);
            removeIssues.add(issue);
        }
        //  사용자 시스템 기능 사용 정보 수집
        log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE));
    }
    private Issue issueRemoves(Long issueId, User user) {
        Issue issue = this.getIssue(issueId);
        Issue issue = null;
        if(issueId != null){
            issue = this.getIssue(issueId);
        }
        //  이슈 수정 권한을 갖고 있는지 확인
        this.verifyIssueModifyPermission(issue, user);
src/main/java/kr/wisestone/owl/web/controller/IssueController.java
@@ -137,6 +137,30 @@
        return this.setSuccessMessage(resJsonData);
    }
    //  하위이슈 삭제
    @RequestMapping(value = "/issue/removeAll", produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> removesAll(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        this.issueService.removeAllIssues(IssueForm.make(params.get(Constants.REQ_KEY_CONTENT)));
        return this.setSuccessMessage(resJsonData);
    }
    //  하위이슈 삭제
    /*@RequestMapping(value = "/issue/removeDown", produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> removesDown(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        this.issueService.removeDownIssues(IssueForm.make(params.get(Constants.REQ_KEY_CONTENT)));
        return this.setSuccessMessage(resJsonData);
    }*/
    //  이슈 다중 상태 변경
    @RequestMapping(value = "/issue/modifyMultiIssueStatus", produces = MediaType.APPLICATION_JSON_VALUE)
    public
src/main/webapp/i18n/ko/global.json
@@ -218,6 +218,8 @@
        "settingTableDisplay": "테이블 표시 설정",
        "deleteIssue": "이슈 삭제",
        "wantToDeleteSelectIssue": "선택한 이슈를 삭제하겠습니까? \n 사용자가 직접 삭제한 이슈는 어떠한 경우에도 복구가 불가능합니다.",
        "wantToDeleteOnlySelectIssue": "선택한 이슈만 삭제하겠습니까? \n 사용자가 직접 삭제한 이슈는 어떠한 경우에도 복구가 불가능합니다.",
        "wantToDeleteSelectDownIssue": "선택한 이슈의 하위 이슈가 존재 합니다. \n 선택한 이슈와 하위 이슈 모두 삭제하겠습니까? \n 사용자가 직접 삭제한 이슈는 어떠한 경우에도 복구가 불가능합니다.",
        "wantToDeleteSelectRelationIssue": "선택한 연관 이슈를 삭제하겠습니까? \n 사용자가 직접 삭제한 연관 이슈는 복구가 불가능합니다.",
        "failedToSaveFieldConditions": "검색 필드 조건 저장 실패",
        "failedToGetSearchFieldCondition": "검색 필드 조건 가져오기 실패",
@@ -783,6 +785,7 @@
        "createIssue": "이슈 생성",
        "updateIssue": "이슈 변경",
        "deleteIssue": "이슈 삭제",
        "deleteDownIssue": "하위 이슈 삭제",
        "sendMailIssue": "이슈 메일 전송",
        "updateTitle": "제목이 변경되었습니다.",
        "updateContent": "내용이 변경되었습니다.",
src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -689,6 +689,7 @@
                function removes() {
                    var removeIds = [];
                    var removePermission = true;
                    var downIssueIds = false;
                    angular.forEach($scope.vm.responseData.data, function (data) {
                        if (data.checked && data.modifyPermissionCheck) {
@@ -697,6 +698,10 @@
                        if (data.checked && !data.modifyPermissionCheck) {
                            removePermission = false;
                        }
                        if (data.downIssueAllCount > 0){
                            downIssueIds = true;
                        }
                    });
@@ -719,25 +724,23 @@
                        return;
                    }
                    //  삭제 알림
                    SweetAlert.swal({
                            title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제
                            text : $filter("translate")("issue.wantToDeleteSelectIssue"), // 선택한 이슈을 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다.
                    if (downIssueIds) {
                        SweetAlert.swal({
                            title : $filter("translate")("common.deleteIssue"), // 이슈 삭제
                            text : $filter("translate")("issue.wantToDeleteSelectDownIssue"), // 하위 이슈가 존재 합니다. 선택한 이슈와 하위 이슈 모두 삭제하겠습니까? 삭제된 이슈는 복구할 수 없습니다.
                            type : "warning",
                            showCancelButton : true,
                            confirmButtonColor : "#DD6B55",
                            confirmButtonText : $filter("translate")("common.delete"), // 삭제
                            cancelButtonText : $filter("translate")("common.cancel"), // 취소
                            closeOnConfirm : false,
                            closeOnCancel : true
                            closeOnCancel : false
                        },
                        function (isConfirm) {
                            SweetAlert.close();
                            if (isConfirm) {
                            if (isConfirm) { //이슈 + 하위 삭제
                                $rootScope.spinner = true;
                                Issue.remove($resourceProvider.getContent(
                                Issue.removeAllIssues($resourceProvider.getContent(
                                    { removeIds : removeIds },
                                    $resourceProvider.getPageContent(0, 0))).then(function (result) {
@@ -745,9 +748,7 @@
                                        $timeout(function () {
                                            SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공
                                        }, 100);
                                        $scope.fn.listView();
                                        $scope.fn.getPageList(0);
                                    }
                                    else {
@@ -755,11 +756,96 @@
                                            SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패
                                        }, 100);
                                    }
                                    $rootScope.spinner = false;
                                });
                            } else {//  선택 한 이슈만 삭제
                                //  삭제 알림
                                SweetAlert.swal({
                                        title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제
                                        text : $filter("translate")("issue.wantToDeleteOnlySelectIssue"), // 선택한 이슈만 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다.
                                        type : "warning",
                                        showCancelButton : true,
                                        confirmButtonColor : "#DD6B55",
                                        confirmButtonText : $filter("translate")("common.delete"), // 삭제
                                        cancelButtonText : $filter("translate")("common.cancel"), // 취소
                                        closeOnConfirm : false,
                                        closeOnCancel : true
                                    },
                                    function (isConfirm) {
                                        SweetAlert.close();
                                        if (isConfirm) {
                                            $rootScope.spinner = true;
                                            Issue.remove($resourceProvider.getContent(
                                                { removeIds : removeIds },
                                                $resourceProvider.getPageContent(0, 0))).then(function (result) {
                                                if (result.data.message.status === "success") {
                                                    $timeout(function () {
                                                        SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공
                                                    }, 100);
                                                    $scope.fn.listView();
                                                    $scope.fn.getPageList(0);
                                                }
                                                else {
                                                    $timeout(function () {
                                                        SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패
                                                    }, 100);
                                                }
                                                $rootScope.spinner = false;
                                            });
                                        }
                                    });
                            }
                        });
                    } else {
                        //  삭제 알림
                        SweetAlert.swal({
                                title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제
                                text : $filter("translate")("issue.wantToDeleteSelectIssue"), // 선택한 이슈을 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다.
                                type : "warning",
                                showCancelButton : true,
                                confirmButtonColor : "#DD6B55",
                                confirmButtonText : $filter("translate")("common.delete"), // 삭제
                                cancelButtonText : $filter("translate")("common.cancel"), // 취소
                                closeOnConfirm : false,
                                closeOnCancel : true
                            },
                            function (isConfirm) {
                                SweetAlert.close();
                                if (isConfirm) {
                                    $rootScope.spinner = true;
                                    Issue.remove($resourceProvider.getContent(
                                        { removeIds : removeIds },
                                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
                                        if (result.data.message.status === "success") {
                                            $timeout(function () {
                                                SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공
                                            }, 100);
                                            $scope.fn.listView();
                                            $scope.fn.getPageList(0);
                                        }
                                        else {
                                            $timeout(function () {
                                                SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패
                                            }, 100);
                                        }
                                        $rootScope.spinner = false;
                                    });
                                }
                            });
                    }
                }
                //  이슈 목록 테이블 설정
src/main/webapp/scripts/components/issue/issue.service.js
@@ -92,6 +92,18 @@
                    return response;
                });
            },
            removeAllIssues : function (conditions) {
                return $http.post("issue/removeAll", conditions).then(function (response) {
                    $log.debug("하위이슈 삭제 결과 : ", response);
                    return response;
                });
            },
            /*removeDownIssues : function (conditions) {
                return $http.post("issue/removeDown", conditions).then(function (response) {
                    $log.debug("하위이슈 삭제 결과 : ", response);
                    return response;
                });
            },*/
            importExcel : function (conditions) {
                conditions.url = "issue/importExcel";
                return $upload.upload(conditions).then(function (response) {