Files
meta-kit/src/main/java/net/tccn/meta/_TableService.java
2019-04-12 01:00:32 +08:00

134 lines
4.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package net.tccn.meta;
import net.tccn.base.JBean;
import net.tccn.base.Kv;
import net.tccn.base.MetaKit;
import net.tccn.dbq.jdbc.api.DbAccount;
import net.tccn.dbq.table.Table;
import net.tccn.service.BaseService;
import net.tccn.service._FileService;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService;
import org.redkale.util.Comment;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
/**
* 元数据实体管理
* 1、实体导入
* 2、实体信息维护
* 3、数据库表管理
*/
@RestService(automapping = true, comment = "元数据实体管理")
public class _TableService extends BaseService {
@Resource
_FileService fileService;
@Resource
_DbService dbService;
@RestMapping(name = "sheets", comment = "导入选择列表数据准备")
public JBean sheets(String cate, //类型
//excel {文件地址}
String filePath,
//mysql {数据库连接账号、数据源id、数据库database数组}
String dbPlatId, String[] catalogs,
@RestParam(name = "platToken") String token) {
JBean jBean = new JBean();
if ("excel".equals(cate)) {
jBean.setBody(fileService.data(filePath, token));
} else if ("mysql".equals(cate)){
List<Table> list = dbService.tableList(dbPlatId, catalogs);
String[] tableArr = list.stream().map(Table::getName).toArray(String[]::new);
CompletableFuture<List<String>> hvFuture = tableExist(tableArr, token);
try {
List<String> _hv = hvFuture.get();
List<MetaTable> sheets = new ArrayList<>();
list.forEach(x -> {
MetaTable bean = MetaTable.toAs(x);
bean.setHv(_hv.contains(x.getName()) ? 1 : 0);
sheets.add(bean);
});
//对数据分组后返回
Kv<String, MetaTable> data = Kv.of();
sheets.forEach(x -> data.set(x.getName(), x));
jBean.setBody(data);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
return jBean;
}
/*public JBean tableInfo(DbAccount dbAccount,
String dbPlatId, String catalog, String tableName) {
dbService.tableInfo(dbAccount, dbPlatId, catalog, tableName)
return null;
}*/
@RestMapping(name = "table_save", comment = "保存数据源实体到元数据实体表")
public void tableSave(String dbPlatId,
String catalog,
String[] tableArr,
@RestParam(name = "platToken") String token) {
CompletableFuture<List<String>> hvfuture = tableExist(tableArr, token);
List<Table> tables = dbService.tableList(dbPlatId, catalog, tableArr);
try {
List<String> hvs = hvfuture.get();
tables.forEach(t -> {
if (!hvs.contains(t.getName())) {
MetaTable metaTable = MetaTable.toAs(t);
metaTable.setCatalog(catalog);
metaTable.setDbPlatId(dbPlatId);
metaTable.setAlias(MetaKit.nextAlias());//todo: 表别名
metaTable.setSysPlatId(platId(token));
//保存数据到元数据表
metaTable.save();
}
});
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
@Comment("查询元数据中存在的表")
private CompletableFuture<List<String>> tableExist(String[] tableArr, String token) {
return CompletableFuture.supplyAsync(() -> {
StringBuffer buf = new StringBuffer();
buf.append("for d in MetaTable\n" +
" filter d.name in [");
for (String x : tableArr) {
buf.append("'").append(x).append("',");
}
buf.deleteCharAt(buf.length() - 1);
buf.append("] and d.sysPlatId=='" + platId(token) + "'\n" +
" return d.name");
List<String> hv = MetaTable.dao.find(buf.toString(), String.class); //在元数据中已经存在的sheet
return hv;
});
}
}