From fe2856826d978b2a231ea684231459d7d3b22e1e Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 수, 15 12월 2021 17:14:49 +0900
Subject: [PATCH] 일반 사용자 로그인시 상단 프로젝트 목록과 프로젝트 메뉴의 목록 개수가 다른 문제 해결

---
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java |  181 ++++++++++++++++++++++++++++++++++----------
 1 files changed, 139 insertions(+), 42 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 adf2ad1..6689f61 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -3,6 +3,7 @@
 import com.google.common.collect.Lists;
 import kr.wisestone.owl.common.ExcelConditionCheck;
 import kr.wisestone.owl.constant.Constants;
+import kr.wisestone.owl.constant.MngPermission;
 import kr.wisestone.owl.constant.MsgConstants;
 import kr.wisestone.owl.domain.*;
 import kr.wisestone.owl.domain.enumType.EmailType;
@@ -11,12 +12,14 @@
 import kr.wisestone.owl.mapper.ProjectMapper;
 import kr.wisestone.owl.repository.ProjectClosureRepository;
 import kr.wisestone.owl.repository.ProjectRepository;
+import kr.wisestone.owl.repository.UserDepartmentRepository;
 import kr.wisestone.owl.service.*;
 import kr.wisestone.owl.util.CommonUtil;
 import kr.wisestone.owl.util.ConvertUtil;
 import kr.wisestone.owl.util.DateUtil;
 import kr.wisestone.owl.vo.*;
 import kr.wisestone.owl.web.condition.ProjectCondition;
+import kr.wisestone.owl.web.condition.WidgetCondition;
 import kr.wisestone.owl.web.form.ProjectForm;
 import kr.wisestone.owl.web.view.ExcelView;
 import org.apache.commons.lang3.StringUtils;
@@ -48,6 +51,9 @@
     private DepartmentService departmentService;
 
     @Autowired
+    private UserDepartmentRepository userDepartmentRepository;
+
+    @Autowired
     private ProjectRoleService projectRoleService;
 
     @Autowired
@@ -58,6 +64,9 @@
 
     @Autowired
     private UserWorkspaceService userWorkspaceService;
+
+    @Autowired
+    private UserLevelService userLevelService;
 
     @Autowired
     private SystemEmailService systemEmailService;
@@ -117,7 +126,7 @@
         project.setDefaultYn(true);
         this.projectRepository.saveAndFlush(project);
         //  �봽濡쒖젥�듃 湲곕낯 �뿭�븷怨� 愿�由ъ옄 �뿭�븷�쓣 �깮�꽦�븳�떎. 愿�由ъ옄�뒗 �깮�꽦�븳 �궗�슜�옄
-        this.projectRoleService.addDefaultProjectRole(project, Lists.newArrayList(user), Lists.newArrayList());
+        this.projectRoleService.addDefaultProjectRoleUser(project, Lists.newArrayList(user), Lists.newArrayList());
         //  媛� �봽濡쒖젥�듃�쓽 �씠�뒋 踰덊샇瑜� �옄�룞�쑝濡� �깮�꽦�븳�떎.
         this.issueNumberGeneratorService.generateIssueNumber(project);
 
@@ -140,7 +149,7 @@
         //  �긽�깭 泥댄겕
         this.verifyProjectStatus(projectForm.getStatus());
         //  �궇吏� �쑀�슚�꽦 泥댄겕
-        this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate());
+        //this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate());
         //  愿�由ъ옄 �쑀�슚�꽦 泥댄겕
         this.verifyManager(projectForm.getManagerIds());
 
@@ -183,16 +192,8 @@
             sendEmails.add(user.getAccount());
         }
 
-        List<Department> departments = Lists.newArrayList();
-        //  遺��꽌 �벑濡�
-        for (Long departmentId : projectForm.getDepartmentIds()) {
-            Department department = this.departmentService.getDepartment(departmentId);
-            departments.add(department);
-        }
-
         //  湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �궗�슜�옄瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎.
-        //this.projectRoleService.addDefaultProjectRole(project, managers, users);
-        this.projectRoleService.addDefaultProjectRole(project, managers, departments);
+        this.projectRoleService.addDefaultProjectRoleUser(project, managers, users);
 
         //  �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎.
         Map<String, Object> projectMap = new HashMap<>();
@@ -220,15 +221,22 @@
         }
 
         List<Department> departments = Lists.newArrayList();
+        List<String> sendEmails = Lists.newArrayList(); //  硫붿씪 ���긽�옄
         //  遺��꽌 �벑濡�
         for (Long departmentId : projectForm.getDepartmentIds()) {
             Department department = this.departmentService.getDepartment(departmentId);
+            /*List<UserDepartment> userDepartments = this.userDepartmentService.getUserDepartments(departmentId);
+            if(userDepartments != null){
+                for (UserDepartment userDepartment : userDepartments){
+                    User user = this.userService.getUser(userDepartment.getUserId());
+                    sendEmails.add(user.getAccount());
+                }
+            }*/
             departments.add(department);
         }
 
-        //  湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �궗�슜�옄瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎.
-        //this.projectRoleService.addDefaultProjectRole(project, managers, users);
-        this.projectRoleService.addDefaultProjectRole(project, managers, departments);
+        //  湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �떞�떦遺��꽌瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎.
+        this.projectRoleService.addDefaultProjectRoleDepartment(project, managers, departments);
 
         //  �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎.
         Map<String, Object> projectMap = new HashMap<>();
@@ -243,6 +251,8 @@
         stringBuilder.append(")");
 
         projectMap.put("projectManagerName", stringBuilder.toString());
+        //  �봽濡쒖젥�듃 �떞�떦遺��꽌 硫붿씪 諛쒖넚 �삁�빟
+        this.systemEmailService.reservationEmail(sendEmails.toArray(new String[sendEmails.size()]), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap);
     }
 
 
@@ -324,6 +334,19 @@
         }
     }
 
+    void SetMyDepartmentId(ProjectCondition projectCondition){
+        Long loginId = projectCondition.getLoginUserId();
+        List<Long> myDepartmentIds = Lists.newArrayList();
+        List<UserDepartment> myDepartments = this.userDepartmentRepository.findByUserId(loginId);
+
+        if(myDepartments != null && myDepartments.size() > 0){
+            for(UserDepartment myDepartment : myDepartments){
+                myDepartmentIds.add(myDepartment.getDepartmentId());
+            }
+        }
+        projectCondition.setMyDepartmentIds(myDepartmentIds);
+    }
+
     //  �봽濡쒖젥�듃 紐⑸줉�쓣 議고쉶�븳�떎.
     @Override
     @Transactional(readOnly = true)
@@ -338,14 +361,19 @@
         List<Map<String, Object>> results;
         Long totalCount;
 
+        User user = this.webAppUtil.getLoginUserObject();
+
         if (condition.getWorkspaceManager()) {
             //  �뾽臾닿났媛� 愿�由ъ옄�씪 寃쎌슦 紐⑤뱺 �봽濡쒖젥�듃媛� �몴�떆�릺�뼱�빞 �븳�떎.
             //  愿�由ъ옄�씪 �븣
-            if (this.userWorkspaceService.checkWorkspaceManager()) {
+            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(condition);
                 totalCount = this.projectMapper.countByWorkspaceManager(condition);
             }
             else {
+                this.SetMyDepartmentId(condition);
                 results = this.projectMapper.find(condition);
                 totalCount = this.projectMapper.count(condition);
             }
@@ -357,8 +385,8 @@
 
         int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
         //  �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� ProjectVos 濡� 蹂��솚�븳�떎. - 愿�由ъ옄, �씪諛� �궗�슜�옄 �젙蹂� 異붽�
-        List<ProjectVo> projectVos = this.makeProjectVos(results);
-        this.setChildrenProject(projectVos);
+        List<ProjectVo> projectVos = this.makeProjectVos(results, user);
+        this.setChildrenProject(projectVos, user);
 
         resJsonData.put(Constants.RES_KEY_CONTENTS, projectVos);
         resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(),
@@ -367,16 +395,16 @@
         return projectVos;
     }
 
-    void setChildrenProject(List<ProjectVo> projectVos) {
+    void setChildrenProject(List<ProjectVo> projectVos, User user) {
         int projectCount = projectVos.size();
         for (int i=0; i< projectCount; i++) {
             ProjectVo projectVo = projectVos.get(i);
             List<Map<String, Object>> children = this.projectMapper.findChildrenProject(projectVo.getId());
 
             if (children != null && children.size() > 0) {
-                List<ProjectVo> childrenVo = this.makeProjectVos(children);
+                List<ProjectVo> childrenVo = this.makeProjectVos(children, user);
                 projectVo.setChildProjects(childrenVo);
-                setChildrenProject(childrenVo);
+                setChildrenProject(childrenVo, user);
             }
         }
     }
@@ -396,20 +424,22 @@
 
 
     //  �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� ProjectVos 濡� 蹂��솚�븳�떎. - 愿�由ъ옄, �씪諛� �궗�슜�옄 �젙蹂� 異붽�
-    private List<ProjectVo> makeProjectVos(List<Map<String, Object>> results) {
+    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()) {
+            if (this.userWorkspaceService.checkWorkspaceManager(user)
+                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
                 projectVo.setModifyPermissionCheck(true);
             }
             projectVos.add(projectVo);
@@ -518,7 +548,7 @@
         //  �긽�깭 泥댄겕
         this.verifyProjectStatus(projectForm.getStatus());
         //  �궇吏� �쑀�슚�꽦 泥댄겕
-        this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate());
+        //this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate());
         //  愿�由ъ옄 �쑀�슚�꽦 泥댄겕
         this.verifyManager(projectForm.getManagerIds());
 
@@ -528,10 +558,12 @@
         //  �봽濡쒖젥�듃 李몄뿬 遺��꽌
         List<Long> existDepartmentIds = this.getIncludeProjectDepartment(project);
 
+        User user = this.webAppUtil.getLoginUserObject();
+
         //  �썙�겕�뒪�럹�씠�뒪�뿉�꽌 湲곕낯�쑝濡� �젣怨듬릺�뒗 �봽濡쒖젥�듃�뿉 ���븳 泥댄겕
         this.checkDefaultProject(project, projectForm);
         //  �닔�젙 沅뚰븳 泥댄겕
-        this.checkModifyPermission(project.getId());
+        this.checkModifyPermission(project.getId(), user);
         //  愿�由ъ옄 蹂�寃�
         Map<String, Object> changeProjectManagerNotifications = this.modifyProjectManagers(project, projectForm, ProjectRole.TYPE_MANAGER);
         //  �씪諛� �궗�슜�옄 蹂�寃�
@@ -555,7 +587,9 @@
         this.checkExcludeDepartmentAndRemoveIssueDepartment(project, existDepartmentIds, changeDepartmentIds);
 
         //  愿�由ъ옄/�씪諛� �궗�슜�옄 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎.
-        this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project);
+        //this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project);
+        //  愿�由ъ옄/�떞�떦遺��꽌 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎.
+        this.notificationProjectRoleDepartment(changeProjectManagerNotifications, changeProjectDepartmentNotifications, project);
 
         return project;
     }
@@ -653,11 +687,11 @@
     }
 
     //  濡쒓렇�씤�븳 �궗�슜�옄媛� 愿�由ъ옄 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
-    private void checkModifyPermission(Long projectId) {
+    private void checkModifyPermission(Long projectId, User user) {
         Boolean hasPermission = Boolean.FALSE;
 
         //  �빐�떦 �뾽臾� 怨듦컙�쓽 愿�由ъ옄�씪 寃쎌슦 沅뚰븳 泥댄겕瑜� �븯吏� �븡�뒗�떎.
-        if (this.userWorkspaceService.checkWorkspaceManager()) {
+        if (this.userWorkspaceService.checkWorkspaceManager(user)) {
             return;
         }
 
@@ -667,11 +701,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;
                 }
@@ -728,7 +764,7 @@
 
     }
 
-    //  愿�由ъ옄瑜� 蹂�寃쏀븳�떎.
+    //  �떞�떦遺��꽌瑜� 蹂�寃쏀븳�떎.
     private Map<String, Object> modifyProjectDepartments(Project project, ProjectForm projectForm) {
         ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT);
         List<Department> oldDepartment = Lists.newArrayList();
@@ -747,9 +783,9 @@
             department.addProjectRole(projectRole);
         }
 
-        //  �젣�쇅 ���긽�옄 李얘린, oldManager �뿉�뒗 �엳�뒗�뜲 newManager �뿉 �뾾�쑝硫� �젣�쇅 ���긽
+        //  �젣�쇅 ���긽�옄 李얘린, oldDepartment �뿉�뒗 �엳�뒗�뜲 newDepartment �뿉 �뾾�쑝硫� �젣�쇅 ���긽
         List<String> excludeDepartments = this.systemEmailService.notificationDepartmentChange(oldDepartment, newDepartment);
-        //  李몄뿬 ���긽�옄 李얘린, newManager �뿉�뒗 �엳�뒗�뜲 oldManager �뿉 �뾾�쑝硫� 珥덈�諛쏆� ���긽
+        //  李몄뿬 ���긽�옄 李얘린, newDepartment �뿉�뒗 �엳�뒗�뜲 oldDepartment �뿉 �뾾�쑝硫� 珥덈�諛쏆� ���긽
         List<String> includeDepartments = this.systemEmailService.notificationDepartmentChange(newDepartment, oldDepartment);
 
         results.put("excludeDepartments", excludeDepartments);
@@ -824,6 +860,47 @@
         this.sendEmailProjectRoleChange(this.checkDuplicationEmails(projectUserExcludeUsers, excludeManagerAndIncludeUser, excludeUserAndIncludeManager), EmailType.PROJECT_DEFAULT_EXCLUDE, projectMap);
         //  �씪諛� �궗�슜�옄 李몄뿬 硫붿씪 理쒖쥌
         this.sendEmailProjectRoleChange(this.checkDuplicationEmails(projectUserIncludeUsers, excludeManagerAndIncludeUser, excludeUserAndIncludeManager), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap);
+    }
+
+    //  �봽濡쒖젥�듃 李몄뿬, �젣�쇅 �넻吏� �젙蹂� 泥댄겕
+    private void notificationProjectRoleDepartment(Map<String, Object> changeProjectManagerNotifications, Map<String, Object> changeProjectDepartmentNotifications, Project project) {
+        List<String> projectManagerExcludeUsers = (List<String>) changeProjectManagerNotifications.get("excludeUsers");  //  愿�由ъ옄 �젣�쇅 �궗�슜�옄
+        List<String> projectManagerIncludeUsers = (List<String>) changeProjectManagerNotifications.get("includeUsers");  //  愿�由ъ옄 李몄뿬 �궗�슜�옄
+        List<String> projectDepartmentExcludeDepartments = (List<String>) changeProjectDepartmentNotifications.get("excludeDepartments");    //  �젣�쇅�맂 �떞�떦 遺��꽌
+        List<String> projectDepartmentIncludeDepartments = (List<String>) changeProjectDepartmentNotifications.get("includeDepartments");    //  李몄뿬�맂 �떞�떦 遺��꽌
+        Map<String, Object> projectMap = new HashMap<>();
+        projectMap.put("workspaceName", project.getWorkspace().getName());
+        projectMap.put("projectName", project.getName());
+        projectMap.put("registerDate", DateUtil.convertDateToStr(new Date()));
+
+        Map<String, Object> projectRoleManagerMap = new HashMap<>();
+        projectRoleManagerMap.put("id", project.getId());
+        projectRoleManagerMap.put("statuses", Lists.newArrayList("02"));   //  愿�由ъ옄 議고쉶
+
+        //  愿�由ъ옄 �젙蹂� �뀑�똿
+        List<Map<String, Object>> projectRoleManagers = this.projectRoleUserService.findProjectRoleUser(projectRoleManagerMap);
+
+        if (projectRoleManagers != null && !projectRoleManagers.isEmpty()) {
+            for (Map<String, Object> projectRoleManager : projectRoleManagers) {
+                UserVo userVo = ConvertUtil.convertMapToClass(projectRoleManager, UserVo.class);
+                StringBuilder stringBuilder = new StringBuilder();
+                stringBuilder.append(userVo.getName());
+                stringBuilder.append("(");
+                stringBuilder.append(CommonUtil.decryptAES128(userVo.getAccount()));
+                stringBuilder.append(")");
+
+                projectMap.put("projectManagerName", stringBuilder.toString());
+            }
+        }
+
+        //  愿�由ъ옄 �젣�쇅 硫붿씪
+        this.sendEmailProjectRoleChange(projectManagerExcludeUsers, EmailType.PROJECT_MANAGER_EXCLUDE, projectMap);
+        //  愿�由ъ감 李몄뿬 硫붿씪
+        this.sendEmailProjectRoleChange(projectManagerIncludeUsers, EmailType.PROJECT_MANAGER_INCLUDE, projectMap);
+        //  �떞�떦 遺��꽌 �젣�쇅 硫붿씪
+        this.sendEmailProjectRoleChange(projectDepartmentExcludeDepartments, EmailType.PROJECT_DEFAULT_EXCLUDE, projectMap);
+        //  �떞�떦 遺��꽌 李몄뿬 硫붿씪
+        this.sendEmailProjectRoleChange(projectDepartmentIncludeDepartments, EmailType.PROJECT_DEFAULT_INCLUDE, projectMap);
     }
 
     //  以묐났�쑝濡� �굹媛��뒗 硫붿씪�씠 �엳�뒗吏� 泥댄겕�븳�떎.
@@ -953,7 +1030,7 @@
         }
 
         //  濡쒓렇�씤�븳 �궗�슜�옄媛� 愿�由ъ옄 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
-        this.checkModifyPermission(project.getId());
+        this.checkModifyPermission(project.getId(), this.webAppUtil.getLoginUserObject());
 
         List<String> sendEmails = Lists.newArrayList();
         Map<String, Object> params = new HashMap<>();
@@ -1005,7 +1082,7 @@
         projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
         projectCondition.setProjectType(projectType);
         projectCondition.setStatuses(statuses);
-
+        this.SetMyDepartmentId(projectCondition);
         return this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition);
     }
 
@@ -1014,6 +1091,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);
     }
 
@@ -1047,21 +1125,26 @@
     @Override
     @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(this.webAppUtil.getLoginId());
-        projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
+        projectCondition.setLoginUserId(user.getId());
+        projectCondition.setWorkspaceId(user.getLastWorkspaceId());
         projectCondition.setProjectType(projectType);
         projectCondition.setStatuses(statuses);
 
         List<Map<String, Object>> results;
 
-        if (this.userWorkspaceService.checkWorkspaceManager()) {
+        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);
-        this.setChildrenProject(projectVos);
+        this.setChildrenProject(projectVos, user);
 
         return  projectVos;
     }
@@ -1086,15 +1169,28 @@
         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);
+        List<ProjectVo> projectVos = this.makeProjectVos(results, this.webAppUtil.getLoginUserObject());
         ExportExcelVo excelInfo = new ExportExcelVo();
         excelInfo.setFileName(this.messageAccessor.message("common.projectList")); // �봽濡쒖젥�듃 紐⑸줉
         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 �뜲�씠�꽣瑜� �뿊���뿉�꽌 �몴�떆�븷 �닔 �엳�뒗 �뜲�씠�꽣濡� 蹂�寃쏀븳�떎.
@@ -1138,7 +1234,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);

--
Gitblit v1.8.0