From 5fb1952ae91f1a739803247266e87dbd15ea1f27 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 수, 01 12월 2021 13:23:09 +0900 Subject: [PATCH] 충돌 수정 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 161 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 133 insertions(+), 28 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 0005bb0..49a32b4 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -21,10 +21,10 @@ import kr.wisestone.owl.util.DateUtil; import kr.wisestone.owl.vo.*; import kr.wisestone.owl.web.condition.IssueCondition; +import kr.wisestone.owl.web.condition.IssueCustomFieldValueCondition; import kr.wisestone.owl.web.condition.IssueTypeCustomFieldCondition; import kr.wisestone.owl.web.condition.ProjectCondition; -import kr.wisestone.owl.web.form.IssueCommentForm; -import kr.wisestone.owl.web.form.IssueForm; +import kr.wisestone.owl.web.form.*; import kr.wisestone.owl.web.view.ExcelView; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.StopWatch; @@ -71,6 +71,15 @@ @Autowired private SeverityService severityService; + + @Autowired + private CustomFieldApiOverlapService customFieldApiOverlapService; + + @Autowired + private IssueApiDefaultService issueApiDefaultService; + + @Autowired + private ApiTokenService apiTokenService; @Autowired private CompanyFieldService companyFieldService; @@ -182,12 +191,109 @@ } + + // API 瑜� �넻�빐 �씠�뒋 異붽�. + @Override + @Transactional + public Issue addApiIssue(IssueApiForm issueApiForm) { + if (issueApiForm.getIssueTypeId() == null) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR)); + } + + IssueForm issueForm = ConvertUtil.copyProperties(issueApiForm, IssueForm.class); +// issueForm.setFiles(issueApiForm.getFiles()); + IssueType issueType = this.issueTypeService.getIssueType(issueApiForm.getIssueTypeId()); + if (issueType == null){ + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_ISSUE_TYPE_ERROR)); + } + + // �봽濡쒖젥�듃 �엯�젰 + Project project = issueType.getProject(); + if (project == null){ + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_PARAMETER_PROJECT_ERROR)); + } + issueForm.setProjectId(project.getId()); + + // �넗�겙�쑝濡� �쑀�� �젙蹂� 媛��졇�삤湲� + String token = issueApiForm.getToken(); + UserVo userVo = this.apiTokenService.certification(token); + + // �빐�떦 �쑀�� �젙蹂닿� �쁽�옱 db�뿉 �엳�뒗吏� �솗�씤 + User user = this.userService.getUser(userVo.getId()); + if (user != null) { + + // 湲곕낯媛� �엯�젰�븯湲� + IssueApiDefaultForm issueApiDefaultForm = new IssueApiDefaultForm(); + issueApiDefaultForm.setUserId(user.getId()); + issueApiDefaultForm.setIssueTypeId(issueForm.getIssueTypeId()); + IssueApiDefault issueApiDefault = this.issueApiDefaultService.find(issueApiDefaultForm); + if (issueApiDefault != null) { + ConvertUtil.copyProperties(issueApiDefault, issueForm); + issueForm.setPriorityId(issueApiDefault.getPriority().getId()); + issueForm.setSeverityId(issueApiDefault.getSeverity().getId()); + } + + // 以묐났 媛� �븯�쐞 �씠�뒋濡� 泥섎━�븯湲� + CustomFieldApiOverlapForm customFieldApiOverlapForm = new CustomFieldApiOverlapForm(); + customFieldApiOverlapForm.setUserId(user.getId()); + customFieldApiOverlapForm.setIssueTypeId(issueForm.getIssueTypeId()); + + IssueVo issueVo = this.findIssue(issueApiForm, user.getId()); + if (issueVo != null) { + issueForm.setParentIssueId(issueVo.getId()); + } + + issueForm.setIsApi(Issue.IS_API_YES); + + // �궗�슜�옄 �젙�쓽 �븘�뱶 �꽕�젙 + issueForm.setIssueCustomFields(issueApiForm.getCustomFieldValues()); + + // api �엯�젰媛� �쟻�슜 + ConvertUtil.copyProperties(issueApiForm, issueForm); + + return addIssue(user, issueForm, issueApiForm.getMultipartFiles()); + } else { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_USER_ERROR)); + } + } + + // 以묐났�맂 �긽�쐞 �씠�뒋 寃��깋 + private IssueVo findIssue(IssueApiForm issueApiForm, Long userId) { + IssueCustomFieldValueCondition issueCustomFieldValueCondition = new IssueCustomFieldValueCondition(); + + List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(userId, issueApiForm.getIssueTypeId()); + if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) { + for (CustomFieldApiOverlap customFieldApiOverlap : customFieldApiOverlaps) { + for (IssueCustomFieldValueForm issueCustomFieldValue : issueApiForm.getIssueCustomFieldValues()) { + if (customFieldApiOverlap.getCustomField().getId().equals(issueCustomFieldValue.getCustomFieldId())) { + issueCustomFieldValueCondition.addUseValues(issueCustomFieldValue.getUseValue()); + } + } + } + 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; + } + // �씠�뒋瑜� �깮�꽦�븳�떎. @Override @Transactional public Issue addIssue(IssueForm issueForm, List<MultipartFile> multipartFiles) { + User user = this.webAppUtil.getLoginUserObject(); + return addIssue(user, issueForm, multipartFiles); + } + + // �씠�뒋瑜� �깮�꽦�븳�떎. + @Override + @Transactional + public Issue addIssue(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) { // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. - this.workspaceService.checkUseWorkspace(); + Workspace workspace = this.workspaceService.checkUseWorkspace(user, user.getLastWorkspaceId()); // �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕 Project project = this.projectService.getProject(issueForm.getProjectId()); // �씠�뒋 �쑀�삎 �쑀�슚�꽦 泥댄겕 @@ -216,7 +322,7 @@ issue.setIssueNumber(this.issueNumberGeneratorService.generateIssueNumber(project)); // 媛� �봽濡쒖젥�듃�쓽 怨좎쑀 �씠�뒋 踰덊샇 �깮�꽦 - this.issueRepository.saveAndFlush(issue); + issue = this.issueRepository.saveAndFlush(issue); issue.setReverseIndex(issue.getId() * -1); // 荑쇰━ �냽�룄 媛쒖꽑�쓣 �쐞�빐 由щ쾭�뒪 �씤�뜳�뒪 �깮�꽦 // �떞�떦�옄 吏��젙 @@ -230,32 +336,34 @@ // HOSTING �젙蹂� ���옣 this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields()); + + // 泥⑤� �뙆�씪 ���옣 // multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎. List<Map<String, Object>> convertFileMaps = this.convertMultipartFileToFile(multipartFiles); - // 泥⑤� �뙆�씪 ���옣 - this.attachedFileService.addAttachedFile(convertFileMaps, issue, this.webAppUtil.getLoginUser().getAccount()); + this.attachedFileService.addAttachedFile(convertFileMaps, issue, user.getAccount()); + // �뀓�뒪�듃 �뿉�뵒�꽣�뿉 泥⑤��븳 �뙆�씪�쓣 �씠�뒋�� �뿰寃� this.checkNotHaveIssueIdAttachedFile(issue, issueForm); // �궗�슜�옄 �젙�쓽 �븘�뱶 ���옣 this.issueCustomFieldValueService.modifyIssueCustomFieldValue(issue, issueForm.getIssueCustomFields()); // �씠�뒋 �씠�젰 �깮�꽦 - this.issueHistoryService.addIssueHistory(issue, IssueHistoryType.ADD, null); + this.issueHistoryService.addIssueHistory(issue, user, IssueHistoryType.ADD, null); // �씠�뒋 �쐞�뿕 愿�由� �깮�꽦 this.issueRiskService.addIssueRisk(issue, project.getWorkspace()); // �쁺�냽�꽦 而⑦뀓�뒪�듃 鍮꾩슦湲� this.clear(); // �씠�뒋 �깮�꽦, �궘�젣�떆 �삁�빟 �씠硫붿씪�뿉 �벑濡앺빐�넃�뒗�떎. - this.reservationIssueEmail(issue.getId(), EmailType.ISSUE_ADD); + this.reservationIssueEmail(issue, EmailType.ISSUE_ADD); // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� - log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_ADD)); + + UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class); + log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(userVo, ElasticSearchConstants.ISSUE_ADD)); return issue; } // �씠�뒋 �깮�꽦, �궘�젣�떆 �삁�빟 �씠硫붿씪�뿉 �벑濡앺빐�넃�뒗�떎. - private void reservationIssueEmail(Long id, EmailType emailType) { - Issue issue = this.getIssue(id); - + private void reservationIssueEmail(Issue issue, EmailType emailType) { Map<String, Object> issueMap = new HashMap<>(); // �씠�뒋 �젙蹂대�� �씠硫붿씪 �쟾�넚�뿉 �궗�슜�븯湲� �쐞�빐 Map �삎�깭濡� 蹂��솚�븳�떎. this.makeIssueMapToIssue(issue, issueMap); @@ -815,6 +923,7 @@ case "02": // �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭, �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎. this.setIssueDetail(issueVo, issue); // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. + issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class)); break; } } @@ -1125,12 +1234,14 @@ private List<Map<String, Object>> convertMultipartFileToFile(List<MultipartFile> multipartFiles) { List<Map<String, Object>> convertFileMaps = Lists.newArrayList(); - for (MultipartFile multipartFile : multipartFiles) { - try { - Map<String, Object> fileMap = CommonUtil.makeFileMap(multipartFile); - convertFileMaps.add(fileMap); - } catch (Exception e) { - log.debug("multipartFile -> file 蹂��솚 �삤瑜�" + e.getMessage()); + if (multipartFiles != null && multipartFiles.size() > 0) { + for (MultipartFile multipartFile : multipartFiles) { + try { + Map<String, Object> fileMap = CommonUtil.makeFileMap(multipartFile); + convertFileMaps.add(fileMap); + } catch (Exception e) { + log.debug("multipartFile -> file 蹂��솚 �삤瑜�" + e.getMessage()); + } } } @@ -1484,7 +1595,7 @@ } // �씠�뒋 �깮�꽦, �궘�젣�떆 �삁�빟 �씠硫붿씪�뿉 �벑濡앺빐�넃�뒗�떎. - this.reservationIssueEmail(issue.getId(), EmailType.ISSUE_REMOVE); + this.reservationIssueEmail(issue, EmailType.ISSUE_REMOVE); // �씠�뒋 �궘�젣 this.issueRepository.delete(issue); @@ -2521,7 +2632,6 @@ public void reservationIssue() { List<IssueReservation> issueReservations = this.issueReservationService.findByIssueReservationTypeNotNull(); - Calendar calendar = Calendar.getInstance(); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); int month = calendar.get(Calendar.MONTH) + 1; @@ -2685,15 +2795,10 @@ @Override public void modifyParentIssue(IssueForm issueDownForm) { Issue issue = this.getIssue(issueDownForm.getId()); //�븯�쐞 �씠�뒋 - Long newParentIssueId = issueDownForm.getParentIssueId(); //蹂�寃쏀븷 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋 - - StringBuilder sb = new StringBuilder(); - Issue parentIssue = issue.getParentIssue(); //蹂�寃� �쟾 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋 - if(parentIssue != null){ //蹂�寃� �쟾 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋媛� 議댁옱 �븷 寃쎌슦 - this.issueHistoryService.detectDownIssues(IssueHistoryType.DELETE, issue, sb); - this.issueHistoryService.addIssueHistory(parentIssue, IssueHistoryType.MODIFY, sb.toString()); - } + + Long newParentIssueId = issueDownForm.getParentIssueId(); //蹂�寃쏀븷 �븯�쐞�씠�뒋�쓽 �긽�쐞�씠�뒋 + StringBuilder sb = new StringBuilder(); if (newParentIssueId != null) { // 異붽� �븷 寃쎌슦 parentIssue = this.getIssue(newParentIssueId); //�긽�쐞�씠�뒋(myIssue) -- Gitblit v1.8.0