| | |
| | | private UserService userService; |
| | | |
| | | @Autowired |
| | | private DepartmentService departmentService; |
| | | |
| | | @Autowired |
| | | private ProjectRoleService projectRoleService; |
| | | |
| | | @Autowired |
| | |
| | | private ProjectRoleUserService projectRoleUserService; |
| | | |
| | | @Autowired |
| | | private ProjectRoleDepartmentService projectRoleDepartmentService; |
| | | |
| | | @Autowired |
| | | private AttachedFileService attachedFileService; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private IssueUserService issueUserService; |
| | | |
| | | @Autowired |
| | | private IssueDepartmentService issueDepartmentService; |
| | | |
| | | @Autowired |
| | | private IssueNumberGeneratorService issueNumberGeneratorService; |
| | |
| | | // 각 프로젝트의 이슈 번호를 자동으로 생성한다. |
| | | this.issueNumberGeneratorService.generateIssueNumber(project); |
| | | // 일반 사용자 및 관리자를 등록하고 사용자들에게 해당 역할을 배정한다. |
| | | this.registerManagerAndUser(projectForm, project); |
| | | //this.registerManagerAndUser(projectForm, project); |
| | | this.registerManagerAndDepartment(projectForm, project); |
| | | |
| | | // 프로젝트 유형에 따른 워크플로우 생성 |
| | | this.workflowStatusService.addDefaultWorkflowStatus(project, ProjectType.valueOf(projectForm.getProjectType())); |
| | |
| | | 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, users); |
| | | this.projectRoleService.addDefaultProjectRole(project, managers, departments); |
| | | |
| | | // 프로젝트 참여자들에게 이메일 발송을 예약한다. |
| | | Map<String, Object> projectMap = new HashMap<>(); |
| | |
| | | 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(); |
| | | // 부서 등록 |
| | | 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); |
| | | |
| | | // 프로젝트 참여자들에게 이메일 발송을 예약한다. |
| | | 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.setProjectUser(projectVo, true); |
| | | this.setProjectUser(projectVo, false); |
| | | |
| | | // 프로젝트에 참여하는 부서 세팅 |
| | | //this.setProjectDepartment(projectVo); |
| | | |
| | | // 업무공간 담당자는 모든 프로젝트를 수정/삭제할 수 있어야 한다. |
| | | if (this.userWorkspaceService.checkWorkspaceManager()) { |
| | | projectVo.setModifyPermissionCheck(true); |
| | |
| | | } |
| | | } |
| | | |
| | | // 담당부서를 조건에 따라 찾아준다. |
| | | 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 |
| | |
| | | case "01": // 프로젝트에 참여하는 사용자, 관리자 정보를 셋팅한다. |
| | | this.setProjectUser(projectVo, true); |
| | | this.setProjectUser(projectVo, false); |
| | | //this.setProjectDepartment(projectVo); //부서 정보 세팅 |
| | | break; |
| | | } |
| | | } |
| | |
| | | Project project = this.getProject(projectForm.getId()); |
| | | // 프로젝트 참여 사용자 |
| | | List<Long> existUserIds = this.getIncludeProjectUser(project); |
| | | // 프로젝트 참여 부서 |
| | | List<Long> existDepartmentIds = this.getIncludeProjectDepartment(project); |
| | | |
| | | // 워크스페이스에서 기본으로 제공되는 프로젝트에 대한 체크 |
| | | this.checkDefaultProject(project, projectForm); |
| | |
| | | // 해당 프로젝트에 참여하는 모든 사용자 조회 |
| | | // 빠진 사람이 관리하는 이슈 전체 조회 후 데이터 삭제 |
| | | 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); |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | // 참여에서 제외된 부서를 찾고 담당하고 있던 이슈에서 제외한다. |
| | | 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) { |