diff --git a/backend/ruoyi-admin/pom.xml b/backend/ruoyi-admin/pom.xml
index 6d32c6fb..ddf8f8a1 100644
--- a/backend/ruoyi-admin/pom.xml
+++ b/backend/ruoyi-admin/pom.xml
@@ -112,6 +112,12 @@
org.dromara
ruoyi-xg
+
+
+ org.dromara
+ ruoyi-xg-xx
+ ${revision}
+
org.dromara
diff --git a/backend/ruoyi-admin/src/main/resources/application.yml b/backend/ruoyi-admin/src/main/resources/application.yml
index 2a2358ca..fb347bc4 100644
--- a/backend/ruoyi-admin/src/main/resources/application.yml
+++ b/backend/ruoyi-admin/src/main/resources/application.yml
@@ -120,6 +120,7 @@ security:
- /v3/api-docs/**
- /webjars/**
- /warm-flow-ui/config
+ - /system/dict/data/type/*
# 多租户配置
tenant:
diff --git a/backend/ruoyi-modules/pom.xml b/backend/ruoyi-modules/pom.xml
index c3b2b3a7..290bf1e5 100644
--- a/backend/ruoyi-modules/pom.xml
+++ b/backend/ruoyi-modules/pom.xml
@@ -20,6 +20,7 @@
ruoyi-aqbw
ruoyi-zsjy
ruoyi-xg
+ ruoyi-xg-xx
ruoyi-modules
diff --git a/backend/ruoyi-modules/ruoyi-hq/pom.xml b/backend/ruoyi-modules/ruoyi-hq/pom.xml
index a45e4998..8a4df5ac 100644
--- a/backend/ruoyi-modules/ruoyi-hq/pom.xml
+++ b/backend/ruoyi-modules/ruoyi-hq/pom.xml
@@ -104,6 +104,13 @@
ruoyi-workflow
+
+
+ org.dromara
+ ruoyi-xg-xx
+ ${revision}
+
+
diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
index 774f26a3..87185c94 100644
--- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
+++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
@@ -23,6 +23,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.common.web.core.BaseController;
+import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysDeptBo;
import org.dromara.system.domain.bo.SysPostBo;
import org.dromara.system.domain.bo.SysRoleBo;
@@ -85,7 +86,8 @@ public class SysUserController extends BaseController {
@SaCheckPermission("system:user:import")
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
- ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
+ ExcelResult result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class,
+ new SysUserImportListener(updateSupport));
return R.ok(result.getAnalysis());
}
@@ -126,7 +128,7 @@ public class SysUserController extends BaseController {
* @param userId 用户ID
*/
@SaCheckPermission("system:user:query")
- @GetMapping(value = {"/", "/{userId}"})
+ @GetMapping(value = { "/", "/{userId}" })
public R getInfo(@PathVariable(value = "userId", required = false) Long userId) {
SysUserInfoVo userInfoVo = new SysUserInfoVo();
if (ObjectUtil.isNotNull(userId)) {
@@ -145,7 +147,8 @@ public class SysUserController extends BaseController {
SysRoleBo roleBo = new SysRoleBo();
roleBo.setStatus(SystemConstants.NORMAL);
List roles = roleService.selectRoleList(roleBo);
- userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
+ userInfoVo
+ .setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
return R.ok(userInfoVo);
}
@@ -217,7 +220,7 @@ public class SysUserController extends BaseController {
@SaCheckPermission("system:user:query")
@GetMapping("/optionselect")
public R> optionselect(@RequestParam(required = false) Long[] userIds,
- @RequestParam(required = false) Long deptId) {
+ @RequestParam(required = false) Long deptId) {
return R.ok(userService.selectUserByIds(ArrayUtil.isEmpty(userIds) ? null : List.of(userIds), deptId));
}
@@ -260,7 +263,8 @@ public class SysUserController extends BaseController {
List roles = roleService.selectRolesAuthByUserId(userId);
SysUserInfoVo userInfoVo = new SysUserInfoVo();
userInfoVo.setUser(user);
- userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
+ userInfoVo
+ .setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
return R.ok(userInfoVo);
}
@@ -297,4 +301,14 @@ public class SysUserController extends BaseController {
return R.ok(userService.selectUserListByDept(deptId));
}
+ /**
+ * 根据权限标识获取用户列表
+ */
+ @SaCheckPermission("system:user:list")
+ @GetMapping("/list-by-permission")
+ public R> listUsersByPermission(
+ @RequestParam("permission") String permission,
+ @RequestParam(value = "tenantId", required = false) String tenantId) {
+ return R.ok(userService.selectUserListByPermission(permission, tenantId));
+ }
}
diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
index 46695aa4..a266b23b 100644
--- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
+++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@@ -20,104 +21,138 @@ import java.util.List;
*/
public interface SysUserMapper extends BaseMapperPlus {
- /**
- * 分页查询用户列表,并进行数据权限控制
- *
- * @param page 分页参数
- * @param queryWrapper 查询条件
- * @return 分页的用户信息
- */
- @DataPermission({
- @DataColumn(key = "deptName", value = "u.dept_id"),
- @DataColumn(key = "userName", value = "u.user_id")
- })
- Page selectPageUserList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ /**
+ * 分页查询用户列表,并进行数据权限控制
+ *
+ * @param page 分页参数
+ * @param queryWrapper 查询条件
+ * @return 分页的用户信息
+ */
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "u.dept_id"),
+ @DataColumn(key = "userName", value = "u.user_id")
+ })
+ Page selectPageUserList(@Param("page") Page page,
+ @Param(Constants.WRAPPER) Wrapper queryWrapper);
- /**
- * 查询用户列表,并进行数据权限控制
- *
- * @param queryWrapper 查询条件
- * @return 用户信息集合
- */
- @DataPermission({
- @DataColumn(key = "deptName", value = "dept_id"),
- @DataColumn(key = "userName", value = "user_id")
- })
- List selectUserList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
+ /**
+ * 查询用户列表,并进行数据权限控制
+ *
+ * @param queryWrapper 查询条件
+ * @return 用户信息集合
+ */
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "dept_id"),
+ @DataColumn(key = "userName", value = "user_id")
+ })
+ List selectUserList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
- /**
- * 根据条件分页查询用户列表
- *
- * @param queryWrapper 查询条件
- * @return 用户信息集合信息
- */
- @DataPermission({
- @DataColumn(key = "deptName", value = "d.dept_id"),
- @DataColumn(key = "userName", value = "u.user_id")
- })
- List selectUserExportList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
+ /**
+ * 根据条件分页查询用户列表
+ *
+ * @param queryWrapper 查询条件
+ * @return 用户信息集合信息
+ */
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "d.dept_id"),
+ @DataColumn(key = "userName", value = "u.user_id")
+ })
+ List selectUserExportList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
- /**
- * 根据条件分页查询已配用户角色列表
- *
- * @param queryWrapper 查询条件
- * @return 用户信息集合信息
- */
- @DataPermission({
- @DataColumn(key = "deptName", value = "d.dept_id"),
- @DataColumn(key = "userName", value = "u.user_id")
- })
- Page selectAllocatedList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ /**
+ * 根据条件分页查询已配用户角色列表
+ *
+ * @param queryWrapper 查询条件
+ * @return 用户信息集合信息
+ */
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "d.dept_id"),
+ @DataColumn(key = "userName", value = "u.user_id")
+ })
+ Page selectAllocatedList(@Param("page") Page page,
+ @Param(Constants.WRAPPER) Wrapper queryWrapper);
- /**
- * 根据条件分页查询未分配用户角色列表
- *
- * @param queryWrapper 查询条件
- * @return 用户信息集合信息
- */
- @DataPermission({
- @DataColumn(key = "deptName", value = "d.dept_id"),
- @DataColumn(key = "userName", value = "u.user_id")
- })
- Page selectUnallocatedList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ /**
+ * 根据条件分页查询未分配用户角色列表
+ *
+ * @param queryWrapper 查询条件
+ * @return 用户信息集合信息
+ */
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "d.dept_id"),
+ @DataColumn(key = "userName", value = "u.user_id")
+ })
+ Page selectUnallocatedList(@Param("page") Page page,
+ @Param(Constants.WRAPPER) Wrapper queryWrapper);
- /**
- * 根据用户ID统计用户数量
- *
- * @param userId 用户ID
- * @return 用户数量
- */
- @DataPermission({
- @DataColumn(key = "deptName", value = "dept_id"),
- @DataColumn(key = "userName", value = "user_id")
- })
- long countUserById(Long userId);
+ /**
+ * 根据用户ID统计用户数量
+ *
+ * @param userId 用户ID
+ * @return 用户数量
+ */
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "dept_id"),
+ @DataColumn(key = "userName", value = "user_id")
+ })
+ long countUserById(Long userId);
- /**
- * 根据条件更新用户数据
- *
- * @param user 要更新的用户实体
- * @param updateWrapper 更新条件封装器
- * @return 更新操作影响的行数
- */
- @Override
- @DataPermission({
- @DataColumn(key = "deptName", value = "dept_id"),
- @DataColumn(key = "userName", value = "user_id")
- })
- int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper updateWrapper);
+ /**
+ * 根据权限标识获取用户列表
+ *
+ * @param permission 权限标识
+ * @param tenantId 租户ID
+ * @return 用户列表
+ */
+ @Select("""
+ SELECT DISTINCT
+ su.*
+ FROM
+ sys_user su
+ INNER JOIN sys_user_role sur ON su.user_id = sur.user_id
+ INNER JOIN sys_role sr ON sur.role_id = sr.role_id
+ INNER JOIN sys_role_menu srm ON sr.role_id = srm.role_id
+ INNER JOIN sys_menu sm ON srm.menu_id = sm.menu_id
+ WHERE
+ su.del_flag = '0'
+ AND su.status = '0'
+ AND sr.del_flag = '0'
+ AND sr.status = '0'
+ AND sm.perms = #{permission}
+
+ AND su.tenant_id = #{tenantId}
+
+ ORDER BY
+ su.user_id
+ """)
+ List selectUserListByPermission(@Param("permission") String permission,
+ @Param("tenantId") String tenantId);
- /**
- * 根据用户ID更新用户数据
- *
- * @param user 要更新的用户实体
- * @return 更新操作影响的行数
- */
- @Override
- @DataPermission({
- @DataColumn(key = "deptName", value = "dept_id"),
- @DataColumn(key = "userName", value = "user_id")
- })
- int updateById(@Param(Constants.ENTITY) SysUser user);
+ /**
+ * 根据条件更新用户数据
+ *
+ * @param user 要更新的用户实体
+ * @param updateWrapper 更新条件封装器
+ * @return 更新操作影响的行数
+ */
+ @Override
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "dept_id"),
+ @DataColumn(key = "userName", value = "user_id")
+ })
+ int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper updateWrapper);
+
+ /**
+ * 根据用户ID更新用户数据
+ *
+ * @param user 要更新的用户实体
+ * @return 更新操作影响的行数
+ */
+ @Override
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "dept_id"),
+ @DataColumn(key = "userName", value = "user_id")
+ })
+ int updateById(@Param(Constants.ENTITY) SysUser user);
}
diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java
index 1fe55454..1c1a2bc8 100644
--- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java
+++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java
@@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo;
+import org.dromara.system.domain.SysUser;
import java.util.List;
@@ -15,7 +16,6 @@ import java.util.List;
*/
public interface ISysUserService {
-
/**
* 根据条件分页查询用户列表
*
@@ -228,4 +228,13 @@ public interface ISysUserService {
* @return 结果
*/
List selectUserListByDept(Long deptId);
+
+ /**
+ * 根据权限标识获取用户列表
+ *
+ * @param permission 权限标识
+ * @param tenantId 租户ID
+ * @return 用户列表
+ */
+ List selectUserListByPermission(String permission, String tenantId);
}
diff --git a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
index cc2cc88a..b7c463e4 100644
--- a/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
+++ b/backend/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
@@ -76,20 +76,21 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
Map params = user.getParams();
QueryWrapper wrapper = Wrappers.query();
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
- .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
- .in(StringUtils.isNotBlank(user.getUserIds()), "u.user_id", StringUtils.splitTo(user.getUserIds(), Convert::toLong))
- .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
- .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
- .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
- .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
- .between(params.get("beginTime") != null && params.get("endTime") != null,
- "u.create_time", params.get("beginTime"), params.get("endTime"))
- .and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
- List deptList = deptMapper.selectListByParentId(user.getDeptId());
- List ids = StreamUtils.toList(deptList, SysDept::getDeptId);
- ids.add(user.getDeptId());
- w.in("u.dept_id", ids);
- }).orderByAsc("u.user_id");
+ .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
+ .in(StringUtils.isNotBlank(user.getUserIds()), "u.user_id",
+ StringUtils.splitTo(user.getUserIds(), Convert::toLong))
+ .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
+ .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
+ .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
+ .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
+ .between(params.get("beginTime") != null && params.get("endTime") != null,
+ "u.create_time", params.get("beginTime"), params.get("endTime"))
+ .and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
+ List deptList = deptMapper.selectListByParentId(user.getDeptId());
+ List ids = StreamUtils.toList(deptList, SysDept::getDeptId);
+ ids.add(user.getDeptId());
+ w.in("u.dept_id", ids);
+ }).orderByAsc("u.user_id");
if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn("u.user_id", StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong));
}
@@ -106,11 +107,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
public TableDataInfo selectAllocatedList(SysUserBo user, PageQuery pageQuery) {
QueryWrapper wrapper = Wrappers.query();
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
- .eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
- .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
- .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
- .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
- .orderByAsc("u.user_id");
+ .eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
+ .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
+ .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
+ .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
+ .orderByAsc("u.user_id");
Page page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
@@ -126,11 +127,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
List userIds = userRoleMapper.selectUserIdsByRoleId(user.getRoleId());
QueryWrapper wrapper = Wrappers.query();
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
- .and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id"))
- .notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds)
- .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
- .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
- .orderByAsc("u.user_id");
+ .and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id"))
+ .notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds)
+ .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
+ .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
+ .orderByAsc("u.user_id");
Page page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
@@ -183,10 +184,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public List selectUserByIds(List userIds, Long deptId) {
return baseMapper.selectUserList(new LambdaQueryWrapper()
- .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName)
- .eq(SysUser::getStatus, SystemConstants.NORMAL)
- .eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId)
- .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
+ .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName)
+ .eq(SysUser::getStatus, SystemConstants.NORMAL)
+ .eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId)
+ .in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
}
/**
@@ -228,8 +229,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public boolean checkUserNameUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper()
- .eq(SysUser::getUserName, user.getUserName())
- .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
+ .eq(SysUser::getUserName, user.getUserName())
+ .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
@@ -241,8 +242,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public boolean checkPhoneUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper()
- .eq(SysUser::getPhonenumber, user.getPhonenumber())
- .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
+ .eq(SysUser::getPhonenumber, user.getPhonenumber())
+ .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
@@ -254,8 +255,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public boolean checkEmailUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper()
- .eq(SysUser::getEmail, user.getEmail())
- .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
+ .eq(SysUser::getEmail, user.getEmail())
+ .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
@@ -369,9 +370,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public int updateUserStatus(Long userId, String status) {
return baseMapper.update(null,
- new LambdaUpdateWrapper()
- .set(SysUser::getStatus, status)
- .eq(SysUser::getUserId, userId));
+ new LambdaUpdateWrapper()
+ .set(SysUser::getStatus, status)
+ .eq(SysUser::getUserId, userId));
}
/**
@@ -384,12 +385,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public int updateUserProfile(SysUserBo user) {
return baseMapper.update(null,
- new LambdaUpdateWrapper()
- .set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName())
- .set(SysUser::getPhonenumber, user.getPhonenumber())
- .set(SysUser::getEmail, user.getEmail())
- .set(SysUser::getSex, user.getSex())
- .eq(SysUser::getUserId, user.getUserId()));
+ new LambdaUpdateWrapper()
+ .set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName())
+ .set(SysUser::getPhonenumber, user.getPhonenumber())
+ .set(SysUser::getEmail, user.getEmail())
+ .set(SysUser::getSex, user.getSex())
+ .eq(SysUser::getUserId, user.getUserId()));
}
/**
@@ -402,9 +403,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public boolean updateUserAvatar(Long userId, Long avatar) {
return baseMapper.update(null,
- new LambdaUpdateWrapper()
- .set(SysUser::getAvatar, avatar)
- .eq(SysUser::getUserId, userId)) > 0;
+ new LambdaUpdateWrapper()
+ .set(SysUser::getAvatar, avatar)
+ .eq(SysUser::getUserId, userId)) > 0;
}
/**
@@ -417,9 +418,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public int resetUserPwd(Long userId, String password) {
return baseMapper.update(null,
- new LambdaUpdateWrapper()
- .set(SysUser::getPassword, password)
- .eq(SysUser::getUserId, userId));
+ new LambdaUpdateWrapper()
+ .set(SysUser::getPassword, password)
+ .eq(SysUser::getUserId, userId));
}
/**
@@ -443,7 +444,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
if (ArrayUtil.isNotEmpty(posts)) {
if (clear) {
// 删除用户与岗位关联
- userPostMapper.delete(new LambdaQueryWrapper().eq(SysUserPost::getUserId, user.getUserId()));
+ userPostMapper
+ .delete(new LambdaQueryWrapper().eq(SysUserPost::getUserId, user.getUserId()));
}
// 新增用户与岗位管理
List list = StreamUtils.toList(List.of(posts), postId -> {
@@ -471,7 +473,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
// 判断是否具有此角色的操作权限
List roles = roleMapper.selectRoleList(
- new QueryWrapper().in("r.role_id", roleList));
+ new QueryWrapper().in("r.role_id", roleList));
if (CollUtil.isEmpty(roles)) {
throw new ServiceException("没有权限访问角色的数据");
}
@@ -561,7 +563,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public String selectUserNameById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper()
- .select(SysUser::getUserName).eq(SysUser::getUserId, userId));
+ .select(SysUser::getUserName).eq(SysUser::getUserId, userId));
return ObjectUtils.notNullGetter(sysUser, SysUser::getUserName);
}
@@ -575,7 +577,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Cacheable(cacheNames = CacheNames.SYS_NICKNAME, key = "#userId")
public String selectNicknameById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper()
- .select(SysUser::getNickName).eq(SysUser::getUserId, userId));
+ .select(SysUser::getNickName).eq(SysUser::getUserId, userId));
return ObjectUtils.notNullGetter(sysUser, SysUser::getNickName);
}
@@ -606,7 +608,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public String selectPhonenumberById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper()
- .select(SysUser::getPhonenumber).eq(SysUser::getUserId, userId));
+ .select(SysUser::getPhonenumber).eq(SysUser::getUserId, userId));
return ObjectUtils.notNullGetter(sysUser, SysUser::getPhonenumber);
}
@@ -619,7 +621,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public String selectEmailById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper()
- .select(SysUser::getEmail).eq(SysUser::getUserId, userId));
+ .select(SysUser::getEmail).eq(SysUser::getUserId, userId));
return ObjectUtils.notNullGetter(sysUser, SysUser::getEmail);
}
@@ -635,9 +637,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return List.of();
}
List list = baseMapper.selectVoList(new LambdaQueryWrapper()
- .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber)
- .eq(SysUser::getStatus, SystemConstants.NORMAL)
- .in(SysUser::getUserId, userIds));
+ .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail,
+ SysUser::getPhonenumber)
+ .eq(SysUser::getStatus, SystemConstants.NORMAL)
+ .in(SysUser::getUserId, userIds));
return BeanUtil.copyToList(list, UserDTO.class);
}
@@ -653,7 +656,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return List.of();
}
List userRoles = userRoleMapper.selectList(
- new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds));
+ new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds));
return StreamUtils.toList(userRoles, SysUserRole::getUserId);
}
@@ -671,7 +674,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
// 通过角色ID获取用户角色信息
List userRoles = userRoleMapper.selectList(
- new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds));
+ new LambdaQueryWrapper().in(SysUserRole::getRoleId, roleIds));
// 获取用户ID列表
Set userIds = StreamUtils.toSet(userRoles, SysUserRole::getUserId);
@@ -691,9 +694,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return List.of();
}
List list = baseMapper.selectVoList(new LambdaQueryWrapper()
- .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber)
- .eq(SysUser::getStatus, SystemConstants.NORMAL)
- .in(SysUser::getDeptId, deptIds));
+ .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail,
+ SysUser::getPhonenumber)
+ .eq(SysUser::getStatus, SystemConstants.NORMAL)
+ .in(SysUser::getDeptId, deptIds));
return BeanUtil.copyToList(list, UserDTO.class);
}
@@ -711,7 +715,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
// 通过岗位ID获取用户岗位信息
List userPosts = userPostMapper.selectList(
- new LambdaQueryWrapper().in(SysUserPost::getPostId, postIds));
+ new LambdaQueryWrapper().in(SysUserPost::getPostId, postIds));
// 获取用户ID列表
Set userIds = StreamUtils.toSet(userPosts, SysUserPost::getUserId);
@@ -732,10 +736,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
return baseMapper.selectList(
new LambdaQueryWrapper()
- .select(SysUser::getUserId, SysUser::getNickName)
- .in(SysUser::getUserId, userIds)
- ).stream()
- .collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName));
+ .select(SysUser::getUserId, SysUser::getNickName)
+ .in(SysUser::getUserId, userIds))
+ .stream()
+ .collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName));
}
/**
@@ -751,10 +755,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
return roleMapper.selectList(
new LambdaQueryWrapper()
- .select(SysRole::getRoleId, SysRole::getRoleName)
- .in(SysRole::getRoleId, roleIds)
- ).stream()
- .collect(Collectors.toMap(SysRole::getRoleId, SysRole::getRoleName));
+ .select(SysRole::getRoleId, SysRole::getRoleName)
+ .in(SysRole::getRoleId, roleIds))
+ .stream()
+ .collect(Collectors.toMap(SysRole::getRoleId, SysRole::getRoleName));
}
/**
@@ -770,10 +774,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
return deptMapper.selectList(
new LambdaQueryWrapper()
- .select(SysDept::getDeptId, SysDept::getDeptName)
- .in(SysDept::getDeptId, deptIds)
- ).stream()
- .collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
+ .select(SysDept::getDeptId, SysDept::getDeptName)
+ .in(SysDept::getDeptId, deptIds))
+ .stream()
+ .collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
}
/**
@@ -789,10 +793,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
return postMapper.selectList(
new LambdaQueryWrapper()
- .select(SysPost::getPostId, SysPost::getPostName)
- .in(SysPost::getPostId, postIds)
- ).stream()
- .collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName));
+ .select(SysPost::getPostId, SysPost::getPostName)
+ .in(SysPost::getPostId, postIds))
+ .stream()
+ .collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName));
+ }
+
+ /**
+ * 根据权限标识获取用户列表
+ *
+ * @param permission 权限标识
+ * @param tenantId 租户ID
+ * @return 用户列表
+ */
+ @Override
+ public List selectUserListByPermission(String permission, String tenantId) {
+ return baseMapper.selectUserListByPermission(permission, tenantId);
}
}
diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/pom.xml b/backend/ruoyi-modules/ruoyi-xg-xx/pom.xml
new file mode 100644
index 00000000..fa2b914b
--- /dev/null
+++ b/backend/ruoyi-modules/ruoyi-xg-xx/pom.xml
@@ -0,0 +1,117 @@
+
+
+
+ ruoyi-modules
+ org.dromara
+ ${revision}
+
+ 4.0.0
+
+ ruoyi-xg-xx
+ ${revision}
+
+ 学工管理-学生信息管理模块
+
+
+
+
+
+
+ org.dromara
+ ruoyi-common-core
+
+
+
+ org.dromara
+ ruoyi-common-doc
+
+
+
+ org.dromara
+ ruoyi-common-mybatis
+
+
+
+ org.dromara
+ ruoyi-common-log
+
+
+
+ org.dromara
+ ruoyi-common-security
+
+
+
+ org.dromara
+ ruoyi-common-web
+
+
+
+ org.dromara
+ ruoyi-common-excel
+
+
+
+ org.dromara
+ ruoyi-common-idempotent
+
+
+
+ org.dromara
+ ruoyi-common-tenant
+
+
+
+ org.dromara
+ ruoyi-common-social
+
+
+
+ org.dromara
+ ruoyi-common-ratelimiter
+
+
+
+ org.dromara
+ ruoyi-common-mail
+
+
+
+ org.dromara
+ ruoyi-system
+
+
+
+ org.dromara
+ ruoyi-job
+
+
+
+
+ org.dromara
+ ruoyi-generator
+
+
+
+
+ org.dromara
+ ruoyi-demo
+
+
+
+
+ org.dromara
+ ruoyi-workflow
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
diff --git a/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassInfoController.java b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassInfoController.java
new file mode 100644
index 00000000..98f03b80
--- /dev/null
+++ b/backend/ruoyi-modules/ruoyi-xg-xx/src/main/java/org/dromara/xg/controller/XgClassInfoController.java
@@ -0,0 +1,205 @@
+package org.dromara.xg.controller;
+
+import java.util.List;
+import java.util.Map;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.xg.domain.vo.XgClassInfoVo;
+import org.dromara.xg.domain.bo.XgClassInfoBo;
+import org.dromara.xg.service.IXgClassInfoService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 班级信息Controller
+ *
+ * @author Cursor AI
+ * @date 2025-01-12
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/xg/classInfo")
+public class XgClassInfoController extends BaseController {
+
+ private final IXgClassInfoService classInfoService;
+
+ /**
+ * 查询班级信息列表
+ */
+ @SaCheckPermission("xg:classInfo:list")
+ @GetMapping("/list")
+ public TableDataInfo list(XgClassInfoBo bo, PageQuery pageQuery) {
+ return classInfoService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出班级信息列表
+ */
+ @SaCheckPermission("xg:classInfo:export")
+ @Log(title = "班级信息", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(XgClassInfoBo bo, HttpServletResponse response) {
+ List list = classInfoService.queryList(bo);
+ ExcelUtil.exportExcel(list, "班级信息", XgClassInfoVo.class, response);
+ }
+
+ /**
+ * 获取班级选项列表(用于下拉框)
+ */
+ @SaCheckPermission("xg:classInfo:list")
+ @GetMapping("/options")
+ public R>> getClassOptions() {
+ return R.ok(classInfoService.queryClassOptions());
+ }
+
+ /**
+ * 获取辅导员选项列表(用于下拉框)
+ */
+ @SaCheckPermission("xg:classInfo:list")
+ @GetMapping("/counselorOptions")
+ public R>> getCounselorOptions(@RequestParam(required = false) String collegeCode) {
+ return R.ok(classInfoService.queryCounselorOptions(collegeCode));
+ }
+
+ /**
+ * 获取班主任选项列表(用于下拉框)
+ */
+ @SaCheckPermission("xg:classInfo:list")
+ @GetMapping("/classTeacherOptions")
+ public R>> getClassTeacherOptions(@RequestParam(required = false) String collegeCode) {
+ return R.ok(classInfoService.queryClassTeacherOptions(collegeCode));
+ }
+
+ /**
+ * 获取班级信息总体统计
+ */
+ @SaCheckPermission("xg:classInfo:list")
+ @GetMapping("/statistics")
+ public R