From a5904b23d8fd4d455272311a930bc16d627fdbfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8A=93=E8=9B=99=E5=B8=88?= <770492966@qq.com> Date: Mon, 26 Aug 2024 10:43:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=A7=9F=E6=88=B7=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/SysDictTypeController.java | 42 +++++++++++++++++++ .../system/service/ISysDictTypeService.java | 8 ++++ .../service/impl/SysDictTypeServiceImpl.java | 22 ++++++++++ 3 files changed, 72 insertions(+) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictTypeController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictTypeController.java index 67c1f5133..16ac755cf 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictTypeController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictTypeController.java @@ -1,18 +1,29 @@ package org.dromara.system.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaCheckRole; +import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.domain.R; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.web.core.BaseController; +import org.dromara.system.domain.bo.SysDictDataBo; import org.dromara.system.domain.bo.SysDictTypeBo; +import org.dromara.system.domain.bo.SysTenantBo; +import org.dromara.system.domain.vo.SysDictDataVo; import org.dromara.system.domain.vo.SysDictTypeVo; +import org.dromara.system.domain.vo.SysTenantVo; +import org.dromara.system.service.ISysDictDataService; import org.dromara.system.service.ISysDictTypeService; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import org.dromara.system.service.ISysTenantService; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -30,6 +41,8 @@ import java.util.List; public class SysDictTypeController extends BaseController { private final ISysDictTypeService dictTypeService; + private final ISysDictDataService dictDataService; + private final ISysTenantService tenantService; /** * 查询字典类型列表 @@ -122,4 +135,33 @@ public class SysDictTypeController extends BaseController { List dictTypes = dictTypeService.selectDictTypeAll(); return R.ok(dictTypes); } + + /** + * 同步租户字典 + */ + @GetMapping("asyncTenantDict") + @Log(title = "同步租户字典", businessType = BusinessType.INSERT) + @Transactional(rollbackFor = Exception.class) + @SaCheckRole("superadmin") + public R asyncTenantDict(String tenantId) { + if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { + throw new ServiceException("超级管理员无须同步字典"); + } + //查询超管所有字典类型 + List typeVos = TenantHelper.dynamic(TenantConstants.DEFAULT_TENANT_ID, dictTypeService::selectDictTypeAll); + //查询超管所有字典data + List dictDataVos = TenantHelper.dynamic(TenantConstants.DEFAULT_TENANT_ID, () -> dictDataService.selectDictDataList(new SysDictDataBo())); + SysTenantBo sysTenantBo = new SysTenantBo(); + sysTenantBo.setTenantId(tenantId); + List sysTenantVos = tenantService.queryList(sysTenantBo); + for (SysTenantVo sysTenantVo : sysTenantVos) { + for (SysDictTypeVo typeVo : typeVos) { + TenantHelper.dynamic(sysTenantVo.getTenantId(), () -> { + //如果不存在则插入 + dictTypeService.insertIfNotExist(typeVo, dictDataVos); + }); + } + } + return R.ok("同步租户字典成功"); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictTypeService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictTypeService.java index 3b32d6cbb..9b02d9747 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictTypeService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDictTypeService.java @@ -92,4 +92,12 @@ public interface ISysDictTypeService { * @return 结果 */ boolean checkDictTypeUnique(SysDictTypeBo dictType); + + /** + * 如果不存在则插入类型和数据 + * + * @param typeVo 字典类型 + * @param dictDataVos 字典数据 + */ + void insertIfNotExist(SysDictTypeVo typeVo, List dictDataVos); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java index 1be0b7f40..661483655 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDictTypeServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -255,4 +256,25 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService, DictService return StreamUtils.toMap(list, SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel); } + @Override + public void insertIfNotExist(SysDictTypeVo typeVo, List dictDataVos) { + SysDictTypeVo sysDictTypeVo = selectDictTypeByType(typeVo.getDictType()); + if (ObjectUtil.isNull(sysDictTypeVo)) { + SysDictTypeBo typeBo = BeanUtil.toBean(typeVo, SysDictTypeBo.class); + typeBo.setDictId(null); + typeBo.setCreateTime(null); + typeBo.setUpdateTime(null); + insertDictType(typeBo); + //筛选出dictType对应的data + List dataVos = StreamUtils.toList(StreamUtils.filter(dictDataVos, + sysDictDataVo -> typeVo.getDictType().equals(sysDictDataVo.getDictType())), + sysDictDataVo -> { + //设置字典编码为null + sysDictDataVo.setDictCode(null); + sysDictDataVo.setCreateTime(null); + return MapstructUtils.convert(sysDictDataVo, SysDictData.class); + }); + dictDataMapper.insertBatch(dataVos); + } + } } From 310cd4ce72ed5ebff23b2994a156ec0e353ecca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8A=93=E8=9B=99=E5=B8=88?= <770492966@qq.com> Date: Mon, 26 Aug 2024 11:18:16 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=A7=9F=E6=88=B7=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=96=B9=E6=B3=95=E5=91=BD=E5=90=8D=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysDictTypeController.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictTypeController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictTypeController.java index 16ac755cf..1eb3a2fe6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictTypeController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDictTypeController.java @@ -139,13 +139,16 @@ public class SysDictTypeController extends BaseController { /** * 同步租户字典 */ - @GetMapping("asyncTenantDict") + @GetMapping("syncTenantDict") @Log(title = "同步租户字典", businessType = BusinessType.INSERT) @Transactional(rollbackFor = Exception.class) - @SaCheckRole("superadmin") - public R asyncTenantDict(String tenantId) { + @SaCheckRole(TenantConstants.SUPER_ADMIN_ROLE_KEY) + public R syncTenantDict(String tenantId) { + if (!TenantHelper.isEnable()) { + return R.fail("当前未开启租户模式"); + } if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) { - throw new ServiceException("超级管理员无须同步字典"); + return R.fail("超级管理员无须同步字典"); } //查询超管所有字典类型 List typeVos = TenantHelper.dynamic(TenantConstants.DEFAULT_TENANT_ID, dictTypeService::selectDictTypeAll);