OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2022-03-02 20d2fc7868921587e7a0aafd0dc00690507bb6e9
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
package kr.wisestone.owl.service.impl;
 
import kr.wisestone.owl.constant.MsgConstants;
import kr.wisestone.owl.domain.IssueNumberGenerator;
import kr.wisestone.owl.domain.Project;
import kr.wisestone.owl.exception.OwlRuntimeException;
import kr.wisestone.owl.repository.IssueNumberGeneratorRepository;
import kr.wisestone.owl.service.IssueNumberGeneratorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.Iterator;
import java.util.Map;
 
@Service
public class IssueNumberGeneratorServiceImpl extends AbstractServiceImpl<IssueNumberGenerator, Long, JpaRepository<IssueNumberGenerator, Long>> implements IssueNumberGeneratorService {
 
    private static final Logger log = LoggerFactory.getLogger(IssueNumberGeneratorServiceImpl.class);
 
    @Autowired
    private IssueNumberGeneratorRepository issueNumberGeneratorRepository;
 
    @Override
    protected JpaRepository<IssueNumberGenerator, Long> getRepository() {
        return this.issueNumberGeneratorRepository;
    }
 
    //  각 프로젝트의 이슈 번호를 자동으로 생성한다.
    @Override
    @Transactional(readOnly = true)
    public Long generateIssueNumber(Project project) {
        IssueNumberGenerator issueNumberGenerator = this.issueNumberGeneratorRepository.findByProjectId(project.getId());
 
        if (issueNumberGenerator == null) {
            issueNumberGenerator = new IssueNumberGenerator(project, 0L);
        }
        else {
            issueNumberGenerator.setNumber(issueNumberGenerator.getNumber() + 1);
        }
 
        this.issueNumberGeneratorRepository.saveAndFlush(issueNumberGenerator);
 
        return issueNumberGenerator.getNumber();
    }
 
    //  이슈 엑셀 import 가 완료된 후 사용된 issue number 를 업데이트해준다.
    @Override
    @Transactional
    public void updateIssueNumber(Map<Long, Long> issueNumberMaps) {
        Iterator iterator = issueNumberMaps.keySet().iterator();
 
        while(iterator.hasNext()) {
            Long projectId = (Long)iterator.next();
            IssueNumberGenerator issueNumberGenerator = this.issueNumberGeneratorRepository.findByProjectId(projectId);
 
            if (issueNumberGenerator == null) {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.ISSUE_NUMBER_GENERATOR_NOT_EXIST));
            }
 
            Long issueNumber = issueNumberMaps.get(projectId);
 
            if (issueNumber == null) {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.ISSUE_NUMBER_NOT_EXIST));
            }
 
            issueNumberGenerator.setNumber(--issueNumber);
            this.issueNumberGeneratorRepository.saveAndFlush(issueNumberGenerator);
        }
    }
 
}