From d78323a9138aab73f9f1b25e0a74283780176452 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 목, 09 12월 2021 20:43:47 +0900 Subject: [PATCH] - 이슈전체보기/이슈프로젝트보기 권한 생성 - 워크스페이스 권한을 가진 사용자 OWL정보 오류 해결 --- src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java | 251 +++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 227 insertions(+), 24 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 e6ace4a..71ee77a 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,13 +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.util.MapUtil; 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; @@ -46,6 +48,12 @@ private UserService userService; @Autowired + private DepartmentService departmentService; + + @Autowired + private UserDepartmentRepository userDepartmentRepository; + + @Autowired private ProjectRoleService projectRoleService; @Autowired @@ -64,6 +72,9 @@ private ProjectRoleUserService projectRoleUserService; @Autowired + private ProjectRoleDepartmentService projectRoleDepartmentService; + + @Autowired private AttachedFileService attachedFileService; @Autowired @@ -71,6 +82,9 @@ @Autowired private IssueUserService issueUserService; + + @Autowired + private IssueDepartmentService issueDepartmentService; @Autowired private IssueNumberGeneratorService issueNumberGeneratorService; @@ -109,7 +123,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); @@ -132,7 +146,7 @@ // �긽�깭 泥댄겕 this.verifyProjectStatus(projectForm.getStatus()); // �궇吏� �쑀�슚�꽦 泥댄겕 - this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate()); + //this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate()); // 愿�由ъ옄 �쑀�슚�꽦 泥댄겕 this.verifyManager(projectForm.getManagerIds()); @@ -148,7 +162,8 @@ // 媛� �봽濡쒖젥�듃�쓽 �씠�뒋 踰덊샇瑜� �옄�룞�쑝濡� �깮�꽦�븳�떎. this.issueNumberGeneratorService.generateIssueNumber(project); // �씪諛� �궗�슜�옄 諛� 愿�由ъ옄瑜� �벑濡앺븯怨� �궗�슜�옄�뱾�뿉寃� �빐�떦 �뿭�븷�쓣 諛곗젙�븳�떎. - this.registerManagerAndUser(projectForm, project); + //this.registerManagerAndUser(projectForm, project); + this.registerManagerAndDepartment(projectForm, project); // �봽濡쒖젥�듃 �쑀�삎�뿉 �뵲瑜� �썙�겕�뵆濡쒖슦 �깮�꽦 this.workflowStatusService.addDefaultWorkflowStatus(project, ProjectType.valueOf(projectForm.getProjectType())); @@ -175,7 +190,7 @@ } // 湲곕낯, 愿�由ъ옄 �봽濡쒖젥�듃 �뿭�븷�쓣 �깮�꽦�븯怨� �궗�슜�옄瑜� �빐�떦 �뿭�븷�뿉 諛곗젙�븳�떎. - this.projectRoleService.addDefaultProjectRole(project, managers, users); + this.projectRoleService.addDefaultProjectRoleUser(project, managers, users); // �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎. Map<String, Object> projectMap = new HashMap<>(); @@ -191,6 +206,49 @@ projectMap.put("projectManagerName", stringBuilder.toString()); // �봽濡쒖젥�듃 �씪諛� 李몄뿬 硫붿씪 諛쒖넚 �삁�빟 + this.systemEmailService.reservationEmail(sendEmails.toArray(new String[sendEmails.size()]), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap); + } + + private void registerManagerAndDepartment(ProjectForm projectForm, Project project) { + List<User> managers = Lists.newArrayList(); + // 愿�由ъ옄 �벑濡� + for (Long managerId : projectForm.getManagerIds()) { + User user = this.userService.getUser(managerId); + managers.add(user); + } + + 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.addDefaultProjectRoleDepartment(project, managers, departments); + + // �봽濡쒖젥�듃 李몄뿬�옄�뱾�뿉寃� �씠硫붿씪 諛쒖넚�쓣 �삁�빟�븳�떎. + Map<String, Object> projectMap = new HashMap<>(); + projectMap.put("workspaceName", project.getWorkspace().getName()); + projectMap.put("projectName", project.getName()); + projectMap.put("registerDate", DateUtil.convertDateToStr(new Date())); + + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(managers.get(0).getName()); + stringBuilder.append("("); + stringBuilder.append(CommonUtil.decryptAES128(managers.get(0).getAccount())); + stringBuilder.append(")"); + + projectMap.put("projectManagerName", stringBuilder.toString()); + // �봽濡쒖젥�듃 �떞�떦遺��꽌 硫붿씪 諛쒖넚 �삁�빟 this.systemEmailService.reservationEmail(sendEmails.toArray(new String[sendEmails.size()]), EmailType.PROJECT_DEFAULT_INCLUDE, projectMap); } @@ -273,6 +331,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) @@ -287,14 +358,17 @@ List<Map<String, Object>> results; Long totalCount; + User user = this.webAppUtil.getLoginUserObject(); + if (condition.getWorkspaceManager()) { // �뾽臾닿났媛� 愿�由ъ옄�씪 寃쎌슦 紐⑤뱺 �봽濡쒖젥�듃媛� �몴�떆�릺�뼱�빞 �븳�떎. // 愿�由ъ옄�씪 �븣 - if (this.userWorkspaceService.checkWorkspaceManager()) { + if (this.userWorkspaceService.checkWorkspaceManager(user) || user.getPermission() >= MngPermission.USER_PERMISSION_MNG_PROJECT_ALL) { results = this.projectMapper.findByWorkspaceManager(condition); totalCount = this.projectMapper.countByWorkspaceManager(condition); } else { + this.SetMyDepartmentId(condition); results = this.projectMapper.find(condition); totalCount = this.projectMapper.count(condition); } @@ -306,8 +380,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(), @@ -316,16 +390,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); } } } @@ -345,7 +419,7 @@ // �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� 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(); for (Map<String, Object> result : results) { @@ -353,8 +427,12 @@ // �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄瑜� �뀑�똿�븳�떎. - 愿�由ъ옄 / �씪諛� �궗�슜�옄 this.setProjectUser(projectVo, true); this.setProjectUser(projectVo, false); + + // �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 遺��꽌 �꽭�똿 + this.setProjectDepartment(projectVo); + // �뾽臾닿났媛� �떞�떦�옄�뒗 紐⑤뱺 �봽濡쒖젥�듃瑜� �닔�젙/�궘�젣�븷 �닔 �엳�뼱�빞 �븳�떎. - if (this.userWorkspaceService.checkWorkspaceManager()) { + if (this.userWorkspaceService.checkWorkspaceManager(user)) { projectVo.setModifyPermissionCheck(true); } projectVos.add(projectVo); @@ -401,6 +479,26 @@ } } + // �떞�떦遺��꽌瑜� 議곌굔�뿉 �뵲�씪 李얠븘以��떎. + private void setProjectDepartment(ProjectVo projectVo) { + Map<String, Object> projectRoleDepartmentMap = new HashMap<>(); + projectRoleDepartmentMap.put("id", projectVo.getId()); + + // 遺��꽌 �젙蹂� �뀑�똿 + List<Map<String, Object>> projectRoleDepartments = this.projectRoleDepartmentService.findProjectRoleDepartment(projectRoleDepartmentMap); + + if (projectRoleDepartments != null && !projectRoleDepartments.isEmpty()) { + List<DepartmentVo> departmentVos = Lists.newArrayList(); + + for (Map<String, Object> projectRoleDepartment : projectRoleDepartments) { + DepartmentVo departmentVo = ConvertUtil.convertMapToClass(projectRoleDepartment, DepartmentVo.class); + departmentVo.setByName(departmentVo.getDepartmentName()); + departmentVos.add(departmentVo); + } + projectVo.setProjectDepartmentVos(departmentVos); + } + } + // �봽濡쒖젥�듃 �긽�꽭 �젙蹂대�� 議고쉶�븳�떎. @Override @@ -424,6 +522,7 @@ case "01": // �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 �궗�슜�옄, 愿�由ъ옄 �젙蹂대�� �뀑�똿�븳�떎. this.setProjectUser(projectVo, true); this.setProjectUser(projectVo, false); + this.setProjectDepartment(projectVo); //遺��꽌 �젙蹂� �꽭�똿 break; } } @@ -442,22 +541,27 @@ // �긽�깭 泥댄겕 this.verifyProjectStatus(projectForm.getStatus()); // �궇吏� �쑀�슚�꽦 泥댄겕 - this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate()); + //this.checkStartEndDate(projectForm.getStartDate(), projectForm.getEndDate()); // 愿�由ъ옄 �쑀�슚�꽦 泥댄겕 this.verifyManager(projectForm.getManagerIds()); Project project = this.getProject(projectForm.getId()); // �봽濡쒖젥�듃 李몄뿬 �궗�슜�옄 List<Long> existUserIds = this.getIncludeProjectUser(project); + // �봽濡쒖젥�듃 李몄뿬 遺��꽌 + 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); // �씪諛� �궗�슜�옄 蹂�寃� Map<String, Object> changeProjectUserNotifications = this.modifyProjectManagers(project, projectForm, ProjectRole.TYPE_DEFAULT); + Map<String, Object> changeProjectDepartmentNotifications = this.modifyProjectDepartments(project, projectForm); ConvertUtil.copyProperties(projectForm, project, "id", "projectType"); this.projectRepository.saveAndFlush(project); @@ -469,12 +573,16 @@ // �빐�떦 �봽濡쒖젥�듃�뿉 李몄뿬�븯�뒗 紐⑤뱺 �궗�슜�옄 議고쉶 // 鍮좎쭊 �궗�엺�씠 愿�由ы븯�뒗 �씠�뒋 �쟾泥� 議고쉶 �썑 �뜲�씠�꽣 �궘�젣 List<Long> changeUserIds = this.getIncludeProjectUser(project); + List<Long> changeDepartmentIds = this.getIncludeProjectDepartment(project); // 李몄뿬�뿉�꽌 �젣�쇅�맂 �궗�슜�옄瑜� 李얘퀬 �떞�떦�븯怨� �엳�뜕 �씠�뒋�뿉�꽌 �젣�쇅�븳�떎. this.checkExcludeUserAndRemoveIssueAssignee(project, existUserIds, changeUserIds); + this.checkExcludeDepartmentAndRemoveIssueDepartment(project, existDepartmentIds, changeDepartmentIds); // 愿�由ъ옄/�씪諛� �궗�슜�옄 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎. - this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project); + //this.notificationProjectRoleUser(changeProjectManagerNotifications, changeProjectUserNotifications, project); + // 愿�由ъ옄/�떞�떦遺��꽌 蹂�寃� �궡�뿭�쓣 �넻吏��븳�떎. + this.notificationProjectRoleDepartment(changeProjectManagerNotifications, changeProjectDepartmentNotifications, project); return project; } @@ -512,6 +620,20 @@ return Lists.newArrayList(includeUserIds); } + // �봽濡쒖젥�듃 李몄뿬 遺��꽌 + private List<Long> getIncludeProjectDepartment(Project project) { + Set<Long> includeDepartmentIds = new HashSet<>(); + + for (ProjectRole projectRole : project.getProjectRoles()) { + List<ProjectRoleDepartment> projectRoleDepartments = this.projectRoleDepartmentService.findByProjectRoleId(projectRole.getId()); + + for (ProjectRoleDepartment projectRoleDepartment : projectRoleDepartments) { + includeDepartmentIds.add(projectRoleDepartment.getDepartment().getId()); + } + } + return Lists.newArrayList(includeDepartmentIds); + } + // 李몄뿬�뿉�꽌 �젣�쇅�맂 �궗�슜�옄瑜� 李얘퀬 �떞�떦�븯怨� �엳�뜕 �씠�뒋�뿉�꽌 �젣�쇅�븳�떎. private void checkExcludeUserAndRemoveIssueAssignee(Project project, List<Long> existUserIds, List<Long> changeUserIds) { List<Long> excludeUserIds = CommonUtil.searchChangeList(changeUserIds, existUserIds); @@ -521,7 +643,14 @@ } } + // 李몄뿬�뿉�꽌 �젣�쇅�맂 遺��꽌瑜� 李얘퀬 �떞�떦�븯怨� �엳�뜕 �씠�뒋�뿉�꽌 �젣�쇅�븳�떎. + private void checkExcludeDepartmentAndRemoveIssueDepartment(Project project, List<Long> existDepartmentIds, List<Long> changeDepartmentIds) { + List<Long> excludeDepartmentIds = CommonUtil.searchChangeList(changeDepartmentIds, existDepartmentIds); + if (excludeDepartmentIds.size() > 0) { + this.issueDepartmentService.removeIssueDepartment(project.getId(), excludeDepartmentIds); + } + } // 湲곕낯 �젣怨듬릺�뒗 �봽濡쒖젥�듃�쓽 愿�由ъ옄�뒗 �썙�겕�뒪�럹�씠�뒪 愿�由ъ옄媛� �룷�븿�릺�뼱 �엳�뼱�빞 �븳�떎. private void checkDefaultProject(Project project, ProjectForm projectForm) { @@ -551,11 +680,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; } @@ -626,6 +755,37 @@ } + // �떞�떦遺��꽌瑜� 蹂�寃쏀븳�떎. + private Map<String, Object> modifyProjectDepartments(Project project, ProjectForm projectForm) { + ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT); + List<Department> oldDepartment = Lists.newArrayList(); + List<Department> newDepartment = Lists.newArrayList(); + Map<String, Object> results = new HashMap<>(); + + for (ProjectRoleDepartment projectRoleDepartment : projectRole.getProjectRoleDepartments()) { + Department department = projectRoleDepartment.getDepartment(); + oldDepartment.add(department); + department.removeProjectRole(projectRole); + } + projectRole.getProjectRoleDepartments().clear(); + + for (Long departmentId : projectForm.getDepartmentIds()) { + Department department = this.departmentService.getDepartment(departmentId); + department.addProjectRole(projectRole); + } + + // �젣�쇅 ���긽�옄 李얘린, oldDepartment �뿉�뒗 �엳�뒗�뜲 newDepartment �뿉 �뾾�쑝硫� �젣�쇅 ���긽 + List<String> excludeDepartments = this.systemEmailService.notificationDepartmentChange(oldDepartment, newDepartment); + // 李몄뿬 ���긽�옄 李얘린, newDepartment �뿉�뒗 �엳�뒗�뜲 oldDepartment �뿉 �뾾�쑝硫� 珥덈�諛쏆� ���긽 + List<String> includeDepartments = this.systemEmailService.notificationDepartmentChange(newDepartment, oldDepartment); + + results.put("excludeDepartments", excludeDepartments); + results.put("includeDepartments", includeDepartments); + + return results; + + } + // �봽濡쒖젥�듃 李몄뿬, �젣�쇅 �넻吏� �젙蹂대�� 以묐났�쑝濡� �굹媛�吏� �븡�룄濡� 泥댄겕�븳�떎. private void notificationProjectRoleUser(Map<String, Object> changeProjectManagerNotifications, Map<String, Object> changeProjectUserNotifications, Project project) { List<String> projectManagerExcludeUsers = (List<String>) changeProjectManagerNotifications.get("excludeUsers"); // 愿�由ъ옄 �젣�쇅 �궗�슜�옄 @@ -691,6 +851,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); } // 以묐났�쑝濡� �굹媛��뒗 硫붿씪�씠 �엳�뒗吏� 泥댄겕�븳�떎. @@ -820,7 +1021,7 @@ } // 濡쒓렇�씤�븳 �궗�슜�옄媛� 愿�由ъ옄 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎. - this.checkModifyPermission(project.getId()); + this.checkModifyPermission(project.getId(), this.webAppUtil.getLoginUserObject()); List<String> sendEmails = Lists.newArrayList(); Map<String, Object> params = new HashMap<>(); @@ -914,21 +1115,23 @@ @Override @Transactional(readOnly = true) public List<ProjectVo> findByIncludeProject(List<String> statuses, String projectType) { + User user = this.webAppUtil.getLoginUserObject(); + 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)) { results = this.projectMapper.findByWorkspaceManager(projectCondition); } else { results = this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition); } List<ProjectVo> projectVos = this.makeProjectByVos(results); - this.setChildrenProject(projectVos); + this.setChildrenProject(projectVos, user); return projectVos; } @@ -955,7 +1158,7 @@ projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); List<Map<String, Object>> 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)); // �긽�깭 -- Gitblit v1.8.0