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 |  435 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 343 insertions(+), 92 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 9bb8241..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 {
@@ -85,6 +89,9 @@
 
     @Autowired
     private CompanyFieldService companyFieldService;
+
+    @Autowired
+    private CompanyFieldCategoryService companyFieldCategoryService;
 
     @Autowired
     private IspFieldService ispFieldService;
@@ -209,6 +216,9 @@
     @Autowired
     private IssueRelationMapper issueRelationMapper;
 
+    @Autowired
+    private WorkflowTransitionService workflowTransitionService;
+
     @Override
     protected JpaRepository<Issue, Long> getRepository() {
         return this.issueRepository;
@@ -259,6 +269,9 @@
             }
         } else if (issueApiForm.getIssueStatusId() == null){
             throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST));
+        } else if (!this.workflowTransitionService.contains(issueApiForm.getIssueStatusId(), workflow.getId())) {
+            //�씠�뒋 �긽�깭 �쑀�슚�꽦 �솗�씤
+            throw new ApiParameterException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST_IN_WORKFLOW));
         }
 
         // �봽濡쒖젥�듃 �엯�젰
@@ -343,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"));
@@ -477,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());
         //  �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕
@@ -519,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 媛앹껜濡� 蹂�寃쏀븳�떎.
@@ -570,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());
         //  �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕
@@ -612,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 媛앹껜濡� 蹂�寃쏀븳�떎.
@@ -647,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());
         //  �봽濡쒖젥�듃 �쑀�슚�꽦 泥댄겕
@@ -689,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 媛앹껜濡� 蹂�寃쏀븳�떎.
@@ -795,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()));
@@ -933,22 +951,19 @@
             return Lists.newArrayList();
         }
 
-        //  �뒠�떇 �쟾 - 1.3 / 1.2 / 1.1
-        //  �뒠�떇 �썑 (�떒�씪/�떎以� 寃��깋 議곌굔 3媛� 湲곗�) - 0.49 / 0.41 / 0.47 / 0.41
-
         List<IssueVo> issueVos = Lists.newArrayList();  //  �씠�뒋 紐⑸줉 �뜲�씠�꽣 ���옣 而щ젆�뀡
         //  �궗�슜�옄 �젙�쓽 �븘�뱶濡� 寃��깋�븳 �씠�뒋 �븘�씠�뵒 媛�
         List<String> issueKeys = Lists.newArrayList(issueIds);
         issueCondition.setIssueIds(issueKeys);
-
-        issueCondition.setLoginUserId(this.webAppUtil.getLoginId());
-        issueCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
         User user = this.webAppUtil.getLoginUserObject();
+
+        issueCondition.setLoginUserId(user.getId());
+        issueCondition.setWorkspaceId(user.getLastWorkspaceId());
 
 
         List<Map<String, Object>> results = Lists.newArrayList();
         Long totalCount = 0L;
-        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
+//        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
 
 //        if (!this.userWorkspaceService.checkWorkspaceManager(user)
 //                && !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { //理쒓퀬愿�由ъ옄 & �봽濡쒖젥�듃,�씠�뒋 愿�由ъ옄 �씪 寃쎌슦 紐⑤뱺 �씠�뒋 蹂닿린
@@ -958,17 +973,18 @@
 //            results = this.issueMapper.findByDepartment(issueCondition);
 //            totalCount = this.issueMapper.countByDepartment(issueCondition);
 //        }*/
+//        StopWatch serviceStart = new StopWatch();
+//        serviceStart.start();
         results = this.issueMapper.find(issueCondition);
+//         serviceStart.stop();
+//        log.error("result : " + serviceStart.toString());
+
+//        serviceStart = new StopWatch();
+//        serviceStart.start();
         totalCount = this.issueMapper.count(issueCondition);
 
-
-        //  �뒠�떇 �쟾 - 0.8, 0.9, 0.9, 0.9, 0.9
-        /*StopWatch serviceStart = new StopWatch();
-        serviceStart.start();*/
-        //  �뒠�떇 �쟾 - 1.1, 1.1, 1.3, 1.2
-
-        /*serviceStart.stop();
-        log.debug("serviceENd1 : " + serviceStart.getTime());*/
+//        serviceStart.stop();
+//        log.error("totalCount : " + serviceStart.toString());
 
         int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
         //  �씠�뒋 �븘�씠�뵒 珥덇린�솕
@@ -984,8 +1000,8 @@
             this.setDownIssues(user, issueVos);
             this.setRelationIssues(issueVos);
         }
-        this.setCountDownIssues(issueVos);
 
+        this.setCountDownIssues(issueVos);
         this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲�
 
         resJsonData.put(Constants.RES_KEY_CONTENTS, issueVos);
@@ -1520,7 +1536,7 @@
 
                 case "02": //  �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭,  �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎.
                     this.setIssueDetail(issueVo, issue, user);    //  �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎.
-                    this.setIssueTableConfigs(issue, issueVo);
+                    this.setIssueTableConfigs(issue, issueVo, issueCondition);
                     issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class));
                     break;
             }
@@ -1532,8 +1548,9 @@
     }
 
     // �뀒�씠釉� �꽕�젙 �뀑�똿
-    private void setIssueTableConfigs(Issue issue, IssueVo issueVo) {
-        Long IssueTypeId = issue.getIssueType().getId();
+    private void setIssueTableConfigs(Issue issue, IssueVo issueVo, IssueCondition issueCondition) {
+        //Long IssueTypeId = issue.getIssueType().getId();
+        Long IssueTypeId = issueCondition.getIssueTypeId();
 
         for (int tableConfigType : IssueTableConfig.IssueTableTypes) {
             if (tableConfigType != IssueTableConfig.ISSUE_TABLE_TYPE_MAIN) {
@@ -1557,7 +1574,10 @@
 
         List<Issue> downIssueList = this.issueRepository.findByParentIssueId(issue.getId());
         if(downIssueList != null && downIssueList.size() > 0) {
-            int startPage = (int) Math.floor(issueVo.getDownPage()/issueVo.getDownPageSize());
+            int startPage = 0;
+            if (issueVo.getDownPage() != 0) {
+                startPage = (int) Math.floor(issueVo.getDownPage()/issueVo.getDownPageSize());
+            }
             Pageable pageable = PageRequest.of(startPage, issueVo.getDownPageSize());
             downIssues = this.issueRepository.findByParentIssueId(issue.getId(), pageable);
         }
@@ -1581,6 +1601,9 @@
                 this.setIssueCustomFields(downIssue, downIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
                 this.setIssueHistory(downIssue, downIssueVo);   //  �씠�뒋 湲곕줉 �젙蹂� �뀑�똿
                 this.setIssueComments(downIssue, downIssueVo);  //  �뙎湲� �젙蹂� �뀑�똿
+                this.setIssueCompanyField(downIssue, downIssueVo);  //�뾽泥� �젙蹂� �꽭�똿
+                this.setIssueIspField(downIssue, downIssueVo);  //ISP �젙蹂� �꽭�똿
+                this.setIssueHostingField(downIssue, downIssueVo);  //HOSTING �젙蹂� �꽭�똿
 
                 downIssueVo.setModifyPermissionCheck(issueVo.getModifyPermissionCheck());
 
@@ -1594,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");
@@ -1629,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);
-        }
     }
 
     //  �긽�쐞�씪媛� �젙蹂� 異붽�
@@ -1675,7 +1698,7 @@
             issueVo.setRelTotalCount(totalCount);
             for (Map<String, Object> result : results) {
                 IssueRelationVo issueRelationVo = ConvertUtil.convertMapToClass(result, IssueRelationVo.class);
-                Issue relationIssue = this.findOne(issueRelationVo.getId());
+                Issue relationIssue = this.findOne(MapUtil.getLong(result, "relationIssueId"));
                 IssueVo relIssueVo = ConvertUtil.copyProperties(relationIssue, IssueVo.class);
                 Project project = this.projectService.getProject(relationIssue.getProject().getId());
                 relIssueVo.setProjectId(project.getId());
@@ -1697,6 +1720,25 @@
                 this.setRegister(relationIssue, relIssueVo); // �벑濡앹옄
                 this.setIssueDepartment(relationIssue, relIssueVo);  //  �떞�떦遺��꽌 �젙蹂� �뀑�똿
                 this.setIssueCustomFields(relationIssue, relIssueVo);   // �궗�슜�옄�젙�쓽�븘�뱶 �젙蹂� �꽭�똿
+
+                Set<IssueCompany> issueCompanies = relationIssue.getIssueCompanies();
+                Iterator<IssueCompany> itrCompany = issueCompanies.iterator();
+                while (itrCompany.hasNext()) {
+                    issueRelationVo.addIssueCompanyVo(ConvertUtil.copyProperties(itrCompany.next(), IssueCompanyVo.class));
+                }
+
+                Set<IssueIsp> issueIsps = relationIssue.getIssueIspFields();
+                Iterator<IssueIsp> itrIsp = issueIsps.iterator();
+                while (itrIsp.hasNext()) {
+                    issueRelationVo.addIssueIspVo(ConvertUtil.copyProperties(itrIsp.next(), IssueIspVo.class));
+                }
+
+                Set<IssueHosting> issueHostings = relationIssue.getIssueHostingFields();
+                Iterator<IssueHosting> itrHosting = issueHostings.iterator();
+                while (itrHosting.hasNext()) {
+                    issueRelationVo.addIssueHostingVo(ConvertUtil.copyProperties(itrHosting.next(), IssueHostingVo.class));
+                }
+
                 issueVo.addIssueRelationVo(issueRelationVo);
             }
         } else {
@@ -1829,6 +1871,7 @@
             issueCustomFieldValueCondition.setUseValue(concatUseValue);
             issueCustomFieldValueCondition.setUseValues(userValues);
             issueCustomFieldValueCondition.setIssueTypeId(issueApiform.getIssueTypeId());
+            issueCustomFieldValueCondition.setIssueStatusType("CLOSE");
             List<Map<String, Object>> results = this.issueMapper.findByCustomFieldValue(issueCustomFieldValueCondition);
             if (results != null && results.size() > 0) {
                 for (Map<String, Object> result : results) {
@@ -2053,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;
     }
@@ -2711,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)); // �샇�뒪�똿
 
 
         //  �궗�슜�옄 �젙�쓽 �븘�뱶瑜� �궗�슜�븳 �씠�뒋瑜� 李얜뒗�떎. 留뚯빟 �씠�뒋媛� �뾾�떎硫� �뿬湲곗꽌 �씠�뒋 議고쉶媛� �걹�궃�떎.
@@ -2794,6 +2841,30 @@
             CompanyField companyField = issueCompany.getCompanyField();
             if (companyField != null) {
                 issueCompanyVo.setCompanyId(issueCompany.getCompanyField().getId());
+                if (issueCompany.getCompanyTypeId() != null && issueCompany.getCompanyTypeId() != -1) {
+                    CompanyFieldCategory companyType = this.companyFieldCategoryService.find(issueCompany.getCompanyTypeId());
+                    issueCompanyVo.setCompanyTypeName(companyType.getUseValue());
+                }
+                if (issueCompany.getParentSectorId() != null && issueCompany.getParentSectorId() != -1) {
+                    CompanyFieldCategory parentSector = this.companyFieldCategoryService.find(issueCompany.getParentSectorId());
+                    issueCompanyVo.setParentSectorName(parentSector.getUseValue());
+                }
+                if (issueCompany.getChildSectorId() != null && issueCompany.getChildSectorId() != -1) {
+                    CompanyFieldCategory childSector = this.companyFieldCategoryService.find(issueCompany.getChildSectorId());
+                    issueCompanyVo.setChildSectorName(childSector.getUseValue());
+                }
+                if (issueCompany.getRegionId() != null && issueCompany.getRegionId() != -1) {
+                    CompanyFieldCategory region = this.companyFieldCategoryService.find(issueCompany.getRegionId());
+                    issueCompanyVo.setRegionName(region.getUseValue());
+                }
+                if (issueCompany.getStatusId() != null && issueCompany.getStatusId() != -1) {
+                    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);
         }
@@ -2863,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());
                 //  �벑濡앹옄
@@ -2940,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 �뜲�씠�꽣瑜� �뿊���뿉�꽌 �몴�떆�븷 �닔 �엳�뒗 �뜲�씠�꽣濡� 蹂�寃쏀븳�떎.
@@ -2979,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();
@@ -3024,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);
-
-
                 }
             }
 
@@ -3083,6 +3162,8 @@
                 }
 
                 saveIssueForm.setIssueStatusId(issueStatus.getId());
+
+                this.setIssuePartners(saveIssueForm, issue);
             }
 
 
@@ -3096,7 +3177,7 @@
             //  �씠�뒋 �떞�떦�옄 踰뚰겕 �벑濡�
             this.bulkInsertIssueAssignee(issueForms, workspace);
             //  0.361 - 0.705
-
+            
             //  1.816
             /*StopWatch serviceStart = new StopWatch();
             serviceStart.start();*/
@@ -3115,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);
+            }
         }
     }
 
@@ -3215,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);
+                    }
                 }
             }
         }
@@ -3247,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());
 
@@ -3274,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;
@@ -3294,7 +3481,7 @@
                     break;
 
                 case 1:    //  �궡�슜
-                    if (cell != null) {
+                    if (cellNullCheck(cell)) {
                         issueForm.setDescription(CommonUtil.convertExcelStringToCell(cell));
                     } else {
                         //  null �엯�젰 諛⑹�
@@ -3318,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:
@@ -3337,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));
         }
@@ -3387,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));
         }
@@ -3404,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));
         }
@@ -3471,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);
@@ -3495,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());
@@ -3605,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));
@@ -3632,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();
@@ -3663,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