【v3.8.3】租户大改造

pull/8786/merge
JEECG 2025-09-14 11:50:37 +08:00
parent 7829cf18d7
commit 1cf4054e76
7 changed files with 301 additions and 9 deletions

View File

@ -3,6 +3,7 @@ package org.jeecg.modules.system.mapper;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.system.entity.SysTenantPack; import org.jeecg.modules.system.entity.SysTenantPack;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@ -20,4 +21,12 @@ public interface SysTenantPackMapper extends BaseMapper<SysTenantPack> {
* @param tenantIdList * @param tenantIdList
*/ */
void deletePackByTenantIds(@Param("tenantIdList") List<Integer> tenantIdList); void deletePackByTenantIds(@Param("tenantIdList") List<Integer> tenantIdList);
/**
* idcodeid
*
* @param tenantId
*/
@Select("select id from sys_tenant_pack where tenant_id = #{tenantId} and (pack_code not in('superAdmin','accountAdmin','appAdmin') or pack_code is null) and iz_sysn = '1'")
List<String> getPackIdByPackCodeAndTenantId(@Param("tenantId") Integer tenantId);
} }

View File

@ -3,6 +3,8 @@ package org.jeecg.modules.system.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.system.entity.SysTenantPack;
import org.jeecg.modules.system.entity.SysTenantPackUser; import org.jeecg.modules.system.entity.SysTenantPackUser;
import java.util.List; import java.util.List;
@ -44,4 +46,23 @@ public interface SysTenantPackUserMapper extends BaseMapper<SysTenantPackUser> {
* @param * @param
*/ */
void deletePackUserByTenantIds(@Param("tenantIds") List<Integer> tenantIds); void deletePackUserByTenantIds(@Param("tenantIds") List<Integer> tenantIds);
/**
* ididid
*
* @param tenantId
* @param userId
* @return
*/
@Select("select pack_id from sys_tenant_pack_user where tenant_id = #{tenantId} and user_id = #{userId}")
List<String> getPackIdByTenantIdAndUserId(@Param("tenantId") Integer tenantId, @Param("userId") String userId);
/**
* id
*
* @param tenantId
* @return
*/
@Select("select id,pack_name,pack_code,pack_type from sys_tenant_pack where tenant_id = #{tenantId}")
List<SysTenantPack> getPackListByTenantId(@Param("tenantId") Integer tenantId);
} }

View File

@ -70,7 +70,7 @@
<!--联查用户和租户审核状态--> <!--联查用户和租户审核状态-->
<select id="getUserTenantPageList" resultType="org.jeecg.modules.system.vo.SysUserTenantVo"> <select id="getUserTenantPageList" resultType="org.jeecg.modules.system.vo.SysUserTenantVo">
SELECT su.id,su.realname,su.username,su.email,su.phone,su.avatar,su.work_no,su.org_code,sut.status,st.create_by SELECT su.id,su.realname,su.username,su.email,su.phone,su.avatar,su.work_no,su.org_code,sut.status,su.create_time,st.create_by
FROM sys_user_tenant sut FROM sys_user_tenant sut
RIGHT JOIN sys_user su on sut.user_id = su.id and su.del_flag = 0 RIGHT JOIN sys_user su on sut.user_id = su.id and su.del_flag = 0
JOIN sys_tenant st ON sut.tenant_id = st.id JOIN sys_tenant st ON sut.tenant_id = st.id

View File

@ -87,4 +87,21 @@ public interface ISysTenantPackService extends IService<SysTenantPack> {
* @date 2025/2/5 19:08 * @date 2025/2/5 19:08
*/ */
void syncDefaultPack(Integer tenantId); void syncDefaultPack(Integer tenantId);
/**
* ididid
*
* @param userId
* @param tenantId
* @return
*/
List<String> getPackIdByUserIdAndTenantId(String userId, Integer tenantId);
/**
* id
*
* @param tenantId
* @return
*/
List<SysTenantPack> getPackListByTenantId(String tenantId);
} }

View File

@ -240,4 +240,11 @@ public interface ISysTenantService extends IService<SysTenant> {
* @param tenantId * @param tenantId
*/ */
void deleteUser(SysUser sysUser, Integer tenantId); void deleteUser(SysUser sysUser, Integer tenantId);
/**
*
* @param userId
* @param tenantId
*/
void addPackUser(String userId, String tenantId);
} }

View File

@ -1,7 +1,9 @@
package org.jeecg.modules.system.service.impl; package org.jeecg.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.SymbolConstant; import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.constant.TenantConstant; import org.jeecg.common.constant.TenantConstant;
import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.system.vo.LoginUser;
@ -9,13 +11,10 @@ import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.common.util.oConvertUtils; import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.aop.TenantLog; import org.jeecg.modules.aop.TenantLog;
import org.jeecg.modules.system.entity.SysPackPermission; import org.jeecg.modules.system.entity.SysPackPermission;
import org.jeecg.modules.system.entity.SysTenant;
import org.jeecg.modules.system.entity.SysTenantPack; import org.jeecg.modules.system.entity.SysTenantPack;
import org.jeecg.modules.system.entity.SysTenantPackUser; import org.jeecg.modules.system.entity.SysTenantPackUser;
import org.jeecg.modules.system.mapper.SysPackPermissionMapper; import org.jeecg.modules.system.entity.SysUserTenant;
import org.jeecg.modules.system.mapper.SysRoleMapper; import org.jeecg.modules.system.mapper.*;
import org.jeecg.modules.system.mapper.SysTenantPackMapper;
import org.jeecg.modules.system.mapper.SysTenantPackUserMapper;
import org.jeecg.modules.system.service.ISysTenantPackService; import org.jeecg.modules.system.service.ISysTenantPackService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -51,8 +50,16 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
@Autowired @Autowired
private SysRoleMapper sysRoleMapper; private SysRoleMapper sysRoleMapper;
@Autowired
private SysUserTenantMapper sysUserTenantMapper;
@Override @Override
public void addPackPermission(SysTenantPack sysTenantPack) { public void addPackPermission(SysTenantPack sysTenantPack) {
//如果是默认租户套餐包则需要设置code编码再编辑默认套餐找自定义套餐的时候用到
if(CommonConstant.TENANT_PACK_DEFAULT.equals(sysTenantPack.getPackType())){
String packCode = CommonConstant.TENANT_PACK_DEFAULT + RandomUtil.randomNumbers(4).toLowerCase();
sysTenantPack.setPackCode(packCode);
}
sysTenantPackMapper.insert(sysTenantPack); sysTenantPackMapper.insert(sysTenantPack);
String permissionIds = sysTenantPack.getPermissionIds(); String permissionIds = sysTenantPack.getPermissionIds();
if (oConvertUtils.isNotEmpty(permissionIds)) { if (oConvertUtils.isNotEmpty(permissionIds)) {
@ -63,6 +70,48 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
} }
} }
//如果是自定义套餐包的情况下再将新增套餐和用户关系
if(!CommonConstant.TENANT_PACK_DEFAULT.equals(sysTenantPack.getPackType())) {
//如果需要自动分配给用户时候再去添加用户与套餐的关系数据
if(oConvertUtils.isNotEmpty(sysTenantPack.getIzSysn()) && CommonConstant.STATUS_1.equals(sysTenantPack.getIzSysn())) {
//根据租户id和套餐id添加用户与套餐关系数据
this.addPackUserByPackTenantId(sysTenantPack.getTenantId(), sysTenantPack.getId());
}
}
}
/**
* idid
*
* @param tenantId
* @param packId
*/
private void addPackUserByPackTenantId(Integer tenantId, String packId) {
if (null != tenantId && tenantId != 0) {
List<String> userIds = sysUserTenantMapper.getUserIdsByTenantId(tenantId);
if (CollectionUtil.isNotEmpty(userIds)) {
//update-begin---author:wangshuai---date:2025-09-03---for: 编辑时需要查看有没有未分配的用户---
// 查询已存在的用户
LambdaQueryWrapper<SysTenantPackUser> query = new LambdaQueryWrapper<>();
query.eq(SysTenantPackUser::getTenantId, tenantId);
query.eq(SysTenantPackUser::getPackId, packId);
query.in(SysTenantPackUser::getUserId, userIds);
List<SysTenantPackUser> existingUsers = sysTenantPackUserMapper.selectList(query);
// 提取已存在的用户ID
List<String> existingUserIds = existingUsers.stream()
.map(SysTenantPackUser::getUserId)
.toList();
// 过滤出需要新增的用户ID
List<String> newUserIds = userIds.stream()
.filter(userId -> !existingUserIds.contains(userId))
.toList();
for (String userId : newUserIds) {
//update-end---author:wangshuai---date:2025-09-03---for: 编辑时需要查看有没有未分配的用户---
SysTenantPackUser tenantPackUser = new SysTenantPackUser(tenantId, packId, userId);
sysTenantPackUserMapper.insert(tenantPackUser);
}
}
}
} }
@Override @Override
@ -86,9 +135,17 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
//如果传过来的菜单id为空那么就删除数据库中所有菜单 //如果传过来的菜单id为空那么就删除数据库中所有菜单
if (oConvertUtils.isEmpty(permissionIds)) { if (oConvertUtils.isEmpty(permissionIds)) {
this.deletePackPermission(sysTenantPack.getId(), null); this.deletePackPermission(sysTenantPack.getId(), null);
//如果是默认套餐包,需要删除其他关联默认产品包下的角色与菜单的关系
if(CommonConstant.TENANT_PACK_DEFAULT.equals(sysTenantPack.getPackType())){
this.deleteDefaultPackPermission(sysTenantPack.getPackCode(), null);
}
} else if (oConvertUtils.isNotEmpty(permissionIds) && oConvertUtils.isEmpty(oldPermissionIds)) { } else if (oConvertUtils.isNotEmpty(permissionIds) && oConvertUtils.isEmpty(oldPermissionIds)) {
//如果传过来的菜单id不为空但是数据库的菜单id为空那么就新增 //如果传过来的菜单id不为空但是数据库的菜单id为空那么就新增
this.addPermission(sysTenantPack.getId(), permissionIds); this.addPermission(sysTenantPack.getId(), permissionIds);
//如果是默认套餐包,需要新增其他关联默认产品包下的角色与菜单的关系
if(CommonConstant.TENANT_PACK_DEFAULT.equals(sysTenantPack.getPackType())){
this.addDefaultPackPermission(sysTenantPack.getPackCode(), permissionIds);
}
} else { } else {
//都不为空,需要比较,进行添加或删除 //都不为空,需要比较,进行添加或删除
if (oConvertUtils.isNotEmpty(oldPermissionIds)) { if (oConvertUtils.isNotEmpty(oldPermissionIds)) {
@ -97,6 +154,10 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
if (permissionList.size() > 0) { if (permissionList.size() > 0) {
for (String permission : permissionList) { for (String permission : permissionList) {
this.deletePackPermission(sysTenantPack.getId(), permission); this.deletePackPermission(sysTenantPack.getId(), permission);
//如果是默认套餐包,需要删除其他关联默认产品包下的角色与菜单的关系
if(CommonConstant.TENANT_PACK_DEFAULT.equals(sysTenantPack.getPackType())){
this.deleteDefaultPackPermission(sysTenantPack.getPackCode(), permission);
}
} }
} }
@ -105,11 +166,29 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
if (permissionAddList.size() > 0) { if (permissionAddList.size() > 0) {
for (String permission : permissionAddList) { for (String permission : permissionAddList) {
this.addPermission(sysTenantPack.getId(), permission); this.addPermission(sysTenantPack.getId(), permission);
//如果是默认套餐包,需要新增其他关联默认产品包下的角色与菜单的关系
if(CommonConstant.TENANT_PACK_DEFAULT.equals(sysTenantPack.getPackType())){
this.addDefaultPackPermission(sysTenantPack.getPackCode(), permission);
}
} }
} }
} }
} }
sysTenantPackMapper.updateById(sysTenantPack); sysTenantPackMapper.updateById(sysTenantPack);
//如果是默认套餐包,则更新和当前匹配默认套餐包匹配的数据
if(CommonConstant.TENANT_PACK_DEFAULT.equals(sysTenantPack.getPackType())){
//同步同 packCode 下的相关套餐包数据
this.syncRelatedPackDataByDefaultPack(sysTenantPack);
}
//如果是自定义套餐包的情况下再将新增套餐和用户关系
if(!CommonConstant.TENANT_PACK_DEFAULT.equals(sysTenantPack.getPackType())) {
//如果需要自动分配给用户时候再去添加用户与套餐的关系数据
if(oConvertUtils.isNotEmpty(sysTenantPack.getIzSysn()) && CommonConstant.STATUS_1.equals(sysTenantPack.getIzSysn())) {
//根据租户id和套餐id添加用户与套餐关系数据
this.addPackUserByPackTenantId(sysTenantPack.getTenantId(), sysTenantPack.getId());
}
}
} }
@Override @Override
@ -134,7 +213,7 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
ISysTenantPackService currentService = SpringContextUtils.getApplicationContext().getBean(ISysTenantPackService.class); ISysTenantPackService currentService = SpringContextUtils.getApplicationContext().getBean(ISysTenantPackService.class);
// 创建租户超级管理员 // 创建租户超级管理员
SysTenantPack superAdminPack = new SysTenantPack(tenantId, "超级管理员", TenantConstant.SUPER_ADMIN); SysTenantPack superAdminPack = new SysTenantPack(tenantId, "超级管理员", TenantConstant.SUPER_ADMIN);
superAdminPack.setIzSysn(CommonConstant.STATUS_0);
//step.1 创建租户套餐包(超级管理员) //step.1 创建租户套餐包(超级管理员)
LambdaQueryWrapper<SysTenantPack> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysTenantPack> query = new LambdaQueryWrapper<>();
query.eq(SysTenantPack::getTenantId,tenantId); query.eq(SysTenantPack::getTenantId,tenantId);
@ -160,6 +239,7 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
if(null == sysTenantPackAccountAdmin){ if(null == sysTenantPackAccountAdmin){
// 创建超级管理员 // 创建超级管理员
SysTenantPack accountAdminPack = new SysTenantPack(tenantId, "组织账户管理员", TenantConstant.ACCOUNT_ADMIN); SysTenantPack accountAdminPack = new SysTenantPack(tenantId, "组织账户管理员", TenantConstant.ACCOUNT_ADMIN);
accountAdminPack.setIzSysn(CommonConstant.STATUS_0);
currentService.saveOne(accountAdminPack); currentService.saveOne(accountAdminPack);
} }
@ -170,6 +250,7 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
if(null == sysTenantPackAppAdmin){ if(null == sysTenantPackAppAdmin){
// 创建超级管理员 // 创建超级管理员
SysTenantPack appAdminPack = new SysTenantPack(tenantId, "组织应用管理员", TenantConstant.APP_ADMIN); SysTenantPack appAdminPack = new SysTenantPack(tenantId, "组织应用管理员", TenantConstant.APP_ADMIN);
appAdminPack.setIzSysn(CommonConstant.STATUS_0);
currentService.saveOne(appAdminPack); currentService.saveOne(appAdminPack);
} }
@ -287,6 +368,18 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
packPermission.setPermissionId(permission); packPermission.setPermissionId(permission);
sysPackPermissionMapper.insert(packPermission); sysPackPermissionMapper.insert(packPermission);
} }
//如果需要自动分配给用户时候再去添加用户与套餐的关系数据
if(oConvertUtils.isNotEmpty(defaultPacks.getIzSysn()) && CommonConstant.STATUS_1.equals(defaultPacks.getIzSysn())) {
//查询当前租户下的用户
List<String> userIds = sysUserTenantMapper.getUserIdsByTenantId(tenantId);
if (oConvertUtils.isNotEmpty(userIds)) {
for (String userId : userIds) {
//根据租户id和套餐id添加用户与套餐关系数据
SysTenantPackUser tenantPackUser = new SysTenantPackUser(tenantId, pack.getId(), userId);
sysTenantPackUserMapper.insert(tenantPackUser);
}
}
}
} }
/** /**
@ -298,4 +391,81 @@ public class SysTenantPackServiceImpl extends ServiceImpl<SysTenantPackMapper, S
query.eq(SysTenantPackUser::getPackId, packId); query.eq(SysTenantPackUser::getPackId, packId);
sysTenantPackUserMapper.delete(query); sysTenantPackUserMapper.delete(query);
} }
@Override
public List<String> getPackIdByUserIdAndTenantId(String userId, Integer tenantId) {
return sysTenantPackUserMapper.getPackIdByTenantIdAndUserId(tenantId, userId);
}
@Override
public List<SysTenantPack> getPackListByTenantId(String tenantId) {
return sysTenantPackUserMapper.getPackListByTenantId(oConvertUtils.getInt(tenantId));
}
/**
* code
*
* @param packCode
* @param permission
*/
private void addDefaultPackPermission(String packCode, String permission) {
if (oConvertUtils.isEmpty(packCode)) {
return;
}
//查询当前匹配非默认套餐包的其他默认套餐包
LambdaQueryWrapper<SysTenantPack> query = new LambdaQueryWrapper<>();
query.ne(SysTenantPack::getPackType, CommonConstant.TENANT_PACK_DEFAULT);
query.eq(SysTenantPack::getPackCode, packCode);
List<SysTenantPack> otherDefaultPacks = sysTenantPackMapper.selectList(query);
for (SysTenantPack pack : otherDefaultPacks) {
//新增套餐包用户菜单权限
this.addPermission(pack.getId(), permission);
}
}
/**
* code
*
* @param packCode
* @param permissionId
*/
private void deleteDefaultPackPermission(String packCode, String permissionId) {
if (oConvertUtils.isEmpty(packCode)) {
return;
}
//查询当前匹配非默认套餐包的其他默认套餐包
LambdaQueryWrapper<SysTenantPack> query = new LambdaQueryWrapper<>();
query.ne(SysTenantPack::getPackType, CommonConstant.TENANT_PACK_DEFAULT);
query.eq(SysTenantPack::getPackCode, packCode);
List<SysTenantPack> defaultPacks = sysTenantPackMapper.selectList(query);
for (SysTenantPack pack : defaultPacks) {
//删除套餐权限
deletePackPermission(pack.getId(), permissionId);
}
}
/**
* packCode
*
* @param sysTenantPack
*/
private void syncRelatedPackDataByDefaultPack(SysTenantPack sysTenantPack) {
//查询与默认套餐相同code的套餐
LambdaQueryWrapper<SysTenantPack> query = new LambdaQueryWrapper<>();
query.ne(SysTenantPack::getPackType, CommonConstant.TENANT_PACK_DEFAULT);
query.eq(SysTenantPack::getPackCode, sysTenantPack.getPackCode());
List<SysTenantPack> relatedPacks = sysTenantPackMapper.selectList(query);
for (SysTenantPack pack : relatedPacks) {
//更新自定义套餐
pack.setPackName(sysTenantPack.getPackName());
pack.setStatus(sysTenantPack.getStatus());
pack.setRemarks(sysTenantPack.getRemarks());
pack.setIzSysn(sysTenantPack.getIzSysn());
sysTenantPackMapper.updateById(pack);
//同步默认套餐报下的所有用户已
if (oConvertUtils.isNotEmpty(sysTenantPack.getIzSysn()) && CommonConstant.STATUS_1.equals(sysTenantPack.getIzSysn())) {
this.addPackUserByPackTenantId(pack.getTenantId(), pack.getId());
}
}
}
} }

View File

@ -1,5 +1,6 @@
package org.jeecg.modules.system.service.impl; package org.jeecg.modules.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -136,6 +137,12 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
relation.setTenantId(Integer.valueOf(id)); relation.setTenantId(Integer.valueOf(id));
relation.setStatus(CommonConstant.USER_TENANT_NORMAL); relation.setStatus(CommonConstant.USER_TENANT_NORMAL);
userTenantMapper.insert(relation); userTenantMapper.insert(relation);
//给当前用户添加租户下的所有套餐
this.addPackUser(userId,id);
//update-begin---author:wangshuai---date:2025-09-06---for:【QQYUN-13720】邀请用户加入租户没有系统提醒移除有---
//邀请用户加入租户,发送消息
this.sendInvitationTenantMessage(userByPhone,id);
//update-end---author:wangshuai---date:2025-09-06---for:【QQYUN-13720】邀请用户加入租户没有系统提醒移除有---
}else{ }else{
//update-begin---author:wangshuai ---date:20230711 for【QQYUN-5723】2、用户已经在租户里了再次要求提示成功应该提示用户已经存在------------ //update-begin---author:wangshuai ---date:20230711 for【QQYUN-5723】2、用户已经在租户里了再次要求提示成功应该提示用户已经存在------------
//update-begin---author:wangshuai ---date:20230724 for【QQYUN-5885】邀请用户加入提示不准确------------ //update-begin---author:wangshuai ---date:20230724 for【QQYUN-5885】邀请用户加入提示不准确------------
@ -150,6 +157,30 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
} }
} }
/**
*
*
* @param user
* @param id
*/
private void sendInvitationTenantMessage(SysUser user, String id) {
LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal();
// 发消息
SysTenant sysTenant = this.baseMapper.querySysTenant((Integer.valueOf(id)));
MessageDTO messageDTO = new MessageDTO();
messageDTO.setToAll(false);
messageDTO.setToUser(user.getUsername());
messageDTO.setFromUser("system");
String title = sysUser.getRealname() + " 邀请您加入了 "+sysTenant.getName()+"。";
messageDTO.setTitle(title);
Map<String, Object> data = new HashMap<>();
messageDTO.setData(data);
messageDTO.setContent(title);
messageDTO.setType("system");
messageDTO.setCategory(CommonConstant.MSG_CATEGORY_1);
sysBaseApi.sendSysAnnouncement(messageDTO);
}
@Override @Override
@CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true)
public void leaveTenant(String userIds, String tenantId) { public void leaveTenant(String userIds, String tenantId) {
@ -161,6 +192,13 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
query.eq(SysUserTenant::getUserId,userId); query.eq(SysUserTenant::getUserId,userId);
userTenantMapper.delete(query); userTenantMapper.delete(query);
//update-end---author:wangshuai ---date:20221223 for[QQYUN-3371]租户逻辑改造,改成关系表------------ //update-end---author:wangshuai ---date:20221223 for[QQYUN-3371]租户逻辑改造,改成关系表------------
//update-begin---author:wangshuai---date:2025-09-06---for:【QQYUN-13720】移出用户当前租户没有系统提醒---
// 给移除人员发送消息
SysTenantPackUser sysTenantPackUser = new SysTenantPackUser();
sysTenantPackUser.setTenantId(Integer.valueOf(tenantId));
sysTenantPackUser.setUserId(userId);
sendMsgForDelete(sysTenantPackUser);
//update-end---author:wangshuai---date:2025-09-06---for:【QQYUN-13720】移出用户当前租户没有系统提醒---
} }
//租户移除用户,直接删除用户租户产品包 //租户移除用户,直接删除用户租户产品包
sysTenantPackUserMapper.deletePackUserByTenantId(Integer.valueOf(tenantId),Arrays.asList(userIds.split(SymbolConstant.COMMA))); sysTenantPackUserMapper.deletePackUserByTenantId(Integer.valueOf(tenantId),Arrays.asList(userIds.split(SymbolConstant.COMMA)));
@ -648,7 +686,13 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
MessageDTO messageDTO = new MessageDTO(); MessageDTO messageDTO = new MessageDTO();
messageDTO.setToAll(false); messageDTO.setToAll(false);
messageDTO.setToUser(user.getUsername()); messageDTO.setToUser(user.getUsername());
String title = "您已被 "+loginUser.getRealname()+" 从 "+sysTenant.getName()+"的"+sysTenantPackUser.getPackName()+"中移除。"; //低代码下移出用户已做提醒,用户移出没有套餐包名称的概念
String title = "";
if(oConvertUtils.isNotEmpty(sysTenantPackUser.getPackName())){
title = "您已被 "+loginUser.getRealname()+" 从 "+sysTenant.getName()+"的"+sysTenantPackUser.getPackName()+"中移除。";
} else {
title = "您已被 "+loginUser.getRealname()+" 从 "+sysTenant.getName() + "中移除。";
}
messageDTO.setTitle(title); messageDTO.setTitle(title);
messageDTO.setFromUser("system"); messageDTO.setFromUser("system");
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
@ -973,4 +1017,28 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
userService.removeLogicDeleted(Collections.singletonList(userId)); userService.removeLogicDeleted(Collections.singletonList(userId));
} }
/**
*
*
* @param userId id
* @param tenantId id
*/
public void addPackUser(String userId, String tenantId) {
//根据租户id和产品包的code获取租户套餐id
List<String> packIds = sysTenantPackMapper.getPackIdByPackCodeAndTenantId(oConvertUtils.getInt(tenantId));
if (CollectionUtil.isNotEmpty(packIds)) {
for (String packId : packIds) {
SysTenantPackUser sysTenantPackUser = new SysTenantPackUser();
sysTenantPackUser.setUserId(userId);
sysTenantPackUser.setTenantId(oConvertUtils.getInt(tenantId));
sysTenantPackUser.setPackId(packId);
sysTenantPackUser.setStatus(CommonConstant.STATUS_1_INT);
try {
this.addTenantPackUser(sysTenantPackUser);
} catch (Exception e) {
log.warn("添加用户套餐包失败,原因:" + e.getMessage());
}
}
}
}
} }