package kr.wisestone.owl.service.impl;
|
|
import kr.wisestone.owl.domain.*;
|
import kr.wisestone.owl.domain.enumType.IssueHistoryType;
|
import kr.wisestone.owl.mapper.IssueIspMapper;
|
import kr.wisestone.owl.repository.IssueIspRepository;
|
import kr.wisestone.owl.service.*;
|
import kr.wisestone.owl.util.ConvertUtil;
|
import kr.wisestone.owl.util.MapUtil;
|
import kr.wisestone.owl.web.condition.IssueCondition;
|
import kr.wisestone.owl.web.form.IspFieldForm;
|
import kr.wisestone.owl.web.form.IssueForm;
|
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.*;
|
|
@Service
|
public class IssueIspServiceImpl extends AbstractServiceImpl<IssueIsp, Long, JpaRepository<IssueIsp, Long>> implements IssueIspService {
|
|
private static final Logger log = LoggerFactory.getLogger(IssueIspServiceImpl.class);
|
|
@Autowired
|
private IssueIspRepository issueIspRepository;
|
|
@Autowired
|
private IspFieldService ispFieldService;
|
|
@Autowired
|
private IssueService issueService;
|
|
@Autowired
|
private IssueHistoryService issueHistoryService;
|
|
@Autowired
|
private IssueIspMapper issueIspMapper;
|
|
@Override
|
protected JpaRepository<IssueIsp, Long> getRepository() {
|
return this.issueIspRepository;
|
}
|
|
/**
|
* 새로운 ISP 직접 추가
|
* @param issueForm IssueForm
|
* @param issue Issue
|
*/
|
private void CreateIspField(IssueForm issueForm, Issue issue) {
|
// issueIsp 필드 폼 만들기
|
IspFieldForm ispFieldForm = new IspFieldForm();
|
ispFieldForm.setName(issueForm.getIspName());
|
ispFieldForm.setCode(issueForm.getIspCode());
|
ispFieldForm.setEmail(issueForm.getIspEmail());
|
ispFieldForm.setUrl(issueForm.getIspUrl());
|
ispFieldForm.setManager(issueForm.getIspManager());
|
ispFieldForm.setTel(issueForm.getIspTel());
|
ispFieldForm.setMemo(issueForm.getIspMemo());
|
|
IssueIsp newIssueIsp = CreateIssueIsp(ispFieldForm, issue);
|
IspField ispField = new IspField();
|
StringBuilder sb = new StringBuilder();
|
|
// 사용자가 직접 입력시에 ISP 목록에 추가
|
if (newIssueIsp.getIspField() == null) {
|
IssueIsp oldIssueIsp = this.issueIspRepository.findByIssueId(issue.getId());
|
ispField = this.ispFieldService.add(ispFieldForm);
|
ispFieldForm.setId(ispField.getId());
|
if (oldIssueIsp != null) {
|
issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, null, ispFieldForm, oldIssueIsp, sb);
|
this.issueIspRepository.deleteById(oldIssueIsp.getId());
|
} else {
|
newIssueIsp.setIspField(ispField);
|
issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, null, ispFieldForm, newIssueIsp, sb);
|
}
|
}
|
// 추가 이력
|
issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
|
this.issueIspRepository.saveAndFlush(newIssueIsp);
|
}
|
|
/**
|
* 이슈 ISP 만들기
|
* @param ispFieldForm IspFieldForm
|
* @param issue 이슈
|
* @return IssueIsp
|
*/
|
private IssueIsp CreateIssueIsp(IspFieldForm ispFieldForm, Issue issue) {
|
IssueIsp issueIsp = ConvertUtil.copyProperties(ispFieldForm, IssueIsp.class);
|
issueIsp.setIssue(issue);
|
if (ispFieldForm.getId() != null && ispFieldForm.getId() != -1) {
|
IspField ispField = this.ispFieldService.getIsp(ispFieldForm.getId());
|
issueIsp.setIspField(ispField);
|
}
|
|
return issueIsp;
|
}
|
|
|
/**
|
* 이슈 ISP 만들기
|
* @param ispFieldMap Map<String, Object> IspFieldForm map
|
* @param issue 이슈
|
* @return IssueIsp CreateIssueIsp
|
*/
|
private IssueIsp CreateIssueIsp(Map<String, Object> ispFieldMap, Issue issue) {
|
IspFieldForm ispFieldForm = ConvertUtil.convertMapToClass(ispFieldMap, IspFieldForm.class);
|
ispFieldForm.setId(MapUtil.getLong(ispFieldMap, "ispId"));
|
return CreateIssueIsp(ispFieldForm, issue);
|
}
|
|
|
// 이슈에서 사용되는 업체 값을 업데이트한다.
|
@Override
|
@Transactional
|
public void modifyIssueIspField(Issue issue, IssueForm issueForm) {
|
if (issue != null) {
|
StringBuilder sb = new StringBuilder();
|
List<Map<String, Object>> issueIspFields = issueForm.getIssueIspFields();
|
if (issueIspFields != null && issueIspFields.size() > 0) {
|
Map<String, Object> param = issueIspFields.get(0);
|
|
IssueIsp issueIsp = this.issueIspRepository.findByIssueId(issue.getId());
|
|
if (issueIsp != null) {//수정 시
|
// 변경 이력 남기고 issueIsp에 set해주기
|
issueHistoryService.detectIssueIsp(IssueHistoryType.MODIFY, param, null, issueIsp, sb);
|
issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
|
|
issueIsp.setName(MapUtil.getString(param, "name"));
|
issueIsp.setEmail(MapUtil.getString(param, "email"));
|
issueIsp.setCode(MapUtil.getString(param, "code"));
|
issueIsp.setUrl(MapUtil.getString(param, "url"));
|
issueIsp.setManager(MapUtil.getString(param, "manager"));
|
issueIsp.setTel(MapUtil.getString(param, "tel"));
|
issueIsp.setMemo(MapUtil.getString(param, "memo"));
|
|
this.issueIspRepository.saveAndFlush(issueIsp);
|
|
} else { //추가 시
|
IssueIsp newIssueIsp = CreateIssueIsp(param, issue);
|
// 추가 이력
|
issueHistoryService.detectIssueIsp(IssueHistoryType.ADD, param, null, newIssueIsp, sb);
|
issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
|
this.issueIspRepository.saveAndFlush(newIssueIsp);
|
}
|
} // 사용자가 직접 입력시
|
else if (issueForm.getIspName() != null && !issueForm.getIspName().equals("")) {
|
//ISP정보 직접 추가
|
CreateIspField(issueForm, issue);
|
}
|
else {
|
this.issueIspRepository.deleteByIssueId(issue.getId());
|
this.issueIspRepository.flush();
|
}
|
}
|
}
|
|
@Override
|
@Transactional(readOnly = true)
|
public List<Map<String, Object>> findInIssueIds(IssueCondition issueCondition) {
|
return this.issueIspMapper.findInIssueIds(issueCondition);
|
}
|
}
|