| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.IOException; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.regex.Pattern; |
| | | |
| | | import static kr.wisestone.owl.domain.enumType.CustomFieldType.*; |
| | | |
| | |
| | | // HOSTING 정보 저장 |
| | | this.issueHostingService.modifyIssueHostingField(issue, issueForm, detectIssueChange); |
| | | |
| | | if (issueForm.getParentIssueId() != null){ |
| | | Issue parentIssue = this.getIssue(issueForm.getParentIssueId()); |
| | | if (issueForm.getIsApi().equals(Issue.IS_API_YES) |
| | | || (issueForm.getInheritYn() != null && issueForm.getInheritYn())) { |
| | | // 하위이슈에 상위이슈의 파트너 정보 적용 |
| | | this.inheritPartners(issue, parentIssue); |
| | | } |
| | | } |
| | | |
| | | // 첨부 파일 저장 |
| | | // multipartFile 을 file Map List 객체로 변경한다. |
| | | List<Map<String, Object>> convertFileMaps = this.convertMultipartFileToFile(multipartFiles); |
| | |
| | | // 하위이슈를 생성한다. |
| | | @Override |
| | | @Transactional |
| | | public Issue addDownIssue(IssueForm issueForm, List<MultipartFile> multipartFiles) { |
| | | public Issue addDownIssue(Map<String, Object> resJsonData, IssueForm issueForm, List<MultipartFile> multipartFiles) { |
| | | User user = this.webAppUtil.getLoginUserObject(); |
| | | return addDownIssue(user, issueForm, multipartFiles); |
| | | return addDownIssue(resJsonData, user, issueForm, multipartFiles); |
| | | } |
| | | |
| | | // 하위이슈를 생성한다. |
| | | @Override |
| | | @Transactional |
| | | public Issue addDownIssue(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) { |
| | | public Issue addDownIssue(Map<String, Object> resJsonData, User user, IssueForm issueForm, List<MultipartFile> multipartFiles) { |
| | | StringBuilder detectIssueChange = new StringBuilder(); |
| | | |
| | | // 사용하고 있는 업무 공간이 활성 상태인지 확인한다. 사용 공간에서 로그인한 사용자가 비활성인지 확인한다. |
| | |
| | | this.issueHistoryService.addIssueHistory(issue, user, IssueHistoryType.ADD, null); |
| | | // 이슈 위험 관리 생성 |
| | | this.issueRiskService.addIssueRisk(issue, project.getWorkspace()); |
| | | |
| | | // 영속성 컨텍스트 비우기 |
| | | this.clear(); |
| | | // 이슈 생성, 삭제시 예약 이메일에 등록해놓는다. |
| | |
| | | UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class); |
| | | log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(userVo, ElasticSearchConstants.ISSUE_ADD)); |
| | | |
| | | IssueVo issueVo = this.convertToIssueVo(issue); |
| | | resJsonData.put(Constants.RES_KEY_CONTENTS, issueVo); |
| | | |
| | | return issue; |
| | | } |
| | | |
| | | /** |
| | | * Issue를 IssueVo로 변환(하위이슈의 파트너 정보 상속 시 필요) |
| | | * @param issue Issue |
| | | * @return IssueVo |
| | | */ |
| | | private IssueVo convertToIssueVo(Issue issue) { |
| | | IssueVo issueVo = ConvertUtil.copyProperties(issue, IssueVo.class); |
| | | issueVo.setInheritPartners(issue.getIssueType().getInheritPartners()); |
| | | issueVo.setUsePartner(issue.getIssueType().getUsePartner()); |
| | | return issueVo; |
| | | } |
| | | |
| | | // 연관이슈를 생성한다. |
| | |
| | | private void setMapToIssueVo(List<Map<String, Object>> results, List<IssueVo> issueVos, IssueCondition issueCondition, User user) { |
| | | for (Map<String, Object> result : results) { |
| | | IssueVo issueVo = ConvertUtil.convertMapToClass(result, IssueVo.class); |
| | | if (MapUtil.getString(result, "inheritPartners") != null && MapUtil.getString(result, "inheritPartners").equals("1")) { |
| | | issueVo.setInheritPartners(true); |
| | | } |
| | | issueVos.add(issueVo); |
| | | issueCondition.addIssueIds(String.valueOf(issueVo.getId())); |
| | | } |
| | |
| | | // HOSTING 정보 저장 |
| | | this.issueHostingService.modifyIssueHostingField(issue, issueForm, detectIssueChange); |
| | | |
| | | // 파트너정보 하위이슈 상속 |
| | | List<Issue> downIssues = this.issueRepository.findByParentIssueId(issue.getId()); |
| | | if (issueForm.getInheritYn() != null && issueForm.getInheritYn() |
| | | && downIssues != null && downIssues.size() > 0) { |
| | | for (Issue downIssue : downIssues) { |
| | | this.inheritPartners(downIssue, issue); |
| | | } |
| | | } |
| | | |
| | | // 이슈 이력 등록 |
| | | if (!StringUtils.isEmpty(detectIssueChange.toString())) { |
| | | this.issueHistoryService.addIssueHistory(issue, user, IssueHistoryType.MODIFY, detectIssueChange.toString()); |
| | |
| | | |
| | | for (IssueVo issueVo : issueVos) { |
| | | for (Map<String, Object> issueCustomFieldValue : issueCustomFieldValues) { |
| | | int count = 0; |
| | | Map<String, Object> useValues = new HashMap<>(); |
| | | |
| | | if (issueVo.getId().equals(MapUtil.getLong(issueCustomFieldValue, "issueId"))) { |
| | | IssueCustomFieldValueVo issueCustomFieldValueVo = new IssueCustomFieldValueVo(); |
| | | |
| | | useValues.put("useValue"+count, MapUtil.getString(issueCustomFieldValue, "useValue")); |
| | | useValues.put("customFieldId", MapUtil.getLong(issueCustomFieldValue, "customFieldId")); |
| | | issueCustomFieldValueVo.setUseValues(useValues); |
| | | |
| | | issueCustomFieldValueVo.setUseValue(MapUtil.getString(issueCustomFieldValue, "useValue")); |
| | | |
| | | CustomFieldVo customFieldVo = new CustomFieldVo(); |
| | |
| | | } |
| | | |
| | | issue = this.issueRepository.saveAndFlush(issue); |
| | | |
| | | if (issueForm.getInheritYn() != null && issueForm.getInheritYn() && issue.getParentIssue() != null) { |
| | | // 상위이슈의 파트너 정보 상속 |
| | | this.inheritPartners(issue, issue.getParentIssue()); |
| | | } |
| | | |
| | | saveIssueForm.setId(issue.getId()); |
| | | |
| | |
| | | this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb); |
| | | issue.setParentIssue(null); |
| | | } |
| | | |
| | | if (issueDownForm.getInheritYn() != null && issueDownForm.getInheritYn() && issue.getParentIssue() != null) { |
| | | // 상위이슈의 파트너 정보 상속받기 |
| | | issue = this.inheritPartners(issue, parentIssue); |
| | | } |
| | | |
| | | this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); //parentIssue = myIssue(기록은 현재 상세페이지에 해야하니까) |
| | | this.issueRepository.saveAndFlush(issue); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 상위이슈의 파트너 정보 상속받기 |
| | | * @param issue Issue |
| | | * @param parentIssue Issue |
| | | * @return Issue |
| | | */ |
| | | private Issue inheritPartners(Issue issue, Issue parentIssue) { |
| | | if (parentIssue != null) { |
| | | if (parentIssue.getIssueType().getInheritPartners()) { |
| | | IssueCompany issueCompany = new IssueCompany(); |
| | | IssueIsp issueIsp = new IssueIsp(); |
| | | IssueHosting issueHosting = new IssueHosting(); |
| | | |
| | | if (parentIssue.getIssueCompanies() != null && parentIssue.getIssueCompanies().size() > 0) { |
| | | issue.getIssueCompanies().clear(); |
| | | issue.getIssueCompanies().addAll(parentIssue.getIssueCompanies()); |
| | | Iterator<IssueCompany> itrCompany = issue.getIssueCompanies().iterator(); |
| | | ConvertUtil.copyProperties(itrCompany.next(), issueCompany, "id"); |
| | | issueCompany.setIssue(issue); |
| | | issueCompany.setCompanyField(parentIssue.getIssueCompanies().iterator().next().getCompanyField()); |
| | | this.issueCompanyRepository.saveAndFlush(issueCompany); |
| | | } else { |
| | | this.issueCompanyRepository.deleteByIssueId(issue.getId()); |
| | | this.issueCompanyRepository.flush(); |
| | | } |
| | | if (parentIssue.getIssueIspFields() != null && parentIssue.getIssueIspFields().size() > 0) { |
| | | issue.getIssueIspFields().clear(); |
| | | issue.getIssueIspFields().addAll(parentIssue.getIssueIspFields()); |
| | | Iterator<IssueIsp> itrIsp = issue.getIssueIspFields().iterator(); |
| | | ConvertUtil.copyProperties(itrIsp.next(), issueIsp, "id"); |
| | | issueIsp.setIssue(issue); |
| | | issueIsp.setIspField(parentIssue.getIssueIspFields().iterator().next().getIspField()); |
| | | this.issueIspRepository.saveAndFlush(issueIsp); |
| | | } else { |
| | | this.issueIspRepository.deleteByIssueId(issue.getId()); |
| | | this.issueIspRepository.flush(); |
| | | } |
| | | if (parentIssue.getIssueHostingFields() != null && parentIssue.getIssueHostingFields().size() > 0) { |
| | | issue.getIssueHostingFields().clear(); |
| | | issue.getIssueHostingFields().addAll(parentIssue.getIssueHostingFields()); |
| | | Iterator<IssueHosting> itrHosting = issue.getIssueHostingFields().iterator(); |
| | | ConvertUtil.copyProperties(itrHosting.next(), issueHosting, "id"); |
| | | issueHosting.setIssue(issue); |
| | | issueHosting.setHostingField(parentIssue.getIssueHostingFields().iterator().next().getHostingField()); |
| | | this.issueHostingRepository.saveAndFlush(issueHosting); |
| | | } else { |
| | | this.issueHostingRepository.deleteByIssueId(issue.getId()); |
| | | this.issueHostingRepository.flush(); |
| | | } |
| | | } |
| | | } |
| | | return issue; |
| | | } |
| | | |
| | | @Override |
| | | public void findPartner(Map<String, Object> resJsonData, Map<String, Object> params) { |
| | | Long issueTypeId = MapUtil.getLong(params, "issueTypeId"); |