From 58f7308d634e99bf7cf4a88bef75a97c7325454f Mon Sep 17 00:00:00 2001 From: minhee <alsdldlfrl@gmail.com> Date: 월, 21 2월 2022 11:10:29 +0900 Subject: [PATCH] - 각종 메일 메일 주소 안썼을 경우 테스트(메일주소 없을 경우 예외처리) --- src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java | 161 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 144 insertions(+), 17 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 303dc8a..aaef9a8 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,7 +51,7 @@ private DepartmentService departmentService; @Autowired - private UserDepartmentService userDepartmentService; + private UserDepartmentRepository userDepartmentRepository; @Autowired private ProjectRoleService projectRoleService; @@ -57,10 +60,19 @@ private WorkflowStatusService workflowStatusService; @Autowired + private WorkflowDepartmentService workflowDepartmentService; + + @Autowired private WorkspaceService workspaceService; @Autowired private UserWorkspaceService userWorkspaceService; + + @Autowired + private IssueTypeService issueTypeService; + + @Autowired + private UserLevelService userLevelService; @Autowired private SystemEmailService systemEmailService; @@ -112,8 +124,10 @@ 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))); + project.setStartDate("");//null�몴�떆 諛⑹� + project.setEndDate(""); // 湲곕낯�쑝濡� �깮�꽦�릺�뒗 �봽濡쒖젥�듃�쓽 �쑀�삎�� BTS project.setProjectType(ProjectType.BTS_PROJECT); project.setWorkspace(workspace); @@ -328,6 +342,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) @@ -347,11 +374,14 @@ if (condition.getWorkspaceManager()) { // �뾽臾닿났媛� 愿�由ъ옄�씪 寃쎌슦 紐⑤뱺 �봽濡쒖젥�듃媛� �몴�떆�릺�뼱�빞 �븳�떎. // 愿�由ъ옄�씪 �븣 - if (this.userWorkspaceService.checkWorkspaceManager(user)) { + 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); } @@ -364,6 +394,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); @@ -371,6 +402,13 @@ totalPage, totalCount)); return projectVos; + } + + // �씠�뒋�쑀�삎�뿉 �냽�븳 �봽濡쒖젥�듃 紐⑸줉�쓣 議고쉶�븳�떎. + @Override + @Transactional(readOnly = true) + public void findIssueType(Map<String, Object> resJsonData, ProjectCondition condition) { + resJsonData.put(Constants.RES_KEY_CONTENTS, this.projectMapper.findByIssueType(condition)); } void setChildrenProject(List<ProjectVo> projectVos, User user) { @@ -404,24 +442,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); + } + } } // 愿�由ъ옄, �씪諛� �궗�슜�옄瑜� 議곌굔�뿉 �뵲�씪 李얠븘以��떎. @@ -537,7 +591,7 @@ User user = this.webAppUtil.getLoginUserObject(); // �썙�겕�뒪�럹�씠�뒪�뿉�꽌 湲곕낯�쑝濡� �젣怨듬릺�뒗 �봽濡쒖젥�듃�뿉 ���븳 泥댄겕 - this.checkDefaultProject(project, projectForm); + //this.checkDefaultProject(project, projectForm); // �닔�젙 沅뚰븳 泥댄겕 this.checkModifyPermission(project.getId(), user); // 愿�由ъ옄 蹂�寃� @@ -662,6 +716,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; @@ -677,11 +745,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; } @@ -752,8 +822,11 @@ } projectRole.getProjectRoleDepartments().clear(); + this.checkDepartmentOfWorkflow(project, projectForm.getDepartmentIds()); + for (Long departmentId : projectForm.getDepartmentIds()) { Department department = this.departmentService.getDepartment(departmentId); + department.addProjectRole(projectRole); } @@ -767,6 +840,33 @@ return results; + } + + /** + * �봽濡쒖젥�듃�� �뿰寃곕맂 �씠�뒋�쑀�삎�쓽 �썙�겕�뵆濡쒖슦�뿉�꽌 �꽕�젙�븳 遺��꽌�뒗 �봽濡쒖젥�듃 �떞�떦遺��꽌�뿉�꽌 �젣�쇅 遺덇� + * @param project Project + * @param departmentIds List<Long> + */ + private void checkDepartmentOfWorkflow(Project project, List<Long> departmentIds) { + List<IssueType> issueTypes = this.issueTypeService.findByProjectId(project.getId()); + + List<Long> workflowDepartmentIds = Lists.newArrayList(); + + if (issueTypes != null && issueTypes.size() > 0) { + for (IssueType issueType : issueTypes) { + List<WorkflowDepartment> workflowDepartments = this.workflowDepartmentService.find(issueType.getWorkflow().getId()); + if (workflowDepartments != null && workflowDepartments.size() > 0) { + for (WorkflowDepartment workflowDepartment : workflowDepartments) { + workflowDepartmentIds.add(workflowDepartment.getDepartment().getId()); + + if (!departmentIds.containsAll(workflowDepartmentIds)) { + throw new OwlRuntimeException( + this.messageAccessor.getMessage(MsgConstants.PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW)); + } + } + } + } + } } // �봽濡쒖젥�듃 李몄뿬, �젣�쇅 �넻吏� �젙蹂대�� 以묐났�쑝濡� �굹媛�吏� �븡�룄濡� 泥댄겕�븳�떎. @@ -998,10 +1098,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()); @@ -1056,7 +1157,7 @@ projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); projectCondition.setProjectType(projectType); projectCondition.setStatuses(statuses); - + this.SetMyDepartmentId(projectCondition); return this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition); } @@ -1065,6 +1166,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); } @@ -1091,7 +1193,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; } // �쁽�옱 �젒洹쇳븳 �뾽臾닿났媛꾩뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎. - �긽�떒 �봽濡쒖젥�듃 紐⑸줉�뿉�꽌 �궗�슜 @@ -1099,6 +1209,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()); @@ -1108,9 +1219,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); @@ -1139,7 +1252,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(); @@ -1147,7 +1272,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 �뜲�씠�꽣瑜� �뿊���뿉�꽌 �몴�떆�븷 �닔 �엳�뒗 �뜲�씠�꽣濡� 蹂�寃쏀븳�떎. @@ -1191,7 +1317,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); @@ -1223,4 +1350,4 @@ resJsonData.put(Constants.RES_KEY_CONTENTS, ConvertUtil.copyProperties(project, ProjectVo.class)); } -} +} \ No newline at end of file -- Gitblit v1.8.0