From 174dc12380c54730014e86c8897be16389fc804f Mon Sep 17 00:00:00 2001
From: 박지현 <jhpark@maprex.co.kr>
Date: 월, 21 2월 2022 11:42:38 +0900
Subject: [PATCH] Merge branch 'master' of http://maprex.iptime.org:9001/r/owl-kisa

---
 src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java |  165 ++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 132 insertions(+), 33 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
index 0c3b5b1..a000400 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java
@@ -10,6 +10,8 @@
 import kr.wisestone.owl.exception.OwlRuntimeException;
 import kr.wisestone.owl.mapper.IssueTypeMapper;
 import kr.wisestone.owl.repository.IssueTypeRepository;
+import kr.wisestone.owl.repository.ProjectClosureRepository;
+import kr.wisestone.owl.repository.ProjectRepository;
 import kr.wisestone.owl.service.*;
 import kr.wisestone.owl.util.ConvertUtil;
 import kr.wisestone.owl.util.MapUtil;
@@ -32,6 +34,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 @Service
 public class IssueTypeServiceImpl extends AbstractServiceImpl<IssueType, Long, JpaRepository<IssueType, Long>> implements IssueTypeService {
@@ -42,10 +45,19 @@
     private IssueTypeRepository issueTypeRepository;
 
     @Autowired
+    private ProjectRepository projectRepository;
+
+    @Autowired
     private WorkflowService workflowService;
 
     @Autowired
+    private WorkflowDepartmentService workflowDepartmentService;
+
+    @Autowired
     private ProjectService projectService;
+
+    @Autowired
+    private ProjectRoleService projectRoleService;
 
     @Autowired
     private WorkspaceService workspaceService;
@@ -61,6 +73,9 @@
 
     @Autowired
     private UserService userService;
+
+    @Autowired
+    private ProjectClosureRepository projectClosureRepository;
 
     @Autowired
     private ExcelView excelView;
@@ -80,26 +95,40 @@
         for (ProjectType projectType : projectTypes) {
             List<IssueType> issueTypes = Lists.newArrayList();
             Workflow workflow = this.workflowService.findByWorkspaceIdAndProjectType(workspace.getId(), projectType);
-            //String projectKey = "BTS";
-            //Project project = this.projectService.findByProjectKey(projectKey);
 
             switch (projectType) {
                 case BTS_PROJECT:
-                    issueTypes.add(new IssueType(workspace, workflow, "�븙�꽦 �룄硫붿씤", "", "#ff5f99")); // 踰꾧렇
-                    issueTypes.add(new IssueType(workspace, workflow, "寃쎌쑀吏� ���쓳", "", "#3598fe")); // 媛쒖꽑
+                    issueTypes.add(new IssueType(workspace, workflow, "�븙�꽦 �룄硫붿씤", "", "#ff5f99", 0L, false)); // 踰꾧렇
+                    issueTypes.add(new IssueType(workspace, workflow, "寃쎌쑀吏� ���쓳", "", "#3598fe", 0L, false)); // 媛쒖꽑
                     break;
 
                 case RMS_PROJECT:
-                    issueTypes.add(new IssueType(workspace, workflow, "�쑀�룷吏� ���쓳", "", "#3bcde2")); // �슂援� �궗�빆
+                    issueTypes.add(new IssueType(workspace, workflow, "�쑀�룷吏� ���쓳", "", "#3bcde2", 0L, false)); // �슂援� �궗�빆
                     break;
 
                 case TCM_PROJECT:
-                    issueTypes.add(new IssueType(workspace, workflow, "遺꾩꽍寃곌낵 ���쓳", "", "#008ca7")); // �뀒�뒪�듃 耳��씠�뒪, �떎�뻾 �닚�꽌, �쟾�젣 議곌굔, 湲곕� 寃곌낵
+                    issueTypes.add(new IssueType(workspace, workflow, "遺꾩꽍寃곌낵 ���쓳", "", "#008ca7", 0L, false)); // �뀒�뒪�듃 耳��씠�뒪, �떎�뻾 �닚�꽌, �쟾�젣 議곌굔, 湲곕� 寃곌낵
                     break;
             }
-
             this.issueTypeRepository.saveAll(issueTypes);
         }
+    }
+
+    @Override
+    @Transactional
+    public void addDefaultUsedProject(Workspace workspace) {
+        List<IssueType> issueTypes = this.issueTypeRepository.findByWorkspaceId(workspace.getId());
+        List<Project> projects = this.projectRepository.findByWorkspaceId(workspace.getId());
+        if(issueTypes != null && issueTypes.size() > 0){
+            for(IssueType issueType : issueTypes){
+                if(projects != null && projects.size()>0){
+                    for(Project project : projects){
+                        issueType.setProject(project);
+                    }
+                }
+            }
+        }
+
     }
 
     //  �씠�뒋 �쑀�삎�쓣 �깮�꽦�븳�떎.
@@ -121,9 +150,33 @@
         Project project = this.projectService.getProject(issueTypeForm.getProjectId());
         issueType.setProject(project);
 
+        //  �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿
+        this.setDepartmentOfProject(project, workflow);
+
         issueType.setUsePartner(issueTypeForm.getUsePartner());
 
+        issueType.setInheritPartners(issueTypeForm.getInheritPartners());
+
         return this.issueTypeRepository.saveAndFlush(issueType);
+    }
+
+    /**
+     * �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿
+     * @param project Project
+     * @param workflow Workflow
+     */
+    private void setDepartmentOfProject(Project project, Workflow workflow) {
+        List<WorkflowDepartment> workflowDepartments = this.workflowDepartmentService.find(workflow.getId());
+
+        //  �빐�떦 �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌媛� 議댁옱 �븷 寃쎌슦 �빐�떦 �봽濡쒖젥�듃�쓽 �떞�떦遺��꽌�뿉�룄 異붽�
+        if (workflowDepartments != null && workflowDepartments.size() > 0) {
+            ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT);
+
+            for (WorkflowDepartment workflowDepartment : workflowDepartments) {
+                //  �봽濡쒖젥�듃 �떞�떦遺��꽌濡� 異붽�
+                projectRole.addDepartment(workflowDepartment.getDepartment());
+            }
+        }
     }
 
     //  �씠由� �쑀�슚�꽦 泥댄겕
@@ -167,10 +220,43 @@
     public List<IssueTypeVo> findIssueType(Map<String, Object> resJsonData,
                                            IssueTypeCondition condition, Pageable pageable) {
 
+        List<Long> downProjectIds = Lists.newArrayList();
+        List<Long> allProjectIds = Lists.newArrayList();
+        List<ProjectClosure> projectClosures = Lists.newArrayList();
+
         condition.setPage(pageable.getPageNumber() * pageable.getPageSize());
         condition.setPageSize(pageable.getPageSize());
         condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
 
+
+        if (condition.getProjectId() == null) {
+            List<ProjectVo> projectVos = this.projectService.findByIncludeProject(Lists.newArrayList("01", "02", "03"), ProjectType.BTS_PROJECT.toString());
+            if (projectVos != null && projectVos.size() > 0) {
+                for (ProjectVo projectVo : projectVos) {
+                    allProjectIds.add(projectVo.getId());
+                    projectClosures = this.projectClosureRepository.findByParentProjectId(projectVo.getId());
+                    if (projectClosures != null && projectClosures.size() > 0) {
+                        for (ProjectClosure projectClosure : projectClosures) {
+                            allProjectIds.add(projectClosure.getProject().getId());
+                        }
+                    }
+                }
+            }
+        }else {
+            projectClosures = this.projectClosureRepository.findByParentProjectId(condition.getProjectId());
+        }
+
+        if (projectClosures != null && projectClosures.size() > 0) {
+            for (ProjectClosure projectClosure : projectClosures) {
+                Long downProjectId = projectClosure.getProject().getId();
+                downProjectIds.add(downProjectId);
+                allProjectIds.add(downProjectId);
+            }
+        }
+        condition.setDownProjectIds(downProjectIds);
+        if (condition.getProjectId() == null) {
+            condition.setAllProjectIds(allProjectIds);
+        }
         List<Map<String, Object>> results = this.issueTypeMapper.find(condition);
         for (Map<String, Object> result : results) {
             Long projectId = MapUtil.getLong(result, "projectId");
@@ -191,9 +277,6 @@
         Long totalCount = this.issueTypeMapper.count(condition);
         int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
         List<IssueTypeVo> issueTypeVos = ConvertUtil.convertListToListClass(results, IssueTypeVo.class);
-//        for (IssueTypeVo issueTypeVo : issueTypeVos) {
-//
-//        }
 
         //  �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �썙�겕�뵆濡쒖슦 �젙蹂대�� �뀑�똿�븳�떎.
         if (condition.getDeep() != null) {
@@ -205,6 +288,7 @@
         /*this.setUseIssueTypeByCompanyField(issueTypeVos);
         this.setUseIssueTypeByIspField(issueTypeVos);
         this.setUseIssueTypeByHostingField(issueTypeVos);*/
+        this.setUsePartner(issueTypeVos);
 
         resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(),
                 totalPage, totalCount));
@@ -231,6 +315,22 @@
         }
     }
 
+    //  �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �뙆�듃�꼫 �젙蹂대�� �뀑�똿�븳�떎.
+    private void setUsePartner(List<IssueTypeVo> issueTypeVos) {
+        for (IssueTypeVo issueTypeVo : issueTypeVos) {
+            List<UsePartnerVo> usePartnerVos = Lists.newArrayList();
+            if (issueTypeVo.getUsePartners() != null) {
+                for (Integer usePartner : UsePartner.partners) {// 1 // 2 // 4
+                    UsePartnerVo usePartnerVo = UsePartner.checkUsePartner(issueTypeVo.getUsePartners(), usePartner);//3, 1 / 3, 2 / 3, 4
+                    if (usePartnerVo != null) {
+                        usePartnerVos.add(usePartnerVo);
+                    }
+                }
+                issueTypeVo.setUsePartnerVos(usePartnerVos);
+            }
+        }
+    }
+
     //  �씠�뒋 �쑀�삎�뿉 �뿰寃곕맂 �봽濡쒖젥�듃 �젙蹂대�� �뀑�똿�븳�떎.
     private void setUseIssueTypeByProject(List<IssueTypeVo> issueTypeVos) {
         for (IssueTypeVo issueTypeVo : issueTypeVos) {
@@ -243,13 +343,20 @@
         }
     }
 
+    //  �씠�뒋 �쑀�삎�뿉 �봽濡쒖젥�듃ID濡� 議고쉶
+    public List<IssueType> findByProjectId(Long projectId) {
+        return this.issueTypeRepository.findByProjectId(projectId);
+    }
+
     private void setUseIssueTypeByIssueStatus(List<IssueTypeVo> issueTypeVos) {
         for (IssueTypeVo issueTypeVo : issueTypeVos) {
             IssueType issueType = this.getIssueType(issueTypeVo.getId());
 
-            IssueStatus issueStatus = issueType.getIssueStatus();
-            if (issueStatus != null) {
-                issueTypeVo.setCompleteIssueStatusVo(ConvertUtil.copyProperties(issueType.getIssueStatus(), IssueStatusVo.class));
+            Set<IssueTypeApiEndStatus> issueTypeApiEndStatuses = issueType.getIssueTypeApiEndStatuses();
+            if (issueTypeApiEndStatuses != null && issueTypeApiEndStatuses.size() > 0) {
+                IssueTypeApiEndStatus issueTypeApiEndStatus = issueTypeApiEndStatuses.iterator().next();
+
+                issueTypeVo.setCompleteIssueStatusVo(ConvertUtil.copyProperties(issueTypeApiEndStatus.getIssueStatus(), IssueStatusVo.class));
             }
         }
     }
@@ -302,26 +409,6 @@
         resJsonData.put(Constants.RES_KEY_CONTENTS, issueTypeVo);
     }
 
-    // �씠�뒋 �쑀�삎�쓣 �닔�젙�븳�떎. �옄�룞 醫낅즺 �꽕�젙留� �닔�젙
-    @Override
-    @Transactional
-    public IssueType modifyIssueTypeCompleteIssueStatus(IssueTypeForm issueTypeForm) {
-        //  �궗�슜�븯怨� �엳�뒗 �뾽臾� 怨듦컙�씠 �솢�꽦 �긽�깭�씤吏� �솗�씤�븳�떎. �궗�슜 怨듦컙�뿉�꽌 濡쒓렇�씤�븳 �궗�슜�옄媛� 鍮꾪솢�꽦�씤吏� �솗�씤�븳�떎.
-        this.workspaceService.checkUseWorkspace();
-
-        IssueType issueType = this.getIssueType(issueTypeForm.getId());
-        if (issueTypeForm.getCompleteIssueStatusId() != null) {
-            // api�뿉�꽌 �궗�슜�븯�뒗 �옄�룞 醫낅즺 �씠�뒋 �긽�깭
-            IssueStatus issueStatus = this.issueStatusService.getIssueStatus(issueTypeForm.getCompleteIssueStatusId());
-            issueType.setIssueStatus(issueStatus);
-        }else {
-            issueType.setIssueStatus(null);
-        }
-
-        this.issueTypeRepository.saveAndFlush(issueType);
-        return issueType;
-    }
-
     //  �씠�뒋 �쑀�삎�쓣 �닔�젙�븳�떎.
     @Override
     @Transactional
@@ -345,7 +432,12 @@
         Project project = this.projectService.getProject(issueTypeForm.getProjectId());
         issueType.setProject(project);
 
+        //  �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿
+        this.setDepartmentOfProject(project, workflow);
+
         issueType.setUsePartner(issueTypeForm.getUsePartner());
+
+        issueType.setInheritPartners(issueTypeForm.getInheritPartners());
 
         /*if(issueTypeForm.getCompanyId() != null){
             CompanyField companyField = this.companyFieldService.getCompany(issueTypeForm.getCompanyId());
@@ -428,6 +520,13 @@
         return this.issueTypeRepository.findByWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
     }
 
+    //  �썙�겕�뵆濡쒖슦 ID濡� �씠�뒋 �쑀�삎 議고쉶
+    @Override
+    @Transactional(readOnly = true)
+    public List<IssueType> findByWorkflowId(Long id) {
+        return this.issueTypeRepository.findByWorkflowId(id);
+    }
+
     //  �씠�뒋 ���엯 �븘�뱶 紐⑸줉�쓣 �뿊��濡� �떎�슫濡쒕뱶 �븳�떎.
     @Override
     @Transactional

--
Gitblit v1.8.0