mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-19 09:55:16 +08:00
租户字典同步
This commit is contained in:
parent
79aee1d312
commit
a5904b23d8
@ -1,18 +1,29 @@
|
|||||||
package org.dromara.system.controller.system;
|
package org.dromara.system.controller.system;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
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.domain.R;
|
||||||
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.excel.utils.ExcelUtil;
|
import org.dromara.common.excel.utils.ExcelUtil;
|
||||||
import org.dromara.common.log.annotation.Log;
|
import org.dromara.common.log.annotation.Log;
|
||||||
import org.dromara.common.log.enums.BusinessType;
|
import org.dromara.common.log.enums.BusinessType;
|
||||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
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.common.web.core.BaseController;
|
||||||
|
import org.dromara.system.domain.bo.SysDictDataBo;
|
||||||
import org.dromara.system.domain.bo.SysDictTypeBo;
|
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.SysDictTypeVo;
|
||||||
|
import org.dromara.system.domain.vo.SysTenantVo;
|
||||||
|
import org.dromara.system.service.ISysDictDataService;
|
||||||
import org.dromara.system.service.ISysDictTypeService;
|
import org.dromara.system.service.ISysDictTypeService;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.dromara.system.service.ISysTenantService;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@ -30,6 +41,8 @@ import java.util.List;
|
|||||||
public class SysDictTypeController extends BaseController {
|
public class SysDictTypeController extends BaseController {
|
||||||
|
|
||||||
private final ISysDictTypeService dictTypeService;
|
private final ISysDictTypeService dictTypeService;
|
||||||
|
private final ISysDictDataService dictDataService;
|
||||||
|
private final ISysTenantService tenantService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询字典类型列表
|
* 查询字典类型列表
|
||||||
@ -122,4 +135,33 @@ public class SysDictTypeController extends BaseController {
|
|||||||
List<SysDictTypeVo> dictTypes = dictTypeService.selectDictTypeAll();
|
List<SysDictTypeVo> dictTypes = dictTypeService.selectDictTypeAll();
|
||||||
return R.ok(dictTypes);
|
return R.ok(dictTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 同步租户字典
|
||||||
|
*/
|
||||||
|
@GetMapping("asyncTenantDict")
|
||||||
|
@Log(title = "同步租户字典", businessType = BusinessType.INSERT)
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@SaCheckRole("superadmin")
|
||||||
|
public R<Void> asyncTenantDict(String tenantId) {
|
||||||
|
if (TenantConstants.DEFAULT_TENANT_ID.equals(tenantId)) {
|
||||||
|
throw new ServiceException("超级管理员无须同步字典");
|
||||||
|
}
|
||||||
|
//查询超管所有字典类型
|
||||||
|
List<SysDictTypeVo> typeVos = TenantHelper.dynamic(TenantConstants.DEFAULT_TENANT_ID, dictTypeService::selectDictTypeAll);
|
||||||
|
//查询超管所有字典data
|
||||||
|
List<SysDictDataVo> dictDataVos = TenantHelper.dynamic(TenantConstants.DEFAULT_TENANT_ID, () -> dictDataService.selectDictDataList(new SysDictDataBo()));
|
||||||
|
SysTenantBo sysTenantBo = new SysTenantBo();
|
||||||
|
sysTenantBo.setTenantId(tenantId);
|
||||||
|
List<SysTenantVo> sysTenantVos = tenantService.queryList(sysTenantBo);
|
||||||
|
for (SysTenantVo sysTenantVo : sysTenantVos) {
|
||||||
|
for (SysDictTypeVo typeVo : typeVos) {
|
||||||
|
TenantHelper.dynamic(sysTenantVo.getTenantId(), () -> {
|
||||||
|
//如果不存在则插入
|
||||||
|
dictTypeService.insertIfNotExist(typeVo, dictDataVos);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return R.ok("同步租户字典成功");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -92,4 +92,12 @@ public interface ISysDictTypeService {
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
boolean checkDictTypeUnique(SysDictTypeBo dictType);
|
boolean checkDictTypeUnique(SysDictTypeBo dictType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 如果不存在则插入类型和数据
|
||||||
|
*
|
||||||
|
* @param typeVo 字典类型
|
||||||
|
* @param dictDataVos 字典数据
|
||||||
|
*/
|
||||||
|
void insertIfNotExist(SysDictTypeVo typeVo, List<SysDictDataVo> dictDataVos);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package org.dromara.system.service.impl;
|
package org.dromara.system.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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);
|
return StreamUtils.toMap(list, SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void insertIfNotExist(SysDictTypeVo typeVo, List<SysDictDataVo> 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<SysDictData> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user