From b1d7844cb525a36b1e0e193e9e96a2531d4badeb Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 화, 22 2월 2022 14:23:26 +0900 Subject: [PATCH] - 이슈유형 설정에 상위 이슈 업체/ISP/호스팅 상속 기능 - 워크플로우에 속해있는 부서 삭제 시 팝업 메시지 수정 --- src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java | 240 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 235 insertions(+), 5 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java index c32c1ee..e3adfbe 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java @@ -4,13 +4,17 @@ import kr.wisestone.owl.common.ExcelConditionCheck; import kr.wisestone.owl.constant.Constants; import kr.wisestone.owl.constant.MsgConstants; +import kr.wisestone.owl.constant.UsePartner; import kr.wisestone.owl.domain.*; import kr.wisestone.owl.domain.enumType.ProjectType; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.IssueTypeMapper; import kr.wisestone.owl.repository.IssueTypeRepository; +import kr.wisestone.owl.repository.ProjectClosureRepository; +import kr.wisestone.owl.repository.ProjectRepository; import kr.wisestone.owl.service.*; import kr.wisestone.owl.util.ConvertUtil; +import kr.wisestone.owl.util.MapUtil; import kr.wisestone.owl.vo.*; import kr.wisestone.owl.web.condition.IssueTypeCondition; import kr.wisestone.owl.web.form.IssueTypeForm; @@ -30,6 +34,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; @Service public class IssueTypeServiceImpl extends AbstractServiceImpl<IssueType, Long, JpaRepository<IssueType, Long>> implements IssueTypeService { @@ -40,10 +45,25 @@ private IssueTypeRepository issueTypeRepository; @Autowired + private ProjectRepository projectRepository; + + @Autowired private WorkflowService workflowService; @Autowired + private WorkflowDepartmentService workflowDepartmentService; + + @Autowired + private ProjectService projectService; + + @Autowired + private ProjectRoleService projectRoleService; + + @Autowired private WorkspaceService workspaceService; + + @Autowired + private IssueStatusService issueStatusService; @Autowired private IssueTypeMapper issueTypeMapper; @@ -53,6 +73,9 @@ @Autowired private UserService userService; + + @Autowired + private ProjectClosureRepository projectClosureRepository; @Autowired private ExcelView excelView; @@ -75,21 +98,37 @@ switch (projectType) { case BTS_PROJECT: - issueTypes.add(new IssueType(workspace, workflow, "�븙�꽦 �룄硫붿씤", "", "#ff5f99")); // 踰꾧렇 - issueTypes.add(new IssueType(workspace, workflow, "寃쎌쑀吏� ���쓳", "", "#3598fe")); // 媛쒖꽑 + issueTypes.add(new IssueType(workspace, workflow, "�븙�꽦 �룄硫붿씤", "", "#ff5f99", 0L, true)); // 踰꾧렇 + issueTypes.add(new IssueType(workspace, workflow, "寃쎌쑀吏� ���쓳", "", "#3598fe", 0L, true)); // 媛쒖꽑 break; case RMS_PROJECT: - issueTypes.add(new IssueType(workspace, workflow, "�쑀�룷吏� ���쓳", "", "#3bcde2")); // �슂援� �궗�빆 + issueTypes.add(new IssueType(workspace, workflow, "�쑀�룷吏� ���쓳", "", "#3bcde2", 0L, true)); // �슂援� �궗�빆 break; case TCM_PROJECT: - issueTypes.add(new IssueType(workspace, workflow, "遺꾩꽍寃곌낵 ���쓳", "", "#008ca7")); // �뀒�뒪�듃 耳��씠�뒪, �떎�뻾 �닚�꽌, �쟾�젣 議곌굔, 湲곕� 寃곌낵 + issueTypes.add(new IssueType(workspace, workflow, "遺꾩꽍寃곌낵 ���쓳", "", "#008ca7", 0L, true)); // �뀒�뒪�듃 耳��씠�뒪, �떎�뻾 �닚�꽌, �쟾�젣 議곌굔, 湲곕� 寃곌낵 break; } - this.issueTypeRepository.saveAll(issueTypes); } + } + + @Override + @Transactional + public void addDefaultUsedProject(Workspace workspace) { + List<IssueType> issueTypes = this.issueTypeRepository.findByWorkspaceId(workspace.getId()); + List<Project> projects = this.projectRepository.findByWorkspaceId(workspace.getId()); + if(issueTypes != null && issueTypes.size() > 0){ + for(IssueType issueType : issueTypes){ + if(projects != null && projects.size()>0){ + for(Project project : projects){ + issueType.setProject(project); + } + } + } + } + } // �씠�뒋 �쑀�삎�쓣 �깮�꽦�븳�떎. @@ -108,8 +147,36 @@ issueType.setWorkspace(workspace); Workflow workflow = this.workflowService.getWorkflow(issueTypeForm.getWorkflowId()); issueType.setWorkflow(workflow); + Project project = this.projectService.getProject(issueTypeForm.getProjectId()); + issueType.setProject(project); + + // �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿 + this.setDepartmentOfProject(project, workflow); + + issueType.setUsePartner(issueTypeForm.getUsePartner()); + + issueType.setInheritPartners(issueTypeForm.getInheritPartners()); return this.issueTypeRepository.saveAndFlush(issueType); + } + + /** + * �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿 + * @param project Project + * @param workflow Workflow + */ + private void setDepartmentOfProject(Project project, Workflow workflow) { + List<WorkflowDepartment> workflowDepartments = this.workflowDepartmentService.find(workflow.getId()); + + // �빐�떦 �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌媛� 議댁옱 �븷 寃쎌슦 �빐�떦 �봽濡쒖젥�듃�쓽 �떞�떦遺��꽌�뿉�룄 異붽� + if (workflowDepartments != null && workflowDepartments.size() > 0) { + ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT); + + for (WorkflowDepartment workflowDepartment : workflowDepartments) { + // �봽濡쒖젥�듃 �떞�떦遺��꽌濡� 異붽� + projectRole.addDepartment(workflowDepartment.getDepartment()); + } + } } // �씠由� �쑀�슚�꽦 泥댄겕 @@ -153,10 +220,60 @@ public List<IssueTypeVo> findIssueType(Map<String, Object> resJsonData, IssueTypeCondition condition, Pageable pageable) { + List<Long> downProjectIds = Lists.newArrayList(); + List<Long> allProjectIds = Lists.newArrayList(); + List<ProjectClosure> projectClosures = Lists.newArrayList(); + condition.setPage(pageable.getPageNumber() * pageable.getPageSize()); condition.setPageSize(pageable.getPageSize()); condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); + + + if (condition.getProjectId() == null) { + List<ProjectVo> projectVos = this.projectService.findByIncludeProject(Lists.newArrayList("01", "02", "03"), ProjectType.BTS_PROJECT.toString()); + if (projectVos != null && projectVos.size() > 0) { + for (ProjectVo projectVo : projectVos) { + allProjectIds.add(projectVo.getId()); + projectClosures = this.projectClosureRepository.findByParentProjectId(projectVo.getId()); + if (projectClosures != null && projectClosures.size() > 0) { + for (ProjectClosure projectClosure : projectClosures) { + allProjectIds.add(projectClosure.getProject().getId()); + } + } + } + } + }else { + projectClosures = this.projectClosureRepository.findByParentProjectId(condition.getProjectId()); + } + + if (projectClosures != null && projectClosures.size() > 0) { + for (ProjectClosure projectClosure : projectClosures) { + Long downProjectId = projectClosure.getProject().getId(); + downProjectIds.add(downProjectId); + allProjectIds.add(downProjectId); + } + } + condition.setDownProjectIds(downProjectIds); + if (condition.getProjectId() == null) { + condition.setAllProjectIds(allProjectIds); + } List<Map<String, Object>> results = this.issueTypeMapper.find(condition); + for (Map<String, Object> result : results) { + Long projectId = MapUtil.getLong(result, "projectId"); + if (projectId != null) { + Project project = this.projectService.getProject(projectId); + ProjectVo projectVo = ConvertUtil.copyProperties(project, ProjectVo.class); + result.put("projectVo", projectVo); + + } + Long issueStatusId = MapUtil.getLong(result, "completeIssueStatusId"); + if (issueStatusId != null) { + IssueStatus issueStatus = this.issueStatusService.getIssueStatus(issueStatusId); + IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(issueStatus, IssueStatusVo.class); + result.put("completeIssueStatusVo", issueStatusVo); + } + } + Long totalCount = this.issueTypeMapper.count(condition); int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1; List<IssueTypeVo> issueTypeVos = ConvertUtil.convertListToListClass(results, IssueTypeVo.class); @@ -166,12 +283,28 @@ this.setUseIssueTypeByWorkflow(issueTypeVos); } + this.setUseIssueTypeByProject(issueTypeVos); + this.setUseIssueTypeByIssueStatus(issueTypeVos); + /*this.setUseIssueTypeByCompanyField(issueTypeVos); + this.setUseIssueTypeByIspField(issueTypeVos); + this.setUseIssueTypeByHostingField(issueTypeVos);*/ + this.setUsePartner(issueTypeVos); + resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(), totalPage, totalCount)); resJsonData.put(Constants.RES_KEY_CONTENTS, issueTypeVos); return issueTypeVos; + } + + // �씠�뒋 �쑀�삎 紐⑸줉�쓣 議고쉶�븳�떎. + @Override + @Transactional(readOnly = true) + public List<IssueTypeVo> findIssueType(IssueTypeCondition condition) { + condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); + List<Map<String, Object>> results = this.issueTypeMapper.find(condition); + return ConvertUtil.convertListToListClass(results, IssueTypeVo.class); } // �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �썙�겕�뵆濡쒖슦 �젙蹂대�� �뀑�똿�븳�떎. @@ -181,6 +314,64 @@ issueTypeVo.setWorkflowVo(ConvertUtil.copyProperties(issueType.getWorkflow(), WorkflowVo.class)); } } + + // �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �뙆�듃�꼫 �젙蹂대�� �뀑�똿�븳�떎. + private void setUsePartner(List<IssueTypeVo> issueTypeVos) { + for (IssueTypeVo issueTypeVo : issueTypeVos) { + List<UsePartnerVo> usePartnerVos = Lists.newArrayList(); + if (issueTypeVo.getUsePartners() != null) { + for (Integer usePartner : UsePartner.partners) {// 1 // 2 // 4 + UsePartnerVo usePartnerVo = UsePartner.checkUsePartner(issueTypeVo.getUsePartners(), usePartner);//3, 1 / 3, 2 / 3, 4 + if (usePartnerVo != null) { + usePartnerVos.add(usePartnerVo); + } + } + issueTypeVo.setUsePartnerVos(usePartnerVos); + } + } + } + + // �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �봽濡쒖젥�듃 �젙蹂대�� �뀑�똿�븳�떎. + private void setUseIssueTypeByProject(List<IssueTypeVo> issueTypeVos) { + for (IssueTypeVo issueTypeVo : issueTypeVos) { + IssueType issueType = this.getIssueType(issueTypeVo.getId()); + + Project project = issueType.getProject(); + if (project != null) { + issueTypeVo.setProjectVo(ConvertUtil.copyProperties(issueType.getProject(), ProjectVo.class)); + } + } + } + + // �씠�뒋 �쑀�삎�뿉 �봽濡쒖젥�듃ID濡� 議고쉶 + public List<IssueType> findByProjectId(Long projectId) { + return this.issueTypeRepository.findByProjectId(projectId); + } + + private void setUseIssueTypeByIssueStatus(List<IssueTypeVo> issueTypeVos) { + for (IssueTypeVo issueTypeVo : issueTypeVos) { + IssueType issueType = this.getIssueType(issueTypeVo.getId()); + + Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses(); + if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) { + IssueTypeApiEndStatus issueTypeApiEndStatus = issueTypeApiEndStatuses.iterator().next(); + + issueTypeVo.setCompleteIssueStatusVo(ConvertUtil.copyProperties(issueTypeApiEndStatus.getIssueStatus(), IssueStatusVo.class)); + } + } + } + + /*// �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �뾽泥� �젙蹂대�� �뀑�똿�븳�떎. + private void setUseIssueTypeByCompanyField(List<IssueTypeVo> issueTypeVos) { + for (IssueTypeVo issueTypeVo : issueTypeVos){ + IssueType issueType = this.getIssueType(issueTypeVo.getId()); + CompanyField companyField = issueType.getCompanyField(); + if(companyField != null){ + issueTypeVo.setCompanyFieldVo(ConvertUtil.copyProperties(issueType.getCompanyField(), CompanyFieldVo.class)); + } + } + } + */ // �씠�뒋 �쑀�삎 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎. @Override @@ -197,6 +388,22 @@ issueTypeVo.setWorkflowVo(ConvertUtil.copyProperties(issueType.getWorkflow(), WorkflowVo.class)); break; } + + Project project = issueType.getProject(); + if (project != null) { + issueTypeVo.setProjectVo(ConvertUtil.copyProperties(issueType.getProject(), ProjectVo.class)); + } + Integer using = issueType.getUsePartner() != null ? issueType.getUsePartner().intValue() : 0; + + List<UsePartnerVo> usePartnerVos = Lists.newArrayList(); + for (Integer usePartner : UsePartner.partners) {// 1 // 2 // 4 + UsePartnerVo usePartnerVo = UsePartner.checkUsePartner(using, usePartner);//3, 1 / 3, 2 / 3, 4 + + if (usePartnerVo != null) { + usePartnerVos.add(usePartnerVo); + } + } + issueTypeVo.setUsePartnerVos(usePartnerVos); } resJsonData.put(Constants.RES_KEY_CONTENTS, issueTypeVo); @@ -221,6 +428,22 @@ ConvertUtil.copyProperties(issueTypeForm, issueType, "id", "issueTypeType"); issueType.setWorkflow(workflow); + + Project project = this.projectService.getProject(issueTypeForm.getProjectId()); + issueType.setProject(project); + + // �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿 + this.setDepartmentOfProject(project, workflow); + + issueType.setUsePartner(issueTypeForm.getUsePartner()); + + issueType.setInheritPartners(issueTypeForm.getInheritPartners()); + + /*if(issueTypeForm.getCompanyId() != null){ + CompanyField companyField = this.companyFieldService.getCompany(issueTypeForm.getCompanyId()); + issueType.setCompanyField(companyField); + }*/ +// issueType.setCompanyYn(issueTypeForm.getCompanyYn()); this.issueTypeRepository.saveAndFlush(issueType); @@ -297,6 +520,13 @@ return this.issueTypeRepository.findByWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); } + // �썙�겕�뵆濡쒖슦 ID濡� �씠�뒋 �쑀�삎 議고쉶 + @Override + @Transactional(readOnly = true) + public List<IssueType> findByWorkflowId(Long id) { + return this.issueTypeRepository.findByWorkflowId(id); + } + // �씠�뒋 ���엯 �븘�뱶 紐⑸줉�쓣 �뿊��濡� �떎�슫濡쒕뱶 �븳�떎. @Override @Transactional -- Gitblit v1.8.0