From 1cc04f2168129f691eb017153b11b08ab83d9cbd Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 화, 14 12월 2021 15:43:28 +0900 Subject: [PATCH] 이슈 Tree 목록 중복 이슈 필터링 수정 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 188 +++++++++++++++++++++++++++++----------------- 1 files changed, 117 insertions(+), 71 deletions(-) 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 d3c4f10..8fa627b 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -1,7 +1,6 @@ package kr.wisestone.owl.service.impl; import com.google.common.collect.Lists; -import com.sun.org.apache.bcel.internal.generic.NEW; import kr.wisestone.owl.common.ExcelConditionCheck; import kr.wisestone.owl.common.IssueCustomFieldValueFormComparator; import kr.wisestone.owl.config.CommonConfiguration; @@ -13,6 +12,7 @@ import kr.wisestone.owl.domain.enumType.IssueHistoryType; import kr.wisestone.owl.domain.enumType.IssueStatusType; import kr.wisestone.owl.exception.OwlRuntimeException; +import kr.wisestone.owl.mapper.DepartmentMapper; import kr.wisestone.owl.mapper.IssueMapper; import kr.wisestone.owl.mapper.ProjectMapper; import kr.wisestone.owl.repository.IssueRelationRepository; @@ -178,6 +178,9 @@ private UserDepartmentRepository userDepartmentRepository; @Autowired + private DepartmentMapper departmentMapper; + + @Autowired private WorkflowDepartmentRepository workflowDepartmentRepository; @Override @@ -211,23 +214,16 @@ Workflow workflow = issueType.getWorkflow(); - // �씠�뒋 �긽�깭媛� 吏��젙�릺�뼱 �엳吏� �븡�쓣 寃쎌슦 珥덇린媛믪쑝濡� 吏��젙 - if (issueApiForm.getIssueStatusId() == null) { - List<IssueStatusVo> issueStatusVos = issueStatusService.findByWorkflowId(workflow.getId()); - IssueStatusVo issueStatusVo = issueStatusVos.get(0); - issueApiForm.setIssueStatusId(issueStatusVo.getId()); - } - - // �썙�겕�뵆濡쒖슦 �긽�깭�뿉 �뵲瑜� �떞�떦遺��꽌 媛��졇�삤湲� - if (issueApiForm.getIssueStatusId() != null) { - WorkflowDepartmentCondition workflowDepartmentCondition = new WorkflowDepartmentCondition(); - workflowDepartmentCondition.setIssueStatusId(issueApiForm.getIssueStatusId()); - workflowDepartmentCondition.setWorkflowId(workflow.getId()); - List<WorkflowDepartmentVo> workflowDepartmentVos = this.workflowDepartmentService.find(workflowDepartmentCondition); - - for (WorkflowDepartmentVo workflowDepartmentVo : workflowDepartmentVos) { - issueForm.addDepartmentId(workflowDepartmentVo.getDepartmentVo().getId()); + if (issueApiForm.getApiType().equals(IssueApiForm.ApiType.add)) { + // �씠�뒋 �긽�깭媛� 吏��젙�릺�뼱 �엳吏� �븡�쓣 寃쎌슦 �썙�겕�뵆濡쒖슦 ��湲� �긽�깭 媛믪쑝濡� 吏��젙 + List<Long> departmentIds = this.workflowDepartmentService.findFirstDepartmentIds(workflow); + if (departmentIds != null && departmentIds.size() > 0) { + for (Long departmentId : departmentIds) { + issueForm.addDepartmentId(departmentId); + } } + } else if (issueApiForm.getIssueStatusId() == null){ + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST)); } // �봽濡쒖젥�듃 �엯�젰 @@ -257,23 +253,25 @@ // �긽�쐞�씪媛먯뿉 �궗�슜�븷 以묐났媛� �꽕�젙 List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(user.getId(), issueApiForm.getIssueTypeId()); - if (customFieldApiOverlaps == null || customFieldApiOverlaps.size() == 0){ - throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_SETTING_NOT_EXIST)); - } - for(int i=0; i < customFieldApiOverlaps.size() ; i++ ){ - CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i); - issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId()); - } +// if (customFieldApiOverlaps == null || customFieldApiOverlaps.size() == 0){ +// throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_SETTING_NOT_EXIST)); +// } + if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) { + for (int i = 0; i < customFieldApiOverlaps.size(); i++) { + CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i); + issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId()); + } - // 以묐났�맂 �씠�뒋寃��깋 - List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); - int size = issues.size(); - if (size > 0) { - Issue targetIssue = issues.get(0); - if (targetIssue.getParentIssue() != null) { - issueForm.setParentIssueId(targetIssue.getParentIssue().getId()); - } else { - issueForm.setParentIssueId(targetIssue.getId()); + // 以묐났�맂 �씠�뒋寃��깋 + List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); + int size = issues.size(); + if (size > 0) { + Issue targetIssue = issues.get(0); + if (targetIssue.getParentIssue() != null) { + issueForm.setParentIssueId(targetIssue.getParentIssue().getId()); + } else { + issueForm.setParentIssueId(targetIssue.getId()); + } } } @@ -700,8 +698,22 @@ for(UserDepartment myDepartment : myDepartments){ myDepartmentIds.add(myDepartment.getDepartmentId()); } + } else { + myDepartmentIds.add(-1L); } issueCondition.setMyDepartmentIds(myDepartmentIds); + } + + void SetAllDepartmentId(IssueCondition issueCondition){ + List<Long> departmentIds = Lists.newArrayList(); + List<Map<String, Object>> departmentList = this.departmentMapper.find(null); + + if(departmentList != null && departmentList.size() > 0){ + for(Map<String, Object> department : departmentList){ + departmentIds.add((Long) department.get("id")); + } + } + issueCondition.setMyDepartmentIds(departmentIds); } void SetWorkflowDepartment(List<IssueVo> issueVos){ @@ -762,13 +774,14 @@ if (this.userWorkspaceService.checkWorkspaceManager(user) || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) { - results = this.issueMapper.find(issueCondition); - totalCount = this.issueMapper.count(issueCondition); + this.SetAllDepartmentId(issueCondition); } else{ this.SetMyDepartmentId(issueCondition); - results = this.issueMapper.findByDepartment(issueCondition); - totalCount = this.issueMapper.countByDepartment(issueCondition); + /*results = this.issueMapper.findByDepartment(issueCondition); + totalCount = this.issueMapper.countByDepartment(issueCondition);*/ } + results = this.issueMapper.find(issueCondition); + totalCount = this.issueMapper.count(issueCondition); // �뒠�떇 �쟾 - 0.8, 0.9, 0.9, 0.9, 0.9 @@ -788,11 +801,12 @@ // Map �뿉 �엳�뒗 �뜲�씠�꽣瑜� IssueVo �뜲�씠�꽣濡� 蹂��솚�븳�떎. this.setMapToIssueVo(results, issueVos, issueCondition, user); -// if (issueCondition.getTree()) { - this.setDownIssues(issueVos); + if (issueCondition.getTree()) { + this.setParentIssue(issueVos); + this.setDownIssues(user, issueVos); this.setRelationIssues(issueVos); -// } - this.setCountDownIssues(results, issueVos); + } + this.setCountDownIssues(issueVos); this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲� @@ -806,13 +820,34 @@ } - // �븯�쐞 �씠�뒋 �꽭�똿 - private void setDownIssues(List<IssueVo> issueVos) { + // �븯�쐞 �씠�뒋 �꽭�똿(�옱洹�) + private void setDownIssues(User user, List<IssueVo> issueVos) { for(IssueVo issueVo : issueVos) { List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueVo.getId()); + List<IssueVo> downIssueVos = Lists.newArrayList(); + IssueCondition issueCondition = new IssueCondition(); + issueCondition.addIssueIds(String.valueOf(issueVo.getId())); + for(Issue downIssue : downIssues){ - issueVo.addIssueDownVo(ConvertUtil.copyProperties(downIssue, IssueVo.class)); + IssueVo addIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); + addIssueVo.setIssueTypeId(downIssue.getIssueType().getId()); + downIssueVos.add(addIssueVo); } + issueVo.setIssueDownVos(downIssueVos); + + if (downIssueVos.size() > 0) { + this.setDownIssues(user, downIssueVos); + } + + // �씠�뒋 �궗�슜�옄 �젙蹂� 異붽� + //this.setIssueUserList(issueVos, issueCondition); + this.setIssueDepartmentList(issueVos, issueCondition, user); + // �벑濡앹옄 �젙蹂� 異붽� + this.setRegister(issueVos); // �떞�떦�옄 �젙蹂� �뀑�똿 + // �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� 異붽� + this.setIssueCustomFieldValue(issueVos, issueCondition); + //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲� + this.SetWorkflowDepartment(issueVos); } } @@ -826,11 +861,25 @@ } } + // �긽�쐞 �씠�뒋 泥댄겕 + private void setParentIssue(List<IssueVo> issueVos) { + for(IssueVo issueVo : issueVos) { + if(issueVo.getParentIssueId() != null) { + Issue parentIssue = this.getIssue(issueVo.getParentIssueId()); + //issueVo.setParentIssueVo(ConvertUtil.copyProperties(parentIssue, IssueVo.class)); + if(parentIssue.getIssueCustomFieldValues() == null || parentIssue.getIssueCustomFieldValues().size() == 0){ + issueVo.setIssueCustomFieldValueVos(null); + } + ConvertUtil.copyProperties(parentIssue, issueVo); + } + } + } + @Override @Transactional(readOnly = true) - public void setCountDownIssues(List<Map<String, Object>> results, List<IssueVo> issueVos) { - for (Map<String, Object> result : results){ - List<Issue> downIssues = this.issueRepository.findByParentIssueId((Long) result.get("id")); //�븯�쐞�씠�뒋 媛��졇�삤湲� + public void setCountDownIssues(List<IssueVo> issueVos) { + for (IssueVo issueVo : issueVos){ + List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueVo.getId()); //�븯�쐞�씠�뒋 媛��졇�삤湲� if(downIssues != null && downIssues.size() > 0){ //�긽�쐞�씠�뒋 媛�吏�怨� �엳�뒗 �븷�뱾�씠 �엳�쑝硫� int downIssueAllCount = 0;// �븯�쐞�씠�뒋 �쟾泥� 移댁슫�듃 int downIssueCount = 0;// �븯�쐞�씠�뒋 誘몄셿猷� 移댁슫�듃 @@ -849,12 +898,8 @@ downIssueCount ++; } - for(IssueVo issueVo : issueVos){ - if(issueVo.getId().equals(parentIssueVo.getId())){ - issueVo.setDownIssueCount(downIssueCount); - issueVo.setDownIssueAllCount(parentIssueVo.getDownIssueAllCount()); - } - } + issueVo.setDownIssueCount(downIssueCount); + issueVo.setDownIssueAllCount(parentIssueVo.getDownIssueAllCount()); } } } @@ -1576,11 +1621,10 @@ Issue parentIssue = modifyIssue.getParentIssue(); IssueType issueType = modifyIssue.getIssueType(); IssueStatus issueStatus = issueType.getIssueStatus(); - if (issueStatus == null) { - throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST)); - } - if (parentIssue != null) { + if (issueStatus == null) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST)); + } IssueCondition issueCondition = new IssueCondition(issueVo.getId(), parentIssue.getId()); List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(issueCondition); // �븯�쐞 �씪媛먯씠 紐⑤몢 醫낅즺 �긽�깭�씪�븣 �긽�쐞 �씪媛먮룄 醫낅즺 泥섎━ @@ -1653,40 +1697,42 @@ private Issue modifyIssueForApi(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) { CheckIssueData checkIssueData = this.checkIssue(user, issueForm); - Issue issue = checkIssueData.getIssue(); - Project project = checkIssueData.getProject(); - IssueType issueType = checkIssueData.getIssueType(); - IssueStatus oldIssueStatus = checkIssueData.getOldIssueStatus(); - IssueStatus issueStatus = checkIssueData.getNewIssueStatus(); + // �씠�뒋 �씠�젰 �궓湲곌린 + this.addIssueHistoryModify(user, issueForm, checkIssueData, multipartFiles); + // db�뿉 ���옣 + return this.saveIssue(issueForm, checkIssueData); + } + + private void addIssueHistoryModify(User user, IssueForm issueForm, CheckIssueData checkIssueData, List<MultipartFile> multipartFiles) { // 蹂�寃� �씠�젰 �젙蹂� 異붿텧 StringBuilder detectIssueChange = this.issueHistoryService.detectIssueChange(issueForm, checkIssueData, multipartFiles); // �봽濡쒖젥�듃媛� 蹂�寃쎈릺硫� �씠�뒋 �꽆踰꾨�� �깉濡� �뵲�빞 �븳�떎. - this.checkChangeProject(checkIssueData.getProject(), issue); + this.checkChangeProject(checkIssueData.getProject(), checkIssueData.getIssue()); // �씠�뒋 �쑀�삎�씠 蹂�寃쎈릺�뿀�뒗吏� �솗�씤�븯怨� 蹂�寃쎈릺�뿀�떎硫� �씠�뒋 �긽�깭 �냽�꽦�씠 '��湲�' �씤 �씠�뒋 �긽�깭濡� 援먯껜�븳�떎. - if (this.checkChangeIssueType(issueType, issueStatus, issue)) { - issueStatus = this.issueStatusService.findByIssueStatusTypeIsReady(issueType.getWorkflow()); + if (this.checkChangeIssueType(checkIssueData.getIssueType(), checkIssueData.getNewIssueStatus(), checkIssueData.getIssue())) { + checkIssueData.setNewIssueStatus(this.issueStatusService.findByIssueStatusTypeIsReady(checkIssueData.getIssueType().getWorkflow())); // �씠�뒋 �긽�깭 蹂�寃� �씠�젰 �궓湲곌린 - �씠�젰�쓣 �궓湲곌린 �쐞�빐 issueForm �뿉 issueStatus Id 媛믪쓣 ���옣. - issueForm.setIssueStatusId(issueStatus.getId()); - this.issueHistoryService.detectIssueStatus(issue, issueForm, detectIssueChange, oldIssueStatus, issueStatus); + issueForm.setIssueStatusId(checkIssueData.getNewIssueStatus().getId()); + this.issueHistoryService.detectIssueStatus(checkIssueData.getIssue(), issueForm, detectIssueChange, checkIssueData.getOldIssueStatus(), checkIssueData.getNewIssueStatus()); } // db�뿉 ���옣 - issue = this.saveIssue(issueForm, checkIssueData); +// checkIssueData.setIssue(this.saveIssue(issueForm, checkIssueData)); // �씠�뒋 �씠�젰 �벑濡� if (!StringUtils.isEmpty(detectIssueChange.toString())) { - this.issueHistoryService.addIssueHistory(issue, user, IssueHistoryType.MODIFY, detectIssueChange.toString()); + this.issueHistoryService.addIssueHistory(checkIssueData.getIssue(), user, IssueHistoryType.MODIFY, detectIssueChange.toString()); } // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class); log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(userVo, ElasticSearchConstants.ISSUE_MODIFY)); - - return issue; } + + private Issue saveIssue(IssueForm issueForm, CheckIssueData checkIssueData) { Issue issue = checkIssueData.getIssue(); ConvertUtil.copyProperties(issueForm, issue, "id"); -- Gitblit v1.8.0