refactor(系统设置): 优化查询项目列表的逻辑

This commit is contained in:
wxg0103 2023-10-25 17:50:27 +08:00 committed by wxg0103
parent d918d86edf
commit f3e8fc208b
29 changed files with 180 additions and 172 deletions

View File

@ -12,7 +12,7 @@ import java.io.Serializable;
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class UserExtend extends User implements Serializable {
public class UserExtendDTO extends User implements Serializable {
private static final long serialVersionUID = 1L;

View File

@ -10,10 +10,10 @@ import io.metersphere.project.request.ProjectMemberRequest;
import io.metersphere.project.service.ProjectMemberService;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.PageUtils;
import io.metersphere.sdk.util.Pager;
import io.metersphere.system.utils.SessionUtils;
import io.metersphere.sdk.dto.UserExtend;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
@ -48,7 +48,7 @@ public class ProjectMemberController {
@GetMapping("/get-member/option/{projectId}")
@Operation(summary = "项目管理-成员-获取成员下拉选项")
@RequiresPermissions(PermissionConstants.PROJECT_USER_READ)
public List<UserExtend> getMemberOption(@PathVariable String projectId,
public List<UserExtendDTO> getMemberOption(@PathVariable String projectId,
@Schema(description = "查询关键字,根据邮箱和用户名查询")
@RequestParam(value = "keyword", required = false) String keyword) {
return projectMemberService.getMemberOption(projectId, keyword);

View File

@ -11,17 +11,17 @@ import io.metersphere.project.service.ProjectUserRoleLogService;
import io.metersphere.project.service.ProjectUserRoleService;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.dto.PermissionDefinitionItem;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.dto.request.PermissionSettingUpdateRequest;
import io.metersphere.system.log.annotation.Log;
import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.PageUtils;
import io.metersphere.sdk.util.Pager;
import io.metersphere.system.utils.SessionUtils;
import io.metersphere.system.domain.User;
import io.metersphere.system.domain.UserRole;
import io.metersphere.system.log.annotation.Log;
import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.system.service.UserRoleService;
import io.metersphere.system.utils.SessionUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
@ -106,7 +106,7 @@ public class ProjectUserRoleController {
@Parameter(name = "projectId", description = "当前项目ID", schema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED)),
@Parameter(name = "roleId", description = "用户组ID", schema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED))
})
public List<UserExtend> getMember(@PathVariable String projectId,
public List<UserExtendDTO> getMember(@PathVariable String projectId,
@PathVariable String roleId,
@Schema(description = "查询关键字,根据邮箱和用户名查询")
@RequestParam(required = false) String keyword) {

View File

@ -11,7 +11,7 @@ public class CommonParams implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "链接超时时间")
private Long requestTimeout;
private Long requestTimeout = 600000L;
@Schema(description = "响应超时时间")
private Long responseTimeout;
private Long responseTimeout = 600000L;
}

View File

@ -20,7 +20,7 @@ public class ScriptContent {
@Data
@EqualsAndHashCode(callSuper = true)
public static class ScenarioPostScript extends ScriptContent {
public static class ScenarioScript extends ScriptContent {
@Schema(description = "关联场景结果 true: 是/false: 否")
private Boolean associateScenarioResults = false;
@ -28,12 +28,11 @@ public class ScriptContent {
@Data
@EqualsAndHashCode(callSuper = true)
public static class StepPostScript extends ScriptContent {
public static class StepScript extends ScriptContent {
@Schema(description = "忽略请求")
private List<String> filterRequestPostScript;
private List<String> filterRequestScript;
@Schema(description = "脚本执行顺序 true:先执行 false:后执行")
private Boolean preScriptExecBefore = true;
private Boolean scriptExecBefore = true;
@Schema(description = "脚本内容")
private ScriptContent scriptContent;
@ -42,10 +41,10 @@ public class ScriptContent {
@Data
public static class ApiScript {
@Schema(description = "测试计划级")
private ScriptContent envJSR223PostScript;
private ScriptContent envJSR223Script;
@Schema(description = "场景级")
private ScenarioPostScript scenarioJSR223PostScript;
private ScenarioScript scenarioJSR223Script;
@Schema(description = "步骤级 ")
private StepPostScript stepJSR223PostScript;
private List<StepScript> stepJSR223Script;
}
}

View File

@ -1,7 +1,7 @@
package io.metersphere.project.mapper;
import io.metersphere.project.request.ProjectMemberRequest;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -25,5 +25,5 @@ public interface ExtProjectMemberMapper {
* @param keyword 搜索关键字
* @return 成员
*/
List<UserExtend> getMemberByOrg(@Param("organizationId") String organizationId, @Param("keyword") String keyword);
List<UserExtendDTO> getMemberByOrg(@Param("organizationId") String organizationId, @Param("keyword") String keyword);
}

View File

@ -17,7 +17,7 @@
order by u.name
</select>
<select id="getMemberByOrg" resultType="io.metersphere.sdk.dto.UserExtend">
<select id="getMemberByOrg" resultType="io.metersphere.sdk.dto.UserExtendDTO">
select distinct u.* from user_role_relation urr join `user` u on urr.user_id = u.id
where
u.deleted = 0

View File

@ -13,7 +13,7 @@ import io.metersphere.sdk.constants.UserRoleEnum;
import io.metersphere.sdk.constants.UserRoleType;
import io.metersphere.sdk.dto.LogDTO;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.exception.MSException;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.JSON;
@ -109,18 +109,18 @@ public class ProjectMemberService {
* @param projectId 项目ID
* @return 项目成员下拉选项
*/
public List<UserExtend> getMemberOption(String projectId, String keyword) {
public List<UserExtendDTO> getMemberOption(String projectId, String keyword) {
Project project = projectMapper.selectByPrimaryKey(projectId);
if (project == null) {
return new ArrayList<>();
}
// 组织成员
List<UserExtend> orgMembers = extProjectMemberMapper.getMemberByOrg(project.getOrganizationId(), keyword);
List<UserExtendDTO> orgMembers = extProjectMemberMapper.getMemberByOrg(project.getOrganizationId(), keyword);
if (CollectionUtils.isEmpty(orgMembers)) {
return new ArrayList<>();
}
// 设置是否是项目成员
List<String> orgMemberIds = orgMembers.stream().map(UserExtend::getId).toList();
List<String> orgMemberIds = orgMembers.stream().map(UserExtendDTO::getId).toList();
UserRoleRelationExample example = new UserRoleRelationExample();
example.createCriteria().andUserIdIn(orgMemberIds).andSourceIdEqualTo(projectId).andOrganizationIdEqualTo(project.getOrganizationId());
List<UserRoleRelation> projectRelations = userRoleRelationMapper.selectByExample(example);

View File

@ -324,16 +324,16 @@ public class EnvironmentControllerTests extends BaseTest {
ScriptContent.ApiScript apiScript = new ScriptContent.ApiScript();
ScriptContent scriptContent = new ScriptContent();
scriptContent.setScript("script");
apiScript.setEnvJSR223PostScript(scriptContent);
ScriptContent.ScenarioPostScript scenarioPostScript = new ScriptContent.ScenarioPostScript();
scenarioPostScript.setAssociateScenarioResults(true);
scenarioPostScript.setScript("scenarioPostScript");
apiScript.setScenarioJSR223PostScript(scenarioPostScript);
ScriptContent.StepPostScript stepPostScript = new ScriptContent.StepPostScript();
stepPostScript.setPreScriptExecBefore(true);
apiScript.setEnvJSR223Script(scriptContent);
ScriptContent.ScenarioScript scenarioScript = new ScriptContent.ScenarioScript();
scenarioScript.setAssociateScenarioResults(true);
scenarioScript.setScript("scenarioPostScript");
apiScript.setScenarioJSR223Script(scenarioScript);
ScriptContent.StepScript stepPostScript = new ScriptContent.StepScript();
stepPostScript.setScriptExecBefore(true);
stepPostScript.setScriptContent(scriptContent);
stepPostScript.setFilterRequestPostScript(new ArrayList<>());
apiScript.setStepJSR223PostScript(stepPostScript);
stepPostScript.setFilterRequestScript(new ArrayList<>());
apiScript.setStepJSR223Script(List.of(stepPostScript));
return apiScript;
}

View File

@ -5,7 +5,7 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.PageUtils;
import io.metersphere.sdk.util.Pager;
import io.metersphere.system.dto.AddProjectRequest;
@ -116,7 +116,7 @@ public class OrganizationProjectController {
@PostMapping("/member-list")
@RequiresPermissions(PermissionConstants.ORGANIZATION_PROJECT_READ)
@Operation(summary = "系统设置-组织-项目-成员列表")
public Pager<List<UserExtend>> getProjectMember(@Validated @RequestBody ProjectMemberRequest request) {
public Pager<List<UserExtendDTO>> getProjectMember(@Validated @RequestBody ProjectMemberRequest request) {
Page<Object> page = PageHelper.startPage(request.getCurrent(), request.getPageSize(),
StringUtils.isNotBlank(request.getSortString()) ? request.getSortString() : "create_time desc");
return PageUtils.setPageInfo(page, organizationProjectService.getProjectMember(request));
@ -145,7 +145,7 @@ public class OrganizationProjectController {
@GetMapping("/user-admin-list/{organizationId}")
@Operation(summary = "系统设置-组织-项目-获取管理员列表")
@RequiresPermissions(PermissionConstants.ORGANIZATION_PROJECT_READ)
public List<UserExtend> getUserAdminList(@PathVariable String organizationId, @Schema(description = "查询关键字,根据邮箱和用户名查询")
public List<UserExtendDTO> getUserAdminList(@PathVariable String organizationId, @Schema(description = "查询关键字,根据邮箱和用户名查询")
@RequestParam(value = "keyword", required = false) String keyword) {
return organizationProjectService.getUserAdminList(organizationId, keyword);
}
@ -153,7 +153,7 @@ public class OrganizationProjectController {
@GetMapping("/user-member-list/{organizationId}/{projectId}")
@Operation(summary = "系统设置-组织-项目-获取成员列表")
@RequiresPermissions(PermissionConstants.ORGANIZATION_PROJECT_READ)
public List<UserExtend> getUserMemberList(@PathVariable String organizationId, @PathVariable String projectId,
public List<UserExtendDTO> getUserMemberList(@PathVariable String organizationId, @PathVariable String projectId,
@Schema(description = "查询关键字,根据邮箱和用户名查询")
@RequestParam(value = "keyword", required = false) String keyword) {
return organizationProjectService.getUserMemberList(organizationId, projectId, keyword);

View File

@ -4,22 +4,22 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.dto.PermissionDefinitionItem;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.dto.request.PermissionSettingUpdateRequest;
import io.metersphere.system.log.annotation.Log;
import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.PageUtils;
import io.metersphere.sdk.util.Pager;
import io.metersphere.system.utils.SessionUtils;
import io.metersphere.system.domain.User;
import io.metersphere.system.domain.UserRole;
import io.metersphere.system.log.annotation.Log;
import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.system.request.OrganizationUserRoleEditRequest;
import io.metersphere.system.request.OrganizationUserRoleMemberEditRequest;
import io.metersphere.system.request.OrganizationUserRoleMemberRequest;
import io.metersphere.system.service.OrganizationUserRoleLogService;
import io.metersphere.system.service.OrganizationUserRoleService;
import io.metersphere.system.service.UserRoleService;
import io.metersphere.system.utils.SessionUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
@ -106,7 +106,7 @@ public class OrganizationUserRoleController {
@Parameter(name = "organizationId", description = "组织ID", schema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED)),
@Parameter(name = "roleId", description = "用户组ID", schema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED))
})
public List<UserExtend> getMember(@PathVariable String organizationId,
public List<UserExtendDTO> getMember(@PathVariable String organizationId,
@PathVariable String roleId,
@Schema(description = "查询关键字,根据邮箱和用户名查询")
@RequestParam(required = false) String keyword) {

View File

@ -4,13 +4,12 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.system.dto.ProjectDTO;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.PageUtils;
import io.metersphere.sdk.util.Pager;
import io.metersphere.system.utils.SessionUtils;
import io.metersphere.system.dto.OrganizationDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.system.dto.ProjectDTO;
import io.metersphere.system.request.OrganizationMemberRequest;
import io.metersphere.system.request.OrganizationProjectRequest;
import io.metersphere.system.request.OrganizationRequest;
@ -18,6 +17,7 @@ import io.metersphere.system.request.ProjectRequest;
import io.metersphere.system.service.OrganizationService;
import io.metersphere.system.service.SystemProjectService;
import io.metersphere.system.service.UserService;
import io.metersphere.system.utils.SessionUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
@ -66,7 +66,7 @@ public class SystemOrganizationController {
@PostMapping("/list-member")
@Operation(summary = "系统设置-系统-组织与项目-组织-获取组织成员列表")
@RequiresPermissions(value = {PermissionConstants.SYSTEM_ORGANIZATION_PROJECT_READ, PermissionConstants.SYSTEM_USER_READ})
public Pager<List<UserExtend>> listMember(@Validated @RequestBody OrganizationRequest request) {
public Pager<List<UserExtendDTO>> listMember(@Validated @RequestBody OrganizationRequest request) {
Page<Object> page = PageHelper.startPage(request.getCurrent(), request.getPageSize(), true);
return PageUtils.setPageInfo(page, organizationService.getMemberListBySystem(request));
}
@ -118,7 +118,7 @@ public class SystemOrganizationController {
@Operation(summary = "系统设置-系统-组织与项目-获取成员下拉选项")
@RequiresPermissions(value = {PermissionConstants.SYSTEM_ORGANIZATION_PROJECT_READ})
@Parameter(name = "sourceId", description = "组织ID或项目ID", schema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED))
public List<UserExtend> getMemberOption(@PathVariable String sourceId,
public List<UserExtendDTO> getMemberOption(@PathVariable String sourceId,
@Schema(description = "查询关键字,根据邮箱和用户名查询")
@RequestParam(value = "keyword", required = false) String keyword) {
return userService.getMemberOption(sourceId, keyword);

View File

@ -5,7 +5,7 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.PageUtils;
import io.metersphere.sdk.util.Pager;
import io.metersphere.system.domain.User;
@ -120,7 +120,7 @@ public class SystemProjectController {
@PostMapping("/member-list")
@RequiresPermissions(PermissionConstants.SYSTEM_ORGANIZATION_PROJECT_READ)
@Operation(summary = "系统设置-系统-组织与项目-项目-成员列表")
public Pager<List<UserExtend>> getProjectMember(@Validated @RequestBody ProjectMemberRequest request) {
public Pager<List<UserExtendDTO>> getProjectMember(@Validated @RequestBody ProjectMemberRequest request) {
Page<Object> page = PageHelper.startPage(request.getCurrent(), request.getPageSize(),
StringUtils.isNotBlank(request.getSortString()) ? request.getSortString() : "create_time desc");
return PageUtils.setPageInfo(page, systemProjectService.getProjectMember(request));

View File

@ -1,7 +1,7 @@
package io.metersphere.system.dto;
import io.metersphere.project.domain.Project;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -17,7 +17,7 @@ public class ProjectDTO extends Project implements Serializable {
@Schema(description = "所属组织", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private String organizationName;
@Schema(description = "管理员", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private List<UserExtend> adminList;
private List<UserExtendDTO> adminList;
@Schema(description = "创建人是否是管理员", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private Boolean projectCreateUserIsAdmin;
@Schema(description = "模块设置", requiredMode = Schema.RequiredMode.NOT_REQUIRED)

View File

@ -1,7 +1,7 @@
package io.metersphere.system.mapper;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.system.domain.User;
import io.metersphere.system.dto.*;
import io.metersphere.system.request.OrganizationDeleteRequest;
@ -66,7 +66,7 @@ public interface ExtOrganizationMapper {
* @param request 组织成员列表请求参数
* @return 组织成员列表数据
*/
List<UserExtend> listMember(@Param("request") OrganizationRequest request);
List<UserExtendDTO> listMember(@Param("request") OrganizationRequest request);
/**

View File

@ -56,7 +56,7 @@
where id = #{id}
</update>
<select id="listMember" resultType="io.metersphere.sdk.dto.UserExtend">
<select id="listMember" resultType="io.metersphere.sdk.dto.UserExtendDTO">
select temp.*, max(if(temp.role_id = 'org_admin', true, false)) as adminFlag
from (
select u.*, urr.role_id

View File

@ -1,9 +1,9 @@
package io.metersphere.system.mapper;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.system.dto.OrganizationProjectOptionsDTO;
import io.metersphere.system.dto.ProjectDTO;
import io.metersphere.system.dto.ProjectResourcePoolDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.system.dto.OrganizationProjectOptionsDTO;
import io.metersphere.system.request.ProjectMemberRequest;
import io.metersphere.system.request.ProjectRequest;
import org.apache.ibatis.annotations.Param;
@ -12,17 +12,17 @@ import java.util.List;
public interface ExtSystemProjectMapper {
List<UserExtend> getProjectMemberList(@Param("request") ProjectMemberRequest request);
List<UserExtendDTO> getProjectMemberList(@Param("request") ProjectMemberRequest request);
List<ProjectDTO> getProjectList(@Param("request") ProjectRequest request);
List<UserExtend> getProjectAdminList(@Param("projectIds") List<String> projectIds);
List<UserExtendDTO> getProjectAdminList(@Param("projectIds") List<String> projectIds);
List<OrganizationProjectOptionsDTO> selectProjectOptions(@Param("organizationId") String organizationId);
List<UserExtend> getUserAdminList(@Param("organizationId") String organizationId, @Param("keyword") String keyword);
List<UserExtendDTO> getUserAdminList(@Param("organizationId") String organizationId, @Param("keyword") String keyword);
List<UserExtend> getUserMemberList(@Param("userIds") List<String> userIds, @Param("projectId") String projectId, @Param("keyword") String keyword);
List<UserExtendDTO> getUserMemberList(@Param("userIds") List<String> userIds, @Param("projectId") String projectId, @Param("keyword") String keyword);
List<ProjectDTO> getProjectExtendDTOList(@Param("projectIds") List<String> projectIds);

View File

@ -3,7 +3,7 @@
<mapper namespace="io.metersphere.system.mapper.ExtSystemProjectMapper">
<select id="getProjectMemberList" resultType="io.metersphere.sdk.dto.UserExtend">
<select id="getProjectMemberList" resultType="io.metersphere.sdk.dto.UserExtendDTO">
SELECT temp.* , MAX( if (temp.role_id = 'project_admin', true, false)) as adminFlag
FROM (
SELECT `user`.* , user_role_relation.role_id
@ -42,7 +42,7 @@
INNER JOIN organization o on p.organization_id = o.id
<include refid="queryWhereCondition"/>
</select>
<select id="getProjectAdminList" resultType="io.metersphere.sdk.dto.UserExtend">
<select id="getProjectAdminList" resultType="io.metersphere.sdk.dto.UserExtendDTO">
SELECT `user`.*, user_role_relation.source_id
FROM user_role_relation
LEFT JOIN `user` ON user_role_relation.user_id = `user`.id
@ -114,7 +114,7 @@
</if>
</sql>
<select id="getUserAdminList" resultType="io.metersphere.sdk.dto.UserExtend">
<select id="getUserAdminList" resultType="io.metersphere.sdk.dto.UserExtendDTO">
select distinct
u.id,
u.NAME,
@ -129,7 +129,7 @@
</select>
<select id="getUserMemberList" resultType="io.metersphere.sdk.dto.UserExtend">
<select id="getUserMemberList" resultType="io.metersphere.sdk.dto.UserExtendDTO">
select distinct u.id,
u.NAME,
u.email, count(temp.id) > 0 as memberFlag from

View File

@ -1,6 +1,6 @@
package io.metersphere.system.mapper;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.system.domain.User;
import org.apache.ibatis.annotations.Param;
@ -8,7 +8,7 @@ import java.util.List;
public interface ExtUserMapper {
List<UserExtend> getMemberOption(@Param("sourceId") String sourceId, @Param("keyword") String keyword);
List<UserExtendDTO> getMemberOption(@Param("sourceId") String sourceId, @Param("keyword") String keyword);
List<User> getUserListByOrgId(@Param("sourceId") String sourceId, @Param("keyword") String keyword);

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.metersphere.system.mapper.ExtUserMapper">
<select id="getMemberOption" resultType="io.metersphere.sdk.dto.UserExtend">
<select id="getMemberOption" resultType="io.metersphere.sdk.dto.UserExtendDTO">
select distinct u.*, count(urr.id) > 0 as memberFlag
from `user` u left join user_role_relation urr on urr.user_id = u.id and urr.source_id = #{sourceId}
where u.deleted = 0

View File

@ -12,7 +12,7 @@ import io.metersphere.sdk.constants.OperationLogConstants;
import io.metersphere.sdk.constants.UserRoleType;
import io.metersphere.sdk.dto.LogDTO;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.exception.MSException;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.JSON;
@ -210,17 +210,18 @@ public class CommonProjectService {
public List<ProjectDTO> buildUserInfo(List<ProjectDTO> projectList) {
//取项目的创建人 修改人 删除人到一个list中
List<String> userIds = new ArrayList<>();
if (CollectionUtils.isNotEmpty(projectList)) {
userIds.addAll(projectList.stream().map(ProjectDTO::getCreateUser).toList());
userIds.addAll(projectList.stream().map(ProjectDTO::getUpdateUser).toList());
userIds.addAll(projectList.stream().map(ProjectDTO::getDeleteUser).toList());
Map<String, String> userMap = userLoginService.getUserNameMap(userIds.stream().filter(StringUtils::isNotBlank).distinct().toList());
// 获取项目id
List<String> projectIds = projectList.stream().map(ProjectDTO::getId).toList();
List<UserExtend> users = extSystemProjectMapper.getProjectAdminList(projectIds);
List<UserExtendDTO> users = extSystemProjectMapper.getProjectAdminList(projectIds);
List<ProjectDTO> projectDTOList = extSystemProjectMapper.getProjectExtendDTOList(projectIds);
Map<String, ProjectDTO> projectMap = projectDTOList.stream().collect(Collectors.toMap(ProjectDTO::getId, projectDTO -> projectDTO));
//根据sourceId分组
Map<String, List<UserExtend>> userMapList = users.stream().collect(Collectors.groupingBy(UserExtend::getSourceId));
Map<String, List<UserExtendDTO>> userMapList = users.stream().collect(Collectors.groupingBy(UserExtendDTO::getSourceId));
//获取资源池
List<ProjectResourcePoolDTO> projectResourcePoolDTOList = extSystemProjectMapper.getProjectResourcePoolDTOList(projectIds);
//根据projectId分组 key为项目id 值为资源池TestResourcePool
@ -231,10 +232,10 @@ public class CommonProjectService {
projectDTO.setModuleIds(JSON.parseArray(projectDTO.getModuleSetting(), String.class));
}
projectDTO.setMemberCount(projectMap.get(projectDTO.getId()).getMemberCount());
List<UserExtend> userExtends = userMapList.get(projectDTO.getId());
if (CollectionUtils.isNotEmpty(userExtends)) {
projectDTO.setAdminList(userExtends);
List<String> userIdList = userExtends.stream().map(User::getId).collect(Collectors.toList());
List<UserExtendDTO> userExtendDTOS = userMapList.get(projectDTO.getId());
if (CollectionUtils.isNotEmpty(userExtendDTOS)) {
projectDTO.setAdminList(userExtendDTOS);
List<String> userIdList = userExtendDTOS.stream().map(User::getId).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(userIdList) && userIdList.contains(projectDTO.getCreateUser())) {
projectDTO.setProjectCreateUserIsAdmin(true);
} else {
@ -253,6 +254,7 @@ public class CommonProjectService {
projectDTO.setUpdateUser(userMap.get(projectDTO.getUpdateUser()));
projectDTO.setDeleteUser(userMap.get(projectDTO.getDeleteUser()));
});
}
return projectList;
}

View File

@ -1,7 +1,7 @@
package io.metersphere.system.service;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.exception.MSException;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.Translator;
@ -76,7 +76,7 @@ public class OrganizationProjectService {
return commonProjectService.delete(id, deleteUser);
}
public List<UserExtend> getProjectMember(ProjectMemberRequest request) {
public List<UserExtendDTO> getProjectMember(ProjectMemberRequest request) {
return extSystemProjectMapper.getProjectMemberList(request);
}
@ -106,12 +106,12 @@ public class OrganizationProjectService {
commonProjectService.disable(id, updateUser);
}
public List<UserExtend> getUserAdminList(String organizationId, String keyword) {
public List<UserExtendDTO> getUserAdminList(String organizationId, String keyword) {
checkOrgIsExist(organizationId);
return extSystemProjectMapper.getUserAdminList(organizationId, keyword);
}
public List<UserExtend> getUserMemberList(String organizationId, String projectId, String keyword) {
public List<UserExtendDTO> getUserMemberList(String organizationId, String projectId, String keyword) {
checkOrgIsExist(organizationId);
commonProjectService.checkProjectNotExist(projectId);
UserRoleRelationExample example = new UserRoleRelationExample();

View File

@ -6,7 +6,7 @@ import io.metersphere.project.mapper.ProjectMapper;
import io.metersphere.sdk.constants.*;
import io.metersphere.sdk.dto.LogDTO;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.exception.MSException;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.CommonBeanFactory;
@ -108,7 +108,7 @@ public class OrganizationService {
* @param request 请求参数
* @return 组织成员集合
*/
public List<UserExtend> getMemberListBySystem(OrganizationRequest request) {
public List<UserExtendDTO> getMemberListBySystem(OrganizationRequest request) {
return extOrganizationMapper.listMember(request);
}

View File

@ -2,7 +2,7 @@ package io.metersphere.system.service;
import io.metersphere.project.domain.Project;
import io.metersphere.sdk.dto.OptionDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.Translator;
import io.metersphere.system.dto.*;
import io.metersphere.system.log.constants.OperationLogModule;
@ -58,7 +58,7 @@ public class SystemProjectService {
return commonProjectService.delete(id, deleteUser);
}
public List<UserExtend> getProjectMember(ProjectMemberRequest request) {
public List<UserExtendDTO> getProjectMember(ProjectMemberRequest request) {
return extSystemProjectMapper.getProjectMemberList(request);
}

View File

@ -1,6 +1,6 @@
package io.metersphere.system.service;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.system.domain.*;
import io.metersphere.system.mapper.ExtUserMapper;
@ -39,8 +39,8 @@ public class UserRoleService {
}
}
public List<UserExtend> getMember(String sourceId, String roleId, String keyword) {
List<UserExtend> userExtends = new ArrayList<>();
public List<UserExtendDTO> getMember(String sourceId, String roleId, String keyword) {
List<UserExtendDTO> userExtendDTOS = new ArrayList<>();
// 查询组织或项目下所有用户关系
UserRoleRelationExample example = new UserRoleRelationExample();
example.createCriteria().andSourceIdEqualTo(sourceId);
@ -49,22 +49,22 @@ public class UserRoleService {
Map<String, List<String>> userRoleMap = userRoleRelations.stream().collect(Collectors.groupingBy(UserRoleRelation::getUserId,
Collectors.mapping(UserRoleRelation::getRoleId, Collectors.toList())));
userRoleMap.forEach((k, v) -> {
UserExtend userExtend = new UserExtend();
userExtend.setId(k);
UserExtendDTO userExtendDTO = new UserExtendDTO();
userExtendDTO.setId(k);
v.forEach(roleItem -> {
if (StringUtils.equals(roleItem, roleId)) {
// 该用户已存在用户组关系, 设置为选中状态
userExtend.setCheckRoleFlag(true);
userExtendDTO.setCheckRoleFlag(true);
}
});
userExtends.add(userExtend);
userExtendDTOS.add(userExtendDTO);
});
// 设置用户信息, 用户不存在或者已删除, 则不展示
List<String> userIds = userExtends.stream().map(UserExtend::getId).toList();
List<String> userIds = userExtendDTOS.stream().map(UserExtendDTO::getId).toList();
List<User> users = extUserMapper.getRoleUserByParam(userIds, keyword);
if (CollectionUtils.isNotEmpty(users)) {
Map<String, User> userMap = users.stream().collect(Collectors.toMap(User::getId, user -> user));
userExtends.removeIf(userExtend -> {
userExtendDTOS.removeIf(userExtend -> {
if (userMap.containsKey(userExtend.getId())) {
BeanUtils.copyBean(userExtend, userMap.get(userExtend.getId()));
return false;
@ -72,11 +72,11 @@ public class UserRoleService {
return true;
});
} else {
userExtends.clear();
userExtendDTOS.clear();
}
}
userExtends.sort(Comparator.comparing(UserExtend::getName));
return userExtends;
userExtendDTOS.sort(Comparator.comparing(UserExtendDTO::getName));
return userExtendDTOS;
}
}

View File

@ -3,7 +3,6 @@ package io.metersphere.system.service;
import com.alibaba.excel.EasyExcelFactory;
import io.metersphere.sdk.constants.ParamConstants;
import io.metersphere.sdk.constants.UserSource;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.*;
import io.metersphere.sdk.exception.MSException;
import io.metersphere.sdk.util.*;
@ -330,7 +329,7 @@ public class UserService {
* @param sourceId 组织ID, 项目ID
* @return 系统用户选项
*/
public List<UserExtend> getMemberOption(String sourceId, String keyword) {
public List<UserExtendDTO> getMemberOption(String sourceId, String keyword) {
return extUserMapper.getMemberOption(sourceId, keyword);
}

View File

@ -6,19 +6,20 @@ import io.metersphere.project.domain.ProjectTestResourcePool;
import io.metersphere.project.domain.ProjectTestResourcePoolExample;
import io.metersphere.project.mapper.ProjectMapper;
import io.metersphere.project.mapper.ProjectTestResourcePoolMapper;
import io.metersphere.system.base.BaseTest;
import io.metersphere.sdk.constants.InternalUserRole;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.constants.SessionConstants;
import io.metersphere.system.controller.handler.ResultHolder;
import io.metersphere.sdk.dto.*;
import io.metersphere.system.dto.*;
import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.sdk.dto.UserDTO;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.JSON;
import io.metersphere.sdk.util.Pager;
import io.metersphere.system.base.BaseTest;
import io.metersphere.system.controller.handler.ResultHolder;
import io.metersphere.system.domain.User;
import io.metersphere.system.domain.UserRoleRelation;
import io.metersphere.system.domain.UserRoleRelationExample;
import io.metersphere.system.dto.*;
import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.system.mapper.UserMapper;
import io.metersphere.system.mapper.UserRoleRelationMapper;
import io.metersphere.system.request.OrganizationProjectRequest;
@ -667,7 +668,7 @@ public class OrganizationProjectControllerTests extends BaseTest {
//返回值的页码和当前页码相同
Assertions.assertEquals(returnPager.getCurrent(), memberRequest.getCurrent());
//返回的数据量不超过规定要返回的数据量相同
Assertions.assertTrue(((List<UserExtend>) returnPager.getList()).size() <= memberRequest.getPageSize());
Assertions.assertTrue(((List<UserExtendDTO>) returnPager.getList()).size() <= memberRequest.getPageSize());
UserRoleRelationExample userRoleRelationExample = new UserRoleRelationExample();
userRoleRelationExample.createCriteria().andSourceIdEqualTo(projectId);
List<UserRoleRelation> userRoleRelations = userRoleRelationMapper.selectByExample(userRoleRelationExample);
@ -682,10 +683,10 @@ public class OrganizationProjectControllerTests extends BaseTest {
returnPager = parseObjectFromMvcResult(mvcResult, Pager.class);
//第一个数据的createTime是最大的
assert returnPager != null;
List<UserExtend> userExtends = JSON.parseArray(JSON.toJSONString(returnPager.getList()), UserExtend.class);
long firstCreateTime = userExtends.get(0).getCreateTime();
for (UserExtend userExtend : userExtends) {
Assertions.assertFalse(userExtend.getCreateTime() > firstCreateTime);
List<UserExtendDTO> userExtendDTOS = JSON.parseArray(JSON.toJSONString(returnPager.getList()), UserExtendDTO.class);
long firstCreateTime = userExtendDTOS.get(0).getCreateTime();
for (UserExtendDTO userExtendDTO : userExtendDTOS) {
Assertions.assertFalse(userExtendDTO.getCreateTime() > firstCreateTime);
}
// @@校验权限
requestPostPermissionTest(PermissionConstants.ORGANIZATION_PROJECT_READ, getProjectMemberList, memberRequest);

View File

@ -2,13 +2,13 @@ package io.metersphere.system.controller;
import io.metersphere.sdk.constants.PermissionConstants;
import io.metersphere.sdk.constants.SessionConstants;
import io.metersphere.system.dto.ProjectDTO;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.JSON;
import io.metersphere.sdk.util.Pager;
import io.metersphere.system.base.BaseTest;
import io.metersphere.system.controller.handler.ResultHolder;
import io.metersphere.system.dto.OrganizationDTO;
import io.metersphere.system.dto.ProjectDTO;
import io.metersphere.system.log.constants.OperationLogType;
import io.metersphere.system.request.OrganizationMemberRequest;
import io.metersphere.system.request.OrganizationRequest;
@ -171,10 +171,10 @@ public class SystemOrganizationControllerTests extends BaseTest{
// 返回的数据量不超过规定要返回的数据量相同
Assertions.assertTrue(JSON.parseArray(JSON.toJSONString(pageData.getList())).size() <= organizationRequest.getPageSize());
// 返回值中取出第一条数据, 并判断是否包含关键字admin
UserExtend userExtend = JSON.parseArray(JSON.toJSONString(pageData.getList()), UserExtend.class).get(0);
Assertions.assertTrue(StringUtils.contains(userExtend.getName(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtend.getEmail(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtend.getPhone(), organizationRequest.getKeyword()));
UserExtendDTO userExtendDTO = JSON.parseArray(JSON.toJSONString(pageData.getList()), UserExtendDTO.class).get(0);
Assertions.assertTrue(StringUtils.contains(userExtendDTO.getName(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtendDTO.getEmail(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtendDTO.getPhone(), organizationRequest.getKeyword()));
// sort不为空
Map<String, String> sort = new HashMap<>();
@ -185,8 +185,8 @@ public class SystemOrganizationControllerTests extends BaseTest{
ResultHolder sortHolder = JSON.parseObject(sortData, ResultHolder.class);
Pager<?> sortPageData = JSON.parseObject(JSON.toJSONString(sortHolder.getData()), Pager.class);
// 返回值中取出第一条ID最大的数据, 并判断是否是admin
UserExtend userExtend1 = JSON.parseArray(JSON.toJSONString(sortPageData.getList()), UserExtend.class).get(0);
Assertions.assertTrue(StringUtils.contains(userExtend1.getId(), "admin"));
UserExtendDTO userExtendDTO1 = JSON.parseArray(JSON.toJSONString(sortPageData.getList()), UserExtendDTO.class).get(0);
Assertions.assertTrue(StringUtils.contains(userExtendDTO1.getId(), "admin"));
// 权限校验
requestPostPermissionsTest(List.of(PermissionConstants.SYSTEM_ORGANIZATION_PROJECT_READ, PermissionConstants.SYSTEM_USER_READ),
ORGANIZATION_LIST_MEMBER, organizationRequest);
@ -241,10 +241,10 @@ public class SystemOrganizationControllerTests extends BaseTest{
// 返回的数据量不超过规定要返回的数据量相同
Assertions.assertTrue(JSON.parseArray(JSON.toJSONString(pageData.getList())).size() <= organizationRequest.getPageSize());
// 返回值中取出第一条数据, 并判断是否包含关键字admin
UserExtend userExtend = JSON.parseArray(JSON.toJSONString(pageData.getList()), UserExtend.class).get(0);
Assertions.assertTrue(StringUtils.contains(userExtend.getName(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtend.getEmail(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtend.getPhone(), organizationRequest.getKeyword()));
UserExtendDTO userExtendDTO = JSON.parseArray(JSON.toJSONString(pageData.getList()), UserExtendDTO.class).get(0);
Assertions.assertTrue(StringUtils.contains(userExtendDTO.getName(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtendDTO.getEmail(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtendDTO.getPhone(), organizationRequest.getKeyword()));
// 权限校验
organizationMemberRequest.setUserIds(List.of("admin"));
requestPostPermissionTest(PermissionConstants.SYSTEM_ORGANIZATION_PROJECT_MEMBER_ADD, ORGANIZATION_ADD_MEMBER, organizationMemberRequest);
@ -277,10 +277,10 @@ public class SystemOrganizationControllerTests extends BaseTest{
// 返回的数据量不超过规定要返回的数据量相同
Assertions.assertTrue(JSON.parseArray(JSON.toJSONString(pageData.getList())).size() <= organizationRequest.getPageSize());
// 返回值中取出第一条数据, 并判断是否包含关键字admin
UserExtend userExtend = JSON.parseArray(JSON.toJSONString(pageData.getList()), UserExtend.class).get(0);
Assertions.assertTrue(StringUtils.contains(userExtend.getName(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtend.getEmail(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtend.getPhone(), organizationRequest.getKeyword()));
UserExtendDTO userExtendDTO = JSON.parseArray(JSON.toJSONString(pageData.getList()), UserExtendDTO.class).get(0);
Assertions.assertTrue(StringUtils.contains(userExtendDTO.getName(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtendDTO.getEmail(), organizationRequest.getKeyword())
|| StringUtils.contains(userExtendDTO.getPhone(), organizationRequest.getKeyword()));
}
@Test

View File

@ -7,7 +7,7 @@ import io.metersphere.project.domain.ProjectTestResourcePoolExample;
import io.metersphere.project.mapper.ProjectMapper;
import io.metersphere.project.mapper.ProjectTestResourcePoolMapper;
import io.metersphere.sdk.constants.*;
import io.metersphere.sdk.dto.UserExtend;
import io.metersphere.sdk.dto.UserExtendDTO;
import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.JSON;
import io.metersphere.sdk.util.Pager;
@ -563,6 +563,13 @@ public class SystemProjectControllerTests extends BaseTest {
Assertions.assertFalse(projectDTO.getOrganizationName().compareTo(firstOrganizationName) > 0);
}
//查询不存在的组织id
projectRequest.setOrganizationId("111111");
mvcResult = this.responsePost(getProjectList, projectRequest);
returnPager = parseObjectFromMvcResult(mvcResult, Pager.class);
//返回值不为空
Assertions.assertNotNull(returnPager);
//返回值为
// @@校验权限
requestPostPermissionTest(PermissionConstants.SYSTEM_ORGANIZATION_PROJECT_READ, getProjectList, projectRequest);
@ -786,17 +793,17 @@ public class SystemProjectControllerTests extends BaseTest {
//返回值的页码和当前页码相同
Assertions.assertEquals(returnPager.getCurrent(), memberRequest.getCurrent());
//返回的数据量不超过规定要返回的数据量相同
Assertions.assertTrue(((List<UserExtend>) returnPager.getList()).size() <= memberRequest.getPageSize());
Assertions.assertTrue(((List<UserExtendDTO>) returnPager.getList()).size() <= memberRequest.getPageSize());
memberRequest.setSort(new HashMap<>() {{
put("createTime", "desc");
}});
mvcResult = this.responsePost(getProjectMemberList, memberRequest);
returnPager = parseObjectFromMvcResult(mvcResult, Pager.class);
//第一个数据的createTime是最大的
List<UserExtend> userExtends = JSON.parseArray(JSON.toJSONString(returnPager.getList()), UserExtend.class);
long firstCreateTime = userExtends.get(0).getCreateTime();
for (UserExtend userExtend : userExtends) {
Assertions.assertFalse(userExtend.getCreateTime() > firstCreateTime);
List<UserExtendDTO> userExtendDTOS = JSON.parseArray(JSON.toJSONString(returnPager.getList()), UserExtendDTO.class);
long firstCreateTime = userExtendDTOS.get(0).getCreateTime();
for (UserExtendDTO userExtendDTO : userExtendDTOS) {
Assertions.assertFalse(userExtendDTO.getCreateTime() > firstCreateTime);
}
// @@校验权限
requestPostPermissionTest(PermissionConstants.SYSTEM_ORGANIZATION_PROJECT_READ, getProjectMemberList, memberRequest);