diff --git a/backend/framework/sdk/src/main/resources/i18n/project_en_US.properties b/backend/framework/sdk/src/main/resources/i18n/project_en_US.properties index 36309f8729..218ec8c00e 100644 --- a/backend/framework/sdk/src/main/resources/i18n/project_en_US.properties +++ b/backend/framework/sdk/src/main/resources/i18n/project_en_US.properties @@ -366,6 +366,7 @@ message.domain.delete_user=Delete user message.domain.create_time=Create time message.domain.update_time=Update time message.domain.delete_time=Delete time +message.domain.triggerMode=Trigger mode #接口定义和case message.domain.protocol=Interface Protocol message.domain.method=Http protocol type diff --git a/backend/framework/sdk/src/main/resources/i18n/project_zh_CN.properties b/backend/framework/sdk/src/main/resources/i18n/project_zh_CN.properties index 5d23764e69..01e9083f58 100644 --- a/backend/framework/sdk/src/main/resources/i18n/project_zh_CN.properties +++ b/backend/framework/sdk/src/main/resources/i18n/project_zh_CN.properties @@ -365,6 +365,7 @@ message.domain.deleteUser=删除人 message.domain.createTime=创建时间 message.domain.updateTime=更新时间 message.domain.deleteTime=删除时间 +message.domain.triggerMode=触发方式 #接口定义和用例 message.domain.protocol=接口协议 message.domain.method=http协议类型 diff --git a/backend/framework/sdk/src/main/resources/i18n/project_zh_TW.properties b/backend/framework/sdk/src/main/resources/i18n/project_zh_TW.properties index 1aa6e92d20..84efeee5e7 100644 --- a/backend/framework/sdk/src/main/resources/i18n/project_zh_TW.properties +++ b/backend/framework/sdk/src/main/resources/i18n/project_zh_TW.properties @@ -366,6 +366,7 @@ message.domain.deleteUser=刪除人 message.domain.createTime=創建時間 message.domain.updateTime=更新時間 message.domain.deleteTime=刪除時間 +message.domain.triggerMode=觸發方式 #接口定義和用例 message.domain.protocol=介面協定 message.domain.method=http協定類型 diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalCaseController.java b/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalCaseController.java index ccfa44775d..9ee08f57b9 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalCaseController.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/controller/FunctionalCaseController.java @@ -68,8 +68,7 @@ public class FunctionalCaseController { @RequiresPermissions(PermissionConstants.FUNCTIONAL_CASE_READ) @CheckOwner(resourceId = "#projectId", resourceType = "project") public TemplateDTO getDefaultTemplateField(@PathVariable String projectId) { - TemplateDTO defaultTemplateDTO = projectTemplateService.getDefaultTemplateDTO(projectId, TemplateScene.FUNCTIONAL.name()); - return defaultTemplateDTO; + return projectTemplateService.getDefaultTemplateDTO(projectId, TemplateScene.FUNCTIONAL.name()); } @@ -99,7 +98,7 @@ public class FunctionalCaseController { @Operation(summary = "用例管理-功能用例-更新用例") @RequiresPermissions(PermissionConstants.FUNCTIONAL_CASE_READ_UPDATE) @Log(type = OperationLogType.UPDATE, expression = "#msClass.updateFunctionalCaseLog(#request, #files)", msClass = FunctionalCaseLogService.class) - @SendNotice(taskType = NoticeConstants.TaskType.FUNCTIONAL_CASE_TASK, event = NoticeConstants.Event.UPDATE, target = "#targetClass.getMainFunctionalCaseDTO(#request.name, #request.caseEditType, #request.projectId, #request.customFields)", targetClass = FunctionalCaseNoticeService.class) + @SendNotice(taskType = NoticeConstants.TaskType.FUNCTIONAL_CASE_TASK, event = NoticeConstants.Event.UPDATE, target = "#targetClass.getMainFunctionalCaseDTO(#request, #request.customFields)", targetClass = FunctionalCaseNoticeService.class) @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") public FunctionalCase updateFunctionalCase(@Validated @RequestPart("request") FunctionalCaseEditRequest request, @RequestPart(value = "files", required = false) List files) { String userId = SessionUtils.getUserId(); @@ -159,7 +158,6 @@ public class FunctionalCaseController { @Operation(summary = "用例管理-功能用例-批量删除用例") @RequiresPermissions(PermissionConstants.FUNCTIONAL_CASE_READ_DELETE) @Log(type = OperationLogType.DELETE, expression = "#msClass.batchDeleteFunctionalCaseLog(#request)", msClass = FunctionalCaseLogService.class) - @SendNotice(taskType = NoticeConstants.TaskType.FUNCTIONAL_CASE_TASK, event = NoticeConstants.Event.DELETE, target = "#targetClass.getBatchDeleteFunctionalCaseDTO(#request)", targetClass = FunctionalCaseNoticeService.class) @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") public void batchDeleteFunctionalCaseToGc(@Validated @RequestBody FunctionalCaseBatchRequest request) { String userId = SessionUtils.getUserId(); @@ -199,7 +197,6 @@ public class FunctionalCaseController { @Operation(summary = "用例管理-功能用例-批量编辑用例") @RequiresPermissions(PermissionConstants.FUNCTIONAL_CASE_READ_UPDATE) @Log(type = OperationLogType.UPDATE, expression = "#msClass.batchEditFunctionalCaseLog(#request)", msClass = FunctionalCaseLogService.class) - @SendNotice(taskType = NoticeConstants.TaskType.FUNCTIONAL_CASE_TASK, event = NoticeConstants.Event.UPDATE, target = "#targetClass.getBatchEditFunctionalCaseDTO(#request)", targetClass = FunctionalCaseNoticeService.class) @CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project") public void batchEditFunctionalCase(@Validated @RequestBody FunctionalCaseBatchEditRequest request) { String userId = SessionUtils.getUserId(); diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseNoticeService.java b/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseNoticeService.java index d776891b23..d17fabce05 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseNoticeService.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseNoticeService.java @@ -1,17 +1,15 @@ package io.metersphere.functional.service; -import io.metersphere.functional.domain.FunctionalCase; -import io.metersphere.functional.domain.FunctionalCaseCustomField; -import io.metersphere.functional.domain.FunctionalCaseCustomFieldExample; +import io.metersphere.functional.domain.*; import io.metersphere.functional.dto.CaseCustomFieldDTO; import io.metersphere.functional.dto.FunctionalCaseDTO; +import io.metersphere.functional.mapper.CaseReviewFunctionalCaseMapper; +import io.metersphere.functional.mapper.CaseReviewMapper; import io.metersphere.functional.mapper.FunctionalCaseCustomFieldMapper; import io.metersphere.functional.mapper.FunctionalCaseMapper; -import io.metersphere.functional.request.FunctionalCaseBatchEditRequest; -import io.metersphere.functional.request.FunctionalCaseBatchRequest; import io.metersphere.functional.request.FunctionalCaseCommentRequest; +import io.metersphere.functional.request.FunctionalCaseEditRequest; import io.metersphere.sdk.util.BeanUtils; -import io.metersphere.sdk.util.Translator; import io.metersphere.system.domain.CustomField; import io.metersphere.system.domain.CustomFieldExample; import io.metersphere.system.dto.sdk.OptionDTO; @@ -41,25 +39,26 @@ public class FunctionalCaseNoticeService { @Resource private CustomFieldMapper customFieldMapper; - @Resource - private FunctionalCaseService functionalCaseService; - @Resource private FunctionalCaseCustomFieldService functionalCaseCustomFieldService; @Resource private ExtOrganizationCustomFieldMapper extOrganizationCustomFieldMapper; + @Resource + private CaseReviewFunctionalCaseMapper caseReviewFunctionalCaseMapper; + @Resource + private CaseReviewMapper caseReviewMapper; public FunctionalCaseDTO getFunctionalCaseDTO(FunctionalCaseCommentRequest functionalCaseCommentRequest) { FunctionalCase functionalCase = functionalCaseMapper.selectByPrimaryKey(functionalCaseCommentRequest.getCaseId()); FunctionalCaseDTO functionalCaseDTO = new FunctionalCaseDTO(); - functionalCaseDTO.setTriggerMode(Translator.get("log.test_plan.functional_case")); + functionalCaseDTO.setTriggerMode(NoticeConstants.TriggerMode.MANUAL_EXECUTION); BeanUtils.copyBean(functionalCaseDTO, functionalCase); setNotifier(functionalCaseCommentRequest, functionalCaseDTO); List customFields = getCustomFields(functionalCaseCommentRequest.getCaseId()); functionalCaseDTO.setFields(customFields); //TODO:设置测试计划名称 - //TODO:设置用例评审名称 + setReviewName(functionalCaseCommentRequest.getCaseId(), functionalCaseDTO); return functionalCaseDTO; } @@ -129,12 +128,17 @@ public class FunctionalCaseNoticeService { return optionDTOList; } - public FunctionalCaseDTO getMainFunctionalCaseDTO(String name, String caseEditType, String projectId, List customFields) { + public FunctionalCaseDTO getMainFunctionalCaseDTO(FunctionalCaseEditRequest request, List customFields) { FunctionalCaseDTO functionalCaseDTO = new FunctionalCaseDTO(); - functionalCaseDTO.setName(name); - functionalCaseDTO.setProjectId(projectId); - functionalCaseDTO.setCaseEditType(caseEditType); - functionalCaseDTO.setCreateUser(null); + if (StringUtils.isNotBlank(request.getId())) { + FunctionalCase functionalCase = functionalCaseMapper.selectByPrimaryKey(request.getId()); + BeanUtils.copyBean(functionalCaseDTO, functionalCase); + setReviewName(request.getId(), functionalCaseDTO); + } else { + BeanUtils.copyBean(functionalCaseDTO, request); + functionalCaseDTO.setCreateUser(null); + } + functionalCaseDTO.setTriggerMode(NoticeConstants.TriggerMode.MANUAL_EXECUTION); List fields = new ArrayList<>(); if (CollectionUtils.isNotEmpty(customFields)) { for (CaseCustomFieldDTO customFieldDTO : customFields) { @@ -150,10 +154,24 @@ public class FunctionalCaseNoticeService { } functionalCaseDTO.setFields(fields); //TODO:设置测试计划名称 - //TODO:设置用例评审名称 return functionalCaseDTO; } + private void setReviewName(String caseId, FunctionalCaseDTO functionalCaseDTO) { + CaseReviewFunctionalCaseExample caseReviewFunctionalCaseExample = new CaseReviewFunctionalCaseExample(); + caseReviewFunctionalCaseExample.createCriteria().andCaseIdEqualTo(caseId); + List caseReviewFunctionalCases = caseReviewFunctionalCaseMapper.selectByExample(caseReviewFunctionalCaseExample); + List reviewIds = caseReviewFunctionalCases.stream().map(CaseReviewFunctionalCase::getReviewId).distinct().toList(); + if (CollectionUtils.isNotEmpty(reviewIds)) { + CaseReviewExample caseReviewExample = new CaseReviewExample(); + caseReviewExample.createCriteria().andIdIn(reviewIds); + List caseReviews = caseReviewMapper.selectByExample(caseReviewExample); + List reviewName = caseReviews.stream().map(CaseReview::getName).toList(); + String string = reviewName.toString(); + functionalCaseDTO.setReviewName(string); + } + } + public FunctionalCaseDTO getDeleteFunctionalCaseDTO(String id) { FunctionalCase functionalCase = functionalCaseMapper.selectByPrimaryKey(id); @@ -165,46 +183,65 @@ public class FunctionalCaseNoticeService { }); //TODO:设置测试计划名称 - //TODO:设置用例评审名称 + setReviewName(id, functionalCaseDTO); return functionalCaseDTO; } - - - public List getBatchDeleteFunctionalCaseDTO(FunctionalCaseBatchRequest request) { - List ids = functionalCaseService.doSelectIds(request, request.getProjectId()); - return handleBatchNotice(request.getProjectId(), ids); + public Map copyBaseCaseInfo(String projectId, List ids) { + FunctionalCaseExample example = new FunctionalCaseExample(); + example.createCriteria().andProjectIdEqualTo(projectId).andDeletedEqualTo(false).andIdIn(ids); + List functionalCaseLists = functionalCaseMapper.selectByExample(example); + return functionalCaseLists.stream().collect(Collectors.toMap(FunctionalCase::getId, functionalCase -> functionalCase)); } - private List handleBatchNotice(String projectId, List ids) { + public List handleBatchNotice(String projectId, List ids) { List dtoList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(ids)) { - Map functionalCaseMap = functionalCaseService.copyBaseInfo(projectId, ids); + Map functionalCaseMap = copyBaseCaseInfo(projectId, ids); Map> customFieldMap = functionalCaseCustomFieldService.getCustomFieldMapByCaseIds(ids); AtomicReference> optionDTOS = new AtomicReference<>(new ArrayList<>()); + CaseReviewFunctionalCaseExample caseReviewFunctionalCaseExample = new CaseReviewFunctionalCaseExample(); + caseReviewFunctionalCaseExample.createCriteria().andCaseIdIn(ids); + List caseReviewFunctionalCases = caseReviewFunctionalCaseMapper.selectByExample(caseReviewFunctionalCaseExample); + List reviewIds = caseReviewFunctionalCases.stream().map(CaseReviewFunctionalCase::getReviewId).distinct().toList(); + Map reviewMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(reviewIds)) { + CaseReviewExample caseReviewExample = new CaseReviewExample(); + caseReviewExample.createCriteria().andIdIn(reviewIds); + List caseReviews = caseReviewMapper.selectByExample(caseReviewExample); + reviewMap = caseReviews.stream().collect(Collectors.toMap(CaseReview::getId, CaseReview::getName)); + } + Map> caseReviewMap = caseReviewFunctionalCases.stream().collect(Collectors.groupingBy(CaseReviewFunctionalCase::getCaseId)); + Map finalReviewMap = reviewMap; ids.forEach(id -> { FunctionalCase functionalCase = functionalCaseMap.get(id); - List customFields = customFieldMap.get(id); - if (CollectionUtils.isNotEmpty(customFields)) { - List fields = customFields.stream().map(functionalCaseCustomField -> functionalCaseCustomField.getFieldId()).toList(); - optionDTOS.set(extOrganizationCustomFieldMapper.getCustomFieldOptions(fields)); + if (functionalCase != null) { + List customFields = customFieldMap.get(id); + if (CollectionUtils.isNotEmpty(customFields)) { + List fields = customFields.stream().map(FunctionalCaseCustomField::getFieldId).toList(); + optionDTOS.set(extOrganizationCustomFieldMapper.getCustomFieldOptions(fields)); + } + FunctionalCaseDTO functionalCaseDTO = new FunctionalCaseDTO(); + functionalCaseDTO.setName(functionalCase.getName()); + functionalCaseDTO.setProjectId(functionalCase.getProjectId()); + functionalCaseDTO.setCaseEditType(functionalCase.getCaseEditType()); + functionalCaseDTO.setCreateUser(null); + functionalCaseDTO.setFields(optionDTOS.get()); + List caseReviewFunctionalCases1 = caseReviewMap.get(id); + ListreviewName = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(caseReviewFunctionalCases1)) { + for (CaseReviewFunctionalCase caseReviewFunctionalCase : caseReviewFunctionalCases1) { + String s = finalReviewMap.get(caseReviewFunctionalCase.getReviewId()); + reviewName.add(s); + } + } + List list = reviewName.stream().distinct().toList(); + functionalCaseDTO.setReviewName(list.toString()); + dtoList.add(functionalCaseDTO); } - FunctionalCaseDTO functionalCaseDTO = new FunctionalCaseDTO(); - functionalCaseDTO.setName(functionalCase.getName()); - functionalCaseDTO.setProjectId(functionalCase.getProjectId()); - functionalCaseDTO.setCaseEditType(functionalCase.getCaseEditType()); - functionalCaseDTO.setCreateUser(null); - functionalCaseDTO.setFields(optionDTOS.get()); - dtoList.add(functionalCaseDTO); }); //TODO:设置测试计划名称 - //TODO:设置用例评审名称 } return dtoList; } - - public List getBatchEditFunctionalCaseDTO(FunctionalCaseBatchEditRequest request) { - List ids = functionalCaseService.doSelectIds(request, request.getProjectId()); - return handleBatchNotice(request.getProjectId(), ids); - } } diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseService.java b/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseService.java index e17379347f..e003e0205f 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseService.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseService.java @@ -168,6 +168,9 @@ public class FunctionalCaseService { private FunctionalCaseCommentMapper functionalCaseCommentMapper; @Resource private ProjectService projectService; + @Resource + private FunctionalCaseNoticeService functionalCaseNoticeService; + private static final int MAX_TAG_SIZE = 10; @@ -608,10 +611,10 @@ public class FunctionalCaseService { * @param userId userId */ public void deleteFunctionalCase(FunctionalCaseDeleteRequest request, String userId) { - handDeleteFunctionalCase(Collections.singletonList(request.getId()), request.getDeleteAll(), userId); + handDeleteFunctionalCase(Collections.singletonList(request.getId()), request.getDeleteAll(), userId, request.getProjectId()); } - private void handDeleteFunctionalCase(List ids, Boolean deleteAll, String userId) { + private void handDeleteFunctionalCase(List ids, Boolean deleteAll, String userId, String projectId) { Map param = new HashMap<>(); if (deleteAll) { //全部删除 进入回收站 @@ -626,6 +629,8 @@ public class FunctionalCaseService { param.put(CaseEvent.Param.CASE_IDS, CollectionUtils.isNotEmpty(ids) ? ids : new ArrayList<>()); doDelete(ids, userId); } + User user = userMapper.selectByPrimaryKey(userId); + batchSendNotice(projectId, ids, user, NoticeConstants.Event.DELETE); param.put(CaseEvent.Param.USER_ID, userId); param.put(CaseEvent.Param.EVENT_NAME, CaseEvent.Event.DELETE_FUNCTIONAL_CASE); provider.updateCaseReview(param); @@ -718,7 +723,7 @@ public class FunctionalCaseService { public void batchDeleteFunctionalCaseToGc(FunctionalCaseBatchRequest request, String userId) { List ids = doSelectIds(request, request.getProjectId()); if (CollectionUtils.isNotEmpty(ids)) { - handDeleteFunctionalCase(ids, request.getDeleteAll(), userId); + handDeleteFunctionalCase(ids, request.getDeleteAll(), userId, request.getProjectId()); } } @@ -744,10 +749,31 @@ public class FunctionalCaseService { * @param userId userId */ public void batchMoveFunctionalCase(FunctionalCaseBatchMoveRequest request, String userId) { + User user = userMapper.selectByPrimaryKey(userId); List ids = doSelectIds(request, request.getProjectId()); if (CollectionUtils.isNotEmpty(ids)) { List refId = extFunctionalCaseMapper.getRefIds(ids, false); extFunctionalCaseMapper.batchMoveModule(request, refId, userId); + batchSendNotice(request.getProjectId(), ids, user, NoticeConstants.Event.UPDATE); + } + } + + private void batchSendNotice(String projectId, List ids, User user, String event) { + int amount = 100;//每次读取的条数 + long roundTimes = Double.valueOf(Math.ceil((double) ids.size() / amount)).longValue();//循环的次数 + for (int i = 0; i < (int)roundTimes; i++) { + int fromIndex = (i*amount); + int toIndex = ((i+1)*amount); + if (i == roundTimes-1){//最后一次遍历 + toIndex = ids.size(); + } else if (toIndex > ids.size()){ + toIndex = ids.size(); + } + List subList = ids.subList(fromIndex, toIndex); + List functionalCaseDTOS = functionalCaseNoticeService.handleBatchNotice(projectId, subList); + List resources = new ArrayList<>(); + resources.addAll(JSON.parseArray(JSON.toJSONString(functionalCaseDTOS), Map.class)); + commonNoticeSendService.sendNotice(NoticeConstants.TaskType.FUNCTIONAL_CASE_TASK, event, resources, user, projectId); } } @@ -833,6 +859,10 @@ public class FunctionalCaseService { historyLogDTO.setFileAssociationList(fileAssociationList); saveAddDataLog(functionalCase, new FunctionalCaseHistoryLogDTO(), historyLogDTO, userId, organizationId, OperationLogType.ADD.name(), OperationLogModule.FUNCTIONAL_CASE); } + User user = userMapper.selectByPrimaryKey(userId); + batchSendNotice(request.getProjectId(), ids, user, NoticeConstants.Event.CREATE); + + } } @@ -875,6 +905,7 @@ public class FunctionalCaseService { public void batchEditFunctionalCase(FunctionalCaseBatchEditRequest request, String userId) { List ids = doSelectIds(request, request.getProjectId()); if (CollectionUtils.isNotEmpty(ids)) { + User user = userMapper.selectByPrimaryKey(userId); //标签处理 handleTags(request, userId, ids); //自定义字段处理 @@ -885,6 +916,7 @@ public class FunctionalCaseService { functionalCase.setUpdateTime(System.currentTimeMillis()); functionalCase.setUpdateUser(userId); extFunctionalCaseMapper.batchUpdate(functionalCase, ids); + batchSendNotice(request.getProjectId(), ids, user, NoticeConstants.Event.UPDATE); } } @@ -1057,7 +1089,7 @@ public class FunctionalCaseService { /** * 组装通知数据 * - * @param noticeList + * @param noticeList xiao * @param functionalCaseExcelData * @param request * @param userId diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/config/AsyncConfig.java b/backend/services/system-setting/src/main/java/io/metersphere/system/config/AsyncConfig.java index af54f98e65..e6fa8f4637 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/config/AsyncConfig.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/config/AsyncConfig.java @@ -1,10 +1,40 @@ package io.metersphere.system.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; @EnableAsync(proxyTargetClass = true) @Configuration public class AsyncConfig { + /** + * 核心线程数 + */ + private static final int CORE_POOL_SIZE = 10; + /** + * 最大线程数 + */ + private static final int MAX_POOL_SIZE = 10; + + + /** + * ThreadPoolTaskExecutor不会自动创建ThreadPoolExecutor,需要手动调initialize才会创建。 + * 如果@Bean就不需手动,会自动InitializingBean的afterPropertiesSet来调initialize + * + */ + @Bean(name = "threadPoolTaskExecutor") + public ThreadPoolTaskExecutor threadPoolTaskExecutor(){ + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + // 设置线程池最大线程数 + executor.setMaxPoolSize(MAX_POOL_SIZE); + // 线程池活跃的线程数 + executor.setCorePoolSize(CORE_POOL_SIZE); + executor.setThreadNamePrefix("notice-task-"); + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } } diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/controller/OrganizationController.java b/backend/services/system-setting/src/main/java/io/metersphere/system/controller/OrganizationController.java index 2b51e50604..45276f3a85 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/controller/OrganizationController.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/controller/OrganizationController.java @@ -12,6 +12,7 @@ import io.metersphere.system.dto.request.OrganizationRequest; import io.metersphere.system.dto.sdk.OptionDTO; import io.metersphere.system.log.annotation.Log; import io.metersphere.system.log.constants.OperationLogType; +import io.metersphere.system.security.CheckOwner; import io.metersphere.system.service.OrganizationService; import io.metersphere.system.utils.PageUtils; import io.metersphere.system.utils.Pager; @@ -43,6 +44,7 @@ public class OrganizationController { @PostMapping("/member/list") @Operation(summary = "系统设置-组织-成员-获取组织成员列表") @RequiresPermissions(PermissionConstants.ORGANIZATION_MEMBER_READ) + @CheckOwner(resourceId = "#organizationId", resourceType = "organization") public Pager> getMemberList(@Validated @RequestBody OrganizationRequest organizationRequest) { Page page = PageHelper.startPage(organizationRequest.getCurrent(), organizationRequest.getPageSize()); return PageUtils.setPageInfo(page, organizationService.getMemberListByOrg(organizationRequest)); diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/dto/BugSyncNoticeDTO.java b/backend/services/system-setting/src/main/java/io/metersphere/system/dto/BugSyncNoticeDTO.java index 40240b6b5d..5e8b33617e 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/dto/BugSyncNoticeDTO.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/dto/BugSyncNoticeDTO.java @@ -17,4 +17,7 @@ public class BugSyncNoticeDTO { @Schema(description ="message.domain.bug_sync_total_count") private Integer total; + + @Schema(description ="message.domain.triggerMode") + private String triggerMode; } diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/dto/sdk/FunctionalCaseMessageDTO.java b/backend/services/system-setting/src/main/java/io/metersphere/system/dto/sdk/FunctionalCaseMessageDTO.java index bd5ea26786..350b8a7ab8 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/dto/sdk/FunctionalCaseMessageDTO.java +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/dto/sdk/FunctionalCaseMessageDTO.java @@ -11,9 +11,9 @@ public class FunctionalCaseMessageDTO { @Schema(description ="message.domain.name") private String name; - @Schema(description = "message.domain.testPlanName") + /* @Schema(description = "message.domain.testPlanName") private String testPlanName; - +*/ @Schema(description = "message.domain.reviewName") private String reviewName; @@ -23,8 +23,8 @@ public class FunctionalCaseMessageDTO { @Schema(description = "message.domain.caseModel") private String caseEditType; - @Schema(description = "message.domain.lastExecuteResult") - private String lastExecuteResult; + /* @Schema(description = "message.domain.lastExecuteResult") + private String lastExecuteResult;*/ @Schema(description = "message.domain.createUser") private String createUser; @@ -44,4 +44,7 @@ public class FunctionalCaseMessageDTO { @Schema(description = "message.domain.deleteTime") private Long deleteTime; + @Schema(description = "message.domain.deleteTime") + private String triggerMode; + } diff --git a/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/ExtSystemProjectMapper.xml b/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/ExtSystemProjectMapper.xml index 61b435ee3c..0bebef6478 100644 --- a/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/ExtSystemProjectMapper.xml +++ b/backend/services/system-setting/src/main/java/io/metersphere/system/mapper/ExtSystemProjectMapper.xml @@ -213,7 +213,7 @@