.
This commit is contained in:
20
src/main/java/net/tccn/dbq/DbExecutors.java
Normal file
20
src/main/java/net/tccn/dbq/DbExecutors.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package net.tccn.dbq;
|
||||
|
||||
import net.tccn.base.Kv;
|
||||
import net.tccn.base.PageBean;
|
||||
import net.tccn.dbq.fbean.FBean;
|
||||
import net.tccn.dbq.parser.ParseMysql;
|
||||
import net.tccn.dbq.parser.Parser;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class DbExecutors {
|
||||
private final static Parser PARSER = new ParseMysql();
|
||||
|
||||
public static PageBean findPage(FBean fBean) {
|
||||
|
||||
String[] sqls = PARSER.parse(fBean);
|
||||
|
||||
return PageBean.by(Arrays.asList(Kv.of("findSql:", sqls[0]).set("countSql", sqls[1]) ), 0);
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ import java.util.List;
|
||||
*/
|
||||
public class FBean {
|
||||
|
||||
private String name;
|
||||
private String name;//service key
|
||||
private List<Filter> filters;//[{f:xx, v: v, type:t}] -- t,
|
||||
private List<Order> orders;//{f1: 1, f2: -1}
|
||||
private Limit limit;//{pn: 1, ps: 10}
|
||||
|
||||
@@ -38,13 +38,13 @@ public enum FilterType {
|
||||
String _sql;
|
||||
switch (filterType) {
|
||||
case IN:
|
||||
_sql = String.format(" AND `%s` IN (%s)", filter.getCol(), filter.getValue());
|
||||
_sql = String.format(" AND %s IN (%s)", filter.getCol(), filter.getValue());
|
||||
break;
|
||||
case LIKE:
|
||||
_sql = String.format(" AND `%s` LIKE '%s'", filter.getCol(), "%" + filter.getValue() + "%");
|
||||
_sql = String.format(" AND %s LIKE '%s'", filter.getCol(), "%" + filter.getValue() + "%");
|
||||
break;
|
||||
default:
|
||||
_sql = String.format(" AND `%s` %s '%s'", filter.getCol(), filterType.expre, filter.getValue());
|
||||
_sql = String.format(" AND %s %s '%s'", filter.getCol(), filterType.expre, filter.getValue());
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
package net.tccn.dbq.fbean;
|
||||
package net.tccn.dbq.parser;
|
||||
|
||||
import net.tccn.dbq.fbean.FBean;
|
||||
|
||||
/**
|
||||
* Created by liangxianyou at 2018/12/24 15:49.
|
||||
@@ -1,4 +1,6 @@
|
||||
package net.tccn.dbq.fbean;
|
||||
package net.tccn.dbq.parser;
|
||||
|
||||
import net.tccn.dbq.fbean.FBean;
|
||||
|
||||
/**
|
||||
* Created by liangxianyou at 2018/12/24 15:49.
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.dbq.fbean;
|
||||
package net.tccn.dbq.parser;
|
||||
|
||||
import net.tccn.base.Kv;
|
||||
import net.tccn.dbq.fbean.*;
|
||||
import net.tccn.meta.MetaKit;
|
||||
import net.tccn.meta.MetaLink;
|
||||
import net.tccn.meta.MetaService;
|
||||
@@ -105,7 +106,7 @@ public class ParseMysql implements Parser {
|
||||
public String[] parse(FBean fBean) {
|
||||
MetaService metaService = MetaKit.getMetaService(fBean.getName());
|
||||
|
||||
Kv<String, MetaTable> tables = MetaKit.getMetaTables(metaService);//所有的关联表信息
|
||||
Kv<String, MetaTable> tables = MetaKit.getMetaTables(metaService, false);//所有的关联表信息
|
||||
MetaTable metaTable = tables.get(metaService.getTable());//基础元数据
|
||||
List<String> shows = metaService.getShows();//查询的属性
|
||||
|
||||
@@ -120,7 +121,7 @@ public class ParseMysql implements Parser {
|
||||
|
||||
|
||||
//判断是否为同库
|
||||
if (sameDbFun.test(tables)) {
|
||||
if (sameDbFun.test(tables) || true) {
|
||||
// where 1=1 and xx=xx
|
||||
StringBuffer bufWhere = new StringBuffer();
|
||||
if (!isEmpty.test(filters)) {
|
||||
@@ -1,4 +1,6 @@
|
||||
package net.tccn.dbq.fbean;
|
||||
package net.tccn.dbq.parser;
|
||||
|
||||
import net.tccn.dbq.fbean.FBean;
|
||||
|
||||
/**
|
||||
* Created by liangxianyou at 2018/12/24 15:47.
|
||||
@@ -213,6 +213,122 @@ public class MetaKit {
|
||||
return cfg;
|
||||
};
|
||||
|
||||
public static Map cfg(String name) {
|
||||
MetaService metaService = getMetaService(name);
|
||||
Kv<String, MetaTable> metaTables = getMetaTables(metaService, false);
|
||||
|
||||
List<String> shows = metaService.getShows();
|
||||
List<Map> edits = metaService.getEdits();
|
||||
List<String> details = metaService.getDetails();
|
||||
List<Map> filters = metaService.getFilters();
|
||||
String comment = metaService.getComment();
|
||||
|
||||
//List<Field> items = new ArrayList<>();
|
||||
Kv<String, Kv<String, Kv>> _items2 = Kv.of();
|
||||
metaTables.forEach((k, v) -> {
|
||||
Kv<String, Kv> _items = Kv.of();
|
||||
v.getItems().forEach(x -> {
|
||||
Kv kv = Kv.of();
|
||||
kv.set("col", x.getName());
|
||||
kv.set("label", x.getLabel());
|
||||
kv.set("InExt", x.getInExt());
|
||||
kv.set("inType", x.getInType());
|
||||
kv.set("expr", x.showField());
|
||||
_items.set(x.getName(), kv);
|
||||
});
|
||||
|
||||
_items2.set(k, _items);
|
||||
});
|
||||
|
||||
//shows
|
||||
List _shows = new ArrayList();
|
||||
shows.forEach(x -> {
|
||||
MetaTable metaTable = metaTables.get(x.split("[.]")[0]); // 表别名
|
||||
metaTable.getItems()
|
||||
.stream()
|
||||
.filter(y -> x.split("[.]")[1].equals(y.getName()))
|
||||
.findFirst().ifPresent(y -> _shows.add(Kv.of("col", x).set("order", true)));
|
||||
});
|
||||
|
||||
//filters
|
||||
List<Map> _filters = new ArrayList<>();
|
||||
filters.forEach(x -> {
|
||||
String col = String.valueOf(x.get("name"));
|
||||
MetaTable metaTable = metaTables.get(col.split("[.]")[0]); // 表别名
|
||||
|
||||
Kv filter = Kv.of();
|
||||
metaTable.getItems()
|
||||
.stream()
|
||||
.filter(y -> col.split("[.]")[1].equals(y.getName()))
|
||||
.findFirst()
|
||||
.ifPresent(y -> {
|
||||
filter.set("name", x.get("name"));
|
||||
filter.set("label", y.getLabel());
|
||||
List<Kv> types = new ArrayList<>();
|
||||
List<String> list = (List) x.get("filterType");
|
||||
list.forEach(t -> {
|
||||
FilterType type = FilterType.getFilterType(t);
|
||||
if (type != null) {
|
||||
types.add(Kv.of("name", t).set("remark", type.getRemark()));
|
||||
}
|
||||
});
|
||||
|
||||
filter.set("filterType", types);
|
||||
if (!types.isEmpty()) {//设置默认查询项
|
||||
filter.set("type", types.get(0).get("name"));
|
||||
}
|
||||
Object checked = x.getOrDefault("checked", false);
|
||||
filter.set("checked", checked instanceof Boolean ? checked : false);
|
||||
});
|
||||
_filters.add(filter);
|
||||
});
|
||||
|
||||
//edits
|
||||
List _edits = new ArrayList();//edits;
|
||||
edits.forEach(x -> {
|
||||
Kv kv = Kv.of();
|
||||
kv.set("col", x);
|
||||
|
||||
String col = x.get("col") + "";
|
||||
//readonly,hidden
|
||||
if ("id".equalsIgnoreCase(col)) {
|
||||
kv.set("upAttr", "hidden");
|
||||
kv.set("addAttr", "none");
|
||||
}
|
||||
if ("reportWay".equalsIgnoreCase(col)) {
|
||||
kv.set("upAttr", "readonly");
|
||||
kv.set("addAttr", "none");
|
||||
}
|
||||
if ("insertTime".equalsIgnoreCase(col)) {
|
||||
kv.set("upAttr", "readonly");
|
||||
kv.set("addAttr", "none");
|
||||
}
|
||||
|
||||
if ("ip".equalsIgnoreCase(col)) {
|
||||
kv.set("ck", "ip");
|
||||
}
|
||||
|
||||
_edits.add(kv);
|
||||
});
|
||||
|
||||
//details
|
||||
List _details = new ArrayList();//details;
|
||||
details.forEach(x -> {
|
||||
Kv kv = Kv.of();
|
||||
kv.set("col", x);
|
||||
|
||||
_details.add(kv);
|
||||
});
|
||||
|
||||
return Kv.of()
|
||||
.set("title", comment)
|
||||
.set("items", _items2)
|
||||
.set("shows", _shows)
|
||||
.set("filters", _filters)
|
||||
.set("edits", _edits)
|
||||
.set("details", _details);
|
||||
}
|
||||
|
||||
//itemUpdate
|
||||
public static BiFunction<MetaTable, List<Field>, MetaTable> itemUpdate = (t, fields) -> {
|
||||
List<Field> items = t.getItems();
|
||||
@@ -276,27 +392,42 @@ public class MetaKit {
|
||||
|
||||
public static Kv buildeDetail(MetaService metaService) {
|
||||
//tables
|
||||
Kv<String, MetaTable> tables = getMetaTables(metaService);
|
||||
Kv<String, MetaTable> tables = getMetaTables(metaService, true);
|
||||
return Kv.of("tables", tables)
|
||||
.set("links", Kv.of());
|
||||
}
|
||||
|
||||
public static Kv<String, MetaTable> getMetaTables(MetaService metaService) {
|
||||
public static Kv<String, MetaTable> getMetaTables(MetaService metaService, Boolean all) {
|
||||
Kv<String, MetaTable> tables = Kv.of();
|
||||
|
||||
String table = metaService.getTable();//
|
||||
tables.set(table, getMetaTableByAlias(table));
|
||||
|
||||
//收集所有的col
|
||||
Set<String> allAlias = UtilityExt.streamConcat(
|
||||
metaService.getFilters().stream().map(f -> {
|
||||
String col = (String) f.get("name");
|
||||
String alias = col.split("[.]")[0];
|
||||
return alias;
|
||||
}),
|
||||
metaService.getShows().stream().map(x -> x.split("[.]")[0]),
|
||||
metaService.getEdits().stream().map(x -> x.split("[.]")[0])
|
||||
);
|
||||
Set<String> allAlias;
|
||||
|
||||
if (!all) {
|
||||
allAlias = UtilityExt.streamConcat(
|
||||
metaService.getFilters().stream().map(f -> {
|
||||
String col = (String) f.get("name");
|
||||
String alias = col.split("[.]")[0];
|
||||
return alias;
|
||||
}),
|
||||
metaService.getExports().stream().map(x -> x.split("[.]")[0]),
|
||||
metaService.getShows().stream().map(x -> x.split("[.]")[0])/*, todo: xxx
|
||||
metaService.getEdits().stream().map(x -> x.split("[.]")[0])*/
|
||||
);
|
||||
|
||||
} else {
|
||||
allAlias = new HashSet<>();
|
||||
metaLinks.stream().forEach(x -> {
|
||||
if (table.equals(x.getTables()[0])) {
|
||||
allAlias.add(x.getTables()[1]);
|
||||
} else if (table.equals(x.getTables()[1])) {
|
||||
allAlias.add(x.getTables()[0]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
allAlias.forEach(x -> tables.set(x, getMetaTableByAlias(x)));
|
||||
return tables;
|
||||
|
||||
@@ -17,6 +17,7 @@ public class MetaLink extends Doc<MetaLink> {
|
||||
|
||||
//-------------------------------------------
|
||||
|
||||
|
||||
public String[] getTables() {
|
||||
return tables;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,8 @@ public class MetaService extends Doc<MetaService> {
|
||||
|
||||
|
||||
private List<String> shows = new ArrayList<>();
|
||||
private List<String> edits = new ArrayList<>();
|
||||
private List<Map> edits = new ArrayList<>();
|
||||
private List<String> details = new ArrayList<>();
|
||||
private List<Map> filters = new ArrayList<>();
|
||||
private List<String> exports = new ArrayList<>();
|
||||
|
||||
@@ -71,14 +72,22 @@ public class MetaService extends Doc<MetaService> {
|
||||
this.shows = shows;
|
||||
}
|
||||
|
||||
public List<String> getEdits() {
|
||||
public List<Map> getEdits() {
|
||||
return edits;
|
||||
}
|
||||
|
||||
public void setEdits(List<String> edits) {
|
||||
public void setEdits(List<Map> edits) {
|
||||
this.edits = edits;
|
||||
}
|
||||
|
||||
public List<String> getDetails() {
|
||||
return details;
|
||||
}
|
||||
|
||||
public void setDetails(List<String> details) {
|
||||
this.details = details;
|
||||
}
|
||||
|
||||
public List<Map> getFilters() {
|
||||
return filters;
|
||||
}
|
||||
|
||||
49
src/main/java/net/tccn/service/DataService.java
Normal file
49
src/main/java/net/tccn/service/DataService.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package net.tccn.service;
|
||||
|
||||
import net.tccn.base.JBean;
|
||||
import net.tccn.base.PageBean;
|
||||
import net.tccn.dbq.DbExecutors;
|
||||
import net.tccn.dbq.fbean.FBean;
|
||||
import net.tccn.meta.MetaTable;
|
||||
import org.redkale.net.http.RestMapping;
|
||||
import org.redkale.net.http.RestParam;
|
||||
import org.redkale.net.http.RestService;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 数据服务
|
||||
* @author: liangxianyou at 2019/1/6 20:46.
|
||||
*/
|
||||
@RestService(name = "data", automapping = true, comment = "数据服务")
|
||||
public class DataService extends BaseService {
|
||||
|
||||
@Resource
|
||||
private MetadataService metadataService;
|
||||
|
||||
|
||||
@RestMapping(name = "list", comment = "数据分页列表")
|
||||
public JBean findList(FBean fBean, @RestParam(name = "platToken") String token) {
|
||||
JBean jBean = new JBean();
|
||||
try {
|
||||
PageBean page = DbExecutors.findPage(fBean);
|
||||
jBean.setBody(page);
|
||||
} catch (Exception e) {
|
||||
jBean.set(-1, "数据查询失败");
|
||||
e.printStackTrace();
|
||||
}
|
||||
return jBean;
|
||||
}
|
||||
|
||||
@RestMapping(name = "save", comment = "数据保存")
|
||||
public JBean save(String ks, Map data, @RestParam(name = "platToken") String token) {
|
||||
MetaTable metaTable = metadataService.findMetaTable(ks, token);
|
||||
|
||||
//String sql = metaTable.buildSaveSql(data);
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -56,6 +56,15 @@ public class MetadataService extends BaseService { //arango
|
||||
return jBean;
|
||||
}
|
||||
|
||||
@RestMapping(name = "cfg", auth = false, comment = " 功能配置")
|
||||
public JBean cfg(String name, @RestParam(name = "platToken") String token) {
|
||||
JBean jBean = JBean.by(0, "");
|
||||
|
||||
jBean.set(0, "", MetaKit.cfg(name));
|
||||
|
||||
return jBean;
|
||||
}
|
||||
|
||||
//----------- 数据平台 ---------------
|
||||
@RestMapping(name = "db_plat_list", comment = "数据平台")
|
||||
public List<DbAccount> dbPlatList() {
|
||||
|
||||
Reference in New Issue
Block a user