.
This commit is contained in:
6
pom.xml
6
pom.xml
@@ -18,14 +18,14 @@
|
||||
<dependency>
|
||||
<groupId>org.redkale</groupId>
|
||||
<artifactId>redkale</artifactId>
|
||||
<version>2.7.0</version>
|
||||
<version>2.8.0.dev</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<!--<dependency>
|
||||
<groupId>org.redkalex</groupId>
|
||||
<artifactId>redkale-plugins</artifactId>
|
||||
<version>2.7.0</version>
|
||||
</dependency>
|
||||
</dependency>-->
|
||||
|
||||
<!-- mysql连接 -->
|
||||
<dependency>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<body id="home">
|
||||
<div class="container-fluid">
|
||||
<row>
|
||||
<div class="col-md-12" id="top">
|
||||
<div class="col-md-12 col-xs-12" id="top">
|
||||
<div class="logo">
|
||||
<h1>Meta-Kit</h1>
|
||||
</div>
|
||||
@@ -42,7 +42,7 @@
|
||||
</div>
|
||||
|
||||
<div id="mainDiv">
|
||||
<div class="col-md-1" id="left">
|
||||
<div class="col-md-1 col-xs-1" id="left">
|
||||
<nav class="menu" data-ride="menu">
|
||||
<ul class="nav nav-primary">
|
||||
<li class="active show nav-parent" style="width: 100%;">
|
||||
@@ -58,7 +58,7 @@
|
||||
</ul>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="col-md-11">
|
||||
<div class="col-md-11 col-xs-11">
|
||||
<!--<div style="height: 40px;background-color: #fff;"></div>-->
|
||||
<!-- load main body to here -->
|
||||
<div id="main"></div>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 业务列表 -->
|
||||
<div class="col-md-2">
|
||||
<div class="col-xs-2">
|
||||
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 业务列表(Meta-Service)</div>
|
||||
<ul class="nav nav-tabs nav-stacked tlist" style="height: 100%">
|
||||
<li :class="['clearfix',{'active':service==item.alias}]" v-for="item in services" >
|
||||
@@ -33,8 +33,8 @@
|
||||
</div>
|
||||
|
||||
<!-- 预览功能 -->
|
||||
<div class="col-md-10">
|
||||
<div class="col-md-4 pull-right">
|
||||
<div class="col-xs-10">
|
||||
<div class="col-xs-4 pull-right">
|
||||
<div class="input-group">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-default" type="button">添加过滤条件</button>
|
||||
@@ -54,7 +54,7 @@
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<!-- 过滤条件 -->
|
||||
<div class="col-lg-4 col-md-6" v-for="(filter,index) in cfg.filters" v-if="filter.checked">
|
||||
<div class="col-lg-4 col-xs-6" v-for="(filter,index) in cfg.filters" v-if="filter.checked">
|
||||
<div class="input-group item" style="padding-top: 3px">
|
||||
<span class="input-group-addon" style="max-width: 130px;">{{filter.label}}</span>
|
||||
<select class="form-control" v-model="filter['type']" style="width: 95px;">
|
||||
@@ -75,12 +75,12 @@
|
||||
</div>
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="col-md-12" style="padding-top: 10px;overflow:auto;">
|
||||
<div class="col-xs-12" style="padding-top: 10px;overflow:auto;">
|
||||
<table class="table table-bordered table-hover" style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<!-- 'sort':field.order>0 -->
|
||||
<th>操作</th>
|
||||
<!--<th>操作</th>-->
|
||||
<th v-for="field in cfg.shows"
|
||||
v-if="field.inType != 'HIDDEN'"
|
||||
v-text="field.label || getFieldLabel(field.col)"
|
||||
@@ -93,11 +93,11 @@
|
||||
<!--
|
||||
<td v-for="field in cfg.shows" v-title="dealFieldFmt(row, field.col)" v-text="dealFieldFmt(row, field.col)"></td>
|
||||
-->
|
||||
<td>
|
||||
<!--<td>
|
||||
<a href="javascript:;" @click="detailData=row; detail()">详情</a>
|
||||
<a href="javascript:;" @click="detailData=row; edit()">编辑</a>
|
||||
<a href="javascript:;" @click="detailData=row; del()">删除</a>
|
||||
</td>
|
||||
</td>-->
|
||||
<td v-for="field in cfg.shows"
|
||||
v-if="field.inType != 'HIDDEN'"
|
||||
v-title="dealFieldFmt(row, field)"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-2 sheet-cell">
|
||||
<div class="col-md-3 col-xs-4 sheet-cell">
|
||||
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 实体表(Meta-Table)</div>
|
||||
<ul class="nav nav-tabs nav-stacked tlist" style="height: 100%">
|
||||
<li :class="[{'active': aliasA == item.alias}]" v-for="item in tables" >
|
||||
@@ -32,7 +32,7 @@
|
||||
</ul>
|
||||
<!--<p v-show="ckTable && ckTable.length">已选择 <code v-text="ckTable.length||0"></code> 个实体待导入</p>-->
|
||||
</div>
|
||||
<div class="col-xs-10">
|
||||
<div class="col-md-9 col-xs-8">
|
||||
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 已关联的表 </div>
|
||||
<!-- 关联表列表 -->
|
||||
<button v-for="link in linkInfos" @click="aliasB=link.alias" :class="['btn', {'btn-primary' :aliasB==link.alias}]" style="margin: 5px">
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
}*/
|
||||
</style>
|
||||
<row class="meta-service">
|
||||
<div class="col-md-12">
|
||||
<div class="col-xs-12">
|
||||
<div class="info" style="padding-left: 10px">
|
||||
<a @click="showInfo()" href="javascript:;"><i class="icon icon-info"></i></a>
|
||||
</div>
|
||||
@@ -123,7 +123,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-2">
|
||||
<div class="col-xs-2">
|
||||
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 业务相关表</div>
|
||||
<ul class="nav nav-tabs nav-stacked tlist">
|
||||
<li @click="sheet=item" :class="[{active: sheet==item }]" v-for="item in sheetArr">
|
||||
@@ -133,7 +133,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 实体字段信息 -->
|
||||
<div class="col-md-4" style="padding-left: 0px;">
|
||||
<div class="col-xs-4" style="padding-left: 0px;">
|
||||
<div style="padding-left: 10px;background-color: #ccc;"> 字段信息</div>
|
||||
<table class="table table-bordered">
|
||||
<tr>
|
||||
@@ -164,7 +164,7 @@
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6" style="padding-left: 0px;padding-right: 0px;">
|
||||
<div class="col-xs-6" style="padding-left: 0px;padding-right: 0px;">
|
||||
<!-- shows -->
|
||||
<div id="show" v-show="status==5">
|
||||
<div style="padding-left: 10px;background-color: #ccc;"> 列表配置</div>
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
<div class="row" v-show="tableName">
|
||||
<div class="col-xs-2 sheet-cell">
|
||||
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> DB-Table</div>
|
||||
<ul class="nav nav-tabs nav-stacked tlist" style="height: 100%">
|
||||
<ul class="nav nav-tabs nav-stacked tlist" style="height: 90%">
|
||||
<li class="checkbox-inline clearfix" v-for="item in tableArr" >
|
||||
<!-- || tableData[item]['hv']==1 -->
|
||||
<input type="checkbox"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-12">
|
||||
<div class="col-md-12 col-xs-12">
|
||||
<div class="input-group list-head">
|
||||
<div class="pull-left">
|
||||
<span class="input-group-btn">
|
||||
@@ -51,7 +51,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 实体列表 -->
|
||||
<div class="col-md-2">
|
||||
<div class="col-md-3 col-xs-4">
|
||||
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 实体表(Meta-Table)</div>
|
||||
<ul class="nav nav-tabs nav-stacked tlist" style="height: 100%">
|
||||
<li :class="['clearfix',{'active':alias==item.alias}]" v-for="item in tables" >
|
||||
@@ -60,7 +60,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="col-md-10">
|
||||
<div class="col-md-9 col-xs-8">
|
||||
<!-- 实体属性列表 -->
|
||||
<div class="panel" v-show="status!=7 && status!=8">
|
||||
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 实体字段信息</div>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="col-md-12">
|
||||
<h3>QTask - [测试用例]</h3>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-xs-6">
|
||||
<div class="input-group">
|
||||
<span class="input-group-btn">
|
||||
<a href="javascript:;" class="btn" type="button"> 选择QTask任务</a>
|
||||
@@ -57,7 +57,7 @@
|
||||
<button @click="query(row)" type="button" class="btn btn-primary">RUN</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="col-xs-6">
|
||||
<h5>查询结果:</h5>
|
||||
<pre class="layui-code" v-show="result" v-text="result"></pre>
|
||||
</div>
|
||||
|
||||
@@ -60,9 +60,9 @@ public class BaseServlet extends HttpServlet {
|
||||
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With")) || (accept != null && accept.contains("application/json"))) {
|
||||
response.finish(JBean.by(-2, "未登陆"));
|
||||
} else {
|
||||
response.setStatus(302);
|
||||
//response.setStatus(302);
|
||||
response.setHeader("location", "/user/login.html");
|
||||
response.finish();
|
||||
response.finish304();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,21 +1,26 @@
|
||||
package net.tccn.base;
|
||||
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
|
||||
import javax.persistence.Id;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* Created by liangxianyou@eversec.cn at 2018/3/12 14:17.
|
||||
*/
|
||||
public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
|
||||
protected static final JsonConvert convert = JsonConvert.root();
|
||||
|
||||
public static Kv of() {
|
||||
return new Kv();
|
||||
}
|
||||
@@ -24,6 +29,16 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
return new Kv().set(k, v);
|
||||
}
|
||||
|
||||
private static Predicate<Class> isNumber = (t) -> {
|
||||
return t == Integer.class || t == int.class
|
||||
|| t == Long.class || t == long.class
|
||||
|| t == Float.class || t == float.class
|
||||
|| t == Double.class || t == double.class
|
||||
|| t == Short.class || t == short.class
|
||||
|| t == Byte.class || t == byte.class
|
||||
;
|
||||
};
|
||||
|
||||
public Kv<K, V> set(K k, V v) {
|
||||
put(k, v);
|
||||
return this;
|
||||
@@ -34,9 +49,30 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
return this;
|
||||
}
|
||||
|
||||
public static Kv filter(Map<String, String> map, String... fields) {
|
||||
Kv kv = Kv.of();
|
||||
if (fields == null || fields.length == 0 || map == null) {
|
||||
return kv;
|
||||
}
|
||||
|
||||
for (String field : fields) {
|
||||
if (field.contains("->")) {
|
||||
String[] arr = field.split("->");
|
||||
kv.put(arr[1], map.get(arr[0]));
|
||||
continue;
|
||||
}
|
||||
|
||||
kv.put(field, map.get(field));
|
||||
}
|
||||
return kv;
|
||||
}
|
||||
|
||||
// 将obj 属性映射到Kv 中
|
||||
public static Kv toKv(Object m, String... fields) {
|
||||
Kv kv = Kv.of();
|
||||
if (m == null) {
|
||||
return kv;
|
||||
}
|
||||
Stream.of(fields).forEach(field -> {
|
||||
String filedT = field;
|
||||
String filedS = field;
|
||||
@@ -48,7 +84,7 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
filedS = arr[1];
|
||||
}
|
||||
|
||||
Method method = m.getClass().getDeclaredMethod("get" + Utils.toUpperCaseFirst(filedS));
|
||||
Method method = m.getClass().getMethod("get" + Utils.toUpperCaseFirst(filedS));
|
||||
if (method != null) {
|
||||
kv.set(filedT, method.invoke(m));
|
||||
}
|
||||
@@ -64,24 +100,8 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
return toKv(m, Kv.of(), m.getClass());
|
||||
}
|
||||
|
||||
private static Kv toKv(Object m, Kv kv, Class clazz) {
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
for (Field field : fields) {
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
if (!kv.containsKey(field.getName())) {
|
||||
kv.set(field.getName(), field.get(m));
|
||||
}
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
Class superclass = clazz.getSuperclass();
|
||||
if (superclass != null) {
|
||||
kv = toKv(m, kv, superclass);
|
||||
}
|
||||
return kv;
|
||||
public static <T> List<Kv> toKv(Collection<T> datas, String... fields) {
|
||||
return datas.stream().map(x -> toKv(x, fields)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public <T> T toBean(Class<T> type) {
|
||||
@@ -93,28 +113,65 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
return s.substring(0, 1).toUpperCase() + s.substring(1);
|
||||
};
|
||||
|
||||
private static Predicate<Class> isNumber = (t) -> {
|
||||
return t == Integer.class || t == int.class
|
||||
|| t == Long.class || t == long.class
|
||||
|| t == float.class || t == Float.class
|
||||
|| t == Double.class || t == double.class
|
||||
|| t == Short.class || t == short.class
|
||||
|| t == Byte.class || t == byte.class
|
||||
;
|
||||
};
|
||||
private static Kv toKv(Object m, Kv kv, Class clazz) {
|
||||
if (m instanceof Map) {
|
||||
kv.putAll((Map) m);
|
||||
return kv;
|
||||
}
|
||||
|
||||
Method[] methods = clazz.getMethods();
|
||||
for (Method method : methods) {
|
||||
if (!method.getName().startsWith("get") || method.getParameterCount() > 0 || "getClass".equals(method.getName()))
|
||||
continue;
|
||||
|
||||
String k = toLowerCaseFirst(method.getName().replaceFirst("get", ""));
|
||||
if (!kv.containsKey(k) || Utils.isEmpty(kv.get(k))) {
|
||||
try {
|
||||
kv.set(k, method.invoke(m));
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (Field field : clazz.getDeclaredFields()) {
|
||||
if (field.getAnnotation(Id.class) != null) {
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
kv.set("_id", field.get(m));
|
||||
break;
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Class superclass = clazz.getSuperclass();
|
||||
if (superclass != null) {
|
||||
kv = toKv(m, kv, superclass);
|
||||
}
|
||||
return kv;
|
||||
}
|
||||
|
||||
public static <T> T toAs(Object v, Class<T> clazz) {
|
||||
if (v == null) {
|
||||
return null;
|
||||
} else if (v.getClass() == clazz) {
|
||||
} else if (v.getClass() == clazz) { // 类型一致返回
|
||||
return (T) v;
|
||||
} else if (clazz == String.class) {
|
||||
} else if (clazz == String.class) { // 目标类型 Sting
|
||||
return (T) String.valueOf(v);
|
||||
} else if (clazz == Kv.class) { // 目标类型 Kv
|
||||
return (T) Kv.toKv(v);
|
||||
} else if (clazz.isInstance(v)) {
|
||||
return clazz.cast(v);
|
||||
} else if (v instanceof Map) { // 源类型 Map
|
||||
return Kv.toBean((Map) v, clazz);
|
||||
}
|
||||
|
||||
Object v1 = v;
|
||||
try {
|
||||
|
||||
if (v.getClass() == Long.class) {//多种数值类型的处理: Long => x
|
||||
switch (clazz.getSimpleName()) {
|
||||
case "int", "Integer" -> v1 = (int) (long) v;
|
||||
@@ -168,19 +225,21 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
}
|
||||
|
||||
public static <T> T toBean(Map map, Class<T> clazz) {
|
||||
//按照方法名 + 类型寻找,
|
||||
//按照方法名 + 类型寻找,
|
||||
//按照方法名 寻找
|
||||
//+
|
||||
Object obj = null;
|
||||
try {
|
||||
obj = clazz.newInstance();
|
||||
} catch (InstantiationException | IllegalAccessException e) {
|
||||
obj = clazz.getDeclaredConstructor().newInstance();
|
||||
} catch (InstantiationException | IllegalAccessException | InvocationTargetException |
|
||||
NoSuchMethodException e) {
|
||||
new IllegalArgumentException("创建对象实列失败", e); // 检查clazz是否有无参构造
|
||||
}
|
||||
|
||||
for (String k : (Set<String>) map.keySet()) {
|
||||
Object v = map.get(k);
|
||||
if (v == null) continue;
|
||||
//寻找method
|
||||
try {
|
||||
String methodName = "set" + upFirst.apply(k);
|
||||
Class tClazz = null;
|
||||
@@ -212,8 +271,8 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
method.invoke(obj, toAs(v, tClazz));
|
||||
}
|
||||
|
||||
//没有方法,找属性注解
|
||||
if (method == null) {
|
||||
//没有方法,找属性注解
|
||||
/*if (method == null) {
|
||||
Field field = null;
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
for (Field _field : fields) {
|
||||
@@ -229,7 +288,7 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
field.setAccessible(true);
|
||||
field.set(obj, toAs(v, tClazz));
|
||||
}
|
||||
}
|
||||
}*/
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -238,5 +297,65 @@ public class Kv<K, V> extends LinkedHashMap<K, V> {
|
||||
return (T) obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将字符串第一个字母转大写
|
||||
*
|
||||
* @param str 待转换字符串
|
||||
* @return
|
||||
*/
|
||||
public static String toUpperCaseFirst(String str) {
|
||||
Objects.requireNonNull(str);
|
||||
return str.substring(0, 1).toUpperCase() + str.substring(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将字符串第一个字母转小写
|
||||
*
|
||||
* @param str 待转换字符串
|
||||
* @return
|
||||
*/
|
||||
public static String toLowerCaseFirst(String str) {
|
||||
Objects.requireNonNull(str);
|
||||
return str.substring(0, 1).toLowerCase() + str.substring(1);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return convert.convertTo(this);
|
||||
}
|
||||
|
||||
public int getInt(String key) {
|
||||
return toAs(get(key), int.class);
|
||||
}
|
||||
|
||||
public int getInt(String key, int defaultValue) {
|
||||
V v = get(key);
|
||||
if (v == null) {
|
||||
return defaultValue;
|
||||
}
|
||||
return toAs(v, int.class);
|
||||
}
|
||||
|
||||
public long getLong(String key) {
|
||||
return toAs(get(key), Long.class);
|
||||
}
|
||||
|
||||
public long getLong(String key, long defaultValue) {
|
||||
V v = get(key);
|
||||
if (v == null) {
|
||||
return defaultValue;
|
||||
}
|
||||
return toAs(v, long.class);
|
||||
}
|
||||
|
||||
public String getStr(String key) {
|
||||
return toAs(get(key), String.class);
|
||||
}
|
||||
|
||||
public String getStr(String key, String defaultValue) {
|
||||
V v = get(key);
|
||||
if (v == null) {
|
||||
return defaultValue;
|
||||
}
|
||||
return toAs(v, String.class);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,11 @@
|
||||
package net.tccn.base;
|
||||
|
||||
import net.tccn.base.dbq.jdbc.api.DbSource;
|
||||
import net.tccn.base.dbq.jdbc.api.DbSourceMysql;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -112,4 +113,102 @@ public class Utils {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static String fmt36(int n) {
|
||||
return Integer.toString(n, 36);
|
||||
}
|
||||
|
||||
public static String fmt36(long n) {
|
||||
return Long.toString(n, 36);
|
||||
}
|
||||
|
||||
public static <T, V> Map<T, V> toMap(Collection<V> list, Function<V, T> fun) {
|
||||
Map<T, V> map = new HashMap<>(list.size());
|
||||
for (V v : list) {
|
||||
if (v == null) {
|
||||
continue;
|
||||
}
|
||||
map.put(fun.apply(v), v);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public static <T, V, T2> Map<T, T2> toMap(Collection<V> list, Function<V, T> fun, Function<V, T2> fun2) {
|
||||
Map<T, T2> map = new HashMap<>(list.size());
|
||||
for (V v : list) {
|
||||
if (v == null) {
|
||||
continue;
|
||||
}
|
||||
map.put(fun.apply(v), fun2.apply(v));
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public static <T, V> List<V> toList(Collection<T> list, Function<T, V> fun) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<V> list1 = new ArrayList<>();
|
||||
list.forEach(x -> list1.add(fun.apply(x)));
|
||||
return list1;
|
||||
}
|
||||
|
||||
public static <T, V> Set<V> toSet(Collection<T> list, Function<T, V> fun) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return new HashSet<>();
|
||||
}
|
||||
Set<V> set = new HashSet<>(list.size());
|
||||
list.forEach(x -> set.add(fun.apply(x)));
|
||||
return set;
|
||||
}
|
||||
|
||||
public static <T> List<T> filter(Collection<T> list, Predicate<T> predicate) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<T> list1 = new ArrayList<>(list.size());
|
||||
list.forEach(x -> {
|
||||
if (!predicate.test(x)) {
|
||||
return;
|
||||
}
|
||||
|
||||
list1.add(x);
|
||||
});
|
||||
|
||||
return list1;
|
||||
}
|
||||
|
||||
public static <T, V> List<V> filterToList(Collection<T> list, Predicate<T> predicate, Function<T, V> fun) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<V> list1 = new ArrayList<>(list.size());
|
||||
|
||||
list.forEach(x -> {
|
||||
if (!predicate.test(x)) {
|
||||
return;
|
||||
}
|
||||
|
||||
list1.add(fun.apply(x));
|
||||
});
|
||||
|
||||
return list1;
|
||||
}
|
||||
|
||||
public static <T, V> Map<V, List<T>> group(Collection<T> list, Function<T, V> fun) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return new HashMap<>();
|
||||
}
|
||||
return list.stream().collect(Collectors.groupingBy(fun));
|
||||
}
|
||||
|
||||
public static <T, V, K> Map<V, List<K>> group(Collection<T> list, Function<T, V> fun, Function<T, K> fun2) {
|
||||
if (list == null || list.isEmpty()) {
|
||||
return new HashMap<>();
|
||||
}
|
||||
Map<V, List<T>> group = group(list, fun);
|
||||
Map<V, List<K>> _group = new HashMap<>();
|
||||
group.forEach((k, v) -> _group.put(k, toList(v, fun2)));
|
||||
return _group;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -251,6 +251,7 @@ public abstract class Doc<T extends Doc> {
|
||||
if (t == null) {
|
||||
t = (T) this;
|
||||
}
|
||||
// arangoSource.createDocument(this);
|
||||
return db.query(arangoSource.parseAqlCount(t), int.class).first();
|
||||
}
|
||||
//ok
|
||||
|
||||
@@ -30,7 +30,7 @@ public class DbExecutors {
|
||||
//System.out.printf("----------------%n countSql:%s%n findSql:%s%n----------------%n", sqls[0], sqls[1]);
|
||||
|
||||
CompletableFuture<Integer> countFuture = CompletableFuture.supplyAsync(() -> dbKit.findColumn(sqls[0], int.class));
|
||||
CompletableFuture<List<Map>> listFuture = CompletableFuture.supplyAsync(() -> dbKit.findList(sqls[1], Map.class));
|
||||
CompletableFuture<List<Map>> listFuture = CompletableFuture.supplyAsync(() -> dbKit.queryList(sqls[1], Map.class));
|
||||
|
||||
List<Map> rows = listFuture.get();
|
||||
Integer total = countFuture.get();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.base.dbq.fbean;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -8,7 +9,8 @@ import java.util.List;
|
||||
* 查询用实体
|
||||
* @author: liangxianyou at 2018/10/25 14:49.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class FBean {
|
||||
|
||||
private String platToken; // 平台token
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.base.dbq.fbean;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -8,7 +9,8 @@ import java.util.List;
|
||||
* 查询条件实体
|
||||
* Created by liangxianyou at 2018/12/14 15:34.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class Filter {
|
||||
private String col;
|
||||
private String value;
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package net.tccn.base.dbq.fbean;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* Created by liangxianyou at 2018/12/14 15:36.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class Limit {
|
||||
private int pn;
|
||||
private int ps;
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
package net.tccn.base.dbq.fbean;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by liangxianyou at 2018/12/14 15:36.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class Order {
|
||||
private String col;
|
||||
private int desc;//1 or -1
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.base.dbq.jdbc.api;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
import org.redkale.convert.ConvertColumn;
|
||||
|
||||
@@ -12,7 +13,8 @@ import java.util.List;
|
||||
*
|
||||
* @author: liangxianyou at 2018/11/14 12:58.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "MetaDb", catalog = "db_meta")
|
||||
public class DbAccount extends Doc<DbAccount> {
|
||||
public static DbAccount dao = dao(DbAccount.class);
|
||||
|
||||
@@ -61,13 +61,13 @@ public class DbKit implements DbSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> List<T> findList(String sql, Class<T> type) {
|
||||
return dbSource.findList(sql, type);
|
||||
public <T> List<T> queryList(String sql, Class<T> type) {
|
||||
return dbSource.queryList(sql, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T findFirst(String sql, Class<T> type) {
|
||||
return dbSource.findFirst(sql, type);
|
||||
public <T> T find(String sql, Class<T> type) {
|
||||
return dbSource.find(sql, type);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -85,20 +85,20 @@ public class DbKit implements DbSource {
|
||||
dbSource.dropTable(tableName);
|
||||
}
|
||||
|
||||
public void exetute(String sql) {
|
||||
dbSource.exetute(sql);
|
||||
public boolean exetute(String sql) {
|
||||
return dbSource.exetute(sql);
|
||||
}
|
||||
|
||||
// -----------------------------------------
|
||||
public <T> CompletableFuture<T> findfirstAsync(String sql, Class<T> type) {
|
||||
return CompletableFuture.supplyAsync(() -> findFirst(sql, type));
|
||||
public <T> CompletableFuture<T> findAsync(String sql, Class<T> type) {
|
||||
return CompletableFuture.supplyAsync(() -> find(sql, type));
|
||||
}
|
||||
|
||||
public <T> CompletableFuture<List<T>> findListAsync(String sql, Class<T> type) {
|
||||
return CompletableFuture.supplyAsync(() -> findList(sql, type));
|
||||
public <T> CompletableFuture<List<T>> queryListAsync(String sql, Class<T> type) {
|
||||
return CompletableFuture.supplyAsync(() -> queryList(sql, type));
|
||||
}
|
||||
|
||||
public <T> CompletableFuture<T> queryColumnAsync(String sql, Class<T> type) {
|
||||
public <T> CompletableFuture<T> findColumnAsync(String sql, Class<T> type) {
|
||||
return CompletableFuture.supplyAsync(() -> findColumn(sql, type));
|
||||
}
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ public interface DbSource extends IService {
|
||||
void setDbAccount(DbAccount dbAccount);
|
||||
void setCatalog(String catelog);
|
||||
|
||||
<T> List<T> findList(String sql, Class<T> type);
|
||||
<T> List<T> queryList(String sql, Class<T> type);
|
||||
|
||||
<T> T findFirst(String sql, Class<T> type);
|
||||
<T> T find(String sql, Class<T> type);
|
||||
|
||||
<T> T findColumn(String sql, Class<T> type);
|
||||
|
||||
@@ -25,21 +25,21 @@ public interface DbSource extends IService {
|
||||
//待实现
|
||||
default <T> void update(String tableName, T t) {}
|
||||
|
||||
default int queryInt(String sql) {
|
||||
default int findInt(String sql) {
|
||||
return findColumn(sql, int.class);
|
||||
}
|
||||
default long queryLong(String sql) {
|
||||
default long findLong(String sql) {
|
||||
return findColumn(sql, long.class);
|
||||
}
|
||||
default double queryDouble(String sql) {
|
||||
default double findDouble(String sql) {
|
||||
return findColumn(sql, double.class);
|
||||
}
|
||||
default Date queryDate(String sql) {
|
||||
default Date findDate(String sql) {
|
||||
return findColumn(sql, Date.class);
|
||||
}
|
||||
|
||||
void createTable(String sql);
|
||||
void dropTable(String tableName);
|
||||
|
||||
void exetute(String sql);
|
||||
boolean exetute(String sql);
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ public class DbSourceMysql implements DbSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> List<T> findList(String sql, Class<T> type) {
|
||||
public <T> List<T> queryList(String sql, Class<T> type) {
|
||||
Connection connection = connection();
|
||||
try (
|
||||
PreparedStatement ps = connection.prepareStatement(sql);
|
||||
@@ -83,7 +83,7 @@ public class DbSourceMysql implements DbSource {
|
||||
}
|
||||
}
|
||||
}
|
||||
list.add(Map.class == type ? row : Kv.toBean(row, type));
|
||||
list.add(Kv.toAs(row, type));
|
||||
}
|
||||
|
||||
return list;
|
||||
@@ -97,8 +97,8 @@ public class DbSourceMysql implements DbSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T findFirst(String sql, Class<T> type) {
|
||||
List<T> list = findList(sql, type);
|
||||
public <T> T find(String sql, Class<T> type) {
|
||||
List<T> list = queryList(sql, type);
|
||||
return list.size() > 0 ? list.get(0) : null;
|
||||
}
|
||||
|
||||
@@ -150,12 +150,12 @@ public class DbSourceMysql implements DbSource {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exetute(String sql) {
|
||||
public boolean exetute(String sql) {
|
||||
Connection connection = connection();
|
||||
try (
|
||||
PreparedStatement ps = connection.prepareStatement(sql);
|
||||
) {
|
||||
ps.execute();
|
||||
return ps.execute();
|
||||
//ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
throw new CfgException("SQL 执行失败:", sql);
|
||||
@@ -166,50 +166,31 @@ public class DbSourceMysql implements DbSource {
|
||||
|
||||
//fixme: lxy 处理连接超过8小时失效问题
|
||||
private Connection connection() {
|
||||
Connection connection = connection(0);
|
||||
if (connection != null && catalog != null && !catalog.isEmpty()) {
|
||||
Connection connection = null;
|
||||
try {
|
||||
connection = connection(0);
|
||||
if (catalog != null && !catalog.isEmpty()) {
|
||||
connection.setCatalog(catalog); //还回连接的时候是否需要重置catalog? 后续观察
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} catch (InterruptedException | SQLException e) {
|
||||
new IllegalArgumentException("获取连接失败", e);
|
||||
}
|
||||
return connection;
|
||||
}
|
||||
|
||||
private Connection connection(int n) {
|
||||
private synchronized Connection connection(int n) throws InterruptedException, SQLException {
|
||||
LinkedBlockingQueue<Connection> queue = conns.getOrDefault(accountKey, new LinkedBlockingQueue<>(15));
|
||||
|
||||
Connection conn = null;
|
||||
AtomicInteger num = counter.getOrDefault(accountKey, new AtomicInteger(0));
|
||||
try {
|
||||
if (queue.size() == 0 && num.get() < 15) {
|
||||
if (queue.size() == 0 && num.get() < 15) { // 创建总连接数小于15,且暂无可用连接
|
||||
conn = DriverManager.getConnection(dbAccount.getUrl(), dbAccount.getUser(), dbAccount.getPwd());
|
||||
int x = num.incrementAndGet();
|
||||
counter.put(accountKey, num);
|
||||
System.out.println("创建新的连接:" + x);
|
||||
} else {
|
||||
conn = queue.take();
|
||||
if (conn.isClosed()) {
|
||||
System.out.println("connetion had closed,");
|
||||
conn = connection(n);
|
||||
}
|
||||
}
|
||||
} catch (SQLException | InterruptedException e) {
|
||||
if (e instanceof InterruptedException) {
|
||||
try {
|
||||
conn = DriverManager.getConnection(dbAccount.getUrl(), dbAccount.getUser(), dbAccount.getPwd());
|
||||
num.getAndIncrement();
|
||||
if (conn != null) {
|
||||
System.out.println("获取连接异常,并重新创建成功");
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
new IllegalArgumentException("创建连接失败", e);
|
||||
}
|
||||
num.getAndIncrement();
|
||||
counter.put(accountKey, num);
|
||||
} else {
|
||||
new IllegalArgumentException("获取连接失败", e);
|
||||
if (!conn.isValid(5)) {
|
||||
conn = connection(++n);
|
||||
}
|
||||
}
|
||||
conns.put(accountKey, queue);
|
||||
|
||||
@@ -87,7 +87,7 @@ public class ParseMysql implements Parser {
|
||||
|
||||
//from
|
||||
StringBuilder bufFrom = new StringBuilder();
|
||||
bufFrom.append(" from ").append(metaTable.getCatalog()).append(".`").append(metaTable.getName()).append("` `").append(metaTable.getAlias()).append("`");
|
||||
bufFrom.append(" from `").append(metaTable.getCatalog()).append("`.`").append(metaTable.getName()).append("` `").append(metaTable.getAlias()).append("`");
|
||||
//left join
|
||||
if (!Utils.isEmpty(links)) {
|
||||
links.forEach(x -> {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.base.dbq.qtask;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
|
||||
import javax.persistence.Table;
|
||||
@@ -8,7 +9,8 @@ import javax.persistence.Table;
|
||||
/**
|
||||
* @author: liangxianyou at 2018/11/13 14:59.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "DbTask", catalog = "db_meta")
|
||||
public class DbTask extends Doc<DbTask> {
|
||||
public static DbTask dao = dao(DbTask.class);
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package net.tccn.base.dbq.table;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 数据库表的列
|
||||
* @author: liangxianyou at 2018/10/8 10:59.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class Column {
|
||||
private String field; //列名称
|
||||
private String type; //列类型
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package net.tccn.base.dbq.table;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author: liangxianyou at 2018/10/17 17:24.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class Field {
|
||||
private String name;
|
||||
private String label;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
package net.tccn.base.dbq.table;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -10,7 +11,8 @@ import java.util.List;
|
||||
* 数据库表.
|
||||
* @author: liangxianyou at 2018/10/8 10:58.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class Table {
|
||||
private String catalog; //库名称
|
||||
private String name; //表名称
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.dict;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
|
||||
import javax.persistence.Table;
|
||||
@@ -9,7 +10,8 @@ import java.io.Serializable;
|
||||
/**
|
||||
* @author: liangxianyou
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "Dict", catalog = "db_meta")
|
||||
public class Dict extends Doc<Dict> implements Serializable {
|
||||
public static Dict dao = Doc.dao(Dict.class);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.meta;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -8,7 +9,8 @@ import java.util.Map;
|
||||
/**
|
||||
* @author: liangxianyou
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class Filter {
|
||||
private String name;
|
||||
private String label;
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
package net.tccn.meta;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author: liangxianyou
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class FromItem {
|
||||
private String col;
|
||||
private String label;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.meta;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
|
||||
import javax.persistence.Table;
|
||||
@@ -9,7 +10,8 @@ import java.util.Map;
|
||||
/**
|
||||
* Created by liangxianyou at 2018/12/25 16:22.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "MetaLink", catalog = "db_meta")
|
||||
public class MetaLink extends Doc<MetaLink> {
|
||||
public static MetaLink dao = Doc.dao(MetaLink.class);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.meta;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
|
||||
import javax.persistence.Table;
|
||||
@@ -12,7 +13,8 @@ import java.util.Map;
|
||||
/**
|
||||
* Created by liangxianyou at 2018/12/24 16:15.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "MetaService", catalog = "db_meta")
|
||||
public class MetaService extends Doc<MetaService> {
|
||||
public static MetaService dao = Doc.dao(MetaService.class);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.meta;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
import net.tccn.base.dbq.table.Field;
|
||||
|
||||
@@ -15,7 +16,8 @@ import java.util.stream.Collectors;
|
||||
*
|
||||
* @author: liangxianyou at 2018/10/17 12:58.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "MetaTable", catalog = "db_meta")
|
||||
public class MetaTable extends Doc<MetaTable> implements Serializable {
|
||||
public static final MetaTable dao = MetaTable.dao(MetaTable.class);
|
||||
@@ -27,6 +29,7 @@ public class MetaTable extends Doc<MetaTable> implements Serializable {
|
||||
private String sysPlatId; //所属系统平台
|
||||
private String dbPlatId; //所属数据平台
|
||||
private String catalog; //所在database
|
||||
private Integer status; //状态 0 默认, 9删除
|
||||
|
||||
private Integer hv;//临时
|
||||
// ------------------------------------------------
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package net.tccn.meta;
|
||||
|
||||
import net.tccn.base.BaseService;
|
||||
import net.tccn.base.JBean;
|
||||
import net.tccn.base.Kv;
|
||||
import net.tccn.base.MetaKit;
|
||||
import net.tccn.base.*;
|
||||
import net.tccn.base.dbq.table.Field;
|
||||
import net.tccn.plat.MetaPlat;
|
||||
import org.redkale.net.http.RestMapping;
|
||||
@@ -29,7 +26,8 @@ public class MetadataService extends BaseService { //arango
|
||||
-> (isEmpty(catalog) || catalog.equals(x.getCatalog())) &&
|
||||
(isEmpty(dbPlatId) || dbPlatId.equals(x.getDbPlatId())) &&
|
||||
(isEmpty(name) || x.getName().contains(name)) &&
|
||||
(isEmpty(token) || x.getSysPlatId().equals(platId(token)))
|
||||
(isEmpty(token) || x.getSysPlatId().equals(platId(token))) &&
|
||||
(isEmpty(x.getStatus()) || x.getStatus() != 9)
|
||||
).map(x -> Kv.of("name", x.getName())
|
||||
.set("comment", x.getComment())
|
||||
.set("catalog", x.getCatalog())
|
||||
@@ -139,7 +137,7 @@ public class MetadataService extends BaseService { //arango
|
||||
|
||||
@RestMapping(name = "showsort", comment = "展示字段修改")
|
||||
public JBean showSort(String name, List<Map<String, String>> shows, @RestParam(name = "platToken") String token) {
|
||||
if (shows == null || shows.size() == 0) return null;
|
||||
if (Utils.isEmpty(shows)) return null;
|
||||
|
||||
MetaService metaService = MetaKit.getMetaService(name, token);
|
||||
metaService.setShows(shows);
|
||||
@@ -149,7 +147,7 @@ public class MetadataService extends BaseService { //arango
|
||||
|
||||
@RestMapping(name = "exportsave", comment = "导出配置保存")
|
||||
public JBean exportSave(String name, List<Map<String, String>> exports, @RestParam(name = "platToken") String token) {
|
||||
if (exports == null || exports.size() == 0) return null;
|
||||
if (Utils.isEmpty(exports)) return null;
|
||||
|
||||
MetaService metaService = MetaKit.getMetaService(name, token);
|
||||
metaService.setExports(exports);
|
||||
@@ -160,7 +158,7 @@ public class MetadataService extends BaseService { //arango
|
||||
|
||||
@RestMapping(name = "detailsave", comment = "详情配置保存")
|
||||
public JBean detailSave(String name, List<Map<String, String>> details, @RestParam(name = "platToken") String token) {
|
||||
if (details == null || details.size() == 0) return null;
|
||||
if (Utils.isEmpty(details)) return null;
|
||||
|
||||
MetaService metaService = MetaKit.getMetaService(name, token);
|
||||
metaService.setDetails(details);
|
||||
@@ -171,7 +169,7 @@ public class MetadataService extends BaseService { //arango
|
||||
|
||||
@RestMapping(name = "editsave", comment = "表单配置保存")
|
||||
public JBean editSave(String name, List<FromItem> edits, @RestParam(name = "platToken") String token) {
|
||||
if (edits == null || edits.size() == 0) return null;
|
||||
if (Utils.isEmpty(edits)) return null;
|
||||
|
||||
MetaService metaService = MetaKit.getMetaService(name, token);
|
||||
metaService.setEdits(edits);
|
||||
@@ -182,7 +180,7 @@ public class MetadataService extends BaseService { //arango
|
||||
|
||||
@RestMapping(name = "delsave", comment = "删除配置保存")
|
||||
public JBean delSave(String name, Map<String, String> dels, @RestParam(name = "platToken") String token) {
|
||||
if (dels == null || dels.size() == 0) return null;
|
||||
if (Utils.isEmpty(dels)) return null;
|
||||
|
||||
MetaService metaService = MetaKit.getMetaService(name, token);
|
||||
metaService.setDels(dels);
|
||||
@@ -193,7 +191,7 @@ public class MetadataService extends BaseService { //arango
|
||||
|
||||
@RestMapping(name = "importsort", comment = "导入字段保存")
|
||||
public JBean importSort(String serviceKey, List<String> items, @RestParam(name = "platToken") String token) {
|
||||
if (isEmpty(items)) return null;
|
||||
if (Utils.isEmpty(items)) return null;
|
||||
|
||||
MetaTable metaTable = MetaKit.getMetaTable(serviceKey, token);
|
||||
//fixme: metaTable.setImports(items);
|
||||
@@ -230,8 +228,9 @@ public class MetadataService extends BaseService { //arango
|
||||
JBean jBean = new JBean();
|
||||
|
||||
List<Kv> list = MetaKit.getMetaTables().stream()
|
||||
.filter(x -> (isEmpty(token) || x.getSysPlatId().equals(platId(token))))
|
||||
.map(x -> {
|
||||
.filter(x -> (isEmpty(token) || x.getSysPlatId().equals(platId(token)))
|
||||
&& (x.getStatus() == null || x.getStatus() != 9)
|
||||
).map(x -> {
|
||||
Kv kv = Kv.of("name", x.getName())
|
||||
.set("comment", x.getComment())
|
||||
.set("alias", x.getAlias())
|
||||
@@ -277,9 +276,7 @@ public class MetadataService extends BaseService { //arango
|
||||
List<MetaLink> links = MetaKit.getMetaLinks();
|
||||
|
||||
if (!isEmpty(alias)) {
|
||||
links = links.stream()
|
||||
.filter(x -> x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias))
|
||||
.collect(Collectors.toList());
|
||||
links = Utils.filter(links, x -> x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias));
|
||||
}
|
||||
|
||||
return jBean.setBody(links);
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
package net.tccn.plat;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
import org.redkale.convert.ConvertColumn;
|
||||
|
||||
import javax.persistence.Table;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据库平台
|
||||
* @author: liangxianyou at 2018/11/14 12:58.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "MetaDb", catalog = "db_meta")
|
||||
public class MetaDb extends Doc<MetaDb> {
|
||||
public static MetaDb dao = dao(MetaDb.class);
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
package net.tccn.plat;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
|
||||
import javax.persistence.Table;
|
||||
import org.redkale.persistence.Entity;
|
||||
import org.redkale.persistence.Table;
|
||||
|
||||
/**
|
||||
* @author: liangxianyou at 2018/11/26 17:46.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "MetaPlat", catalog = "db_meta")
|
||||
public class MetaPlat extends Doc<MetaPlat> {
|
||||
public static MetaPlat dao = dao(MetaPlat.class);
|
||||
|
||||
@@ -32,7 +32,7 @@ public class _DbService extends BaseService {
|
||||
dbKit = MetaKit.getDbKit(dbPlatId, "");
|
||||
}
|
||||
|
||||
List<Map> list = dbKit.findList("SHOW DATABASES;", Map.class);
|
||||
List<Map> list = dbKit.queryList("SHOW DATABASES;", Map.class);
|
||||
|
||||
Stream<String> database = list.stream().map(x -> String.valueOf(x.get("Database")));
|
||||
|
||||
@@ -44,7 +44,7 @@ public class _DbService extends BaseService {
|
||||
DbKit dbKit = MetaKit.getDbKit(dbPlatId, "");
|
||||
|
||||
String sql = tplKit.getTpl("db.table_list", Kv.of("catalog", catalog).set("tables", tables));
|
||||
return dbKit.findList(sql, Table.class);
|
||||
return dbKit.queryList(sql, Table.class);
|
||||
}
|
||||
|
||||
@RestMapping(ignore = true)
|
||||
@@ -77,8 +77,8 @@ public class _DbService extends BaseService {
|
||||
String sql = tplKit.getTpl("db.table_list", Kv.of("table", tableName));
|
||||
String columnSql = String.format("SHOW FULL COLUMNS FROM %s.`%s`", catalog, tableName);
|
||||
|
||||
CompletableFuture<Table> tableFuture = dbKit.findfirstAsync(sql, Table.class);
|
||||
CompletableFuture<List<Column>> columnFuture = dbKit.findListAsync(columnSql, Column.class);
|
||||
CompletableFuture<Table> tableFuture = dbKit.findAsync(sql, Table.class);
|
||||
CompletableFuture<List<Column>> columnFuture = dbKit.queryListAsync(columnSql, Column.class);
|
||||
|
||||
try {
|
||||
Table table = tableFuture.get();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.qtask;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.arango.Doc;
|
||||
|
||||
import javax.persistence.Table;
|
||||
@@ -8,7 +9,8 @@ import javax.persistence.Table;
|
||||
/**
|
||||
* Created by liangxianyou at 2019/4/20 20:04.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "DbTask", catalog = "db_meta")
|
||||
public class DbTask extends Doc<DbTask> {
|
||||
public static DbTask dao = dao(DbTask.class);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.qtask;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.Kv;
|
||||
import net.tccn.base.dbq.jdbc.api.DbAccount;
|
||||
|
||||
@@ -10,7 +11,8 @@ import net.tccn.base.dbq.jdbc.api.DbAccount;
|
||||
* |-
|
||||
* 任务对象
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
public class Task {
|
||||
|
||||
private String name; // 任务标识,同一系统唯一
|
||||
|
||||
@@ -58,6 +58,6 @@ public class QTaskMysql extends QTaskAbs implements QTask {
|
||||
dbKit.exetute(sql);
|
||||
}*/
|
||||
|
||||
return dbKit.findList(sql, Map.class);
|
||||
return dbKit.queryList(sql, Map.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.tccn.user;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import net.tccn.base.JBean;
|
||||
import net.tccn.base.arango.Doc;
|
||||
import org.redkale.util.Utility;
|
||||
@@ -10,7 +11,8 @@ import javax.persistence.Table;
|
||||
/**
|
||||
* @author: liangxianyou at 2018/11/22 17:37.
|
||||
*/
|
||||
@Data
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "MetaUser", catalog = "db_meta")
|
||||
public class MetaUser extends Doc<MetaUser> {
|
||||
public static MetaUser dao = dao(MetaUser.class);
|
||||
|
||||
Reference in New Issue
Block a user