提交 ee4542c1 编写于 作者: sq3536's avatar sq3536

增加逆向工程实体结构

上级 842f7825
...@@ -2,7 +2,7 @@ package cn.ibizlab.core.extensions.service; ...@@ -2,7 +2,7 @@ package cn.ibizlab.core.extensions.service;
import cn.ibizlab.core.lite.extensions.domain.SysModel; import cn.ibizlab.core.lite.extensions.domain.SysModel;
import cn.ibizlab.core.lite.extensions.service.LiteCoreService; import cn.ibizlab.core.lite.extensions.service.LiteCoreService;
import cn.ibizlab.core.lite.service.DstLiquibaseService; import cn.ibizlab.core.lite.extensions.service.DstLiquibaseService;
import cn.ibizlab.core.lite.service.impl.DstDataSourceServiceImpl; import cn.ibizlab.core.lite.service.impl.DstDataSourceServiceImpl;
import cn.ibizlab.util.domain.LiquibaseProp; import cn.ibizlab.util.domain.LiquibaseProp;
import cn.ibizlab.util.errors.BadRequestAlertException; import cn.ibizlab.util.errors.BadRequestAlertException;
...@@ -190,7 +190,7 @@ public class DstDataSourceExService extends DstDataSourceServiceImpl { ...@@ -190,7 +190,7 @@ public class DstDataSourceExService extends DstDataSourceServiceImpl {
lp.setDefaultSchema(datasourceMap.get("defaultSchema").toString()); lp.setDefaultSchema(datasourceMap.get("defaultSchema").toString());
// 调用liquibase逆向工程的逻辑,生成一个xml,并返回一个SysModel对象 // 调用liquibase逆向工程的逻辑,生成一个xml,并返回一个SysModel对象
SysModel sysModel = dstLiquibaseService.generateLiquibase(lp,datasourceMap.get("defaultSystemId").toString()); SysModel sysModel = dstLiquibaseService.generateLiquibase(lp,datasourceMap.get("defaultSystemId").toString());
liteCoreService.syncSysModel(sysModel,1); //liteCoreService.syncSysModel(sysModel,1);
return et; return et;
} }
} }
......
package cn.ibizlab.core.lite.service; package cn.ibizlab.core.lite.extensions.service;
import cn.ibizlab.core.lite.domain.MetaField; import cn.ibizlab.core.lite.domain.MetaField;
import cn.ibizlab.core.lite.domain.MetaRelationship; import cn.ibizlab.core.lite.domain.MetaRelationship;
import cn.ibizlab.core.lite.extensions.domain.MetaEntityModel; import cn.ibizlab.core.lite.extensions.domain.MetaEntityModel;
import cn.ibizlab.core.lite.extensions.domain.SysModel; import cn.ibizlab.core.lite.extensions.domain.SysModel;
import cn.ibizlab.core.lite.extensions.util.DstLiquibaseConfiguration;
import cn.ibizlab.core.util.config.LiquibaseConfiguration; import cn.ibizlab.core.util.config.LiquibaseConfiguration;
import cn.ibizlab.util.domain.LiquibaseProp; import cn.ibizlab.util.domain.LiquibaseProp;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import liquibase.Liquibase; import liquibase.Liquibase;
import liquibase.database.Database; import liquibase.database.Database;
...@@ -82,20 +84,19 @@ public class DstLiquibaseService{ ...@@ -82,20 +84,19 @@ public class DstLiquibaseService{
private String dataDir; private String dataDir;
@Resource @Resource
public LiquibaseConfiguration liquibaseConfiguration; public DstLiquibaseConfiguration dstLiquibaseConfiguration;
public SysModel generateLiquibase(LiquibaseProp liquibaseProp, String name) { public SysModel generateLiquibase(LiquibaseProp liquibaseProp, String name) {
SysModel sysModel = liquibaseGenerateChangeLog(liquibaseProp,name); SysModel sysModel = liquibaseGenerateChangeLog(liquibaseProp,name);
return sysModel; return sysModel;
} }
@SneakyThrows @SneakyThrows
public SysModel liquibaseGenerateChangeLog(LiquibaseProp liquibaseProp,String name){ public SysModel liquibaseGenerateChangeLog(LiquibaseProp liquibaseProp,String name){
// 根据指定数据源生成对象 // 根据指定数据源生成对象
String liquibaseChangeLogPath = getChangeLog(); String liquibaseChangeLogPath = getChangeLog();
SpringLiquibase springLiquibase = liquibaseConfiguration.masterliquibase(liquibaseProp);
Liquibase liquibase = createLiquibase(springLiquibase,liquibaseChangeLogPath);
Database database = liquibase.getDatabase();
File file = new File(liquibaseChangeLogPath); File file = new File(liquibaseChangeLogPath);
if(!file.getParentFile().exists()){ if(!file.getParentFile().exists()){
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
...@@ -103,6 +104,11 @@ public class DstLiquibaseService{ ...@@ -103,6 +104,11 @@ public class DstLiquibaseService{
if(!file.exists()){ if(!file.exists()){
file.createNewFile(); file.createNewFile();
} }
SpringLiquibase springLiquibase = dstLiquibaseConfiguration.dstliquibase(liquibaseProp);
Liquibase liquibase = createLiquibase(springLiquibase,liquibaseChangeLogPath);
Database database = liquibase.getDatabase();
DiffOutputControl diffOutputControl = new DiffOutputControl(includeCatalog, includeSchema, includeTablespace, null); DiffOutputControl diffOutputControl = new DiffOutputControl(includeCatalog, includeSchema, includeTablespace, null);
CommandLineUtils.doGenerateChangeLog(liquibaseChangeLogPath, database, catalogName,liquibaseProp.getDefaultSchema(),StringUtils.trimToNull(generateField), CommandLineUtils.doGenerateChangeLog(liquibaseChangeLogPath, database, catalogName,liquibaseProp.getDefaultSchema(),StringUtils.trimToNull(generateField),
name, context, dataDir, diffOutputControl); name, context, dataDir, diffOutputControl);
......
package cn.ibizlab.core.lite.extensions.util;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import java.util.Properties;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Primary;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.jdbc.DataSourceBuilder;
import cn.ibizlab.util.domain.LiquibaseProp;
import org.springframework.beans.factory.annotation.Autowired;
import liquibase.integration.spring.SpringLiquibase;
import org.springframework.util.StringUtils;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
@Configuration
public class DstLiquibaseConfiguration {
/**
* 主数据源版本管理
* @param
* @return
*/
@Bean
@Lazy
public SpringLiquibase dstliquibase(LiquibaseProp masterProperties) {
return LiquibaseInit(masterProperties);
}
/**
* liquibase初始化数据库
* @param properties
* @return
*/
private SpringLiquibase LiquibaseInit(LiquibaseProp properties){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUsername(properties.getUsername());
druidDataSource.setPassword(properties.getPassword());
druidDataSource.setUrl(properties.getUrl());
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(druidDataSource);
liquibase.setChangeLog(getChangelog(properties.getIsSyncDBSchema(),properties.getConf()));
liquibase.setContexts("development,test,production");
liquibase.setShouldRun(true);
liquibase.setDefaultSchema(properties.getDefaultSchema());
return liquibase;
}
/**
* 获取数据库差异文件
* @param isSyncDBSchema 是否同步表结构
* @param conf //liquibase配置文件
* @return
*/
private String getChangelog(String isSyncDBSchema,String conf){
String defaultChangelog="classpath:liquibase/empty.xml";
if((!StringUtils.isEmpty(isSyncDBSchema))&&(!StringUtils.isEmpty(conf))){
if(isSyncDBSchema.toLowerCase().equals("true"))
defaultChangelog=conf;
}
return defaultChangelog;
}
}
\ No newline at end of file
...@@ -2,6 +2,7 @@ package cn.ibizlab.api.rest.extensions; ...@@ -2,6 +2,7 @@ package cn.ibizlab.api.rest.extensions;
import cn.ibizlab.core.dict.extensions.service.DictDstService; import cn.ibizlab.core.dict.extensions.service.DictDstService;
import cn.ibizlab.core.lite.domain.DstSystem; import cn.ibizlab.core.lite.domain.DstSystem;
import cn.ibizlab.core.lite.domain.MetaEntity;
import cn.ibizlab.core.lite.domain.MetaField; import cn.ibizlab.core.lite.domain.MetaField;
import cn.ibizlab.core.lite.extensions.domain.*; import cn.ibizlab.core.lite.extensions.domain.*;
import cn.ibizlab.core.lite.extensions.model.DataModel; import cn.ibizlab.core.lite.extensions.model.DataModel;
...@@ -9,14 +10,19 @@ import cn.ibizlab.core.lite.extensions.model.Property; ...@@ -9,14 +10,19 @@ import cn.ibizlab.core.lite.extensions.model.Property;
import cn.ibizlab.core.lite.extensions.service.LiteCoreService; import cn.ibizlab.core.lite.extensions.service.LiteCoreService;
import cn.ibizlab.core.lite.extensions.service.LiteDataService; import cn.ibizlab.core.lite.extensions.service.LiteDataService;
import cn.ibizlab.core.lite.extensions.service.LiteModelService; import cn.ibizlab.core.lite.extensions.service.LiteModelService;
import cn.ibizlab.core.lite.filter.MetaFieldSearchContext;
import cn.ibizlab.core.lite.service.IMetaEntityService;
import cn.ibizlab.core.lite.service.IMetaFieldService;
import cn.ibizlab.util.dict.CodeItem; import cn.ibizlab.util.dict.CodeItem;
import cn.ibizlab.util.dict.CodeList; import cn.ibizlab.util.dict.CodeList;
import cn.ibizlab.util.dict.Option; import cn.ibizlab.util.dict.Option;
import cn.ibizlab.util.filter.QueryFilter; import cn.ibizlab.util.filter.QueryFilter;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
...@@ -162,11 +168,32 @@ public class DstCoreResource { ...@@ -162,11 +168,32 @@ public class DstCoreResource {
return ResponseEntity.ok(list); return ResponseEntity.ok(list);
} }
@Autowired
IMetaEntityService metaEntityService;
@Autowired
@Lazy
private IMetaFieldService fieldService;
@RequestMapping(method = RequestMethod.GET, value = {"/dst/{system}/entitys","/lite/{system}/entitys"}) @RequestMapping(method = RequestMethod.GET, value = {"/dst/{system}/entitys","/lite/{system}/entitys"})
public ResponseEntity<List<EntityModel>> getEntityModel(@PathVariable("system") String system) { public ResponseEntity<List<EntityModel>> getEntityModel(@PathVariable("system") String system) {
return ResponseEntity.status(HttpStatus.OK).body(liteModelService.getEntityModel(system)); return ResponseEntity.status(HttpStatus.OK).body(liteModelService.getEntityModel(system));
} }
@RequestMapping(method = RequestMethod.GET, value = "/lite/{system}/metaentitys")
public ResponseEntity<List<MetaEntity>> getMetaEntitys(@PathVariable("system") String system) {
return ResponseEntity.status(HttpStatus.OK).body(metaEntityService.list(Wrappers.<MetaEntity>lambdaQuery().eq(MetaEntity::getSystemId,system)));
}
@RequestMapping(method = RequestMethod.GET, value = "/lite/{system}/metafieles")
public ResponseEntity<List<MetaField>> getFields(@PathVariable("system") String system) {
MetaFieldSearchContext context=new MetaFieldSearchContext();
context.setSize(Integer.MAX_VALUE);
context.setN_systemid_eq(system);
return ResponseEntity.status(HttpStatus.OK).body(fieldService.searchDefault(context).getContent());
}
@RequestMapping(method = RequestMethod.GET, value = {"/dst/{system}/entitys/{entity}","/lite/{system}/entitys/{entity}"}) @RequestMapping(method = RequestMethod.GET, value = {"/dst/{system}/entitys/{entity}","/lite/{system}/entitys/{entity}"})
public ResponseEntity<EntityModel> getEntityModel(@PathVariable("system") String system, @PathVariable("entity") String entity) { public ResponseEntity<EntityModel> getEntityModel(@PathVariable("system") String system, @PathVariable("entity") String entity) {
return ResponseEntity.status(HttpStatus.OK).body(liteModelService.getEntityModel(system,entity)); return ResponseEntity.status(HttpStatus.OK).body(liteModelService.getEntityModel(system,entity));
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册