Przeglądaj źródła

add:给医院添加管理员用户获取连接存储管理员信息

wangzl 6 miesięcy temu
rodzic
commit
cfa139346c

+ 34 - 15
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/controller/SysTenantController.java

@@ -1,28 +1,26 @@
 package cn.tr.module.sys.tenant.controller;
 
-import cn.tr.module.sys.tenant.dto.SysTenantAddDTO;
-import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.tr.core.annotation.TenantIgnore;
 import cn.tr.core.enums.CreateEnum;
+import cn.tr.core.pojo.CommonResult;
+import cn.tr.core.validation.Insert;
+import cn.tr.core.validation.Update;
 import cn.tr.module.api.sys.log.annotation.OperateLog;
+import cn.tr.module.sys.tenant.dto.*;
+import cn.tr.module.sys.tenant.service.ISysTenantService;
+import cn.tr.plugin.mybatis.base.BaseController;
 import cn.tr.plugin.security.context.LoginUserContextHolder;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.tr.core.validation.Insert;
-import cn.tr.core.validation.Update;
-import cn.tr.core.pojo.CommonResult;
-import lombok.AllArgsConstructor;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RestController;
-import cn.tr.module.sys.tenant.service.ISysTenantService;
-import cn.tr.module.sys.tenant.dto.SysTenantQueryDTO;
-import java.util.*;
-import cn.tr.plugin.mybatis.base.BaseController;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.Collection;
+import java.util.List;
 /**
  * 租户列表控制器
  *
@@ -88,4 +86,25 @@ public class SysTenantController extends BaseController{
     public CommonResult<SysTenantCommonDTO> selectList() {
         return CommonResult.success(sysTenantService.selectSysTenantById(LoginUserContextHolder.getUser().getTenantId()));
     }
+    @ApiOperationSupport(author = "wangzl",order = 7)
+    @ApiOperation(value="生成添加管理员链接",notes = "权限: 无")
+    @GetMapping("/generate/{tentId}")
+    public CommonResult<SysAdminAddCacheDTO> generateAddAdmin(@PathVariable String tentId) {
+        return CommonResult.success(sysTenantService.generateAddAdmin(tentId));
+    }
+    @ApiOperationSupport(author = "wangzl",order = 8)
+    @ApiOperation(value="根据医院ID获取缓存信息",notes = "权限: 无")
+    @GetMapping("/getCache/{tentId}")
+    public CommonResult<SysAdminAddCacheDTO> getCache(@PathVariable String tentId) {
+        return CommonResult.success(sysTenantService.getCache(tentId));
+    }
+    @ApiOperationSupport(author = "wangzl",order = 7)
+    @ApiOperation(value="通过邀请连接存储管理员信息",notes = "权限: 无")
+    @PostMapping("/save/admin")
+    @SaIgnore
+    @TenantIgnore
+    public CommonResult<Boolean> saveAdmin(@RequestBody@Validated(Insert.class) SysAdminAddDTO adminAddDTO) {
+        return CommonResult.success(sysTenantService.saveAdmin(adminAddDTO));
+    }
+
 }

+ 38 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/dto/SysAdminAddCacheDTO.java

@@ -0,0 +1,38 @@
+package cn.tr.module.sys.tenant.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author wangzl
+ * @description: 租户添加管理员缓存对象
+ * @date 2025/6/24 10:00
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("租户添加管理员缓存对象")
+public class SysAdminAddCacheDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "医院Id" )
+    private String tenantId;
+
+    @ApiModelProperty(value = "医院名称" )
+    private String name;
+
+    @ApiModelProperty(value = "生成时间")
+    private Date generateTime;
+
+    @ApiModelProperty(value = "固定失效时间")
+    private Long expireTime  = 604800L;
+
+
+}

+ 58 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/dto/SysAdminAddDTO.java

@@ -0,0 +1,58 @@
+package cn.tr.module.sys.tenant.dto;
+
+import cn.tr.core.validation.Insert;
+import cn.tr.module.sys.user.enums.UserStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author wangzl
+ * @description: 管理员添加实体
+ * @date 2025/6/24 11:27
+ */
+@Data
+@ToString
+@ApiModel("管理员添加实体")
+public class SysAdminAddDTO {
+
+    @ApiModelProperty(value = "密码", required = true)
+    @NotBlank(message = "密码不能为空", groups = {Insert.class})
+    @Length(min = 6, max = 16, message = "密码长度在6~16之间", groups = {Insert.class})
+    private String password;
+
+    @ApiModelProperty("医院ID")
+    @NotBlank(message = "医院ID不能为空", groups = {Insert.class})
+    private String tenantId;
+
+    @ApiModelProperty("手机号")
+    @NotBlank(message = "手机号不能为空", groups = {Insert.class})
+    private String phone;
+
+    @ApiModelProperty("手机号校验码")
+    @NotBlank(message = "手机号校验码不能为空", groups = {Insert.class})
+    private String smsCode;
+
+    @ApiModelProperty("昵称")
+    private String nickname;
+
+    @ApiModelProperty("性别")
+    private String gender;
+
+    @ApiModelProperty("邮箱地址")
+    private String email;
+
+    @ApiModelProperty("出生日期")
+    private Date birthday;
+
+    @ApiModelProperty("用户头像")
+    private String avatar;
+
+}

+ 21 - 3
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/ISysTenantService.java

@@ -2,9 +2,7 @@ package cn.tr.module.sys.tenant.service;
 
 import cn.hutool.core.util.StrUtil;
 import cn.tr.core.tenant.TenantContextHolder;
-import cn.tr.module.sys.tenant.dto.SysTenantAddDTO;
-import cn.tr.module.sys.tenant.dto.SysTenantQueryDTO;
-import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
+import cn.tr.module.sys.tenant.dto.*;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
 
 import java.util.Collection;
@@ -55,6 +53,26 @@ public interface ISysTenantService {
      * @return 删除数量
      */
     int removeSysTenantByIds(Collection<String> ids);
+
+    /**
+     * 生成添加管理员链接
+     * @param tenantId
+     * @return
+     */
+    SysAdminAddCacheDTO generateAddAdmin(String tenantId);
+    /**
+     * 获取缓存信息
+     * @param tenantId
+     * @return
+     */
+    SysAdminAddCacheDTO getCache(String tenantId);
+
+    /**
+     * 保存管理员信息
+     * @param adminAddDTO
+     * @return
+     */
+    boolean   saveAdmin(SysAdminAddDTO adminAddDTO);
     /**
      * 获取当前租户的菜单id
      * @return

+ 133 - 38
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantServiceImpl.java

@@ -2,28 +2,38 @@ package cn.tr.module.sys.tenant.service.impl;
 
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.comparator.CompareUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.tr.core.annotation.TenantIgnore;
+import cn.tr.core.enums.CreateEnum;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.tenant.TenantContextHolder;
 import cn.tr.core.tenant.TenantUtils;
+import cn.tr.core.utils.PswUtils;
 import cn.tr.module.sys.config.SysConfigManager;
+import cn.tr.module.sys.tenant.dto.*;
 import cn.tr.module.sys.tenant.mapper.SysTenantMapper;
-import cn.tr.module.sys.tenant.dto.SysTenantAddDTO;
-import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
-import cn.tr.module.sys.tenant.dto.SysTenantQueryDTO;
+import cn.tr.module.sys.tenant.po.SysTenantPO;
+import cn.tr.module.sys.tenant.repository.SysTenantRepository;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageMenuService;
+import cn.tr.module.sys.tenant.service.ISysTenantService;
+import cn.tr.module.sys.tenant.util.CacheUtil;
 import cn.tr.module.sys.user.dto.*;
-import cn.tr.core.enums.CreateEnum;
 import cn.tr.module.sys.user.enums.UserStatusEnum;
-import cn.tr.module.sys.tenant.po.SysTenantPO;
-import cn.tr.module.sys.tenant.repository.SysTenantRepository;
-import cn.tr.module.sys.user.provider.SysTenantApiProvider;
+import cn.tr.module.sys.user.mapper.SysUserMapper;
+import cn.tr.module.sys.user.po.SysRolePO;
+import cn.tr.module.sys.user.po.SysUserPO;
+import cn.tr.module.sys.user.po.SysUserRolePO;
+import cn.tr.module.sys.user.po.SysUserTenantPO;
+import cn.tr.module.sys.user.repository.SysRoleRepository;
+import cn.tr.module.sys.user.repository.SysUserRepository;
+import cn.tr.module.sys.user.repository.SysUserRoleRepository;
+import cn.tr.module.sys.user.repository.SysUserTenantRepository;
 import cn.tr.module.sys.user.service.*;
-import cn.tr.module.sys.tenant.service.ISysTenantService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -75,6 +85,18 @@ public class SysTenantServiceImpl implements ISysTenantService {
     @Lazy
     private ISysTenantPackageMenuService tenantPackageMenuService;
 
+    @Autowired
+    private CacheUtil cacheUtil;
+
+    @Autowired
+    private SysUserRepository sysUserRepository;
+    @Autowired
+    private SysRoleRepository sysRoleRepository;
+    @Autowired
+    private SysUserRoleRepository sysUserRoleRepository;
+    @Autowired
+    private SysUserTenantRepository sysUserTenantRepository;
+
     @Override
     @TenantIgnore
     public List<SysTenantCommonDTO> selectSysTenantList(SysTenantQueryDTO query) {
@@ -93,7 +115,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
     public boolean updateSysTenantById(SysTenantCommonDTO source) {
         validate();
         validateSource(source);
-        return tenantRepository.updateById(SysTenantMapper.INSTANCE.toPO(source))!=0;
+        return tenantRepository.updateById(SysTenantMapper.INSTANCE.toPO(source)) != 0;
     }
 
     @Override
@@ -101,29 +123,29 @@ public class SysTenantServiceImpl implements ISysTenantService {
     public boolean insertSysTenant(SysTenantAddDTO source) {
         validate();
         validateSource(source);
-        String orgId= IdWorker.getIdStr();
-        String userId= IdWorker.getIdStr();
-        String roleId= IdWorker.getIdStr();
-        String portalId= IdWorker.getIdStr();
+        String orgId = IdWorker.getIdStr();
+        String userId = IdWorker.getIdStr();
+        String roleId = IdWorker.getIdStr();
+        String portalId = IdWorker.getIdStr();
         SysTenantPO tenant = SysTenantMapper.INSTANCE.toPO(source);
         tenant.setTenantUserId(userId);
         boolean result = tenantRepository.insert(tenant) != 0;
-        if(!result){
+        if (!result) {
             return false;
         }
         String tenantId = tenant.getId();
-        TenantUtils.execute(tenantId,()->{
+        TenantUtils.execute(tenantId, () -> {
             //创建门面
             portalService.insertInnerSysPortal(buildPortal(portalId));
             //创建部门
-            orgService.insertSysOrg(buildOrg(orgId,source.getName()));
+            orgService.insertSysOrg(buildOrg(orgId, source.getName()));
             //创建角色
             roleService.insertInnerSysRole(buildRole(roleId));
             //创建租户用户
-            userService.insertSysUser(buildUser(userId,portalId,roleId,orgId,source.
-                    getUsername(),configManager.getCurrent().getDefaultPsw(),source.getName()));
+            userService.insertSysUser(buildUser(userId, portalId, roleId, orgId, source.
+                    getUsername(), configManager.getCurrent().getDefaultPsw(), source.getName()));
             //关联用户和门户
-            userPortalService.assignUserPortal(userId,Collections.singleton(portalId));
+            userPortalService.assignUserPortal(userId, Collections.singleton(portalId));
         });
         return result;
     }
@@ -140,45 +162,118 @@ public class SysTenantServiceImpl implements ISysTenantService {
 
     @Override
     public int removeSysTenantByIds(Collection<String> ids) {
-        if(CollectionUtil.isEmpty(ids)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"请选择要删除的数据");
+        if (CollectionUtil.isEmpty(ids)) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "请选择要删除的数据");
         }
         String tenantId = TenantContextHolder.getTenantId();
         List<SysTenantPO> tenants = tenantRepository.selectBatchIds(ids);
         for (SysTenantPO tenant : tenants) {
             if (StrUtil.equals(tenant.getType(), CreateEnum.sys.name())) {
-                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"无法对系统租户进行操作");
+                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "无法对系统租户进行操作");
             }
-            if(StrUtil.equals(tenantId,tenant.getId())){
-                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"无法删除自身的租户信息");
+            if (StrUtil.equals(tenantId, tenant.getId())) {
+                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "无法删除自身的租户信息");
             }
         }
         return tenantRepository.deleteBatchIds(ids);
     }
 
+    @Override
+    public SysAdminAddCacheDTO generateAddAdmin(String tenantId) {
+        if (StrUtil.isEmpty(tenantId)) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "请传入医院ID");
+        }
+        SysTenantPO sysTenantPO = tenantRepository.selectById(tenantId);
+        if (ObjectUtil.isNull(sysTenantPO)) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "该医院不存在");
+        }
+        if (StrUtil.isNotEmpty(sysTenantPO.getTenantUserId())) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "该医院已经存在管理员,无须添加");
+        }
+        //增加缓存
+        return cacheUtil.addAdminCache(604800L, tenantId, sysTenantPO.getName());
+    }
+
+    @Override
+    public SysAdminAddCacheDTO getCache(String tenantId) {
+        return cacheUtil.getAdminCache(tenantId);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveAdmin(SysAdminAddDTO adminAddDTO) {
+        //校验失效
+        SysAdminAddCacheDTO adminCache = cacheUtil.getAdminCache(adminAddDTO.getTenantId());
+        //缓存对象内容为空即缓存不存在
+        if (StrUtil.isBlank(adminCache.getTenantId())) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "缓存已失效,请重新生成链接添加管理员");
+        }
+        if(CompareUtil.compare(adminCache.getTenantId(), adminCache.getTenantId(), true)!=0){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "医院ID跟缓存中的不匹配");
+        }
+        //校验手机code码正确
+        String phoneCode = cacheUtil.getPhoneCode();
+        if (!StrUtil.equals(phoneCode, adminAddDTO.getSmsCode())) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "手机验证码错误");
+        }
+        //查询手机号是否已经存储了如果已经存储使用已经存储的用户
+        SysUserPO sysUserPO = sysUserRepository.selectOne(new LambdaQueryWrapper<SysUserPO>()
+                .eq(SysUserPO::getPhone, adminAddDTO.getPhone())
+                .last("limit 1"));
+        if(Objects.isNull(sysUserPO)){
+            sysUserPO = SysUserMapper.INSTANCE.addAdminDTOtoPO(adminAddDTO);
+            sysUserPO.setUsername(adminAddDTO.getPhone());
+            sysUserPO.setPassword(PswUtils.encryptPassword(adminAddDTO.getPassword()));
+            sysUserPO.setStatus(UserStatusEnum.normal.getValue());
+            sysUserPO.setDeleted(Boolean.FALSE);
+            sysUserRepository.insert(sysUserPO);
+        }
+        SysUserTenantPO sysUserTenantPO = new SysUserTenantPO();
+        sysUserTenantPO.setUserId(sysUserPO.getId());
+        sysUserTenantPO.setTenantId(adminAddDTO.getTenantId());
+        sysUserTenantRepository.insert(sysUserTenantPO);
+        SysRolePO sysRolePO = sysRoleRepository.selectOne(new LambdaQueryWrapper<SysRolePO>()
+                .eq(SysRolePO::getTenantId, adminAddDTO.getTenantId())
+                .eq(SysRolePO::getCode, "admin")
+                .last("limit 1"));
+        if(ObjectUtil.isNull(sysRolePO)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "该医院没有角色,请先添加角色");
+        }
+        SysUserRolePO sysUserRolePO = new SysUserRolePO();
+        sysUserRolePO.setUserId(sysUserPO.getId());
+        sysUserRolePO.setRoleId(sysRolePO.getId());
+        sysUserRolePO.setTenantId(adminAddDTO.getTenantId());
+        //回写管理员ID到医院包
+        tenantRepository.update(null, new LambdaUpdateWrapper<SysTenantPO>()
+                .set(SysTenantPO::getTenantUserId, sysUserPO.getId())
+                .eq(SysTenantPO::getId, adminAddDTO.getTenantId()));
+        return sysUserRoleRepository.insert(sysUserRolePO) != 0;
+    }
+
     @Override
     public Set<SysMenuDTO> getTenantMenus(String tenantId) {
         SysTenantPO tenant = tenantRepository.selectById(tenantId);
-        return  tenantPackageMenuService.findMenuIdByPackageId(tenant.getPackageId());
+        return tenantPackageMenuService.findMenuIdByPackageId(tenant.getPackageId());
     }
 
-    private void validateSource(SysTenantAddDTO source){
+    private void validateSource(SysTenantAddDTO source) {
         SysTenantPO sysTenantPO = tenantRepository.selectOne(new LambdaQueryWrapper<SysTenantPO>()
                 .eq(SysTenantPO::getName, source.getName()));
-        if(ObjectUtil.isNotNull(sysTenantPO)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"租户名称不能重复");
+        if (ObjectUtil.isNotNull(sysTenantPO)) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "租户名称不能重复");
         }
     }
 
-    private void validateSource(SysTenantCommonDTO source){
+    private void validateSource(SysTenantCommonDTO source) {
         SysTenantPO sysTenantPO = tenantRepository.selectOne(new LambdaQueryWrapper<SysTenantPO>()
-                .ne(StrUtil.isNotEmpty(source.getId()),SysTenantPO::getId,source.getId())
+                .ne(StrUtil.isNotEmpty(source.getId()), SysTenantPO::getId, source.getId())
                 .eq(SysTenantPO::getName, source.getName()));
-        if(ObjectUtil.isNotNull(sysTenantPO)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"租户名称不能重复");
+        if (ObjectUtil.isNotNull(sysTenantPO)) {
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001, "租户名称不能重复");
         }
     }
-    private SysPortalDTO buildPortal(String portalId){
+
+    private SysPortalDTO buildPortal(String portalId) {
         SysPortalDTO org = new SysPortalDTO();
         org.setId(portalId);
         org.setCode("admin");
@@ -187,7 +282,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
         return org;
     }
 
-    private SysOrgDTO buildOrg(String orgId,String tenantName){
+    private SysOrgDTO buildOrg(String orgId, String tenantName) {
         SysOrgDTO org = new SysOrgDTO();
         org.setId(orgId);
         org.setParentId("0");
@@ -197,7 +292,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
         return org;
     }
 
-    private SysRoleDTO buildRole(String roleId){
+    private SysRoleDTO buildRole(String roleId) {
         SysRoleDTO role = new SysRoleDTO();
         role.setId(roleId);
         role.setDataScope("1");
@@ -210,7 +305,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
         return role;
     }
 
-    private SysUserDTO buildUser(String userId,String portalId,String roleId,String orgId,String username,String password,String tenantName){
+    private SysUserDTO buildUser(String userId, String portalId, String roleId, String orgId, String username, String password, String tenantName) {
         SysUserDTO user = new SysUserDTO();
         user.setId(userId);
         user.setOrgId(orgId);
@@ -223,8 +318,8 @@ public class SysTenantServiceImpl implements ISysTenantService {
         return user;
     }
 
-    private void validate(){
-        if(!Boolean.TRUE.equals(tenantEnable)){
+    private void validate() {
+        if (!Boolean.TRUE.equals(tenantEnable)) {
             throw new UnsupportedOperationException("多租户功能已关闭");
         }
     }

+ 38 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/util/CacheUtil.java

@@ -0,0 +1,38 @@
+package cn.tr.module.sys.tenant.util;
+
+import cn.tr.module.sys.tenant.dto.SysAdminAddCacheDTO;
+import org.springframework.cache.annotation.CachePut;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @author wangzl
+ * @description: TODO
+ * @date 2025/6/24 11:20
+ */
+@Component
+public class CacheUtil {
+    @CachePut(value = "global:url:admin#604800",key = "#tenantId")
+    public SysAdminAddCacheDTO addAdminCache(Long time, String tenantId, String name){
+       return SysAdminAddCacheDTO.builder()
+                .tenantId(tenantId)
+                .name(name)
+                .generateTime(new Date())
+                .expireTime(time)
+                .build();
+    }
+
+    @Cacheable(value = "global:url:admin#604800",key = "#tenantId")
+    public SysAdminAddCacheDTO getAdminCache(String tenantId){
+        return new SysAdminAddCacheDTO();
+    }
+    public void putPhoneCode(){
+
+    }
+
+    public String getPhoneCode(){
+        return "123";
+    }
+}

+ 3 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/mapper/SysUserMapper.java

@@ -1,5 +1,6 @@
 package cn.tr.module.sys.user.mapper;
 
+import cn.tr.module.sys.tenant.dto.SysAdminAddDTO;
 import cn.tr.module.sys.user.dto.SysUserEditDTO;
 import cn.tr.module.sys.user.dto.SysUserExportDTO;
 import cn.tr.module.sys.user.dto.SysUserSmallDTO;
@@ -51,4 +52,6 @@ public interface SysUserMapper {
     SysUserDTO ExportDTOConvertDTO(SysUserExportDTO obj);
 
     List<cn.tr.module.api.sys.user.SysUserSmallDTO> poConverToUserSmallDTOList(List<SysUserPO> source);
+
+     SysUserPO addAdminDTOtoPO(SysAdminAddDTO  source);
 }

+ 2 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysUserRolePO.java

@@ -1,6 +1,7 @@
 package cn.tr.module.sys.user.po;
 
 import cn.tr.core.annotation.Comment;
+import cn.tr.plugin.mybatis.pojo.TenantPO;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -13,7 +14,7 @@ import lombok.Data;
  */
 @Data
 @TableName("sys_user_role")
-public class SysUserRolePO {
+public class SysUserRolePO extends TenantPO {
     @TableId
     private String id;
 

+ 28 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysUserTenantPO.java

@@ -0,0 +1,28 @@
+package cn.tr.module.sys.user.po;
+
+import cn.tr.core.annotation.Comment;
+import cn.tr.plugin.mybatis.pojo.TenantPO;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName : SysRoleMenuPO
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年04月04日
+ */
+@Data
+@TableName("sys_user_tenant")
+public class SysUserTenantPO implements Serializable {
+    @TableId
+    private String id;
+
+    @Comment("租户id")
+    private String tenantId;
+
+    @Comment("用户id")
+    private String userId;
+}

+ 19 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/repository/SysUserTenantRepository.java

@@ -0,0 +1,19 @@
+package cn.tr.module.sys.user.repository;
+
+import cn.tr.module.sys.user.po.SysUserRolePO;
+import cn.tr.module.sys.user.po.SysUserTenantPO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @ClassName : SysRoleMenuRepository
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年03月31日
+ */
+@Mapper
+@Repository
+public interface SysUserTenantRepository extends BaseMapper<SysUserTenantPO> {
+
+}

+ 1 - 1
tr-test/src/main/resources/application.yml

@@ -8,7 +8,7 @@ server:
 mybatis-plus:
   mapper-locations: classpath*:com/gitee/sunchenbin/mybatis/actable/mapping/*/*.xml,classpath*:mapper/*/*.xml
   configuration:
-    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
   global-config:
     db-config:
       logic-delete-value: 1