From cd56d401c5233f24790a5be8ba4075a97ab80fe3 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 화, 28 12월 2021 19:20:08 +0900
Subject: [PATCH] 상위 프로젝트는 추가 못하도록 수정

---
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java |   95 +++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 79 insertions(+), 16 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
index 339af76..35baccf 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -66,6 +66,9 @@
     private UserWorkspaceService userWorkspaceService;
 
     @Autowired
+    private IssueTypeService issueTypeService;
+
+    @Autowired
     private UserLevelService userLevelService;
 
     @Autowired
@@ -118,8 +121,8 @@
         project.setProjectKey("BTS");
         project.setStatus(Project.PROJECT_OPEN);
         project.setDescription(this.messageAccessor.message("common.intoTheSystemIssueManagementProject")); // �떆�뒪�뀥�뿉�꽌 湲곕낯�쑝濡� �젣怨듬릺�뒗 �씠�뒋 愿�由� �봽濡쒖젥�듃�엯�땲�떎.
-        project.setStartDate(DateUtil.convertDateToYYYYMMDD(new Date()));
-        project.setEndDate(DateUtil.convertDateToYYYYMMDD(DateUtil.addDays(new Date(), 3650)));
+        //project.setStartDate(DateUtil.convertDateToYYYYMMDD(new Date()));
+        //project.setEndDate(DateUtil.convertDateToYYYYMMDD(DateUtil.addDays(new Date(), 3650)));
         //  湲곕낯�쑝濡� �깮�꽦�릺�뒗 �봽濡쒖젥�듃�쓽 �쑀�삎�� BTS
         project.setProjectType(ProjectType.BTS_PROJECT);
         project.setWorkspace(workspace);
@@ -368,7 +371,7 @@
             //  愿�由ъ옄�씪 �븣
             UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
             if (this.userWorkspaceService.checkWorkspaceManager(user)
-                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT_ALL)) {
+                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
                 results = this.projectMapper.findByWorkspaceManager(condition);
                 totalCount = this.projectMapper.countByWorkspaceManager(condition);
             }
@@ -386,6 +389,7 @@
         int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
         //  �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� ProjectVos 濡� 蹂��솚�븳�떎. - 愿�由ъ옄, �씪諛� �궗�슜�옄 �젙蹂� 異붽�
         List<ProjectVo> projectVos = this.makeProjectVos(results, user);
+        this.setParentProject(projectVos);
         this.setChildrenProject(projectVos, user);
 
         resJsonData.put(Constants.RES_KEY_CONTENTS, projectVos);
@@ -426,24 +430,40 @@
     //  �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� ProjectVos 濡� 蹂��솚�븳�떎. - 愿�由ъ옄, �씪諛� �궗�슜�옄 �젙蹂� 異붽�
     private List<ProjectVo> makeProjectVos(List<Map<String, Object>> results, User user) {
         List<ProjectVo> projectVos = Lists.newArrayList();
+        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
 
         for (Map<String, Object> result : results) {
             ProjectVo projectVo = ConvertUtil.convertMapToClass(result, ProjectVo.class);
             //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄瑜� �뀑�똿�븳�떎. - 愿�由ъ옄 / �씪諛� �궗�슜�옄
             this.setProjectUser(projectVo, true);
             this.setProjectUser(projectVo, false);
-            
+
             //  �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 遺��꽌 �꽭�똿
             this.setProjectDepartment(projectVo);
 
             //  �뾽臾닿났媛� �떞�떦�옄�뒗 紐⑤뱺 �봽濡쒖젥�듃瑜� �닔�젙/�궘�젣�븷 �닔 �엳�뼱�빞 �븳�떎.
-            if (this.userWorkspaceService.checkWorkspaceManager(user)) {
+            if (this.userWorkspaceService.checkWorkspaceManager(user)
+                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
                 projectVo.setModifyPermissionCheck(true);
             }
             projectVos.add(projectVo);
         }
 
         return projectVos;
+    }
+
+    //  �긽�쐞 �봽濡쒖젥�듃瑜� 李얠븘以��떎.
+    private void setParentProject(List<ProjectVo> projectVos) {
+        for (ProjectVo projectVo : projectVos) {
+            ProjectClosure projectClosure = this.projectClosureRepository.findByProjectId(projectVo.getId());
+            if (projectClosure != null) {
+                Project parentProject = this.getProject(projectClosure.getParentProject().getId());
+                ProjectVo parentProjectVo = ConvertUtil.copyProperties(parentProject, ProjectVo.class);
+                parentProjectVo.setParentYn(true);
+                ConvertUtil.copyProperties(parentProjectVo, projectVo);
+                this.setProjectDepartment(projectVo);
+            }
+        }
     }
 
     //  愿�由ъ옄, �씪諛� �궗�슜�옄瑜� 議곌굔�뿉 �뵲�씪 李얠븘以��떎.
@@ -559,7 +579,7 @@
         User user = this.webAppUtil.getLoginUserObject();
 
         //  �썙�겕�뒪�럹�씠�뒪�뿉�꽌 湲곕낯�쑝濡� �젣怨듬릺�뒗 �봽濡쒖젥�듃�뿉 ���븳 泥댄겕
-        this.checkDefaultProject(project, projectForm);
+        //this.checkDefaultProject(project, projectForm);
         //  �닔�젙 沅뚰븳 泥댄겕
         this.checkModifyPermission(project.getId(), user);
         //  愿�由ъ옄 蹂�寃�
@@ -684,6 +704,20 @@
         }
     }
 
+    private void checkUsingIssueType(Long projectId) {
+        Boolean del = Boolean.FALSE;
+
+        List<IssueType> usingIssueTypes = this.issueTypeService.findByProjectId(projectId);
+        if (usingIssueTypes == null || usingIssueTypes.isEmpty()) {
+            del = true;
+        }
+
+        if (!del) {
+            throw new OwlRuntimeException(
+                    this.messageAccessor.getMessage(MsgConstants.PROJECT_NOT_DELETE));
+        }
+    }
+
     //  濡쒓렇�씤�븳 �궗�슜�옄媛� 愿�由ъ옄 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
     private void checkModifyPermission(Long projectId, User user) {
         Boolean hasPermission = Boolean.FALSE;
@@ -699,11 +733,13 @@
         projectRoleUserMap.put("statuses", Lists.newArrayList("02"));   //  愿�由ъ옄 議고쉶
 
         List<Map<String, Object>> projectUsers = this.projectRoleUserService.findProjectRoleUser(projectRoleUserMap);
+        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
         //  �쁽�옱 濡쒓렇�씤 �궗�슜�옄媛� 愿�由ъ옄�씤吏� �솗�씤
         if (projectUsers != null && !projectUsers.isEmpty()) {
             for (Map<String, Object> projectUser : projectUsers) {
                 UserVo userVo = ConvertUtil.convertMapToClass(projectUser, UserVo.class);
-                if (userVo.getId().equals(this.webAppUtil.getLoginId())) {
+                if (userVo.getId().equals(this.webAppUtil.getLoginId())
+                        || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
                     hasPermission = true;
                     break;
                 }
@@ -1020,10 +1056,11 @@
     private void removeProjects(Long projectId) {
         Project project = this.getProject(projectId);
         //  湲곕낯 �봽濡쒖젥�듃�뒗 �궘�젣 湲덉�
-        if (project.getDefaultYn()) {
+        /*if (project.getDefaultYn()) {
             throw new OwlRuntimeException(
                     this.messageAccessor.getMessage(MsgConstants.DEFAULT_PROJECT_NOT_REMOVE));
-        }
+        }*/
+        this.checkUsingIssueType(project.getId());
 
         //  濡쒓렇�씤�븳 �궗�슜�옄媛� 愿�由ъ옄 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
         this.checkModifyPermission(project.getId(), this.webAppUtil.getLoginUserObject());
@@ -1078,7 +1115,7 @@
         projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
         projectCondition.setProjectType(projectType);
         projectCondition.setStatuses(statuses);
-
+        this.SetMyDepartmentId(projectCondition);
         return this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition);
     }
 
@@ -1087,6 +1124,7 @@
     public List<Map<String, Object>> findByWorkspaceIdAndIncludeProject(ProjectCondition projectCondition) {
         projectCondition.setLoginUserId(this.webAppUtil.getLoginId());
         projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
+        this.SetMyDepartmentId(projectCondition);
         return this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition);
     }
 
@@ -1113,7 +1151,15 @@
     public List<Map<String, Object>> findByWorkspaceIdAndIncludeProjectAll(ProjectCondition projectCondition) {
         projectCondition.setLoginUserId(this.webAppUtil.getLoginId());
         projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
-        return this.projectMapper.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
+
+        UserWorkspace userWorkspace = this.userWorkspaceService.findWorkspaceManager(this.webAppUtil.getLoginId());
+        List<Map<String, Object>> results = Lists.newArrayList();
+        if(userWorkspace != null) {// �썙�겕�뒪�럹�씠�뒪 愿�由ъ옄�씪寃쎌슦
+            results = this.projectMapper.findByWorkspaceIdAndProjectAll(projectCondition);
+        } else {
+            results = this.projectMapper.findByWorkspaceIdAndIncludeProjectAll(projectCondition);
+        }
+        return results;
     }
 
     //  �쁽�옱 �젒洹쇳븳 �뾽臾닿났媛꾩뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎. - �긽�떒 �봽濡쒖젥�듃 紐⑸줉�뿉�꽌 �궗�슜
@@ -1121,6 +1167,7 @@
     @Transactional(readOnly = true)
     public List<ProjectVo> findByIncludeProject(List<String> statuses, String projectType) {
         User user = this.webAppUtil.getLoginUserObject();
+        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
 
         ProjectCondition projectCondition = new ProjectCondition();
         projectCondition.setLoginUserId(user.getId());
@@ -1130,9 +1177,11 @@
 
         List<Map<String, Object>> results;
 
-        if (this.userWorkspaceService.checkWorkspaceManager(user)) {
+        if (this.userWorkspaceService.checkWorkspaceManager(user)
+                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
             results = this.projectMapper.findByWorkspaceManager(projectCondition);
         } else {
+            this.SetMyDepartmentId(projectCondition);
             results = this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition);
         }
         List<ProjectVo> projectVos = this.makeProjectByVos(results);
@@ -1161,7 +1210,19 @@
         ProjectCondition projectCondition = ProjectCondition.make(conditions);
         projectCondition.setLoginUserId(this.webAppUtil.getLoginId());
         projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
-        List<Map<String, Object>> results = this.projectMapper.find(projectCondition);
+
+        User user = this.webAppUtil.getLoginUserObject();
+        List<Map<String, Object>> results;
+        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
+
+        if (this.userWorkspaceService.checkWorkspaceManager(user)
+                || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
+            results = this.projectMapper.findByWorkspaceManager(projectCondition);
+        }
+        else {
+            this.SetMyDepartmentId(projectCondition);
+            results = this.projectMapper.find(projectCondition);
+        }
         //  �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� ProjectVos 濡� 蹂��솚�븳�떎. - 愿�由ъ옄, �씪諛� �궗�슜�옄 �젙蹂� 異붽�
         List<ProjectVo> projectVos = this.makeProjectVos(results, this.webAppUtil.getLoginUserObject());
         ExportExcelVo excelInfo = new ExportExcelVo();
@@ -1169,7 +1230,8 @@
         excelInfo.addAttrInfos(new ExportExcelAttrVo("statusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �긽�깭
         excelInfo.addAttrInfos(new ExportExcelAttrVo("name", this.messageAccessor.message("common.project"), 40, ExportExcelAttrVo.ALIGN_LEFT)); // �봽濡쒖젥�듃
         excelInfo.addAttrInfos(new ExportExcelAttrVo("manager", this.messageAccessor.message("common.admin"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 愿�由ъ옄
-        excelInfo.addAttrInfos(new ExportExcelAttrVo("members", this.messageAccessor.message("common.teamMember"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // ���썝
+        //excelInfo.addAttrInfos(new ExportExcelAttrVo("members", this.messageAccessor.message("common.teamMember"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // ���썝
+        excelInfo.addAttrInfos(new ExportExcelAttrVo("departments", this.messageAccessor.message("common.teamDepartment"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // ���썝
         excelInfo.addAttrInfos(new ExportExcelAttrVo("period", this.messageAccessor.message("common.period"), 20, ExportExcelAttrVo.ALIGN_CENTER)); // 湲곌컙
         excelInfo.addAttrInfos(new ExportExcelAttrVo("projectKey", this.messageAccessor.message("common.projectKey"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �봽濡쒖젥�듃 �궎
         //  �뿊���뿉 �꽔�쓣 �뜲�씠�꽣 - ProjectVos �뜲�씠�꽣瑜� �뿊���뿉�꽌 �몴�떆�븷 �닔 �엳�뒗 �뜲�씠�꽣濡� 蹂�寃쏀븳�떎.
@@ -1213,7 +1275,8 @@
             }
 
             result.put("manager", stringBuilderManager.toString());
-            result.put("members", CommonUtil.convertUserVosToString(projectVo.getProjectUserVos()));
+            //result.put("members", CommonUtil.convertUserVosToString(projectVo.getProjectUserVos()));
+            result.put("departments", CommonUtil.convertDepartmentVosToString(projectVo.getProjectDepartmentVos()));
             result.put("projectKey", projectVo.getProjectKey());
             result.put("period", projectVo.getStartDate() + " - " + projectVo.getEndDate());
             results.add(result);
@@ -1245,4 +1308,4 @@
         resJsonData.put(Constants.RES_KEY_CONTENTS, ConvertUtil.copyProperties(project, ProjectVo.class));
     }
 
-}
+}
\ No newline at end of file

--
Gitblit v1.8.0