From 9d8b9fabbea813e980d7f8e67ee633a55d205955 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期四, 16 一月 2025 11:50:19 +0800
Subject: [PATCH] update 优化 ws模块替换session的时候关闭session连接
---
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java | 132 ++++++++++++++++++++++++++++++++++++++++---
1 files changed, 121 insertions(+), 11 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
index 0cd574a..f31bd30 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
@@ -1,6 +1,8 @@
package org.dromara.system.service.impl;
import cn.dev33.satoken.secure.BCrypt;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
@@ -10,13 +12,19 @@
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.Constants;
+import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.service.WorkflowService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.CacheUtils;
+import org.dromara.common.tenant.core.TenantEntity;
+import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.domain.*;
import org.dromara.system.domain.bo.SysTenantBo;
import org.dromara.system.domain.vo.SysTenantVo;
@@ -27,10 +35,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
/**
* 绉熸埛Service涓氬姟灞傚鐞�
@@ -103,6 +108,7 @@
lqw.eq(bo.getExpireTime() != null, SysTenant::getExpireTime, bo.getExpireTime());
lqw.eq(bo.getAccountCount() != null, SysTenant::getAccountCount, bo.getAccountCount());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysTenant::getStatus, bo.getStatus());
+ lqw.orderByAsc(SysTenant::getId);
return lqw;
}
@@ -116,7 +122,9 @@
// 鑾峰彇鎵�鏈夌鎴风紪鍙�
List<String> tenantIds = baseMapper.selectObjs(
- new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId), Convert::toStr);
+ new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId), x -> {
+ return Convert.toStr(x);
+ });
String tenantId = generateTenantId(tenantIds);
add.setTenantId(tenantId);
boolean flag = baseMapper.insert(add) > 0;
@@ -132,7 +140,6 @@
SysDept dept = new SysDept();
dept.setTenantId(tenantId);
dept.setDeptName(bo.getCompanyName());
- dept.setLeader(bo.getUsername());
dept.setParentId(Constants.TOP_PARENT_ID);
dept.setAncestors(Constants.TOP_PARENT_ID.toString());
deptMapper.insert(dept);
@@ -152,6 +159,11 @@
user.setPassword(BCrypt.hashpw(bo.getPassword()));
user.setDeptId(deptId);
userMapper.insert(user);
+ //鏂板绯荤粺鐢ㄦ埛鍚庯紝榛樿褰撳墠鐢ㄦ埛涓洪儴闂ㄧ殑璐熻矗浜�
+ SysDept sd = new SysDept();
+ sd.setLeader(user.getUserId());
+ sd.setDeptId(deptId);
+ deptMapper.updateById(sd);
// 鐢ㄦ埛鍜岃鑹插叧鑱旇〃
SysUserRole userRole = new SysUserRole();
@@ -182,6 +194,13 @@
config.setTenantId(tenantId);
}
configMapper.insertBatch(sysConfigList);
+
+ // 鏈紑鍚伐浣滄祦涓嶆墽琛屼笅鏂规搷浣�
+ if (SpringUtils.getProperty("warm-flow.enabled", Boolean.class, false)) {
+ WorkflowService workflowService = SpringUtils.getBean(WorkflowService.class);
+ // 鏂板绉熸埛娴佺▼瀹氫箟
+ workflowService.syncDef(tenantId);
+ }
return true;
}
@@ -196,7 +215,7 @@
String numbers = RandomUtil.randomNumbers(6);
// 鍒ゆ柇鏄惁瀛樺湪锛屽鏋滃瓨鍦ㄥ垯閲嶆柊鐢熸垚
if (tenantIds.contains(numbers)) {
- generateTenantId(tenantIds);
+ return generateTenantId(tenantIds);
}
return numbers;
}
@@ -223,7 +242,7 @@
role.setRoleName(TenantConstants.TENANT_ADMIN_ROLE_NAME);
role.setRoleKey(TenantConstants.TENANT_ADMIN_ROLE_KEY);
role.setRoleSort(1);
- role.setStatus(TenantConstants.NORMAL);
+ role.setStatus(SystemConstants.NORMAL);
roleMapper.insert(role);
Long roleId = role.getRoleId();
@@ -261,7 +280,9 @@
@CacheEvict(cacheNames = CacheNames.SYS_TENANT, key = "#bo.tenantId")
@Override
public int updateTenantStatus(SysTenantBo bo) {
- SysTenant tenant = MapstructUtils.convert(bo, SysTenant.class);
+ SysTenant tenant = new SysTenant();
+ tenant.setId(bo.getId());
+ tenant.setStatus(bo.getStatus());
return baseMapper.updateById(tenant);
}
@@ -289,7 +310,7 @@
throw new ServiceException("瓒呯绉熸埛涓嶈兘鍒犻櫎");
}
}
- return baseMapper.deleteBatchIds(ids) > 0;
+ return baseMapper.deleteByIds(ids) > 0;
}
/**
@@ -337,7 +358,7 @@
*/
@Override
@Transactional(rollbackFor = Exception.class)
- public Boolean syncTenantPackage(String tenantId, String packageId) {
+ public Boolean syncTenantPackage(String tenantId, Long packageId) {
SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId);
List<SysRole> roles = roleMapper.selectList(
new LambdaQueryWrapper<SysRole>().eq(SysRole::getTenantId, tenantId));
@@ -364,4 +385,93 @@
}
return true;
}
+
+ /**
+ * 鍚屾绉熸埛瀛楀吀
+ */
+ @Transactional(rollbackFor = Exception.class)
+ @Override
+ public void syncTenantDict() {
+ // 鏌ヨ瓒呯 鎵�鏈夊瓧鍏告暟鎹�
+ List<SysDictType> dictTypeList = new ArrayList<>();
+ List<SysDictData> dictDataList = new ArrayList<>();
+ TenantHelper.ignore(() -> {
+ dictTypeList.addAll(dictTypeMapper.selectList());
+ dictDataList.addAll(dictDataMapper.selectList());
+ });
+ Map<String, List<SysDictType>> typeMap = StreamUtils.groupByKey(dictTypeList, TenantEntity::getTenantId);
+ Map<String, Map<String, List<SysDictData>>> typeDataMap = StreamUtils.groupBy2Key(
+ dictDataList, TenantEntity::getTenantId, SysDictData::getDictType);
+ // 绠$悊绉熸埛瀛楀吀鏁版嵁
+ List<SysDictType> defaultTypeMap = typeMap.get(TenantConstants.DEFAULT_TENANT_ID);
+ Map<String, List<SysDictData>> defaultTypeDataMap = typeDataMap.get(TenantConstants.DEFAULT_TENANT_ID);
+
+ // 鑾峰彇鎵�鏈夌鎴风紪鍙�
+ List<String> tenantIds = baseMapper.selectObjs(
+ new LambdaQueryWrapper<SysTenant>().select(SysTenant::getTenantId)
+ .eq(SysTenant::getStatus, SystemConstants.NORMAL), x -> {
+ return Convert.toStr(x);
+ });
+ List<SysDictType> saveTypeList = new ArrayList<>();
+ List<SysDictData> saveDataList = new ArrayList<>();
+ Set<String> set = new HashSet<>();
+ for (String tenantId : tenantIds) {
+ if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
+ continue;
+ }
+ for (SysDictType dictType : defaultTypeMap) {
+ List<String> typeList = StreamUtils.toList(typeMap.get(tenantId), SysDictType::getDictType);
+ List<SysDictData> dataList = defaultTypeDataMap.get(dictType.getDictType());
+ if (typeList.contains(dictType.getDictType())) {
+ List<SysDictData> dataListTenant = typeDataMap.get(tenantId).get(dictType.getDictType());
+ Map<String, SysDictData> map = StreamUtils.toIdentityMap(dataListTenant, SysDictData::getDictValue);
+ for (SysDictData dictData : dataList) {
+ if (!map.containsKey(dictData.getDictValue())) {
+ SysDictData data = BeanUtil.toBean(dictData, SysDictData.class);
+ // 璁剧疆瀛楀吀缂栫爜涓� null
+ data.setDictCode(null);
+ data.setTenantId(tenantId);
+ data.setCreateTime(null);
+ data.setUpdateTime(null);
+ set.add(tenantId);
+ saveDataList.add(data);
+ }
+ }
+ } else {
+ SysDictType type = BeanUtil.toBean(dictType, SysDictType.class);
+ type.setDictId(null);
+ type.setTenantId(tenantId);
+ type.setCreateTime(null);
+ type.setUpdateTime(null);
+ set.add(tenantId);
+ saveTypeList.add(type);
+ if (CollUtil.isNotEmpty(dataList)) {
+ // 绛涢�夊嚭 dictType 瀵瑰簲鐨� data
+ for (SysDictData dictData : dataList) {
+ SysDictData data = BeanUtil.toBean(dictData, SysDictData.class);
+ // 璁剧疆瀛楀吀缂栫爜涓� null
+ data.setDictCode(null);
+ data.setTenantId(tenantId);
+ data.setCreateTime(null);
+ data.setUpdateTime(null);
+ set.add(tenantId);
+ saveDataList.add(data);
+ }
+ }
+ }
+ }
+ }
+ TenantHelper.ignore(() -> {
+ if (CollUtil.isNotEmpty(saveTypeList)) {
+ dictTypeMapper.insertBatch(saveTypeList);
+ }
+ if (CollUtil.isNotEmpty(saveDataList)) {
+ dictDataMapper.insertBatch(saveDataList);
+ }
+ });
+ for (String tenantId : set) {
+ TenantHelper.dynamic(tenantId, () -> CacheUtils.clear(CacheNames.SYS_DICT));
+ }
+ }
+
}
--
Gitblit v1.9.3