From 0c8d91d705c987f07fd498b1406dcca08a237238 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 화, 07 12월 2021 14:19:00 +0900 Subject: [PATCH] 연관이슈 추가 기능 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 118 ++++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 92 insertions(+), 26 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 9103bfb..1c33b93 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -18,6 +18,7 @@ import kr.wisestone.owl.mapper.IssueMapper; import kr.wisestone.owl.mapper.ProjectMapper; import kr.wisestone.owl.repository.IssueRepository; +import kr.wisestone.owl.repository.UserDepartmentRepository; import kr.wisestone.owl.service.*; import kr.wisestone.owl.util.*; import kr.wisestone.owl.util.DateUtil; @@ -164,6 +165,9 @@ @Autowired private SimpMessagingTemplate simpMessagingTemplate; + @Autowired + private UserDepartmentRepository userDepartmentRepository; + @Override protected JpaRepository<Issue, Long> getRepository() { return this.issueRepository; @@ -214,7 +218,6 @@ } } - // �봽濡쒖젥�듃 �엯�젰 Project project = issueType.getProject(); if (project == null){ @@ -240,7 +243,14 @@ customFieldApiOverlapForm.setUserId(user.getId()); customFieldApiOverlapForm.setIssueTypeId(issueForm.getIssueTypeId()); - List<IssueVo> issueVos = this.findIssue(issueApiForm, user.getId()); + // �긽�쐞�씪媛먯뿉 �궗�슜�븷 以묐났媛� �꽕�젙 + List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(user.getId(), issueApiForm.getIssueTypeId()); + for(int i=0; i < customFieldApiOverlaps.size() ; i++ ){ + CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i); + issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId()); + } + + List<IssueVo> issueVos = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); int size = issueVos.size(); if (size == 1) { issueForm.setParentIssueId(issueVos.get(0).getId()); @@ -276,19 +286,29 @@ // API 瑜� �넻�빐 �씠�뒋 異붽�. @Override @Transactional - public Issue addApiIssue(IssueApiForm issueApiForm) { + public List<Issue> addApiIssue(IssueApiForm issueApiForm) throws CloneNotSupportedException { User user = convertToUser(issueApiForm.getToken()); IssueForm issueForm = this.convertToIssueForm(issueApiForm, user); - return addIssue(user, issueForm, issueApiForm.getMultipartFiles()); + List<Issue> issues = Lists.newArrayList(); + if (issueForm.getParentIssueId() != null) { + issues.add(addIssue(user, issueForm, issueApiForm.getMultipartFiles())); + } else { + // �긽�쐞 �씠�뒋 異붽� + IssueForm parentIssueForm = issueForm.clone(); + parentIssueForm.setUseIssueCustomFields(issueApiForm.getUseIssueCustomFieldIds()); + Issue issue = addIssue(user, parentIssueForm, null); + issues.add(issue); + // �븯�쐞 �씠�뒋 異붽� + issueForm.setParentIssueId(issue.getId()); + issues.add(addIssue(user, issueForm, issueApiForm.getMultipartFiles())); + } + + return issues; } - - // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋 - private List<IssueVo> findIssue(IssueApiForm issueApiForm, Long userId) { - - List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(userId, issueApiForm.getIssueTypeId()); + private List<IssueVo> findIssue(IssueApiForm issueApiForm, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) { List<IssueVo> resultIssueVos = new ArrayList<>(); if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) { @@ -471,7 +491,6 @@ // HOSTING �젙蹂� ���옣 this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields()); - // 泥⑤� �뙆�씪 ���옣 // multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎. List<Map<String, Object>> convertFileMaps = this.convertMultipartFileToFile(multipartFiles); @@ -645,6 +664,19 @@ } } + void SetMyDepartmentId(IssueCondition issueCondition){ + Long loginId = issueCondition.getLoginUserId(); + List<Long> myDepartmentIds = Lists.newArrayList(); + List<UserDepartment> myDepartments = this.userDepartmentRepository.findByUserId(loginId); + + if(myDepartments != null && myDepartments.size() > 0){ + for(UserDepartment myDepartment : myDepartments){ + myDepartmentIds.add(myDepartment.getDepartmentId()); + } + } + issueCondition.setMyDepartmentIds(myDepartmentIds); + } + // �씠�뒋 紐⑸줉�쓣 議고쉶�븳�떎. @Override @Transactional(readOnly = true) @@ -675,12 +707,25 @@ List<String> issueKeys = Lists.newArrayList(issueIds); issueCondition.setIssueIds(issueKeys); - List<Map<String, Object>> results = this.issueMapper.find(issueCondition); + issueCondition.setLoginUserId(this.webAppUtil.getLoginId()); + issueCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); + User user = this.webAppUtil.getLoginUserObject(); + + List<Map<String, Object>> results = Lists.newArrayList(); + Long totalCount = 0L; + + if (this.userWorkspaceService.checkWorkspaceManager(user)) { + results = this.issueMapper.find(issueCondition); + totalCount = this.issueMapper.count(issueCondition); + } else{ + this.SetMyDepartmentId(issueCondition); + results = this.issueMapper.findByDepartment(issueCondition); + totalCount = this.issueMapper.countByDepartment(issueCondition); + } // �뒠�떇 �쟾 - 0.8, 0.9, 0.9, 0.9, 0.9 /*StopWatch serviceStart = new StopWatch(); serviceStart.start();*/ - Long totalCount = this.issueMapper.count(issueCondition); // �뒠�떇 �쟾 - 1.1, 1.1, 1.3, 1.2 /*serviceStart.stop(); @@ -690,7 +735,6 @@ // �씠�뒋 �븘�씠�뵒 珥덇린�솕 issueCondition.setIssueIds(Lists.newArrayList()); // Map �뿉 �엳�뒗 �뜲�씠�꽣瑜� IssueVo �뜲�씠�꽣濡� 蹂��솚�븳�떎. - User user = this.webAppUtil.getLoginUserObject(); this.setMapToIssueVo(results, issueVos, issueCondition, user); this.setCountDownIssues(results, issueVos); @@ -704,21 +748,33 @@ return issueVos; } - private void setCountDownIssues(List<Map<String, Object>> results, List<IssueVo> issueVos) { + @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")); //�븯�쐞�씠�뒋 媛��졇�삤湲� if(downIssues != null && downIssues.size() > 0){ //�긽�쐞�씠�뒋 媛�吏�怨� �엳�뒗 �븷�뱾�씠 �엳�쑝硫� - int downIssueCount = 0; + int downIssueAllCount = 0;// �븯�쐞�씠�뒋 �쟾泥� 移댁슫�듃 + int downIssueCount = 0;// �븯�쐞�씠�뒋 誘몄셿猷� 移댁슫�듃 for(Issue downIssue : downIssues){ - downIssueCount ++; + downIssueAllCount ++; Long parentIssueId = downIssue.getParentIssue().getId(); Issue parentIssue = this.getIssue(parentIssueId); IssueVo parentIssueVo = ConvertUtil.copyProperties(parentIssue, IssueVo.class); - parentIssueVo.setDownIssueCount(downIssueCount); + parentIssueVo.setDownIssueAllCount(downIssueAllCount); + + IssueStatus downIssueStatus = this.issueStatusService.getIssueStatus(downIssue.getIssueStatus().getId()); + IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); + downIssueVo.setIssueStatusType(downIssueStatus.getIssueStatusType().toString()); + + if(!downIssueVo.getIssueStatusType().equals("CLOSE")){ //誘몄셿猷� �븯�쐞�씠�뒋 泥댄겕 + downIssueCount ++; + } for(IssueVo issueVo : issueVos){ if(issueVo.getId().equals(parentIssueVo.getId())){ - issueVo.setDownIssueCount(parentIssueVo.getDownIssueCount()); + issueVo.setDownIssueCount(downIssueCount); + issueVo.setDownIssueAllCount(parentIssueVo.getDownIssueAllCount()); } } } @@ -1149,15 +1205,20 @@ if(downIssues != null && downIssues.size()>0){ List<IssueVo> resultList = new ArrayList<>(); for(Issue downIssue : downIssues){ - IssueVo newIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); - newIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class)); - newIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class)); - newIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class)); - this.setRegister(downIssue, newIssueVo); // �벑濡앹옄 - this.setIssueDepartment(downIssue, newIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 - this.setIssueCustomFields(downIssue, newIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 + IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); + downIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class)); + downIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class)); + downIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class)); + //�씠�뒋 �긽�깭 異붽� + IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(downIssue.getIssueStatus(), IssueStatusVo.class, "issueStatusType"); + issueStatusVo.setIssueStatusType(downIssue.getIssueStatus().getIssueStatusType().toString()); + downIssueVo.setIssueStatusVo(issueStatusVo); - resultList.add(newIssueVo); + this.setRegister(downIssue, downIssueVo); // �벑濡앹옄 + this.setIssueDepartment(downIssue, downIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 + this.setIssueCustomFields(downIssue, downIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 + + resultList.add(downIssueVo); } issueVo.setIssueDownVos(resultList); } @@ -1251,6 +1312,11 @@ issueRelationVo.setIssueTypeVo(ConvertUtil.copyProperties(relationIssue.getIssueType(), IssueTypeVo.class)); issueRelationVo.setPriorityVo(ConvertUtil.copyProperties(relationIssue.getPriority(), PriorityVo.class)); issueRelationVo.setSeverityVo(ConvertUtil.copyProperties(relationIssue.getSeverity(), SeverityVo.class)); + //�씠�뒋 �긽�깭 異붽� + IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(relationIssue.getIssueStatus(), IssueStatusVo.class, "issueStatusType"); + issueStatusVo.setIssueStatusType(relationIssue.getIssueStatus().getIssueStatusType().toString()); + issueRelationVo.setIssueStatusVo(issueStatusVo); + this.setRegister(relationIssue, relIssueVo); // �벑濡앹옄 this.setIssueDepartment(relationIssue, relIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 this.setIssueCustomFields(relationIssue, relIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 -- Gitblit v1.8.0