From 719c18acfac48943d3a7e83d632234c1f8b3dab6 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 금, 10 12월 2021 18:43:44 +0900 Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 177 +++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 106 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 7aadab6..dafd80e 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -257,15 +257,24 @@ // �긽�쐞�씪媛먯뿉 �궗�슜�븷 以묐났媛� �꽕�젙 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()); } - List<IssueVo> issueVos = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); - int size = issueVos.size(); + // 以묐났�맂 �씠�뒋寃��깋 + List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); + int size = issues.size(); if (size > 0) { - issueForm.setParentIssueId(issueVos.get(0).getId()); + Issue targetIssue = issues.get(0); + if (targetIssue.getParentIssue() != null) { + issueForm.setParentIssueId(targetIssue.getParentIssue().getId()); + } else { + issueForm.setParentIssueId(targetIssue.getId()); + } } issueForm.setIsApi(Issue.IS_API_YES); @@ -326,9 +335,9 @@ } // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋 - private List<IssueVo> findIssue(IssueApiForm issueApiform, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) { + private List<Issue> findIssue(IssueApiForm issueApiform, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) { List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues(); - List<IssueVo> resultIssueVos = Lists.newArrayList(); + List<Issue> resultIssueVos = Lists.newArrayList(); String comma = ","; if (issueCustomFieldValueForms.size() > 0) { @@ -352,10 +361,11 @@ IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); issueCustomFieldValueCondition.setUseValue(concatUseValue); + issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId()); List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); if (results != null && results.size() > 0) { for (Map<String, Object> result : results) { - resultIssueVos.add(ConvertUtil.convertMapToClass(result, IssueVo.class)); + resultIssueVos.add(this.getIssue(MapUtil.getLong(result, "id"))); } } } @@ -718,11 +728,11 @@ public List<IssueVo> findIssue(Map<String, Object> resJsonData, IssueCondition issueCondition, Pageable pageable) { // 寃��깋 議곌굔�쓣 留뚮뱺�떎 - /*if (!this.makeIssueSearchCondition(issueCondition, Lists.newArrayList("01", "02", "03"), pageable)) { + if (!this.makeIssueSearchCondition(issueCondition, Lists.newArrayList("01", "02", "03"), pageable)) { // �씠�뒋 紐⑸줉�쓣 李얠� 紐삵븷 寃쎌슦 湲곕낯 �젙蹂대줈 由ы꽩�븳�떎. this.notFoundIssueList(resJsonData, pageable); return Lists.newArrayList(); - }*/ + } Set<String> issueIds = new HashSet<>(); // �궗�슜�옄 �젙�쓽 �븘�뱶 寃��깋�떆 �굹�삤�뒗 �씠�뒋 �븘�씠�뵒 ���옣 而щ젆�뀡 @@ -771,12 +781,19 @@ int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1; // �씠�뒋 �븘�씠�뵒 珥덇린�솕 + issueCondition.setIsApi(issueCondition.getIsApi()); + issueCondition.setIssueIds(Lists.newArrayList()); // Map �뿉 �엳�뒗 �뜲�씠�꽣瑜� IssueVo �뜲�씠�꽣濡� 蹂��솚�븳�떎. this.setMapToIssueVo(results, issueVos, issueCondition, user); + if (issueCondition.getTree()) { + this.setDownIssues(issueVos); + this.setRelationIssues(issueVos); + } this.setCountDownIssues(results, issueVos); + this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲� resJsonData.put(Constants.RES_KEY_CONTENTS, issueVos); @@ -786,6 +803,27 @@ // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_FIND)); return issueVos; + } + + + // �븯�쐞 �씠�뒋 �꽭�똿 + private void setDownIssues(List<IssueVo> issueVos) { + for(IssueVo issueVo : issueVos) { + List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueVo.getId()); + for(Issue downIssue : downIssues){ + issueVo.addIssueDownVo(ConvertUtil.copyProperties(downIssue, IssueVo.class)); + } + } + } + + // �뿰愿� �씠�뒋 �꽭�똿 + private void setRelationIssues(List<IssueVo> issueVos) { + for(IssueVo issueVo : issueVos) { + List<IssueVo> relationIssues = this.issueRelationService.findRelationIssue(issueVo.getId()); + for(IssueVo relationIssue : relationIssues){ + issueVo.addRelationIssueVo(ConvertUtil.copyProperties(relationIssue, IssueVo.class)); + } + } } @Override @@ -1038,7 +1076,6 @@ condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); projectCondition.setWorkspaceId(condition.getWorkspaceId()); - // �봽濡쒖젥�듃 �궎媛� 議댁옱�븷 寃쎌슦 �봽濡쒖젥�듃 �궎�뿉 �빐�떦�븯�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븯怨� 寃��깋 議곌굔�뿉 �뀑�똿�븳�떎. if (!this.getProjectByProjectKey(condition.getProjectKey(), condition)) { return false; @@ -1047,9 +1084,7 @@ // �봽濡쒖젥�듃瑜� �꽑�깮�븯吏� �븡�븯�쑝硫� �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 李얜뒗�떎. if (condition.getProjectIds().size() < 1) { List<Map<String, Object>> projects = null; - UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId()); - if (this.userWorkspaceService.checkWorkspaceManager(user) - || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) { + if (this.userWorkspaceService.checkWorkspaceManager(user)) { projects = this.projectMapper.findByWorkspaceManagerAll(projectCondition); } else { projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectCondition); @@ -1266,26 +1301,26 @@ // �븯�쐞 �씠�뒋 �젙蹂대�� �뀑�똿�븳�떎 private void setDownIssues(Issue issue, IssueVo issueVo) { List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId()); - if(downIssues != null && downIssues.size()>0){ - List<IssueVo> resultList = new ArrayList<>(); - for(Issue downIssue : downIssues){ - 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); + if(downIssues != null && downIssues.size()>0){ + List<IssueVo> resultList = new ArrayList<>(); + for(Issue downIssue : downIssues){ + 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); - this.setRegister(downIssue, downIssueVo); // �벑濡앹옄 - this.setIssueDepartment(downIssue, downIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 - this.setIssueCustomFields(downIssue, downIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 + this.setRegister(downIssue, downIssueVo); // �벑濡앹옄 + this.setIssueDepartment(downIssue, downIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 + this.setIssueCustomFields(downIssue, downIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 - resultList.add(downIssueVo); - } - issueVo.setIssueDownVos(resultList); + resultList.add(downIssueVo); } + issueVo.setIssueDownVos(resultList); + } } // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. @@ -1482,10 +1517,10 @@ // �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪씠 媛숈� �씠�뒋 李얘린 @Override @Transactional - public List<IssueVo> findIssue(IssueApiForm issueApiform) { + public List<Issue> findIssue(IssueApiForm issueApiform) { List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues(); - List<IssueVo> resultIssueVos = Lists.newArrayList(); + List<Issue> resultIssueVos = Lists.newArrayList(); String comma = ","; if (issueCustomFieldValueForms.size() > 0) { @@ -1500,10 +1535,11 @@ IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); issueCustomFieldValueCondition.setUseValue(concatUseValue); + issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId()); List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); if (results != null && results.size() > 0) { for (Map<String, Object> result : results) { - resultIssueVos.add(ConvertUtil.convertMapToClass(result, IssueVo.class)); + resultIssueVos.add(this.getIssue(MapUtil.getLong(result, "id"))); } } } @@ -1529,11 +1565,10 @@ User user = this.convertToUser(issueApiForm.getToken()); IssueForm issueForm = this.convertToIssueForm(issueApiForm, user); - List<IssueVo> issueVos = this.findIssue(issueApiForm); - if (issueVos != null && issueVos.size() > 0) { - List<Issue> issue = Lists.newArrayList(); - for (IssueVo issueVo : issueVos) { - IssueVo parentIssueVo = issueVo.getParentIssueVo(); + List<Issue> issue = this.findIssue(issueApiForm); + if (issue != null && issue.size() > 0) { + List<Issue> issues = Lists.newArrayList(); + for (Issue issueVo : issue) { issueForm.setId(issueVo.getId()); // �옄�룞 醫낅즺 �긽�깭 �꽕�젙�씠 �릺�뼱 �엳吏� �븡�쑝硫� �삤瑜섎컻�깮 @@ -1555,9 +1590,9 @@ } } - issue.add(modifyIssue); + issues.add(modifyIssue); } - return issue; + return issues; } else { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.API_ISSUE_NOT_EXIST)); @@ -2163,38 +2198,39 @@ } private Issue issueRemoves(Long issueId, User user) { - Issue issue = this.findOne(issueId); - if(issue != null){ - // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 - this.verifyIssueModifyPermission(issue, user); - - // �씠�뒋 泥⑤� �뙆�씪�쓣 �궘�젣�븳�떎. - if (issue.getAttachedFiles().size() > 0) { - List<Long> attachedFileIds = Lists.newArrayList(); - - for (AttachedFile attachedFile : issue.getAttachedFiles()) { - attachedFileIds.add(attachedFile.getId()); - } - // 泥⑤��뙆�씪 �궘�젣 - this.attachedFileService.removeAttachedFiles(attachedFileIds); - } - - // 吏��슱 �씠�뒋媛� �뿰愿��씠�뒋�씤吏� 泥댄겕 �썑 �뿰愿��씠�뒋 �뀒�씠釉붿뿉�꽌�룄 �궘�젣�븳�떎. - List<IssueRelation> issueRelationList = this.issueRelationRepository.findByRelationIssueId(issueId); - if (issueRelationList != null && issueRelationList.size() > 0) { - for(IssueRelation issueRelation : issueRelationList){ - StringBuilder sb = new StringBuilder(); - issueHistoryService.detectRelationIssue(IssueHistoryType.DELETE, issueRelation, sb); - issueHistoryService.addIssueHistory(issueRelation.getIssue(), IssueHistoryType.MODIFY, sb.toString()); - this.issueRelationRepository.delete(issueRelation); - } - } - - // �씠�뒋 �깮�꽦, �궘�젣�떆 �삁�빟 �씠硫붿씪�뿉 �벑濡앺빐�넃�뒗�떎. - this.reservationIssueEmail(issue, EmailType.ISSUE_REMOVE); - // �씠�뒋 �궘�젣 - this.issueRepository.delete(issue); + Issue issue = null; + if(issueId != null){ + issue = this.getIssue(issueId); } + // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 + this.verifyIssueModifyPermission(issue, user); + + // �씠�뒋 泥⑤� �뙆�씪�쓣 �궘�젣�븳�떎. + if (issue.getAttachedFiles().size() > 0) { + List<Long> attachedFileIds = Lists.newArrayList(); + + for (AttachedFile attachedFile : issue.getAttachedFiles()) { + attachedFileIds.add(attachedFile.getId()); + } + // 泥⑤��뙆�씪 �궘�젣 + this.attachedFileService.removeAttachedFiles(attachedFileIds); + } + + // 吏��슱 �씠�뒋媛� �뿰愿��씠�뒋�씤吏� 泥댄겕 �썑 �뿰愿��씠�뒋 �뀒�씠釉붿뿉�꽌�룄 �궘�젣�븳�떎. + List<IssueRelation> issueRelationList = this.issueRelationRepository.findByRelationIssueId(issueId); + if (issueRelationList != null && issueRelationList.size() > 0) { + for(IssueRelation issueRelation : issueRelationList){ + StringBuilder sb = new StringBuilder(); + issueHistoryService.detectRelationIssue(IssueHistoryType.DELETE, issueRelation, sb); + issueHistoryService.addIssueHistory(issueRelation.getIssue(), IssueHistoryType.MODIFY, sb.toString()); + this.issueRelationRepository.delete(issueRelation); + } + } + + // �씠�뒋 �깮�꽦, �궘�젣�떆 �삁�빟 �씠硫붿씪�뿉 �벑濡앺빐�넃�뒗�떎. + this.reservationIssueEmail(issue, EmailType.ISSUE_REMOVE); + // �씠�뒋 �궘�젣 + this.issueRepository.delete(issue); return issue; } @@ -3458,7 +3494,6 @@ } this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(湲곕줉�� �쁽�옱 �긽�꽭�럹�씠吏��뿉 �빐�빞�븯�땲源�) this.issueRepository.saveAndFlush(issue); - } @Override -- Gitblit v1.8.0