From 3bdf2a1f2757de8ab6570508385d89124243943c Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 금, 10 12월 2021 15:34:13 +0900 Subject: [PATCH] 일반회원 대시보드 오류 해결 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 375 +++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 279 insertions(+), 96 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 72e5bc6..5f53d71 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -3,11 +3,9 @@ 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; -import kr.wisestone.owl.constant.Constants; -import kr.wisestone.owl.constant.ElasticSearchConstants; -import kr.wisestone.owl.constant.MsgConstants; -import kr.wisestone.owl.constant.UsePartner; +import kr.wisestone.owl.constant.*; import kr.wisestone.owl.data.CheckIssueData; import kr.wisestone.owl.domain.*; import kr.wisestone.owl.domain.enumType.CustomFieldType; @@ -17,8 +15,10 @@ import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.IssueMapper; import kr.wisestone.owl.mapper.ProjectMapper; +import kr.wisestone.owl.repository.IssueRelationRepository; import kr.wisestone.owl.repository.IssueRepository; import kr.wisestone.owl.repository.UserDepartmentRepository; +import kr.wisestone.owl.repository.WorkflowDepartmentRepository; import kr.wisestone.owl.service.*; import kr.wisestone.owl.util.*; import kr.wisestone.owl.util.DateUtil; @@ -56,6 +56,9 @@ @Autowired private ProjectService projectService; + + @Autowired + private IssueTableConfigService issueTableConfigService; @Autowired private IssueStatusService issueStatusService; @@ -148,10 +151,16 @@ private UserWorkspaceService userWorkspaceService; @Autowired + private UserLevelService userLevelService; + + @Autowired private WorkflowDepartmentService workflowDepartmentService; @Autowired private IssueRelationService issueRelationService; + + @Autowired + private IssueRelationRepository issueRelationRepository; @Autowired private ExcelView excelView; @@ -167,6 +176,9 @@ @Autowired private UserDepartmentRepository userDepartmentRepository; + + @Autowired + private WorkflowDepartmentRepository workflowDepartmentRepository; @Override protected JpaRepository<Issue, Long> getRepository() { @@ -218,7 +230,6 @@ } } - // �봽濡쒖젥�듃 �엯�젰 Project project = issueType.getProject(); if (project == null){ @@ -239,18 +250,22 @@ issueForm.setSeverityId(issueApiDefault.getSeverity().getId()); } - // 以묐났 媛� �븯�쐞 �씠�뒋濡� 泥섎━�븯湲� + // 以묐났 媛� �긽�쐞 �씠�뒋�쓽 �븯�쐞 �씠�뒋濡� 泥섎━�븯湲� CustomFieldApiOverlapForm customFieldApiOverlapForm = new CustomFieldApiOverlapForm(); 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) { + if (size > 0) { issueForm.setParentIssueId(issueVos.get(0).getId()); - } else if (size > 1) { - throw new OwlRuntimeException( - this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_ERROR)); } issueForm.setIsApi(Issue.IS_API_YES); @@ -280,49 +295,67 @@ // 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 IssueVo getParentIssueVo(Long parentIssueId) { + if (parentIssueId != null) { + Issue parentIssue = this.getIssue(parentIssueId); + return ConvertUtil.copyProperties(parentIssue, IssueVo.class); + } + return null; + } // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋 - private List<IssueVo> findIssue(IssueApiForm issueApiForm, Long userId) { + private List<IssueVo> findIssue(IssueApiForm issueApiform, List<CustomFieldApiOverlap> customFieldApiOverlaps, Long userId) { + List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues(); + List<IssueVo> resultIssueVos = Lists.newArrayList(); + String comma = ","; - List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(userId, issueApiForm.getIssueTypeId()); + if (issueCustomFieldValueForms.size() > 0) { + String concatUseValue = ""; + int useIdx = 0; - List<IssueVo> resultIssueVos = new ArrayList<>(); - if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) { - for (CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) { - for (IssueCustomFieldValueForm issueCustomFieldValue : issueApiForm.getIssueCustomFieldValues()) { - IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); - if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValue.getCustomFieldId())) { - issueCustomFieldValueCondition.setUseValue(issueCustomFieldValue.getUseValue()); + IssueCustomFieldValueFormComparator comp = new IssueCustomFieldValueFormComparator(); + Collections.sort(issueCustomFieldValueForms, comp); - List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); - if (results != null && results.size() > 0) { - List<IssueVo> findIssueVos = new ArrayList<>(); - Collections.copy(resultIssueVos, findIssueVos); - resultIssueVos.clear(); - for (Map<String, Object> result : results) { - IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class); - if (findIssueVos.size() == 0) { - resultIssueVos.add(issueVo); - } else { - IssueVo findIssueVo = findIssueVo(findIssueVos, issueVo.getId()); - if (findIssueVo != null) { - resultIssueVos.add(findIssueVo); - } - } - } - } else { - resultIssueVos.clear(); - return resultIssueVos; + for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) { + for(CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) { + if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValueForm.getCustomFieldId())) { + if (useIdx > 0) { + concatUseValue = concatUseValue.concat(comma); } + concatUseValue = concatUseValue.concat(issueCustomFieldValueForm.getUseValue()); + useIdx++; } + } + } + + IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); + issueCustomFieldValueCondition.setUseValue(concatUseValue); + 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)); } } } @@ -357,7 +390,7 @@ // �궇吏� �쑀�슚�꽦 泥댄겕 this.checkStartCompleteDate(issueForm.getStartDate(), issueForm.getCompleteDate()); // �떞�떦 遺��꽌 �쑀�슚�꽦 泥댄겕 - this.verifyIssueDepartment(project, issueForm); + //this.verifyIssueDepartment(project, issueForm); // �씠�뒋 �긽�깭 �쑀�삎�씠 '��湲�' �씤 �씠�뒋 �긽�깭 媛��졇�삤湲� IssueStatus issueStatus = this.issueStatusService.findByIssueStatusTypeIsReady(issueType.getWorkflow()); @@ -443,7 +476,7 @@ // �궇吏� �쑀�슚�꽦 泥댄겕 this.checkStartCompleteDate(issueForm.getStartDate(), issueForm.getCompleteDate()); // �떞�떦 遺��꽌 �쑀�슚�꽦 泥댄겕 - this.verifyIssueDepartment(project, issueForm); + //this.verifyIssueDepartment(project, issueForm); // �씠�뒋 �긽�깭 �쑀�삎�씠 '��湲�' �씤 �씠�뒋 �긽�깭 媛��졇�삤湲� IssueStatus issueStatus = this.issueStatusService.findByIssueStatusTypeIsReady(issueType.getWorkflow()); @@ -661,18 +694,35 @@ issueCondition.setMyDepartmentIds(myDepartmentIds); } + void SetWorkflowDepartment(List<IssueVo> issueVos){ + for(IssueVo issueVo : issueVos){ + Long issueTypeId = issueVo.getIssueTypeId(); + IssueType issueType = this.issueTypeService.getIssueType(issueTypeId); + Long workflowId = issueType.getWorkflow().getId(); + List<WorkflowDepartment> workflowDepartmentList = this.workflowDepartmentRepository.findByWorkflowId(workflowId); + List<Long> workflowDepartmentIds = Lists.newArrayList(); + if(workflowDepartmentList != null && workflowDepartmentList.size()>0){ + for(WorkflowDepartment workflowDepartment : workflowDepartmentList){ + workflowDepartmentIds.add(workflowDepartment.getDepartment().getId()); + } + } + if(issueVo.getIssueTypeId().equals(issueTypeId)){ + issueVo.setWorkflowDepartmentIds(workflowDepartmentIds); + } + } + } + // �씠�뒋 紐⑸줉�쓣 議고쉶�븳�떎. @Override @Transactional(readOnly = true) - public List<IssueVo> findIssue(Map<String, Object> resJsonData, - IssueCondition issueCondition, Pageable pageable) { + 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<>(); // �궗�슜�옄 �젙�쓽 �븘�뱶 寃��깋�떆 �굹�삤�뒗 �씠�뒋 �븘�씠�뵒 ���옣 而щ젆�뀡 @@ -695,10 +745,13 @@ issueCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); User user = this.webAppUtil.getLoginUserObject(); + List<Map<String, Object>> results = Lists.newArrayList(); Long totalCount = 0L; + UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId()); - if (this.userWorkspaceService.checkWorkspaceManager(user)) { + 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); } else{ @@ -706,6 +759,7 @@ results = this.issueMapper.findByDepartment(issueCondition); totalCount = this.issueMapper.countByDepartment(issueCondition); } + // �뒠�떇 �쟾 - 0.8, 0.9, 0.9, 0.9, 0.9 /*StopWatch serviceStart = new StopWatch(); @@ -717,11 +771,13 @@ 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); this.setCountDownIssues(results, issueVos); + this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲� resJsonData.put(Constants.RES_KEY_CONTENTS, issueVos); resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(), @@ -982,6 +1038,7 @@ condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); projectCondition.setWorkspaceId(condition.getWorkspaceId()); + // �봽濡쒖젥�듃 �궎媛� 議댁옱�븷 寃쎌슦 �봽濡쒖젥�듃 �궎�뿉 �빐�떦�븯�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븯怨� 寃��깋 議곌굔�뿉 �뀑�똿�븳�떎. if (!this.getProjectByProjectKey(condition.getProjectKey(), condition)) { return false; @@ -990,7 +1047,9 @@ // �봽濡쒖젥�듃瑜� �꽑�깮�븯吏� �븡�븯�쑝硫� �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 李얜뒗�떎. if (condition.getProjectIds().size() < 1) { List<Map<String, Object>> projects = null; - if (this.userWorkspaceService.checkWorkspaceManager(user)) { + UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId()); + if (this.userWorkspaceService.checkWorkspaceManager(user) + || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) { projects = this.projectMapper.findByWorkspaceManagerAll(projectCondition); } else { projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectCondition); @@ -1172,6 +1231,7 @@ case "02": // �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭, �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎. this.setIssueDetail(issueVo, issue); // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. + this.setIssueTableConfigs(issue, issueVo); issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class)); break; } @@ -1182,6 +1242,26 @@ resJsonData.put(Constants.RES_KEY_CONTENTS, issueVo); } + + // �뀒�씠釉� �꽕�젙 �뀑�똿 + private void setIssueTableConfigs(Issue issue, IssueVo issueVo) { + Long IssueTypeId = issue.getIssueType().getId(); + + for (int tableConfigType : IssueTableConfig.IssueTableTypes) { + if (tableConfigType != IssueTableConfig.ISSUE_TABLE_TYPE_MAIN) { + issueVo.addIssueTableConfigVo(createIssueTableConfigVo(IssueTypeId, tableConfigType)); + } + } + } + + private IssueTableConfigVo createIssueTableConfigVo(Long issueTypeId, int tableConfigType) { + IssueTableConfig issueTableConfig = this.issueTableConfigService.findByUserIdAndWorkspaceIdAndIssueTypeIdAndIssueTableType(issueTypeId, tableConfigType); + if (issueTableConfig != null) { + return ConvertUtil.copyProperties(issueTableConfig, IssueTableConfigVo.class); + } + return new IssueTableConfigVo(); + } + // �븯�쐞 �씠�뒋 �젙蹂대�� �뀑�똿�븳�떎 private void setDownIssues(Issue issue, IssueVo issueVo) { @@ -1403,34 +1483,27 @@ @Override @Transactional public List<IssueVo> findIssue(IssueApiForm issueApiform) { + List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues(); - List<IssueVo> resultIssueVos = new ArrayList<>(); + List<IssueVo> resultIssueVos = Lists.newArrayList(); + String comma = ","; - IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); if (issueCustomFieldValueForms.size() > 0) { - for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) { -// issueCustomFieldValueCondition.addUseValue(issueCustomFieldValueForm.getUseValue()); - issueCustomFieldValueCondition.setUseValue(issueCustomFieldValueForm.getUseValue()); - List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); - if (results != null && results.size() > 0) { - List<IssueVo> findIssueVos = new ArrayList<>(); - Collections.copy(resultIssueVos, findIssueVos); - resultIssueVos.clear(); - for (Map<String, Object> result : results) { - IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class); + String concatUseValue = ""; + for (int i = 0; i < issueCustomFieldValueForms.size(); i++) { + IssueCustomFieldValueForm issueCustomFieldValueForm = issueCustomFieldValueForms.get(i); + if (i > 0) { + concatUseValue = concatUseValue.concat(comma); + } + concatUseValue = concatUseValue.concat(issueCustomFieldValueForm.getUseValue()); + } - if (findIssueVos.size() == 0) { - resultIssueVos.add(issueVo); - } else { - IssueVo findIssueVo = findIssueVo(findIssueVos, issueVo.getId()); - if (findIssueVo != null) { - resultIssueVos.add(findIssueVo); - } - } - } - } else { - resultIssueVos.clear(); - return resultIssueVos; + IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); + issueCustomFieldValueCondition.setUseValue(concatUseValue); + 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)); } } } @@ -1460,8 +1533,29 @@ if (issueVos != null && issueVos.size() > 0) { List<Issue> issue = Lists.newArrayList(); for (IssueVo issueVo : issueVos) { + IssueVo parentIssueVo = issueVo.getParentIssueVo(); issueForm.setId(issueVo.getId()); - issue.add(this.modifyIssueForApi(user, issueForm, files)); + + // �옄�룞 醫낅즺 �긽�깭 �꽕�젙�씠 �릺�뼱 �엳吏� �븡�쑝硫� �삤瑜섎컻�깮 + Issue modifyIssue = this.modifyIssueForApi(user, issueForm, files); + 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) { + IssueCondition issueCondition = new IssueCondition(issueVo.getId(), parentIssue.getId()); + List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(issueCondition); + // �븯�쐞 �씪媛먯씠 紐⑤몢 醫낅즺 �긽�깭�씪�븣 �긽�쐞 �씪媛먮룄 醫낅즺 泥섎━ + if (results == null || results.size() == 0) { + parentIssue.setIssueStatus(issueType.getIssueStatus()); + this.issueRepository.saveAndFlush(parentIssue); + } + } + + issue.add(modifyIssue); } return issue; } else { @@ -1506,7 +1600,7 @@ // �떞�떦�옄 �쑀�슚�꽦 泥댄겕 //this.verifyIssueAssignee(project, issueForm); // �떞�떦遺��꽌 �쑀�슚�꽦 泥댄겕 - this.verifyIssueDepartment(project, issueForm); + //this.verifyIssueDepartment(project, issueForm); CheckIssueData checkIssueData = new CheckIssueData(); checkIssueData.setIssue(issue); @@ -1544,6 +1638,7 @@ this.issueHistoryService.detectIssueStatus(issue, issueForm, detectIssueChange, oldIssueStatus, issueStatus); } + // db�뿉 ���옣 issue = this.saveIssue(issueForm, checkIssueData); // �씠�뒋 �씠�젰 �벑濡� @@ -1784,6 +1879,9 @@ //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ASSIGNEE, issueVo, issueUserVos); // �떞�떦�옄媛� �뾾�쑝硫� 紐⑤뱺 �궗�슜�옄媛� �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. + hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ALL_ISSUE_MANAGER, issueVo, null, null, user); + hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ALL_PROJECT_MANAGER, issueVo, null, null, user); + return hasPermission; } @@ -1980,38 +2078,123 @@ List<Issue> removeIssues = Lists.newArrayList(); for (Long issueId : issueForm.getRemoveIds()) { + //�븯�쐞�씠�뒋 泥댄겕 + List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId); + if(downIssues != null && downIssues.size() > 0){ + for(Issue downIssue : downIssues){ + if(downIssue.getParentIssue() != null){ + downIssue.setParentIssue(null); + } + } + } + Issue issue = this.issueRemoves(issueId, user); removeIssues.add(issue); } - if (removeIssues.size() > 0) { - //this.issueRepository.deleteAll(removeIssues); - } + /*if (removeIssues.size() > 0) { + this.issueRepository.deleteAll(removeIssues); + }*/ // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE)); } - private Issue issueRemoves(Long issueId, User user) { - Issue issue = this.getIssue(issueId); - // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 - this.verifyIssueModifyPermission(issue, user); + // �씠�뒋瑜� �궘�젣�븳�떎. + @Override + @Transactional + public void removeAllIssues(IssueForm issueForm) { + // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. + User user = this.webAppUtil.getLoginUserObject(); + this.workspaceService.checkUseWorkspace(); - // �씠�뒋 泥⑤� �뙆�씪�쓣 �궘�젣�븳�떎. - if (issue.getAttachedFiles().size() > 0) { - List<Long> attachedFileIds = Lists.newArrayList(); - - for (AttachedFile attachedFile : issue.getAttachedFiles()) { - attachedFileIds.add(attachedFile.getId()); - } - // 泥⑤��뙆�씪 �궘�젣 - this.attachedFileService.removeAttachedFiles(attachedFileIds); + if (issueForm.getRemoveIds().size() < 1) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT)); } - // �씠�뒋 �깮�꽦, �궘�젣�떆 �삁�빟 �씠硫붿씪�뿉 �벑濡앺빐�넃�뒗�떎. - this.reservationIssueEmail(issue, EmailType.ISSUE_REMOVE); - // �씠�뒋 �궘�젣 - this.issueRepository.delete(issue); + List<Issue> removeIssues = Lists.newArrayList(); + + for (Long issueId : issueForm.getRemoveIds()) { + //�븯�쐞�씠�뒋 泥댄겕 + List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId); + if(downIssues != null && downIssues.size() > 0){ + for(Issue downIssue : downIssues){ + Long downIssueId = downIssue.getId(); + downIssue = this.issueRemoves(downIssueId, user); + removeIssues.add(downIssue); + } + } + Issue issue = this.issueRemoves(issueId, user); + removeIssues.add(issue); + } + // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� + log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE)); + } + + // �븯�쐞�씠�뒋瑜� �궘�젣�븳�떎. + @Override + @Transactional + public void removeDownIssues(IssueForm issueForm) { + // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. + User user = this.webAppUtil.getLoginUserObject(); + this.workspaceService.checkUseWorkspace(); + + if (issueForm.getRemoveIds().size() < 1) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.ISSUE_REMOVE_NOT_SELECT)); + } + + List<Issue> removeIssues = Lists.newArrayList(); + Long downIssueId = 0L; + for (Long issueId : issueForm.getRemoveIds()) { + //�궘�젣 �븷 �씠�뒋�쓽 �븯�쐞�씠�뒋 泥댄겕 + List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueId); + if(downIssues != null && downIssues.size() > 0){ + for(Issue downIssue : downIssues){ + downIssueId = downIssue.getId(); + } + } + Issue issue = this.issueRemoves(downIssueId, user); + removeIssues.add(issue); + } + // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� + log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_REMOVE)); + } + + 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); + } return issue; } -- Gitblit v1.8.0