| | |
| | | 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.config.CommonConfiguration; |
| | | import kr.wisestone.owl.constant.Constants; |
| | |
| | | customFieldApiOverlapForm.setUserId(user.getId()); |
| | | customFieldApiOverlapForm.setIssueTypeId(issueForm.getIssueTypeId()); |
| | | |
| | | IssueVo issueVo = this.findIssue(issueApiForm, user.getId()); |
| | | if (issueVo != null) { |
| | | issueForm.setParentIssueId(issueVo.getId()); |
| | | List<IssueVo> issueVos = this.findIssue(issueApiForm, user.getId()); |
| | | int size = issueVos.size(); |
| | | if (size == 1) { |
| | | 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); |
| | |
| | | |
| | | |
| | | // 중복된 상위 이슈 검색 |
| | | private IssueVo findIssue(IssueApiForm issueApiForm, Long userId) { |
| | | IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); |
| | | private List<IssueVo> findIssue(IssueApiForm issueApiForm, Long userId) { |
| | | |
| | | List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(userId, issueApiForm.getIssueTypeId()); |
| | | |
| | | 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.addUseValues(issueCustomFieldValue.getUseValue()); |
| | | issueCustomFieldValueCondition.setUseValue(issueCustomFieldValue.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); |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); |
| | | if (results != null && results.size() > 0) { |
| | | IssueVo issueVo = new IssueVo(); |
| | | ConvertUtil.convertMapToObject(results.get(0), issueVo); |
| | | return issueVo; |
| | | } |
| | | } |
| | | return null; |
| | | return resultIssueVos; |
| | | } |
| | | |
| | | // 이슈를 생성한다. |
| | |
| | | // 하위 이슈 정보를 셋팅한다 |
| | | private void setDownIssues(Issue issue, IssueVo issueVo) { |
| | | List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId()); |
| | | /*if(issueVo != null && downIssues.size()>0){ |
| | | for(Issue downIssue : downIssues){ |
| | | IssueVo downIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); |
| | | IssueDownVo issueDownVo = ConvertUtil.copyProperties(downIssueVo, IssueDownVo.class); |
| | | issueDownVo.setIssueDown(downIssueVo); |
| | | issueDownVo.setTitle(downIssue.getTitle()); |
| | | issueDownVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class)); |
| | | issueDownVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class)); |
| | | issueDownVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class)); |
| | | this.setRegister(downIssue, downIssueVo); // 등록자 |
| | | this.setIssueDepartment(downIssue, downIssueVo); // 담당부서 정보 셋팅 |
| | | this.setIssueCustomFields(downIssue, downIssueVo); // 사용자정의필드 정보 세팅 |
| | | issueVo.addIssueDownVo(issueDownVo); |
| | | } |
| | | }*/ |
| | | |
| | | List<IssueVo> downIssueVos = ConvertUtil.convertObjectsToClasses(downIssues, IssueVo.class); |
| | | List<IssueVo> resultList = new ArrayList<>(); |
| | | if(downIssueVos != null && downIssueVos.size()>0){ |
| | | for(IssueVo downIssueVo : downIssueVos){ |
| | | if(downIssues != null && downIssues.size()>0){ |
| | | List<IssueVo> resultList = new ArrayList<>(); |
| | | for(Issue downIssue : downIssues){ |
| | | downIssueVo.setIssueTypeVo(ConvertUtil.copyProperties(downIssue.getIssueType(), IssueTypeVo.class)); |
| | | downIssueVo.setPriorityVo(ConvertUtil.copyProperties(downIssue.getPriority(), PriorityVo.class)); |
| | | downIssueVo.setSeverityVo(ConvertUtil.copyProperties(downIssue.getSeverity(), SeverityVo.class)); |
| | | this.setRegister(downIssue, downIssueVo); // 등록자 |
| | | this.setIssueDepartment(downIssue, downIssueVo); // 담당부서 정보 셋팅 |
| | | this.setIssueCustomFields(downIssue, downIssueVo); // 사용자정의필드 정보 세팅 |
| | | 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); // 사용자정의필드 정보 세팅 |
| | | |
| | | resultList.add(newIssueVo); |
| | | } |
| | | resultList.add(downIssueVo); |
| | | issueVo.setIssueDownVos(resultList); |
| | | } |
| | | issueVo.setIssueDownVos(resultList); |
| | | } |
| | | } |
| | | |
| | | // 이슈 상세 정보를 셋팅한다. |
| | |
| | | } |
| | | |
| | | // 이슈(이슈 유형)에 연결된 사용자 정의 필드 정보를 셋팅한다. |
| | | private void setIssueCustomFields(Issue issue, IssueVo issueVo) { |
| | | private IssueVo setIssueCustomFields(Issue issue, IssueVo issueVo) { |
| | | |
| | | // 해당 프로젝트의 이슈 유형에 연결된 사용자 정의 필드 정보를 가져온다. |
| | | IssueTypeCustomFieldCondition issueTypeCustomFieldCondition = new IssueTypeCustomFieldCondition(); |
| | |
| | | // 이슈에서 사용된 사용자 정의 필드 값을 가져온다. |
| | | List<IssueCustomFieldValueVo> issueCustomFieldValueVos = this.issueCustomFieldValueService.findByIssueId(issue.getId()); |
| | | issueVo.setIssueCustomFieldValueVos(issueCustomFieldValueVos); |
| | | |
| | | return issueVo; |
| | | } |
| | | |
| | | // 이슈에 등록된 댓글 정보를 셋팅한다. |
| | |
| | | @Transactional |
| | | public List<IssueVo> findIssue(IssueApiForm issueApiform) { |
| | | List<IssueCustomFieldValueForm> issueCustomFieldValueForms = issueApiform.getIssueCustomFieldValues(); |
| | | List<IssueVo> resultIssueVos = new ArrayList<>(); |
| | | |
| | | IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); |
| | | if (issueCustomFieldValueForms != null && issueCustomFieldValueForms.size() > 0) { |
| | | if (issueCustomFieldValueForms.size() > 0) { |
| | | for (IssueCustomFieldValueForm issueCustomFieldValueForm : issueCustomFieldValueForms) { |
| | | issueCustomFieldValueCondition.addUseValues(issueCustomFieldValueForm.getUseValue()); |
| | | // 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); |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); |
| | | List<IssueVo> issueVos = Lists.newArrayList(); |
| | | if (results != null && results.size() > 0) { |
| | | issueVos.add(ConvertUtil.convertMapToClass(results.get(0), IssueVo.class)); |
| | | } |
| | | |
| | | return issueVos; |
| | | return resultIssueVos; |
| | | } |
| | | |
| | | // 리스트에서 해당 아이디를 가지고 있는 이슈 검색 |
| | | private IssueVo findIssueVo(List<IssueVo> list, Long id) { |
| | | for (IssueVo issueVo : list) { |
| | | if (id.equals(issueVo.getId())) { |
| | | return issueVo; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | |
| | | IssueForm issueForm = this.convertToIssueForm(issueApiForm, user); |
| | | |
| | | List<IssueVo> issueVos = this.findIssue(issueApiForm); |
| | | List<Issue> issue = Lists.newArrayList(); |
| | | for (IssueVo issueVo : issueVos) { |
| | | issueForm.setId(issueVo.getId()); |
| | | issue.add(this.modifyIssueForApi(user, issueForm, files)); |
| | | if (issueVos != null && issueVos.size() > 0) { |
| | | List<Issue> issue = Lists.newArrayList(); |
| | | for (IssueVo issueVo : issueVos) { |
| | | issueForm.setId(issueVo.getId()); |
| | | issue.add(this.modifyIssueForApi(user, issueForm, files)); |
| | | } |
| | | return issue; |
| | | } else { |
| | | throw new OwlRuntimeException( |
| | | this.messageAccessor.getMessage(MsgConstants.API_ISSUE_NOT_EXIST)); |
| | | } |
| | | |
| | | return issue; |
| | | } |
| | | |
| | | // 이슈를 수정한다. |