From b2b9e785e10c8fd59c3fcee8c8fda2aeb86be8c3 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 월, 27 12월 2021 13:34:22 +0900
Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java |  186 +++++++++++++++++++++++++++-------------------
 1 files changed, 110 insertions(+), 76 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 b25b775..8151068 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -187,6 +187,9 @@
     private UserDepartmentService userDepartmentService;
 
     @Autowired
+    private WorkflowTransitionService workflowTransitionService;
+
+    @Autowired
     private UserDepartmentRepository userDepartmentRepository;
 
     @Autowired
@@ -194,6 +197,9 @@
 
     @Autowired
     private WorkflowDepartmentRepository workflowDepartmentRepository;
+
+    @Autowired
+    WorkflowService workflowService;
 
     @Override
     protected JpaRepository<Issue, Long> getRepository() {
@@ -234,7 +240,6 @@
         }
 
         Workflow workflow = issueType.getWorkflow();
-
         if (issueApiForm.getApiType().equals(IssueApiForm.ApiType.add)) {
             // �씠�뒋 �긽�깭媛� 吏��젙�릺�뼱 �엳吏� �븡�쓣 寃쎌슦 �썙�겕�뵆濡쒖슦 ��湲� �긽�깭 媛믪쑝濡� 吏��젙
             List<Long> departmentIds = this.workflowDepartmentService.findFirstDepartmentIds(workflow);
@@ -243,8 +248,15 @@
                     issueForm.addDepartmentId(departmentId);
                 }
             }
-        } else if (issueApiForm.getIssueStatusId() == null){
-            throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST));
+        } else {
+            if (issueApiForm.getIssueStatusId() == null){
+                throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_IS_NULL));
+            }
+            // �썙�겕�뵆濡쒖슦�뿉�꽌 �궗�슜 以묒씤 �씠�뒋 �긽�깭�씤吏� 泥댄겕
+            else if (!this.workflowTransitionService.contains(issueApiForm.getIssueStatusId(), workflow.getId())) {
+                throw new OwlRuntimeException(
+                        this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_IN_WORKFLOW));
+            }
         }
 
         // �봽濡쒖젥�듃 �엯�젰
@@ -280,6 +292,20 @@
             if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) {
                 for (int i = 0; i < customFieldApiOverlaps.size(); i++) {
                     CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i);
+                    CustomField customField = customFieldApiOverlap.getCustomField();
+                    if (customField.getCustomFieldType() == CustomFieldType.SITE) {
+                        for (Map<String, Object> map : issueApiForm.getCustomFieldValues()) {
+                            if (customField.getId().equals(MapUtil.getLong(map, "customFieldId"))) {
+                                String fullUrl = MapUtil.getString(map, "useValue");
+                                String url = CommonUtil.getUrl(fullUrl);
+                                if (!url.equals("")) {
+                                    issueApiForm.setUrl(fullUrl);
+                                    break;
+                                }
+                            }
+                        }
+
+                    }
                     issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId());
                 }
 
@@ -301,7 +327,7 @@
             // �궗�슜�옄 �젙�쓽 �븘�뱶 �꽕�젙
             issueForm.setIssueCustomFields(issueApiForm.getCustomFieldValues());
             //  媛숈� �룄硫붿씤 �뾽泥� 李얘린
-            this.findCompanyField(issueForm);
+            this.findCompanyField(issueForm, issueApiForm.getUrl());
 
             // api �엯�젰媛� �쟻�슜
             ConvertUtil.copyProperties(issueApiForm, issueForm);
@@ -313,45 +339,36 @@
         }
     }
 
-    private void findCompanyField(IssueForm issueForm) {
+    private void findCompanyField(IssueForm issueForm, String url) {
         if(issueForm.getIssueCustomFields() != null && issueForm.getIssueCustomFields().size() > 0) {
             CompanyFieldCondition condition = new CompanyFieldCondition();
+            condition.setUrl(url);
             List<Map<String, Object>> companyFields = this.companyFieldService.find(condition);
             List<Map<String, Object>> issueCompanyFields = Lists.newArrayList();
             List<Map<String, Object>> issueIspFields = Lists.newArrayList();
             List<Map<String, Object>> issueHostingFields = Lists.newArrayList();
 
-            for (Map<String, Object> issueCustomField : issueForm.getIssueCustomFields()) {
-                int customFieldId = (Integer) issueCustomField.get("customFieldId");
-                Long customId = (long) customFieldId;
-                CustomField customField = this.customFieldService.getCustomField(customId);
-                if(customField != null && customField.getCustomFieldType().toString().equals("SITE") && customField.getName().equals("�룄硫붿씤")) {
-                    String useValue = issueCustomField.get("useValue").toString();
-                    if(companyFields != null && companyFields.size() > 0) {
-                        for (Map<String, Object> companyField : companyFields) {
-                            CompanyFieldVo companyFieldVo = ConvertUtil.convertMapToClass(companyField, CompanyFieldVo.class);
-                            if(useValue.equals(companyFieldVo.getUrl())) {
-                                companyField.put("companyId", companyField.get("id"));
-                                issueCompanyFields.add(companyField);
-                                if(companyFieldVo.getIspId() != null) {
-                                    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) {
-                                    Map<String, Object> hostingField = this.hostingFieldService.find(companyFieldVo.getHostingId());
-                                    if (hostingField != null) {
-                                        hostingField.put("hostingId", hostingField.get("id"));
-                                        issueHostingFields.add(hostingField);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
+            if (companyFields != null && companyFields.size() > 0) {
+                Map<String, Object> companyFieldMap = companyFields.get(0);
+                companyFieldMap.put("companyId", companyFieldMap.get("id"));
+
+                issueCompanyFields.add(companyFieldMap);
                 issueForm.setIssueCompanyFields(issueCompanyFields);
+
+                IspField ispField = this.ispFieldService.getIsp(MapUtil.getLong(companyFieldMap, "ispId"));
+                if (ispField != null) {
+                    Map<String, Object> ispFieldMap = ConvertUtil.convertObjectToMap(ispField);
+                    ispFieldMap.put("ispId", ispField.getId());
+                    issueIspFields.add(ispFieldMap);
+                }
+
+                HostingField hostingField = this.hostingFieldService.getHosting(MapUtil.getLong(companyFieldMap, "hostingId"));
+                if (hostingField != null) {
+                    Map<String, Object> hostingFieldMap = ConvertUtil.convertObjectToMap(hostingField);
+                    hostingFieldMap.put("hostingId", hostingField.getId());
+                    issueHostingFields.add(hostingFieldMap);
+                }
+
                 issueForm.setIssueIspFields(issueIspFields);
                 issueForm.setIssueHostingFields(issueHostingFields);
             }
@@ -493,11 +510,11 @@
         //  �떞�떦遺��꽌 吏��젙
         this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
         //  �뾽泥� �젙蹂� ���옣
-        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
+        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
         //  ISP �젙蹂� ���옣
-        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
+        this.issueIspService.modifyIssueIspField(issue, issueForm);
         //  HOSTING �젙蹂� ���옣
-        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
+        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
 
 
         //  泥⑤� �뙆�씪 ���옣
@@ -587,11 +604,11 @@
         //  �떞�떦遺��꽌 吏��젙
         this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
         //  �뾽泥� �젙蹂� ���옣
-        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
+        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
         //  ISP �젙蹂� ���옣
-        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
+        this.issueIspService.modifyIssueIspField(issue, issueForm);
         //  HOSTING �젙蹂� ���옣
-        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
+        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
 
         //  泥⑤� �뙆�씪 ���옣
         //  multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎.
@@ -664,11 +681,11 @@
         //  �떞�떦遺��꽌 吏��젙
         this.issueDepartmentService.modifyIssueDepartment(issue, user, project.getWorkspace(), issueForm.getDepartmentIds());
         //  �뾽泥� �젙蹂� ���옣
-        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
+        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
         //  ISP �젙蹂� ���옣
-        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
+        this.issueIspService.modifyIssueIspField(issue, issueForm);
         //  HOSTING �젙蹂� ���옣
-        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
+        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
 
         //  泥⑤� �뙆�씪 ���옣
         //  multipartFile �쓣 file Map List 媛앹껜濡� 蹂�寃쏀븳�떎.
@@ -892,7 +909,6 @@
     @Override
     @Transactional(readOnly = true)
     public List<IssueVo> findIssue(Map<String, Object> resJsonData, IssueCondition issueCondition, Pageable pageable) {
-
         //  寃��깋 議곌굔�쓣 留뚮뱺�떎
         if (!this.makeIssueSearchCondition(issueCondition, Lists.newArrayList("01", "02", "03"), pageable)) {
             //  �씠�뒋 紐⑸줉�쓣 李얠� 紐삵븷 寃쎌슦 湲곕낯 �젙蹂대줈 由ы꽩�븳�떎.
@@ -926,15 +942,14 @@
         Long totalCount = 0L;
         UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
 
-        if (this.userWorkspaceService.checkWorkspaceManager(user)
-                || (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT) &&
-                MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE))) {
-            this.SetAllDepartmentId(issueCondition);
-        } else{
-            this.SetMyDepartmentId(issueCondition);
-            /*results = this.issueMapper.findByDepartment(issueCondition);
-            totalCount = this.issueMapper.countByDepartment(issueCondition);*/
-        }
+//        if (!this.userWorkspaceService.checkWorkspaceManager(user)
+//                && !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { //理쒓퀬愿�由ъ옄 & �봽濡쒖젥�듃,�씠�뒋 愿�由ъ옄 �씪 寃쎌슦 紐⑤뱺 �씠�뒋 蹂닿린
+//            this.SetMyDepartmentId(issueCondition);
+        //this.SetAllDepartmentId(issueCondition);
+//        } /*else{
+//            results = this.issueMapper.findByDepartment(issueCondition);
+//            totalCount = this.issueMapper.countByDepartment(issueCondition);
+//        }*/
         results = this.issueMapper.find(issueCondition);
         totalCount = this.issueMapper.count(issueCondition);
 
@@ -1241,16 +1256,27 @@
         condition.setLoginUserId(this.webAppUtil.getLoginId());
         condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
 
+        User user = this.webAppUtil.getLoginUserObject();
+        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
+
         //  �봽濡쒖젥�듃 �궎媛� 議댁옱�븷 寃쎌슦 �봽濡쒖젥�듃 �궎�뿉 �빐�떦�븯�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븯怨� 寃��깋 議곌굔�뿉 �뀑�똿�븳�떎.
         if (!this.getProjectByProjectKey(condition.getProjectKey(), condition)) {
             return false;
         }
 
         //  �봽濡쒖젥�듃瑜� �꽑�깮�븯吏� �븡�븯�쑝硫� �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 李얜뒗�떎.
-        /*if (condition.getProjectIds().size() < 1) {
-            List<Map<String, Object>> projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType());
-            List<Long> projectIds = Lists.newArrayList();
+        if (condition.getProjectIds().size() < 1) {
+            List<Map<String, Object>> projects = Lists.newArrayList();
+            if (this.userWorkspaceService.checkWorkspaceManager(user) || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)){
+                return true;
+            }/*else if (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)){
+                projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType());
+            }*/
+            else {
+                projects = this.projectService.findByWorkspaceIdAndIncludeProject(projectStatues, condition.getProjectType());
+            }
 
+            List<Long> projectIds = Lists.newArrayList();
             for (Map<String, Object> result : projects) {
                 Long projectId = MapUtil.getLong(result, "id");
 
@@ -1264,7 +1290,7 @@
             if (projectIds.size() < 1) {
                 return false;
             }
-        }*/
+        }
 
         return true;
     }
@@ -1747,6 +1773,9 @@
         String comma = ",";
 
         if (issueCustomFieldValueForms.size() > 0) {
+            IssueCustomFieldValueFormComparator comp = new IssueCustomFieldValueFormComparator();
+            Collections.sort(issueCustomFieldValueForms, comp);
+
             String concatUseValue = "";
             for (int i = 0; i < issueCustomFieldValueForms.size(); i++) {
                 IssueCustomFieldValueForm issueCustomFieldValueForm = issueCustomFieldValueForms.get(i);
@@ -1793,21 +1822,21 @@
             List<Issue> issues = Lists.newArrayList();
             for (Issue issueVo : issue) {
                 issueForm.setId(issueVo.getId());
+                issueForm.setTitle(issueVo.getTitle());
 
                 // �옄�룞 醫낅즺 �긽�깭 �꽕�젙�씠 �릺�뼱 �엳吏� �븡�쑝硫� �삤瑜섎컻�깮
                 Issue modifyIssue = this.modifyIssueForApi(user, issueForm, files);
                 Issue parentIssue = modifyIssue.getParentIssue();
                 IssueType issueType = modifyIssue.getIssueType();
 
-                Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses();
-                IssueTypeApiEndStatus issueStatus = null;
-                if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) {
-                    issueStatus = issueTypeApiEndStatuses.iterator().next();
-                } else {
-                    throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST));
-                }
-
                 if (parentIssue != null) {
+                    Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses();
+                    IssueTypeApiEndStatus issueStatus = null;
+                    if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) {
+                        issueStatus = issueTypeApiEndStatuses.iterator().next();
+                    } else {
+                        throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST));
+                    }
 
                     IssueCondition issueCondition = new IssueCondition(issueVo.getId(), parentIssue.getId());
                     List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(issueCondition);
@@ -1984,11 +2013,11 @@
         log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(userVo, ElasticSearchConstants.ISSUE_MODIFY));
 
         //  �뾽泥� �젙蹂� ���옣
-        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm.getIssueCompanyFields());
+        this.issueCompanyService.modifyIssueCompanyField(issue, issueForm);
         //  ISP �젙蹂� ���옣
-        this.issueIspService.modifyIssueIspField(issue, issueForm.getIssueIspFields());
+        this.issueIspService.modifyIssueIspField(issue, issueForm);
         //  HOSTING �젙蹂� ���옣
-        this.issueHostingService.modifyIssueHostingField(issue, issueForm.getIssueHostingFields());
+        this.issueHostingService.modifyIssueHostingField(issue, issueForm);
 
         return issue;
     }
@@ -3217,15 +3246,21 @@
                     break;*/
                 case 6:
                     //  �떞�떦遺��꽌瑜� IssueForm �뿉 ���옣�븳�떎.
-                    this.setIssueFormDepartment(cell, departmentMaps, issueForm, project);
+                    if (cell != null) {
+                        this.setIssueFormDepartment(cell, departmentMaps, issueForm, project);
+                    }
                     break;
                 case 7:
                     //  �떆�옉�씪�쓣 IssueForm �뿉 ���옣�븳�떎.
-                    this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
+                    if (cell != null) {
+                        this.setIssueFormPeriod(cell, issueForm, true, rowIndex);
+                    }
                     break;
                 case 8:
                     //  醫낅즺�씪�쓣 IssueForm �뿉 ���옣�븳�떎.
-                    this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
+                    if (cell != null) {
+                        this.setIssueFormPeriod(cell, issueForm, false, rowIndex);
+                    }
                     break;
                 default:
                     //  9踰� 遺��꽣�뒗 �궗�슜�옄 �젙�쓽 �븘�뱶. �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� IssueForm �뿉 ���옣�븳�떎.
@@ -3808,14 +3843,13 @@
 
     @Override
     public void findReadyDepartments(Map<String, Object> resJsonData, DepartmentCondition condition, Pageable pageable) {
-        Integer issueStatusId = 1;
-        condition.setIssueStatusId(issueStatusId);
-
         IssueType issueType = this.issueTypeService.getIssueType(condition.getIssueTypeId());
         if (issueType != null) {
+            //  �씠�뒋 �긽�깭 �쑀�삎�씠 '��湲�' �씤 �씠�뒋 �긽�깭 媛��졇�삤湲�
+            IssueStatus issueStatus = this.issueStatusService.findByIssueStatusTypeIsReady(issueType.getWorkflow());
+            condition.setIssueStatusId(issueStatus.getId());
             condition.setWorkflowId(issueType.getWorkflow().getId());
         }
-
         List<Map<String, Object>> departmentVos = this.departmentMapper.findByIssueStatusId(condition);
         resJsonData.put(Constants.RES_KEY_CONTENTS, departmentVos);
     }

--
Gitblit v1.8.0