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.IssueDepartmentService; import kr.wisestone.owl.util.CommonUtil; import kr.wisestone.owl.util.MapUtil; 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> implements IssueDepartmentService { private static final Logger log = LoggerFactory.getLogger(IssueDepartmentServiceImpl.class); @Autowired private IssueDepartmentRepository issueDepartmentRepository; @Autowired private IssueDepartmentMapper issueDepartmentMapper; @Override protected JpaRepository getRepository() { return this.issueDepartmentRepository; } // 이슈 담당부서를 변경한다. @Override @Transactional public void modifyIssueDepartment(Issue issue, Workspace workspace, List departmentIds) { User user = this.webAppUtil.getLoginUserObject(); modifyIssueDepartment(issue, user, workspace, departmentIds); } // 이슈 담당부서를 변경한다. @Override @Transactional public void modifyIssueDepartment(Issue issue, User user, Workspace workspace, List departmentIds) { List oldDepartmentIds = Lists.newArrayList(); // 이전 담당 부서 for (IssueDepartment issueDepartment : issue.getIssueDepartments()) { oldDepartmentIds.add(issueDepartment.getDepartment().getId()); } List newDepartmentIds = CommonUtil.searchChangeList(oldDepartmentIds, departmentIds); // 추가해야할 부서를 찾는다. List removeDepartmentIds = CommonUtil.searchChangeList(departmentIds, oldDepartmentIds); // 삭제해야할 부서를 찾는다. if (removeDepartmentIds.size() > 0) { Map removeIssueAssigneeMap = new HashMap<>(); removeIssueAssigneeMap.put("issueId", issue.getId()); removeIssueAssigneeMap.put("departmentIds", removeDepartmentIds); // 담당부서 삭제 this.issueDepartmentMapper.deleteIssueDepartmentByIssueIdAndMultiDepartmentId(removeIssueAssigneeMap); } if (newDepartmentIds.size() > 0) { List> addIssueAssigneeMaps = Lists.newArrayList(); for (Long departmentId : newDepartmentIds) { Map 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 find(Issue issue) { return this.issueDepartmentRepository.findByIssueId(issue.getId()); } @Override @Transactional public void insertIssueDepartment(List> issueAssigneeMaps) { // 이슈 담당부서 벌크 등록 this.issueDepartmentMapper.insertIssueDepartment(issueAssigneeMaps); } // 이슈 담당부서에서 제외한다. @Override @Transactional public void removeIssueDepartment(Long projectId, List excludeDepartmentIds) { for (Long departmentId : excludeDepartmentIds) { Map issueDepartmentMap = new HashMap<>(); issueDepartmentMap.put("departmentId", departmentId); issueDepartmentMap.put("projectId", projectId); List> results = this.issueDepartmentMapper.findByDepartmentIdAndProjectId(issueDepartmentMap); if (results.size() > 0) { List issueIds = Lists.newArrayList(); for (Map result : results) { Long id = MapUtil.getLong(result, "id"); if (id != null) { issueIds.add(id); } } if (issueIds.size() > 0) { Map removeIssueAssigneeMap = new HashMap<>(); removeIssueAssigneeMap.put("departmentId", departmentId); removeIssueAssigneeMap.put("issueIds", issueIds); this.issueDepartmentMapper.deleteIssueDepartmentByDepartmentIdAndMultiIssueId(removeIssueAssigneeMap); } } } } }