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.setTenantId(tenantId);
sysUserTenant.setUserId(user.getId());
sysUserTenant.setId(user.getId());
// sysUserTenant.setOperateTime(new Date());
userTenantMapper.insert(sysUserTenant);
this.addDefaultRole(savedUser.getId(), smsVerifyCodeRequest);
}

View File

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

View File

@ -1,11 +1,13 @@
package com.yfd.platform.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
@ -27,4 +29,11 @@ public class SysUserTenant implements Serializable {
/** 门户ID */
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
* 返回值说明:
************************************/
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 查询 系统角色用户对照表

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

View File

@ -66,7 +66,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
// 构建权限过滤条件
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());
for (SysRole sysRole : roleByUserId) {
String orgscope = sysRole.getOrgscope();
@ -253,7 +254,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl<SysOrganizationMappe
// 收集所有允许的组织ID
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());
for (SysRole sysRole : roleByUserId) {
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.SysRole;
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.SysUserMapper;
import com.yfd.platform.system.mapper.SysUserTenantMapper;
@ -184,19 +185,24 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
//系统生成id
String id = IdUtil.fastSimpleUUID();
//新增sys_role_users表数据
ok = ok && sysUserMapper.addUserRoles(id, roleid,
sysUser.getId());
ok = ok && sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, sysUser.getId());
}
}
//判断新增是否成功 消息提示
if (ok) {
// 插入用户-门户关联
String tenantId = sysUser.getTenantId();
if (StrUtil.isNotBlank(tenantId)) {
List<String> tenantIds = new ArrayList<>();
tenantIds.add(tenantId);
sysUserTenantMapper.batchInsert(sysUser.getId(), tenantIds);
List<String> ids = StrUtil.split(roleids, ",");
if(!ids.isEmpty()) {
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 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("msg", "新增用户成功!");
@ -282,6 +288,14 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
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();
if (StrUtil.isNotEmpty(roleids)) {
@ -362,7 +376,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
for (String roleId : newRoles) {
if (!currentRoleSet.contains(roleId)) {
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
String id = IdUtil.fastSimpleUUID();
//新增sys_role_users表数据
isOk = isOk && sysUserMapper.addUserRoles(id, roleid, userid);
isOk = isOk && sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, userid);
}
}
return isOk;
@ -594,7 +608,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
//系统生成id
String id = IdUtil.fastSimpleUUID();
//新增sys_role_users表数据
isOk = sysUserMapper.addUserRoles(id, roleid, userid);
isOk = sysUserMapper.addUserRoles(SecurityUtils.getUserId(),id, roleid, userid);
}
return isOk;
}
@ -952,7 +966,7 @@ public class UserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impleme
if (StrUtil.isBlank(userId) || tenantIds == null || tenantIds.isEmpty()) {
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) {
// String maxLevel = sysUserMapper.getMaxLevel(userId);
String maxLevel = sysUserMapper.getMaxLevel(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<>();
applySelect(request, wrapper, entityClass, fieldMapping, excludes);
applyFilters(request.getFilter(), wrapper, entityClass, fieldMapping, excludes, "and");
applySort(request.getSort(), wrapper, entityClass);
@ -145,6 +147,49 @@ public class DataSourceRequestUtil {
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,
QueryWrapper<T> wrapper,
Class<T> entityClass,

View File

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

View File

@ -29,7 +29,7 @@
<!--用户分配角色 系统角色用户对照新增数据-->
<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>
<!--根据用户id 和角色id 查询 系统角色用户对照表-->

View File

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