From ee65aa4472baee240808689a866866abb2e44608 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 화, 16 11월 2021 10:09:17 +0900 Subject: [PATCH] 담당자 -> 담당부서 변경 및 추가 기능 완료 * db날리고 실행 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 100 +++++-- src/main/java/kr/wisestone/owl/domain/ProjectRoleUser.java | 18 - src/main/java/kr/wisestone/owl/domain/Department.java | 12 src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java | 21 + src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java | 2 src/main/resources/mybatis/query-template/issue-template.xml | 39 +++ src/main/java/kr/wisestone/owl/mapper/IssueUserMapper.java | 8 src/main/java/kr/wisestone/owl/mapper/IssueMapper.java | 2 src/main/java/kr/wisestone/owl/service/impl/IssueUserServiceImpl.java | 79 ------ src/main/java/kr/wisestone/owl/service/IssueUserService.java | 7 src/main/resources/migration/V1_1__Initial_Setup.sql | 43 ++ src/main/java/kr/wisestone/owl/domain/Issue.java | 12 src/main/java/kr/wisestone/owl/domain/ProjectRoleDepartment.java | 56 ++++ src/main/java/kr/wisestone/owl/repository/ProjectRoleUserRepository.java | 2 src/main/java/kr/wisestone/owl/mapper/IssueDepartmentMapper.java | 23 + src/main/java/kr/wisestone/owl/domain/User.java | 4 src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java | 11 src/main/resources/mybatis/query-template/issueDepartment-template.xml | 42 +++ src/main/java/kr/wisestone/owl/domain/IssueUser.java | 11 src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java | 4 src/main/java/kr/wisestone/owl/domain/IssueDepartment.java | 65 +++++ src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java | 128 +++++++++ src/main/resources/mybatis/query-template/issueUser-template.xml | 31 -- src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java | 2 24 files changed, 519 insertions(+), 203 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/domain/Department.java b/src/main/java/kr/wisestone/owl/domain/Department.java index 4a09dbf..aaf363e 100644 --- a/src/main/java/kr/wisestone/owl/domain/Department.java +++ b/src/main/java/kr/wisestone/owl/domain/Department.java @@ -17,7 +17,7 @@ private String departmentDescription; @OneToMany(mappedBy = "department", cascade = {CascadeType.ALL}, orphanRemoval = true) - private Set<ProjectRoleUser> projectRoleDepartments = new HashSet<>(); + private Set<ProjectRoleDepartment> projectRoleDepartments = new HashSet<ProjectRoleDepartment>(); public Department() { } @@ -46,12 +46,12 @@ this.departmentDescription = departmentDescription; } - /*public void addProjectRole(ProjectRole projectRole) { + public void addProjectRole(ProjectRole projectRole) { if (this.projectRoleDepartments == null) { - this.projectRoleDepartments = new HashSet<>(); + this.projectRoleDepartments = new HashSet<ProjectRoleDepartment>(); } - ProjectRoleUser projectRoleUser = new ProjectRoleUser(projectRole, this); + ProjectRoleDepartment projectRoleDepartment = new ProjectRoleDepartment(projectRole, this); - this.projectRoleDepartments.add(projectRoleUser); - }*/ + this.projectRoleDepartments.add(projectRoleDepartment); + } } diff --git a/src/main/java/kr/wisestone/owl/domain/Issue.java b/src/main/java/kr/wisestone/owl/domain/Issue.java index 6061a8a..38564bb 100644 --- a/src/main/java/kr/wisestone/owl/domain/Issue.java +++ b/src/main/java/kr/wisestone/owl/domain/Issue.java @@ -54,6 +54,10 @@ private Set<IssueUser> issueUsers = new HashSet<>(); @OrderBy(value="id DESC") + @OneToMany(mappedBy = "issue", cascade = { CascadeType.ALL }, orphanRemoval = true) + private Set<IssueDepartment> issueDepartments = new HashSet<>(); + + @OrderBy(value="id DESC") @OneToMany(mappedBy="issue", cascade={CascadeType.ALL}, orphanRemoval = true) private Set<AttachedFile> attachedFiles = new HashSet<>(); @@ -181,6 +185,14 @@ this.issueUsers = issueUsers; } + public Set<IssueDepartment> getIssueDepartments() { + return issueDepartments; + } + + public void setIssueDepartments(Set<IssueDepartment> issueDepartments) { + this.issueDepartments = issueDepartments; + } + public Set<AttachedFile> getAttachedFiles() { return attachedFiles; } diff --git a/src/main/java/kr/wisestone/owl/domain/IssueDepartment.java b/src/main/java/kr/wisestone/owl/domain/IssueDepartment.java new file mode 100644 index 0000000..0503ebd --- /dev/null +++ b/src/main/java/kr/wisestone/owl/domain/IssueDepartment.java @@ -0,0 +1,65 @@ +package kr.wisestone.owl.domain; + +import javax.persistence.*; +import java.io.Serializable; + +@Entity +public class IssueDepartment extends BaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "issue_id") + private Issue issue; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "workspace_id") + private Workspace workspace; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "department_id") + private Department department; + + public IssueDepartment() { + } + + public IssueDepartment(Issue issue, Department department) { + this.issue = issue; + this.department = department; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Issue getIssue() { + return issue; + } + + public void setIssue(Issue issue) { + this.issue = issue; + } + + public Workspace getWorkspace() { + return workspace; + } + + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; + } + + public Department getDepartment() { + return department; + } + + public void setDepartment(Department department) { + this.department = department; + } +} diff --git a/src/main/java/kr/wisestone/owl/domain/IssueUser.java b/src/main/java/kr/wisestone/owl/domain/IssueUser.java index 88ceb1d..3815310 100644 --- a/src/main/java/kr/wisestone/owl/domain/IssueUser.java +++ b/src/main/java/kr/wisestone/owl/domain/IssueUser.java @@ -23,10 +23,6 @@ @JoinColumn(name = "workspace_id") private Workspace workspace; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "department_id") - private Department department; - public IssueUser() { } @@ -67,11 +63,4 @@ this.workspace = workspace; } - public Department getDepartment() { - return department; - } - - public void setDepartment(Department department) { - this.department = department; - } } diff --git a/src/main/java/kr/wisestone/owl/domain/ProjectRoleDepartment.java b/src/main/java/kr/wisestone/owl/domain/ProjectRoleDepartment.java new file mode 100644 index 0000000..bdd8dcc --- /dev/null +++ b/src/main/java/kr/wisestone/owl/domain/ProjectRoleDepartment.java @@ -0,0 +1,56 @@ +package kr.wisestone.owl.domain; + +import javax.persistence.*; +import java.io.Serializable; + +/** + * Created by jeong on 2017-12-30. + */ +@Entity +public class ProjectRoleDepartment extends BaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name="project_role_id") + private ProjectRole projectRole; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name="department_id") + private Department department; + + public ProjectRoleDepartment() { + } + + public ProjectRoleDepartment(ProjectRole projectRole, Department department) { + this.projectRole = projectRole; + this.department = department; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public ProjectRole getProjectRole() { + return projectRole; + } + + public void setProjectRole(ProjectRole projectRole) { + this.projectRole = projectRole; + } + + public Department getDepartment() { + return department; + } + + public void setDepartment(Department department) { + this.department = department; + } +} diff --git a/src/main/java/kr/wisestone/owl/domain/ProjectRoleUser.java b/src/main/java/kr/wisestone/owl/domain/ProjectRoleUser.java index a6035d3..c7dab3f 100644 --- a/src/main/java/kr/wisestone/owl/domain/ProjectRoleUser.java +++ b/src/main/java/kr/wisestone/owl/domain/ProjectRoleUser.java @@ -22,10 +22,6 @@ @JoinColumn(name="user_id") private User user; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="department_id") - private Department department; - public ProjectRoleUser() { } @@ -34,12 +30,6 @@ this.user = user; } - //遺��꽌濡� 蹂�寃� - /*public ProjectRoleUser(ProjectRole projectRole, Department department) { - this.projectRole = projectRole; - this.department = department; - }*/ - public Long getId() { return id; } @@ -62,13 +52,5 @@ public void setUser(User user) { this.user = user; - } - - public Department getDepartment() { - return department; - } - - public void setDepartment(Department department) { - this.department = department; } } diff --git a/src/main/java/kr/wisestone/owl/domain/User.java b/src/main/java/kr/wisestone/owl/domain/User.java index f86c285..d3efd00 100644 --- a/src/main/java/kr/wisestone/owl/domain/User.java +++ b/src/main/java/kr/wisestone/owl/domain/User.java @@ -70,10 +70,6 @@ @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true) private Set<ApiToken> apiTokens = new HashSet<>(); -// @ManyToOne(targetEntity = Department.class, fetch = FetchType.LAZY) -// @JoinColumn(name="department_id") -// private Department department; - public User() { } diff --git a/src/main/java/kr/wisestone/owl/mapper/IssueDepartmentMapper.java b/src/main/java/kr/wisestone/owl/mapper/IssueDepartmentMapper.java new file mode 100644 index 0000000..07529d7 --- /dev/null +++ b/src/main/java/kr/wisestone/owl/mapper/IssueDepartmentMapper.java @@ -0,0 +1,23 @@ +package kr.wisestone.owl.mapper; + +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Map; + +/** + * Created by wisestone on 2018-11-27. + */ +@Repository +public interface IssueDepartmentMapper { + + void insertIssueDepartment(List<Map<String, Long>> issueRoleUserMaps); + + void deleteIssueDepartmentByIssueIdAndMultiDepartmentId(Map<String, Object> removeIssueAssigneeMap); + + void deleteIssueDepartmentByDepartmentIdAndMultiIssueId(Map<String, Object> removeIssueAssigneeMap); + + List<Map<String, Object>> findByDepartmentIdAndProjectId(Map<String, Object> issueUserMap); + + +} diff --git a/src/main/java/kr/wisestone/owl/mapper/IssueMapper.java b/src/main/java/kr/wisestone/owl/mapper/IssueMapper.java index 060e7dd..5f3fd0f 100644 --- a/src/main/java/kr/wisestone/owl/mapper/IssueMapper.java +++ b/src/main/java/kr/wisestone/owl/mapper/IssueMapper.java @@ -29,6 +29,8 @@ List<Map<String, Object>> findIssueUser(IssueCondition issueCondition); + List<Map<String, Object>> findIssueDepartment(IssueCondition issueCondition); + Long countByIssueTypeId(Long issueTypeId); Long countByIssueStatusId(Long issueStatusId); diff --git a/src/main/java/kr/wisestone/owl/mapper/IssueUserMapper.java b/src/main/java/kr/wisestone/owl/mapper/IssueUserMapper.java index 703c1dd..4b80d6f 100644 --- a/src/main/java/kr/wisestone/owl/mapper/IssueUserMapper.java +++ b/src/main/java/kr/wisestone/owl/mapper/IssueUserMapper.java @@ -20,12 +20,4 @@ List<Map<String, Object>> findByUserIdAndProjectId(Map<String, Object> issueUserMap); - //�떞�떦遺��꽌 - void deleteIssueUserByIssueIdAndMultiDepartmentId(Map<String, Object> removeIssueAssigneeMap); - - void deleteIssueUserByDepartmentIdAndMultiIssueId(Map<String, Object> removeIssueAssigneeMap); - - List<Map<String, Object>> findByDepartmentIdAndProjectId(Map<String, Object> issueUserMap); - - } diff --git a/src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java new file mode 100644 index 0000000..da29e2c --- /dev/null +++ b/src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java @@ -0,0 +1,11 @@ +package kr.wisestone.owl.repository; + +import kr.wisestone.owl.domain.IssueDepartment; +import kr.wisestone.owl.domain.IssueUser; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface IssueDepartmentRepository extends JpaRepository<IssueDepartment, Long> { + List<IssueDepartment> findByIssueId(Long issueId); +} diff --git a/src/main/java/kr/wisestone/owl/repository/ProjectRoleUserRepository.java b/src/main/java/kr/wisestone/owl/repository/ProjectRoleUserRepository.java index acec2ae..0835a56 100644 --- a/src/main/java/kr/wisestone/owl/repository/ProjectRoleUserRepository.java +++ b/src/main/java/kr/wisestone/owl/repository/ProjectRoleUserRepository.java @@ -11,6 +11,6 @@ ProjectRoleUser findByProjectRoleIdAndUserId(@Param("projectRoleId") Long projectRoleId, @Param("userId") Long userId); - ProjectRoleUser findByProjectRoleIdAndDepartmentId(@Param("projectRoleId") Long projectRoleId, @Param("departmentId") Long departmentId); + //ProjectRoleUser findByProjectRoleIdAndDepartmentId(@Param("projectRoleId") Long projectRoleId, @Param("departmentId") Long departmentId); } diff --git a/src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java b/src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java new file mode 100644 index 0000000..aaf4f7e --- /dev/null +++ b/src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java @@ -0,0 +1,21 @@ +package kr.wisestone.owl.service; + +import kr.wisestone.owl.domain.Issue; +import kr.wisestone.owl.domain.IssueDepartment; +import kr.wisestone.owl.domain.Workspace; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Map; + +public interface IssueDepartmentService extends AbstractService<IssueDepartment, Long, JpaRepository<IssueDepartment, Long>>{ + + //�떞�떦遺��꽌 + void modifyIssueDepartment(Issue issue, Workspace workspace, List<Long> departmentIds); + + void insertIssueDepartment(List<Map<String, Long>> issueAssigneeMaps); + + void removeIssueDepartment(Long projectId, List<Long> excludeUserIds); + + List<IssueDepartment> find(Issue issue); +} diff --git a/src/main/java/kr/wisestone/owl/service/IssueUserService.java b/src/main/java/kr/wisestone/owl/service/IssueUserService.java index 7e671e0..ae2c662 100644 --- a/src/main/java/kr/wisestone/owl/service/IssueUserService.java +++ b/src/main/java/kr/wisestone/owl/service/IssueUserService.java @@ -18,12 +18,5 @@ void removeIssueUser(Long projectId, List<Long> excludeUserIds); - //�떞�떦遺��꽌 - void modifyIssueDepartment(Issue issue, Workspace workspace, List<Long> departmentIds); - - void insertIssueDepartment(List<Map<String, Long>> issueAssigneeMaps); - - void removeIssueDepartment(Long projectId, List<Long> excludeUserIds); - List<IssueUser> find(Issue issue); } diff --git a/src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java b/src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java index 521b8e3..8cd03ea 100644 --- a/src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java +++ b/src/main/java/kr/wisestone/owl/service/ProjectRoleUserService.java @@ -14,7 +14,7 @@ ProjectRoleUser findByProjectRoleIdAndUserId(Long projectRoleId, Long userId); //�떞�떦�옄 - ProjectRoleUser findByProjectRoleIdAndDepartmentId(Long projectRoleId, Long departmentId); //�떞�떦遺��꽌 + //ProjectRoleUser findByProjectRoleIdAndDepartmentId(Long projectRoleId, Long departmentId); //�떞�떦遺��꽌 void withDrawWorkspaceManagerModifyProjectRole(Workspace workspace, User user); diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java new file mode 100644 index 0000000..5835a65 --- /dev/null +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java @@ -0,0 +1,128 @@ +package kr.wisestone.owl.service.impl; + +import com.google.common.collect.Lists; +import kr.wisestone.owl.domain.Issue; +import kr.wisestone.owl.domain.IssueDepartment; +import kr.wisestone.owl.domain.IssueUser; +import kr.wisestone.owl.domain.Workspace; +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<IssueDepartment, Long, JpaRepository<IssueDepartment, Long>> implements IssueDepartmentService { + + private static final Logger log = LoggerFactory.getLogger(IssueDepartmentServiceImpl.class); + + @Autowired + private IssueDepartmentRepository issueDepartmentRepository; + + @Autowired + private IssueDepartmentMapper issueDepartmentMapper; + + @Override + protected JpaRepository<IssueDepartment, Long> getRepository() { + return this.issueDepartmentRepository; + } + + // �씠�뒋 �떞�떦遺��꽌瑜� 蹂�寃쏀븳�떎. + @Override + @Transactional + public void modifyIssueDepartment(Issue issue, 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", this.webAppUtil.getLoginId()); + issueAssigneeMap.put("modifyId", this.webAppUtil.getLoginId()); + addIssueAssigneeMaps.add(issueAssigneeMap); + } + + // �떞�떦遺��꽌 異붽� + this.issueDepartmentMapper.insertIssueDepartment(addIssueAssigneeMaps); + } + } + + // �씠�뒋 �떞�떦遺��꽌 李얘린 + @Override + @Transactional + public List<IssueDepartment> find(Issue issue) { + return this.issueDepartmentRepository.findByIssueId(issue.getId()); + } + + @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); + } + } + } + } + +} diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java index ecd9ce8..c6dce73 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueHistoryServiceImpl.java @@ -292,7 +292,7 @@ // �씠�뒋 湲곌컙 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎. this.detectIssuePeriod(issue, issueForm, description); // �떞�떦�옄 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎. - this.detectIssueManager(issue, issueForm, description); + //this.detectIssueManager(issue, issueForm, description); // �궗�슜�옄 �젙�쓽 �븘�뱶 蹂�寃� �젙蹂대�� 湲곕줉�븳�떎. this.detectCustomField(issue, issueForm, description); diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java index 9b1895f..c692a5e 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -85,6 +85,9 @@ private IssueUserService issueUserService; @Autowired + private IssueDepartmentService issueDepartmentService; + + @Autowired private CustomFieldService customFieldService; @Autowired @@ -189,7 +192,7 @@ // �떞�떦�옄 吏��젙 //this.issueUserService.modifyIssueUser(issue, project.getWorkspace(), issueForm.getUserIds()); // �떞�떦遺��꽌 吏��젙 - this.issueUserService.modifyIssueDepartment(issue, project.getWorkspace(), issueForm.getDepartmentIds()); + this.issueDepartmentService.modifyIssueDepartment(issue, project.getWorkspace(), issueForm.getDepartmentIds()); // multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎. List<Map<String, Object>> convertFileMaps = this.convertMultipartFileToFile(multipartFiles); @@ -246,9 +249,9 @@ // �떞�떦遺��꽌 StringBuilder assigneeBuilder = new StringBuilder(); - for (IssueUser issueUser : issue.getIssueUsers()) { + for (IssueDepartment issueDepartment : issue.getIssueDepartments()) { //assigneeBuilder.append(issueUser.getUser().getName()); - assigneeBuilder.append(issueUser.getDepartment().getDepartmentName()); + assigneeBuilder.append(issueDepartment.getDepartment().getDepartmentName()); /*assigneeBuilder.append("("); assigneeBuilder.append(CommonUtil.decryptAES128(issueUser.getUser().getAccount())); assigneeBuilder.append(")");*/ @@ -386,6 +389,7 @@ issueCondition.setIssueIds(issueKeys); List<Map<String, Object>> results = this.issueMapper.find(issueCondition); + // �뒠�떇 �쟾 - 0.8, 0.9, 0.9, 0.9, 0.9 StopWatch serviceStart = new StopWatch(); serviceStart.start(); @@ -660,8 +664,8 @@ return true; } - // �씠�뒋 �떞�떦�옄 �젙蹂대�� �뀑�똿�븳�떎. => �떞�떦遺��꽌 - private void setIssueDepartmentList(List<IssueVo> issueVos, IssueCondition issueCondition) { + // �씠�뒋 �떞�떦�옄 �젙蹂대�� �뀑�똿�븳�떎. + private void setIssueUserList(List<IssueVo> issueVos, IssueCondition issueCondition) { if (issueVos.size() < 1) { return; } @@ -669,28 +673,61 @@ List<Map<String, Object>> issueUsers = this.issueMapper.findIssueUser(issueCondition); Map<String, Object> issueConverterUsers = new HashMap<>(); - // �씠�뒋�뿉 �빐�떦�븯�뒗 �씠�뒋 �떞�떦遺��꽌 �젙蹂� �뀑�똿 + // �씠�뒋�뿉 �빐�떦�븯�뒗 �씠�뒋 �떞�떦�옄 �젙蹂� �뀑�똿 for (Map<String, Object> issueUser : issueUsers) { String issueId = MapUtil.getString(issueUser, "issueId"); if (MapUtil.getObject(issueConverterUsers, issueId) != null) { - List<DepartmentVo> departments = (List) MapUtil.getObject(issueConverterUsers, issueId); - departments.add(new DepartmentVo(MapUtil.getLong(issueUser, "id"), MapUtil.getString(issueUser, "departmentName"), MapUtil.getString(issueUser, "departmentDescription"))); - //List<UserVo> users = (List) MapUtil.getObject(issueConverterUsers, issueId); - //users.add(new UserVo(MapUtil.getLong(issueUser, "id"), MapUtil.getString(issueUser, "name"), CommonUtil.decryptAES128(MapUtil.getString(issueUser, "account")), MapUtil.getString(issueUser, "profile"))); + List<UserVo> users = (List) MapUtil.getObject(issueConverterUsers, issueId); + users.add(new UserVo(MapUtil.getLong(issueUser, "id"), MapUtil.getString(issueUser, "name"), CommonUtil.decryptAES128(MapUtil.getString(issueUser, "account")), MapUtil.getString(issueUser, "profile"))); } else { - List<DepartmentVo> departments = Lists.newArrayList(new DepartmentVo(MapUtil.getLong(issueUser, "id"), MapUtil.getString(issueUser, "departmentName"), MapUtil.getString(issueUser, "departmentDescription"))); - issueConverterUsers.put(issueId, departments); - /*List<UserVo> users = Lists.newArrayList(new UserVo(MapUtil.getLong(issueUser, "id"), MapUtil.getString(issueUser, "name"), CommonUtil.decryptAES128(MapUtil.getString(issueUser, "account")), + List<UserVo> users = Lists.newArrayList(new UserVo(MapUtil.getLong(issueUser, "id"), MapUtil.getString(issueUser, "name"), CommonUtil.decryptAES128(MapUtil.getString(issueUser, "account")), MapUtil.getString(issueUser, "profile"))); - issueConverterUsers.put(issueId, users);*/ + issueConverterUsers.put(issueId, users); + } + } + + // �씠�뒋Vo�뿉 �떞�떦�옄 �젙蹂대�� �뀑�똿 + for (IssueVo issueVo : issueVos) { + if (MapUtil.getObject(issueConverterUsers, String.valueOf(issueVo.getId())) != null) { + List<UserVo> userVos = (List) MapUtil.getObject(issueConverterUsers, String.valueOf(issueVo.getId())); + + issueVo.setUserVos(userVos); + } + + // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 + if (this.checkHasPermission(issueVo, issueVo.getUserVos())) { + issueVo.setModifyPermissionCheck(Boolean.TRUE); + } + } + } + + // �씠�뒋 �떞�떦遺��꽌 �젙蹂대�� �뀑�똿�븳�떎. + private void setIssueDepartmentList(List<IssueVo> issueVos, IssueCondition issueCondition) { + if (issueVos.size() < 1) { + return; + } + + List<Map<String, Object>> issueDepartments = this.issueMapper.findIssueDepartment(issueCondition); + Map<String, Object> issueConverterDepartments = new HashMap<>(); + + // �씠�뒋�뿉 �빐�떦�븯�뒗 �씠�뒋 �떞�떦遺��꽌 �젙蹂� �뀑�똿 + for (Map<String, Object> issueDepartment : issueDepartments) { + String issueId = MapUtil.getString(issueDepartment, "issueId"); + + if (MapUtil.getObject(issueConverterDepartments, issueId) != null) { + List<DepartmentVo> departments = (List) MapUtil.getObject(issueConverterDepartments, issueId); + departments.add(new DepartmentVo(MapUtil.getLong(issueDepartment, "id"), MapUtil.getString(issueDepartment, "departmentName"), MapUtil.getString(issueDepartment, "departmentDescription"))); + } else { + List<DepartmentVo> departments = Lists.newArrayList(new DepartmentVo(MapUtil.getLong(issueDepartment, "id"), MapUtil.getString(issueDepartment, "departmentName"), MapUtil.getString(issueDepartment, "departmentDescription"))); + issueConverterDepartments.put(issueId, departments); } } // �씠�뒋Vo�뿉 �떞�떦遺��꽌 �젙蹂대�� �뀑�똿 for (IssueVo issueVo : issueVos) { - if (MapUtil.getObject(issueConverterUsers, String.valueOf(issueVo.getId())) != null) { - List<DepartmentVo> departmentVos = (List) MapUtil.getObject(issueConverterUsers, String.valueOf(issueVo.getId())); + if (MapUtil.getObject(issueConverterDepartments, String.valueOf(issueVo.getId())) != null) { + List<DepartmentVo> departmentVos = (List) MapUtil.getObject(issueConverterDepartments, String.valueOf(issueVo.getId())); issueVo.setDepartmentVos(departmentVos); } @@ -844,8 +881,8 @@ private void setIssueDepartment(Issue issue, IssueVo issueVo) { List<DepartmentVo> departmentVos = Lists.newArrayList(); - for (IssueUser issueUser : issue.getIssueUsers()) { - DepartmentVo departmentVo = ConvertUtil.copyProperties(issueUser.getDepartment(), DepartmentVo.class); + for (IssueDepartment issueDepartment : issue.getIssueDepartments()) { + DepartmentVo departmentVo = ConvertUtil.copyProperties(issueDepartment.getDepartment(), DepartmentVo.class); departmentVo.setByName(departmentVo.getByName()); departmentVos.add(departmentVo); } @@ -914,7 +951,7 @@ this.checkStartCompleteDate(issueForm.getStartDate(), issueForm.getCompleteDate()); // �떞�떦�옄 �쑀�슚�꽦 泥댄겕 => �떞�떦遺��꽌濡� 蹂�寃� - this.verifyIssueAssignee(project, issueForm); + //this.verifyIssueAssignee(project, issueForm); Issue issue = this.getIssue(issueForm.getId()); @@ -942,9 +979,11 @@ issue.setCompleteDate(issueForm.getCompleteDate()); this.issueRepository.saveAndFlush(issue); - // �떞�떦遺��꽌 吏��젙 //this.issueUserService.modifyIssueUser(issue, project.getWorkspace(), issueForm.getUserIds()); - this.issueUserService.modifyIssueDepartment(issue, project.getWorkspace(), issueForm.getDepartmentIds()); + // �떞�떦遺��꽌 吏��젙 + if(issueForm.getDepartmentIds().size()>0){ + this.issueDepartmentService.modifyIssueDepartment(issue, project.getWorkspace(), issueForm.getDepartmentIds()); + } // multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎. List<Map<String, Object>> convertFileMaps = this.convertMultipartFileToFile(multipartFiles); @@ -1025,7 +1064,7 @@ for (Long departmentId : issueForm.getDepartmentIds()) { boolean includeProject = false; - for (ProjectRole projectRole : project.getProjectRoles()) { + /*for (ProjectRole projectRole : project.getProjectRoles()) { ProjectRoleUser projectRoleUser = this.projectRoleUserService.findByProjectRoleIdAndDepartmentId(projectRole.getId(), departmentId); if (projectRoleUser != null) { @@ -1033,7 +1072,7 @@ trustDepartmentIds.add(departmentId); break; } - } + }*/ // �뜲�씠�꽣 蹂댁젙 �옉�뾽 - �봽濡쒖젥�듃�뿉�꽌 �젣�쇅�맂 �궗�슜�옄�뒗 �떞�떦�옄�뿉�꽌 �젣�쇅 �맆 �닔 �엳�룄濡� 泥섎━ /*if (!includeProject) { @@ -1075,7 +1114,7 @@ } }*/ - /*// �씠�뒋 �닔�젙 沅뚰븳 泥댄겕 + // �씠�뒋 �닔�젙 沅뚰븳 泥댄겕 private void verifyIssueModifyPermission(Long issueId) { Issue issue = this.getIssue(issueId); @@ -1096,7 +1135,7 @@ } return userVos; - }*/ + } // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 private boolean checkHasPermission(IssueVo issueVo, List<UserVo> issueUserVos) { @@ -1165,7 +1204,7 @@ // 蹂�寃� �씠�젰 �젙蹂� 異붿텧 StringBuilder detectIssueChange = new StringBuilder(); // �씠�뒋 �닔�젙 沅뚰븳 泥댄겕 - //this.verifyIssueModifyPermission(issueForm.getId()); + this.verifyIssueModifyPermission(issueForm.getId()); Issue issue = this.getIssue(issueForm.getId()); IssueStatus issueStatus = this.issueStatusService.getIssueStatus(issueForm.getIssueStatusId()); @@ -1246,7 +1285,7 @@ // 蹂�寃� �씠�젰 �젙蹂� 異붿텧 StringBuilder detectIssueChange = new StringBuilder(); // �씠�뒋 �닔�젙 沅뚰븳 泥댄겕 - //this.verifyIssueModifyPermission(issueForm.getId()); + this.verifyIssueModifyPermission(issueForm.getId()); Issue issue = this.getIssue(issueForm.getId()); issue.setProject(this.projectService.getProject(issueForm.getProjectId())); @@ -1254,7 +1293,7 @@ this.issueHistoryService.detectIssueManager(issue, issueForm, detectIssueChange); //this.issueUserService.modifyIssueUser(issue, issue.getProject().getWorkspace(), issueForm.getUserIds()); - this.issueUserService.modifyIssueDepartment(issue, issue.getProject().getWorkspace(), issueForm.getDepartmentIds()); + this.issueDepartmentService.modifyIssueDepartment(issue, issue.getProject().getWorkspace(), issueForm.getDepartmentIds()); this.issueRepository.saveAndFlush(issue); // �씠�뒋 �씠�젰 �벑濡� @@ -1304,7 +1343,7 @@ private Issue issueRemoves(Long issueId) { Issue issue = this.getIssue(issueId); // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 - //this.verifyIssueModifyPermission(issueId); + this.verifyIssueModifyPermission(issueId); // �씠�뒋 泥⑤� �뙆�씪�쓣 �궘�젣�븳�떎. if (issue.getAttachedFiles().size() > 0) { @@ -1802,7 +1841,8 @@ if (issueAssigneeMaps.size() > 0) { // �씠�뒋 �떞�떦�옄 踰뚰겕 �벑濡� - this.issueUserService.insertIssueUser(issueAssigneeMaps); + //this.issueUserService.insertIssueUser(issueAssigneeMaps); + this.issueDepartmentService.insertIssueDepartment(issueAssigneeMaps); } } diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueUserServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueUserServiceImpl.java index f202174..5b8771c 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueUserServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueUserServiceImpl.java @@ -75,85 +75,6 @@ } } - // �씠�뒋 �떞�떦遺��꽌瑜� 蹂�寃쏀븳�떎. - @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 diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java index 18f226c..2b581ca 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectRoleUserServiceImpl.java @@ -55,11 +55,11 @@ } // �빐�떦 遺��꽌媛� �듅�젙 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎. - @Override + /*@Override @Transactional(readOnly = true) public ProjectRoleUser findByProjectRoleIdAndDepartmentId(Long projectRoleId, Long departmentId) { return this.projectRoleUserRepository.findByProjectRoleIdAndDepartmentId(projectRoleId, departmentId); - } + }*/ // �뾽臾� 怨듦컙�쓣 �깉�눜�븳 �궗�슜�옄媛� �떎瑜� �뾽臾� 怨듦컙�쓽 �봽濡쒖젥�듃 愿�由ъ옄, �씪諛� �궗�슜�옄濡� �엳�쓣 寃쎌슦 �젣嫄고븳�떎. @Override diff --git a/src/main/resources/migration/V1_1__Initial_Setup.sql b/src/main/resources/migration/V1_1__Initial_Setup.sql index b9d36b4..0ea3a43 100644 --- a/src/main/resources/migration/V1_1__Initial_Setup.sql +++ b/src/main/resources/migration/V1_1__Initial_Setup.sql @@ -80,6 +80,9 @@ `project_id` bigint(20) DEFAULT NULL, `priority_id` bigint(20) DEFAULT NULL, `severity_id` bigint(20) DEFAULT NULL, + `company_id` bigint(20) DEFAULT NULL, + `hosting_id` bigint(20) DEFAULT NULL, + `isp_id` bigint(20) DEFAULT NULL, `title` varchar(300) DEFAULT NULL, `description` mediumtext COMMENT 'description', `reverse_index` bigint(20) DEFAULT NULL, @@ -304,7 +307,6 @@ CREATE TABLE IF NOT EXISTS `issue_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `user_id` bigint(20) NULL, - `department_id` bigint(20) NOT NULL, `issue_id` bigint(20) NOT NULL, `workspace_id` bigint(20) NOT NULL, `register_id` bigint(20) NOT NULL, @@ -315,7 +317,23 @@ KEY `userIdAndIssueIdIndex` (`user_id`,`issue_id`), KEY `issueIdIndex` (`issue_id`), KEY `workspaceIdIndex` (`workspace_id`), - KEY `userIdIndex` (`user_id`), + KEY `userIdIndex` (`user_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- �뀒�씠釉� owl_en_1.5.issue_department 援ъ“ �궡蹂대궡湲� +CREATE TABLE IF NOT EXISTS `issue_department` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `department_id` bigint(20) NOT NULL, + `issue_id` bigint(20) NOT NULL, + `workspace_id` bigint(20) NOT NULL, + `register_id` bigint(20) NOT NULL, + `modify_id` bigint(20) NOT NULL, + `register_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modify_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `departmentIdAndIssueIdIndex` (`department_id`,`issue_id`), + KEY `issueIdIndex` (`issue_id`), + KEY `workspaceIdIndex` (`workspace_id`), KEY `departmentIdIndex` (`department_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; @@ -512,8 +530,7 @@ CREATE TABLE IF NOT EXISTS `project_role_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `project_role_id` bigint(20) NOT NULL, - `user_id` bigint(20) NULL, - `department_id` bigint(20) NULL, + `user_id` bigint(20) NOT NULL, `register_id` bigint(20) NOT NULL, `register_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `modify_id` bigint(20) NOT NULL, @@ -521,8 +538,22 @@ PRIMARY KEY (`id`), KEY `projectRoleIdAndUserIdIndex` (`project_role_id`,`user_id`), KEY `userIdIndex` (`user_id`), - KEY `projectRoleIdIndex` (`project_role_id`), - KEY `departmentIdIndex` (`department_id`) + KEY `projectRoleIdIndex` (`project_role_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- �뀒�씠釉� owl_en_1.5.project_role_department 援ъ“ �궡蹂대궡湲� +CREATE TABLE IF NOT EXISTS `project_role_department` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `project_role_id` bigint(20) NOT NULL, + `department_id` bigint(20) NULL, + `register_id` bigint(20) NOT NULL, + `register_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `modify_id` bigint(20) NOT NULL, + `modify_date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`id`), + KEY `projectRoleIdAndDepartmentIdIndex` (`project_role_id`,`department_id`), + KEY `departmentIdIndex` (`department_id`), + KEY `projectRoleIdIndex` (`project_role_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- �뀒�씠釉� �뜲�씠�꽣 owl_en_1.5.project_role_user:~0 rows (���왂�쟻) �궡蹂대궡湲� diff --git a/src/main/resources/mybatis/query-template/issue-template.xml b/src/main/resources/mybatis/query-template/issue-template.xml index 9e7f592..969ffa6 100644 --- a/src/main/resources/mybatis/query-template/issue-template.xml +++ b/src/main/resources/mybatis/query-template/issue-template.xml @@ -39,6 +39,7 @@ INNER JOIN issue_type issue_type FORCE INDEX(PRIMARY) ON issue.issue_type_id = issue_type.id INNER JOIN priority priority FORCE INDEX(PRIMARY) ON issue.priority_id = priority.id INNER JOIN severity severity FORCE INDEX(PRIMARY) ON issue.severity_id = severity.id + LEFT OUTER JOIN issue_department issued FORCE INDEX(issueIdIndex) ON issue.id = issued.issue_id LEFT OUTER JOIN issue_user issue_user FORCE INDEX(issueIdIndex) ON issue.id = issue_user.issue_id LEFT OUTER JOIN (SELECT issue_id, COUNT(id) as attachedFileCount FROM attached_file GROUP BY issue_id) temp_attached_file on (temp_attached_file.issue_id = issue.id) @@ -131,6 +132,15 @@ <when test="userIds.size != 0"> AND issue_user.user_id IN <foreach collection="userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </when> + </choose> + + <choose> + <when test="departmentIds.size != 0"> + AND issue_department.department_id IN + <foreach collection="departmentIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </when> @@ -260,6 +270,15 @@ <when test="userIds.size != 0"> AND issue_user.user_id IN <foreach collection="userIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </when> + </choose> + + <choose> + <when test="departmentIds.size != 0"> + AND issue_department.department_id IN + <foreach collection="departmentIds" item="item" index="index" separator="," open="(" close=")"> #{item} </foreach> </when> @@ -409,6 +428,26 @@ </choose> </select> + <select id="findIssueDepartment" resultType="java.util.HashMap" + parameterType="kr.wisestone.owl.web.condition.IssueCondition"> + SELECT + i.id AS issueId, + d.id AS id, + d.department_name AS name + FROM issue i + INNER JOIN issue_department issued ON issued.issue_id = i.id + INNER JOIN department d ON d.id = issued.department_id + WHERE 1=1 + <choose> + <when test="issueIds.size != 0"> + AND i.id IN + <foreach collection="issueIds" item="item" index="index" separator="," open="(" close=")"> + #{item} + </foreach> + </when> + </choose> + </select> + <!-- �씠�뒋 �쑀�삎�쓣 �궗�슜�븯�뒗 �씠�뒋 媛��닔瑜� 議고쉶�븳�떎 --> <select id="countByIssueTypeId" resultType="java.lang.Long" parameterType="java.lang.Long"> SELECT COUNT(DISTINCT id) FROM diff --git a/src/main/resources/mybatis/query-template/issueDepartment-template.xml b/src/main/resources/mybatis/query-template/issueDepartment-template.xml new file mode 100644 index 0000000..2aa9432 --- /dev/null +++ b/src/main/resources/mybatis/query-template/issueDepartment-template.xml @@ -0,0 +1,42 @@ +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="kr.wisestone.owl.mapper.IssueDepartmentMapper"> + + <!-- �씠�뒋 �떞�떦遺��꽌 bulk insert, import, modify, add �뿉�꽌 �궗�슜 --> + <insert id="insertIssueDepartment" keyColumn="id" keyProperty="id" useGeneratedKeys="true" + parameterType="java.util.HashMap"> + INSERT INTO issue_department(department_id, issue_id, workspace_id, register_id, modify_id, register_date, modify_date) + VALUES + <foreach collection="list" item="map" index="index" separator="," open="" close=""> + (#{map.departmentId}, #{map.issueId}, #{map.workspaceId}, #{map.registerId}, #{map.registerId}, NOW(), NOW()) + </foreach> + </insert> + + <!--�떞�떦遺��꽌--> + <!-- �씠�뒋 �떞�떦遺��꽌 bulk �궘�젣 - modify, add �뿉�꽌 �궗�슜 --> + <delete id="deleteIssueDepartmentByIssueIdAndMultiDepartmentId" parameterType="java.util.HashMap"> + DELETE FROM issue_department WHERE issue_id = #{issueId} AND department_id IN ( + <foreach collection="map.departmentIds" item="item" index="index" separator="," open="" close=""> + #{item} + </foreach> + ) + </delete> + + <delete id="deleteIssueDepartmentByDepartmentIdAndMultiIssueId" parameterType="java.util.HashMap"> + DELETE FROM issue_department WHERE department_id = #{departmentId} AND issue_id IN ( + <foreach collection="issueIds" item="item" index="index" separator="," open="" close=""> + #{item} + </foreach> + ) + </delete> + + <!-- �씠�뒋 �떞�떦遺��꽌瑜� 議고쉶�븳�떎 --> + <select id="findByDepartmentIdAndProjectId" resultType="java.util.HashMap" parameterType="java.util.HashMap"> + SELECT DISTINCT(i.id) FROM issue i + INNER JOIN issue_department iu ON iu.issue_id = i.id + INNER JOIN department d ON d.id = iu.department_id + WHERE i.project_id = #{projectId} AND d.id = #{departmentId} + </select> + +</mapper> diff --git a/src/main/resources/mybatis/query-template/issueUser-template.xml b/src/main/resources/mybatis/query-template/issueUser-template.xml index 92796b4..6c28297 100644 --- a/src/main/resources/mybatis/query-template/issueUser-template.xml +++ b/src/main/resources/mybatis/query-template/issueUser-template.xml @@ -6,39 +6,12 @@ <!-- �씠�뒋 �떞�떦�옄 bulk insert, import, modify, add �뿉�꽌 �궗�슜 --> <insert id="insertIssueUser" keyColumn="id" keyProperty="id" useGeneratedKeys="true" parameterType="java.util.HashMap"> - INSERT INTO issue_user(department_id, user_id, issue_id, workspace_id, register_id, modify_id, register_date, modify_date) + INSERT INTO issue_user(user_id, issue_id, workspace_id, register_id, modify_id, register_date, modify_date) VALUES <foreach collection="list" item="map" index="index" separator="," open="" close=""> - (#{map.departmentId},#{map.userId}, #{map.issueId}, #{map.workspaceId}, #{map.registerId}, #{map.registerId}, NOW(), NOW()) + (#{map.userId}, #{map.issueId}, #{map.workspaceId}, #{map.registerId}, #{map.registerId}, NOW(), NOW()) </foreach> </insert> - - <!--�떞�떦遺��꽌--> - <!-- �씠�뒋 �떞�떦遺��꽌 bulk �궘�젣 - modify, add �뿉�꽌 �궗�슜 --> - <delete id="deleteIssueUserByIssueIdAndMultiDepartmentId" parameterType="java.util.HashMap"> - DELETE FROM issue_user WHERE issue_id = #{issueId} AND department_id IN ( - <foreach collection="map.departmentIds" item="item" index="index" separator="," open="" close=""> - #{item} - </foreach> - ) - </delete> - - <delete id="deleteIssueUserByDepartmentIdAndMultiIssueId" parameterType="java.util.HashMap"> - DELETE FROM issue_user WHERE department_id = #{departmentId} AND issue_id IN ( - <foreach collection="issueIds" item="item" index="index" separator="," open="" close=""> - #{item} - </foreach> - ) - </delete> - - <!-- �씠�뒋 �떞�떦遺��꽌瑜� 議고쉶�븳�떎 --> - <select id="findByDepartmentIdAndProjectId" resultType="java.util.HashMap" parameterType="java.util.HashMap"> - SELECT DISTINCT(i.id) FROM issue i - INNER JOIN issue_user iu ON iu.issue_id = i.id - INNER JOIN department d ON d.id = iu.department_id - WHERE i.project_id = #{projectId} AND d.id = #{departmentId} - </select> - <!--�떞�떦�옄--> <!-- �씠�뒋 �떞�떦�옄 bulk �궘�젣 - modify, add �뿉�꽌 �궗�슜 --> -- Gitblit v1.8.0