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