From 1ff84ea2402eed9d97b4a57837a93edd61f557c0 Mon Sep 17 00:00:00 2001 From: 이민희 <mhlee@maprex.co.kr> Date: 목, 10 2월 2022 17:14:59 +0900 Subject: [PATCH] - 이슈 담당부서 수정시 프로젝트 내의 부서로 검색 가능하도록 수정 - 이슈 유형의 '사용 프로젝트'의 담당부서를 '워크플로우'의 담당부서로 세팅 --- src/main/webapp/scripts/components/utils/autoComplete.controller.js | 4 +- src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java | 33 ++++++++++++++++ src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java | 28 ++++++++++++++ src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java | 2 + src/main/java/kr/wisestone/owl/service/IssueTypeService.java | 3 + src/main/java/kr/wisestone/owl/constant/MsgConstants.java | 1 src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties | 1 src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java | 38 +++++++++++++++++++ 8 files changed, 108 insertions(+), 2 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java index aae0232..66ac6a0 100644 --- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java +++ b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java @@ -283,6 +283,7 @@ public static final String ISP_EXIST_COMPANY = "ISP_EXIST_COMPANY"; // �뾽泥댁뿉 �꽕�젙�릺�뼱�엳�뒗 ISP媛� 議댁옱�빀�땲�떎. public static final String PROJECT_NOT_INCLUDE_DEPARTMENT = "PROJECT_NOT_INCLUDE_DEPARTMENT"; // �꽑�깮�븳 遺��꽌 以� �봽濡쒖젥�듃�뿉 李몄뿬�븯怨� �엳吏� �븡�� 遺��꽌媛� �엳�뒿�땲�떎. + public static final String PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW = "PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW"; // �빐�떦 �봽濡쒖젥�듃�뿉 �냽�빐�엳�뒗 �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�뒗 �봽濡쒖젥�듃�쓽 �떞�떦遺��꽌�뿉�꽌 �젣�쇅�떆�궗 �닔 �뾾�뒿�땲�떎. public static final String EMAIL_TEMPLATE_NOT_EXIST = "EMAIL_TEMPLATE_NOT_EXIST"; // �씠硫붿씪 �뀥�뵆由우쓣 李얠쓣�닔 �뾾�뒿�땲�떎. diff --git a/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java index 939ce23..e02cf58 100644 --- a/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java +++ b/src/main/java/kr/wisestone/owl/repository/IssueTypeRepository.java @@ -16,4 +16,6 @@ List<IssueType> findByWorkspaceId(@Param("workspaceId") Long workspaceId); List<IssueType> findByProjectId(@Param("projectId") Long projectId); + + List<IssueType> findByWorkflowId(@Param("workflowId") Long id); } diff --git a/src/main/java/kr/wisestone/owl/service/IssueTypeService.java b/src/main/java/kr/wisestone/owl/service/IssueTypeService.java index df8c3fc..e5db1df 100644 --- a/src/main/java/kr/wisestone/owl/service/IssueTypeService.java +++ b/src/main/java/kr/wisestone/owl/service/IssueTypeService.java @@ -1,6 +1,7 @@ package kr.wisestone.owl.service; import kr.wisestone.owl.domain.IssueType; +import kr.wisestone.owl.domain.Workflow; import kr.wisestone.owl.domain.Workspace; import kr.wisestone.owl.domain.enumType.ProjectType; import kr.wisestone.owl.vo.IssueTypeVo; @@ -41,5 +42,7 @@ List<IssueType> findByWorkspaceId(); + List<IssueType> findByWorkflowId(Long workflowId); + ModelAndView downloadExcel(HttpServletRequest request, Model model); } diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java index b6df835..e9d4f91 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueTypeServiceImpl.java @@ -51,7 +51,13 @@ private WorkflowService workflowService; @Autowired + private WorkflowDepartmentService workflowDepartmentService; + + @Autowired private ProjectService projectService; + + @Autowired + private ProjectRoleService projectRoleService; @Autowired private WorkspaceService workspaceService; @@ -144,9 +150,31 @@ Project project = this.projectService.getProject(issueTypeForm.getProjectId()); issueType.setProject(project); + // �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿 + this.setDepartmentOfProject(project, workflow); + issueType.setUsePartner(issueTypeForm.getUsePartner()); return this.issueTypeRepository.saveAndFlush(issueType); + } + + /** + * �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿 + * @param project Project + * @param workflow Workflow + */ + private void setDepartmentOfProject(Project project, Workflow workflow) { + List<WorkflowDepartment> workflowDepartments = this.workflowDepartmentService.find(workflow.getId()); + + // �빐�떦 �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌媛� 議댁옱 �븷 寃쎌슦 �빐�떦 �봽濡쒖젥�듃�쓽 �떞�떦遺��꽌�뿉�룄 異붽� + if (workflowDepartments != null && workflowDepartments.size() > 0) { + ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(project.getId(), ProjectRole.TYPE_DEFAULT); + + for (WorkflowDepartment workflowDepartment : workflowDepartments) { + // �봽濡쒖젥�듃 �떞�떦遺��꽌濡� 異붽� + projectRole.addDepartment(workflowDepartment.getDepartment()); + } + } } // �씠由� �쑀�슚�꽦 泥댄겕 @@ -402,6 +430,9 @@ Project project = this.projectService.getProject(issueTypeForm.getProjectId()); issueType.setProject(project); + // �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌�� �룞�씪�븯寃� �꽭�똿 + this.setDepartmentOfProject(project, workflow); + issueType.setUsePartner(issueTypeForm.getUsePartner()); /*if(issueTypeForm.getCompanyId() != null){ @@ -485,6 +516,13 @@ return this.issueTypeRepository.findByWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId()); } + // �썙�겕�뵆濡쒖슦 ID濡� �씠�뒋 �쑀�삎 議고쉶 + @Override + @Transactional(readOnly = true) + public List<IssueType> findByWorkflowId(Long id) { + return this.issueTypeRepository.findByWorkflowId(id); + } + // �씠�뒋 ���엯 �븘�뱶 紐⑸줉�쓣 �뿊��濡� �떎�슫濡쒕뱶 �븳�떎. @Override @Transactional 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 ef07f67..aaef9a8 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java @@ -60,6 +60,9 @@ private WorkflowStatusService workflowStatusService; @Autowired + private WorkflowDepartmentService workflowDepartmentService; + + @Autowired private WorkspaceService workspaceService; @Autowired @@ -819,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); } @@ -836,6 +842,33 @@ } + /** + * �봽濡쒖젥�듃�� �뿰寃곕맂 �씠�뒋�쑀�삎�쓽 �썙�겕�뵆濡쒖슦�뿉�꽌 �꽕�젙�븳 遺��꽌�뒗 �봽濡쒖젥�듃 �떞�떦遺��꽌�뿉�꽌 �젣�쇅 遺덇� + * @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)); + } + } + } + } + } + } + // �봽濡쒖젥�듃 李몄뿬, �젣�쇅 �넻吏� �젙蹂대�� 以묐났�쑝濡� �굹媛�吏� �븡�룄濡� 泥댄겕�븳�떎. private void notificationProjectRoleUser(Map<String, Object> changeProjectManagerNotifications, Map<String, Object> changeProjectUserNotifications, Project project) { List<String> projectManagerExcludeUsers = (List<String>) changeProjectManagerNotifications.get("excludeUsers"); // 愿�由ъ옄 �젣�쇅 �궗�슜�옄 diff --git a/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java index e820d25..756b7c9 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/WorkflowDepartmentServiceImpl.java @@ -43,6 +43,12 @@ @Autowired private DepartmentService departmentService; + @Autowired + private IssueTypeService issueTypeService; + + @Autowired + private ProjectRoleService projectRoleService; + @Override protected JpaRepository<WorkflowDepartment, Long> getRepository() { return workflowDepartmentRepository; @@ -152,9 +158,31 @@ workflowDepartment.setDepartment(department); workflowDepartmentList.add(workflowDepartment); + + // 蹂�寃쏀븳 �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌瑜� �씠�뒋�쑀�삎怨� �뿰寃곕맂 �봽濡쒖젥�듃�쓽 �떞�떦遺��꽌�뿉�룄 �꽭�똿 + this.setDepartmentOfProject(workflow, department); } } this.workflowDepartmentRepository.saveAll(workflowDepartmentList); + + } + + /** + * �썙�겕�뵆濡쒖슦�쓽 �떞�떦遺��꽌瑜� �씠�뒋�쑀�삎怨� �뿰寃곕맂 �봽濡쒖젥�듃�쓽 �떞�떦遺��꽌�뿉�룄 �꽭�똿 + * @param workflow Workflow + * @param department Department + */ + private void setDepartmentOfProject(Workflow workflow, Department department) { + List<IssueType> issueTypeList = this.issueTypeService.findByWorkflowId(workflow.getId()); + if (issueTypeList != null && issueTypeList.size() > 0) { + for (IssueType issueType : issueTypeList) { + if (issueType.getProject() != null) { + ProjectRole projectRole = this.projectRoleService.findByProjectIdAndRoleType(issueType.getProject().getId(), ProjectRole.TYPE_DEFAULT); + // �봽濡쒖젥�듃 �떞�떦遺��꽌濡� 異붽� + projectRole.addDepartment(department); + } + } + } } @Override diff --git a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties index 81f1e0d..2f2e8d1 100644 --- a/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties +++ b/src/main/webapp/WEB-INF/i18n/messages_ko_KR.properties @@ -25,6 +25,7 @@ PROJECT_REMOVE_NOT_SELECT = \uC0AD\uC81C\uD560 \uD504\uB85C\uC81D\uD2B8\uAC00 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. PROJECT_NOT_INCLUDE_USER = \uC120\uD0DD\uD55C \uB2F4\uB2F9\uC790 \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uC0AC\uC6A9\uC790\uAC00 \uC788\uC2B5\uB2C8\uB2E4. PROJECT_NOT_INCLUDE_DEPARTMENT = \uC120\uD0DD\uD55C \uBD80\uC11C \uC911 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uCC38\uC5EC\uD558\uACE0 \uC788\uC9C0 \uC54A\uC740 \uBD80\uC11C\uAC00 \uC788\uC2B5\uB2C8\uB2E4. +PROJECT_DEPARTMENT_NOT_EQUAL_WORKFLOW = \uD574\uB2F9 \uD504\uB85C\uC81D\uD2B8\uC5D0 \uC18D\uD574\uC788\uB294 \uC6CC\uD06C\uD50C\uB85C\uC6B0\uC758 \uB2F4\uB2F9\uBD80\uC11C\uB294 \uD504\uB85C\uC81D\uD2B8\uC758 \uB2F4\uB2F9\uBD80\uC11C\uC5D0\uC11C \uC81C\uC678\uC2DC\uD0AC \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. PROJECT_USED_PROJECT_KEY = \uD504\uB85C\uC81D\uD2B8 \uD0A4\uAC00 \uC774\uBBF8 \uC0AC\uC6A9\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4. PARENT_SECTOR_NOT_SELECT = \uC5C5\uC885(\uB300\uBD84\uB958)\uB97C \uBA3C\uC800 \uC120\uD0DD \uD574 \uC8FC\uC138\uC694. PARENT_SECTOR_NOT_EQUAL = \uC120\uD0DD\uD55C \uC5C5\uC885(\uC911\uBD84\uB958)\uB294 \uC5C5\uC885(\uB300\uBD84\uB958)\uC5D0 \uC18D\uD574\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. diff --git a/src/main/webapp/scripts/components/utils/autoComplete.controller.js b/src/main/webapp/scripts/components/utils/autoComplete.controller.js index c58387c..ab73af6 100644 --- a/src/main/webapp/scripts/components/utils/autoComplete.controller.js +++ b/src/main/webapp/scripts/components/utils/autoComplete.controller.js @@ -434,8 +434,8 @@ var deferred = $q.defer(); - //�썙�겕�뵆濡쒖슦�뿉 �냽�빐�엳�뒗 �떞�떦遺��꽌 李얘린 - UserWorkspace.findWorkflowDepartment($resourceProvider.getContent( // �럹�씠吏� �뾽�뜲�씠�듃媛� �븘�슂�븳 而댄룷�꼳�듃 �씪寃쎌슦, page �뾽�뜲�씠�듃媛� �엳�쓣 寃쎌슦 湲곕낯 10媛쒖뵫 媛��졇�삤怨� �븘�땺寃쎌슦 25媛쒖뵫 媛��졇�삩�떎. + //�봽濡쒖젥�듃�뿉 �냽�빐�엳�뒗 �떞�떦遺��꽌 李얘린 + UserWorkspace.findProjectDepartment($resourceProvider.getContent( // �럹�씠吏� �뾽�뜲�씠�듃媛� �븘�슂�븳 而댄룷�꼳�듃 �씪寃쎌슦, page �뾽�뜲�씠�듃媛� �엳�쓣 寃쎌슦 湲곕낯 10媛쒖뵫 媛��졇�삤怨� �븘�땺寃쎌슦 25媛쒖뵫 媛��졇�삩�떎. conditions, $resourceProvider.getPageContent($rootScope.isDefined(page) ? page : 0, $rootScope.isDefined(page) ? 10 : 25))).then(function (result) { if (result.data.message.status === "success") { const departments = result.data.data; -- Gitblit v1.8.0