mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-09-19 17:58:17 +08:00
租户字典同步
This commit is contained in:
parent
79aee1d312
commit
a5904b23d8
@ -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<SysDictTypeVo> dictTypes = dictTypeService.selectDictTypeAll();
|
||||
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 结果
|
||||
*/
|
||||
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;
|
||||
|
||||
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<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