OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-12-03 4e5a589b93735ac56cfa8892db7bc1781f04b3d1
Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
10개 파일 변경됨
149 ■■■■ 파일 변경됨
pom.xml 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/IssueTypeCondition.java 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/issueType-template.xml 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/system_prod.properties 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/index.html 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/api/apiSetting.controller.js 54 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/main.js 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/api/apiMonitor.html 18 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/api/apiSettingColumn.html 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
pom.xml
@@ -6,7 +6,7 @@
    <groupId>kr.wisestone.owl</groupId>
    <artifactId>kr.wisestone.owl.its</artifactId>
    <version>4.0.34.RELEASE</version>
    <version>1.0.0.RELEASE</version>
    <packaging>war</packaging>
    <properties>
src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -12,6 +12,7 @@
import kr.wisestone.owl.repository.IssueTypeRepository;
import kr.wisestone.owl.service.*;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.util.MapUtil;
import kr.wisestone.owl.vo.*;
import kr.wisestone.owl.web.condition.IssueTypeCondition;
import kr.wisestone.owl.web.form.IssueTypeForm;
@@ -175,6 +176,15 @@
        condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
        List<Map<String, Object>> results = this.issueTypeMapper.find(condition);
        for (Map<String, Object> result : results) {
            Long projectId = MapUtil.getLong(result, "projectId");
            if (projectId != null) {
                Project project = this.projectService.getProject(projectId);
                ProjectVo projectVo = ConvertUtil.copyProperties(project, ProjectVo.class);
                result.put("projectVo", projectVo);
            }
        }
        Long totalCount = this.issueTypeMapper.count(condition);
        int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
        List<IssueTypeVo> issueTypeVos = ConvertUtil.convertListToListClass(results, IssueTypeVo.class);
src/main/java/kr/wisestone/owl/web/condition/IssueTypeCondition.java
@@ -27,6 +27,8 @@
    private String startDate;
    private String endDate;
    private String isApi;
    private List<Long> projectIds = Lists.newArrayList();
    public IssueTypeCondition(){}
@@ -150,4 +152,12 @@
    public void setProjectIds(List<Long> projectIds) {
        this.projectIds = projectIds;
    }
    public String getIsApi() {
        return isApi;
    }
    public void setIsApi(String isApi) {
        this.isApi = isApi;
    }
}
src/main/resources/mybatis/query-template/issueType-template.xml
@@ -8,7 +8,8 @@
        DISTINCT it.id as id,
        it.name as name,
        it.description as description,
        it.color as color
        it.color as color,
        it.project_id as projectId
        FROM
        issue_type it
        INNER JOIN workspace ws on it.workspace_id = ws.id
src/main/resources/system_prod.properties
@@ -38,7 +38,7 @@
mail.password=
# email \uC124\uC815
email.host=mail.g2works.kra
email.host=mail.g2works.kr
email.port=587
email.userName=wyu@maprex.co.kr
email.password=1234
@@ -46,7 +46,7 @@
email.smtp.auth=true
email.smtp.starttle.enable=true
email.debug=true
email.sendUrl=http://localhost:8081
email.sendUrl=http://maprex.iptime.org:8180
# \uD68C\uACC4 \uB2F4\uB2F9\uC790 \uACB0\uC81C \uCDE8\uC18C \uC54C\uB9BC - \uD68C\uACC4 \uB2F4\uB2F9\uC790\uB294 \uAF2D \uC2DC\uC2A4\uD15C\uC5D0 \uAC00\uC785 \uB418\uC5B4 \uC788\uC5B4\uC57C \uD55C\uB2E4.
payment.cancel.manager.email=jslee1@wisestone.kr
src/main/webapp/index.html
@@ -12,16 +12,16 @@
    <meta name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1">
    <!-- 봇이 읽는 설명 -->
    <meta name="description" content="이슈 관리 시스템 - 웹 기반의 이슈 관리 시스템 v4.0.34">
    <meta name="description" content="이슈 관리 시스템 - 탐지 관리">
    <meta property="og:type" content="website">
    <meta property="og:title" content="OWL ITS - 와이즈스톤">
    <meta property="og:description" content="이슈 관리 시스템 - 웹 기반의 이슈 관리 시스템 v4.0.34">
    <meta property="og:title" content="OWL ITS">
    <meta property="og:description" content="이슈 관리 시스템 - 탐지 관리">
    <meta property="og:image" content="https://owlsolution.io/assets/images/main.png">
    <meta property="og:url" content="https://owlsolution.io">
    <meta name="google-site-verification" content="yhmSp9Zsw5oecXjp43Ndu0w9rBA3FNpnNZ8bQFA_iDA"/>
    <meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1">
    <title>OWL ITS v4.0.34</title>
    <title>OWL ITS</title>
    <link type="text/css" rel="stylesheet" href="bower_components/font-awesome/css/font-awesome.css">
    <link type="text/css" rel="stylesheet" href="bower_components/jquery-ui/themes/base/jquery-ui.css">
@@ -40,7 +40,7 @@
    <link type="text/css" rel="stylesheet" href="custom_components/js-autocomplete-single/js-autocomplete-single.css">
    <link type="text/css" rel="stylesheet" href="custom_components/js-autocomplete-multi/js-autocomplete-multi.css">
    <link type="text/css" rel="stylesheet" href="custom_components/js-html-diff/js-html-diff.css">
    <link type="text/css" rel="stylesheet" href="assets/styles/main.css?version=4.0.34">
    <link type="text/css" rel="stylesheet" href="assets/styles/main.css?version=1.0.0">
    <link type="text/css" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Rubik:300,400,500">
    <!--    google font -->
src/main/webapp/scripts/app/api/apiSetting.controller.js
@@ -7,8 +7,8 @@
        'app', 'angular'
    ],
    function (app, angular) {
        app.controller('apiSettingController', ['$scope', '$rootScope', '$log', '$resourceProvider','$uibModal', 'SweetAlert', '$timeout', '$filter', '$injector', '$controller', 'Api', 'Priority', 'Severity', 'IssueType',
            function ($scope, $rootScope, $log, $resourceProvider, $uibModal, SweetAlert, $timeout, $filter, $injector, $controller, Api, Priority, Severity, IssueType) {
        app.controller('apiSettingController', ['$scope', '$rootScope', '$log', '$resourceProvider','$uibModal', 'SweetAlert', '$timeout', '$filter', '$injector', '$controller', 'Api', 'Priority', 'Severity', 'IssueType', 'IssueTypeCustomField',
            function ($scope, $rootScope, $log, $resourceProvider, $uibModal, SweetAlert, $timeout, $filter, $injector, $controller, Api, Priority, Severity, IssueType, IssueTypeCustomField) {
                $scope.fn = {
                    changeTab : changeTab,
@@ -27,7 +27,9 @@
                    formSubmitOverlap : formSubmitOverlap,
                    removeCustomField : removeCustomField,
                    getOverlapList : getOverlapList,
                    onChangeIssueTypeOverlap : onChangeIssueTypeOverlap
                    onChangeIssueTypeOverlap : onChangeIssueTypeOverlap,
                    getIssueTypeCustomFields : getIssueTypeCustomFields,
                    getCurrentIssueTypeVo : getCurrentIssueTypeVo
                };
                $scope.vm = {
@@ -37,6 +39,7 @@
                    priorities : [],
                    // projects : [],
                    form : {
                        issueCustomFields : [],
                        issueApiDefault : {
                            title : "",
                            description : "",
@@ -61,7 +64,6 @@
                    issueTypeId : "",
                    issueTypeName : "",
                    customFieldName : "",
                    issueTypeData : null            // 이슈 유형 객체
                };
                angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
@@ -124,6 +126,18 @@
                    });
                }
                function getCurrentIssueTypeVo() {
                    var issueTypeId = $scope.vm.issueTypeId;
                    var issueTypeVo = null;
                    $scope.vm.issueTypes.forEach(function (issueType) {
                       if (issueType.id == issueTypeId) {
                           issueTypeVo = issueType;
                       }
                    });
                    return issueTypeVo;
                }
                function onChangeIssueTypeOverlap() {
                    $scope.fn.getOverlapList();
                }
@@ -137,11 +151,14 @@
                        Api.findApiDefault($resourceProvider.getContent(
                            conditions, $resourceProvider.getPageContent(0, 1000))).then(function (result) {
                            $scope.fn.initForm();
                            $scope.fn.getIssueTypeCustomFields();
                            if (result.data.message.status === "success") {
                                if (angular.isDefined(result.data.data)) {
                                    $scope.vm.form.issueApiDefault = result.data.data;
                                    $scope.vm.form.issueApiDefault.priorityId = result.data.data.priorityId != null ? result.data.data.priorityId.toString() : "";
                                    $scope.vm.form.issueApiDefault.severityId = result.data.data.severityId != null ? result.data.data.severityId.toString() : "";
                                    // if (angular.isDefined(result.data.data.projectVo)) {
                                    //     $scope.vm.projects = [];
@@ -247,6 +264,34 @@
                    });
                }
                //  이슈 유형에 연결된 사용자 정의 필드
                function getIssueTypeCustomFields() {
                    $scope.vm.form.issueCustomFields = [];
                    var issueTypeVo = $scope.fn.getCurrentIssueTypeVo();
                    if (issueTypeVo.projectVo == null) return;
                    IssueTypeCustomField.find($resourceProvider.getContent({
                            projectId : issueTypeVo.projectVo.id,
                            IssueTypeId : issueTypeVo.id },
                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.vm.form.issueCustomFields = [];
                            angular.forEach(result.data.data, function (issueTypeCustomField) {
                                $scope.vm.form.issueCustomFields.push(issueTypeCustomField);
                            });
                        }
                        else {
                            SweetAlert.swal($filter("translate")("issue.failedToUserDefinedFieldListAssociatedLookup"), result.data.message.message, "error"); // 이슈 유형에 연결된 사용자 정의 필드 목록 조회 실패
                        }
                    });
                }
                //  중요도 목록
                function getSeverities() {
                    Severity.find($resourceProvider.getContent({},
@@ -286,6 +331,7 @@
                    $scope.fn.getSeverities();
                    $scope.fn.getPriorities();
                    $scope.fn.getIssueTypes();
                }
                $scope.fn.start();
src/main/webapp/scripts/main.js
@@ -4,7 +4,7 @@
'use strict';
require.config({
    urlArgs : "bust=v4.0.34",
    urlArgs : "bust=v1.0.0",
    paths : {
        'jquery' : '../bower_components/jquery/dist/jquery',
        'jquery-ui' : '../bower_components/jquery-ui/jquery-ui',
src/main/webapp/views/api/apiMonitor.html
@@ -23,12 +23,20 @@
                </select>
                <google-chart
                              columns="vm.chartData.columns"
                              rows="vm.chartData.rows"
                              options="vm.chartData.options">
                <div class="no-cont1"
                     ng-if="vm.chartData.columns.length < 1"
                     translate="common.noRecord">
                    기록이 없습니다.
                </div>
                </google-chart>
                <div  ng-if="vm.chartData.columns.length > 0">
                    <google-chart
                                  columns="vm.chartData.columns"
                                  rows="vm.chartData.rows"
                                  options="vm.chartData.options">
                    </google-chart>
                </div>
            </div>
        </div>
    </div>
src/main/webapp/views/api/apiSettingColumn.html
@@ -15,7 +15,7 @@
                <option ng-repeat="issueType in vm.issueTypes"
                        ng-style="{ 'color' : issueType.color, 'font-weight': 600 }"
                        value="{{issueType.id}}"
                        translate="{{issueType.name}}">
                        translate="{{issueType.name}}(id:{{issueType.id}})">
                </option>
            </select>
        </div>
@@ -27,25 +27,6 @@
<div class="element-box">
    <form role="form" name="apiSettingColumnForm">
        <div class="form-group mb10">
            <label for="customFieldSelectForm" class="issue-label">
                <span translate="issue.issueType">이슈 유형</span>
            </label>
            <select id="customFieldSelectForm"
                    name="issueType"
                    class="form-control input-sm issue-select-label"
                    ng-model="vm.issueTypeId"
                    ng-style="{ 'color' : fn.getOptionColor(vm.issueTypes, vm.issueTypeId) }"
                    ng-change="fn.onChangeIssueType()"
                    required>
                <option ng-repeat="issueType in vm.issueTypes"
                        ng-style="{ 'color' : issueType.color, 'font-weight': 600 }"
                        value="{{issueType.id}}"
                        translate="{{issueType.name}}">
                </option>
            </select>
        </div>
        <div class="form-group mb10">
            <label for="issueTitle" class="issue-label"><span translate="issue.issueTitle">일감 제목</span> </label>
@@ -121,6 +102,21 @@
                </div>
            </div>
            <div class="col-lg-8">
                <!-- 사용자 정의 필드 -->
                <div class="row">
                    <label for="issue-priority" class="issue-label">
                        <span translate="common.detectingInfo">탐지 정보</span>
                    </label>
                </div>
                <div class="row">
                    <div class="col-md-4" ng-repeat="issueCustomField in vm.form.issueCustomFields">
                        <label class="issue-detail-label">이름: {{::issueCustomField.customFieldVo.name}}</label>
                        <span class="issue-detail-word-break">ID: {{::issueCustomField.customFieldVo.id}}</span>
                    </div>
                </div>
            </div>
        </div>
        <div class="form-group mb10">