/** * BladeX Commercial License Agreement * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved. *

* Use of this software is governed by the Commercial License Agreement * obtained after purchasing a license from BladeX. *

* 1. This software is for development use only under a valid license * from BladeX. *

* 2. Redistribution of this software's source code to any third party * without a commercial license is strictly prohibited. *

* 3. Licensees may copyright their own code but cannot use segments * from this software for such purposes. Copyright of this software * remains with BladeX. *

* Using this software signifies agreement to this License, and the software * must not be used for illegal purposes. *

* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is * not liable for any claims arising from secondary or illegal development. *

* Author: Chill Zhuang (bladejava@qq.com) */ package org.springblade.develop.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import lombok.RequiredArgsConstructor; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.tool.utils.StringPool; import org.springblade.core.tool.utils.StringUtil; import org.springblade.develop.mapper.ModelPrototypeMapper; import org.springblade.develop.pojo.entity.Datasource; import org.springblade.develop.pojo.entity.ModelPrototype; import org.springblade.develop.service.IDatasourceService; import org.springblade.develop.service.IModelPrototypeService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Iterator; import java.util.List; /** * 数据原型表 服务实现类 * * @author Chill */ @Service @RequiredArgsConstructor public class ModelPrototypeServiceImpl extends BaseServiceImpl implements IModelPrototypeService { private final IDatasourceService datasourceService; @Override @Transactional(rollbackFor = Exception.class) public boolean submitList(List modelPrototypes) { modelPrototypes.forEach(modelPrototype -> { if (modelPrototype.getId() == null) { this.save(modelPrototype); } else { this.updateById(modelPrototype); } }); return true; } @Override public List prototypeList(Long modelId) { return this.list(Wrappers.lambdaQuery().eq(ModelPrototype::getModelId, modelId)); } @Override public TableInfo getTableInfo(String tableName, Long datasourceId) { Datasource datasource = datasourceService.getById(datasourceId); ConfigBuilder config = getConfigBuilder(datasource, tableName); List tableInfoList = config.getTableInfoList(); TableInfo tableInfo = null; Iterator iterator = tableInfoList.stream().filter(table -> table.getName().equals(tableName)).toList().iterator(); if (iterator.hasNext()) { tableInfo = iterator.next(); if (tableName.contains(StringPool.UNDERSCORE)) { String entityPrefix = StringUtil.firstCharToUpper(tableName.split(StringPool.UNDERSCORE)[0]); String entityName = StringUtil.removePrefix(tableInfo.getEntityName(), entityPrefix); tableInfo.setEntityName(entityName); } else { tableInfo.setEntityName(StringUtil.firstCharToUpper(tableName)); } } return tableInfo; } @Override public ConfigBuilder getConfigBuilder(Datasource datasource, String tableName) { StrategyConfig.Builder builder = new StrategyConfig.Builder(); //表前缀过滤,目前官方仅支持一个前缀,可自行修改为sys_或tb_或其他业务表前缀 //builder.likeTable(new LikeTable("blade_", SqlLike.RIGHT)); if (StringUtil.isNotBlank(tableName)) { builder.addInclude(tableName); } StrategyConfig strategyConfig = builder.entityBuilder() .naming(NamingStrategy.underline_to_camel) .columnNaming(NamingStrategy.underline_to_camel).build(); DataSourceConfig datasourceConfig = new DataSourceConfig.Builder( datasource.getUrl(), datasource.getUsername(), datasource.getPassword() ).build(); return new ConfigBuilder(null, datasourceConfig, strategyConfig, null, null, null); } }