OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-07 608e92c8180a06db472694bbaec3afbb5798c2a1
Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa
5개 파일 변경됨
69 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 31 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java 4 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/condition/IssueCustomFieldValueCondition.java 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/issue-template.xml 12 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/issue/issueDetail.controller.js 12 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -242,7 +242,7 @@
                issueForm.setSeverityId(issueApiDefault.getSeverity().getId());
            }
            // 중복 값 하위 이슈로 처리하기
            // 중복 값 상위 이슈의 하위 이슈로 처리하기
            CustomFieldApiOverlapForm customFieldApiOverlapForm = new CustomFieldApiOverlapForm();
            customFieldApiOverlapForm.setUserId(user.getId());
            customFieldApiOverlapForm.setIssueTypeId(issueForm.getIssueTypeId());
@@ -311,14 +311,25 @@
        return issues;
    }
    // 상위 이슈 가져오기
    private IssueVo getParentIssueVo(Long parentIssueId) {
        if (parentIssueId != null) {
            Issue parentIssue = this.getIssue(parentIssueId);
            return ConvertUtil.copyProperties(parentIssue, IssueVo.class);
        }
        return null;
    }
    // 중복된 상위 이슈 검색
    private List<IssueVo> findIssue(IssueApiForm issueApiForm, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) {
        List<IssueVo> resultIssueVos = new ArrayList<>();
        if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) {
            for (CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) {
                for (IssueCustomFieldValueForm issueCustomFieldValue : issueApiForm.getIssueCustomFieldValues()) {
                    IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
                    issueCustomFieldValueCondition.setUseParentIssueId(true);
                    if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValue.getCustomFieldId())) {
                        issueCustomFieldValueCondition.setUseValue(issueCustomFieldValue.getUseValue());
@@ -1442,12 +1453,20 @@
    @Override
    @Transactional
    public List<IssueVo> findIssue(IssueApiForm issueApiform) {
        List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues();
        List<IssueVo> resultIssueVos = new ArrayList<>();
        IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition();
        issueCustomFieldValueCondition.setUseParentIssueId(false);
        if (issueCustomFieldValueForms.size() > 0) {
            for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) {
                CustomField customField = this.customFieldService.getCustomField(issueCustomFieldValueForm.getCustomFieldId());
                CustomFieldType customFieldType = CustomFieldType.DATETIME;
                if (customFieldType.equals(customField.getCustomFieldType())) {
                    continue;
                }
//                issueCustomFieldValueCondition.addUseValue(issueCustomFieldValueForm.getUseValue());
                issueCustomFieldValueCondition.setUseValue(issueCustomFieldValueForm.getUseValue());
                List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
@@ -1457,6 +1476,8 @@
                    resultIssueVos.clear();
                    for (Map<String, Object> result : results) {
                        IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class);
                        issueVo.setParentIssueVo(this.getParentIssueVo(MapUtil.getLong(result, "parentIssueId")));
                        if (findIssueVos.size() == 0) {
                            resultIssueVos.add(issueVo);
@@ -1495,11 +1516,17 @@
        User user = this.convertToUser(issueApiForm.getToken());
        IssueForm issueForm = this.convertToIssueForm(issueApiForm, user);
        List<IssueVo> issueVos = this.findIssue(issueApiForm);
        if (issueVos != null && issueVos.size() > 0) {
            List<Issue> issue = Lists.newArrayList();
            for (IssueVo issueVo : issueVos) {
                issueForm.setId(issueVo.getId());
                IssueVo parentIssueVo = issueVo.getParentIssueVo();
                if (parentIssueVo != null) {
                    issueForm.setId(parentIssueVo.getId());
                } else {
                    issueForm.setId(issueVo.getId());
                }
                issue.add(this.modifyIssueForApi(user, issueForm, files));
            }
            return issue;
src/main/java/kr/wisestone/owl/service/impl/IssueTableConfigServiceImpl.java
@@ -114,7 +114,9 @@
        //  해당 업무 공간에서 사용자의 이슈 검색 조건을 조회한다.
        IssueTableConfig issueTableConfig = this.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(issueTypeId, issueTableType);
        if (issueTableConfig != null) {
        if (issueTableConfig != null && issueTableConfig.getIssueTableType() == 2) {
            resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
        } else if (issueTableConfig != null && issueTableConfig.getIssueTableType() == 3) {
            resJsonData.put(Constants.RES_KEY_CONTENTS, issueTableConfig.getIssueTableConfigs());
        }
        else {
src/main/java/kr/wisestone/owl/web/condition/IssueCustomFieldValueCondition.java
@@ -18,6 +18,7 @@
    private String customFieldType;
    private List<String> useValues = Lists.newArrayList();  //  단일, 다중 일때 검색 값
    private String useValue;    //  텍스트 필드일 때 검색 값
    private boolean useParentIssueId = true;
    public IssueCustomFieldValueCondition(){}
@@ -103,4 +104,13 @@
    public void setCustomFieldType(String customFieldType) {
        this.customFieldType = customFieldType;
    }
    public boolean isUseParentIssueId() {
        return useParentIssueId;
    }
    public void setUseParentIssueId(boolean useParentIssueId) {
        this.useParentIssueId = useParentIssueId;
    }
}
src/main/resources/mybatis/query-template/issue-template.xml
@@ -959,12 +959,20 @@
    <!--    특정 사용자 정의 필드 값이 같은 이슈를 조회 -->
    <select id="findByCustomFieldValue" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.IssueCustomFieldValueCondition">
        SELECT
        issue_custom.issue_id as id
        issue_custom.issue_id as id,
        iss.parent_issue_id as parentIssueId
        FROM issue_custom_field_value issue_custom
        INNER JOIN issue iss ON iss.id = issue_custom.issue_id
        WHERE 1=1
        AND iss.parent_issue_id IS NULL
        AND issue_custom.use_value = #{useValue}
        <choose>
          <when test="useParentIssueId.equals(true)">
              AND iss.parent_issue_id IS NULL
          </when>
          <otherwise>
              AND iss.parent_issue_id IS NOT NULL
          </otherwise>
        </choose>
    </select>
</mapper>
src/main/webapp/scripts/app/issue/issueDetail.controller.js
@@ -134,9 +134,9 @@
                angular.extend(this, $controller('autoCompleteController', {$scope : $scope, $injector : $injector}));
                //  이슈 목록 데이터 갱신
                $scope.$on("getIssueList", function () {
                    $scope.fn.getIssueDetail();
                });
                // $scope.$on("getIssueList", function () {
                //     $scope.fn.getIssueDetail();
                // });
@@ -909,9 +909,9 @@
                                        //$scope.vm.form.issuesDown.push(issueDownVo.issueDown);
                                        $scope.vm.form.issuesDown.push(issueDownVo);
                                        // 간헐적인 하위 이슈 갱신 오류 방지
                                        $rootScope.$on("getIssueDetail", function (event, args) {
                                            $scope.fn.getIssueDetail();
                                        });
                                        // $rootScope.$on("getIssueDetail", function (event, args) {
                                        //     $scope.fn.getIssueDetail();
                                        // });
                                        
                                    });
                                }