From b548d49284bc36f5016cba913bb6ac55d8a5e340 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 금, 28 1월 2022 17:40:12 +0900 Subject: [PATCH] 엑셀 임포트 시 코드 수정 --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 343 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 270 insertions(+), 73 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 4ec7642..62f8272 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 { @@ -352,17 +356,17 @@ if(companyFields != null && companyFields.size() > 0) { for (Map<String, Object> companyField : companyFields) { CompanyFieldVo companyFieldVo = ConvertUtil.convertMapToClass(companyField, CompanyFieldVo.class); - if(useValue.equals(companyFieldVo.getUrl())) { + if(companyFieldVo.getUrl() != null && useValue.equals(companyFieldVo.getUrl())) { companyField.put("companyId", companyField.get("id")); issueCompanyFields.add(companyField); - if(companyFieldVo.getIspId() != null) { + if(companyFieldVo.getIspId() != null && companyFieldVo.getIspId() != -1) { Map<String, Object> ispField = this.ispFieldService.find(companyFieldVo.getIspId()); if (ispField != null) { ispField.put("ispId", ispField.get("id")); issueIspFields.add(ispField); } } - if(companyFieldVo.getHostingId() != null) { + if(companyFieldVo.getHostingId() != null && companyFieldVo.getHostingId() != -1) { Map<String, Object> hostingField = this.hostingFieldService.find(companyFieldVo.getHostingId()); if (hostingField != null) { hostingField.put("hostingId", hostingField.get("id")); @@ -486,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()); // �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕 @@ -528,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 媛앹껜濡� 蹂�寃쏀븳�떎. @@ -579,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()); // �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕 @@ -621,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 媛앹껜濡� 蹂�寃쏀븳�떎. @@ -656,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()); // �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕 @@ -698,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 媛앹껜濡� 蹂�寃쏀븳�떎. @@ -804,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())); @@ -1608,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"); @@ -1643,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); - } } // �긽�쐞�씪媛� �젙蹂� 異붽� @@ -2087,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; } @@ -2745,6 +2755,9 @@ excelInfo.addAttrInfos(new ExportExcelAttrVo("register", this.messageAccessor.message("common.register"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �벑濡앹옄 excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 湲곌컙 excelInfo.addAttrInfos(new ExportExcelAttrVo("modifyDate", this.messageAccessor.message("common.modifyDate"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 理쒖쥌 蹂�寃쎌씪 + excelInfo.addAttrInfos(new ExportExcelAttrVo("companyName", this.messageAccessor.message("common.company"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽泥� + excelInfo.addAttrInfos(new ExportExcelAttrVo("ispName", this.messageAccessor.message("common.isp"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // ISP + excelInfo.addAttrInfos(new ExportExcelAttrVo("hostingName", this.messageAccessor.message("common.hosting"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �샇�뒪�똿 // �궗�슜�옄 �젙�쓽 �븘�뱶瑜� �궗�슜�븳 �씠�뒋瑜� 李얜뒗�떎. 留뚯빟 �씠�뒋媛� �뾾�떎硫� �뿬湲곗꽌 �씠�뒋 議고쉶媛� �걹�궃�떎. @@ -2845,8 +2858,12 @@ issueCompanyVo.setRegionName(region.getUseValue()); } if (issueCompany.getStatusId() != null && issueCompany.getStatusId() != -1) { - CompanyFieldCategory status = this.companyFieldCategoryService.find(issueCompany.getStatusId()); - issueCompanyVo.setStatusName(status.getUseValue()); + if (issueCompany.getStatusName() != null && !issueCompany.getStatusName().equals("")) { + issueCompanyVo.setStatusName(issueCompany.getStatusName()); + } else { + CompanyFieldCategory status = this.companyFieldCategoryService.find(issueCompany.getStatusId()); + issueCompanyVo.setStatusName(status.getUseValue()); + } } } issueCompanyVos.add(issueCompanyVo); @@ -2917,6 +2934,9 @@ result.put("departments", CommonUtil.convertDepartmentVosToString(issueVo.getDepartmentVos())); result.put("priorityName", issueVo.getPriorityName()); result.put("severityName", issueVo.getSeverityName()); + result.put("companyName", issueVo.getCompanyName()); + result.put("ispName", issueVo.getIspName()); + result.put("hostingName", issueVo.getHostingName()); UserVo register = this.userService.removeSensitiveUser(issueVo.getRegisterId()); // �벑濡앹옄 @@ -2994,6 +3014,9 @@ excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.importance"), 5, ExportExcelAttrVo.ALIGN_CENTER)); // 以묒슂�룄 excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.startDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �떆�옉�씪 excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.endDate"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // 醫낅즺�씪 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.company"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽泥� + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.isp"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // ISP + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("common.hosting"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �샇�뒪�똿 // �봽濡쒖젥�듃�뿉 �뿰寃곕맂 �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� 異붿텧�븯�뿬 �뿊�� download �뀥�뵆由우쓣 留뚮뱺�떎. this.makeIssueExcelTemplateCustomFields(excelInfo, conditions); // �뿊���뿉 �꽔�쓣 �뜲�씠�꽣 - IssueVos �뜲�씠�꽣瑜� �뿊���뿉�꽌 �몴�떆�븷 �닔 �엳�뒗 �뜲�씠�꽣濡� 蹂�寃쏀븳�떎. @@ -3033,9 +3056,14 @@ Map<Long, Long> issueNumberMaps = new HashMap<>(); // �씠�뒋 踰덊샇 紐⑥쓬 Map<String, Long> issueTypeCustomFieldMaps = new HashMap<>(); // �씠�뒋 ���엯 + �궗�슜�옄 �젙�쓽 �븘�뱶 �뿰寃� �젙蹂� + Map<String, CompanyField> companyFieldMaps = new HashMap<>(); //�뾽泥� 紐⑥쓬 + Map<String, IspField> ispFieldMaps = new HashMap<>(); //isp 紐⑥쓬 + Map<String, HostingField> hostingFieldMaps = new HashMap<>(); //�샇�뒪�똿 紐⑥쓬 + Workspace workspace = this.workspaceService.getWorkspace(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); // �씠�뒋瑜� �꽔�쑝�젮�뒗 �뾽臾� 怨듦컙 // �씠�뒋�쓽 二쇱슂 �냽�꽦�쓣 map �뿉 ���옣�븯�뿬 �뿊�� import �뿉�꽌 吏��젙�븳 ���긽(�씠�뒋 �냽�꽦)�쓣 鍮좊Ⅴ寃� 李얠쓣 �닔 �엳寃� �븳�떎. - this.IssueAttributeMapToList(issueForm, priorityMaps, severityMaps, departmentMaps, customFieldMaps, issueTypeCustomFieldMaps); + this.IssueAttributeMapToList(issueForm, priorityMaps, severityMaps, departmentMaps, customFieldMaps, + issueTypeCustomFieldMaps, companyFieldMaps, ispFieldMaps, hostingFieldMaps); // 0.237 - 0.230 List<IssueForm> issueForms = Lists.newArrayList(); @@ -3078,14 +3106,11 @@ // 1踰� �뿤�뜑遺��꽣 �뜲�씠�꽣 �쁺�뿭 if (rowIndex > 1) { // �씠�뒋濡� �벑濡앺븯湲� �쐞�빐 IssueForm �뿉 �뜲�씠�꽣瑜� �뀑�똿�븳�떎. - IssueForm newIssueForm = this.setIssueFormToExcelField(row, (rowIndex + 1), priorityMaps, severityMaps, departmentMaps, customFieldMaps, headers); + IssueForm newIssueForm = this.setIssueFormToExcelField(row, (rowIndex + 1), priorityMaps, severityMaps, departmentMaps, customFieldMaps, + companyFieldMaps, ispFieldMaps, hostingFieldMaps, headers); ConvertUtil.copyProperties(issueForm, newIssueForm); - - issueForms.add(newIssueForm); - - } } @@ -3137,6 +3162,8 @@ } saveIssueForm.setIssueStatusId(issueStatus.getId()); + + this.setIssuePartners(saveIssueForm, issue); } @@ -3150,7 +3177,7 @@ // �씠�뒋 �떞�떦�옄 踰뚰겕 �벑濡� this.bulkInsertIssueAssignee(issueForms, workspace); // 0.361 - 0.705 - + // 1.816 /*StopWatch serviceStart = new StopWatch(); serviceStart.start();*/ @@ -3169,6 +3196,69 @@ // 利앷��맂 �씠�뒋 踰덊샇瑜� �뾽�뜲�씠�듃 �븳�떎. // issueNumberMaps.put(issueForm.getProjectId(), issueForm.getProjectId()); // this.issueNumberGeneratorService.updateIssueNumber(issueNumberMaps); + } + } + + /** + * �뿊��濡� �엯�젰�븳 �뙆�듃�꼫 �젙蹂� ���옣 + * @param issueForm IssueForm + */ + private void setIssuePartners(IssueForm issueForm, Issue issue) { + IssueCompany issueCompany = new IssueCompany(); + IssueIsp issueIsp = new IssueIsp(); + IssueHosting issueHosting = new IssueHosting(); + //issueCompany �벑濡� + if (issueForm.getIssueCompanyFields() != null && issueForm.getIssueCompanyFields().size() > 0) { + for (Map<String, Object> issueCompanyMap : issueForm.getIssueCompanyFields()) { + CompanyField companyField = ConvertUtil.convertMapToClass(issueCompanyMap, CompanyField.class); + issueCompany = ConvertUtil.convertMapToClass(issueCompanyMap, IssueCompany.class, "id"); + issueCompany.setCompanyField(companyField); + issueCompany.setIssue(issue); + this.issueCompanyRepository.saveAndFlush(issueCompany); + + // �궗�슜�옄媛� ISP瑜� 吏곸젒 �엯�젰�븯吏� �븡�븯�쓣 寃쎌슦 �뾽泥댁뿉 �벑濡앸릺�뼱�엳�뒗 ISP �꽕�젙 + if (issueForm.getIssueIspFields() == null || issueForm.getIssueIspFields().size() < 1) { + // �뾽泥댁쓽 ISP媛� �엳�뒗 寃쎌슦 issueISP �벑濡� + if (companyField.getIspId() != null && companyField.getIspId() != -1) { + IspField ispField = this.ispFieldService.getIsp(companyField.getIspId()); + issueIsp = ConvertUtil.copyProperties(ispField, IssueIsp.class, "id"); + issueIsp.setIspField(ispField); + issueIsp.setIssue(issue); + this.issueIspRepository.saveAndFlush(issueIsp); + } + } + // �궗�슜�옄媛� �샇�뒪�똿�쓣 吏곸젒 �엯�젰�븯吏� �븡�븯�쓣 寃쎌슦 �뾽泥댁뿉 �벑濡앸릺�뼱�엳�뒗 �샇�뒪�똿 �꽕�젙 + if (issueForm.getIssueHostingFields() == null || issueForm.getIssueHostingFields().size() < 1) { + // �뾽泥댁쓽 �샇�뒪�똿�씠 �엳�뒗 寃쎌슦 issueHosting �벑濡� + if (companyField.getHostingId() != null && companyField.getHostingId() != -1) { + HostingField hostingField = this.hostingFieldService.getHosting(companyField.getHostingId()); + issueHosting = ConvertUtil.copyProperties(hostingField, IssueHosting.class, "id"); + issueHosting.setHostingField(hostingField); + issueHosting.setIssue(issue); + this.issueHostingRepository.saveAndFlush(issueHosting); + } + } + } + } + //issueIsp �벑濡� + if (issueForm.getIssueIspFields() != null && issueForm.getIssueIspFields().size() > 0) { + for (Map<String, Object> issueIspMap : issueForm.getIssueIspFields()) { + issueIsp = ConvertUtil.convertMapToClass(issueIspMap, IssueIsp.class, "id"); + IspField ispField = ConvertUtil.convertMapToClass(issueIspMap, IspField.class); + issueIsp.setIspField(ispField); + issueIsp.setIssue(issue); + this.issueIspRepository.saveAndFlush(issueIsp); + } + } + //issueHosting �벑濡� + if (issueForm.getIssueHostingFields() != null && issueForm.getIssueHostingFields().size() > 0) { + for (Map<String, Object> issueHostingMap : issueForm.getIssueHostingFields()) { + issueHosting = ConvertUtil.convertMapToClass(issueHostingMap, IssueHosting.class, "id"); + HostingField hostingField = ConvertUtil.convertMapToClass(issueHostingMap, HostingField.class); + issueHosting.setHostingField(hostingField); + issueHosting.setIssue(issue); + this.issueHostingRepository.saveAndFlush(issueHosting); + } } } @@ -3269,27 +3359,39 @@ issueCustomField.put("registerId", this.webAppUtil.getLoginId()); issueCustomFieldValueMaps.add(issueCustomField); } - IssueForm partners = this.findCompanyField(issueForm); // 媛숈� �룄硫붿씤 �뾽泥� 李얘린 - Issue issue = this.findOne(issueForm.getId()); - if (partners.getIssueCompanyFields() != null && partners.getIssueCompanyFields().size() > 0) { - for (Map<String, Object> company : partners.getIssueCompanyFields()) { - IssueCompany issueCompany = ConvertUtil.convertMapToClass(company, IssueCompany.class); - issueCompany.setIssue(issue); - this.issueCompanyRepository.saveAndFlush(issueCompany); + + // �뿊���뿉 �뾽泥대챸�쓣 �엯�젰�븯吏� �븡�븯�쓣 寃쎌슦 媛숈� �룄硫붿씤 �뾽泥� 李얘린 + if (issueForm.getIssueCompanyFields() == null || issueForm.getIssueCompanyFields().size() < 1) { + // 媛숈� �룄硫붿씤 �뾽泥� 李얘린 + IssueForm partners = this.findCompanyField(issueForm); + Issue issue = this.findOne(issueForm.getId()); + if (partners.getIssueCompanyFields() != null && partners.getIssueCompanyFields().size() > 0) { + for (Map<String, Object> company : partners.getIssueCompanyFields()) { + IssueCompany issueCompany = ConvertUtil.convertMapToClass(company, IssueCompany.class); + CompanyField companyField = ConvertUtil.convertMapToClass(company, CompanyField.class); + issueCompany.setCompanyField(companyField); + issueCompany.setIssue(issue); + + this.issueCompanyRepository.saveAndFlush(issueCompany); + } } - } - if (partners.getIssueIspFields() != null && partners.getIssueIspFields().size() > 0) { - for (Map<String, Object> isp : partners.getIssueIspFields()) { - IssueIsp issueIsp = ConvertUtil.convertMapToClass(isp, IssueIsp.class); - issueIsp.setIssue(issue); - this.issueIspRepository.saveAndFlush(issueIsp); + if (partners.getIssueIspFields() != null && partners.getIssueIspFields().size() > 0) { + for (Map<String, Object> isp : partners.getIssueIspFields()) { + IssueIsp issueIsp = ConvertUtil.convertMapToClass(isp, IssueIsp.class); + IspField ispField = ConvertUtil.convertMapToClass(isp, IspField.class); + issueIsp.setIspField(ispField); + issueIsp.setIssue(issue); + this.issueIspRepository.saveAndFlush(issueIsp); + } } - } - if (partners.getIssueHostingFields() != null && partners.getIssueHostingFields().size() > 0) { - for (Map<String, Object> hosting : partners.getIssueHostingFields()) { - IssueHosting issueHosting = ConvertUtil.convertMapToClass(hosting, IssueHosting.class); - issueHosting.setIssue(issue); - this.issueHostingRepository.saveAndFlush(issueHosting); + if (partners.getIssueHostingFields() != null && partners.getIssueHostingFields().size() > 0) { + for (Map<String, Object> hosting : partners.getIssueHostingFields()) { + IssueHosting issueHosting = ConvertUtil.convertMapToClass(hosting, IssueHosting.class); + HostingField hostingField = ConvertUtil.convertMapToClass(hosting, HostingField.class); + issueHosting.setHostingField(hostingField); + issueHosting.setIssue(issue); + this.issueHostingRepository.saveAndFlush(issueHosting); + } } } } @@ -3301,7 +3403,8 @@ // �씠�뒋�쓽 二쇱슂 �냽�꽦�쓣 map �뿉 ���옣�븯�뿬 �뿊�� import �뿉�꽌 吏��젙�븳 ���긽(�씠�뒋 �냽�꽦)�쓣 鍮좊Ⅴ寃� 李얠쓣 �닔 �엳寃� �븳�떎. private void IssueAttributeMapToList(IssueForm issueForm, Map<String, Priority> priorityMaps, Map<String, Severity> severityMaps, - Map<String, DepartmentVo> departmentMaps, Map<String, CustomField> customFieldMaps,Map<String, Long> issueTypeCustomFieldMaps) { + Map<String, DepartmentVo> departmentMaps, Map<String, CustomField> customFieldMaps,Map<String, Long> issueTypeCustomFieldMaps, + Map<String, CompanyField> companyFieldMaps, Map<String, IspField> ispFieldMaps, Map<String, HostingField> hostingFieldMaps) { Project project = this.projectService.getProject(issueForm.getProjectId()); @@ -3328,12 +3431,42 @@ for (CustomField customField : customFields) { customFieldMaps.put(customField.getName(), customField); } + + // �뾽泥� �젙蹂대�� 諛붾줈 李얠쓣 �닔 �엳寃� 以�鍮� + List<CompanyField> companyFields = this.companyFieldService.findAll(); + for (CompanyField companyField : companyFields) { + companyFieldMaps.put(companyField.getName(), companyField); + } + // ISP �젙蹂대�� 諛붾줈 李얠쓣 �닔 �엳寃� 以�鍮� + List<IspField> ispFields = this.ispFieldService.findAll(); + for (IspField ispField : ispFields) { + ispFieldMaps.put(ispField.getName(), ispField); + } + // �샇�뒪�똿 �젙蹂대�� 諛붾줈 李얠쓣 �닔 �엳寃� 以�鍮� + List<HostingField> hostingFields = this.hostingFieldService.findAll(); + for (HostingField hostingField : hostingFields) { + hostingFieldMaps.put(hostingField.getName(), hostingField); + } + } + + /** + * cell NULL 泥댄겕 �븿�닔 + * @param cell Cell + * @return boolean + */ + private Boolean cellNullCheck (Cell cell) { + if (cell != null && cell.getStringCellValue() != null) { + cell.setCellValue(cell.getStringCellValue().trim());//�� 媛� 怨듬갚 �젣嫄� + } + return cell != null && cell.getStringCellValue() != null && !cell.getStringCellValue().equals("") && 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, - Map<String, CustomField> customFieldMaps, List<String> headers) { + Map<String, CustomField> customFieldMaps, Map<String, CompanyField> companyFieldMaps, + Map<String, IspField> ispFieldMaps, Map<String, HostingField> hostingFieldMaps, + List<String> headers) { IssueForm issueForm = new IssueForm(); issueForm.setRegisterId(this.webAppUtil.getLoginId()); Project project = null; @@ -3348,7 +3481,7 @@ break; case 1: // �궡�슜 - if (cell != null) { + if (cellNullCheck(cell)) { issueForm.setDescription(CommonUtil.convertExcelStringToCell(cell)); } else { // null �엯�젰 諛⑹� @@ -3372,14 +3505,32 @@ 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; + case 6: + // �뾽泥대�� IssueForm �뿉 ���옣�븳�떎. + if (cellNullCheck(cell)) { + this.setIssueFormCompanyField(cell, companyFieldMaps, issueForm, rowIndex); + } + break; + case 7: + // ISP瑜� IssueForm �뿉 ���옣�븳�떎. + if (cellNullCheck(cell)) { + this.setIssueFormIspField(cell, ispFieldMaps, issueForm, rowIndex); + } + break; + case 8: + // �샇�뒪�똿�쓣 IssueForm �뿉 ���옣�븳�떎. + if (cellNullCheck(cell)) { + this.setIssueFormHostingField(cell, hostingFieldMaps, issueForm, rowIndex); } break; default: @@ -3391,9 +3542,48 @@ return issueForm; } + private void setIssueFormHostingField(Cell cell, Map<String, HostingField> hostingFieldMaps, IssueForm issueForm, int rowIndex) { + if (cell != null) { + Map<String, Object> issueHostingFields = new HashMap<>(); + HostingField hostingFieldMap = hostingFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (hostingFieldMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HOSTING_NOT_EXIST, rowIndex)); + } + ConvertUtil.copyProperties(hostingFieldMap, issueHostingFields); + issueForm.addIssueHostingField(issueHostingFields); + } + } + + private void setIssueFormIspField(Cell cell, Map<String, IspField> ispFieldMaps, IssueForm issueForm, int rowIndex) { + if (cell != null) { + Map<String, Object> issueIspFields = new HashMap<>(); + IspField ispFieldMap = ispFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (ispFieldMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISP_NOT_EXIST, rowIndex)); + } + ConvertUtil.copyProperties(ispFieldMap, issueIspFields); + issueForm.addIssueIspField(issueIspFields); + } + } + + private void setIssueFormCompanyField(Cell cell, Map<String, CompanyField> companyFieldMaps, IssueForm issueForm, int rowIndex) { + if (cell != null) { + Map<String, Object> issueCompanyFields = new HashMap<>(); + CompanyField companyFieldMap = companyFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (companyFieldMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_COMPANY_NOT_EXIST, rowIndex)); + } + ConvertUtil.copyProperties(companyFieldMap, issueCompanyFields); + issueForm.addissueCompanyField(issueCompanyFields); + } + } + // �씠�뒋 �젣紐⑹쓣 IssueForm �뿉 ���옣�븳�떎. private void setIssueFormTitle(Cell cell, IssueForm issueForm, int rowIndex) { - if (cell == null) { + if (!cellNullCheck(cell)) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISSUE_TITLE_IS_NULL, rowIndex)); } @@ -3441,7 +3631,7 @@ // �슦�꽑�닚�쐞瑜� IssueForm �뿉 ���옣�븳�떎. private void setIssueFormPriority(Cell cell, Map<String, Priority> priorityMaps, IssueForm issueForm, int rowIndex) { - if (cell == null) { + if (!cellNullCheck(cell)) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PRIORITY_IS_NULL, rowIndex)); } @@ -3458,7 +3648,7 @@ // 以묒슂�룄瑜� IssueForm �뿉 ���옣�븳�떎. private void setIssueFormSeverity(Cell cell, Map<String, Severity> severityMaps, IssueForm issueForm, int rowIndex) { - if (cell == null) { + if (!cellNullCheck(cell)) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_SEVERITY_IS_NULL, rowIndex)); } @@ -3525,7 +3715,7 @@ // �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.- private void setIssueFormCustomFieldValue(Cell cell, Map<String, CustomField> customFieldMaps, IssueForm issueForm, String customFieldName, int rowIndex) { - if (cell != null) { + if (!cellNullCheck(cell)) { String cellValue = CommonUtil.convertExcelStringToCell(cell); Map<String, Object> issueCustomFieldMap = new HashMap<>(); CustomField customField = customFieldMaps.get(customFieldName); @@ -3549,9 +3739,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()); @@ -3659,7 +3854,7 @@ // �씠�뒋瑜� �뀥�뵆由우뿉 �뵲�씪 �뙆�듃�꼫 �떞�떦�옄�뿉寃� 硫붿씪濡� 諛쒖넚�븳�떎. @Override @Transactional(readOnly = true) - public void sendIssueEmailPartners(EmailTemplateForm emailTemplateForm) { + public void sendIssueEmailPartners(EmailTemplateForm emailTemplateForm, List<MultipartFile> multipartFiles) { if (emailTemplateForm.getSendEmails().size() < 1) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_SEND_USER)); @@ -3686,23 +3881,23 @@ for(int i=0; i < sendMails.length; i++) { sendMails[i] = CommonUtil.decryptAES128(sendMails[i]); } - this.systemEmailService.sendEmail(emailTemplateForm.getTitle(), emailTemplateForm.getTemplate(), sendMails, null); + this.systemEmailService.sendEmail(emailTemplateForm.getTitle(), emailTemplateForm.getTemplate(), sendMails, null, multipartFiles); this.issueHistoryService.detectSendIssueMail(IssueHistoryType.SEND, emailTemplateForm.getSendEmails(), sb); this.issueHistoryService.addIssueHistory(issue, IssueHistoryType.SEND, sb.toString()); } @Override - public void sendCommonEmail(EmailCommonForm emailCommonForm) { + public void sendCommonEmail(EmailCommonForm emailCommonForm, List<MultipartFile> multipartFiles) { 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(); @@ -3717,10 +3912,12 @@ for(int i=0; i < sendMails.length; i++) { sendMails[i] = CommonUtil.decryptAES128(sendMails[i]); } - this.systemEmailService.sendEmail(emailCommonForm.getTitle(), emailCommonForm.getDescription(), sendMails, null); + this.systemEmailService.sendEmail(emailCommonForm.getTitle(), emailCommonForm.getDescription(), sendMails, null, multipartFiles); - 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