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);
|
}
|
}
|
|
}
|