package kr.wisestone.owl.service.impl;
|
|
import kr.wisestone.owl.domain.*;
|
import kr.wisestone.owl.domain.enumType.IssueHistoryType;
|
import kr.wisestone.owl.mapper.IssueCompanyMapper;
|
import kr.wisestone.owl.repository.IssueCompanyRepository;
|
import kr.wisestone.owl.service.*;
|
import kr.wisestone.owl.util.ConvertUtil;
|
import kr.wisestone.owl.util.MapUtil;
|
import kr.wisestone.owl.vo.CompanyFieldVo;
|
import kr.wisestone.owl.web.condition.IssueCondition;
|
import kr.wisestone.owl.web.form.CompanyFieldForm;
|
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 IssueCompanyServiceImpl extends AbstractServiceImpl<IssueCompany, Long, JpaRepository<IssueCompany, Long>> implements IssueCompanyService {
|
|
private static final Logger log = LoggerFactory.getLogger(IssueCompanyServiceImpl.class);
|
|
@Autowired
|
private IssueCompanyRepository issueCompanyRepository;
|
|
@Autowired
|
private CompanyFieldService companyFieldService;
|
|
@Autowired
|
private CompanyFieldCategoryService companyFieldCategoryService;
|
|
@Autowired
|
private IssueHistoryService issueHistoryService;
|
|
@Autowired
|
private IssueCompanyMapper issueCompanyMapper;
|
|
@Override
|
protected JpaRepository<IssueCompany, Long> getRepository() {
|
return this.issueCompanyRepository;
|
}
|
|
/**
|
* 새로운 업체 직접 추가
|
* @param issueForm IssueForm
|
* @param issue Issue
|
*/
|
private void CreateCompanyField(IssueForm issueForm, Issue issue, StringBuilder sb) {
|
|
CompanyFieldForm companyFieldForm = new CompanyFieldForm();
|
companyFieldForm.setName(issueForm.getCompanyName());
|
companyFieldForm.setEmail(issueForm.getCompanyEmail());
|
companyFieldForm.setUrl(issueForm.getCompanyUrl());
|
companyFieldForm.setIpStart(issueForm.getIpStart());
|
companyFieldForm.setIpEnd(issueForm.getIpEnd());
|
companyFieldForm.setManager(issueForm.getCompanyManager());
|
companyFieldForm.setTel(issueForm.getCompanyTel());
|
companyFieldForm.setMemo(issueForm.getCompanyMemo());
|
companyFieldForm.setCompanyTypeName(issueForm.getCompanyTypeName());
|
companyFieldForm.setParentSectorName(issueForm.getParentSectorName());
|
companyFieldForm.setChildSectorName(issueForm.getChildSectorName());
|
companyFieldForm.setRegionName(issueForm.getRegionName());
|
companyFieldForm.setStatusName(issueForm.getStatusName());
|
|
IssueCompany newIssueCompany = CreateIssueCompany(companyFieldForm, issue);
|
CompanyField companyField = new CompanyField();
|
|
// 사용자가 직접 입력 시 COMPANY 목록에 추가
|
if (newIssueCompany.getCompanyField() == null) {
|
IssueCompany oldIssueCompany = this.issueCompanyRepository.findByIssueId(issue.getId());
|
companyField = this.companyFieldService.addCompany(companyFieldForm);
|
companyFieldForm.setId(companyField.getId());
|
if (oldIssueCompany != null) {
|
issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, null, companyFieldForm, oldIssueCompany, sb);
|
this.issueCompanyRepository.deleteById(oldIssueCompany.getId());
|
} else {
|
newIssueCompany.setCompanyField(companyField);
|
issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, null, companyFieldForm, newIssueCompany, sb);
|
}
|
}
|
this.issueCompanyRepository.saveAndFlush(newIssueCompany);
|
}
|
|
/**
|
* 이슈 Company 만들기
|
* @param companyFieldForm CompanyFieldForm
|
* @param issue 이슈
|
* @return issueCompany
|
*/
|
private IssueCompany CreateIssueCompany(CompanyFieldForm companyFieldForm, Issue issue) {
|
IssueCompany issueCompany = ConvertUtil.copyProperties(companyFieldForm, IssueCompany.class, "id");
|
issueCompany.setIssue(issue);
|
if (companyFieldForm.getId() != null && companyFieldForm.getId() != -1) {
|
CompanyField companyField = this.companyFieldService.getCompany(companyFieldForm.getId());
|
issueCompany.setCompanyField(companyField);
|
}
|
return issueCompany;
|
}
|
|
// 이슈에서 사용되는 업체 값을 업데이트한다.
|
@Override
|
@Transactional
|
public void modifyIssueCompanyField(Issue issue, IssueForm issueForm, StringBuilder sb) {
|
if (issue != null) {
|
IssueCompany issueCompany = this.issueCompanyRepository.findByIssueId(issue.getId());
|
List<Map<String, Object>> issueCompanyFields = issueForm.getIssueCompanyFields();
|
|
if (issueCompanyFields != null && issueCompanyFields.size() > 0) {
|
Map<String, Object> param = issueCompanyFields.get(0);
|
|
CompanyFieldVo companyFieldVo = new CompanyFieldVo();
|
CompanyField companyField = ConvertUtil.convertMapToClass(param, CompanyField.class);
|
companyFieldVo = this.companyFieldService.CreateCompanyFieldCategory(companyFieldVo, companyField);
|
param.put("companyTypeName", companyFieldVo.getCompanyTypeName());
|
param.put("parentSectorName", companyFieldVo.getParentSectorName());
|
param.put("childSectorName", companyFieldVo.getChildSectorName());
|
param.put("regionName", companyFieldVo.getRegionName());
|
param.put("statusName", companyFieldVo.getStatusName());
|
|
if (issueCompany != null) { //수정 시
|
// 변경 이력 먼저 남기고 issueCompany에 set하기
|
issueHistoryService.detectIssueCompany(IssueHistoryType.MODIFY, param, null, issueCompany, sb);
|
|
issueCompany.setName(MapUtil.getString(param, "name"));
|
issueCompany.setEmail(MapUtil.getString(param, "email"));
|
issueCompany.setUrl(MapUtil.getString(param, "url"));
|
issueCompany.setIpStart(MapUtil.getString(param, "ipStart"));
|
issueCompany.setIpEnd(MapUtil.getString(param, "ipEnd"));
|
issueCompany.setManager(MapUtil.getString(param, "manager"));
|
issueCompany.setTel(MapUtil.getString(param, "tel"));
|
issueCompany.setMemo(MapUtil.getString(param, "memo"));
|
issueCompany.setCompanyTypeId(MapUtil.getLong(param, "companyTypeId"));
|
issueCompany.setParentSectorId(MapUtil.getLong(param, "parentSectorId"));
|
issueCompany.setChildSectorId(MapUtil.getLong(param, "childSectorId"));
|
issueCompany.setRegionId(MapUtil.getLong(param, "regionId"));
|
issueCompany.setStatusId(MapUtil.getLong(param, "statusId"));
|
issueCompany.setStatusName(MapUtil.getString(param, "statusName"));
|
|
this.issueCompanyRepository.saveAndFlush(issueCompany);
|
} else { //추가 시
|
CompanyFieldForm companyFieldForm = ConvertUtil.convertMapToClass(param, CompanyFieldForm.class);
|
companyFieldForm.setId(MapUtil.getLong(param, "companyId"));
|
|
IssueCompany newIssueCompany = CreateIssueCompany(companyFieldForm, issue);
|
|
companyFieldVo = this.companyFieldService.CreateCompanyFieldCategory(companyFieldVo, companyField);
|
companyFieldForm.setCompanyTypeName(companyFieldVo.getCompanyTypeName());
|
companyFieldForm.setParentSectorName(companyFieldVo.getParentSectorName());
|
companyFieldForm.setChildSectorName(companyFieldVo.getChildSectorName());
|
companyFieldForm.setRegionName(companyFieldVo.getRegionName());
|
companyFieldForm.setStatusName(companyFieldVo.getStatusName());
|
|
// 추가 이력
|
issueHistoryService.detectIssueCompany(IssueHistoryType.ADD, param, companyFieldForm, newIssueCompany, sb);
|
this.issueCompanyRepository.saveAndFlush(newIssueCompany);
|
}
|
|
} else if(issueForm.getCompanyName() != null && !issueForm.getCompanyName().equals("")) {
|
//업체정보 직접 추가
|
CreateCompanyField(issueForm, issue, sb);
|
} else {
|
this.issueCompanyRepository.deleteByIssueId(issue.getId());
|
this.issueCompanyRepository.flush();
|
|
if (issueCompany != null) {
|
issueHistoryService.detectIssueCompany(IssueHistoryType.DELETE, null, null, issueCompany, sb);
|
}
|
}
|
//issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, sb.toString());
|
}
|
}
|
|
@Override
|
@Transactional(readOnly = true)
|
public List<Map<String, Object>> findInIssueIds(IssueCondition issueCondition) {
|
return this.issueCompanyMapper.findInIssueIds(issueCondition);
|
}
|
}
|