package kr.wisestone.owl.service.impl;
|
|
import com.google.common.collect.Lists;
|
import kr.wisestone.owl.domain.*;
|
import kr.wisestone.owl.mapper.IssueDepartmentMapper;
|
import kr.wisestone.owl.mapper.IssueUserMapper;
|
import kr.wisestone.owl.repository.IssueDepartmentRepository;
|
import kr.wisestone.owl.service.DepartmentService;
|
import kr.wisestone.owl.service.IssueDepartmentService;
|
import kr.wisestone.owl.util.CommonUtil;
|
import kr.wisestone.owl.util.MapUtil;
|
import kr.wisestone.owl.vo.DepartmentVo;
|
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.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
public class IssueDepartmentServiceImpl extends AbstractServiceImpl<IssueDepartment, Long, JpaRepository<IssueDepartment, Long>> implements IssueDepartmentService {
|
|
private static final Logger log = LoggerFactory.getLogger(IssueDepartmentServiceImpl.class);
|
|
@Autowired
|
private DepartmentService departmentService;
|
|
@Autowired
|
private IssueDepartmentRepository issueDepartmentRepository;
|
|
@Autowired
|
private IssueDepartmentMapper issueDepartmentMapper;
|
|
@Override
|
protected JpaRepository<IssueDepartment, Long> getRepository() {
|
return this.issueDepartmentRepository;
|
}
|
|
/**
|
* 이슈의 담당부서 추가
|
* @param departmentsIds List<Long>
|
* @param workspace Workspace
|
* @param issue Issue
|
*/
|
@Override
|
@Transactional
|
public void add(List<Long> departmentsIds, Workspace workspace, Issue issue) {
|
List<IssueDepartment> issueDepartments = Lists.newArrayList();
|
|
for (Long departmentId : departmentsIds) {
|
Department department = this.departmentService.getDepartment(departmentId);
|
issueDepartments.add(new IssueDepartment(workspace, issue, department));
|
}
|
this.issueDepartmentRepository.saveAll(issueDepartments);
|
|
}
|
|
// 이슈 담당부서를 변경한다.
|
@Override
|
@Transactional
|
public void modifyIssueDepartment(Issue issue, Workspace workspace, List<Long> departmentIds) {
|
User user = this.webAppUtil.getLoginUserObject();
|
modifyIssueDepartment(issue, user, workspace, departmentIds);
|
}
|
|
// 이슈 담당부서를 변경한다.
|
@Override
|
@Transactional
|
public void modifyIssueDepartment(Issue issue, User user, Workspace workspace, List<Long> departmentIds) {
|
List<Long> oldDepartmentIds = Lists.newArrayList();
|
|
// 이전 담당 부서
|
for (IssueDepartment issueDepartment : issue.getIssueDepartments()) {
|
oldDepartmentIds.add(issueDepartment.getDepartment().getId());
|
}
|
|
List<Long> newDepartmentIds = CommonUtil.searchChangeList(oldDepartmentIds, departmentIds); // 추가해야할 부서를 찾는다.
|
List<Long> removeDepartmentIds = CommonUtil.searchChangeList(departmentIds, oldDepartmentIds); // 삭제해야할 부서를 찾는다.
|
|
if (removeDepartmentIds.size() > 0) {
|
Map<String, Object> removeIssueAssigneeMap = new HashMap<>();
|
removeIssueAssigneeMap.put("issueId", issue.getId());
|
removeIssueAssigneeMap.put("departmentIds", removeDepartmentIds);
|
|
// 담당부서 삭제
|
this.issueDepartmentMapper.deleteIssueDepartmentByIssueIdAndMultiDepartmentId(removeIssueAssigneeMap);
|
}
|
|
if (newDepartmentIds.size() > 0) {
|
List<Map<String, Long>> addIssueAssigneeMaps = Lists.newArrayList();
|
|
for (Long departmentId : newDepartmentIds) {
|
Map<String, Long> issueAssigneeMap = new HashMap<>();
|
issueAssigneeMap.put("departmentId", departmentId); //담당부서
|
issueAssigneeMap.put("issueId", issue.getId());
|
issueAssigneeMap.put("workspaceId", workspace.getId());
|
issueAssigneeMap.put("registerId", user.getId());
|
issueAssigneeMap.put("modifyId", user.getId());
|
addIssueAssigneeMaps.add(issueAssigneeMap);
|
}
|
|
// 담당부서 추가
|
this.issueDepartmentMapper.insertIssueDepartment(addIssueAssigneeMaps);
|
}
|
}
|
|
// 이슈 담당부서 찾기
|
@Override
|
@Transactional
|
public List<IssueDepartment> find(Issue issue) {
|
return this.issueDepartmentRepository.findByIssueId(issue.getId());
|
}
|
|
// 이슈 담당부서 찾기
|
@Override
|
@Transactional
|
public List<IssueDepartment> findByDepartmentId(Long departmentId) {
|
return this.issueDepartmentRepository.findByDepartmentId(departmentId);
|
}
|
|
/**
|
* 이슈의 담당부서에 속해있는지 조회
|
* @param departmentId Long
|
* @return useYn
|
*/
|
@Override
|
public boolean usingDepartment(Long departmentId) {
|
boolean useYn = false;
|
List<IssueDepartment> issueDepartments = this.issueDepartmentRepository.findByDepartmentId(departmentId);
|
if (issueDepartments != null && issueDepartments.size() > 0) {
|
useYn = true;
|
}
|
return useYn;
|
}
|
|
@Override
|
@Transactional
|
public void insertIssueDepartment(List<Map<String, Long>> issueAssigneeMaps) {
|
// 이슈 담당부서 벌크 등록
|
this.issueDepartmentMapper.insertIssueDepartment(issueAssigneeMaps);
|
}
|
|
// 이슈 담당부서에서 제외한다.
|
@Override
|
@Transactional
|
public void removeIssueDepartment(Long projectId, List<Long> excludeDepartmentIds) {
|
for (Long departmentId : excludeDepartmentIds) {
|
Map<String, Object> issueDepartmentMap = new HashMap<>();
|
issueDepartmentMap.put("departmentId", departmentId);
|
issueDepartmentMap.put("projectId", projectId);
|
|
List<Map<String, Object>> results = this.issueDepartmentMapper.findByDepartmentIdAndProjectId(issueDepartmentMap);
|
|
if (results.size() > 0) {
|
List<Long> issueIds = Lists.newArrayList();
|
|
for (Map<String, Object> result : results) {
|
Long id = MapUtil.getLong(result, "id");
|
|
if (id != null) {
|
issueIds.add(id);
|
}
|
}
|
|
if (issueIds.size() > 0) {
|
Map<String, Object> removeIssueAssigneeMap = new HashMap<>();
|
removeIssueAssigneeMap.put("departmentId", departmentId);
|
removeIssueAssigneeMap.put("issueIds", issueIds);
|
this.issueDepartmentMapper.deleteIssueDepartmentByDepartmentIdAndMultiIssueId(removeIssueAssigneeMap);
|
}
|
}
|
}
|
}
|
|
}
|