From dea4bb128425e06684bf95e8e97613a20cf3bcfa Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 월, 24 1월 2022 18:10:31 +0900 Subject: [PATCH] 이슈 테이블 표시 설정 10 이상 정렬 오류 해결 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 129 ++++++++++++++++++++++++++++++------------ 1 files changed, 92 insertions(+), 37 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 084251d..a772639 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -46,7 +46,11 @@ import javax.servlet.http.HttpServletRequest; import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.*; + +import static kr.wisestone.owl.domain.enumType.CustomFieldType.DATETIME; +import static kr.wisestone.owl.domain.enumType.CustomFieldType.INPUT; @Service public class IssueServiceImpl extends AbstractServiceImpl<Issue, Long, JpaRepository<Issue, Long>> implements IssueService { @@ -212,6 +216,9 @@ @Autowired private IssueRelationMapper issueRelationMapper; + @Autowired + private WorkflowTransitionService workflowTransitionService; + @Override protected JpaRepository<Issue, Long> getRepository() { return this.issueRepository; @@ -262,6 +269,9 @@ } } else if (issueApiForm.getIssueStatusId() == null){ throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST)); + } else if (!this.workflowTransitionService.contains(issueApiForm.getIssueStatusId(), workflow.getId())) { + //�씠�뒋 �긽�깭 �쑀�슚�꽦 �솗�씤 + throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST_IN_WORKFLOW)); } // �봽濡쒖젥�듃 �엯�젰 @@ -480,6 +490,8 @@ @Override @Transactional public Issue addIssue(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) { + StringBuilder detectIssueChange = new StringBuilder(); + // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. Workspace workspace = this.workspaceService.checkUseWorkspace(user, user.getLastWorkspaceId()); // �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕 @@ -522,11 +534,11 @@ // �떞�떦遺��꽌 吏��젙 this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds()); // �뾽泥� �젙蹂� ���옣 - this.issueCompanyService.modifyIssueCompanyField(issue, issueForm); + this.issueCompanyService.modifyIssueCompanyField(issue, issueForm, detectIssueChange); // ISP �젙蹂� ���옣 - this.issueIspService.modifyIssueIspField(issue, issueForm); + this.issueIspService.modifyIssueIspField(issue, issueForm, detectIssueChange); // HOSTING �젙蹂� ���옣 - this.issueHostingService.modifyIssueHostingField(issue, issueForm); + this.issueHostingService.modifyIssueHostingField(issue, issueForm, detectIssueChange); // 泥⑤� �뙆�씪 ���옣 // multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎. @@ -573,6 +585,8 @@ @Override @Transactional public Issue addDownIssue(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) { + StringBuilder detectIssueChange = new StringBuilder(); + // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. Workspace workspace = this.workspaceService.checkUseWorkspace(user, user.getLastWorkspaceId()); // �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕 @@ -615,11 +629,11 @@ // �떞�떦遺��꽌 吏��젙 this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds()); // �뾽泥� �젙蹂� ���옣 - this.issueCompanyService.modifyIssueCompanyField(issue, issueForm); + this.issueCompanyService.modifyIssueCompanyField(issue, issueForm, detectIssueChange); // ISP �젙蹂� ���옣 - this.issueIspService.modifyIssueIspField(issue, issueForm); + this.issueIspService.modifyIssueIspField(issue, issueForm, detectIssueChange); // HOSTING �젙蹂� ���옣 - this.issueHostingService.modifyIssueHostingField(issue, issueForm); + this.issueHostingService.modifyIssueHostingField(issue, issueForm, detectIssueChange); // 泥⑤� �뙆�씪 ���옣 // multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎. @@ -650,6 +664,7 @@ @Override @Transactional public Issue addRelIssue(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) { + StringBuilder detectIssueChange = new StringBuilder(); // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. Workspace workspace = this.workspaceService.checkUseWorkspace(user, user.getLastWorkspaceId()); // �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕 @@ -692,11 +707,11 @@ // �떞�떦遺��꽌 吏��젙 this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds()); // �뾽泥� �젙蹂� ���옣 - this.issueCompanyService.modifyIssueCompanyField(issue, issueForm); + this.issueCompanyService.modifyIssueCompanyField(issue, issueForm, detectIssueChange); // ISP �젙蹂� ���옣 - this.issueIspService.modifyIssueIspField(issue, issueForm); + this.issueIspService.modifyIssueIspField(issue, issueForm, detectIssueChange); // HOSTING �젙蹂� ���옣 - this.issueHostingService.modifyIssueHostingField(issue, issueForm); + this.issueHostingService.modifyIssueHostingField(issue, issueForm, detectIssueChange); // 泥⑤� �뙆�씪 ���옣 // multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎. @@ -798,7 +813,7 @@ useValues.add(issueCustomFieldValueVo.getUseValue()); customField.put(issueCustomFieldValueVo.getCustomFieldVo().getName(), useValues); } else { - if (issueCustomFieldValueVo.getCustomFieldVo().getCustomFieldType().equals(CustomFieldType.INPUT.toString())) { + if (issueCustomFieldValueVo.getCustomFieldVo().getCustomFieldType().equals(INPUT.toString())) { customField.put(issueCustomFieldValueVo.getCustomFieldVo().getName(), issueCustomFieldValueVo.getUseValue()); } else { customField.put(issueCustomFieldValueVo.getCustomFieldVo().getName(), Lists.newArrayList(issueCustomFieldValueVo.getUseValue())); @@ -1586,6 +1601,9 @@ this.setIssueCustomFields(downIssue, downIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 this.setIssueHistory(downIssue, downIssueVo); // �씠�뒋 湲곕줉 �젙蹂� �뀑�똿 this.setIssueComments(downIssue, downIssueVo); // �뙎湲� �젙蹂� �뀑�똿 + this.setIssueCompanyField(downIssue, downIssueVo); //�뾽泥� �젙蹂� �꽭�똿 + this.setIssueIspField(downIssue, downIssueVo); //ISP �젙蹂� �꽭�똿 + this.setIssueHostingField(downIssue, downIssueVo); //HOSTING �젙蹂� �꽭�똿 downIssueVo.setModifyPermissionCheck(issueVo.getModifyPermissionCheck()); @@ -1599,6 +1617,11 @@ @Override @Transactional(readOnly = true) public void setIssueDetail(IssueVo issueVo, Issue issue, User user) { + // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 + if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) { + issueVo.setModifyPermissionCheck(Boolean.TRUE); + } + issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class)); issueVo.setIssueTypeVo(ConvertUtil.copyProperties(issue.getIssueType(), IssueTypeVo.class)); IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(issue.getIssueStatus(), IssueStatusVo.class, "issueStatusType"); @@ -1634,11 +1657,6 @@ this.setIssueIspField(issue, issueVo); //ISP �젙蹂� �꽭�똿 this.setIssueHostingField(issue, issueVo); //HOSTING �젙蹂� �꽭�똿 this.setParentIssue(issue,issueVo); //�긽�쐞 �씠�뒋 �젙蹂� �꽭�똿 - - // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 - if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) { - issueVo.setModifyPermissionCheck(Boolean.TRUE); - } } // �긽�쐞�씪媛� �젙蹂� 異붽� @@ -1702,6 +1720,25 @@ this.setRegister(relationIssue, relIssueVo); // �벑濡앹옄 this.setIssueDepartment(relationIssue, relIssueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 this.setIssueCustomFields(relationIssue, relIssueVo); // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿 + + Set<IssueCompany> issueCompanies = relationIssue.getIssueCompanies(); + Iterator<IssueCompany> itrCompany = issueCompanies.iterator(); + while (itrCompany.hasNext()) { + issueRelationVo.addIssueCompanyVo(ConvertUtil.copyProperties(itrCompany.next(), IssueCompanyVo.class)); + } + + Set<IssueIsp> issueIsps = relationIssue.getIssueIspFields(); + Iterator<IssueIsp> itrIsp = issueIsps.iterator(); + while (itrIsp.hasNext()) { + issueRelationVo.addIssueIspVo(ConvertUtil.copyProperties(itrIsp.next(), IssueIspVo.class)); + } + + Set<IssueHosting> issueHostings = relationIssue.getIssueHostingFields(); + Iterator<IssueHosting> itrHosting = issueHostings.iterator(); + while (itrHosting.hasNext()) { + issueRelationVo.addIssueHostingVo(ConvertUtil.copyProperties(itrHosting.next(), IssueHostingVo.class)); + } + issueVo.addIssueRelationVo(issueRelationVo); } } else { @@ -1834,6 +1871,7 @@ issueCustomFieldValueCondition.setUseValue(concatUseValue); issueCustomFieldValueCondition.setUseValues(userValues); issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId()); + issueCustomFieldValueCondition.setIssueStatusType("CLOSE"); List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition); if (results != null && results.size() > 0) { for (Map<String, Object> result : results) { @@ -2058,20 +2096,21 @@ this.checkNotHaveIssueIdAttachedFile(issue, issueForm); // �궗�슜�옄 �젙�쓽 �븘�뱶 ���옣 this.issueCustomFieldValueService.modifyIssueCustomFieldValue(issue, issueForm.getIssueCustomFields()); - // �씠�뒋 �씠�젰 �벑濡� - if (!StringUtils.isEmpty(detectIssueChange.toString())) { - this.issueHistoryService.addIssueHistory(issue, user, IssueHistoryType.MODIFY, detectIssueChange.toString()); - } // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class); log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(userVo, ElasticSearchConstants.ISSUE_MODIFY)); // �뾽泥� �젙蹂� ���옣 - this.issueCompanyService.modifyIssueCompanyField(issue, issueForm); + this.issueCompanyService.modifyIssueCompanyField(issue, issueForm, detectIssueChange); // ISP �젙蹂� ���옣 - this.issueIspService.modifyIssueIspField(issue, issueForm); + this.issueIspService.modifyIssueIspField(issue, issueForm, detectIssueChange); // HOSTING �젙蹂� ���옣 - this.issueHostingService.modifyIssueHostingField(issue, issueForm); + this.issueHostingService.modifyIssueHostingField(issue, issueForm, detectIssueChange); + + // �씠�뒋 �씠�젰 �벑濡� + if (!StringUtils.isEmpty(detectIssueChange.toString())) { + this.issueHistoryService.addIssueHistory(issue, user, IssueHistoryType.MODIFY, detectIssueChange.toString()); + } return issue; } @@ -2799,23 +2838,23 @@ CompanyField companyField = issueCompany.getCompanyField(); if (companyField != null) { issueCompanyVo.setCompanyId(issueCompany.getCompanyField().getId()); - if (issueCompany.getCompanyTypeId() != null) { + if (issueCompany.getCompanyTypeId() != null && issueCompany.getCompanyTypeId() != -1) { CompanyFieldCategory companyType = this.companyFieldCategoryService.find(issueCompany.getCompanyTypeId()); issueCompanyVo.setCompanyTypeName(companyType.getUseValue()); } - if (issueCompany.getParentSectorId() != null) { + if (issueCompany.getParentSectorId() != null && issueCompany.getParentSectorId() != -1) { CompanyFieldCategory parentSector = this.companyFieldCategoryService.find(issueCompany.getParentSectorId()); issueCompanyVo.setParentSectorName(parentSector.getUseValue()); } - if (issueCompany.getChildSectorId() != null) { + if (issueCompany.getChildSectorId() != null && issueCompany.getChildSectorId() != -1) { CompanyFieldCategory childSector = this.companyFieldCategoryService.find(issueCompany.getChildSectorId()); issueCompanyVo.setChildSectorName(childSector.getUseValue()); } - if (issueCompany.getRegionId() != null) { + if (issueCompany.getRegionId() != null && issueCompany.getRegionId() != -1) { CompanyFieldCategory region = this.companyFieldCategoryService.find(issueCompany.getRegionId()); issueCompanyVo.setRegionName(region.getUseValue()); } - if (issueCompany.getStatusId() != null) { + if (issueCompany.getStatusId() != null && issueCompany.getStatusId() != -1) { CompanyFieldCategory status = this.companyFieldCategoryService.find(issueCompany.getStatusId()); issueCompanyVo.setStatusName(status.getUseValue()); } @@ -3301,6 +3340,15 @@ } } + /** + * cell NULL 泥댄겕 �븿�닔 + * @param cell Cell + * @return boolean + */ + private Boolean cellNullCheck (Cell cell) { + return cell != null && cell.getStringCellValue() != null && cell.getCellType() != Cell.CELL_TYPE_BLANK; + } + // �뿊�� �븘�뱶�뿉 �엳�뒗 �젙蹂대�� �씠�뒋 form �쑝濡� �삷湲대떎. private IssueForm setIssueFormToExcelField(Row row, int rowIndex, Map<String, Priority> priorityMaps, Map<String, Severity> severityMaps, Map<String, DepartmentVo> departmentMaps, @@ -3319,7 +3367,7 @@ break; case 1: // �궡�슜 - if (cell != null) { + if (cellNullCheck(cell)) { issueForm.setDescription(CommonUtil.convertExcelStringToCell(cell)); } else { // null �엯�젰 諛⑹� @@ -3343,13 +3391,13 @@ break;*/ case 4: // �떆�옉�씪�쓣 IssueForm �뿉 ���옣�븳�떎. - if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + if (cellNullCheck(cell)) { this.setIssueFormPeriod(cell, issueForm, true, rowIndex); } break; case 5: // 醫낅즺�씪�쓣 IssueForm �뿉 ���옣�븳�떎. - if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + if (cellNullCheck(cell)) { this.setIssueFormPeriod(cell, issueForm, false, rowIndex); } break; @@ -3520,9 +3568,14 @@ case EMAIL: case SITE: case TEL: - if (cellValue.length() > 100) { + if (customField.getCustomFieldType() != INPUT && cellValue.length() > 100) { //INPUT ���엯�� 100�옄 �젣�븳 �뾾�쓬 throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.CUSTOM_FIELD_TEXT_TYPE_MAX_LENGTH_OUT)); + } + + if (customField.getCustomFieldType() == DATETIME) { //DATETIME�씪 寃쎌슦 format 蹂�寃� + Date date = cell.getDateCellValue(); + cellValue = new SimpleDateFormat("yyyy-MM-dd H:mm:ss").format(date); } issueCustomFieldMap.put("customFieldId", customField.getId()); @@ -3668,12 +3721,12 @@ if (emailCommonForm.getSendEmails().size() < 1) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_SEND_USER)); - } else if (emailCommonForm.getIssueId() == null) { - throw new OwlRuntimeException( - this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_EXIST)); } - Issue issue = this.getIssue(emailCommonForm.getIssueId()); + Issue issue = null; + if(emailCommonForm.getIssueId() != null) { + issue = this.getIssue(emailCommonForm.getIssueId()); + } // 諛쒖떊�옄 �몴�떆 User user = this.webAppUtil.getLoginUserObject(); @@ -3690,8 +3743,10 @@ } this.systemEmailService.sendEmail(emailCommonForm.getTitle(), emailCommonForm.getDescription(), sendMails, null); - this.issueHistoryService.detectSendIssueMail(IssueHistoryType.SEND, emailCommonForm.getSendEmails(), sb); - this.issueHistoryService.addIssueHistory(issue, IssueHistoryType.SEND, sb.toString()); + if (issue != null) { + this.issueHistoryService.detectSendIssueMail(IssueHistoryType.SEND, emailCommonForm.getSendEmails(), sb); + this.issueHistoryService.addIssueHistory(issue, IssueHistoryType.SEND, sb.toString()); + } } // �삁�빟 諛쒖깮 �씠�뒋瑜� �떎�뻾�븳�떎 -- Gitblit v1.8.0