From d14b6d6eba9d44359644ec94d4f23af73583c069 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 3 Aug 2026 17:51:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SmsVerifyCodeController.java | 2 + .../system/controller/SysMenuController.java | 3 +- .../platform/system/domain/SysUserTenant.java | 9 ++++ .../platform/system/mapper/SysUserMapper.java | 2 +- .../system/mapper/SysUserTenantMapper.java | 2 +- .../impl/SysOrganizationServiceImpl.java | 6 ++- .../system/service/impl/UserServiceImpl.java | 40 +++++++++++------ .../platform/utils/DataSourceRequestUtil.java | 45 +++++++++++++++++++ .../resources/mapper/system/SysRoleMapper.xml | 3 +- .../resources/mapper/system/SysUserMapper.xml | 2 +- .../mapper/system/SysUserTenantMapper.xml | 5 ++- 11 files changed, 96 insertions(+), 23 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java b/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java index 7795dacf..4b58e319 100644 --- a/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java +++ b/backend/src/main/java/com/yfd/platform/system/controller/SmsVerifyCodeController.java @@ -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); } diff --git a/backend/src/main/java/com/yfd/platform/system/controller/SysMenuController.java b/backend/src/main/java/com/yfd/platform/system/controller/SysMenuController.java index 1ea0dede..5575de40 100644 --- a/backend/src/main/java/com/yfd/platform/system/controller/SysMenuController.java +++ b/backend/src/main/java/com/yfd/platform/system/controller/SysMenuController.java @@ -126,8 +126,9 @@ public class SysMenuController { @ResponseBody public List> 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); diff --git a/backend/src/main/java/com/yfd/platform/system/domain/SysUserTenant.java b/backend/src/main/java/com/yfd/platform/system/domain/SysUserTenant.java index b5b8cfac..6ac24062 100644 --- a/backend/src/main/java/com/yfd/platform/system/domain/SysUserTenant.java +++ b/backend/src/main/java/com/yfd/platform/system/domain/SysUserTenant.java @@ -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; /** *

@@ -27,4 +29,11 @@ public class SysUserTenant implements Serializable { /** 门户ID */ private String tenantId; + + @TableField("OPERATOR") + private String operator; + + @TableField("OPERATE_TIME") + private Date operateTime; + } diff --git a/backend/src/main/java/com/yfd/platform/system/mapper/SysUserMapper.java b/backend/src/main/java/com/yfd/platform/system/mapper/SysUserMapper.java index e9ac1f55..a9a45137 100644 --- a/backend/src/main/java/com/yfd/platform/system/mapper/SysUserMapper.java +++ b/backend/src/main/java/com/yfd/platform/system/mapper/SysUserMapper.java @@ -29,7 +29,7 @@ public interface SysUserMapper extends BaseMapper { * 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 查询 系统角色用户对照表 diff --git a/backend/src/main/java/com/yfd/platform/system/mapper/SysUserTenantMapper.java b/backend/src/main/java/com/yfd/platform/system/mapper/SysUserTenantMapper.java index f7961522..51365611 100644 --- a/backend/src/main/java/com/yfd/platform/system/mapper/SysUserTenantMapper.java +++ b/backend/src/main/java/com/yfd/platform/system/mapper/SysUserTenantMapper.java @@ -28,7 +28,7 @@ public interface SysUserTenantMapper extends BaseMapper { /** * 批量新增用户-门户关联 */ - int batchInsert(@Param("userId") String userId, @Param("tenantIds") List tenantIds); + int batchInsert(@Param("operator") String operator,@Param("userId") String userId, @Param("tenantIds") List tenantIds); /** * 查询某门户下的所有用户ID diff --git a/backend/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java b/backend/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java index e7681f67..c45d7c1a 100644 --- a/backend/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/system/service/impl/SysOrganizationServiceImpl.java @@ -66,7 +66,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl allowedOrgIds = new HashSet<>(); - if (userInfo.getUsertype() != 0) { + boolean superAdmin = userService.isSuperAdmin(userInfo.getId()); + if (userInfo.getUsertype() != 0 && !superAdmin) { List roleByUserId = sysRoleMapper.getRoleByUserId(userInfo.getId()); for (SysRole sysRole : roleByUserId) { String orgscope = sysRole.getOrgscope(); @@ -253,7 +254,8 @@ public class SysOrganizationServiceImpl extends ServiceImpl allowedOrgIds = new HashSet<>(); - if (userInfo.getUsertype() != 0) { + boolean superAdmin = userService.isSuperAdmin(userInfo.getId()); + if (userInfo.getUsertype() != 0 && !superAdmin) { List roleByUserId = sysRoleMapper.getRoleByUserId(userInfo.getId()); for (SysRole sysRole : roleByUserId) { String orgscope = sysRole.getOrgscope(); diff --git a/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java b/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java index a53bc58f..3d59f975 100644 --- a/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/system/service/impl/UserServiceImpl.java @@ -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 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 tenantIds = new ArrayList<>(); - tenantIds.add(tenantId); - sysUserTenantMapper.batchInsert(sysUser.getId(), tenantIds); + List ids = StrUtil.split(roleids, ","); + if(!ids.isEmpty()) { + List selectedList = sysRoleMapper.selectList(new LambdaQueryWrapper().in(SysRole::getId, ids).select(SysRole::getTenantId)); + List tenantIds = selectedList.stream().map(SysRole::getTenantId).distinct().toList(); + sysUserTenantMapper.batchInsert(SecurityUtils.getUserId(), sysUser.getId(), tenantIds); } +// String tenantId = sysUser.getTenantId(); +// if (StrUtil.isNotBlank(tenantId)) { +// List 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 impleme return result; } + // 根据角色给用户分配门户 + sysUserTenantMapper.deleteByUserId(sysUser.getId()); + if(StrUtil.isNotBlank(roleids)) { + List ids = StrUtil.split(roleids, ","); + List selectedList = sysRoleMapper.selectList(new LambdaQueryWrapper().in(SysRole::getId, ids).select(SysRole::getTenantId)); + List 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 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 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 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 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 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); } } diff --git a/backend/src/main/java/com/yfd/platform/utils/DataSourceRequestUtil.java b/backend/src/main/java/com/yfd/platform/utils/DataSourceRequestUtil.java index 25b78886..1de686a1 100644 --- a/backend/src/main/java/com/yfd/platform/utils/DataSourceRequestUtil.java +++ b/backend/src/main/java/com/yfd/platform/utils/DataSourceRequestUtil.java @@ -92,6 +92,8 @@ public class DataSourceRequestUtil { List 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 void applySelect(DataSourceRequest request, + QueryWrapper wrapper, + Class entityClass, + Map fieldMapping, + List excludeFields) { + List selectFields = request.getSelect(); + boolean distinct = false; + if (CollectionUtil.isNotEmpty(request.getDistinctSelect())) { + selectFields = request.getDistinctSelect(); + distinct = true; + } + + if (CollectionUtil.isEmpty(selectFields)) { + return; + } + + List 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 void applyFilters(DataSourceRequest.FilterDescriptor filter, QueryWrapper wrapper, Class entityClass, diff --git a/backend/src/main/resources/mapper/system/SysRoleMapper.xml b/backend/src/main/resources/mapper/system/SysRoleMapper.xml index 8e56ec4f..63671f85 100644 --- a/backend/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/backend/src/main/resources/mapper/system/SysRoleMapper.xml @@ -123,7 +123,7 @@ FROM sys_role_users WHERE userid = #{id} - + diff --git a/backend/src/main/resources/mapper/system/SysUserMapper.xml b/backend/src/main/resources/mapper/system/SysUserMapper.xml index 1e63e72f..a7c0bed3 100644 --- a/backend/src/main/resources/mapper/system/SysUserMapper.xml +++ b/backend/src/main/resources/mapper/system/SysUserMapper.xml @@ -29,7 +29,7 @@ - insert into sys_role_users values (#{id},#{roleid},#{userid}) + insert into sys_role_users(operator,id,roleid,userid) values (#{operator},#{id},#{roleid},#{userid}) diff --git a/backend/src/main/resources/mapper/system/SysUserTenantMapper.xml b/backend/src/main/resources/mapper/system/SysUserTenantMapper.xml index ce2a99c8..326a0a35 100644 --- a/backend/src/main/resources/mapper/system/SysUserTenantMapper.xml +++ b/backend/src/main/resources/mapper/system/SysUserTenantMapper.xml @@ -22,14 +22,15 @@ SELECT #{userId, jdbcType=VARCHAR} AS USER_ID, + #{operator} AS OPERATOR, #{tenantId, jdbcType=VARCHAR} AS TENANT_ID FROM DUAL ) 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)