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/webapp/views/companyField/companyFieldList.html | 1 src/main/java/kr/wisestone/owl/service/HostingFieldService.java | 3 src/main/java/kr/wisestone/owl/web/controller/CompanyFieldController.java | 19 + src/main/webapp/scripts/app/companyField/companyFieldList.controller.js | 38 ++ src/main/java/kr/wisestone/owl/service/CompanyFieldService.java | 6 src/main/java/kr/wisestone/owl/service/IspFieldService.java | 2 src/main/java/kr/wisestone/owl/constant/MsgConstants.java | 11 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties | 12 src/main/java/kr/wisestone/owl/service/impl/CompanyFieldCategoryServiceImpl.java | 41 +- src/main/webapp/scripts/components/companyField/companyField.service.js | 9 src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java | 8 src/main/java/kr/wisestone/owl/service/CompanyFieldCategoryService.java | 10 src/main/webapp/scripts/app/companyField/companyField.js | 2 src/main/java/kr/wisestone/owl/service/impl/CompanyFieldServiceImpl.java | 417 ++++++++++++++++++++++++++++++++ src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java | 8 src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java | 10 src/main/webapp/i18n/ko/global.json | 5 src/main/webapp/scripts/app/companyField/companyFieldImportExcel.controller.js | 80 ++++++ src/main/webapp/views/companyField/companyFieldExcelImport.html | 83 ++++++ src/main/webapp/views/issue/issueExcelImport.html | 6 src/main/webapp/WEB-INF/i18n/code_ko_KR.properties | 1 src/main/webapp/scripts/main.js | 1 22 files changed, 731 insertions(+), 42 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java index 44ba22f..e9fdb3b 100644 --- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java +++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java @@ -181,6 +181,17 @@ public static final String EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY = "EXCEL_CUSTOM_FIELD_VALUE_NOT_VALIDITY"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�븳 �궗�슜�옄 �젙�쓽 �븘�뱶 媛믪씠 �쑀�슚�븯吏� �븡�뒿�땲�떎. public static final String EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST = "EXCEL_IMPORT_HEADER_CUSTOM_FIELD_NOT_EXIST"; // �벑濡앺븯�젮�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶瑜� 李얠쓣 �닔 �뾾�뒿�땲�떎. �빐�떦 �궗�슜�옄 �젙�쓽�븘�뱶�쓽 �씠由꾩씠 蹂�寃쎈릺�뿀嫄곕굹 �궘�젣�릺�뿀�뒿�땲�떎. + public static final String EXCEL_IMPORT_COMPANY_NAME_IS_NULL = "EXCEL_IMPORT_COMPANY_NAME_IS_NULL"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �뾽泥대챸�씠 �엯�젰吏� �븡�븯�뒿�땲�떎. + public static final String EXCEL_IMPORT_URL_IS_NULL = "EXCEL_IMPORT_URL_IS_NULL"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 URL�씠 �엯�젰吏� �븡�븯�뒿�땲�떎. + public static final String EXCEL_IMPORT_ISP_NOT_EXIST = "EXCEL_IMPORT_ISP_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 ISP紐낆쑝濡� 寃��깋�릺�뒗 ISP媛� �뾾�뒿�땲�떎. + public static final String EXCEL_IMPORT_HOSTING_NOT_EXIST = "EXCEL_IMPORT_HOSTING_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �샇�뒪�똿紐낆쑝濡� 寃��깋�릺�뒗 �샇�뒪�똿�씠 �뾾�뒿�땲�떎. + public static final String EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL = "EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �뾽醫�(以묐텇瑜�)�� �뾽醫�(��遺꾨쪟)�뿉 �냽�빐�엳吏� �븡�뒿�땲�떎. + + public static final String EXCEL_IMPORT_COMPANY_TYPE_NOT_EXIST = "EXCEL_IMPORT_COMPANY_TYPE_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 湲곗뾽援щ텇紐낆쑝濡� 寃��깋�릺�뒗 湲곗뾽援щ텇�씠 �뾾�뒿�땲�떎 + public static final String EXCEL_IMPORT_PARENT_SECTOR_NOT_EXIST = "EXCEL_IMPORT_PARENT_SECTOR_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �뾽醫낅챸�쑝濡� 寃��깋�릺�뒗 �뾽醫�(��遺꾨쪟)�씠 �뾾�뒿�땲�떎 + public static final String EXCEL_IMPORT_CHILD_SECTOR_NOT_EXIST = "EXCEL_IMPORT_CHILD_SECTOR_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 �뾽醫낅챸�쑝濡� 寃��깋�릺�뒗 �뾽醫�(以묐텇瑜�)�씠 �뾾�뒿�땲�떎 + public static final String EXCEL_IMPORT_REGION_NOT_EXIST = "EXCEL_IMPORT_REGION_NOT_EXIST"; // �떎�쓬 �뿊�� �씪�씤�뿉�꽌 �엯�젰�맂 吏��뿭紐낆쑝濡� 寃��깋�릺�뒗 吏��뿭�씠 �뾾�뒿�땲�떎 + public static final String DOWN_ISSUE_NOT_EXIST = "DOWN_ISSUE_NOT_EXIST"; // �븯�쐞 �씠�뒋 李얠쓣�닔 �뾾�쓬 public static final String NOTICE_NOT_EXIST = "NOTICE_NOT_EXIST"; // 怨듭��궗�빆�씠 議댁옱�븯吏� �븡�뒿�땲�떎. diff --git a/src/main/java/kr/wisestone/owl/service/CompanyFieldCategoryService.java b/src/main/java/kr/wisestone/owl/service/CompanyFieldCategoryService.java index 6567213..933c04f 100644 --- a/src/main/java/kr/wisestone/owl/service/CompanyFieldCategoryService.java +++ b/src/main/java/kr/wisestone/owl/service/CompanyFieldCategoryService.java @@ -1,17 +1,11 @@ package kr.wisestone.owl.service; -import kr.wisestone.owl.domain.CompanyField; import kr.wisestone.owl.domain.CompanyFieldCategory; +import kr.wisestone.owl.domain.enumType.CompanyFieldCategoryType; import kr.wisestone.owl.vo.CompanyFieldCategoryVo; -import kr.wisestone.owl.vo.CompanyFieldVo; import kr.wisestone.owl.web.condition.CompanyFieldCategoryCondition; -import kr.wisestone.owl.web.condition.CompanyFieldCondition; -import kr.wisestone.owl.web.form.CompanyFieldForm; import org.springframework.data.domain.Pageable; -import org.springframework.ui.Model; -import org.springframework.web.servlet.ModelAndView; -import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -19,4 +13,6 @@ List<CompanyFieldCategoryVo> find(Map<String, Object> resJsonData, CompanyFieldCategoryCondition condition, Pageable pageable); CompanyFieldCategory find(Long id); + + List<Map<String, Object>> findByType(CompanyFieldCategoryType categoryType); } diff --git a/src/main/java/kr/wisestone/owl/service/CompanyFieldService.java b/src/main/java/kr/wisestone/owl/service/CompanyFieldService.java index 746d179..c29f9a8 100644 --- a/src/main/java/kr/wisestone/owl/service/CompanyFieldService.java +++ b/src/main/java/kr/wisestone/owl/service/CompanyFieldService.java @@ -4,8 +4,10 @@ import kr.wisestone.owl.vo.CompanyFieldVo; import kr.wisestone.owl.web.condition.CompanyFieldCondition; import kr.wisestone.owl.web.form.CompanyFieldForm; +import kr.wisestone.owl.web.form.IssueForm; import org.springframework.data.domain.Pageable; import org.springframework.ui.Model; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; @@ -32,4 +34,8 @@ void removeCompany(CompanyFieldForm make); ModelAndView downloadExcel(HttpServletRequest request, Model model); + + ModelAndView downloadExcelTemplate(HttpServletRequest request, Model model); + + void importExcel(MultipartFile multipartFile) throws Exception; } diff --git a/src/main/java/kr/wisestone/owl/service/HostingFieldService.java b/src/main/java/kr/wisestone/owl/service/HostingFieldService.java index 666bc86..a17b08d 100644 --- a/src/main/java/kr/wisestone/owl/service/HostingFieldService.java +++ b/src/main/java/kr/wisestone/owl/service/HostingFieldService.java @@ -1,6 +1,7 @@ package kr.wisestone.owl.service; import kr.wisestone.owl.domain.HostingField; +import kr.wisestone.owl.domain.IspField; import kr.wisestone.owl.vo.HostingFieldVo; import kr.wisestone.owl.web.condition.HostingFieldCondition; import kr.wisestone.owl.web.form.HostingFieldForm; @@ -29,4 +30,6 @@ ModelAndView downloadExcel(HttpServletRequest request, Model model); + List<HostingField> findAll(); + } diff --git a/src/main/java/kr/wisestone/owl/service/IspFieldService.java b/src/main/java/kr/wisestone/owl/service/IspFieldService.java index ab5dcbf..57ab94c 100644 --- a/src/main/java/kr/wisestone/owl/service/IspFieldService.java +++ b/src/main/java/kr/wisestone/owl/service/IspFieldService.java @@ -28,4 +28,6 @@ void remove(IspFieldForm make); ModelAndView downloadExcel(HttpServletRequest request, Model model); + + List<IspField> findAll(); } diff --git a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldCategoryServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldCategoryServiceImpl.java index 0601504..3eb3462 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldCategoryServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/CompanyFieldCategoryServiceImpl.java @@ -1,39 +1,22 @@ package kr.wisestone.owl.service.impl; import com.google.common.collect.Lists; -import kr.wisestone.owl.common.ExcelConditionCheck; import kr.wisestone.owl.constant.Constants; import kr.wisestone.owl.constant.MsgConstants; -import kr.wisestone.owl.domain.CompanyField; import kr.wisestone.owl.domain.CompanyFieldCategory; -import kr.wisestone.owl.domain.HostingField; -import kr.wisestone.owl.domain.IspField; +import kr.wisestone.owl.domain.enumType.CompanyFieldCategoryType; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.CompanyFieldCategoryMapper; -import kr.wisestone.owl.mapper.CompanyFieldMapper; import kr.wisestone.owl.repository.CompanyFieldCategoryRepository; -import kr.wisestone.owl.repository.CompanyFieldRepository; -import kr.wisestone.owl.repository.HostingFieldRepository; -import kr.wisestone.owl.repository.IspFieldRepository; import kr.wisestone.owl.service.*; import kr.wisestone.owl.util.ConvertUtil; import kr.wisestone.owl.vo.*; import kr.wisestone.owl.web.condition.CompanyFieldCategoryCondition; -import kr.wisestone.owl.web.condition.CompanyFieldCondition; -import kr.wisestone.owl.web.condition.HostingFieldCondition; -import kr.wisestone.owl.web.form.CompanyFieldForm; -import kr.wisestone.owl.web.view.ExcelView; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.ui.Model; -import org.springframework.web.servlet.ModelAndView; -import javax.servlet.http.HttpServletRequest; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -76,6 +59,28 @@ return this.companyFieldCategoryMapper.findById(id); } + public List<Map<String, Object>> findByType(CompanyFieldCategoryType categoryType) { + CompanyFieldCategoryCondition condition = new CompanyFieldCategoryCondition(); + switch (categoryType) { + case COMPANYTYPE: + condition.setTypeCategory("COMPANYTYPE"); + break; + case PARENTSECTOR: + condition.setTypeCategory("PARENTSECTOR"); + break; + case CHILDSECTOR: + condition.setTypeCategory("CHILDSECTOR"); + break; + case REGION: + condition.setTypeCategory("REGION"); + break; + case STATUS: + condition.setTypeCategory("STATUS"); + break; + } + return this.companyFieldCategoryMapper.find(condition); + } + // 寃��깋 寃곌낵瑜� Vo 濡� 蹂��솚�븳�떎. private List<CompanyFieldCategoryVo> convertCompanyFieldCategoryVoToMap(List<Map<String, Object>> results, Long totalCount, Pageable pageable, Map<String, Object> resJsonData) { List<CompanyFieldCategoryVo> companyFieldCategoryVos = Lists.newArrayList(); 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) { diff --git a/src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java index 4266bd9..5a654a5 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/HostingFieldServiceImpl.java @@ -6,6 +6,7 @@ import kr.wisestone.owl.constant.MsgConstants; import kr.wisestone.owl.domain.CompanyField; import kr.wisestone.owl.domain.HostingField; +import kr.wisestone.owl.domain.IspField; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.HostingFieldMapper; import kr.wisestone.owl.repository.HostingFieldRepository; @@ -25,6 +26,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.web.servlet.ModelAndView; @@ -145,6 +147,12 @@ this.hostingFieldRepository.flush(); } + @Override + @Transactional(readOnly = true) + public List<HostingField> findAll() { + return this.hostingFieldRepository.findAll(); + } + // Hosting 紐⑸줉�쓣 �뿊��濡� �떎�슫濡쒕뱶 �븳�떎. @Override public ModelAndView downloadExcel(HttpServletRequest request, Model model) { diff --git a/src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java index 08d0ffc..2e4daf1 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IspFieldServiceImpl.java @@ -6,6 +6,7 @@ import kr.wisestone.owl.constant.MsgConstants; import kr.wisestone.owl.domain.CompanyField; import kr.wisestone.owl.domain.IspField; +import kr.wisestone.owl.domain.Priority; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.IspFieldMapper; import kr.wisestone.owl.repository.IspFieldRepository; @@ -25,6 +26,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.web.servlet.ModelAndView; @@ -147,6 +149,12 @@ this.ispFieldRepository.flush(); } + @Override + @Transactional(readOnly = true) + public List<IspField> findAll() { + return this.ispFieldRepository.findAll(); + } + // Isp 紐⑸줉�쓣 �뿊��濡� �떎�슫濡쒕뱶 �븳�떎. @Override public ModelAndView downloadExcel(HttpServletRequest request, Model model) { diff --git a/src/main/java/kr/wisestone/owl/web/controller/CompanyFieldController.java b/src/main/java/kr/wisestone/owl/web/controller/CompanyFieldController.java index 8b4f065..23e9192 100644 --- a/src/main/java/kr/wisestone/owl/web/controller/CompanyFieldController.java +++ b/src/main/java/kr/wisestone/owl/web/controller/CompanyFieldController.java @@ -3,8 +3,10 @@ import kr.wisestone.owl.constant.Constants; import kr.wisestone.owl.service.CompanyFieldService; +import kr.wisestone.owl.util.ConvertUtil; import kr.wisestone.owl.web.condition.CompanyFieldCondition; import kr.wisestone.owl.web.form.CompanyFieldForm; +import kr.wisestone.owl.web.form.IssueForm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.http.MediaType; @@ -14,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; @@ -93,5 +96,21 @@ public ModelAndView downloadExcel(HttpServletRequest request, Model model) { return this.companyFieldService.downloadExcel(request, model); } + + // �뾽泥� Import �슜 �뿊�� �뀥�뵆由� �떎�슫濡쒕뱶 + @RequestMapping(value = "/companyField/downloadExcelTemplate", method = RequestMethod.POST) + public ModelAndView downloadExcelImport(HttpServletRequest request, Model model) { + return this.companyFieldService.downloadExcelTemplate(request, model); + } + + // �뾽泥� �뿊�� �벑濡� + @RequestMapping(value = "/companyField/importExcel", method = RequestMethod.POST) + public @ResponseBody Map<String, Object> importExcel(MultipartHttpServletRequest request) throws Exception { + Map<String, Object> resJsonData = new HashMap<>(); + + this.companyFieldService.importExcel(request.getFile("file")); + + return this.setSuccessMessage(resJsonData); + } } diff --git a/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java b/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java index 7432c6c..51d9f8c 100644 --- a/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java +++ b/src/main/java/kr/wisestone/owl/web/form/CompanyFieldForm.java @@ -22,6 +22,8 @@ private Long statusId; private String statusName; + private Long registerId; // �벑濡앹옄 �븘�씠�뵒 - insert batch �뿉�꽌 �궗�슜 + private List<Long> removeIds = Lists.newArrayList(); public CompanyFieldForm() { @@ -146,4 +148,12 @@ public void setStatusName(String statusName) { this.statusName = statusName; } + + public Long getRegisterId() { + return registerId; + } + + public void setRegisterId(Long registerId) { + this.registerId = registerId; + } } diff --git a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties index 5132b05..4829040 100644 --- a/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/code_ko_KR.properties @@ -39,6 +39,7 @@ common.typeErrorDownloadWidget=\uB2E4\uC6B4\uB85C\uB4DC \uC704\uC82F \uC720\uD615 \uC624\uB958 common.inProgressProjectStatus=\uC9C4\uD589 \uC911\uC778 \uD504\uB85C\uC81D\uD2B8 \uD604\uD669 common.registerExcelIssue=\uC5D1\uC140\uB85C \uC774\uC288 \uB4F1\uB85D\uD558\uAE30 +common.registerExcelCompanyField=\uC5D1\uC140\uB85C \uC5C5\uCCB4 \uB4F1\uB85D\uD558\uAE30 common.assignedToMeIssue=\uB098\uC5D0\uAC8C \uD560\uB2F9\uB41C \uC774\uC288 common.managementRisk=\uC704\uD5D8 \uAD00\uB9AC common.registeredByMeIssue=\uB0B4\uAC00 \uB4F1\uB85D\uD55C \uC774\uC288 \uD604\uD669 diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties index 90f9b48..8abaac6 100644 --- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties @@ -167,7 +167,7 @@ EXCEL_CONDITIONS_NOT_EXIST = \uC5D1\uC140 \uB2E4\uC6B4\uB85C\uB4DC\uC5D0 \uD544\uC694\uD55C \uAC80\uC0C9 \uC870\uAC74\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. EXCEL_EMPTY_CELL = \uC5D1\uC140 \uD5E4\uB354 \uBD80\uBD84 \uC140\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC5D1\uC140 \uC791\uC131 \uC591\uC2DD\uC5D0 \uBB38\uC81C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. EXCEL_HEADER_EMPTY_CELL = \uC5D1\uC140 \uD5E4\uB354\uC5D0 \uBE48 \uC140\uC774 \uC788\uC2B5\uB2C8\uB2E4. -EXCEL_IMPORT_ISSUE_TITLE_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC774\uC288 \uC81C\uBAA9\uC774 \uC785\uB825\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_ISSUE_TITLE_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC774\uC288 \uC81C\uBAA9\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} EXCEL_IMPORT_PROJECT_KEY_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uD504\uB85C\uC81D\uD2B8 \uD0A4\uAC00 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} EXCEL_IMPORT_PROJECT_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uD504\uB85C\uC81D\uD2B8 \uD0A4\uB85C \uAC80\uC0C9\uB418\uB294 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} EXCEL_IMPORT_ISSUE_TYPE_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC774\uC288 \uD0C0\uC785 \uBA85\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} @@ -184,6 +184,16 @@ RESERVATION_EMAIL_TITLE=[OWL ITS] \uC5B4\uC81C \uC774\uC288 \uBC0F \uD65C\uB3D9 \uD604\uD669\uC785\uB2C8\uB2E4. REALTIME_EMAIL_TITLE=[OWL ITS] \uC2E4\uC2DC\uAC04 \uC774\uC288 \uBC0F \uD65C\uB3D9 \uD604\uD669\uC785\uB2C8\uB2E4. +EXCEL_IMPORT_COMPANY_NAME_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC5C5\uCCB4\uBA85\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_URL_IS_NULL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C URL\uC774 \uC785\uB825\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_ISP_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C ISP\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 ISP\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_HOSTING_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uD638\uC2A4\uD305\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 \uD638\uC2A4\uD305\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_PARENT_SECTOR_NOT_EQUAL=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uC5C5\uC885(\uC911\uBD84\uB958)\uC740 \uC5C5\uC885(\uB300\uBD84\uB958)\uC5D0 \uC18D\uD574\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_COMPANY_TYPE_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uAE30\uC5C5\uAD6C\uBD84\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 \uAE30\uC5C5\uAD6C\uBD84\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_PARENT_SECTOR_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uC5C5\uC885\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 \uC5C5\uC885(\uB300\uBD84\uB958)\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_CHILD_SECTOR_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uC5C5\uC885\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 \uC5C5\uC885(\uC911\uBD84\uB958)\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} +EXCEL_IMPORT_REGION_NOT_EXIST=\uB2E4\uC74C \uC5D1\uC140 \uB77C\uC778\uC5D0\uC11C \uC785\uB825\uB41C \uC9C0\uC5ED\uBA85\uC73C\uB85C \uAC80\uC0C9\uB418\uB294 \uC9C0\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \n \uB77C\uC778 \uC815\uBCF4 : {0} + ISSUE_RESERVATION_VALUE_INVALID=\uC774\uC288 \uBC1C\uC0DD \uC608\uC57D\uC77C\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4. ISSUE_RESERVATION_NOT_EXIST=\uC774\uC288 \uBC1C\uC0DD \uC608\uC57D \uC815\uBCF4\uAC00 \uC874\uC7AC\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. diff --git a/src/main/webapp/i18n/ko/global.json b/src/main/webapp/i18n/ko/global.json index 8e7bb48..d9beea3 100644 --- a/src/main/webapp/i18n/ko/global.json +++ b/src/main/webapp/i18n/ko/global.json @@ -994,7 +994,10 @@ "enterSpecialCharacters": "�뾽泥� �씠由꾩뿉�뒗 �듅�닔 臾몄옄瑜� �엯�젰 �븷 �닔 �뾾�뒿�땲�떎.", "invalidTelFormat": "�쟾�솕踰덊샇 �삎�떇�씠 留욎� �븡�뒿�땲�떎. xxx-xxx-xxxx �삎�떇�쑝濡� �엯�젰�븯�꽭�슂.", "writeCompanyTel": "�쟾�솕踰덊샇瑜� �엯�젰�빐二쇱꽭�슂.", - "writeTel": "�쟾�솕踰덊샇瑜� �엯�젰�븯�뀛�빞 異붽��븷�닔 �엳�뒿�땲�떎." + "writeTel": "�쟾�솕踰덊샇瑜� �엯�젰�븯�뀛�빞 異붽��븷�닔 �엳�뒿�땲�떎.", + "registerExcelCompanyFields": "�뿊��濡� �뾽泥� �벑濡앺븯湲�", + "registerExcelUploadCompanyField": "�뿊�� �뾽濡쒕뱶 �뾽泥� �벑濡�", + "succeededCompanyFieldRegistration": "�뾽泥� �벑濡� �꽦怨�" }, "ispField" : { "info": "ISP�젙蹂�", diff --git a/src/main/webapp/scripts/app/companyField/companyField.js b/src/main/webapp/scripts/app/companyField/companyField.js index 3e4628c..116a441 100644 --- a/src/main/webapp/scripts/app/companyField/companyField.js +++ b/src/main/webapp/scripts/app/companyField/companyField.js @@ -33,7 +33,7 @@ loadController : ["$q", function ($q) { var deferred = $q.defer(); require(["companyFieldListController", 'jsTable', 'tableColumnGenerator', 'companyFieldService', 'modalFormAutoScroll' - , 'companyFieldAddController', 'companyFieldModifyController' + , 'companyFieldAddController', 'companyFieldModifyController', 'companyFieldImportExcelController' , 'formSubmit', 'jsShortCut', 'inputRegex'], function () { deferred.resolve(); }); diff --git a/src/main/webapp/scripts/app/companyField/companyFieldImportExcel.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldImportExcel.controller.js new file mode 100644 index 0000000..9d736c8 --- /dev/null +++ b/src/main/webapp/scripts/app/companyField/companyFieldImportExcel.controller.js @@ -0,0 +1,80 @@ +/** + * Created by wisestone on 2018-01-17. + */ +'use strict'; + +define([ + 'app', + 'angular' + ], + function (app, angular) { + app.controller('companyFieldImportExcelController', ['$scope', '$rootScope', '$log', '$resourceProvider', '$uibModalInstance', '$injector', '$controller', '$tableProvider', 'CompanyField', 'SweetAlert', '$filter', '$timeout', + function ($scope, $rootScope, $log, $resourceProvider, $uibModalInstance, $injector, $controller, $tableProvider, CompanyField, SweetAlert, $filter, $timeout) { + + $scope.fn = { + cancel : cancel, // �뙘�뾽 李� �떕湲� + formSubmit : formSubmit, // �뤌 �쟾�넚 + formCheck : formCheck, // �뤌 泥댄겕 + onFileSelect : onFileSelect, // �뙆�씪 �뾽濡쒕뱶 + }; + + $scope.vm = { + form : { + file : "", // �뾽濡쒕뱶�븯�뒗 Excel File + fileName : "" + }, + tab : "VIDEO" + }; + + // �뙆�씪 �뾽濡쒕뱶 + function onFileSelect($files) { + $scope.vm.form.file = $files; + + if ($files.length > 0) { + $scope.vm.form.fileName = $files[0].name; + } + else { + $scope.vm.form.fileName = ""; + } + } + + // �뤌 泥댄겕 + function formCheck() { + if ($scope.vm.form.file.length < 1) { + return true; + } + return false; + } + + // �뤌 �쟾�넚 + function formSubmit() { + $rootScope.spinner = true; + + CompanyField.importExcel({ + method : "POST", + file : $scope.vm.form.file, + // data �냽�꽦�쑝濡� 蹂꾨룄�쓽 �뜲�씠�꽣 �쟾�넚 + fileFormDataName : "file" + }) + .then(function (result) { + if (result.data.message.status === "success") { + $timeout(function () { + SweetAlert.success($filter("translate")("companyField.succeededCompanyFieldRegistration"), result.data.message.message); // �벑濡� �꽦怨� + $scope.fn.cancel(); + $rootScope.$broadcast("getCompanyFieldList"); + }, 1000); + } + else { + SweetAlert.error($filter("translate")("companyField.failedCompanyFieldRegistration"), result.data.message.message); // �벑濡� �떎�뙣 + } + + $rootScope.spinner = false; + }); + } + + function cancel() { + $rootScope.$broadcast("closeLayer"); // �뙘�뾽�씠 �뿴由ш퀬 �굹�꽌 js-multi, js-single �벑�뿉�꽌 body �씠踰ㅽ듃媛� �궇�븘媛��뒗 �쁽�긽 �닔�젙 + $uibModalInstance.dismiss('cancel'); + } + }]); + }); diff --git a/src/main/webapp/scripts/app/companyField/companyFieldList.controller.js b/src/main/webapp/scripts/app/companyField/companyFieldList.controller.js index 902cadf..fa84c74 100644 --- a/src/main/webapp/scripts/app/companyField/companyFieldList.controller.js +++ b/src/main/webapp/scripts/app/companyField/companyFieldList.controller.js @@ -19,6 +19,7 @@ add : add, //�뾽泥� �깮�꽦 makeSearchConditions : makeSearchConditions, //�뿊�� �떎�슫濡쒕뱶 removes : removes, //�뾽泥� �궘�젣 + importExcel : importExcel, // �뿊�� import 湲곕뒫 �뙘�뾽 �샇異� }; // 蹂��닔 @@ -45,6 +46,11 @@ // �뾽泥� 愿�由� 由ъ뒪�듃 遺덈윭�삤湲� $scope.$on("getPageList", function () { + $scope.fn.getPageList(0); + }); + + // �뾽泥� 紐⑸줉 �뜲�씠�꽣 媛깆떊 + $scope.$on("getCompanyFieldList", function () { $scope.fn.getPageList(0); }); @@ -157,24 +163,28 @@ // �쟾�솕踰덊샇 議고쉶�떆 �븯�씠�뵂 異붽� �빐�꽌 議고쉶 result.data.data.forEach(function (data) { if (data.tel != null && data.tel !== "") { - var tels = data.tel.substr(1, data.tel.indexOf("]")-1); - var telArr = tels.split(","); + if (data.tel.indexOf("[") !== -1){ + var tels = data.tel.substr(1, data.tel.indexOf("]")-1); + var telArr = tels.split(","); - for (var i = 0; i < telArr.length; i++) { - let hyphen = telArr[i].trim(); - telArr[i] = hyphen.replace(/(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/, "$1-$2-$3"); - if (telArr[i] === "") { - telArr.splice(i,1); + for (var i = 0; i < telArr.length; i++) { + let hyphen = telArr[i].trim(); + telArr[i] = hyphen.replace(/(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/, "$1-$2-$3"); + if (telArr[i] === "") { + telArr.splice(i,1); + } } + data.tel = telArr.join(); } - data.tel = telArr.join(); } }); // �씠硫붿씪 議고쉶�떆 諛곗뿴 �삎�깭 �젣嫄� result.data.data.forEach(function (data) { if (data.email != null && data.email !== "") { - data.email = data.email.substr(1, data.email.indexOf("]")-1); + if (data.email.indexOf("[") !== -1){ + data.email = data.email.substr(1, data.email.indexOf("]")-1); + } } }); @@ -219,6 +229,16 @@ }); } + // �뿊�� import �뙘�뾽 �샇異� + function importExcel() { + $uibModal.open({ + templateUrl : 'views/companyField/companyFieldExcelImport.html', + size : "lg", + controller : 'companyFieldImportExcelController', + backdrop : 'static' + }); + } + // �뾽泥� �궘�젣 function removes() { var removeIds = []; diff --git a/src/main/webapp/scripts/components/companyField/companyField.service.js b/src/main/webapp/scripts/components/companyField/companyField.service.js index 109e6ab..a2c259d 100644 --- a/src/main/webapp/scripts/components/companyField/companyField.service.js +++ b/src/main/webapp/scripts/components/companyField/companyField.service.js @@ -6,7 +6,7 @@ define([ 'app' ], function (app) { - app.factory("CompanyField", ['$http', '$log', function ($http, $log) { + app.factory("CompanyField", ['$http', '$log', '$upload', function ($http, $log, $upload) { return { find : function (conditions) { return $http.post("companyField/find", conditions).then(function (response) { @@ -32,6 +32,13 @@ return response; }); }, + importExcel : function (conditions) { + conditions.url = "companyField/importExcel"; + return $upload.upload(conditions).then(function (response) { + $log.debug("�뾽泥� Import 寃곌낵 : ", response); + return response; + }); + }, removes : function (conditions) { return $http.post("companyField/remove", conditions).then(function (response) { $log.debug("�뾽泥� �궘�젣 寃곌낵 : ", response); diff --git a/src/main/webapp/scripts/main.js b/src/main/webapp/scripts/main.js index d2a94ba..b5a5c17 100644 --- a/src/main/webapp/scripts/main.js +++ b/src/main/webapp/scripts/main.js @@ -354,6 +354,7 @@ 'companyFieldListController' : 'app/companyField/companyFieldList.controller', // �뾽泥� 紐⑸줉 而⑦듃濡ㅻ윭 'companyFieldAddController' : 'app/companyField/companyFieldAdd.controller', // �뾽泥� �깮�꽦 而⑦듃濡ㅻ윭 'companyFieldModifyController' : 'app/companyField/companyFieldModify.controller', // �뾽泥� �닔�젙 而⑦듃濡ㅻ윭 + 'companyFieldImportExcelController' : 'app/companyField/companyFieldImportExcel.controller', // �뾽泥� �뿊�� �엫�룷�듃 而⑦듃濡ㅻ윭 'companyFieldCategoryService' : 'components/companyFieldCategory/companyFieldCategory.service', // �뾽泥� 移댄뀒怨좊━ diff --git a/src/main/webapp/views/companyField/companyFieldExcelImport.html b/src/main/webapp/views/companyField/companyFieldExcelImport.html new file mode 100644 index 0000000..f4d20e8 --- /dev/null +++ b/src/main/webapp/views/companyField/companyFieldExcelImport.html @@ -0,0 +1,83 @@ +<div class="formModal"> + <div class="modal-header faded smaller"> + <div class="modal-title"> + <strong translate="companyField.registerExcelCompanyFields">�뿊��濡� �뾽泥� �벑濡앺븯湲�</strong> + </div> + <button aria-label="Close" class="close" type="button" ng-click="fn.cancel()"> + <span aria-hidden="true"> ×</span> + </button> + </div> + + <div class="modal-body"> + <form role="form" name="companyFieldExcelImportForm"> + <!--<div class="row"> + <div class="col-lg-5">--> + + <button type="button" + class="btn btn-success" + form-submit="companyFieldExcelImportForm" make-search-conditions="fn.makeSearchConditions()" + style="width:100%;"><i class="fa fa-file-excel-o"></i> <span + translate="common.downloadExcel">�뿊�� �떎�슫濡쒕뱶</span> + </button> + + <div class="form-group pdt10"> + <div class="filebox input-group"> + <input class="upload-name form-control" + placeholder="{{'users.pleaseSelectFile' | translate}}" + tabindex="-1" + disabled="disabled" + ng-model="vm.form.fileName"> + <label for="uploadFileField"><span translate="common.uploadExcel">�뿊�� �뾽濡쒕뱶</span></label> + <input id="uploadFileField" + class="form-control" + type="file" + ng-file-select="fn.onFileSelect($files)"/> + </div> + </div> + + <button type="button" class="btn btn-md btn-primary bold" + ng-show="$root.isDefined(vm.form.file)" + style="width:100%;" + ng-disabled="fn.formCheck()" + ng-click="fn.formSubmit()"><span + translate="companyField.registerExcelUploadCompanyField">�뿊�� �뾽濡쒕뱶 �뾽泥� �벑濡�</span> + </button> + <!--</div>--> + + <!--<div class="col-lg-7 bdl1"> + <div class="os-tabs-w"> + <div class="os-tabs-controls"> + <ul class="nav nav-tabs smaller"> + <li class="nav-item cursor"> + <a class="nav-link" ng-class="{ 'active' : vm.tab == 'VIDEO' }" + ng-click="vm.tab = 'VIDEO'"><span + translate="issue.videoExample">�룞�쁺�긽 �삁�젣</span></a> + </li> + </ul> + </div> + + <div class="tab-content"> + <div ng-show="vm.tab == 'VIDEO'"> + <video style="width:100%;" width="100%" height="300px" + src="/excelTemplate/excelExample_new.mp4" controls autoplay loop muted + preload="auto"></video> + </div> + </div> + </div> + </div>--> + <!--</div>--> + </form> + <!-- �뾽泥� Excel Import �뀥�뵆由� �떎�슫濡쒕뱶 �뤌 --> + <form class="form-inline justify-content-sm-end" + method="post" + action="/companyField/downloadExcelTemplate" + name="companyFieldExcelImportForm"> + <input type="hidden" name="conditions"> + </form> + </div> + + <div class="modal-footer buttons-on-right"> + <button type="button" class="btn btn-md btn-grey" ng-click="fn.cancel()"><span + translate="common.close">�떕湲�</span></button> + </div> +</div> diff --git a/src/main/webapp/views/companyField/companyFieldList.html b/src/main/webapp/views/companyField/companyFieldList.html index 936b537..ef1c543 100644 --- a/src/main/webapp/views/companyField/companyFieldList.html +++ b/src/main/webapp/views/companyField/companyFieldList.html @@ -76,6 +76,7 @@ </button> <div aria-labelledby="dropdownMenuButton2" class="dropdown-menu left-menu" x-placement="bottom-start"> + <a class="dropdown-item cursor" ng-click="fn.importExcel()"> <span translate="common.importExcel">Excel Import</span></a> <a class="dropdown-item cursor" form-submit="companyFieldListForm" make-search-conditions="fn.makeSearchConditions()"><span translate="common.allDownloadExcel">�뿊�� �떎�슫濡쒕뱶</span></a> <a class="dropdown-item cursor" ng-click="fn.removes()"> <span translate="common.selectDelete">�궘�젣</span></a> </div> diff --git a/src/main/webapp/views/issue/issueExcelImport.html b/src/main/webapp/views/issue/issueExcelImport.html index 44b0440..9f556ac 100644 --- a/src/main/webapp/views/issue/issueExcelImport.html +++ b/src/main/webapp/views/issue/issueExcelImport.html @@ -9,7 +9,7 @@ </div> <div class="modal-body"> - <form role="form" name="issueExcelImportFrom"> + <form role="form" name="issueExcelImportForm"> <div class="row"> <div class="col-lg-5"> <div class="form-group"> @@ -39,9 +39,9 @@ type : '', maxlength : 200, autoResize : true, stopRemoveBodyEvent : true }"></js-autocomplete-single> <div class="form-group mt-5"> - <label for="issueExcelImportFrom3"> <span translate="issue.issueType">�씠�뒋 ���엯</span> <code + <label for="issueExcelImportForm3"> <span translate="issue.issueType">�씠�뒋 ���엯</span> <code class="highlighter-rouge">*</code></label> - <select id="issueExcelImportFrom3" + <select id="issueExcelImportForm3" name="issueType" class="form-control input-sm" ng-model="vm.form.issueTypeId" -- Gitblit v1.8.0