OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2022-01-07 909a0f1be2fddf26e9639dd189e3e7261040ac12
전체 이슈 목록 메뉴 추가
13개 파일 변경됨
174 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/mapper/IssueTypeCustomFieldMapper.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 17 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueTypeCustomFieldServiceImpl.java 15 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/issueTypeCustomField-template.xml 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/assets/styles/main.css 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/i18n/ko/global.json 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/common/common.controller.js 14 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueList.controller.js 47 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueManager.controller.js 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/common/sidebar.html 36 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/mapper/IssueTypeCustomFieldMapper.java
@@ -12,4 +12,6 @@
@Repository
public interface IssueTypeCustomFieldMapper {
    List<IssueTypeCustomFieldVo> findByIssueType(IssueTypeCustomFieldCondition condition);
    List<IssueTypeCustomFieldVo> findByWorkspaceId(IssueTypeCustomFieldCondition condition);
}
src/main/java/kr/wisestone/owl/repository/IssueTableConfigRepository.java
@@ -9,6 +9,8 @@
public interface IssueTableConfigRepository extends JpaRepository<IssueTableConfig, Long> {
    List<IssueTableConfig> findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(@Param("userId") Long userId, @Param("workspaceId") Long workspaceId, @Param("issueTypeId") Long issueTypeId, @Param("issueTableType") int issueTableType);
    List<IssueTableConfig> findByUserIdAndWorkspaceIdAndIssueTableType(@Param("userId") Long userId, @Param("workspaceId") Long workspaceId, @Param("issueTableType") int issueTableType);
    List<IssueTableConfig> findByIssueTypeIdAndIssueTableType(@Param("issueTypeId") Long issueTypeId, @Param("issueTableType") int issueTableType);
}
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -3862,17 +3862,26 @@
    @Override
    public void findPartner(Map<String, Object> resJsonData, Map<String, Object> params) {
        Long issueTypeId = MapUtil.getLong(params, "issueTypeId");
        IssueType issueType = this.issueTypeService.getIssueType(issueTypeId); // 이슈의 이슈유형 객체
        Integer using = issueType.getUsePartner() != null ? issueType.getUsePartner().intValue() : 0; // 이슈유형별로 사용중인 업체/ISP/호스팅 값
        List<UsePartnerVo> usePartnerVos = Lists.newArrayList();
        Integer using = 0;
        if (issueTypeId != null) {
            IssueType issueType = this.issueTypeService.getIssueType(issueTypeId); // 이슈의 이슈유형 객체
            using = issueType.getUsePartner() != null ? issueType.getUsePartner().intValue() : 0; // 이슈유형별로 사용중인 업체/ISP/호스팅 값
        } else {
            for (int partner : UsePartner.partners) {
                using += partner;
            }
        }
        for (Integer usePartner : UsePartner.partners) { //1(업체), 2(ISP), 4(호스팅)
            UsePartnerVo usePartnerVo = UsePartner.checkUsePartner(using, usePartner);
            if (usePartnerVo != null) {
                usePartnerVos.add(usePartnerVo);
            }
            resJsonData.put(Constants.RES_KEY_CONTENTS, usePartnerVos);
        }
        resJsonData.put(Constants.RES_KEY_CONTENTS, usePartnerVos);
    }
    @Override
src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
@@ -90,8 +90,14 @@
    @Override
    @Transactional(readOnly = true)
    public IssueTableConfig findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(Long issueTypeId, int issueTableType) {
        List<IssueTableConfig> issueTableConfigList = this.issueTableConfigRepository.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(this.webAppUtil.getLoginId(),
                this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId(), issueTypeId, issueTableType);
        List<IssueTableConfig> issueTableConfigList = null;
        if (issueTypeId != null) {
            issueTableConfigList = this.issueTableConfigRepository.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(this.webAppUtil.getLoginId(),
                    this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId(), issueTypeId, issueTableType);
        } else {
            issueTableConfigList = this.issueTableConfigRepository.findByUserIdAndWorkspaceIdAndIssueTableType(this.webAppUtil.getLoginId(),
                    this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId(), issueTableType);
        }
        if (issueTableConfigList != null && issueTableConfigList.size() > 0) {
            return  issueTableConfigList.get(0);
src/main/java/kr/wisestone/owl/service/impl/IssueTypeCustomFieldServiceImpl.java
@@ -194,14 +194,21 @@
    @Transactional(readOnly = true)
    public List<IssueTypeCustomFieldVo> findCustomFieldByIssueType(Map<String, Object> resJsonData, IssueTypeCustomFieldCondition condition) {
        List<IssueTypeCustomFieldVo> issueTypeCustomFieldVos = Lists.newArrayList();
        IssueType issueType = this.issueTypeService.getIssueType(condition.getIssueTypeId());
        condition.setIssueTypeId(issueType.getId());
        List<IssueTypeCustomFieldVo> issueTypeCustomFieldVo = Lists.newArrayList();
        condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
        List<IssueTypeCustomFieldVo> issueTypeCustomFieldVo = this.issueTypeCustomFieldMapper.findByIssueType(condition);
        if (condition.getIssueTypeId() != null) {
            IssueType issueType = this.issueTypeService.getIssueType(condition.getIssueTypeId());
            condition.setIssueTypeId(issueType.getId());
            issueTypeCustomFieldVo = this.issueTypeCustomFieldMapper.findByIssueType(condition);
        } else {
            issueTypeCustomFieldVo = this.issueTypeCustomFieldMapper.findByWorkspaceId(condition);
        }
        if (issueTypeCustomFieldVo != null && issueTypeCustomFieldVo.size() > 0) {
            issueTypeCustomFieldVos.addAll(issueTypeCustomFieldVo);
        }
        resJsonData.put(Constants.RES_KEY_CONTENTS, issueTypeCustomFieldVos);
        return issueTypeCustomFieldVos;
    }
src/main/java/kr/wisestone/owl/web/condition/IssueCondition.java
@@ -57,6 +57,7 @@
    private Boolean isTree; // 트리구조 모드 일때
    private Pageable relPageable;
    private Pageable downPageable;
    private Boolean allIssue; // 전체이슈 보여주기
    public IssueCondition(){}
@@ -573,4 +574,12 @@
    public void setDownPageable(Pageable downPageable) {
        this.downPageable = downPageable;
    }
    public Boolean getAllIssue() {
        return allIssue;
    }
    public void setAllIssue(Boolean allIssue) {
        this.allIssue = allIssue;
    }
}
src/main/resources/mybatis/query-template/issueTypeCustomField-template.xml
@@ -17,4 +17,17 @@
        AND ws.id = #{workspaceId}
    </select>
    <select id="findByWorkspaceId" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.IssueTypeCustomFieldCondition">
        SELECT
            DISTINCT(cf.id) AS id,
            cf.name AS name,
            cf.custom_field_type as customFieldType,
            cf.default_value as defaultValue
        FROM issue_type_custom_field it
         INNER JOIN custom_field cf ON cf.id = it.custom_field_id
         INNER JOIN workspace ws on cf.workspace_id = ws.id
        WHERE cf.use_flag = 'Y'
          AND ws.id = #{workspaceId}
    </select>
</mapper>
src/main/webapp/assets/styles/main.css
@@ -28573,6 +28573,10 @@
    margin-top: 50px; !important;
}
.mt--14 {
    margin-top: -14px; !important;
}
.ml-10 {
    margin-left: 10px !important;
}
src/main/webapp/i18n/ko/global.json
@@ -668,6 +668,7 @@
        "failedToReceiveEnquiry": "문의 접수 실패"
    },
    "common": {
        "allIssueList" : "전체 이슈",
        "urgent": "긴급",
        "high": "높음",
        "medium": "보통",
src/main/webapp/scripts/app/common/common.controller.js
@@ -91,10 +91,16 @@
                function changeIssueListMenu(issueTypeId, changeProject = true) {
                    $rootScope.issueTypeMenu = null;
                    for (var issueType of $rootScope.workIssueTypes) {
                        if (issueType.id === issueTypeId) {
                            $rootScope.issueTypeMenu = issueType;
                            break;
                    $rootScope.allIssueList = false;
                    if (issueTypeId == null) {
                        $rootScope.allIssueList = true;
                        moveMenu("issues.list");
                    }else {
                        for (var issueType of $rootScope.workIssueTypes) {
                            if (issueType.id === issueTypeId) {
                                $rootScope.issueTypeMenu = issueType;
                                break;
                            }
                        }
                    }
src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -97,6 +97,7 @@
                    hideCompleteIssue : false,
                    hideDownIssue : true,
                    listMode : 0, // 목록 모드 0:기본 리스트 1:트리구조 리스트
                    allIssue : false
                };
                //  테이블 이벤트
@@ -159,7 +160,7 @@
                }
                //  서버에 저장한 이슈 검색 조건을 가져온다.
                function getVmSearchObject(keyWord = null) {
                function getVmSearchObject(keyWord = null, allIssue = false) {
                    IssueSearch.detail($resourceProvider.getContent({}, $resourceProvider.getPageContent(0, 0))).then(function (result) {
@@ -173,9 +174,9 @@
                                // $scope.vm.projects = issueListSearchObject.projects;
                                // $scope.vm.registers = issueListSearchObject.registers;
                                $scope.fn.getPageList(0, true, keyWord);
                                $scope.fn.getPageList(0, true, keyWord, allIssue);
                            } else {
                                $scope.fn.getPageList(0, false, keyWord);
                                $scope.fn.getPageList(0, false, keyWord, allIssue);
                            }
                        }
                        else {
@@ -481,6 +482,7 @@
                //  이슈 검색 조건을 만든다.
                function makeSearchConditions() {
                    var conditions = {
                        allIssue : $scope.vm.allIssue,
                        keyWord : $scope.vm.search.keyWord,
                        title : $scope.vm.search.title,
                        description : $scope.vm.search.description,
@@ -622,10 +624,14 @@
                }
                //  이슈 목록을 조회한다.
                function getPageList(selectedPage, detail = false, keyWord = null) {
                function getPageList(selectedPage, detail = false, keyWord = null, allIssue = false) {
                    $rootScope.spinner = true;  //  프로그래스 바
                    if (selectedPage < 0) {
                        selectedPage = 0;
                    }
                    if (allIssue) {
                        $scope.vm.allIssue = true;
                        $rootScope.$broadcast("getAllIssuePageList");
                    }
                    if (keyWord != null) {
@@ -690,6 +696,9 @@
                        $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.vm.page.selectedPage = currentPage + 1;
                            $scope.vm.responseData = result.data;
                            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++) {
@@ -710,8 +719,6 @@
                                $scope.vm.projectKey = result.data.data[0].projectKey;
                                $scope.vm.issueNumber = result.data.data[0].issueNumber;
                                $scope.vm.projectName = result.data.data[0].projectName;
                                $scope.vm.page.selectedPage = currentPage + 1;
                                $scope.vm.responseData = result.data;
                                if (detail) {
                                    changeDetailView(result.data.data[0].id);
@@ -1227,20 +1234,18 @@
                function getIssueTableConfigs() {
                    var deferred = $q.defer();
                    if ($rootScope.issueTypeMenu != null){
                        var content = {
                            issueTypeId : $rootScope.getCurrentIssueTypeId()
                    var content = {
                        issueTypeId : $rootScope.getCurrentIssueTypeId()
                    }
                    IssueTableConfig.detail($resourceProvider.getContent(content,
                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
                        if (result.data.message.status !== "success") {
                            SweetAlert.error($filter("translate")("issue.failedToIssueTableColumnLookup"), result.data.message.message); // 이슈 테이블 컬럼 조회 실패
                        }
                        IssueTableConfig.detail($resourceProvider.getContent(content,
                            $resourceProvider.getPageContent(0, 1000))).then(function (result) {
                            if (result.data.message.status !== "success") {
                                SweetAlert.error($filter("translate")("issue.failedToIssueTableColumnLookup"), result.data.message.message); // 이슈 테이블 컬럼 조회 실패
                            }
                            deferred.resolve(result.data.data);
                        });
                    }
                        deferred.resolve(result.data.data);
                    });
                    return deferred.promise;
                }
@@ -1319,6 +1324,8 @@
                        // $rootScope.issueTypeId = $rootScope.issueTypeMenu.id;
                    }
                    var allIssue = $rootScope.allIssueList;
                    var promises = {
                        getIssueTypes : $scope.fn.getIssueTypes(),
                        getPriorities : $scope.fn.getPriorities(),
@@ -1348,9 +1355,9 @@
                            //  이슈 테이블 설정
                            $scope.fn.makeTableConfigs();
                            //  서버에 저장한 이슈 검색 조건을 가져와서 이슈 목록 검색을 진행한다.
                            $scope.fn.getVmSearchObject(paramKeyWord);
                        });
                        //  서버에 저장한 이슈 검색 조건을 가져와서 이슈 목록 검색을 진행한다.
                        $scope.fn.getVmSearchObject(paramKeyWord, allIssue);
                    });
                }
src/main/webapp/scripts/app/issue/issueManager.controller.js
@@ -55,6 +55,10 @@
                    $scope.vm.pageTitle = $filter("translate")("issue.searchIssue");
                });
                $scope.$on("getAllIssuePageList", function (event, args) {
                    $scope.vm.pageTitle = $filter("translate")("common.allIssueList");
                });
                function start() {
                    if ($rootScope.issueTypeMenu != null) {
                        $scope.vm.pageTitle = $rootScope.issueTypeMenu.name;
src/main/webapp/views/common/sidebar.html
@@ -253,8 +253,34 @@
                <span translate="common.dashboard">대시보드</span>
            </a>
        </li>
        <li class="sub-header">
            <span>Project</span>
        </li>
        <li>
            <a ui-sref="projects.list" tabindex="-1">
                <div class="icon-w">
                    <div class="os-icon os-icon-package"></div>
                </div>
                <span translate="common.project">프로젝트</span></a>
        </li>
        <li class="sub-header">
            <span>ISSUE LIST</span>
            <span class="mt--14">[{{$root.workProject.name}}]</span>
        </li>
        <li>
            <a class="cursor" tabindex="-1" ng-click="fn.changeIssueListMenu(null, false)">
                <div class="icon-w">
                    <div class="os-icon os-icon-layout"></div>
                </div>
                <span translate="common.allIssueList">전체이슈</span>
            </a>
        </li>
        <li class="sub-header">
            <span>ISSUE TYPE LIST</span>
        </li>
        <li ng-repeat="issueType in $root.workIssueTypes" >
@@ -291,16 +317,6 @@
                <span translate="calendar.calendarTitle">캘린더</span></a>
        </li>
        -->
        <li class="sub-header">
            <span>Project</span>
        </li>
        <li>
            <a ui-sref="projects.list" tabindex="-1">
                <div class="icon-w">
                    <div class="os-icon os-icon-package"></div>
                </div>
                <span translate="common.project">프로젝트</span></a>
        </li>
        <li class="sub-header" ng-if="$root.checkMngPermissionSettings()">
            <span>custom workflow</span>