diff --git a/im-admin/.idea/encodings.xml b/im-admin/.idea/encodings.xml index 39f61b7..23c79e3 100644 --- a/im-admin/.idea/encodings.xml +++ b/im-admin/.idea/encodings.xml @@ -49,8 +49,6 @@ - - diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/constant/ImConstant.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/constant/ImConstant.java new file mode 100644 index 0000000..c65847b --- /dev/null +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/constant/ImConstant.java @@ -0,0 +1,14 @@ +package org.dromara.system.controller.constant; + +/** + * @author: Blue + * @date: 2024-07-20 + * @version: 1.0 + */ +public class ImConstant { + + /** + * IM数据源 + */ + public final static String DS_IM_PLATFORM = "platform"; +} diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java index 36104d6..8bdbaa9 100644 --- a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java +++ b/im-admin/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; @@ -55,6 +56,8 @@ public class SysUserController extends BaseController { private final ISysDeptService deptService; private final ISysTenantService tenantService; + private final IImAgentAdminService imAgentService; + /** * 获取用户列表 */ @@ -170,7 +173,22 @@ public class SysUserController extends BaseController { } } user.setPassword(BCrypt.hashpw(user.getPassword())); - return toAjax(userService.insertUser(user)); + int i = userService.insertUser(user); + + if(i > 0){ + SysUser newUser = userService.getUserByUserName(user.getUserName()); + //获取该用户权限,判断是否拥有agentAdmin权限 + List permissions = userService.getPermissionsByUserId(newUser.getUserId()); + + //判断该用户是否拥有agentAdmin权限 + if(permissions.contains("agentAdmin")){ + //插入代理端数据 + int insertAgent = imAgentService.insertAgentData(newUser.getUserId(), newUser.getUserName()); + return toAjax(insertAgent); + } + } + + return toAjax(i); } /** diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/ImAgentAdmin.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/ImAgentAdmin.java new file mode 100644 index 0000000..10d93f9 --- /dev/null +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/ImAgentAdmin.java @@ -0,0 +1,55 @@ +package org.dromara.system.domain; + +import com.fhs.core.trans.vo.TransPojo; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; + +/** + * 代理关联对象 im_agent + * + * @author Blue + * @date 2026-04-07 + */ +@Data +@TableName("im_agent") +public class ImAgentAdmin implements TransPojo { + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 管理端ID + */ + private Long sysId; + + /** + * 代理用户名 + */ + private String agentName; + + /** + * 唯一token + */ + private String uniqueToken; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新时间 + */ + private Date updatedTime; + + +} diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/ImAgentAdminBo.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/ImAgentAdminBo.java new file mode 100644 index 0000000..a4e829b --- /dev/null +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/ImAgentAdminBo.java @@ -0,0 +1,66 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.ImAgentAdmin; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.util.Date; + +/** + * 代理关联业务对象 im_agent + * + * @author Blue + * @date 2026-04-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ImAgentAdminBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 管理端ID + */ + @NotNull(message = "管理端ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long sysId; + + /** + * 代理用户名 + */ + @NotBlank(message = "代理用户名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String agentName; + + /** + * 唯一token + */ + @NotBlank(message = "唯一token不能为空", groups = { AddGroup.class, EditGroup.class }) + private String uniqueToken; + + /** + * 备注 + */ + @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + /** + * 创建时间 + */ + @NotNull(message = "创建时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date createdTime; + + /** + * 更新时间 + */ + @NotNull(message = "更新时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date updatedTime; + + +} diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ImAgentAdminVo.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ImAgentAdminVo.java new file mode 100644 index 0000000..d87b5c3 --- /dev/null +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ImAgentAdminVo.java @@ -0,0 +1,72 @@ +package org.dromara.system.domain.vo; + +import java.util.Date; + +import org.dromara.system.domain.ImAgentAdmin; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 代理关联视图对象 im_agent + * + * @author Blue + * @date 2026-04-07 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ImAgentAdmin.class) +public class ImAgentAdminVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 管理端ID + */ + @ExcelProperty(value = "管理端ID") + private Long sysId; + + /** + * 代理用户名 + */ + @ExcelProperty(value = "代理用户名") + private String agentName; + + /** + * 唯一token + */ + @ExcelProperty(value = "唯一token") + private String uniqueToken; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createdTime; + + /** + * 更新时间 + */ + @ExcelProperty(value = "更新时间") + private Date updatedTime; + + +} diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/ImAgentAdminMapper.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/ImAgentAdminMapper.java new file mode 100644 index 0000000..f7bca3f --- /dev/null +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/ImAgentAdminMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.ImAgentAdmin; +import org.dromara.system.domain.vo.ImAgentAdminVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 代理关联Mapper接口 + * + * @author Blue + * @date 2026-04-07 + */ +public interface ImAgentAdminMapper extends BaseMapperPlus { + +} diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java new file mode 100644 index 0000000..8e11d47 --- /dev/null +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/IImAgentAdminService.java @@ -0,0 +1,76 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.vo.ImAgentAdminVo; +import org.dromara.system.domain.bo.ImAgentAdminBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 代理关联Service接口 + * + * @author Blue + * @date 2026-04-07 + */ +public interface IImAgentAdminService { + + /** + * 查询代理关联 + * + * @param id 主键 + * @return 代理关联 + */ + ImAgentAdminVo queryById(Long id); + + /** + * 分页查询代理关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 代理关联分页列表 + */ + TableDataInfo queryPageList(ImAgentAdminBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的代理关联列表 + * + * @param bo 查询条件 + * @return 代理关联列表 + */ + List queryList(ImAgentAdminBo bo); + + /** + * 新增代理关联 + * + * @param bo 代理关联 + * @return 是否新增成功 + */ + Boolean insertByBo(ImAgentAdminBo bo); + + /** + * 修改代理关联 + * + * @param bo 代理关联 + * @return 是否修改成功 + */ + Boolean updateByBo(ImAgentAdminBo bo); + + /** + * 校验并批量删除代理关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 插入代理数据 + * + * @param userId 用户id + * @return 插入数量 + */ + int insertAgentData(Long userId,String agentName); +} diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index c006b26..e1deb77 100644 --- a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -2,6 +2,7 @@ package org.dromara.system.service; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.system.domain.SysUser; import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserVo; @@ -219,4 +220,8 @@ public interface ISysUserService { * @return 结果 */ List selectUserListByDept(Long deptId); + + SysUser getUserByUserName(String userName); + + List getPermissionsByUserId(Long userId); } diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java new file mode 100644 index 0000000..1e38315 --- /dev/null +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/ImAgentAdminServiceImpl.java @@ -0,0 +1,149 @@ +package org.dromara.system.service.impl; + +import cn.hutool.core.util.RandomUtil; +import com.baomidou.dynamic.datasource.annotation.DS; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.system.controller.constant.ImConstant; +import org.dromara.system.domain.ImAgentAdmin; +import org.dromara.system.domain.bo.ImAgentAdminBo; +import org.dromara.system.domain.vo.ImAgentAdminVo; +import org.springframework.stereotype.Service; +import org.dromara.system.mapper.ImAgentAdminMapper; +import org.dromara.system.service.IImAgentAdminService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 代理关联Service业务层处理 + * + * @author Blue + * @date 2026-04-07 + */ +@RequiredArgsConstructor +@Service +@DS(ImConstant.DS_IM_PLATFORM) +public class ImAgentAdminServiceImpl implements IImAgentAdminService { + + private final ImAgentAdminMapper baseMapper; + + /** + * 查询代理关联 + * + * @param id 主键 + * @return 代理关联 + */ + @Override + public ImAgentAdminVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询代理关联列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 代理关联分页列表 + */ + @Override + public TableDataInfo queryPageList(ImAgentAdminBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的代理关联列表 + * + * @param bo 查询条件 + * @return 代理关联列表 + */ + @Override + public List queryList(ImAgentAdminBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(ImAgentAdminBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getSysId() != null, ImAgentAdmin::getSysId, bo.getSysId()); + lqw.like(StringUtils.isNotBlank(bo.getAgentName()), ImAgentAdmin::getAgentName, bo.getAgentName()); + lqw.eq(StringUtils.isNotBlank(bo.getUniqueToken()), ImAgentAdmin::getUniqueToken, bo.getUniqueToken()); + lqw.eq(bo.getCreatedTime() != null, ImAgentAdmin::getCreatedTime, bo.getCreatedTime()); + lqw.eq(bo.getUpdatedTime() != null, ImAgentAdmin::getUpdatedTime, bo.getUpdatedTime()); + return lqw; + } + + /** + * 新增代理关联 + * + * @param bo 代理关联 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ImAgentAdminBo bo) { + ImAgentAdmin add = MapstructUtils.convert(bo, ImAgentAdmin.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改代理关联 + * + * @param bo 代理关联 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ImAgentAdminBo bo) { + ImAgentAdmin update = MapstructUtils.convert(bo, ImAgentAdmin.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ImAgentAdmin entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除代理关联信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public int insertAgentData(Long userId,String agentName) { + ImAgentAdmin agent = new ImAgentAdmin(); + agent.setSysId(userId); + agent.setAgentName(agentName); + + //随机在1-9与26个字母中生成18位的随机数设置为token + agent.setUniqueToken(RandomUtil.randomString(18)); + + return baseMapper.insert(agent); + } +} diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index 9643bcd..5af4546 100644 --- a/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -39,10 +39,7 @@ import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * 用户 业务层处理 @@ -557,6 +554,28 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return baseMapper.selectVoList(lqw); } + @Override + public SysUser getUserByUserName(String userName) { + return baseMapper.selectOne(new LambdaQueryWrapper() + .eq(SysUser::getUserName, userName)); + } + + @Override + public List getPermissionsByUserId(Long userId) { + List permissions = new ArrayList<>(); + List userRoles = userRoleMapper.selectList(new LambdaQueryWrapper() + .eq(SysUserRole::getUserId, userId)); + if(!userRoles.isEmpty()){ + for(SysUserRole userRole : userRoles){ + SysRoleVo role = roleMapper.selectRoleById(userRole.getRoleId()); + if(!ObjectUtil.isNull(role)){ + permissions.add(role.getRoleKey()); + } + } + } + return permissions; + } + /** * 通过用户ID查询用户账户 * diff --git a/im-admin/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ImAgentAdminMapper.xml b/im-admin/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ImAgentAdminMapper.xml new file mode 100644 index 0000000..7bab0ad --- /dev/null +++ b/im-admin/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/ImAgentAdminMapper.xml @@ -0,0 +1,7 @@ + + + + +