OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-10 e8dd85537ec9060133956629019c429ffb22f8c0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package kr.wisestone.owl.service.impl;
 
import kr.wisestone.owl.config.kafka.KafkaSender;
import kr.wisestone.owl.constant.Constants;
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.Qna;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.mapper.QnaMapper;
import kr.wisestone.owl.repository.QnaRepository;
import kr.wisestone.owl.service.QnaService;
import kr.wisestone.owl.service.UserService;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.vo.QnaVo;
import kr.wisestone.owl.vo.ResPage;
import kr.wisestone.owl.web.condition.QnaCondition;
import kr.wisestone.owl.web.form.QnaForm;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.List;
import java.util.Map;
 
@Service
public class QnaServiceImpl extends AbstractServiceImpl<Qna, Long, JpaRepository<Qna, Long>> implements QnaService {
 
    @Autowired
    private QnaRepository qnaRepository;
 
    @Autowired
    private UserService userService;
 
    @Autowired
    private KafkaSender kafkaSender;
 
    @Autowired
    private QnaMapper qnaMapper;
 
    @Override
    protected JpaRepository<Qna, Long> getRepository() {
        return this.qnaRepository;
    }
 
    //  공지 사항 등록
    @Override
    @Transactional
    public Qna addQna(QnaForm qnaForm) {
        //  Qna 제목 및 내용 공백 체크
        this.verifyTitleAndDescription(qnaForm.getTitle(), qnaForm.getDescription());
 
        Qna qna = ConvertUtil.copyProperties(qnaForm, Qna.class);
 
        return this.qnaRepository.saveAndFlush(qna);
    }
 
    //  Qna 제목 및 내용 공백 체크
    private void verifyTitleAndDescription(String title, String description) {
        if (StringUtils.isEmpty(title) || StringUtils.isEmpty(description)) {
            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.QNA_EMPTY_CONTENT));
        }
    }
 
    //  Qna 조회
    @Override
    @Transactional(readOnly = true)
    public List<QnaVo> findQna(Map<String, Object> resJsonData,
                               QnaCondition qnaCondition, Pageable pageable) {
 
        qnaCondition.setPage(pageable.getPageNumber() * pageable.getPageSize());
        qnaCondition.setPageSize(pageable.getPageSize());
        qnaCondition.setTitle(qnaCondition.getTitle());
 
        List<Map<String, Object>> results = this.qnaMapper.find(qnaCondition);
        Long totalCount = this.qnaMapper.count(qnaCondition);
        int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
        List<QnaVo> qnaVos = ConvertUtil.convertListToListClass(results, QnaVo.class);
 
        resJsonData.put(Constants.RES_KEY_CONTENTS, qnaVos);
        resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(),
                totalPage, totalCount));
 
        return qnaVos;
    }
 
    //  Qna 수정
    @Override
    @Transactional
    public Qna modifyQna(QnaForm qnaForm) {
        //  공지사항 제목 및 내용 공백 체크
        this.verifyTitleAndDescription(qnaForm.getTitle(), qnaForm.getDescription());
 
        Qna qna = this.getQna(qnaForm.getId());
        ConvertUtil.copyProperties(qnaForm, qna, "id");
 
        return this.qnaRepository.saveAndFlush(qna);
    }
 
    //  Qna id 로 조회한다.
    @Override
    @Transactional(readOnly = true)
    public Qna getQna(Long id) {
        if (id == null) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.QNA_NOT_EXIST));
        }
 
        Qna qna = this.findOne(id);
 
        if (qna == null) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.QNA_NOT_EXIST));
        }
 
        return qna;
    }
 
    //  Qna 상세 정보를 조회한다.
    @Override
    @Transactional(readOnly = true)
    public void detailQna(Map<String, Object> resJsonData, QnaCondition qnaCondition) {
        QnaVo qnaVo = new QnaVo();
 
        if (qnaCondition.getId() != null) {
            Qna qna = this.getQna(qnaCondition.getId());
            qnaVo = ConvertUtil.copyProperties(qna, QnaVo.class);
        }
 
        resJsonData.put(Constants.RES_KEY_CONTENTS, qnaVo);
    }
}