package kr.wisestone.owl.service.impl;
|
|
import com.google.common.collect.Lists;
|
import kr.wisestone.owl.domain.*;
|
import kr.wisestone.owl.mapper.IssueUserMapper;
|
import kr.wisestone.owl.repository.IssueUserRepository;
|
import kr.wisestone.owl.service.IssueUserService;
|
import kr.wisestone.owl.service.ProjectService;
|
import kr.wisestone.owl.util.CommonUtil;
|
import kr.wisestone.owl.util.MapUtil;
|
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.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
@Service
|
public class IssueUserServiceImpl extends AbstractServiceImpl<IssueUser, Long, JpaRepository<IssueUser, Long>> implements IssueUserService {
|
|
private static final Logger log = LoggerFactory.getLogger(IssueUserServiceImpl.class);
|
|
@Autowired
|
private IssueUserRepository issueUserRepository;
|
|
@Autowired
|
private IssueUserMapper issueUserMapper;
|
|
@Override
|
protected JpaRepository<IssueUser, Long> getRepository() {
|
return this.issueUserRepository;
|
}
|
|
// 이슈 담당자를 변경한다.
|
@Override
|
@Transactional
|
public void modifyIssueUser(Issue issue, Workspace workspace, List<Long> userIds) {
|
List<Long> oldUserIds = Lists.newArrayList();
|
|
// 이전 담당자
|
for (IssueUser issueUser : issue.getIssueUsers()) {
|
oldUserIds.add(issueUser.getUser().getId());
|
}
|
|
List<Long> newUserIds = CommonUtil.searchChangeList(oldUserIds, userIds); // 추가해야할 사용자를 찾는다.
|
List<Long> removeUserIds = CommonUtil.searchChangeList(userIds, oldUserIds); // 삭제해야할 사용자를 찾는다.
|
|
if (removeUserIds.size() > 0) {
|
Map<String, Object> removeIssueAssigneeMap = new HashMap<>();
|
removeIssueAssigneeMap.put("issueId", issue.getId());
|
removeIssueAssigneeMap.put("userIds", removeUserIds);
|
|
// 담당자 삭제
|
this.issueUserMapper.deleteIssueUserByIssueIdAndMultiUserId(removeIssueAssigneeMap);
|
}
|
|
if (newUserIds.size() > 0) {
|
List<Map<String, Long>> addIssueAssigneeMaps = Lists.newArrayList();
|
|
for (Long userId : newUserIds) {
|
Map<String, Long> issueAssigneeMap = new HashMap<>();
|
issueAssigneeMap.put("userId", userId);
|
issueAssigneeMap.put("issueId", issue.getId());
|
issueAssigneeMap.put("workspaceId", workspace.getId());
|
issueAssigneeMap.put("registerId", this.webAppUtil.getLoginId());
|
addIssueAssigneeMaps.add(issueAssigneeMap);
|
}
|
|
// 담당자 추가
|
this.issueUserMapper.insertIssueUser(addIssueAssigneeMaps);
|
}
|
}
|
|
// 이슈 담당부서를 변경한다.
|
@Override
|
@Transactional
|
public void modifyIssueDepartment(Issue issue, Workspace workspace, List<Long> departmentIds) {
|
List<Long> oldDepartmentIds = Lists.newArrayList();
|
|
// 이전 담당 부서
|
for (IssueUser issueUser : issue.getIssueUsers()) {
|
oldDepartmentIds.add(issueUser.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.issueUserMapper.deleteIssueUserByIssueIdAndMultiDepartmentId(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", this.webAppUtil.getLoginId());
|
addIssueAssigneeMaps.add(issueAssigneeMap);
|
}
|
|
// 담당부서 추가
|
this.issueUserMapper.insertIssueUser(addIssueAssigneeMaps);
|
}
|
}
|
|
@Override
|
@Transactional
|
public void insertIssueDepartment(List<Map<String, Long>> issueAssigneeMaps) {
|
// 이슈 담당부서 벌크 등록
|
this.issueUserMapper.insertIssueUser(issueAssigneeMaps);
|
}
|
|
// 이슈 담당부서에서 제외한다.
|
@Override
|
@Transactional
|
public void removeIssueDepartment(Long projectId, List<Long> excludeDepartmentIds) {
|
for (Long departmentId : excludeDepartmentIds) {
|
Map<String, Object> issueUserMap = new HashMap<>();
|
issueUserMap.put("departmentId", departmentId);
|
issueUserMap.put("projectId", projectId);
|
|
List<Map<String, Object>> results = this.issueUserMapper.findByDepartmentIdAndProjectId(issueUserMap);
|
|
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.issueUserMapper.deleteIssueUserByDepartmentIdAndMultiIssueId(removeIssueAssigneeMap);
|
}
|
}
|
}
|
}
|
|
// 이슈 담당자 찾기
|
@Override
|
@Transactional
|
public List<IssueUser> find(Issue issue) {
|
return this.issueUserRepository.findByIssueId(issue.getId());
|
}
|
|
// 이슈 담당자 벌크 등록
|
@Override
|
@Transactional
|
public void insertIssueUser(List<Map<String, Long>> issueAssigneeMaps) {
|
// 이슈 담당자 벌크 등록
|
this.issueUserMapper.insertIssueUser(issueAssigneeMaps);
|
}
|
|
// 이슈 담당자에서 제외한다.
|
@Override
|
@Transactional
|
public void removeIssueUser(Long projectId, List<Long> excludeUserIds) {
|
|
for (Long userId : excludeUserIds) {
|
Map<String, Object> issueUserMap = new HashMap<>();
|
issueUserMap.put("userId", userId);
|
issueUserMap.put("projectId", projectId);
|
|
List<Map<String, Object>> results = this.issueUserMapper.findByUserIdAndProjectId(issueUserMap);
|
|
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("userId", userId);
|
removeIssueAssigneeMap.put("issueIds", issueIds);
|
this.issueUserMapper.deleteIssueUserByUserIdAndMultiIssueId(removeIssueAssigneeMap);
|
}
|
}
|
}
|
|
}
|
}
|