fix: 优化逻辑

This commit is contained in:
tangwei 2026-08-03 17:51:33 +08:00
parent 57cc61f1c0
commit d14b6d6eba
11 changed files with 96 additions and 23 deletions

View File

@ -237,6 +237,8 @@ public class SmsVerifyCodeController {
SysUserTenant sysUserTenant = new SysUserTenant(); SysUserTenant sysUserTenant = new SysUserTenant();
sysUserTenant.setTenantId(tenantId); sysUserTenant.setTenantId(tenantId);
sysUserTenant.setUserId(user.getId()); sysUserTenant.setUserId(user.getId());
sysUserTenant.setId(user.getId());
// sysUserTenant.setOperateTime(new Date());
userTenantMapper.insert(sysUserTenant); userTenantMapper.insert(sysUserTenant);
this.addDefaultRole(savedUser.getId(), smsVerifyCodeRequest); this.addDefaultRole(savedUser.getId(), smsVerifyCodeRequest);
} }

View File

@ -126,8 +126,9 @@ public class SysMenuController {
@ResponseBody @ResponseBody
public List<Map<String, Object>> getMenuTreeByUser(@RequestHeader(value = "Tenant_id", required = false) String tenantId) { public List<Map<String, Object>> getMenuTreeByUser(@RequestHeader(value = "Tenant_id", required = false) String tenantId) {
SysUser userInfo = userService.getUserInfo(); SysUser userInfo = userService.getUserInfo();
boolean superAdmin = userService.isSuperAdmin(userInfo.getId());
String id = ""; String id = "";
if (0 != userInfo.getUsertype()) { if (0 != userInfo.getUsertype() && !superAdmin) {
id = userInfo.getId(); id = userInfo.getId();
} }
return sysMenuService.getMenuTree(id, tenantId); return sysMenuService.getMenuTree(id, tenantId);

View File

@ -1,11 +1,13 @@
package com.yfd.platform.system.domain; package com.yfd.platform.system.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* <p> * <p>
@ -27,4 +29,11 @@ public class SysUserTenant implements Serializable {
/** 门户ID */ /** 门户ID */
private String tenantId; private String tenantId;
@TableField("OPERATOR")
private String operator;
@TableField("OPERATE_TIME")
private Date operateTime;
} }

View File

@ -29,7 +29,7 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
* userid 用户id * userid 用户id
* 返回值说明: * 返回值说明:
************************************/ ************************************/
boolean addUserRoles(@Param("id")String id,@Param("roleid") String roleid,@Param("userid") String userid); boolean addUserRoles(@Param("operator") String operator,@Param("id")String id,@Param("roleid") String roleid,@Param("userid") String userid);
/*********************************** /***********************************
* 用途说明根据用户id 和角色id 查询 系统角色用户对照表 * 用途说明根据用户id 和角色id 查询 系统角色用户对照表

View File

@ -28,7 +28,7 @@ public interface SysUserTenantMapper extends BaseMapper<SysUserTenant> {
/** /**
* 批量新增用户-门户关联 * 批量新增用户-门户关联
*/ */
int batchInsert(@Param("userId") String userId, @Param("tenantIds") List<String> tenantIds); int batchInsert(@Param("operator") String operator,@Param("userId") String userId, @Param("tenantIds") List<String> tenantIds);
/** /**
* 查询某门户下的所有用户ID * 查询某门户下的所有用户ID

View File

@ -66,7 +66,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
// 构建权限过滤条件 // 构建权限过滤条件
Set<String> allowedOrgIds = new HashSet<>(); Set<String> allowedOrgIds = new HashSet<>();
if (userInfo.getUsertype() != 0) { boolean superAdmin = userService.isSuperAdmin(userInfo.getId());
if (userInfo.getUsertype() != 0 && !superAdmin) {
List<SysRole> roleByUserId = sysRoleMapper.getRoleByUserId(userInfo.getId()); List<SysRole> roleByUserId = sysRoleMapper.getRoleByUserId(userInfo.getId());
for (SysRole sysRole : roleByUserId) { for (SysRole sysRole : roleByUserId) {
String orgscope = sysRole.getOrgscope(); String orgscope = sysRole.getOrgscope();
@ -253,7 +254,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
// 收集所有允许的组织ID // 收集所有允许的组织ID
Set<String> allowedOrgIds = new HashSet<>(); Set<String> allowedOrgIds = new HashSet<>();
if (userInfo.getUsertype() != 0) { boolean superAdmin = userService.isSuperAdmin(userInfo.getId());
if (userInfo.getUsertype() != 0 && !superAdmin) {
List<SysRole> roleByUserId = sysRoleMapper.getRoleByUserId(userInfo.getId()); List<SysRole> roleByUserId = sysRoleMapper.getRoleByUserId(userInfo.getId());
for (SysRole sysRole : roleByUserId) { for (SysRole sysRole : roleByUserId) {
String orgscope = sysRole.getOrgscope(); String orgscope = sysRole.getOrgscope();

View File

@ -20,6 +20,7 @@ import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper;
import com.yfd.platform.system.domain.LoginUser; import com.yfd.platform.system.domain.LoginUser;
import com.yfd.platform.system.domain.SysRole; import com.yfd.platform.system.domain.SysRole;
import com.yfd.platform.system.domain.SysUser; import com.yfd.platform.system.domain.SysUser;
import com.yfd.platform.system.domain.SysUserTenant;
import com.yfd.platform.system.mapper.SysRoleMapper; import com.yfd.platform.system.mapper.SysRoleMapper;
import com.yfd.platform.system.mapper.SysUserMapper; import com.yfd.platform.system.mapper.SysUserMapper;
import com.yfd.platform.system.mapper.SysUserTenantMapper; import com.yfd.platform.system.mapper.SysUserTenantMapper;
@ -184,19 +185,24 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
//系统生成id //系统生成id
String id = IdUtil.fastSimpleUUID(); String id = IdUtil.fastSimpleUUID();
//新增sys_role_users表数据 //新增sys_role_users表数据
ok = ok && sysUserMapper.addUserRoles(id, roleid, ok = ok && sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, sysUser.getId());
sysUser.getId());
} }
} }
//判断新增是否成功 消息提示 //判断新增是否成功 消息提示
if (ok) { if (ok) {
// 插入用户-门户关联 // 插入用户-门户关联
String tenantId = sysUser.getTenantId(); List<String> ids = StrUtil.split(roleids, ",");
if (StrUtil.isNotBlank(tenantId)) { if(!ids.isEmpty()) {
List<String> tenantIds = new ArrayList<>(); List<SysRole> selectedList = sysRoleMapper.selectList(new LambdaQueryWrapper<SysRole>().in(SysRole::getId, ids).select(SysRole::getTenantId));
tenantIds.add(tenantId); List<String> tenantIds = selectedList.stream().map(SysRole::getTenantId).distinct().toList();
sysUserTenantMapper.batchInsert(sysUser.getId(), tenantIds); sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(), sysUser.getId(), tenantIds);
} }
// String tenantId = sysUser.getTenantId();
// if (StrUtil.isNotBlank(tenantId)) {
// List<String> tenantIds = new ArrayList<>();
// tenantIds.add(tenantId);
// sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(),sysUser.getId(), tenantIds);
// }
result.put("status", "sucess"); result.put("status", "sucess");
result.put("msg", "新增用户成功!"); result.put("msg", "新增用户成功!");
@ -282,6 +288,14 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
return result; return result;
} }
// 根据角色给用户分配门户
sysUserTenantMapper.deleteByUserId(sysUser.getId());
if(StrUtil.isNotBlank(roleids)) {
List<String> ids = StrUtil.split(roleids, ",");
List<SysRole> selectedList = sysRoleMapper.selectList(new LambdaQueryWrapper<SysRole>().in(SysRole::getId, ids).select(SysRole::getTenantId));
List<String> tenantIds = selectedList.stream().map(SysRole::getTenantId).distinct().toList();
sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(), sysUser.getId(), tenantIds);
}
// 处理角色分配 // 处理角色分配
String userId = sysUser.getId(); String userId = sysUser.getId();
if (StrUtil.isNotEmpty(roleids)) { if (StrUtil.isNotEmpty(roleids)) {
@ -362,7 +376,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
for (String roleId : newRoles) { for (String roleId : newRoles) {
if (!currentRoleSet.contains(roleId)) { if (!currentRoleSet.contains(roleId)) {
String id = IdUtil.fastSimpleUUID(); String id = IdUtil.fastSimpleUUID();
sysUserMapper.addUserRoles(id, roleId, userId); sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleId, userId);
} }
} }
@ -419,7 +433,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
//系统生成id //系统生成id
String id = IdUtil.fastSimpleUUID(); String id = IdUtil.fastSimpleUUID();
//新增sys_role_users表数据 //新增sys_role_users表数据
isOk = isOk && sysUserMapper.addUserRoles(id, roleid, userid); isOk = isOk && sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, userid);
} }
} }
return isOk; return isOk;
@ -594,7 +608,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
//系统生成id //系统生成id
String id = IdUtil.fastSimpleUUID(); String id = IdUtil.fastSimpleUUID();
//新增sys_role_users表数据 //新增sys_role_users表数据
isOk = sysUserMapper.addUserRoles(id, roleid, userid); isOk = sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, userid);
} }
return isOk; return isOk;
} }
@ -952,7 +966,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
if (StrUtil.isBlank(userId) || tenantIds == null || tenantIds.isEmpty()) { if (StrUtil.isBlank(userId) || tenantIds == null || tenantIds.isEmpty()) {
throw new RuntimeException("用户ID和门户ID列表不能为空"); throw new RuntimeException("用户ID和门户ID列表不能为空");
} }
sysUserTenantMapper.batchInsert(userId, tenantIds); sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(),userId, tenantIds);
} }
/** /**
@ -980,9 +994,9 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
public boolean isSuperAdmin(String userId) { public boolean isSuperAdmin(String userId) {
// String maxLevel = sysUserMapper.getMaxLevel(userId); String maxLevel = sysUserMapper.getMaxLevel(userId);
SysUser sysUser = sysUserMapper.selectById(userId); SysUser sysUser = sysUserMapper.selectById(userId);
return sysUser!=null && sysUser.getUsertype()==0; return (sysUser!=null && sysUser.getUsertype()==0) || "1".equals(maxLevel);
} }
} }

View File

@ -92,6 +92,8 @@ public class DataSourceRequestUtil {
List<String> excludes = excludeFields != null ? excludeFields : new ArrayList<>(); List<String> excludes = excludeFields != null ? excludeFields : new ArrayList<>();
applySelect(request, wrapper, entityClass, fieldMapping, excludes);
applyFilters(request.getFilter(), wrapper, entityClass, fieldMapping, excludes, "and"); applyFilters(request.getFilter(), wrapper, entityClass, fieldMapping, excludes, "and");
applySort(request.getSort(), wrapper, entityClass); applySort(request.getSort(), wrapper, entityClass);
@ -145,6 +147,49 @@ public class DataSourceRequestUtil {
return service.list(wrapper); return service.list(wrapper);
} }
/**
* 应用查询字段select / distinctSelect
* distinctSelect 优先于 select并附带 DISTINCT 去重
*/
private static <T> void applySelect(DataSourceRequest request,
QueryWrapper<T> wrapper,
Class<T> entityClass,
Map<String, String> fieldMapping,
List<String> excludeFields) {
List<String> selectFields = request.getSelect();
boolean distinct = false;
if (CollectionUtil.isNotEmpty(request.getDistinctSelect())) {
selectFields = request.getDistinctSelect();
distinct = true;
}
if (CollectionUtil.isEmpty(selectFields)) {
return;
}
List<String> columns = new ArrayList<>();
for (String field : selectFields) {
if (StrUtil.isBlank(field) || excludeFields.contains(field)) {
continue;
}
String columnName = getColumnName(field, entityClass, fieldMapping);
if (columnName != null) {
columns.add(columnName);
}
}
if (columns.isEmpty()) {
return;
}
String[] columnArray = columns.toArray(new String[0]);
if (distinct) {
// MyBatis-Plus 3.5.16 wrapper.distinct() 方法在首个查询列前加 DISTINCT 关键字实现去重
columnArray[0] = "DISTINCT " + columnArray[0];
}
wrapper.select(columnArray);
}
private static <T> void applyFilters(DataSourceRequest.FilterDescriptor filter, private static <T> void applyFilters(DataSourceRequest.FilterDescriptor filter,
QueryWrapper<T> wrapper, QueryWrapper<T> wrapper,
Class<T> entityClass, Class<T> entityClass,

View File

@ -123,7 +123,7 @@
FROM sys_role_users FROM sys_role_users
WHERE userid = #{id} WHERE userid = #{id}
</select> </select>
<!--查询角色列表Oracle 兼容版)--> <!--查询角色列表Oracle 兼容版) AND r."LEVEL" != '1'-->
<select id="selectRoleList" resultType="com.yfd.platform.system.domain.SysRole"> <select id="selectRoleList" resultType="com.yfd.platform.system.domain.SysRole">
SELECT r.id, r.rolecode, r.rolename, r."LEVEL", r.description, SELECT r.id, r.rolecode, r.rolename, r."LEVEL", r.description,
r.orgscope, r.optscope, r.busscope, r.isvaild, r.orgscope, r.optscope, r.busscope, r.isvaild,
@ -136,7 +136,6 @@
<if test="tenantId != null and tenantId != ''"> <if test="tenantId != null and tenantId != ''">
AND r.tenant_id = #{tenantId} AND r.tenant_id = #{tenantId}
</if> </if>
AND r."LEVEL" != '1'
</where> </where>
ORDER BY r."LEVEL" ASC, lastmodifydate ASC ORDER BY r."LEVEL" ASC, lastmodifydate ASC
</select> </select>

View File

@ -29,7 +29,7 @@
<!--用户分配角色 系统角色用户对照新增数据--> <!--用户分配角色 系统角色用户对照新增数据-->
<insert id="addUserRoles"> <insert id="addUserRoles">
insert into sys_role_users values (#{id},#{roleid},#{userid}) insert into sys_role_users(operator,id,roleid,userid) values (#{operator},#{id},#{roleid},#{userid})
</insert> </insert>
<!--根据用户id 和角色id 查询 系统角色用户对照表--> <!--根据用户id 和角色id 查询 系统角色用户对照表-->

View File

@ -22,14 +22,15 @@
<foreach collection="tenantIds" item="tenantId" index="index" separator="UNION ALL"> <foreach collection="tenantIds" item="tenantId" index="index" separator="UNION ALL">
SELECT SELECT
#{userId, jdbcType=VARCHAR} AS USER_ID, #{userId, jdbcType=VARCHAR} AS USER_ID,
#{operator} AS OPERATOR,
#{tenantId, jdbcType=VARCHAR} AS TENANT_ID #{tenantId, jdbcType=VARCHAR} AS TENANT_ID
FROM DUAL FROM DUAL
</foreach> </foreach>
) S ) S
ON (T.USER_ID = S.USER_ID AND T.TENANT_ID = S.TENANT_ID) ON (T.USER_ID = S.USER_ID AND T.TENANT_ID = S.TENANT_ID)
WHEN NOT MATCHED THEN WHEN NOT MATCHED THEN
INSERT (ID, USER_ID, TENANT_ID) INSERT (ID, USER_ID, TENANT_ID, OPERATOR)
VALUES (SYS_GUID(), S.USER_ID, S.TENANT_ID) VALUES (SYS_GUID(), S.USER_ID, S.TENANT_ID, S.OPERATOR)
</insert> </insert>
<!-- 删除指定用户和指定门户的关联 --> <!-- 删除指定用户和指定门户的关联 -->