From c3b8248962bd9b78a8207d5d275395a886d2ee5a Mon Sep 17 00:00:00 2001 From: wyu <kknd09321@nate.com> Date: 수, 15 12월 2021 10:31:02 +0900 Subject: [PATCH] Merge branch 'master' of http://192.168.0.25:9001/r/owl-kisa --- src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java | 285 ++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 190 insertions(+), 95 deletions(-) diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java index d3c4f10..485a1d9 100644 --- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java +++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java @@ -1,7 +1,6 @@ package kr.wisestone.owl.service.impl; import com.google.common.collect.Lists; -import com.sun.org.apache.bcel.internal.generic.NEW; import kr.wisestone.owl.common.ExcelConditionCheck; import kr.wisestone.owl.common.IssueCustomFieldValueFormComparator; import kr.wisestone.owl.config.CommonConfiguration; @@ -13,6 +12,7 @@ import kr.wisestone.owl.domain.enumType.IssueHistoryType; import kr.wisestone.owl.domain.enumType.IssueStatusType; import kr.wisestone.owl.exception.OwlRuntimeException; +import kr.wisestone.owl.mapper.DepartmentMapper; import kr.wisestone.owl.mapper.IssueMapper; import kr.wisestone.owl.mapper.ProjectMapper; import kr.wisestone.owl.repository.IssueRelationRepository; @@ -175,7 +175,13 @@ private SimpMessagingTemplate simpMessagingTemplate; @Autowired + private UserDepartmentService userDepartmentService; + + @Autowired private UserDepartmentRepository userDepartmentRepository; + + @Autowired + private DepartmentMapper departmentMapper; @Autowired private WorkflowDepartmentRepository workflowDepartmentRepository; @@ -211,23 +217,16 @@ Workflow workflow = issueType.getWorkflow(); - // �씠�뒋 �긽�깭媛� 吏��젙�릺�뼱 �엳吏� �븡�쓣 寃쎌슦 珥덇린媛믪쑝濡� 吏��젙 - if (issueApiForm.getIssueStatusId() == null) { - List<IssueStatusVo> issueStatusVos = issueStatusService.findByWorkflowId(workflow.getId()); - IssueStatusVo issueStatusVo = issueStatusVos.get(0); - issueApiForm.setIssueStatusId(issueStatusVo.getId()); - } - - // �썙�겕�뵆濡쒖슦 �긽�깭�뿉 �뵲瑜� �떞�떦遺��꽌 媛��졇�삤湲� - if (issueApiForm.getIssueStatusId() != null) { - WorkflowDepartmentCondition workflowDepartmentCondition = new WorkflowDepartmentCondition(); - workflowDepartmentCondition.setIssueStatusId(issueApiForm.getIssueStatusId()); - workflowDepartmentCondition.setWorkflowId(workflow.getId()); - List<WorkflowDepartmentVo> workflowDepartmentVos = this.workflowDepartmentService.find(workflowDepartmentCondition); - - for (WorkflowDepartmentVo workflowDepartmentVo : workflowDepartmentVos) { - issueForm.addDepartmentId(workflowDepartmentVo.getDepartmentVo().getId()); + if (issueApiForm.getApiType().equals(IssueApiForm.ApiType.add)) { + // �씠�뒋 �긽�깭媛� 吏��젙�릺�뼱 �엳吏� �븡�쓣 寃쎌슦 �썙�겕�뵆濡쒖슦 ��湲� �긽�깭 媛믪쑝濡� 吏��젙 + List<Long> departmentIds = this.workflowDepartmentService.findFirstDepartmentIds(workflow); + if (departmentIds != null && departmentIds.size() > 0) { + for (Long departmentId : departmentIds) { + issueForm.addDepartmentId(departmentId); + } } + } else if (issueApiForm.getIssueStatusId() == null){ + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_ISSUE_STATUS_NOT_EXIST)); } // �봽濡쒖젥�듃 �엯�젰 @@ -257,23 +256,25 @@ // �긽�쐞�씪媛먯뿉 �궗�슜�븷 以묐났媛� �꽕�젙 List<CustomFieldApiOverlap> customFieldApiOverlaps = this.customFieldApiOverlapService.find(user.getId(), issueApiForm.getIssueTypeId()); - if (customFieldApiOverlaps == null || customFieldApiOverlaps.size() == 0){ - throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_SETTING_NOT_EXIST)); - } - for(int i=0; i < customFieldApiOverlaps.size() ; i++ ){ - CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i); - issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId()); - } +// if (customFieldApiOverlaps == null || customFieldApiOverlaps.size() == 0){ +// throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_OVERLAP_SETTING_NOT_EXIST)); +// } + if (customFieldApiOverlaps != null && customFieldApiOverlaps.size() > 0) { + for (int i = 0; i < customFieldApiOverlaps.size(); i++) { + CustomFieldApiOverlap customFieldApiOverlap = customFieldApiOverlaps.get(i); + issueApiForm.addUseIssueCustomFieldId(customFieldApiOverlap.getCustomField().getId()); + } - // 以묐났�맂 �씠�뒋寃��깋 - List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); - int size = issues.size(); - if (size > 0) { - Issue targetIssue = issues.get(0); - if (targetIssue.getParentIssue() != null) { - issueForm.setParentIssueId(targetIssue.getParentIssue().getId()); - } else { - issueForm.setParentIssueId(targetIssue.getId()); + // 以묐났�맂 �씠�뒋寃��깋 + List<Issue> issues = this.findIssue(issueApiForm, customFieldApiOverlaps, user.getId()); + int size = issues.size(); + if (size > 0) { + Issue targetIssue = issues.get(0); + if (targetIssue.getParentIssue() != null) { + issueForm.setParentIssueId(targetIssue.getParentIssue().getId()); + } else { + issueForm.setParentIssueId(targetIssue.getId()); + } } } @@ -700,8 +701,22 @@ for(UserDepartment myDepartment : myDepartments){ myDepartmentIds.add(myDepartment.getDepartmentId()); } + } else { + myDepartmentIds.add(-1L); } issueCondition.setMyDepartmentIds(myDepartmentIds); + } + + void SetAllDepartmentId(IssueCondition issueCondition){ + List<Long> departmentIds = Lists.newArrayList(); + List<Map<String, Object>> departmentList = this.departmentMapper.find(null); + + if(departmentList != null && departmentList.size() > 0){ + for(Map<String, Object> department : departmentList){ + departmentIds.add((Long) department.get("id")); + } + } + issueCondition.setMyDepartmentIds(departmentIds); } void SetWorkflowDepartment(List<IssueVo> issueVos){ @@ -762,13 +777,14 @@ if (this.userWorkspaceService.checkWorkspaceManager(user) || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE_PROJECT_ALL)) { - results = this.issueMapper.find(issueCondition); - totalCount = this.issueMapper.count(issueCondition); + this.SetAllDepartmentId(issueCondition); } else{ this.SetMyDepartmentId(issueCondition); - results = this.issueMapper.findByDepartment(issueCondition); - totalCount = this.issueMapper.countByDepartment(issueCondition); + /*results = this.issueMapper.findByDepartment(issueCondition); + totalCount = this.issueMapper.countByDepartment(issueCondition);*/ } + results = this.issueMapper.find(issueCondition); + totalCount = this.issueMapper.count(issueCondition); // �뒠�떇 �쟾 - 0.8, 0.9, 0.9, 0.9, 0.9 @@ -788,11 +804,12 @@ // Map �뿉 �엳�뒗 �뜲�씠�꽣瑜� IssueVo �뜲�씠�꽣濡� 蹂��솚�븳�떎. this.setMapToIssueVo(results, issueVos, issueCondition, user); -// if (issueCondition.getTree()) { - this.setDownIssues(issueVos); + if (issueCondition.getTree()) { + this.setParentIssue(issueVos); + this.setDownIssues(user, issueVos); this.setRelationIssues(issueVos); -// } - this.setCountDownIssues(results, issueVos); + } + this.setCountDownIssues(issueVos); this.SetWorkflowDepartment(issueVos); //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲� @@ -806,13 +823,34 @@ } - // �븯�쐞 �씠�뒋 �꽭�똿 - private void setDownIssues(List<IssueVo> issueVos) { + // �븯�쐞 �씠�뒋 �꽭�똿(�옱洹�) + private void setDownIssues(User user, List<IssueVo> issueVos) { for(IssueVo issueVo : issueVos) { List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueVo.getId()); + List<IssueVo> downIssueVos = Lists.newArrayList(); + IssueCondition issueCondition = new IssueCondition(); + issueCondition.addIssueIds(String.valueOf(issueVo.getId())); + for(Issue downIssue : downIssues){ - issueVo.addIssueDownVo(ConvertUtil.copyProperties(downIssue, IssueVo.class)); + IssueVo addIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class); + addIssueVo.setIssueTypeId(downIssue.getIssueType().getId()); + downIssueVos.add(addIssueVo); } + issueVo.setIssueDownVos(downIssueVos); + + if (downIssueVos.size() > 0) { + this.setDownIssues(user, downIssueVos); + } + + // �씠�뒋 �궗�슜�옄 �젙蹂� 異붽� + //this.setIssueUserList(issueVos, issueCondition); + this.setIssueDepartmentList(issueVos, issueCondition, user); + // �벑濡앹옄 �젙蹂� 異붽� + this.setRegister(issueVos); // �떞�떦�옄 �젙蹂� �뀑�똿 + // �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂� 異붽� + this.setIssueCustomFieldValue(issueVos, issueCondition); + //�썙�겕�뵆濡쒖슦�뿉 �꽕�젙�븳 �떞�떦遺��꽌 媛��졇�삤湲� + this.SetWorkflowDepartment(issueVos); } } @@ -826,11 +864,25 @@ } } + // �긽�쐞 �씠�뒋 泥댄겕 + private void setParentIssue(List<IssueVo> issueVos) { + for(IssueVo issueVo : issueVos) { + if(issueVo.getParentIssueId() != null) { + Issue parentIssue = this.getIssue(issueVo.getParentIssueId()); + //issueVo.setParentIssueVo(ConvertUtil.copyProperties(parentIssue, IssueVo.class)); + if(parentIssue.getIssueCustomFieldValues() == null || parentIssue.getIssueCustomFieldValues().size() == 0){ + issueVo.setIssueCustomFieldValueVos(null); + } + ConvertUtil.copyProperties(parentIssue, issueVo); + } + } + } + @Override @Transactional(readOnly = true) - public void setCountDownIssues(List<Map<String, Object>> results, List<IssueVo> issueVos) { - for (Map<String, Object> result : results){ - List<Issue> downIssues = this.issueRepository.findByParentIssueId((Long) result.get("id")); //�븯�쐞�씠�뒋 媛��졇�삤湲� + public void setCountDownIssues(List<IssueVo> issueVos) { + for (IssueVo issueVo : issueVos){ + List<Issue> downIssues = this.issueRepository.findByParentIssueId(issueVo.getId()); //�븯�쐞�씠�뒋 媛��졇�삤湲� if(downIssues != null && downIssues.size() > 0){ //�긽�쐞�씠�뒋 媛�吏�怨� �엳�뒗 �븷�뱾�씠 �엳�쑝硫� int downIssueAllCount = 0;// �븯�쐞�씠�뒋 �쟾泥� 移댁슫�듃 int downIssueCount = 0;// �븯�쐞�씠�뒋 誘몄셿猷� 移댁슫�듃 @@ -849,12 +901,8 @@ downIssueCount ++; } - for(IssueVo issueVo : issueVos){ - if(issueVo.getId().equals(parentIssueVo.getId())){ - issueVo.setDownIssueCount(downIssueCount); - issueVo.setDownIssueAllCount(parentIssueVo.getDownIssueAllCount()); - } - } + issueVo.setDownIssueCount(downIssueCount); + issueVo.setDownIssueAllCount(parentIssueVo.getDownIssueAllCount()); } } } @@ -867,15 +915,19 @@ public void findApiIssue(ApiMonitorCondition apiMonitorCondition, Map<String, Object> resJsonData) { IssueTypeCondition issueTypeCondition = new IssueTypeCondition(); + issueTypeCondition.setIsApi(Issue.IS_API_YES); List<IssueTypeVo> issueTypes = this.issueTypeService.findIssueType(issueTypeCondition); - // 媛믪씠 �뾾�쓣 寃쎌슦 珥덇린媛� �엯�젰 - if (StringUtils.isEmpty(apiMonitorCondition.getSearchPeriod())) { - apiMonitorCondition.setSearchPeriod(DateUtil.LAST_SEVEN_DAYS); - } - // 寃��깋 �씪�옄瑜� 援ы븳�떎. - List<Date> searchDates = CommonUtil.findSearchPeriod(apiMonitorCondition.getSearchPeriod()); + List<Date> searchDates = Lists.newArrayList(); + if (apiMonitorCondition.getSearchPeriod().equals(DateUtil.CUSTOM_INPUT)) { + Date startDate = DateUtil.convertStrToDate(apiMonitorCondition.getSearchStartDate(), "yyyy-MM-dd"); + Date endDate = DateUtil.addDays(DateUtil.convertStrToDate(apiMonitorCondition.getSearchEndDate(), "yyyy-MM-dd"), 1); + + searchDates = CommonUtil.findSearchPeriod(startDate, endDate); + } else { + searchDates = CommonUtil.findSearchPeriod(apiMonitorCondition.getSearchPeriod()); + } // �궇吏쒓� 寃��깋�릺吏� �븡�븯�쑝硫� �삤瑜� if (searchDates.size() < 1) { @@ -1084,7 +1136,9 @@ // �봽濡쒖젥�듃瑜� �꽑�깮�븯吏� �븡�븯�쑝硫� �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 李얜뒗�떎. if (condition.getProjectIds().size() < 1) { List<Map<String, Object>> projects = null; - 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_ISSUE_PROJECT_ALL)) { projects = this.projectMapper.findByWorkspaceManagerAll(projectCondition); } else { projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectCondition); @@ -1193,7 +1247,7 @@ } // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 - if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) { + if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, null)) { issueVo.setModifyPermissionCheck(Boolean.TRUE); } } @@ -1230,7 +1284,7 @@ } // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 - if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) { + if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) { issueVo.setModifyPermissionCheck(Boolean.TRUE); } } @@ -1245,6 +1299,7 @@ if (issueCondition.getId() != null) { Issue issue = this.getIssue(issueCondition.getId()); issueVo = ConvertUtil.copyProperties(issue, IssueVo.class); + User user = this.webAppUtil.getLoginUserObject(); switch (issueCondition.getDeep()) { case "01": // �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭, �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦遺��꽌, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂대�� �뀑�똿�븳�떎. @@ -1265,7 +1320,7 @@ break; case "02": // �봽濡쒖젥�듃, �씠�뒋 �쑀�삎, �씠�뒋 �긽�깭, �슦�꽑�닚�쐞, 以묒슂�룄, �떞�떦�옄, 泥⑤��뙆�씪, �궗�슜�옄 �젙�쓽 �븘�뱶 �젙蹂�, �뙎湲�, 湲곕줉�쓣 �뀑�똿�븳�떎. - this.setIssueDetail(issueVo, issue); // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. + this.setIssueDetail(issueVo, issue, user); // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. this.setIssueTableConfigs(issue, issueVo); issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class)); break; @@ -1326,7 +1381,7 @@ // �씠�뒋 �긽�꽭 �젙蹂대�� �뀑�똿�븳�떎. @Override @Transactional(readOnly = true) - public void setIssueDetail(IssueVo issueVo, Issue issue) { + public void setIssueDetail(IssueVo issueVo, Issue issue, User user) { issueVo.setProjectVo(ConvertUtil.copyProperties(issue.getProject(), ProjectVo.class)); issueVo.setIssueTypeVo(ConvertUtil.copyProperties(issue.getIssueType(), IssueTypeVo.class)); IssueStatusVo issueStatusVo = ConvertUtil.copyProperties(issue.getIssueStatus(), IssueStatusVo.class, "issueStatusType"); @@ -1361,8 +1416,12 @@ this.setIssueCompanyField(issue, issueVo); //�뾽泥� �젙蹂� �꽭�똿 this.setIssueIspField(issue, issueVo); //ISP �젙蹂� �꽭�똿 this.setIssueHostingField(issue, issueVo); //HOSTING �젙蹂� �꽭�똿 - this.setParentIssue(issue,issueVo); //�긽�쐞 �씠�뒋 �젙蹂� �꽭�똿 + + // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 + if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) { + issueVo.setModifyPermissionCheck(Boolean.TRUE); + } } // �긽�쐞�씪媛� �젙蹂� 異붽� @@ -1470,6 +1529,15 @@ DepartmentVo departmentVo = ConvertUtil.copyProperties(issueDepartment.getDepartment(), DepartmentVo.class); departmentVo.setByName(departmentVo.getDepartmentName()); departmentVos.add(departmentVo); + + List<UserDepartment> userDepartments = this.userDepartmentRepository.findByDepartmentId(departmentVo.getId()); + if (userDepartments != null && userDepartments.size() > 0) { + for (UserDepartment userDepartment : userDepartments) { + if (userDepartment.getUserId().equals(this.webAppUtil.getLoginId())){ + issueVo.setModifyPermissionCheck(Boolean.TRUE); + } + } + } } issueVo.setDepartmentVos(departmentVos); } @@ -1576,11 +1644,10 @@ Issue parentIssue = modifyIssue.getParentIssue(); IssueType issueType = modifyIssue.getIssueType(); IssueStatus issueStatus = issueType.getIssueStatus(); - if (issueStatus == null) { - throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST)); - } - if (parentIssue != null) { + if (issueStatus == null) { + throw new OwlRuntimeException(this.messageAccessor.getMessage(MsgConstants.API_COMPLETE_ISSUE_STATUS_NOT_EXIST)); + } IssueCondition issueCondition = new IssueCondition(issueVo.getId(), parentIssue.getId()); List<Map<String, Object>> results = this.issueMapper.findNotCompleteByParentIssueId(issueCondition); // �븯�쐞 �씪媛먯씠 紐⑤몢 醫낅즺 �긽�깭�씪�븣 �긽�쐞 �씪媛먮룄 醫낅즺 泥섎━ @@ -1653,39 +1720,41 @@ private Issue modifyIssueForApi(User user, IssueForm issueForm, List<MultipartFile> multipartFiles) { CheckIssueData checkIssueData = this.checkIssue(user, issueForm); - Issue issue = checkIssueData.getIssue(); - Project project = checkIssueData.getProject(); - IssueType issueType = checkIssueData.getIssueType(); - IssueStatus oldIssueStatus = checkIssueData.getOldIssueStatus(); - IssueStatus issueStatus = checkIssueData.getNewIssueStatus(); + // �씠�뒋 �씠�젰 �궓湲곌린 + this.addIssueHistoryModify(user, issueForm, checkIssueData, multipartFiles); + // db�뿉 ���옣 + return this.saveIssue(issueForm, checkIssueData); + } + + private void addIssueHistoryModify(User user, IssueForm issueForm, CheckIssueData checkIssueData, List<MultipartFile> multipartFiles) { // 蹂�寃� �씠�젰 �젙蹂� 異붿텧 StringBuilder detectIssueChange = this.issueHistoryService.detectIssueChange(issueForm, checkIssueData, multipartFiles); // �봽濡쒖젥�듃媛� 蹂�寃쎈릺硫� �씠�뒋 �꽆踰꾨�� �깉濡� �뵲�빞 �븳�떎. - this.checkChangeProject(checkIssueData.getProject(), issue); + this.checkChangeProject(checkIssueData.getProject(), checkIssueData.getIssue()); // �씠�뒋 �쑀�삎�씠 蹂�寃쎈릺�뿀�뒗吏� �솗�씤�븯怨� 蹂�寃쎈릺�뿀�떎硫� �씠�뒋 �긽�깭 �냽�꽦�씠 '��湲�' �씤 �씠�뒋 �긽�깭濡� 援먯껜�븳�떎. - if (this.checkChangeIssueType(issueType, issueStatus, issue)) { - issueStatus = this.issueStatusService.findByIssueStatusTypeIsReady(issueType.getWorkflow()); + if (this.checkChangeIssueType(checkIssueData.getIssueType(), checkIssueData.getNewIssueStatus(), checkIssueData.getIssue())) { + checkIssueData.setNewIssueStatus(this.issueStatusService.findByIssueStatusTypeIsReady(checkIssueData.getIssueType().getWorkflow())); // �씠�뒋 �긽�깭 蹂�寃� �씠�젰 �궓湲곌린 - �씠�젰�쓣 �궓湲곌린 �쐞�빐 issueForm �뿉 issueStatus Id 媛믪쓣 ���옣. - issueForm.setIssueStatusId(issueStatus.getId()); - this.issueHistoryService.detectIssueStatus(issue, issueForm, detectIssueChange, oldIssueStatus, issueStatus); + issueForm.setIssueStatusId(checkIssueData.getNewIssueStatus().getId()); + this.issueHistoryService.detectIssueStatus(checkIssueData.getIssue(), issueForm, detectIssueChange, checkIssueData.getOldIssueStatus(), checkIssueData.getNewIssueStatus()); } // db�뿉 ���옣 - issue = this.saveIssue(issueForm, checkIssueData); +// checkIssueData.setIssue(this.saveIssue(issueForm, checkIssueData)); // �씠�뒋 �씠�젰 �벑濡� if (!StringUtils.isEmpty(detectIssueChange.toString())) { - this.issueHistoryService.addIssueHistory(issue, user, IssueHistoryType.MODIFY, detectIssueChange.toString()); + this.issueHistoryService.addIssueHistory(checkIssueData.getIssue(), user, IssueHistoryType.MODIFY, detectIssueChange.toString()); } // �궗�슜�옄 �떆�뒪�뀥 湲곕뒫 �궗�슜 �젙蹂� �닔吏� UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class); log.info(ElasticSearchUtil.makeUserActiveHistoryMessage(userVo, ElasticSearchConstants.ISSUE_MODIFY)); - - return issue; } + + private Issue saveIssue(IssueForm issueForm, CheckIssueData checkIssueData) { Issue issue = checkIssueData.getIssue(); @@ -1875,7 +1944,7 @@ // �씠�뒋 �닔�젙 沅뚰븳 泥댄겕 private void verifyIssueModifyPermission(Issue issue, User user) { // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 - if (!this.checkHasPermission(ConvertUtil.copyProperties(issue, IssueVo.class), this.getIssueUserVos(issue), user)) { + if (!this.checkHasPermission(ConvertUtil.copyProperties(issue, IssueVo.class), this.getIssueUserVos(issue), user, this.getIssueDepartmentVos(issue))) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_MODIFY_PERMISSION)); } @@ -1900,8 +1969,27 @@ return userVos; } + // �씠�뒋�뿉�꽌 �떞�떦�옄 �젙蹂대�� 異붿텧�븳�떎. + private List<DepartmentVo> getIssueDepartmentVos(Issue issue) { + List<DepartmentVo> departmentVos = Lists.newArrayList(); + + Set<IssueDepartment> issueDepartments = issue.getIssueDepartments(); + + try { + for (IssueDepartment issueDepartment : issueDepartments) { + Department department = issueDepartment.getDepartment(); + DepartmentVo departmentVo = ConvertUtil.copyProperties(department, DepartmentVo.class); + departmentVos.add(departmentVo); + } + } catch (Exception ex) { + + } + + return departmentVos; + } + // �씠�뒋 �닔�젙 沅뚰븳�쓣 媛뽮퀬 �엳�뒗吏� �솗�씤 - private boolean checkHasPermission(IssueVo issueVo, List<UserVo> issueUserVos, User user) { + private boolean checkHasPermission(IssueVo issueVo, List<UserVo> issueUserVos, User user, List<DepartmentVo> departmentVos) { boolean hasPermission = false; // �뾽臾� 怨듦컙 愿�由ъ옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. @@ -1910,8 +1998,10 @@ hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.PROJECT_MANAGER, issueVo, null, null, user); // �씠�뒋 �벑濡앹옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.REGISTER, issueVo, null, null, user); - // �씠�뒋 �떞�떦�옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. => �떞�떦遺��꽌濡� �닔�젙 - 泥댄겕 + // �씠�뒋 �떞�떦�옄�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ASSIGNEE, issueVo, issueUserVos); + // �씠�뒋 �떞�떦遺��꽌�씪 寃쎌슦 �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. + hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.DEPARTMENT, issueVo, null, departmentVos, user); // �떞�떦�옄媛� �뾾�쑝硫� 紐⑤뱺 �궗�슜�옄媛� �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ALL_ISSUE_MANAGER, issueVo, null, null, user); @@ -1921,7 +2011,7 @@ } // �씠�뒋 �닔�젙 沅뚰븳�쓣 �솗�씤�븳�떎. - private boolean checkIssueModifyPermission(Boolean hasPermission, String checkType, IssueVo issueVo, List<UserVo> issueUserVos, List<DepartmentVo> issueDepartmentVos, User user) { + private boolean checkIssueModifyPermission(Boolean hasPermission, String checkType, IssueVo issueVo, List<UserVo> issueUserVos, List<DepartmentVo> departmentVos, User user) { if (!hasPermission) { switch (checkType) { case Issue.WORKSPACE_MANAGER: // �뾽臾� 怨듦컙 愿�由ъ옄 @@ -1956,17 +2046,22 @@ case Issue.DEPARTMENT: // �떞�떦遺��꽌媛� �뾾�쑝硫� 紐⑤뱺 �궗�슜�옄媛� �닔�젙 沅뚰븳�쓣 媛뽯뒗�떎. - if (issueDepartmentVos.size() < 1) { + /*if (userDepartmentVos.size() < 1) { hasPermission = true; break; - } - // �씠�뒋 �떞�떦遺��꽌 �뿬遺� �솗�씤 - /*for (DepartmentVo issueDepartmentVo : issueDepartmentVos) { - if (issueDepartmentVo.getId().equals()) { - hasPermission = true; - break; - } }*/ + // �씠�뒋 �떞�떦遺��꽌 �뿬遺� �솗�씤 + for (DepartmentVo departmentVo : departmentVos) { + List<UserDepartment> userDepartments = this.userDepartmentService.findByDepartmentId(departmentVo.getId()); + if(userDepartments != null && userDepartments.size() > 0) { + for (UserDepartment userDepartment : userDepartments) { + if (userDepartment.getUserId().equals(user.getId())){ + hasPermission = true; + break; + } + } + } + } break; } } -- Gitblit v1.8.0