From b6be6b9f2d2bfaa73e5ead9f1e6c198a6811399a Mon Sep 17 00:00:00 2001 From: wyu <kknd09321@nate.com> Date: 화, 23 11월 2021 10:28:40 +0900 Subject: [PATCH] 이슈 상세 연관,하위 테이블 표시 설정 - [프론트] --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 154 +++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 118 insertions(+), 36 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 1fdcfc3..1bb3151 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -44,7 +44,6 @@ import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.*; -import java.util.concurrent.locks.Condition; @Service public class IssueServiceImpl extends AbstractServiceImpl<Issue, Long, JpaRepository<Issue, Long>> implements IssueService { @@ -53,6 +52,9 @@ @Autowired private IssueRepository issueRepository; + + @Autowired + private IssueTableConfigService issueTableConfigService; @Autowired private ProjectService projectService; @@ -91,6 +93,15 @@ private IssueCustomFieldValueService issueCustomFieldValueService; @Autowired + private IssueCompanyService issueCompanyService; + + @Autowired + private IssueIspService issueIspService; + + @Autowired + private IssueHostingService issueHostingService; + + @Autowired private IssueUserService issueUserService; @Autowired @@ -104,6 +115,9 @@ @Autowired private UserService userService; + + @Autowired + private DepartmentService departmentService; @Autowired private IssueCommentService issueCommentService; @@ -186,6 +200,8 @@ this.verifyTitle(issueForm.getTitle()); // �궇吏� �쑀�슚�꽦 泥댄겕 this.checkStartCompleteDate(issueForm.getStartDate(), issueForm.getCompleteDate()); + // �떞�떦 遺��꽌 �쑀�슚�꽦 泥댄겕 + this.verifyIssueDepartment(project, issueForm); // �씠�뒋 �긽�깭 �쑀�삎�씠 '��湲�' �씤 �씠�뒋 �긽�깭 媛��졇�삤湲� IssueStatus issueStatus = this.issueStatusService.findByIssueStatusTypeIsReady(issueType.getWorkflow()); @@ -196,22 +212,6 @@ issue.setIssueType(issueType); issue.setPriority(priority); issue.setSeverity(severity); - - // �뾽泥� �븘�뱶 �쑀�슚�꽦 泥댄겕 - if(issueForm.getCompanyId() != null){ - CompanyField companyField = this.companyFieldService.getCompany(issueForm.getCompanyId()); - issue.setCompanyField(companyField); - } - // ISP �븘�뱶 �쑀�슚�꽦 泥댄겕 - if(issueForm.getIspId() != null) { - IspField ispField = this.ispFieldService.getIsp(issueForm.getIspId()); - issue.setIspFieldId(ispField); - } - // HOSTING �븘�뱶 �쑀�슚�꽦 泥댄겕 - if (issueForm.getHostingId() != null){ - HostingField hostingField = this.hostingFieldService.getHosting(issueForm.getHostingId()); - issue.setHostingFieldId(hostingField); - } issue.setIssueNumber(this.issueNumberGeneratorService.generateIssueNumber(project)); // 媛� �봽濡쒖젥�듃�쓽 怨좎쑀 �씠�뒋 踰덊샇 �깮�꽦 @@ -241,6 +241,12 @@ this.reservationIssueEmail(issue.getId(), EmailType.ISSUE_ADD); // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_ADD)); + // �뾽泥� �젙蹂� ���옣 + this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields()); + // ISP �젙蹂� ���옣 + this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields()); + // HOSTING �젙蹂� ���옣 + this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields()); return issue; } @@ -346,6 +352,9 @@ issueMap.put("customFields", customFields); issueMap.put("description", issue.getDescription()); + //�뾽泥�,ISP,HOSTING 異붽� + + StringBuilder attachedFileBuilder = new StringBuilder(); List<AttachedFile> attachedFiles = this.attachedFileService.findByIssueId(issue.getId()); @@ -427,13 +436,13 @@ List<Map<String, Object>> results = this.issueMapper.find(issueCondition); // �뒠�떇 �쟾 - 0.8, 0.9, 0.9, 0.9, 0.9 - StopWatch serviceStart = new StopWatch(); - serviceStart.start(); + /*StopWatch serviceStart = new StopWatch(); + serviceStart.start();*/ Long totalCount = this.issueMapper.count(issueCondition); // �뒠�떇 �쟾 - 1.1, 1.1, 1.3, 1.2 - serviceStart.stop(); - log.debug("serviceENd1 : " + serviceStart.getTime()); + /*serviceStart.stop(); + log.debug("serviceENd1 : " + serviceStart.getTime());*/ int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1; // �씠�뒋 �븘�씠�뵒 珥덇린�솕 @@ -454,7 +463,7 @@ @Override @Transactional(readOnly = true) public List<IssueVo> findChartIssue(Map<String, Object> resJsonData, - IssueCondition issueCondition, Pageable pageable) { + IssueCondition issueCondition, Pageable pageable) { // 寃��깋 議곌굔�쓣 留뚮뱺�떎 if (!this.makeIssueSearchCondition(issueCondition,Lists.newArrayList("01", "02", "03"), pageable)) { @@ -564,9 +573,16 @@ // �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� 異붽� this.setIssueCustomFieldValue(issueVos, issueCondition); + // �뾽泥� �젙蹂� 異붽� + //this.setIssueCompanyField(issueVos, issueCondition); + // ISP �젙蹂� 異붽� + //this.setIssueIspField(issueVos, issueCondition); + // HOSTING �젙蹂� 異붽� + //this.setIssueHostingField(issueVos, issueCondition); + } - // 寃��깋 議곌굔�쓣 留뚮뱺�떎 + // 寃��깋 議곌굔�쓣 留뚮뱺�떎 private boolean makeIssueSearchCondition(IssueCondition condition, List<String> projectStatues, Pageable pageable) { if (pageable != null) { condition.setPage(pageable.getPageNumber() * pageable.getPageSize()); @@ -792,9 +808,6 @@ issueVo.setIssueStatusVo(ConvertUtil.copyProperties(issue.getIssueStatus(), IssueStatusVo.class)); issueVo.setPriorityVo(ConvertUtil.copyProperties(issue.getPriority(), PriorityVo.class)); issueVo.setSeverityVo(ConvertUtil.copyProperties(issue.getSeverity(), SeverityVo.class)); - issueVo.setCompanyFieldVo(ConvertUtil.copyProperties(issue.getCompanyField(), CompanyFieldVo.class)); - issueVo.setIspFieldVo(ConvertUtil.copyProperties(issue.getIspFieldId(), IspFieldVo.class)); - issueVo.setHostingFieldVo(ConvertUtil.copyProperties(issue.getHostingFieldId(), HostingFieldVo.class)); this.setRegister(issue, issueVo); // �벑濡앹옄 �젙蹂� �뀑�똿 //this.setIssueUser(issue, issueVo); // �떞�떦�옄 �젙蹂� �뀑�똿 @@ -836,9 +849,6 @@ issueVo.setIssueStatusVo(issueStatusVo); issueVo.setPriorityVo(ConvertUtil.copyProperties(issue.getPriority(), PriorityVo.class)); issueVo.setSeverityVo(ConvertUtil.copyProperties(issue.getSeverity(), SeverityVo.class)); - issueVo.setCompanyFieldVo(ConvertUtil.copyProperties(issue.getCompanyField(), CompanyFieldVo.class)); - issueVo.setIspFieldVo(ConvertUtil.copyProperties(issue.getIspFieldId(), IspFieldVo.class)); - issueVo.setHostingFieldVo(ConvertUtil.copyProperties(issue.getHostingFieldId(), HostingFieldVo.class)); this.setRegister(issue, issueVo); // �벑濡앹옄 �젙蹂� �뀑�똿 //this.setIssueUser(issue, issueVo); // �떞�떦�옄 �젙蹂� �뀑�똿 this.setIssueDepartment(issue, issueVo); // �떞�떦遺��꽌 �젙蹂� �뀑�똿 @@ -848,6 +858,19 @@ this.setIssueHistory(issue, issueVo); // �씠�뒋 湲곕줉 �젙蹂� �뀑�똿 this.setRelationIssue(issue, issueVo); //�뿰愿� �씪媛� �뀑�똿 this.setDownIssues(issue, issueVo); + this.setIssueCompanyField(issue, issueVo); //�뾽泥� �젙蹂� �꽭�똿 + this.setIssueIspField(issue, issueVo); //ISP �젙蹂� �꽭�똿 + this.setIssueHostingField(issue, issueVo); //HOSTING �젙蹂� �꽭�똿 + this.setParentIssue(issue,issueVo); //�긽�쐞 �씠�뒋 �젙蹂� �꽭�똿 + + } + + + // �긽�쐞�씪媛� �젙蹂� 異붽� + private void setParentIssue(Issue issue, IssueVo issueVo) { + if(issue.getParentIssue() != null){ + issueVo.setParentIssueVo(ConvertUtil.copyProperties(issue.getParentIssue(), IssueVo.class)); + } } // �벑濡앹옄 �젙蹂� 異붽� @@ -935,7 +958,7 @@ for (IssueDepartment issueDepartment : issue.getIssueDepartments()) { DepartmentVo departmentVo = ConvertUtil.copyProperties(issueDepartment.getDepartment(), DepartmentVo.class); - departmentVo.setByName(departmentVo.getByName()); + departmentVo.setByName(departmentVo.getDepartmentName()); departmentVos.add(departmentVo); } issueVo.setDepartmentVos(departmentVos); @@ -1054,9 +1077,15 @@ if (!StringUtils.isEmpty(detectIssueChange.toString())) { this.issueHistoryService.addIssueHistory(issue, IssueHistoryType.MODIFY, detectIssueChange.toString()); } - // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_MODIFY)); + + // �뾽泥� �젙蹂� ���옣 + this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields()); + // ISP �젙蹂� ���옣 + this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields()); + // HOSTING �젙蹂� ���옣 + this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields()); return issue; } @@ -1131,7 +1160,7 @@ // �뜲�씠�꽣 蹂댁젙 �옉�뾽 - �봽濡쒖젥�듃�뿉�꽌 �젣�쇅�맂 �궗�슜�옄�뒗 �떞�떦�옄�뿉�꽌 �젣�쇅 �맆 �닔 �엳�룄濡� 泥섎━ if (!includeProject) { throw new OwlRuntimeException( - this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_USER)); + this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_INCLUDE_DEPARTMENT)); } } // 李몄뿬 �솗�씤�맂 遺��꽌濡� �떞�떦遺��꽌 蹂�寃� @@ -1296,7 +1325,7 @@ } // �씠�뒋 �떞�떦�옄 蹂�寃� - /*@Override + @Override @Transactional public void modifyIssueUser(IssueForm issueForm) { // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. @@ -1329,7 +1358,7 @@ // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(this.webAppUtil.getLoginUser(), ElasticSearchConstants.ISSUE_USER_CHANGE)); - }*/ + } @Override @Transactional @@ -1612,6 +1641,46 @@ } } + // �뾽泥� �젙蹂� 異붽� + private void setIssueCompanyField(Issue issue, IssueVo issueVo) { + List<IssueCompanyVo> issueCompanyVos = Lists.newArrayList(); + + for(IssueCompany issueCompany : issue.getIssueCompanies()){ + IssueCompanyVo issueCompanyVo = ConvertUtil.copyProperties(issueCompany, IssueCompanyVo.class); + issueCompanyVo.setId(issueCompany.getId()); + CompanyField companyField = issueCompany.getCompanyField(); + if (companyField != null) { + issueCompanyVo.setCompanyId(issueCompany.getCompanyField().getId()); + } + issueCompanyVos.add(issueCompanyVo); + } + issueVo.setIssueCompanyVos(issueCompanyVos); + } + + // Isp �젙蹂� 異붽� + private void setIssueIspField(Issue issue, IssueVo issueVo) { + List<IssueIspVo> issueIspVos = Lists.newArrayList(); + + for(IssueIsp issueIsp : issue.getIssueIspFields()){ + IssueIspVo issueIspVo = ConvertUtil.copyProperties(issueIsp, IssueIspVo.class); + issueIspVo.setId(issueIsp.getId()); + issueIspVos.add(issueIspVo); + } + issueVo.setIssueIspVos(issueIspVos); + } + + // Hosting �젙蹂� 異붽� + private void setIssueHostingField(Issue issue, IssueVo issueVo) { + List<IssueHostingVo> issueHostingVos = Lists.newArrayList(); + + for(IssueHosting issueHosting : issue.getIssueHostingFields()){ + IssueHostingVo issueHostingVo = ConvertUtil.copyProperties(issueHosting, IssueHostingVo.class); + issueHostingVo.setId(issueHosting.getId()); + issueHostingVos.add(issueHostingVo); + } + issueVo.setIssueHostingVos(issueHostingVos); + } + // �뿰愿��씪媛� �젙蹂� 異붽� private void setRelationIssue(IssueVo issueVo, Long issueId) { List<IssueVo> relationIssues = this.issueRelationService.findRelationIssue(issueId); @@ -1665,6 +1734,8 @@ result.put("customField_" + issueCustomFieldValueVo.getCustomFieldVo().getId().toString(), useValue + ", " + issueCustomFieldValueVo.getUseValue()); } } + + //�뾽泥�, ISP, �샇�뒪�똿 異붽� results.add(result); } catch (Exception e) { @@ -1751,13 +1822,14 @@ Map<String, Priority> priorityMaps = new HashMap<>(); // �슦�꽑 �닚�쐞 紐⑥쓬 Map<String, Severity> severityMaps = new HashMap<>(); // 以묒슂�룄 紐⑥쓬 Map<String, Object> userMaps = new HashMap<>(); // �궗�슜�옄 紐⑥쓬 + Map<String, Object> departmentMaps = new HashMap<>(); // 遺��꽌 紐⑥쓬 Map<String, CustomField> customFieldMaps = new HashMap<>(); Map<String, IssueStatus> issueStatusReadyMaps = new HashMap<>(); // �긽�깭 �냽�꽦 '��湲�'�씤 �씠�뒋 �긽�깭 Map<Long, Long> issueNumberMaps = new HashMap<>(); // �씠�뒋 踰덊샇 紐⑥쓬 Map<String, Long> issueTypeCustomFieldMaps = new HashMap<>(); // �씠�뒋 ���엯 + �궗�슜�옄 �젙�쓽 �븘�뱶 �뿰寃� �젙蹂� Workspace workspace = this.workspaceService.getWorkspace(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); // �씠�뒋瑜� �꽔�쑝�젮�뒗 �뾽臾� 怨듦컙 // �씠�뒋�쓽 二쇱슂 �냽�꽦�쓣 map �뿉 ���옣�븯�뿬 �뿊�� import �뿉�꽌 吏��젙�븳 ���긽(�씠�뒋 �냽�꽦)�쓣 鍮좊Ⅴ寃� 李얠쓣 �닔 �엳寃� �븳�떎. - this.IssueAttributeMapToList(projectMaps, issueTypeMaps, priorityMaps, severityMaps, userMaps, customFieldMaps, issueNumberMaps, issueTypeCustomFieldMaps, issueStatusReadyMaps); + this.IssueAttributeMapToList(projectMaps, issueTypeMaps, priorityMaps, severityMaps, userMaps, departmentMaps, customFieldMaps, issueNumberMaps, issueTypeCustomFieldMaps, issueStatusReadyMaps); // 0.237 - 0.230 List<IssueForm> issueForms = Lists.newArrayList(); @@ -1829,6 +1901,8 @@ // �씠�뒋 �궗�슜�옄 �젙�쓽 媛� �븘�뱶 踰뚰겕 �벑濡� this.bulkInsertIssueCustomFieldValue(issueForms, issueTypeCustomFieldMaps); // 3.628 - 3.445 + + // �뾽泥�,ISP,�샇�뒪�똿 異붽� /*serviceStart.stop(); log.debug("2李� ���옣 �떆媛� : " + serviceStart.getTime());*/ @@ -1948,7 +2022,7 @@ // �씠�뒋�쓽 二쇱슂 �냽�꽦�쓣 map �뿉 ���옣�븯�뿬 �뿊�� import �뿉�꽌 吏��젙�븳 ���긽(�씠�뒋 �냽�꽦)�쓣 鍮좊Ⅴ寃� 李얠쓣 �닔 �엳寃� �븳�떎. private void IssueAttributeMapToList(Map<String, Project> projectMaps, Map<String, IssueType> issueTypeMaps, Map<String, Priority> priorityMaps, Map<String, Severity> severityMaps, - Map<String, Object> userMaps, Map<String, CustomField> customFieldMaps, Map<Long, Long> issueNumberMaps, Map<String, Long> issueTypeCustomFieldMaps, Map<String, IssueStatus> issueStatusReadyMaps) { + Map<String, Object> userMaps, Map<String, Object> departmentMaps, Map<String, CustomField> customFieldMaps, Map<Long, Long> issueNumberMaps, Map<String, Long> issueTypeCustomFieldMaps, Map<String, IssueStatus> issueStatusReadyMaps) { // �봽濡쒖젥�듃 �궎濡� 諛붾줈 李얠쓣 �닔 �엳寃� 以�鍮� List<Project> projects = this.projectService.findByWorkspaceId(); List<Long> projectIds = Lists.newArrayList(); @@ -1974,6 +2048,14 @@ } userMaps.put(project.getProjectKey(), userMap); + + // �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 遺��꽌 �젙蹂� + List<Map<String, Object>> departments = this.departmentService.findProjectDepartment(project); + List<Long> departmentList = Lists.newArrayList(); + // 遺��꽌 �젙蹂대�� ���옣 + for (Map<String, Object> department : departments) { + departmentList.add(MapUtil.getLong(department, "departmentId")); + } } // �씠�뒋 �쑀�삎�쓣 諛붾줈 李얠쓣 �닔 �엳寃� 以�鍮� -- Gitblit v1.8.0