From 836af5be0ec8b59171d7c7ffa392a6bd234f0af7 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 수, 12 1월 2022 20:24:51 +0900 Subject: [PATCH] 업체 정보 일괄 import 기능 --- src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java | 417 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 416 insertions(+), 1 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java index e26401b..01602a2 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java @@ -1,14 +1,17 @@ package kr.wisestone.owl.service.impl; import kr.wisestone.owl.domain.*; +import kr.wisestone.owl.domain.enumType.CompanyFieldCategoryType; import kr.wisestone.owl.repository.HostingFieldRepository; import kr.wisestone.owl.repository.IspFieldRepository; import kr.wisestone.owl.service.*; import kr.wisestone.owl.util.CommonUtil; -import kr.wisestone.owl.web.condition.CompanyFieldCategoryCondition; +import kr.wisestone.owl.util.MapUtil; import kr.wisestone.owl.web.condition.CompanyFieldCondition; import kr.wisestone.owl.web.form.CompanyFieldForm; +import kr.wisestone.owl.web.form.IssueForm; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.*; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import com.google.common.collect.Lists; @@ -25,6 +28,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; @@ -70,6 +74,9 @@ protected JpaRepository<CompanyField, Long> getRepository() { return this.companyFieldRepository; } + + private static final int EXCEL_DOWNLOAD_MAX_ROWS = 10000; // excel download �젣�븳 + private static final int EXCEL_IMPORT_MAX_ROWS = 10000; // excel import �젣�븳 // �뾽泥� 異붽� @Override @@ -222,6 +229,414 @@ } } + // �뾽泥� Import �슜 �뿊�� �뀥�뵆由� �떎�슫濡쒕뱶 + @Override + @Transactional + public ModelAndView downloadExcelTemplate(HttpServletRequest request, Model model) { + + ExportExcelVo excelInfo = new ExportExcelVo(); + excelInfo.setHideCount(true); + excelInfo.setFileName(this.messageAccessor.message("common.registerExcelCompanyField")); // �뿊��濡� �뾽泥� �벑濡앺븯湲� + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽泥대챸 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyUrl"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // url + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("isp.ispName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // isp紐� + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("Hosting.HostingName"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // �샇�뒪�똿紐� + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyTel"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �뿰�씫泥� + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyEmail"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �씠硫붿씪 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyManager"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �떞�떦�옄 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyTypeName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // 湲곗뾽援щ텇 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.parentSectorName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽醫�(��遺꾨쪟) + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.childSectorName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �뾽醫�(以묐텇瑜�) + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.regionName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // 吏��뿭 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.statusName"), 10, ExportExcelAttrVo.ALIGN_CENTER)); // �긽�깭 + excelInfo.addAttrInfos(new ExportExcelAttrVo("id", this.messageAccessor.message("companyField.companyMemo"), 40, ExportExcelAttrVo.ALIGN_CENTER)); // 鍮꾧퀬 + + // �뿊���뿉 �꽔�쓣 �뜲�씠�꽣 - CompanyFieldVos �뜲�씠�꽣瑜� �뿊���뿉�꽌 �몴�떆�븷 �닔 �엳�뒗 �뜲�씠�꽣濡� 蹂�寃쏀븳�떎. + excelInfo.setDatas(Lists.newArrayList(new CompanyFieldVo())); + + model.addAttribute(Constants.EXCEL, excelInfo); + return new ModelAndView(this.excelView); + } + + // �뾽濡쒕뱶 �뙆�씪 �솗�옣�옄 泥댄겕 + private void verifyMultipartFileExtension(MultipartFile multipartFile) { + multipartFile.getOriginalFilename(); + + int pos = multipartFile.getOriginalFilename().lastIndexOf("."); + String ext = multipartFile.getOriginalFilename().substring(pos + 1); + + if (!ext.equals("xlsx")) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.EXCEL_NOT_EXTENSION)); + } + } + + // �뾽泥댁쓽 二쇱슂 �냽�꽦�쓣 map �뿉 ���옣�븯�뿬 �뿊�� import �뿉�꽌 吏��젙�븳 ���긽(�뾽泥� �냽�꽦)�쓣 鍮좊Ⅴ寃� 李얠쓣 �닔 �엳寃� �븳�떎. + private void CompanyFieldAttributeMapToList(Map<String, IspField> ispFieldMaps, Map<String, HostingField> hostingFieldMaps, + Map<String, Map<String, Object>> companyTypeMaps, Map<String, Map<String, Object>> parentSectorMaps, + Map<String, Map<String, Object>> childSectorMaps, Map<String, Map<String, Object>> regionMaps, Map<String, Map<String, Object>> statusMaps) { + + 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); + } + + List<Map<String, Object>> companyTypes = this.companyFieldCategoryService.findByType(CompanyFieldCategoryType.COMPANYTYPE); + for (Map<String, Object> companyType : companyTypes) { + companyTypeMaps.put(MapUtil.getString(companyType, "useValue"), companyType); + } + + List<Map<String, Object>> parentSectors = this.companyFieldCategoryService.findByType(CompanyFieldCategoryType.PARENTSECTOR); + for (Map<String, Object> parentSector : parentSectors) { + parentSectorMaps.put(MapUtil.getString(parentSector, "useValue"), parentSector); + } + + List<Map<String, Object>> childSectors = this.companyFieldCategoryService.findByType(CompanyFieldCategoryType.CHILDSECTOR); + for (Map<String, Object> childSector : childSectors) { + childSectorMaps.put(MapUtil.getString(childSector, "useValue"), childSector); + } + + List<Map<String, Object>> regions = this.companyFieldCategoryService.findByType(CompanyFieldCategoryType.REGION); + for (Map<String, Object> region : regions) { + regionMaps.put(MapUtil.getString(region, "useValue"), region); + } + + List<Map<String, Object>> statuses = this.companyFieldCategoryService.findByType(CompanyFieldCategoryType.STATUS); + for (Map<String, Object> status : statuses) { + statusMaps.put(MapUtil.getString(status, "useValue"), status); + } + } + + // �뿊�� import 濡� �씠�뒋瑜� �벑濡앺븳�떎. + @Override + @Transactional + public void importExcel(MultipartFile multipartFile) throws Exception { + // �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎. + this.workspaceService.checkUseWorkspace(); + + if (multipartFile != null) { + // �뾽濡쒕뱶 �뙆�씪 �솗�옣�옄 泥댄겕 + this.verifyMultipartFileExtension(multipartFile); + + Map<String, IspField> ispFieldMaps = new HashMap<>(); // ISP 紐⑥쓬 + Map<String, HostingField> hostingFieldMaps = new HashMap<>(); // �샇�뒪�똿 紐⑥쓬 + Map<String, Map<String, Object>> companyTypeMaps = new HashMap<>(); // 移댄뀒怨좊━ 紐⑥쓬 + Map<String, Map<String, Object>> parentSectorMaps = new HashMap<>(); // 移댄뀒怨좊━ 紐⑥쓬 + Map<String, Map<String, Object>> childSectorMaps = new HashMap<>(); // 移댄뀒怨좊━ 紐⑥쓬 + Map<String, Map<String, Object>> regionMaps = new HashMap<>(); // 移댄뀒怨좊━ 紐⑥쓬 + Map<String, Map<String, Object>> statusMaps = new HashMap<>(); // 移댄뀒怨좊━ 紐⑥쓬 + + // �뾽泥댁쓽 二쇱슂 �냽�꽦�쓣 map �뿉 ���옣�븯�뿬 �뿊�� import �뿉�꽌 吏��젙�븳 ���긽(�씠�뒋 �냽�꽦)�쓣 鍮좊Ⅴ寃� 李얠쓣 �닔 �엳寃� �븳�떎. + this.CompanyFieldAttributeMapToList(ispFieldMaps, hostingFieldMaps, companyTypeMaps, parentSectorMaps, childSectorMaps, regionMaps, statusMaps); + // 0.237 - 0.230 + + List<CompanyFieldForm> companyFieldForms = Lists.newArrayList(); + List<String> headers = Lists.newArrayList(); + + Workbook workbook; + + workbook = WorkbookFactory.create(multipartFile.getInputStream()); + Sheet sheet = workbook.getSheetAt(0); + int lastRowNum = sheet.getLastRowNum() + 1; + + // 2嫄� - �젣紐�, �뿤�뜑 - �꽦�뒫�쓣 �쐞�빐 理쒕� 1留뚭굔�쑝濡� �젣�븳 + if (lastRowNum > (EXCEL_IMPORT_MAX_ROWS + 2)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_MAX_ROWS_OVER)); + } + + for (int rowIndex = 0; rowIndex < lastRowNum; rowIndex++) { + // 0踰덉� �뿤�뜑�뒗 臾댁떆�븳�떎. + Row row = sheet.getRow(rowIndex); + // �뿤�뜑 �젙蹂대�� 異붿텧�븳�떎 - �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� 媛��졇�삤湲� �쐞�빐 + if (rowIndex == 1) { + for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) { + Cell cell = row.getCell(cellIndex); + + if (cell == null) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.EXCEL_EMPTY_CELL)); + } + + // �뿊�� import �뜲�씠�꽣�뿉�꽌 cell 媛믪쓣 臾몄옄�뿴濡� 蹂��솚�븳�떎. + String cellValue = CommonUtil.convertExcelStringToCell(cell); + + if (StringUtils.isEmpty(cellValue)) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.EXCEL_HEADER_EMPTY_CELL)); + } + + headers.add(cellValue); + } + } + + // 1踰� �뿤�뜑遺��꽣 �뜲�씠�꽣 �쁺�뿭 + if (rowIndex > 1) { + // �뾽泥대줈 �벑濡앺븯湲� �쐞�빐 CompanyFieldForm �뿉 �뜲�씠�꽣瑜� �뀑�똿�븳�떎. + CompanyFieldForm newCompanyFieldForm = this.setCompanyFieldFormToExcelField(row, (rowIndex + 1), ispFieldMaps, hostingFieldMaps, companyTypeMaps, parentSectorMaps, childSectorMaps, regionMaps, statusMaps, headers); + + companyFieldForms.add(newCompanyFieldForm); + } + } + + if (companyFieldForms.size() < 1) { + return; + } + + for (CompanyFieldForm saveCompanyFieldForm : companyFieldForms) { + CompanyField companyField = new CompanyField(); + ConvertUtil.copyProperties(saveCompanyFieldForm, companyField); + + companyField = this.companyFieldRepository.saveAndFlush(companyField); + + saveCompanyFieldForm.setId(companyField.getId()); + } + } + } + + // �뿊�� �븘�뱶�뿉 �엳�뒗 �젙蹂대�� �뾽泥� form �쑝濡� �삷湲대떎. + private CompanyFieldForm setCompanyFieldFormToExcelField(Row row, int rowIndex, Map<String, IspField> ispFieldMaps, Map<String, HostingField> hostingFieldMaps, + Map<String, Map<String, Object>> companyTypeMaps, Map<String, Map<String, Object>> parentSectorMaps, + Map<String, Map<String, Object>> childSectorMaps, Map<String, Map<String, Object>> regionMaps, + Map<String, Map<String, Object>> statusMaps, List<String> headers) { + CompanyFieldForm companyFieldForm = new CompanyFieldForm(); + companyFieldForm.setRegisterId(this.webAppUtil.getLoginId()); + + // �젣紐�, �궡�슜, �봽濡쒖젥�듃 �궎, �씠�뒋 ���엯, �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, �떆�옉�씪, 醫낅즺�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 + for (int cellIndex = 0; cellIndex < headers.size(); cellIndex++) { + Cell cell = row.getCell(cellIndex); + switch (cellIndex) { + case 0: + // �뾽泥대챸 + this.setCompanyFormName(cell, companyFieldForm, rowIndex); + break; + + case 1: + // url + this.setCompanyFormUrl(cell, companyFieldForm, rowIndex); + break; + + case 2: + // isp紐� + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormIspName(cell, ispFieldMaps, companyFieldForm, rowIndex); + } + break; + + case 3: + // �샇�뒪�똿紐� + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormHostingName(cell, hostingFieldMaps, companyFieldForm, rowIndex); + } + break; + + case 4: + // �뿰�씫泥� + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormTel(cell, companyFieldForm, rowIndex); + } + break; + + case 5: + // �씠硫붿씪 + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormEmail(cell, companyFieldForm, rowIndex); + } + break; + + case 6: + // �떞�떦�옄 + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormManager(cell, companyFieldForm, rowIndex); + } + break; + + case 7: + // 湲곗뾽援щ텇 + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormCompanyType(cell, companyTypeMaps, companyFieldForm, rowIndex); + } + break; + + case 8: + // �뾽醫�(��遺꾨쪟) + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormParentSector(cell, parentSectorMaps, companyFieldForm, rowIndex); + } + break; + + case 9: + // �뾽醫�(以묐텇瑜�) + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormChildSector(cell, childSectorMaps, companyFieldForm, rowIndex); + } + break; + + case 10: + // 吏��뿭 + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormRegion(cell, regionMaps, companyFieldForm, rowIndex); + } + break; + + case 11: + // �긽�깭 + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormStatus(cell, statusMaps, companyFieldForm, rowIndex); + } + + case 12: + // 鍮꾧퀬 + if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { + this.setCompanyFormMemo(cell, companyFieldForm, rowIndex); + } + break; + } + } + + return companyFieldForm; + } + + private void setCompanyFormMemo(Cell cell, CompanyFieldForm companyFieldForm, int rowIndex) { + companyFieldForm.setMemo(CommonUtil.convertExcelStringToCell(cell)); + } + + private void setCompanyFormStatus(Cell cell, Map<String, Map<String, Object>> statusMaps, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + Map<String, Object> statusMap = statusMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (MapUtil.getLong(statusMap, "id") != null) { + companyFieldForm.setStatusId(MapUtil.getLong(statusMap, "id")); + } else { + companyFieldForm.setStatusId(120L); + } + companyFieldForm.setStatusName(CommonUtil.convertExcelStringToCell(cell)); + } + } + + private void setCompanyFormRegion(Cell cell, Map<String, Map<String, Object>> regionMaps, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + Map<String, Object> regionMap = regionMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (regionMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_REGION_NOT_EXIST, rowIndex)); + } + companyFieldForm.setRegionId(MapUtil.getLong(regionMap, "id")); + } + } + + private void setCompanyFormChildSector(Cell cell, Map<String, Map<String, Object>> childSectorMaps, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + Map<String, Object> childSectorMap = childSectorMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (!companyFieldForm.getParentSectorId().equals(MapUtil.getLong(childSectorMap, "parentId"))) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL, rowIndex)); + } + companyFieldForm.setChildSectorId(MapUtil.getLong(childSectorMap, "id")); + } + } + + private void setCompanyFormParentSector(Cell cell, Map<String, Map<String, Object>> parentSectorMaps, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + Map<String, Object> parentSectorMap = parentSectorMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (parentSectorMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_PARENT_SECTOR_NOT_EXIST, rowIndex)); + } + companyFieldForm.setParentSectorId(MapUtil.getLong(parentSectorMap, "id")); + } + } + + private void setCompanyFormCompanyType(Cell cell, Map<String, Map<String, Object>> companyTypeMaps, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + Map<String, Object> companyTypeMap = companyTypeMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (companyTypeMap == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_COMPANY_TYPE_NOT_EXIST, rowIndex)); + } + companyFieldForm.setCompanyTypeId(MapUtil.getLong(companyTypeMap, "id")); + } + } + + private void setCompanyFormManager(Cell cell, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + companyFieldForm.setManager(CommonUtil.convertExcelStringToCell(cell)); + } + } + + private void setCompanyFormEmail(Cell cell, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + companyFieldForm.setEmail(CommonUtil.convertExcelStringToCell(cell)); + } + } + + private void setCompanyFormTel(Cell cell, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + companyFieldForm.setTel(CommonUtil.convertExcelStringToCell(cell)); + } + } + + private void setCompanyFormHostingName(Cell cell, Map<String, HostingField> hostingFieldMaps, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + + HostingField hostingField = hostingFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (hostingField == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_HOSTING_NOT_EXIST, rowIndex)); + } + companyFieldForm.setHostingId(hostingField.getId()); + } + } + + private void setCompanyFormIspName(Cell cell, Map<String, IspField> ispFieldMaps, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell != null) { + + IspField ispField = ispFieldMaps.get(CommonUtil.convertExcelStringToCell(cell)); + if (ispField == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_ISP_NOT_EXIST, rowIndex)); + } + companyFieldForm.setIspId(ispField.getId()); + } + } + + private void setCompanyFormName(Cell cell, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_COMPANY_NAME_IS_NULL, rowIndex)); + } + + String title = CommonUtil.convertExcelStringToCell(cell); + + // �뾽泥대챸 �쑀�슚�꽦 泥댄겕 + this.verifyTitle(title); + companyFieldForm.setName(title); + } + + private void setCompanyFormUrl(Cell cell, CompanyFieldForm companyFieldForm, int rowIndex) { + if (cell == null) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.EXCEL_IMPORT_URL_IS_NULL, rowIndex)); + } + String url = CommonUtil.convertExcelStringToCell(cell); + this.verifyUrl(url, null); //url �쑀�슚�꽦 寃��궗 + + companyFieldForm.setUrl(url); + } + + // �뾽泥대챸 �쑀�슚�꽦 泥댄겕 + private void verifyTitle(String title) { + if (StringUtils.isEmpty(title)) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.ISSUE_NO_TITLE)); + } + + if (title.length() > 300) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.ISSUE_TITLE_MAX_LENGTH_OUT)); + } + } + // �뾽泥� 紐⑸줉�쓣 �뿊��濡� �떎�슫濡쒕뱶 �븳�떎. @Override public ModelAndView downloadExcel(HttpServletRequest request, Model model) { -- Gitblit v1.8.0