.
This commit is contained in:
@@ -45,39 +45,54 @@ const meta = {
|
|||||||
getPlats: (callback) => {
|
getPlats: (callback) => {
|
||||||
red.getJSON("/meta/plat_list", {}, json => callback(json));
|
red.getJSON("/meta/plat_list", {}, json => callback(json));
|
||||||
},
|
},
|
||||||
getTableList: (callback) => {
|
getTableList(callback) {
|
||||||
red.getJSON("/meta/tablelist",{}, function (json) {
|
red.getJSON("/meta/tablelist",{}, json => callback(json));
|
||||||
callback(json);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
getTableDetail: ({name}, callback) => {
|
getTableDetail({name}, callback) {
|
||||||
red.getJSON("/meta/tableinfo",{name}, function (json) {
|
red.getJSON("/meta/tableinfo",{name}, json => callback(json));
|
||||||
callback(json);
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getServiceList: (callback) => {
|
getServiceList(callback) {
|
||||||
red.getJSON("/meta/service_list",{}, function (json) {
|
red.getJSON("/meta/service_list",{}, json => {
|
||||||
json = red.replacePoint(json);
|
json = red.replacePoint(json);
|
||||||
callback(json);
|
callback(json);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getServiceInfo: ({name}, callback) => {
|
getServiceInfo({name}, callback) {
|
||||||
red.getJSON("/meta/service_info",{name}, res => {
|
red.getJSON("/meta/service_info",{name}, res => {
|
||||||
let row = red.replacePoint(res);
|
/*let row = red.replacePoint(res)
|
||||||
|
console.log(row)
|
||||||
|
|
||||||
|
//let [name, comment, table, edits, imports, shows, exports, filters] = red.replacePoint(res);
|
||||||
|
|
||||||
|
|
||||||
row.shows = row.shows || [];
|
row.shows = row.shows || [];
|
||||||
row.exports = row.exports || [];
|
row.exports = row.exports || [];
|
||||||
row.imports = row.imports || [];
|
row.imports = row.imports || [];
|
||||||
row.filters = row.filters || [];
|
row.filters = row.filters || [];*/
|
||||||
|
|
||||||
callback(row);
|
let {name, comment, table, edits, imports, shows, exports, filters} = red.replacePoint(res)
|
||||||
|
|
||||||
|
callback({name, comment, table, edits, imports, shows, exports, filters});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getServiceDetail: ({name}, callback) => {
|
getServiceDetail({name}, callback) {
|
||||||
red.getJSON("/meta/service_detail",{name}, function (json) {
|
red.getJSON("/meta/service_detail",{name}, json => {
|
||||||
json = red.replacePoint(json)
|
json = red.replacePoint(json)
|
||||||
callback(json);
|
callback(json);
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
getCfg({name}, callback) {
|
||||||
|
red.getJSON("/meta/cfg",{name}, json => {
|
||||||
|
json = red.replacePoint(json)
|
||||||
|
callback(json);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
getDataList({name, filters, orders, limit}, callback) {
|
||||||
|
let fbean = red.replace$({name, filters, orders, limit})
|
||||||
|
red.getJSON("/data/list",{fBean: JSON.stringify(fbean)}, (json = {rows:[], total:0}) => {
|
||||||
|
callback(json)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
|
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button @click="findList" class="btn btn-primary" type="button"> 查询</button>
|
<button @click="findList()" class="btn btn-primary" type="button"> 查询</button>
|
||||||
</span>
|
</span>
|
||||||
<span class="input-group-btn" style="padding-left: 10px">
|
<span class="input-group-btn" style="padding-left: 10px">
|
||||||
<button @click="exportExcel" class="btn" type="button"> 导出</button>
|
<button @click="exportExcel" class="btn" type="button"> 导出</button>
|
||||||
@@ -32,17 +32,17 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="">
|
<div class="">
|
||||||
<div class="col-lg-4 col-md-6 col-xs-12" v-for="(x,index) in cfg.filters" v-if="x.checked">
|
<div class="col-lg-4 col-md-6 col-xs-12" v-for="(filter,index) in cfg.filters" v-if="filter.checked">
|
||||||
<div class="input-group item">
|
<div class="input-group item">
|
||||||
<span class="input-group-addon" style="width: 130px;">{{x.label}}</span>
|
<span class="input-group-addon" style="width: 130px;">{{filter.label}}</span>
|
||||||
<select class="form-control" :name="cfg.filters[index].name + '_cate'" style="width: 100px">
|
<select class="form-control" v-model="filter['type']" style="width: 100px">
|
||||||
<option v-for="t in x.filterType" :value="t.name">{{t.remark}}</option>
|
<option v-for="(t, index) in filter.filterType" :value="t.name" v-text="t.remark"></option>
|
||||||
</select>
|
</select>
|
||||||
<span class="input-group-addon fix-border fix-padding"></span>
|
<span class="input-group-addon fix-border fix-padding"></span>
|
||||||
<input type="text" class="form-control" v-model="para[cfg.filters[index].name]">
|
<input type="text" class="form-control" v-model="filter['value']">
|
||||||
|
|
||||||
<span class="input-group-addon fix-border fix-padding" style="padding: 5px" title="删除过滤条件">
|
<span class="input-group-addon fix-border fix-padding" style="padding: 5px" title="删除过滤条件">
|
||||||
<a href="javascript:;" @click="x.checked = false;"><i class="icon icon-trash"></i></a>
|
<a href="javascript:;" @click="filter.checked = false;"><i class="icon icon-trash"></i></a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -67,6 +67,9 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<div>
|
||||||
|
<p v-text="list['rows'][0]"></p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<ul class="pager pull-right" style="margin: 5px 10px">
|
<ul class="pager pull-right" style="margin: 5px 10px">
|
||||||
@@ -92,6 +95,7 @@
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
let {getServiceList, getCfg, getDataList} = meta;
|
||||||
var vm = new Vue({
|
var vm = new Vue({
|
||||||
el:".data-list",
|
el:".data-list",
|
||||||
data: {
|
data: {
|
||||||
@@ -107,50 +111,46 @@
|
|||||||
|
|
||||||
addFilter: "recompany",
|
addFilter: "recompany",
|
||||||
para: {},
|
para: {},
|
||||||
list: {rows:[], total:0},
|
list: {rows:[{listSql:"", countSql:""}], total:0},
|
||||||
limit: {pn: 1, ps: 10, total: 0},
|
limit: {pn: 1, ps: 10, total: 0},
|
||||||
order:{col:"id", desc:1}
|
order:{col:"id", desc:1}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
addFilter: function (v) {
|
addFilter(v) {
|
||||||
vm.cfg.filters.forEach(function (f) {
|
this.cfg.filters.forEach(function (f) {
|
||||||
if (f.name == v) {
|
if (f.name == v) {
|
||||||
f["checked"] = true;
|
f["checked"] = true;
|
||||||
vm.addFilter = "";
|
vm.addFilter = "";
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
table: function () {
|
service() {
|
||||||
vm.loadCfg();
|
this.loadCfg();
|
||||||
vm.limit = {pn: 1, ps: 10, total: 0};
|
this.limit = {pn: 1, ps: 10, total: 0};
|
||||||
vm.order = {col:"id", desc:1};
|
this.order = {col:"", desc:1};
|
||||||
vm.findList();
|
this.findList();
|
||||||
},
|
},
|
||||||
list: function () {
|
list () {
|
||||||
var limit = vm.limit;
|
let limit = this.limit;
|
||||||
var list = vm.list;
|
let list = this.list;
|
||||||
var total = parseInt(list.total/limit.ps) + (list.total%limit.ps > 0 ? 1 : 0);
|
let total = parseInt(list.total/limit.ps) + (list.total%limit.ps > 0 ? 1 : 0);
|
||||||
vm.limit["total"] = total;
|
this.limit["total"] = total;
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
findList: function () {
|
findList() {
|
||||||
var filters = [];
|
// filters
|
||||||
for (i in vm.cfg.filters) {
|
let filters = [];
|
||||||
var f = vm.cfg.filters[i]
|
//filters.push({col: "status", value: 9, type: "NOTEQUAL"});
|
||||||
if (f.checked && vm.para[f.name] != '') {
|
for (i in this.cfg.filters) {
|
||||||
var d = {};
|
let filter = this.cfg.filters[i];
|
||||||
d["col"] = f.name;
|
if (filter.checked && filter['value']) {
|
||||||
d["value"] = vm.para[f.name];
|
let {name: col, value, type} = filter;
|
||||||
d["type"] = $("select[name=" + f.name + "_cate]").val();
|
filters.push({col, value, type});
|
||||||
filters.push(d);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// orders
|
||||||
filters.push({col: "status", value: 9, type: "NOTEQUAL"});
|
let orders = [];
|
||||||
|
|
||||||
var orders = [];
|
|
||||||
//截取真实字段名,(考虑如果多表关联情况,是否需要加入真实字段名)
|
//截取真实字段名,(考虑如果多表关联情况,是否需要加入真实字段名)
|
||||||
if (vm.order.col) {
|
if (vm.order.col) {
|
||||||
var end = vm.order.col.indexOf("\|");
|
var end = vm.order.col.indexOf("\|");
|
||||||
@@ -165,18 +165,20 @@
|
|||||||
|
|
||||||
orders.push({col: col, desc: vm.order.desc});
|
orders.push({col: col, desc: vm.order.desc});
|
||||||
}
|
}
|
||||||
var fbean = {
|
|
||||||
keyService: vm.table,
|
// fbean
|
||||||
|
let fbean = {
|
||||||
|
name: this.service,
|
||||||
filters: filters,
|
filters: filters,
|
||||||
orders: orders,
|
orders: orders,
|
||||||
limit: vm.limit
|
limit: vm.limit,
|
||||||
}
|
};
|
||||||
red.getJSON("/db/list",{fBean: JSON.stringify(fbean)}, function (json) {
|
|
||||||
json = json || {rows:[], total:0};
|
getDataList(fbean, json => {
|
||||||
vm.list = json;
|
vm.list = json;
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
exportExcel: function () {
|
exportExcel() {
|
||||||
var data = [];
|
var data = [];
|
||||||
for (k in vm.para) {
|
for (k in vm.para) {
|
||||||
if (vm.para[k] != '') {
|
if (vm.para[k] != '') {
|
||||||
@@ -187,7 +189,7 @@
|
|||||||
data.push(d);
|
data.push(d);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
data.push({col: "status", value: 9, type: "NOTEQUAL"});
|
//data.push({col: "status", value: 9, type: "NOTEQUAL"});
|
||||||
|
|
||||||
var fBean = {
|
var fBean = {
|
||||||
keyService: vm.table,
|
keyService: vm.table,
|
||||||
@@ -198,18 +200,18 @@
|
|||||||
location.href = "/export/data?fBean=" + JSON.stringify(fBean) + "&platToken=" + red.getPlatToken() + "&cate=csv";
|
location.href = "/export/data?fBean=" + JSON.stringify(fBean) + "&platToken=" + red.getPlatToken() + "&cate=csv";
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
serviceList: function () {
|
serviceList() {
|
||||||
red.getJSON("/meta/service_list",{}, function (json) {
|
getServiceList(json => {
|
||||||
vm.services = json;
|
vm.services = json;
|
||||||
vm.service = vm.services[0].name;
|
vm.service = json[0].name;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
loadCfg: function () {
|
loadCfg() {
|
||||||
red.getJSON("/meta/cfg", {key: this.service, platToken: red.getPlatToken()}, function (json) {
|
getCfg({name: this.service}, json => {
|
||||||
vm.cfg = json;
|
vm.cfg = json;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
dealField: function (bean, field) {
|
dealField(bean, field) {
|
||||||
var str = "";
|
var str = "";
|
||||||
if (!bean || !field) {
|
if (!bean || !field) {
|
||||||
|
|
||||||
@@ -247,7 +249,7 @@
|
|||||||
|
|
||||||
return str;
|
return str;
|
||||||
},
|
},
|
||||||
sortEvent: function (col) {
|
sortEvent(col) {
|
||||||
if (vm.order.col == col) {
|
if (vm.order.col == col) {
|
||||||
vm.order.desc = -vm.order.desc
|
vm.order.desc = -vm.order.desc
|
||||||
} else {
|
} else {
|
||||||
@@ -257,7 +259,7 @@
|
|||||||
vm.findList();
|
vm.findList();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted: function () {
|
mounted() {
|
||||||
this.serviceList();
|
this.serviceList();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -308,7 +308,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!map[k]) {
|
if (!map[k]) {
|
||||||
map[k] = {name: k, filterType:[], checked: false};//构造filter 对象
|
map[k] = {name: k, filterType:["EQUAL"], checked: false};//构造filter 对象
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.filterMap = map;
|
this.filterMap = map;
|
||||||
|
|||||||
20
src/main/java/net/tccn/dbq/DbExecutors.java
Normal file
20
src/main/java/net/tccn/dbq/DbExecutors.java
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package net.tccn.dbq;
|
||||||
|
|
||||||
|
import net.tccn.base.Kv;
|
||||||
|
import net.tccn.base.PageBean;
|
||||||
|
import net.tccn.dbq.fbean.FBean;
|
||||||
|
import net.tccn.dbq.parser.ParseMysql;
|
||||||
|
import net.tccn.dbq.parser.Parser;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class DbExecutors {
|
||||||
|
private final static Parser PARSER = new ParseMysql();
|
||||||
|
|
||||||
|
public static PageBean findPage(FBean fBean) {
|
||||||
|
|
||||||
|
String[] sqls = PARSER.parse(fBean);
|
||||||
|
|
||||||
|
return PageBean.by(Arrays.asList(Kv.of("findSql:", sqls[0]).set("countSql", sqls[1]) ), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class FBean {
|
public class FBean {
|
||||||
|
|
||||||
private String name;
|
private String name;//service key
|
||||||
private List<Filter> filters;//[{f:xx, v: v, type:t}] -- t,
|
private List<Filter> filters;//[{f:xx, v: v, type:t}] -- t,
|
||||||
private List<Order> orders;//{f1: 1, f2: -1}
|
private List<Order> orders;//{f1: 1, f2: -1}
|
||||||
private Limit limit;//{pn: 1, ps: 10}
|
private Limit limit;//{pn: 1, ps: 10}
|
||||||
|
|||||||
@@ -38,13 +38,13 @@ public enum FilterType {
|
|||||||
String _sql;
|
String _sql;
|
||||||
switch (filterType) {
|
switch (filterType) {
|
||||||
case IN:
|
case IN:
|
||||||
_sql = String.format(" AND `%s` IN (%s)", filter.getCol(), filter.getValue());
|
_sql = String.format(" AND %s IN (%s)", filter.getCol(), filter.getValue());
|
||||||
break;
|
break;
|
||||||
case LIKE:
|
case LIKE:
|
||||||
_sql = String.format(" AND `%s` LIKE '%s'", filter.getCol(), "%" + filter.getValue() + "%");
|
_sql = String.format(" AND %s LIKE '%s'", filter.getCol(), "%" + filter.getValue() + "%");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
_sql = String.format(" AND `%s` %s '%s'", filter.getCol(), filterType.expre, filter.getValue());
|
_sql = String.format(" AND %s %s '%s'", filter.getCol(), filterType.expre, filter.getValue());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
package net.tccn.dbq.fbean;
|
package net.tccn.dbq.parser;
|
||||||
|
|
||||||
|
import net.tccn.dbq.fbean.FBean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by liangxianyou at 2018/12/24 15:49.
|
* Created by liangxianyou at 2018/12/24 15:49.
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
package net.tccn.dbq.fbean;
|
package net.tccn.dbq.parser;
|
||||||
|
|
||||||
|
import net.tccn.dbq.fbean.FBean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by liangxianyou at 2018/12/24 15:49.
|
* Created by liangxianyou at 2018/12/24 15:49.
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.tccn.dbq.fbean;
|
package net.tccn.dbq.parser;
|
||||||
|
|
||||||
import net.tccn.base.Kv;
|
import net.tccn.base.Kv;
|
||||||
|
import net.tccn.dbq.fbean.*;
|
||||||
import net.tccn.meta.MetaKit;
|
import net.tccn.meta.MetaKit;
|
||||||
import net.tccn.meta.MetaLink;
|
import net.tccn.meta.MetaLink;
|
||||||
import net.tccn.meta.MetaService;
|
import net.tccn.meta.MetaService;
|
||||||
@@ -105,7 +106,7 @@ public class ParseMysql implements Parser {
|
|||||||
public String[] parse(FBean fBean) {
|
public String[] parse(FBean fBean) {
|
||||||
MetaService metaService = MetaKit.getMetaService(fBean.getName());
|
MetaService metaService = MetaKit.getMetaService(fBean.getName());
|
||||||
|
|
||||||
Kv<String, MetaTable> tables = MetaKit.getMetaTables(metaService);//所有的关联表信息
|
Kv<String, MetaTable> tables = MetaKit.getMetaTables(metaService, false);//所有的关联表信息
|
||||||
MetaTable metaTable = tables.get(metaService.getTable());//基础元数据
|
MetaTable metaTable = tables.get(metaService.getTable());//基础元数据
|
||||||
List<String> shows = metaService.getShows();//查询的属性
|
List<String> shows = metaService.getShows();//查询的属性
|
||||||
|
|
||||||
@@ -120,7 +121,7 @@ public class ParseMysql implements Parser {
|
|||||||
|
|
||||||
|
|
||||||
//判断是否为同库
|
//判断是否为同库
|
||||||
if (sameDbFun.test(tables)) {
|
if (sameDbFun.test(tables) || true) {
|
||||||
// where 1=1 and xx=xx
|
// where 1=1 and xx=xx
|
||||||
StringBuffer bufWhere = new StringBuffer();
|
StringBuffer bufWhere = new StringBuffer();
|
||||||
if (!isEmpty.test(filters)) {
|
if (!isEmpty.test(filters)) {
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
package net.tccn.dbq.fbean;
|
package net.tccn.dbq.parser;
|
||||||
|
|
||||||
|
import net.tccn.dbq.fbean.FBean;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by liangxianyou at 2018/12/24 15:47.
|
* Created by liangxianyou at 2018/12/24 15:47.
|
||||||
@@ -213,6 +213,122 @@ public class MetaKit {
|
|||||||
return cfg;
|
return cfg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static Map cfg(String name) {
|
||||||
|
MetaService metaService = getMetaService(name);
|
||||||
|
Kv<String, MetaTable> metaTables = getMetaTables(metaService, false);
|
||||||
|
|
||||||
|
List<String> shows = metaService.getShows();
|
||||||
|
List<Map> edits = metaService.getEdits();
|
||||||
|
List<String> details = metaService.getDetails();
|
||||||
|
List<Map> filters = metaService.getFilters();
|
||||||
|
String comment = metaService.getComment();
|
||||||
|
|
||||||
|
//List<Field> items = new ArrayList<>();
|
||||||
|
Kv<String, Kv<String, Kv>> _items2 = Kv.of();
|
||||||
|
metaTables.forEach((k, v) -> {
|
||||||
|
Kv<String, Kv> _items = Kv.of();
|
||||||
|
v.getItems().forEach(x -> {
|
||||||
|
Kv kv = Kv.of();
|
||||||
|
kv.set("col", x.getName());
|
||||||
|
kv.set("label", x.getLabel());
|
||||||
|
kv.set("InExt", x.getInExt());
|
||||||
|
kv.set("inType", x.getInType());
|
||||||
|
kv.set("expr", x.showField());
|
||||||
|
_items.set(x.getName(), kv);
|
||||||
|
});
|
||||||
|
|
||||||
|
_items2.set(k, _items);
|
||||||
|
});
|
||||||
|
|
||||||
|
//shows
|
||||||
|
List _shows = new ArrayList();
|
||||||
|
shows.forEach(x -> {
|
||||||
|
MetaTable metaTable = metaTables.get(x.split("[.]")[0]); // 表别名
|
||||||
|
metaTable.getItems()
|
||||||
|
.stream()
|
||||||
|
.filter(y -> x.split("[.]")[1].equals(y.getName()))
|
||||||
|
.findFirst().ifPresent(y -> _shows.add(Kv.of("col", x).set("order", true)));
|
||||||
|
});
|
||||||
|
|
||||||
|
//filters
|
||||||
|
List<Map> _filters = new ArrayList<>();
|
||||||
|
filters.forEach(x -> {
|
||||||
|
String col = String.valueOf(x.get("name"));
|
||||||
|
MetaTable metaTable = metaTables.get(col.split("[.]")[0]); // 表别名
|
||||||
|
|
||||||
|
Kv filter = Kv.of();
|
||||||
|
metaTable.getItems()
|
||||||
|
.stream()
|
||||||
|
.filter(y -> col.split("[.]")[1].equals(y.getName()))
|
||||||
|
.findFirst()
|
||||||
|
.ifPresent(y -> {
|
||||||
|
filter.set("name", x.get("name"));
|
||||||
|
filter.set("label", y.getLabel());
|
||||||
|
List<Kv> types = new ArrayList<>();
|
||||||
|
List<String> list = (List) x.get("filterType");
|
||||||
|
list.forEach(t -> {
|
||||||
|
FilterType type = FilterType.getFilterType(t);
|
||||||
|
if (type != null) {
|
||||||
|
types.add(Kv.of("name", t).set("remark", type.getRemark()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
filter.set("filterType", types);
|
||||||
|
if (!types.isEmpty()) {//设置默认查询项
|
||||||
|
filter.set("type", types.get(0).get("name"));
|
||||||
|
}
|
||||||
|
Object checked = x.getOrDefault("checked", false);
|
||||||
|
filter.set("checked", checked instanceof Boolean ? checked : false);
|
||||||
|
});
|
||||||
|
_filters.add(filter);
|
||||||
|
});
|
||||||
|
|
||||||
|
//edits
|
||||||
|
List _edits = new ArrayList();//edits;
|
||||||
|
edits.forEach(x -> {
|
||||||
|
Kv kv = Kv.of();
|
||||||
|
kv.set("col", x);
|
||||||
|
|
||||||
|
String col = x.get("col") + "";
|
||||||
|
//readonly,hidden
|
||||||
|
if ("id".equalsIgnoreCase(col)) {
|
||||||
|
kv.set("upAttr", "hidden");
|
||||||
|
kv.set("addAttr", "none");
|
||||||
|
}
|
||||||
|
if ("reportWay".equalsIgnoreCase(col)) {
|
||||||
|
kv.set("upAttr", "readonly");
|
||||||
|
kv.set("addAttr", "none");
|
||||||
|
}
|
||||||
|
if ("insertTime".equalsIgnoreCase(col)) {
|
||||||
|
kv.set("upAttr", "readonly");
|
||||||
|
kv.set("addAttr", "none");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("ip".equalsIgnoreCase(col)) {
|
||||||
|
kv.set("ck", "ip");
|
||||||
|
}
|
||||||
|
|
||||||
|
_edits.add(kv);
|
||||||
|
});
|
||||||
|
|
||||||
|
//details
|
||||||
|
List _details = new ArrayList();//details;
|
||||||
|
details.forEach(x -> {
|
||||||
|
Kv kv = Kv.of();
|
||||||
|
kv.set("col", x);
|
||||||
|
|
||||||
|
_details.add(kv);
|
||||||
|
});
|
||||||
|
|
||||||
|
return Kv.of()
|
||||||
|
.set("title", comment)
|
||||||
|
.set("items", _items2)
|
||||||
|
.set("shows", _shows)
|
||||||
|
.set("filters", _filters)
|
||||||
|
.set("edits", _edits)
|
||||||
|
.set("details", _details);
|
||||||
|
}
|
||||||
|
|
||||||
//itemUpdate
|
//itemUpdate
|
||||||
public static BiFunction<MetaTable, List<Field>, MetaTable> itemUpdate = (t, fields) -> {
|
public static BiFunction<MetaTable, List<Field>, MetaTable> itemUpdate = (t, fields) -> {
|
||||||
List<Field> items = t.getItems();
|
List<Field> items = t.getItems();
|
||||||
@@ -276,28 +392,43 @@ public class MetaKit {
|
|||||||
|
|
||||||
public static Kv buildeDetail(MetaService metaService) {
|
public static Kv buildeDetail(MetaService metaService) {
|
||||||
//tables
|
//tables
|
||||||
Kv<String, MetaTable> tables = getMetaTables(metaService);
|
Kv<String, MetaTable> tables = getMetaTables(metaService, true);
|
||||||
return Kv.of("tables", tables)
|
return Kv.of("tables", tables)
|
||||||
.set("links", Kv.of());
|
.set("links", Kv.of());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Kv<String, MetaTable> getMetaTables(MetaService metaService) {
|
public static Kv<String, MetaTable> getMetaTables(MetaService metaService, Boolean all) {
|
||||||
Kv<String, MetaTable> tables = Kv.of();
|
Kv<String, MetaTable> tables = Kv.of();
|
||||||
|
|
||||||
String table = metaService.getTable();//
|
String table = metaService.getTable();//
|
||||||
tables.set(table, getMetaTableByAlias(table));
|
tables.set(table, getMetaTableByAlias(table));
|
||||||
|
|
||||||
//收集所有的col
|
//收集所有的col
|
||||||
Set<String> allAlias = UtilityExt.streamConcat(
|
Set<String> allAlias;
|
||||||
|
|
||||||
|
if (!all) {
|
||||||
|
allAlias = UtilityExt.streamConcat(
|
||||||
metaService.getFilters().stream().map(f -> {
|
metaService.getFilters().stream().map(f -> {
|
||||||
String col = (String) f.get("name");
|
String col = (String) f.get("name");
|
||||||
String alias = col.split("[.]")[0];
|
String alias = col.split("[.]")[0];
|
||||||
return alias;
|
return alias;
|
||||||
}),
|
}),
|
||||||
metaService.getShows().stream().map(x -> x.split("[.]")[0]),
|
metaService.getExports().stream().map(x -> x.split("[.]")[0]),
|
||||||
metaService.getEdits().stream().map(x -> x.split("[.]")[0])
|
metaService.getShows().stream().map(x -> x.split("[.]")[0])/*, todo: xxx
|
||||||
|
metaService.getEdits().stream().map(x -> x.split("[.]")[0])*/
|
||||||
);
|
);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
allAlias = new HashSet<>();
|
||||||
|
metaLinks.stream().forEach(x -> {
|
||||||
|
if (table.equals(x.getTables()[0])) {
|
||||||
|
allAlias.add(x.getTables()[1]);
|
||||||
|
} else if (table.equals(x.getTables()[1])) {
|
||||||
|
allAlias.add(x.getTables()[0]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
allAlias.forEach(x -> tables.set(x, getMetaTableByAlias(x)));
|
allAlias.forEach(x -> tables.set(x, getMetaTableByAlias(x)));
|
||||||
return tables;
|
return tables;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public class MetaLink extends Doc<MetaLink> {
|
|||||||
|
|
||||||
//-------------------------------------------
|
//-------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
public String[] getTables() {
|
public String[] getTables() {
|
||||||
return tables;
|
return tables;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ public class MetaService extends Doc<MetaService> {
|
|||||||
|
|
||||||
|
|
||||||
private List<String> shows = new ArrayList<>();
|
private List<String> shows = new ArrayList<>();
|
||||||
private List<String> edits = new ArrayList<>();
|
private List<Map> edits = new ArrayList<>();
|
||||||
|
private List<String> details = new ArrayList<>();
|
||||||
private List<Map> filters = new ArrayList<>();
|
private List<Map> filters = new ArrayList<>();
|
||||||
private List<String> exports = new ArrayList<>();
|
private List<String> exports = new ArrayList<>();
|
||||||
|
|
||||||
@@ -71,14 +72,22 @@ public class MetaService extends Doc<MetaService> {
|
|||||||
this.shows = shows;
|
this.shows = shows;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getEdits() {
|
public List<Map> getEdits() {
|
||||||
return edits;
|
return edits;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEdits(List<String> edits) {
|
public void setEdits(List<Map> edits) {
|
||||||
this.edits = edits;
|
this.edits = edits;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getDetails() {
|
||||||
|
return details;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDetails(List<String> details) {
|
||||||
|
this.details = details;
|
||||||
|
}
|
||||||
|
|
||||||
public List<Map> getFilters() {
|
public List<Map> getFilters() {
|
||||||
return filters;
|
return filters;
|
||||||
}
|
}
|
||||||
|
|||||||
49
src/main/java/net/tccn/service/DataService.java
Normal file
49
src/main/java/net/tccn/service/DataService.java
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
package net.tccn.service;
|
||||||
|
|
||||||
|
import net.tccn.base.JBean;
|
||||||
|
import net.tccn.base.PageBean;
|
||||||
|
import net.tccn.dbq.DbExecutors;
|
||||||
|
import net.tccn.dbq.fbean.FBean;
|
||||||
|
import net.tccn.meta.MetaTable;
|
||||||
|
import org.redkale.net.http.RestMapping;
|
||||||
|
import org.redkale.net.http.RestParam;
|
||||||
|
import org.redkale.net.http.RestService;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据服务
|
||||||
|
* @author: liangxianyou at 2019/1/6 20:46.
|
||||||
|
*/
|
||||||
|
@RestService(name = "data", automapping = true, comment = "数据服务")
|
||||||
|
public class DataService extends BaseService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MetadataService metadataService;
|
||||||
|
|
||||||
|
|
||||||
|
@RestMapping(name = "list", comment = "数据分页列表")
|
||||||
|
public JBean findList(FBean fBean, @RestParam(name = "platToken") String token) {
|
||||||
|
JBean jBean = new JBean();
|
||||||
|
try {
|
||||||
|
PageBean page = DbExecutors.findPage(fBean);
|
||||||
|
jBean.setBody(page);
|
||||||
|
} catch (Exception e) {
|
||||||
|
jBean.set(-1, "数据查询失败");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return jBean;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RestMapping(name = "save", comment = "数据保存")
|
||||||
|
public JBean save(String ks, Map data, @RestParam(name = "platToken") String token) {
|
||||||
|
MetaTable metaTable = metadataService.findMetaTable(ks, token);
|
||||||
|
|
||||||
|
//String sql = metaTable.buildSaveSql(data);
|
||||||
|
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -56,6 +56,15 @@ public class MetadataService extends BaseService { //arango
|
|||||||
return jBean;
|
return jBean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RestMapping(name = "cfg", auth = false, comment = " 功能配置")
|
||||||
|
public JBean cfg(String name, @RestParam(name = "platToken") String token) {
|
||||||
|
JBean jBean = JBean.by(0, "");
|
||||||
|
|
||||||
|
jBean.set(0, "", MetaKit.cfg(name));
|
||||||
|
|
||||||
|
return jBean;
|
||||||
|
}
|
||||||
|
|
||||||
//----------- 数据平台 ---------------
|
//----------- 数据平台 ---------------
|
||||||
@RestMapping(name = "db_plat_list", comment = "数据平台")
|
@RestMapping(name = "db_plat_list", comment = "数据平台")
|
||||||
public List<DbAccount> dbPlatList() {
|
public List<DbAccount> dbPlatList() {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import net.tccn.base.Kv;
|
import net.tccn.base.Kv;
|
||||||
import net.tccn.dbq.fbean.FBean;
|
import net.tccn.dbq.fbean.FBean;
|
||||||
import net.tccn.dbq.fbean.ParseMysql;
|
import net.tccn.dbq.parser.ParseMysql;
|
||||||
import net.tccn.dbq.jdbc.api.DbAccount;
|
import net.tccn.dbq.jdbc.api.DbAccount;
|
||||||
import net.tccn.dbq.jdbc.api.DbKit;
|
import net.tccn.dbq.jdbc.api.DbKit;
|
||||||
import net.tccn.meta.MetaKit;
|
import net.tccn.meta.MetaKit;
|
||||||
|
|||||||
Reference in New Issue
Block a user