1、修改Mysql线程池逻辑

2、新增数据表信息查询接口
3、优化前端代码逻辑
4、新增业面业务功能提示信息窗口
This commit is contained in:
2019-04-10 16:32:13 +08:00
parent abc220eb35
commit 9623b70875
50 changed files with 1197 additions and 1195 deletions

View File

@@ -0,0 +1,491 @@
package net.tccn.base;
import net.tccn.base.arango.Doc;
import net.tccn.dbq.Field;
import net.tccn.dbq.fbean.FilterType;
import net.tccn.dbq.jdbc.api.DbAccount;
import net.tccn.dbq.jdbc.api.DbKit;
import net.tccn.meta.MetaLink;
import net.tccn.meta.MetaService;
import net.tccn.meta.MetaTable;
import net.tccn.plat.DbPlat;
import net.tccn.plat.SysPlat;
import java.util.*;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
*
* Created by liangxianyou at 2019/1/7 13:31.
*/
public class MetaKit {
//基础数据缓存
private static List<MetaTable> metaTables;
private static List<MetaLink> metaLinks;
private static List<MetaService> metaServices;
private static List<DbAccount> dbPlats;
private static List<SysPlat> sysPlats;
static {
metaTables = MetaTable.dao.find();
metaLinks = MetaLink.dao.find();
metaServices = MetaService.dao.find();
dbPlats = DbAccount.dao.find();
sysPlats = SysPlat.dao.find();
}
public static <T extends Doc> void reload(Class<T> clazz) {
if (MetaTable.class == clazz) metaTables = MetaTable.dao.find();
else if (MetaLink.class == clazz) metaLinks = MetaLink.dao.find();
else if (MetaService.class == clazz) metaServices = MetaService.dao.find();
else if (DbAccount.class == clazz) dbPlats = DbAccount.dao.find();
else if (DbPlat.class == clazz) dbPlats = DbAccount.dao.find();
else if (SysPlat.class == clazz) sysPlats = SysPlat.dao.find();
}
//----- get/set ----
public static List<MetaTable> getMetaTables() {
return metaTables;
}
public static void setMetaTables(List<MetaTable> metaTables) {
MetaKit.metaTables = metaTables;
}
public static List<MetaLink> getMetaLinks() {
return metaLinks;
}
public static void setMetaLinks(List<MetaLink> metaLinks) {
MetaKit.metaLinks = metaLinks;
}
public static List<MetaService> getMetaServices() {
return metaServices;
}
public static List<DbAccount> getDbPlats() {
return dbPlats;
}
public static void setDbPlats(List<DbAccount> dbPlats) {
MetaKit.dbPlats = dbPlats;
}
public static List<SysPlat> getSysPlats() {
return sysPlats;
}
public static void setSysPlats(List<SysPlat> sysPlats) {
MetaKit.sysPlats = sysPlats;
}
//-----------------------------------
public static void setMetaServices(List<MetaService> metaServices) {
MetaKit.metaServices = metaServices;
}
/**
* 通过 别名 查询 MetaTable
* @param alias
* @return
*/
public static MetaTable getMetaTableByAlias(String alias) {
Optional<MetaTable> table = metaTables.stream().filter(x -> x.getAlias().equals(alias)).findAny();
return table.orElse(null);
}
/**
* 通过 MetaLink[] 得到 MetaTable{}
* @param links
* @return {alias:table}
*/
private static Map<String, MetaTable> metaTables(List<MetaLink> links) {
Map map = new HashMap();
List<String> tables = links.stream().map(MetaLink::getTables).flatMap(Arrays::stream).distinct().collect(Collectors.toList());//tables
metaTables.stream().filter(x -> tables.contains(x.getAlias())).forEach(x -> {
map.put(x.getAlias(), x);
});
return map;
}
/**
* 通过 link._key 得到 MetaLink[]
* @param links
* @return
*/
private static List<MetaLink> metaLinks(List<String> links) {
if (links == null) {
return new ArrayList<>();
}
return metaLinks.stream().filter(x -> links.contains(x.getKey())).collect(Collectors.toList());
}
/**
* 构建完整的 MetaService
* @param name
* @return
*/
public static MetaService getMetaService(String name) {
Optional<MetaService> service = metaServices.stream().filter(x -> x.getName().equals(name)).findAny();
//处理业务逻辑
service.ifPresent(x -> {
//x.setMetaTable(metaTableByAlias(x.getTable()));
//x.setMetaLinks(metaLinks(x.getLinks()));
//x.setTables(metaTables(x.getMetaLinks()));
});
return service.orElse(null);
}
//字段特征排序
public static BiFunction<MetaTable, String[], MetaTable> sortItem = (t, arr) -> {
List<Field> items = t.getItems();
//x 是跨越值
a:for (int i = 0, x = 0; i < arr.length; i++) {
int inx = i - x;
if (!items.get(inx).equals(arr[i])) {
Field tmp = items.get(inx);
for (int j = inx + 1; j < items.size(); j++) {
if (items.get(j).equals(arr[i])) {
items.set(inx, items.get(j));
items.set(j, tmp);
continue a;
}
}
//运行到这里,说明在 list 中找不到排序标识对应的数据, 让排序角标差值+1
x ++;
}
}
t.setItems(items);
return t;
};
public static Function<String, Field> getField = (n) -> {
String[] arr = n.split("[.]");
MetaTable metaTable = getMetaTableByAlias(arr[0]);
return metaTable.getItems().stream().filter(x -> x.getName().equals(arr[1])).findAny().orElse(null);
};
//listcfg
public static Function<MetaService, Kv> builderCfg = (m) -> {
List<String> shows = m.getShows();
List<Map> filters = m.getFilters();
List<Map> _filters = new ArrayList<>();
List<Map> _cols = new ArrayList<>();
//todo: 优化,批量操作
//build shows
shows.forEach(x -> {
Field field = getField.apply(x);
if (field != null) {
Kv col = Kv.of();
col.set("col", x.split("$]")[0] + field.showField());//a.createtime=dt
col.set("label", field.getLabel());
col.set("order", 1);//dev 是否支持排序
_cols.add(col);
}
});
//build filters
filters.forEach(x -> {
Kv filter = Kv.of();
Field filed = getField.apply(x.get("name") + "");
if (filed != null) {
filter.set("name", x.get("name"));
filter.set("label", filed.getLabel());
}
filter.set("inType", filed.getInType());
filter.set("inExt", filed.getInExt());
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);
Object checked = x.getOrDefault("checked", false);
filter.set("checked", checked instanceof Boolean ? checked : false);
_filters.add(filter);
});
/*shows.forEach(x -> {
_shows.add(Kv.of("name", x).set("label", getFieldLabel(x)));
});*/
Kv cfg = Kv.of();
cfg.set("title", m.getName())//业务名称
//.set("url", getUrl())
.set("cols", _cols)//展示的数据列
//.set("conditionLabel", "")
.set("filters", _filters);//查询过滤条件
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();
for (int i = 0; i < fields.size(); i++) {
for (int j = 0; j < items.size(); j++) {
if (items.get(j).equals(fields.get(i).getName())) {
items.set(j, fields.get(i));
}
}
}
return t;
};
//showUpdate
public static BiFunction<String, List<String>, MetaService> showUpdate = (serviceKey, shows) -> {
MetaService metaService = getMetaService(serviceKey);
MetaService _metaService = MetaService.dao.findByKey(metaService.getKey());
_metaService.setShows(shows);
_metaService.update();
metaService.setShows(shows);//更新缓存
return metaService;
};
public static MetaTable getMetaTableByKey(String key) {
return metaTables.stream().filter(x -> x.getKey().equals(key)).findAny().orElse(null);
}
public static List<MetaLink> getMetaLinks(String t, List<String> shows, List<String> filters) {
Predicate<String> contain = s -> {
for (String item : shows) {
if (s.equals(item.split("[.]")[0])) {
return true;
}
}
for (String item : filters) {
if (s.equals(item.split("[.]")[0])) {
return true;
}
}
return false;
};
//得到直接关联
//1、直接关联 表: t.equals(x.getTables()[0]) || t.equals(x.getTables()[1]
//2、关联且有过滤
//3、关联有展示
List<MetaLink> links = metaLinks.stream()
.filter(x -> {
return (t.equals(x.getTables()[0]) || t.equals(x.getTables()[1]))
&& (contain.test(x.getTables()[0]) || contain.test(x.getTables()[1]));
})
.collect(Collectors.toList());
return links;
}
public static Kv buildeDetail(MetaService metaService) {
//tables
Kv<String, MetaTable> tables = getMetaTables(metaService, true);
return Kv.of("tables", tables)
.set("links", Kv.of());
}
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;
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;
}
public static DbKit getDbKit(String dbPlatId) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbPlatId)).findAny();
return new DbKit(dbAccount.get());
}
public static DbAccount getDbPlat(String dbPlatId) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbPlatId)).findFirst();
return dbAccount.get();
}
public String nextAlias(String x) {
return next(x, "");
}
//使用['a',...,'z'] 创建Table 别名
private String next(String x, String end) {
if (x == null || "".equals(x)) {
return "a" + end;
}
char c = x.charAt(x.length() - 1);
String sub = x.substring(0, x.length() - 1);
if (c < 'z') {
return sub + (++c) + end;
} else if (c == 'z') {
return next(sub, "a" + end);
}
return null;
}
}