修改:1、arangodb -> mysql,去除arangodb

2、部分字段逻辑重构
This commit is contained in:
2024-04-01 15:53:48 +08:00
parent 81e1a59e65
commit 9973ad18ca
59 changed files with 926 additions and 660 deletions

View File

@@ -45,7 +45,7 @@
</dependency>
<!-- arangodb支持 -->
<dependency>
<!--<dependency>
<groupId>com.arangodb</groupId>
<artifactId>arangodb-java-driver-async</artifactId>
<version>6.0.0</version>
@@ -55,7 +55,7 @@
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependency>-->
<dependency>
<groupId>com.jfinal</groupId>

View File

@@ -1,12 +1,12 @@
const db = {
catalogList({dbAccount, dbPlatId}) { // database列表
catalogList({dbAccount, dbid}) { // database列表
console.log(JSON.stringify(dbAccount))
return red.postX('/_db/catalog_list', {dbAccount: escape(JSON.stringify(dbAccount)), dbPlatId})
return red.postX('/_db/catalog_list', {dbAccount: escape(JSON.stringify(dbAccount)), dbid})
},
tableList({dbPlatId, catalog}) { // 数据库表列表
return red.postX('/_db/table_list', {dbPlatId, catalog})
tableList({dbid, catalog}) { // 数据库表列表
return red.postX('/_db/table_list', {dbid, catalog})
},
tableInfo({dbPlatId, catalog, tableName}) {
return red.postX('/_db/table_info', {dbPlatId, catalog, tableName})
tableInfo({dbid, catalog, tableName}) {
return red.postX('/_db/table_info', {dbid, catalog, tableName})
}
}

View File

@@ -19,9 +19,9 @@ const meta = {
getServiceInfo({name}, callback) {
red.getJSON("/meta/service_info",{name}, res => {
let {name, comment, table, edits, imports, shows, exports, filters, details, dels} = red.replacePoint(res)
let {name, comment, tablealias, edits, imports, shows, exports, filters, details, dels} = red.replacePoint(res)
callback({name, comment, table, edits, imports, shows, exports, filters, details, dels});
callback({name, comment, tablealias, edits, imports, shows, exports, filters, details, dels});
});
},
getServiceDetail({name}, callback) {
@@ -97,7 +97,7 @@ const meta = {
//client
exportData({fbean, cate}) {
if (cate == 'excel') {
location.href = "/data/export?fBean=" + JSON.stringify(fbean) + "&platToken=" + red.getPlatToken() + "&cate=excel";
location.href = "/data/export?fBean=" + JSON.stringify(fbean) + "&plattoken=" + red.getPlatToken() + "&cate=excel";
} else if (cate == 'cvs') {
} else if (cate == 'json') {

View File

@@ -2,7 +2,7 @@
const plat = {
platList(params = {}) { // 平台列表
params['platToken'] = 'xx'
params['plattoken'] = 'xx'
return red.getX('/plat/list', params)
},
platSave({plat}) {

View File

@@ -1,19 +1,19 @@
const table = {
_sheets({cate, filePath, dbAccount, dbPlatId, catalog}) {
return red.postX('/_table/sheets',{cate, filePath, dbAccount, dbPlatId, catalog})
_sheets({cate, filePath, dbAccount, dbid, catalog}) {
return red.postX('/_table/sheets',{cate, filePath, dbAccount, dbid, catalog})
},
sheetsExcel({filePath}) {
return table._sheets({cate: "excel", filePath})
},
sheetMySql({dbPlatId, catalog}) {
return table._sheets({cate: "mysql", dbPlatId, catalog})
sheetMySql({dbid, catalog}) {
return table._sheets({cate: "mysql", dbid, catalog})
},
sheetInfo({filePath, sheetName}) {
return red.postX('/_table/sheet_info', {cate: 'excel', filePath, sheetName})
},
saveTable({dbPlatId, catalog, tableArr}) { //
return red.postX('/_table/table_save', {cate: 'mysql', dbPlatId, catalog, tableArr: JSON.stringify(tableArr)})
saveTable({dbid, catalog, tableArr}) { //
return red.postX('/_table/table_save', {cate: 'mysql', dbid, catalog, tableArr: JSON.stringify(tableArr)})
},
saveSheet({filePath, sheetNames}) {
return red.postX('/_table/table_save', {cate: 'excel', filePath, sheetNames: JSON.stringify(sheetNames)})

View File

@@ -1,7 +1,7 @@
//import red from '../res/js/red'
const login = ({username, pwd}) => {
return red.postX("/user/login", {username, pwd, platToken: 'xx'})
return red.postX("/user/login", {username, pwd, plattoken: 'xx'})
}
const logout = () => {

View File

@@ -88,7 +88,7 @@
<div class="form-group">
<label for="para" class="col-sm-2 required">数据平台</label>
<div class="col-md-6">
<select v-model="row.dbPlatId" class="form-control">
<select v-model="row.dbid" class="form-control">
<option></option>
<option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select>

View File

@@ -16,7 +16,7 @@
<div class="col-md-12 col-xs-12" id="top">
<div class="logo">
<!--<h1>Meta-Kit</h1>-->
<h1>{{sysPlat.name}}</h1>
<h1>{{sysPlat.platname}}</h1>
</div>
<ul class="nav nav-tabs">
<!--item in pages-->
@@ -38,7 +38,7 @@
<li class="pull-right">
<select v-model="sysPlat" class="form-control plat-switch">
<option v-for="item in sysPlats" :value="item" v-text="item.name"></option>
<option v-for="item in sysPlats" :value="item" v-text="item.platname"></option>
</select>
</li>
</ul>

View File

@@ -60,12 +60,12 @@
<th v-show="status==1">操作</th>
</tr>
<tr v-show="status==0" v-for="(k, v) in linkInfo.link">
<tr v-show="status==0" v-for="(k, v) in linkInfo.links">
<td v-text="k.startsWith(aliasA + '.') ? k : v"></td>
<td v-text="v.startsWith(aliasB + '.') ? v : k"></td>
</tr>
<tr v-show="status==1" v-for="(linkItem, index) in link2">
<tr v-show="status==1" v-for="(linkItem, index) in links2">
<td>
<select class="form-control" v-model="linkItem.f1">
<option></option>
@@ -107,7 +107,7 @@
</div>
<div class="modal-body" style="text-align: center">
<select class="form-control" v-model="newLinkTable">
<option v-for="x in tables" :value="x" v-text="strJoin(x.name, x.comment, '---')" v-show="!isDisable(x)"></option>
<option v-for="x in tables" :value="x" v-text="strJoin(x.tablename, x.comment, '---')" v-show="!isDisable(x)"></option>
</select>
</div>
<div class="modal-footer">
@@ -141,7 +141,7 @@
links: [], //
linkInfos: [],
linkInfo: {},
link2: [],
links2: [],
newLinkTable: {},
aliasB: '',
@@ -184,20 +184,20 @@
for (let i in this.links) { // 数据转换
if (this.links[i]['tables'][0] == v || this.links[i]['tables'][1] == v) {
linkInfo = this.links[i]
let link = {}
let link2 = [] // [{f1:"", f2:""}]
for(k in linkInfo["link"]) {
let [_k, _v] = [k, linkInfo["link"][k]]
let links = {}
let links2 = [] // [{f1:"", f2:""}]
for(k in linkInfo["links"]) {
let [_k, _v] = [k, linkInfo["links"][k]]
if (k.startsWith(this.aliasA + '.')) {
link[_k] = _v
link2.push({f1: _k, f2: _v})
links[_k] = _v
links2.push({f1: _k, f2: _v})
} else {
link[_v] = _k
link2.push({f1: _v, f2: _k})
links[_v] = _k
links2.push({f1: _v, f2: _k})
}
}
linkInfo['link'] = link
this.link2 = link2
linkInfo['links'] = links
this.link2 = links2
}
}
this.linkInfo = linkInfo
@@ -222,11 +222,11 @@
})
},
dealTableLabel(table) {
return `${table.name} (${table.comment||'-'}) [${table.linkCount}]`
return `${table.tablename} (${table.comment||'-'}) [${table.linkCount}]`
},
dealFilter(table) {
// table.name 中是否包含 thiss.filter 的值
if (table.name.indexOf(this.filter) > -1 || table.comment.indexOf(this.filter) > -1) {
if (table.tablename.indexOf(this.filter) > -1 || table.comment.indexOf(this.filter) > -1) {
return true
} else {
return false
@@ -257,28 +257,28 @@
// 保存(同修改)
},
addLinkField() {
let link2 = this.link2
link2.push({f1: "", f2: ""})
this.link2 = link2
let links2 = this.links2
links2.push({f1: "", f2: ""})
this.links2 = links2
},
delLinkField(index) {
let link2 = []
let links2 = []
for (let i in this.link2) {
if (i != index) {
link2.push(this.link2[i])
links2.push(this.link2[i])
}
}
this.link2 = link2
this.links2 = links2
},
saveLink() {
let link = {}
for(let i in this.link2) {
let item = this.link2[i]
let links = {}
for(let i in this.links2) {
let item = this.links2[i]
if (item['f1'] && item['f2']) {
link[item['f1']] = item['f2']
links[item['f1']] = item['f2']
}
}
if (link.size == 0) {
if (links.size === 0) {
red.showError("请填写完整的关联字段信息")
return false
}
@@ -288,7 +288,7 @@
if (!linkInfo['tables']) {
linkInfo['tables'] = [this.aliasA, this.aliasB]
}
linkInfo["link"] = link
linkInfo["links"] = links
linkSave({link: linkInfo}).then(res => {
red.showOk()
})

View File

@@ -515,8 +515,8 @@
<div class="form-group">
<label class="col-sm-3 required">选择业务主表</label>
<div class="col-sm-6">
<select class="form-control" v-model="createRow.table">
<option v-for="x in tables" :value="x.alias" v-text="x.name + ' --- ' + x.comment"></option>
<select class="form-control" v-model="createRow.tablealias">
<option v-for="x in tables" :value="x.alias" v-text="x.tablename + ' --- ' + x.comment"></option>
</select>
</div>
</div>
@@ -571,7 +571,7 @@
filterCate: ["EQUAL", "NOTEQUAL", "LIKE", "IN"],
serviceInfo: {
name: "",
table: "",
tablealias: "",
items: [],
shows: [],
exports: [],
@@ -601,7 +601,7 @@
services: [],//业务列表
service: "", //页面选择的业务类型
serviceLabel: "",
table: "",//表别名
tablealias: "",//表别名
//filter
filterArr: [],
@@ -687,7 +687,7 @@
//console.log("dels", dels)
let cate = dels["cate"] || "UP_FIELD"
let sql1 = dels["sql1"] || "update #(table) set status=9 where id=#(id);"
let sql = dels["sql"] || `update ${v['tables'][this.serviceInfo.table]['name']} set status=9 where id=#(id);`
let sql = dels["sql"] || `update ${v['tables'][this.serviceInfo.tablealias]['tablename']} set status=9 where id=#(id);`
let qtask = dels["qtask"] || ""
let serviceInfo = this.serviceInfo
@@ -695,7 +695,7 @@
this.serviceInfo = serviceInfo
},
sheet: function (v) {
this.table = v;
this.tablealias = v;
},
filterArr: function (v) { // 添加或删除选项触发
let filters = this.serviceInfo.filters
@@ -900,7 +900,7 @@
}
}
this.serviceInfo = json;
vm.serviceInfo = json;
})
},
loadDetail(name) {

View File

@@ -292,7 +292,7 @@
tableData: {},
tableArr: [],
dbPlat: red.getData("dbPlat",{}),
dbPlatId: red.getData("dbPlatId",''),
dbid: red.getData("dbPlatId",''),
catalog: '',
tableName: '',
ckTable: [],

View File

@@ -182,7 +182,7 @@
<div class="form-group">
<label class="col-md-2">数据平台</label>
<div class="col-sm-2">
<select v-model="row.dbPlatId" class="form-control">
<select v-model="row.dbid" class="form-control">
<option></option>
<option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select>
@@ -241,7 +241,7 @@
itemEdit: {}, //待修改的字段属性
dbPlats:[],
row: {key: "", platId: "", dbPlatId:"", catalog: "", name:"", comment:"", alias: ""},
row: {tableid: "", platid: "", dbid:"", catalog: "", tablename:"", comment:"", alias: ""},
filter: {db: "", catalog: "", name: ""},//tableList 过滤条件
upsql: "", // 需要执行的 sql语句
@@ -250,7 +250,7 @@
},
watch: {
metaTable(v) {
this.name = v.name
this.tablename = v.tablename
this.alias = v.alias
},
status: function (v) {
@@ -298,11 +298,11 @@
handler: function (row) {
//console.log(vm.metaTable.name, " -> ",v.name)
vm.upsql = ''
if (vm.metaTable.name !== row.name) {
vm.upsql += 'RENAME TABLE `{0}`.`{1}` TO `{2}`.`{3}`;\n'.format(vm.metaTable.catalog, vm.metaTable.name, vm.metaTable.catalog, row.name)
if (vm.metaTable.tablename !== row.tablename) {
vm.upsql += 'RENAME TABLE `{0}`.`{1}` TO `{2}`.`{3}`;\n'.format(vm.metaTable.catalog, vm.metaTable.tablename, vm.metaTable.catalog, row.tablename)
}
if (vm.metaTable.comment !== row.comment) {
vm.upsql += 'ALTER TABLE `{0}`.`{1}` COMMENT=\'{2}\';\n'.format(vm.metaTable.catalog, vm.metaTable.name, row.comment)
vm.upsql += 'ALTER TABLE `{0}`.`{1}` COMMENT=\'{2}\';\n'.format(vm.metaTable.catalog, vm.metaTable.tablename, row.comment)
}
},
deep: true
@@ -320,7 +320,7 @@
deep: true
},
meta: function (v) {
this.row = {key:v.key, dbPlatId: v.dbPlatId, catalog: v.catalog, name:v.name, comment:v.comment, alias: v.alias};
this.row = {tableid:v.tableid, dbid: v.dbid, catalog: v.catalog, tablename:v.tablename, comment:v.comment, alias: v.alias};
let oldItems = v['items'] || []
this.oldItems = JSON.parse(JSON.stringify(oldItems))
},
@@ -347,7 +347,7 @@
catalogs: function() {
let dbPlats = this.dbPlats;
for (i in dbPlats) {
if (dbPlats[i].key == this.row.dbPlatId) {
if (dbPlats[i].dbid === this.row.dbid) {
return dbPlats[i]["catalogs"]
}
}
@@ -482,11 +482,11 @@
},
dealTableLabel(table) {
// (${table.linkCount})
return `${table.name} [${table.comment}]`
return `${table.tablename} [${table.comment}]`
},
dealFilter(table) {
// table.name 中是否包含 thiss.filter 的值
if (table.name.indexOf(this.filter) > -1 || table.comment.indexOf(this.filter) > -1) {
if (table.tablename.indexOf(this.filter) > -1 || table.comment.indexOf(this.filter) > -1) {
return true
} else {
return false

View File

@@ -81,7 +81,7 @@
<div class="form-group">
<label for="queryId" class="col-sm-2 required">平台名称</label>
<div class="col-md-6 col-sm-10">
<input v-model="row.name" class="form-control" id="queryId" placeholder="请输入 平台名称">
<input v-model="row.dbname" class="form-control" id="queryId" placeholder="请输入 平台名称">
</div>
</div>
<div class="form-group">
@@ -151,7 +151,7 @@
cfg: {
title: "数据中心 管理",
cols: [
{col: "name", label: "数据平台名称"},
{col: "dbname", label: "数据平台名称"},
{col: "url", label: "数据平台连接地址"},
{col: "user", label: "用户"},
{col: "remark", label: "备注"},
@@ -222,7 +222,7 @@
loadCatalogs: function () {
vm.catalogs = [];
//let [cate, url, user, pwd] = this.row
let dbAccount = {key: '',cate:'', url:'', user:'', pwd:''}
let dbAccount = {dbid: '',cate:'', url:'', user:'', pwd:''}
for (let key in dbAccount) {
dbAccount[key] = this.row[key]
}
@@ -233,7 +233,7 @@
dbPulse: function (row) {
/*row["check"] = true;
$.getJSON("/_db/pulse", {
dbPlatId: row._id
dbid: row._id
}, function (json) {
row["pulse"] = json.body;
row["check"] = false;

View File

@@ -48,13 +48,13 @@
<div class="form-group">
<label for="queryId" class="col-md-2 required">平台名称</label>
<div class="col-md-8">
<input v-model="row.name" class="form-control" id="queryId" placeholder="请输入 平台名称">
<input v-model="row.platname" class="form-control" id="queryId" placeholder="请输入 平台名称">
</div>
</div>
<div class="form-group">
<label for="token" class="col-md-2 required">平台 Token</label>
<div class="col-md-8 col-sm-10">
<input v-model="row.token" class="form-control" id="token" placeholder="请输入 Token">
<input v-model="row.plattoken" class="form-control" id="token" placeholder="请输入 Token">
</div>
</div>
@@ -84,8 +84,8 @@
cfg: {
title: "业务平台 管理",
cols: [
{col: "name", label: "业务名称"},
{col: "token", label: "Token"},
{col: "platname", label: "业务名称"},
{col: "plattoken", label: "Token"},
{col: "remark", label: "说明"},
{col: "status", label: "状态", fmt: function (v) {
return {"0":"未启用", "1":"启用", "-1":"删除"}[v] || "";

View File

@@ -26,7 +26,7 @@
<div class="form-group">
<label for="para" class="col-sm-2 required">数据平台</label>
<div class="col-md-6">
<select v-model="row.dbplatid" class="form-control">
<select v-model="row.dbid" class="form-control">
<option></option>
<option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select>
@@ -87,7 +87,7 @@
catalogs: function () {
let dbPlats = this.dbPlats;
for (i in dbPlats) {
if (dbPlats[i].key == this.row.dbplatid) {
if (dbPlats[i].key == this.row.dbid) {
return dbPlats[i]["catalogs"]
}
}

View File

@@ -128,7 +128,7 @@
<tr>
<th>数据平台</th>
<td>
<select v-model="row.dbplatid" class="form-control">
<select v-model="row.dbid" class="form-control">
<option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select>
</td>

View File

@@ -46,10 +46,10 @@ var red = {
location.href = "/user/login.html";
}, 2000);
}*/
return plat["token"];
return plat["plattoken"];
},
getJSON: function (url, params = {}, callback) {
params["platToken"] = red.getPlatToken()
params["plattoken"] = red.getPlatToken()
axios.get(url, {params}).then(res => {
let data = res.data || {}
red.loginCheck(data)
@@ -124,8 +124,8 @@ var red = {
})
},
getX(url, params = {}) {
if (!params['platToken'])
params['platToken'] = red.getPlatToken()
if (!params['plattoken'])
params['plattoken'] = red.getPlatToken()
return new Promise(resolve => {
axios.get(url, params).then(res => {
let data = res.data || {}
@@ -146,8 +146,8 @@ var red = {
})
},
postX(url, params = {}) {
if (!params['platToken'])
params['platToken'] = red.getPlatToken()
if (!params['plattoken'])
params['plattoken'] = red.getPlatToken()
return new Promise(resolve => {
axios({
url,
@@ -178,7 +178,7 @@ var red = {
})
},
post: function(url, params = {}, callback) {
//params['platToken'] = red.getPlatToken()
//params['plattoken'] = red.getPlatToken()
axios.post(url, params).then(res => {
/*let data = red.loginCheck(res.data)
if (data && data.code == -1) {

View File

@@ -80,7 +80,7 @@
<label for="username" class="col-md-3">业务平台</label>
<div class="col-md-8">
<select v-model="sysPlat" class="form-control">
<option v-for="item in sysPlats" :value="item" v-text="item.name"></option>
<option v-for="item in sysPlats" :value="item" v-text="item.platname"></option>
</select>
</div>
</div>
@@ -88,7 +88,7 @@
</div>
<div class="modal-footer">
<!--<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>-->
<button @click="goIndex()" type="button" class="btn btn-primary btn-block">确定选择 <span v-text="[sysPlat.name]"></span></button>
<button @click="goIndex()" type="button" class="btn btn-primary btn-block">确定选择 <span v-text="[sysPlat.platname]"></span></button>
</div>
</div>
</div>

View File

@@ -2,6 +2,7 @@ package dev.zhub.mk.qtask;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.BaseEntity;
import net.tccn.base.Kv;
import net.tccn.base.Utils;
import net.tccn.qtask.Task;
@@ -16,7 +17,7 @@ import java.util.Map;
@Getter
@Setter
@Entity
public class QTask {
public class QTask extends BaseEntity {
@Id
@Comment("[记录ID]")
@@ -29,7 +30,7 @@ public class QTask {
private String catalog = "";
@Comment("[数据平台ID]")
private String dbplatid = "";
private int dbid;
@Comment("[标识名称KEY]")
// @Column(updatable = false)
@@ -37,7 +38,7 @@ public class QTask {
@Comment("[所属平台ID]")
@Column(updatable = false)
private String platid;
private Integer platid;
@Comment("[业务名称]")
private String title = "";
@@ -57,7 +58,7 @@ public class QTask {
task.setName(name);
task.setTitle(title);
task.setContent(content);
task.setDbPlatId(dbplatid);
task.setDbid(dbid);
task.setCatalog(catalog);
Kv _para = Kv.of();

View File

@@ -2,7 +2,6 @@ package dev.zhub.mk.qtask;
import net.tccn.base.BaseService;
import net.tccn.base.Utils;
import org.redkale.convert.json.JsonConvert;
import org.redkale.net.http.RestHeader;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestService;
@@ -12,7 +11,6 @@ import org.redkale.source.Flipper;
import org.redkale.util.AnyValue;
import org.redkale.util.Sheet;
import java.util.List;
import java.util.Map;
@RestService(name = "qtask", comment = "qtask服务")

View File

@@ -0,0 +1,5 @@
package net.tccn.base;
public class BaseEntity {
}

View File

@@ -77,7 +77,7 @@ public class BaseService implements Service {
return t;
}
protected String platId(String token) {
protected Integer platId(String token) {
return MetaKit.getPlatId(token);
}

View File

@@ -1,6 +1,6 @@
package net.tccn.base;
import net.tccn.user.MetaUser;
import net.tccn.user.MUser;
import net.tccn.user.UserService;
import org.redkale.net.http.HttpRequest;
import org.redkale.net.http.HttpResponse;
@@ -45,12 +45,12 @@ public class BaseServlet extends HttpServlet {
}
if (sessionid != null) {
MetaUser user = userService.current(sessionid);
MUser user = userService.current(sessionid);
/*request.setCurrentUserSupplier(() -> {
return user;
});*/
if (user != null) {
request.setCurrentUserid(user.getId());
request.setCurrentUserid(user.getUserid());
}
}
String uri = request.getRequestURI();

View File

@@ -2,28 +2,24 @@ package net.tccn.base;
import dev.zhub.mk.qtask.QTask;
import lombok.Getter;
import net.tccn.base.arango.Doc;
import net.tccn.base.dbq.jdbc.api.DbAccount;
import net.tccn.base.dbq.jdbc.api.DbKit;
import net.tccn.base.dbq.table.Field;
import net.tccn.dict.Dict;
import net.tccn.meta.*;
import net.tccn.plat.MetaDb;
import net.tccn.plat.MetaPlat;
import net.tccn.plat.MPlat;
import net.tccn.qtask.TaskKit;
import net.tccn.user.MetaUser;
import net.tccn.user.MUser;
import org.redkale.annotation.Resource;
import org.redkale.convert.json.JsonConvert;
import org.redkale.service.AbstractService;
import org.redkale.source.DataJdbcSource;
import org.redkale.source.DataSource;
import org.redkale.util.AnyValue;
import org.redkale.util.Comment;
import org.redkale.util.TypeToken;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiFunction;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -36,17 +32,17 @@ import static java.util.Arrays.asList;
public class MetaKit extends AbstractService {
//基础数据缓存
@Getter
private static List<MetaTable> metaTables;
private static List<MTable> mTables;
@Getter
private static List<MetaLink> metaLinks;
private static List<MLink> metaLinks;
@Getter
private static List<MetaService> metaServices;
private static List<MService> metaServices;
@Getter
private static List<DbAccount> dbPlats;
@Getter
private static List<MetaPlat> sysPlats;
private static List<MPlat> mPlats;
@Getter
private static List<MetaUser> users;
private static List<MUser> users;
@Getter
private static List<QTask> qTasks;
@Getter
@@ -60,27 +56,83 @@ public class MetaKit extends AbstractService {
protected DataSource metaSource;
public <T> void reloadxAsync(Class<T> clazz) {
if (clazz == QTask.class) {
qTasks = metaSource.queryList(QTask.class);
TaskKit.init(qTasks);
}
CompletableFuture.runAsync(() -> {
if (clazz == QTask.class) {
qTasks = metaSource.queryList(QTask.class);
TaskKit.init(qTasks);
} else if (clazz == MPlat.class) mPlats = metaSource.queryList(MPlat.class);
else if (clazz == DbAccount.class) dbPlats = metaSource.queryList(DbAccount.class);
else if (clazz == MTable.class) mTables = metaSource.queryList(MTable.class);
else if (clazz == MService.class) metaServices = metaSource.queryList(MService.class);
else if (clazz == MLink.class) metaLinks = metaSource.queryList(MLink.class);
else if (clazz == Dict.class) dicts = metaSource.queryList(Dict.class);
/*if (clazz == MUser.class) {
users = metaSource.queryList(MUser.class);
}*/
});
}
@Override
public void init(AnyValue config) {
reloadxAsync(QTask.class);
reloadxAsync(MPlat.class);
reloadxAsync(DbAccount.class);
reloadxAsync(MService.class);
reloadxAsync(MTable.class);
reloadxAsync(MLink.class);
// reloadxAsync(Dict.class);
/*metaTables.forEach(x -> {
// 写入到 MTable
MTable mTable = new MTable();
mTable.setTableid(Integer.parseInt(x.getKey()));
mTable.setCatalog(x.getCatalog());
mTable.setDbid(x.getDbid());
mTable.setAlias(x.getAlias());
mTable.setTablename(x.getName());
mTable.setPlatid(x.getPlatid());
mTable.setComment(x.getComment());
mTable.setItems(x.getItems());
metaSource.insertAsync(mTable);
});*/
/*metaServices.forEach(x -> {
// 写入到 MService
MService service = new MService();
service.setServid(Integer.parseInt(x.getKey()));
service.setName(x.getName());
service.setTablealias(x.getTable());
service.setShows(x.getShows());
service.setExports(x.getExports());
service.setEdits(x.getEdits());
service.setDetails(x.getDetails());
service.setFilters(x.getFilters());
service.setComment(x.getComment());
//service.setDels(x.getDels());
service.setPlatid(x.getPlatid());
metaSource.insert(service);
});*/
/*metaLinks.forEach(x -> {
MxLink link = new MxLink();
link.setLinkid(Integer.parseInt(x.getKey()));
link.setTables(x.getTables());
link.setLinks(x.getLink());
metaSource.insert(link);
});*/
}
// -----------------------------------
public static void init() {
reload(MetaTable.class);
reload(MetaLink.class);
reload(MetaService.class);
reload(DbAccount.class);
reload(MetaPlat.class);
reload(MetaUser.class);
// reload(MetaTable.class);
// reload(MLink.class);
// reload(MetaService.class);
// reload(DbAccount.class);
// reload(MetaPlat.class);
// reload(MetaUser.class);
// reload(DbTask.class);
reload(Dict.class);
// reload(Dict.class);
/*
同步 本地文件配置数据到 数据库
@@ -93,104 +145,110 @@ public class MetaKit extends AbstractService {
}
public static <T extends Doc> void reload(Class<T> clazz) {
/*public static <T extends Doc> void reload(Class<T> clazz) {
reload(clazz, null);
}
public static <T extends Doc> void reload(T t) {
reload(t.getClass(), t.getKey());
}
}*/
public static void main(String[] args) throws IOException {
/*public static void main(String[] args) throws IOException {
Type type = new TypeToken<List<DbAccount>>() {
}.getType();
dbPlats = FileKit.readAs(new File("D:\\Java\\meta-kit\\conf\\data\\DbAccount.json"), type);
//convert.convertFrom(type,"[{\"catalogs\":[\"test\"],\"cate\":\"mysql\",\"id\":\"db_plat/67275393\",\"key\":\"67275393\",\"name\":\"ylz测试\",\"url\":\"jdbc:mysql://119.3.106.117:3306\",\"user\":\"root\"},{\"catalogs\":[\"v09x_platf_core\"],\"cate\":\"mysql\",\"id\":\"db_plat/67275392\",\"key\":\"67275392\",\"name\":\"platf_qc\",\"url\":\"jdbc:mysql://121.196.17.55:6063\",\"user\":\"root\"},{\"catalogs\":[\"official_core\",\"official_ipci\",\"v09x_platf_core\",\"platf_quest\",\"platf_pay\",\"platf_mall\",\"platf_oth\",\"platf_im\",\"z_core\"],\"cate\":\"mysql\",\"id\":\"db_plat/67275391\",\"key\":\"67275391\",\"name\":\"platf_pro\",\"url\":\"jdbc:mysql://122.112.180.156:6033\",\"user\":\"guest\"},{\"catalogs\":[\"db_diamond\"],\"id\":\"db_plat/53533152\",\"key\":\"53533152\",\"name\":\"钻石项目\",\"url\":\"jdbc:mysql://192.168.201.51:3306/db_diamond?characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai&useSSL=false\",\"user\":\"root\"},{\"catalogs\":[\"db_diamond\"],\"id\":\"db_plat/53532996\",\"key\":\"53532996\",\"name\":\"钻石项目\",\"url\":\"jdbc:mysql://192.168.201.51:3306/db_diamond?characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai&useSSL=false\",\"user\":\"root\"},{\"catalogs\":[\"platf_im\",\"v09x_platf_core\",\"platf_oss\",\"platf_quest\",\"platf_oth\",\"sport_oss\",\"zhub\",\"cpg_core\",\"z_core\",\"z_config\",\"z_im\",\"z_mall\",\"z_quest\",\"z_oss\",\"z_oth\",\"cmt_oss\",\"cmt_depot_core\",\"cmt_core\",\"sport_core\"],\"cate\":\"mysql\",\"id\":\"db_plat/52481174\",\"key\":\"52481174\",\"name\":\"platf_dev\",\"url\":\"jdbc:mysql://47.111.150.118:6063\",\"user\":\"root\"},{\"catalogs\":[],\"cate\":\"mysql\",\"id\":\"db_plat/4375768\",\"key\":\"4375768\",\"name\":\"mysql数据库\",\"url\":\"jdbc:mysql://192.168.50.124:3306/mytest?characterEncoding=utf-8&autoReconnect=true&useSSL=false&connectTimeout=3000\",\"user\":\"root\"},{\"catalogs\":[],\"cate\":\"mysql\",\"id\":\"db_plat/4267761\",\"key\":\"4267761\",\"name\":\"测试\",\"remark\":\"sadfdsaf\",\"url\":\"123&connectTimeout=5000\",\"user\":\"root\"},{\"catalogs\":[\"db_art\",\"db_jsons_bbs\",\"db_mater\",\"db_redbbs\",\"jfly\",\"redbbs_dev\",\"meta_kit_test\"],\"cate\":\"mysql\",\"id\":\"db_plat/3321254\",\"key\":\"3321254\",\"name\":\"测试-DB【可用】\",\"url\":\"jdbc:mysql://120.24.230.60:3306/redbbs?characterEncoding=utf-8&autoReconnect=true&useSSL=false&connectTimeout=3000\",\"user\":\"guest\"},{\"catalogs\":[\"blockchain\",\"gxbii_dev\",\"gxbii_all\",\"gxbii_cmd\",\"fzexp\",\"db_fz\",\"a_test\",\"meta_xx\",\"ipsm_v4\"],\"cate\":\"mysql\",\"id\":\"db_plat/3305916\",\"key\":\"3305916\",\"name\":\"测试库-11测试库【可用】\",\"remark\":\"描述\",\"url\":\"jdbc:mysql://192.168.202.11:3306/gxbii_dev?characterEncoding=utf-8&autoReconnect=true&connectTimeout=3000\",\"user\":\"root\"},{\"catalogs\":[\"ipsm_v4\"],\"cate\":\"mysql\",\"id\":\"db_plat/32822760\",\"key\":\"32822760\",\"name\":\"ceshi1111\",\"url\":\"jdbc:mysql://192.168.202.11:3306/ipsm_v4?characterEncoding=utf-8&autoReconnect=true\",\"user\":\"root\"},{\"catalogs\":[\"zbd_v1\"],\"cate\":\"mysql\",\"id\":\"db_plat/27166384\",\"key\":\"27166384\",\"name\":\"测试1\",\"url\":\"jdbc:mysql://192.168.50.124:3306/mytest?characterEncoding=utf-8&autoReconnect=true&useSSL=false&connectTimeout=3000\",\"user\":\"root\"},{\"catalogs\":[],\"cate\":\"mysql\",\"id\":\"db_plat/25668979\",\"key\":\"25668979\",\"name\":\"测试Mysql数据库\",\"url\":\"jdbc:mysql://558cfc37a10ef.sh.cdb.myqcloud.com:3817/demo?autoReconnect=true\",\"user\":\"cdb_outerroot\"},{\"catalogs\":[],\"cate\":\"localApi\",\"id\":\"db_plat/23090860\",\"key\":\"23090860\",\"name\":\"平台本地API\"},{\"catalogs\":[],\"cate\":\"http\",\"id\":\"db_plat/21561306\",\"key\":\"21561306\",\"name\":\"http地址调用\",\"url\":\"http://127.0.0.1/plat/db_list\"},{\"catalogs\":[\"tc\",\"tc_bbs\",\"redbbs\",\"redoss\",\"material\",\"keeper_dev\",\"art123\",\"keeper\",\"db_party\"],\"cate\":\"mysql\",\"id\":\"db_plat/21558770\",\"key\":\"21558770\",\"name\":\"TX-cloud\",\"url\":\"jdbc:mysql://558cfc37a10ef.sh.cdb.myqcloud.com:3817/demo?autoReconnect=true\",\"user\":\"cdb_outerroot\"},{\"catalogs\":[\"feature_test\",\"intelligence\",\"ma\",\"mysql\",\"ma1\",\"ma2\",\"maintenance\",\"zhaobiao\",\"zhaobiao2\"],\"cate\":\"mysql\",\"id\":\"db_plat/21449811\",\"key\":\"21449811\",\"name\":\"物联网-jj【可用】\",\"url\":\"jdbc:mysql://192.168.50.21:3306/wlw?characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai\",\"user\":\"root\"},{\"catalogs\":[],\"id\":\"db_plat/20982257\",\"key\":\"20982257\",\"name\":\"数据平台abc\",\"remark\":\"sadfdsaf\",\"url\":\"123&connectTimeout=5000\",\"user\":\"root\"}]");
System.out.println(dbPlats.size());
}
}*/
public static <T extends Doc> void reload(Class<T> clazz, String key) {
/*public static <T extends Doc> void reload(Class<T> clazz, String key) {
try {
File file = new File(String.format("%s%s.json", dataPath, clazz.getSimpleName()));
if ("file".equals(dcate)) {
if (MetaTable.class == clazz) {
*//*if (MetaTable.class == clazz) {
Type type = new TypeToken<List<MetaTable>>() {
}.getType();
metaTables = FileKit.readAs(file, type);
} else if (MetaLink.class == clazz) {
Type type = new TypeToken<List<MetaLink>>() {
} else*//*
*//*if (MLink.class == clazz) {
Type type = new TypeToken<List<MLink>>() {
}.getType();
metaLinks = FileKit.readAs(file, type);;
} else if (MetaService.class == clazz) {
metaLinks = FileKit.readAs(file, type);
}*//* *//*else if (MetaService.class == clazz) {
Type type = new TypeToken<List<MetaService>>() {
}.getType();
metaServices = FileKit.readAs(file, type);;
} else if (DbAccount.class == clazz) {
metaServices = FileKit.readAs(file, type);
}*//* *//*else if (DbAccount.class == clazz) {
Type type = new TypeToken<List<DbAccount>>() {
}.getType();
dbPlats = FileKit.readAs(file, type);
} else if (MetaDb.class == clazz) {
}*//* *//*else if (MetaDb.class == clazz) {
Type type = new TypeToken<List<DbAccount>>() {
}.getType();
dbPlats = FileKit.readAs(file, type);;
} else if (MetaPlat.class == clazz) {
}*//* *//*else if (MetaPlat.class == clazz) {
Type type = new TypeToken<List<MetaPlat>>() {
}.getType();
sysPlats = FileKit.readAs(file, type);;
} else if (MetaUser.class == clazz) {
mPlats = FileKit.readAs(file, type);;
} *//* *//*else if (MetaUser.class == clazz) {
Type type = new TypeToken<List<MetaUser>>() {
}.getType();
users = FileKit.readAs(file, type);;
} /*else if (DbTask.class == clazz) {
}*//* *//*else if (DbTask.class == clazz) {
Type type = new TypeToken<List<DbTask>>() {
}.getType();
taskEntities = FileKit.readAs(file, type);;
} */ else if (Dict.class == clazz) {
} *//* *//*else if (Dict.class == clazz) {
Type type = new TypeToken<List<Dict>>() {
}.getType();
dicts = FileKit.readAs(file, type);;
}
dicts = FileKit.readAs(file, type);
}*//*
} else {
if (MetaTable.class == clazz) metaTables = MetaTable.dao.find();
else if (MetaLink.class == clazz) metaLinks = MetaLink.dao.find();
else if (MetaService.class == clazz) metaServices = MetaService.dao.find();
else if (DbAccount.class == clazz) dbPlats = DbAccount.dao.find();
else if (MetaDb.class == clazz) dbPlats = DbAccount.dao.find();
else if (MetaPlat.class == clazz) sysPlats = MetaPlat.dao.find();
else if (MetaUser.class == clazz) users = MetaUser.dao.find();
/*else if (DbTask.class == clazz) {
*//*if (MetaTable.class == clazz) {
metaTables = MetaTable.dao.find();
}
else*//*
//if (MLink.class == clazz) metaLinks = MLink.dao.find();
//else if (MetaService.class == clazz) metaServices = MetaService.dao.find();
//else if (DbAccount.class == clazz) dbPlats = DbAccount.dao.find();
//else if (MetaDb.class == clazz) dbPlats = DbAccount.dao.find();
//else if (MetaPlat.class == clazz) mPlats = MetaPlat.dao.find();
//else if (MetaUser.class == clazz) users = MetaUser.dao.find();
*//*else if (DbTask.class == clazz) {
// taskEntities = DbTask.dao.find();
// TaskKit.init();
}*/
else if (Dict.class == clazz) {
}*//*
//else
*//*if (Dict.class == clazz) {
dicts = Dict.dao.find();
}
}*//*
}
} catch (Exception e) {
e.printStackTrace();
}
}
}*/
public static void cacheSave() {
cacheSave(MetaTable.class);
cacheSave(MetaLink.class);
cacheSave(MetaService.class);
cacheSave(DbAccount.class);
cacheSave(MetaPlat.class);
cacheSave(MetaUser.class);
/*public static void cacheSave() {
//cacheSave(MetaTable.class);
//cacheSave(MLink.class);
//cacheSave(MService.class);
//cacheSave(DbAccount.class);
//cacheSave(MetaPlat.class);
//cacheSave(MetaUser.class);
//cacheSave(DbTask.class);
cacheSave(Dict.class);
}
//cacheSave(Dict.class);
}*/
private static void cacheSave(Class clazz) {
/*private static void cacheSave(Class clazz) {
List list = null;
if (MetaTable.class == clazz) list = metaTables;
else if (MetaLink.class == clazz) list = metaLinks;
else if (MetaService.class == clazz) list = metaServices;
else if (DbAccount.class == clazz) list = dbPlats;
else if (MetaPlat.class == clazz) list = sysPlats;
else if (MetaUser.class == clazz) list = users;
*//*if (MetaTable.class == clazz) list = metaTables;
else*//*
if (MLink.class == clazz) list = metaLinks;
else if (MService.class == clazz) list = metaServices;
//else if (DbAccount.class == clazz) list = dbPlats;
//else if (MetaPlat.class == clazz) list = mPlats;
//else if (MetaUser.class == clazz) list = users;
// else if (DbTask.class == clazz) list = taskEntities;
else if (Dict.class == clazz) list = dicts;
@@ -199,7 +257,7 @@ public class MetaKit extends AbstractService {
File file = new File(String.format("%s%s.json", dataPath, list.get(0).getClass().getSimpleName()));
file.getParentFile().mkdirs();
FileKit.strToFile(MetaKit.convert.convertTo(list), file);
}
}*/
/**
* 得到业务主表
@@ -208,20 +266,21 @@ public class MetaKit extends AbstractService {
* @param token
* @return
*/
public static MetaTable getMainTable(String serviceName, String token) {
MetaService metaService = MetaKit.getMetaService(serviceName, token);
return MetaKit.getMetaTableByAlias(metaService.getTable());
public static MTable getMainTable(String serviceName, String token) {
MService metaService = MetaKit.getMetaService(serviceName, token);
return MetaKit.getMetaTableByAlias(metaService.getTablealias());
}
/**
* 通过平台token 得到平台字典数据
*
* @param platToken
* @param plattoken
*/
public static Map<String, List<Dict>> getDictData(String platToken) {
String platId = MetaKit.getPlatId(platToken);
Map<String, List<Dict>> dicts = MetaKit.dicts.stream().filter(x -> x.getSysPlatId().equals(platId)).collect(Collectors.groupingBy(Dict::getType));
return dicts;
public static Map<String, List<Dict>> getDictData(String plattoken) {
/*Integer platId = MetaKit.getPlatId(plattoken);
Map<String, List<Dict>> dicts = MetaKit.dicts.stream().filter(x -> x.getPlatid() == (int) platId).collect(Collectors.groupingBy(Dict::getType));
return dicts;*/
return new HashMap<>();
}
// -----------------------------------
@@ -235,28 +294,28 @@ public class MetaKit extends AbstractService {
* @param alias
* @return
*/
public static MetaTable getMetaTableByAlias(String alias) {
Optional<MetaTable> table = metaTables.stream().filter(x -> x.getAlias().equals(alias)).findAny();
public static MTable getMetaTableByAlias(String alias) {
Optional<MTable> table = mTables.stream().filter(x -> x.getAlias().equals(alias)).findAny();
return table.orElse(null);
}
public static MetaTable getMetaTable(String name, String token) {
Optional<MetaTable> any = getMetaTables().stream().filter(x -> {
return x.getName().equals(name) && x.getSysPlatId().equals(getPlatId(token));
public static MTable getMetaTable(String name, String token) {
Optional<MTable> any = getMTables().stream().filter(x -> {
return x.getTablename().equals(name) && x.getPlatid().equals(getPlatId(token));
}).findAny();
return any.get();
}
public static MetaService getMetaService(String name, String token) {
Optional<MetaService> service = metaServices.stream()
.filter(x -> x.getName().equals(name) && x.getSysPlatId().equals(getPlatId(token)))
public static MService getMetaService(String name, String token) {
Optional<MService> service = metaServices.stream()
.filter(x -> x.getName().equals(name) && x.getPlatid().equals(getPlatId(token)))
.findAny();
return service.orElse(null);
}
//字段特征排序
public static BiFunction<MetaTable, String[], MetaTable> sortItem = (t, arr) -> {
public static BiFunction<MTable, String[], MTable> sortItem = (t, arr) -> {
List<Field> items = t.getItems();
//x 是跨越值
@@ -283,8 +342,8 @@ public class MetaKit extends AbstractService {
};
public static Map cfg(String name, String token) {
MetaService metaService = getMetaService(name, token);
Kv<String, MetaTable> metaTables = getMetaTables(metaService, false);
MService metaService = getMetaService(name, token);
Kv<String, MTable> metaTables = getMTables(metaService, false);
List<Map<String, String>> shows = metaService.getShows();
List<FromItem> edits = metaService.getEdits();
@@ -404,18 +463,18 @@ public class MetaKit extends AbstractService {
//pk业务主表的主键
StringBuffer _pks = new StringBuffer();
MetaTable mainTable = metaTables.get(metaService.getTable());
MTable mainTable = metaTables.get(metaService.getTablealias());
mainTable.getItems().stream().filter(x -> x.getPk() != null && x.getPk()).forEach(x -> {
_pks.append(String.format("%s.%s,", metaService.getTable(), x.getName()));
_pks.append(String.format("%s.%s,", metaService.getTablealias(), x.getName()));
});
if (_pks.length() > 0) {
_pks.deleteCharAt(_pks.length() - 1);
}
if (_pks.length() == 0) { // 默认主键
List<Field> items = metaTables.get(metaService.getTable()).getItems();
List<Field> items = metaTables.get(metaService.getTablealias()).getItems();
//存在id字段取id
items.stream().filter(x -> x.getName().equalsIgnoreCase("id")).findAny().ifPresent(x -> {
_pks.append(String.format("%s.%s", metaService.getTable(), x.getName()));
_pks.append(String.format("%s.%s", metaService.getTablealias(), x.getName()));
});
}
@@ -431,7 +490,7 @@ public class MetaKit extends AbstractService {
@Comment("获取导出excel表头配置k-v")
public static Kv cfgExport(String name, String token) {
MetaService metaService = getMetaService(name, token);
MService metaService = getMetaService(name, token);
List<Map<String, String>> exports = metaService.getExports();
Kv kv = Kv.of(); // {col:label}
@@ -442,7 +501,7 @@ public class MetaKit extends AbstractService {
}
//itemUpdate
public static BiFunction<MetaTable, List<Field>, MetaTable> itemUpdate = (t, fields) -> {
public static BiFunction<MTable, List<Field>, MTable> itemUpdate = (t, fields) -> {
List<Field> items = t.getItems();
for (int i = 0; i < fields.size(); i++) {
for (int j = 0; j < items.size(); j++) {
@@ -468,11 +527,11 @@ public class MetaKit extends AbstractService {
};*/
public static MetaTable getMetaTableByKey(String key) {
return metaTables.stream().filter(x -> x.getKey().equals(key)).findAny().orElse(null);
public static MTable getMetaTableByKey(int key) {
return mTables.stream().filter(x -> x.getTableid() == key).findAny().orElse(null);
}
public static List<MetaLink> getMetaLinks(String t, List<String> shows, List<String> filters) {
public static List<MLink> getMetaLinks(String t, List<String> shows, List<String> filters) {
Predicate<String> contain = s -> {
@@ -493,7 +552,7 @@ public class MetaKit extends AbstractService {
//1、直接关联 表: t.equals(x.getTables()[0]) || t.equals(x.getTables()[1]
//2、关联且有过滤
//3、关联有展示
List<MetaLink> links = metaLinks.stream()
List<MLink> links = metaLinks.stream()
.filter(x -> {
return (t.equals(x.getTables()[0]) || t.equals(x.getTables()[1]))
&& (contain.test(x.getTables()[0]) || contain.test(x.getTables()[1]));
@@ -502,17 +561,17 @@ public class MetaKit extends AbstractService {
return links;
}
public static Kv buildeDetail(MetaService metaService) {
public static Kv buildeDetail(MService metaService) {
//tables
Kv<String, MetaTable> tables = getMetaTables(metaService, true);
Kv<String, MTable> tables = getMTables(metaService, true);
return Kv.of("tables", tables)
.set("links", Kv.of());
}
public static Kv<String, MetaTable> getMetaTables(MetaService metaService, Boolean all) {
Kv<String, MetaTable> tables = Kv.of();
public static Kv<String, MTable> getMTables(MService metaService, Boolean all) {
Kv<String, MTable> tables = Kv.of();
String table = metaService.getTable();//
String table = metaService.getTablealias();//
tables.set(table, getMetaTableByAlias(table));
//收集所有的col
@@ -545,34 +604,35 @@ public class MetaKit extends AbstractService {
return tables;
}
/*public static DbKit getDbKit(String dbPlatId) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbPlatId)).findAny();
/*public static DbKit getDbKit(int dbid) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbid)).findAny();
return new DbKit(dbAccount.get());
}*/
public static DbKit getDbKit(String dbPlatId, String catalog) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbPlatId)).findAny();
public static DbKit getDbKit(int dbid, String catalog) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getDbid() == dbid).findAny();
return new DbKit(dbAccount.get(), catalog);
}
public static DbAccount getDbPlat(String dbPlatId) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbPlatId)).findFirst();
public static DbAccount getDbPlat(int dbid) {
Optional<DbAccount> db = dbPlats.stream().filter(x -> x.getDbid() == dbid).findFirst();
return dbAccount.get();
return db.get();
}
@Comment("通过平台token 得到平台id")
public static String getPlatId(String platToken) { //
Optional<MetaPlat> plat = sysPlats.stream().filter(x -> x.getToken().equals(platToken)).findAny();
return plat.get().getKey();
public static Integer getPlatId(String plattoken) { //
Optional<MPlat> plat = mPlats.stream().filter(x -> x.getPlattoken().equals(plattoken)).findAny();
return plat.get().getPlatid();
}
public static String lastAlias;
public static String nextAlias() {
public String nextAlias() {
if (lastAlias == null) {
String aql = TplKit.use(true).getTpl("metaTable.lastAlias");
lastAlias = MetaTable.dao.findFirst(aql, String.class);
//String aql = TplKit.use(true).getTpl("metaTable.lastAlias");
lastAlias = findColumn("mable.lastAlias", Kv.of(), String.class);
// lastAlias = MetaTable.dao.findFirst(aql, String.class); // TODO....
}
return lastAlias = next(lastAlias, "");
}
@@ -594,15 +654,72 @@ public class MetaKit extends AbstractService {
public static List<String> tableExist(String[] tableArr, String token) {
List<String> _tableArr = asList(tableArr);
List<String> hv = metaTables.stream()
.filter(x -> _tableArr.contains(x.getName()) && x.getSysPlatId().equals(getPlatId(token)))
.map(MetaTable::getName)
List<String> hv = mTables.stream()
.filter(x -> _tableArr.contains(x.getTablename()) && x.getPlatid().equals(getPlatId(token)))
.map(MTable::getTablename)
.collect(Collectors.toList());
return hv;
}
// ---------------------- repository -------------------
public static <T extends Doc> void save(T... ts) {
public void save(MTable table) {
if (table.getTableid() == null || table.getTableid() == 0) {
metaSource.insert(table);
mTables.add(table);
} else {
metaSource.update(table);
// 更新缓存
mTables.stream().filter(x -> x.getTableid().equals(table.getTableid())).forEach(x -> {
x.setCatalog(table.getCatalog());
x.setComment(table.getComment());
x.setDbid(table.getDbid());
x.setItems(table.getItems());
x.setPlatid(table.getPlatid());
x.setStatus(table.getStatus());
x.setTablename(table.getTablename());
x.setAlias(table.getAlias());
});
}
}
public void save(MService mservice) {
if (mservice.getServid() == 0) {
metaSource.insert(mservice);
metaServices.add(mservice);
} else {
metaSource.update(mservice);
metaServices.stream().filter(x -> x.getServid() == mservice.getServid()).forEach(x -> {
x.setComment(mservice.getComment());
x.setEdits(mservice.getEdits());
x.setDetails(mservice.getDetails());
x.setExports(mservice.getExports());
x.setFilters(mservice.getFilters());
x.setName(mservice.getName());
x.setPlatid(mservice.getPlatid());
x.setShows(mservice.getShows());
x.setTablealias(mservice.getTablealias());
});
}
}
public void save(MLink link) {
if (link.getLinkid() == 0) {
metaSource.insert(link);
metaLinks.add(link);
} else {
metaSource.update(link);
metaLinks.stream().filter(x -> x.getLinkid() == link.getLinkid()).forEach(x -> {
x.setLinks(link.getLinks());
x.setTables(link.getTables());
});
}
}
/*public static <T extends Doc> void save(T... ts) {
if (ts == null || ts.length == 0) return;
for (T t : ts) {
@@ -619,21 +736,21 @@ public class MetaKit extends AbstractService {
t.save();
} else {
if (t instanceof MetaLink) {
*//*if (t instanceof MLink) {
//避免删除属性无效
if (((MetaLink) t).getLink() != null && ((MetaLink) t).getLink().size() > 0) {
if (((MLink) t).getLink() != null && ((MLink) t).getLink().size() > 0) {
t.find(String.format("UPDATE '%s' WITH { link:null } IN MetaLink", t.getKey()), Map.class);
}
}
}*//*
t.update();
}
}
reload(ts[0].getClass());
}
}*/
public static <T extends Doc> T findFirst(T t) {
/*public static <T extends Doc> T findFirst(T t) {
Objects.nonNull(t);
List<T> list = asList();
@@ -654,5 +771,13 @@ public class MetaKit extends AbstractService {
}).findAny();
return (T) any.orElse(null);
}*/
protected static TplKit tplKit = TplKit.use(true);
protected <T> T findColumn(String tpl, Map params, Class<T> type) {
String sql = tplKit.getTpl(tpl, params);
return ((DataJdbcSource) metaSource).nativeQueryOne(type, sql);
}
}

View File

@@ -38,9 +38,9 @@ public class MetaListenter implements ApplicationListener {
@Override
public void preShutdown(Application application) {
if ("db".equals(dcate)) {
/*if ("db".equals(dcate)) {
MetaKit.cacheSave();
}
}*/
}
}

View File

@@ -6,8 +6,8 @@ import net.tccn.base.PageBean;
import net.tccn.base.dbq.fbean.FBean;
import net.tccn.base.dbq.jdbc.api.DbKit;
import net.tccn.base.dbq.parser.ParseMysql;
import net.tccn.meta.MetaService;
import net.tccn.meta.MetaTable;
import net.tccn.meta.MService;
import net.tccn.meta.MTable;
import java.util.List;
import java.util.Map;
@@ -25,9 +25,9 @@ public class DbExecutors {
String[] sqls = PARSER.parseList(fBean);
//当前的业务 => 获取主表 信息 => 数据源信息 => 数据源对象 => 创建数据工具对象 => 查询数据
MetaService metaService = MetaKit.getMetaService(fBean.getName(), fBean.getPlatToken());
MetaTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable());
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbPlatId(), mainTable.getCatalog());
MService metaService = MetaKit.getMetaService(fBean.getName(), fBean.getPlattoken());
MTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTablealias());
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbid(), mainTable.getCatalog());
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));
@@ -37,7 +37,7 @@ public class DbExecutors {
Integer total = countFuture.get();
rows.forEach(m -> {
m.forEach((k,v) -> {
m.forEach((k, v) -> {
/*if ("[B".equals(v.getClass().getName())) {
try {
//System.out.println(k + " : " + new String((byte[]) v, "UTF-8"));
@@ -47,7 +47,7 @@ public class DbExecutors {
}
}*/
// 避免前端 解析丢失精度
if (v instanceof Long && (Long)v > 9007199254740991L) {
if (v instanceof Long && (Long) v > 9007199254740991L) {
m.put(k, Kv.toAs(v, String.class));
}
});
@@ -55,18 +55,18 @@ public class DbExecutors {
return PageBean.by(rows, total);
}
public static void del(String name, Map data, String token) {
MetaService metaService = MetaKit.getMetaService(name, token);
MetaTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable());
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbPlatId(), mainTable.getCatalog());
/*public static void del(String name, Map data, String token) {
MService metaService = MetaKit.getMetaService(name, token);
MTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTablealias());
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbid(), mainTable.getCatalog());
String delSql = PARSER.parseDel(name, data, token);
dbKit.exetute(delSql);
}
}*/
public static void save(String name, Map data, String token) {
MetaTable mainTable = MetaKit.getMainTable(name, token);
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbPlatId(), mainTable.getCatalog());
MTable mainTable = MetaKit.getMainTable(name, token);
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbid(), mainTable.getCatalog());
String sql = PARSER.parseSave(name, data, token);
dbKit.exetute(sql);

View File

@@ -13,8 +13,8 @@ import java.util.List;
@Setter
public class FBean {
private String platToken; // 平台token
private String name; // 业务名称
private String plattoken; // 平台token
private String name; // 业务名称
private String type; // 操作类型 list列表export导出
private List<Filter> filters;//[{f:xx, v: v, type:t}] -- t,

View File

@@ -57,7 +57,7 @@ public class Filter {
filters.forEach(x -> {
buf.append(" and d.").append(x.col).append(" " + (x.type == null ? "==" : x.type) + " ");
//处理数值型字段查询
if ("sysPlatId".equals(x.col) || "platId".equals(x.col) || "status".equals(x.col) || false) {
if ("platid".equals(x.col) || "platId".equals(x.col) || "status".equals(x.col)) {
buf.append(x.value);
} else {
buf.append("'" + x.value + "'");

View File

@@ -2,34 +2,51 @@ package net.tccn.base.dbq.jdbc.api;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.arango.Doc;
import org.redkale.annotation.Comment;
import org.redkale.convert.ConvertColumn;
import org.redkale.persistence.Column;
import org.redkale.persistence.Entity;
import org.redkale.persistence.Id;
import javax.persistence.Table;
import java.util.List;
/**
* 数据库平台
*
* @author: liangxianyou at 2018/11/14 12:58.
*/
@Getter
@Setter
@Table(name = "MetaDb", catalog = "db_meta")
public class DbAccount extends Doc<DbAccount> {
public static DbAccount dao = dao(DbAccount.class);
@Entity(comment = "[数据库平台表]")
public class DbAccount {
@Id
@Comment("[数据库ID]")
private int dbid;
private String name; //名称
private String cate; //类型 mysql|ArangoDb
private String remark; //备注
private String url; //数据库连接地址
private String user; //账号
private String pwd; //密码
private List<String> catalogs; //库
private Integer status;//状态 1启用 0 未启用
@Column(length = 64, comment = "[名称]")
private String dbname;
//----------------------------
private boolean tmp; // TODO: 处理临时连接对象
@Comment("[类型mysql|ArangoDb]")
@Column(length = 32, comment = "[类型]")
private String cate;
@Comment("[备注]")
@Column(comment = "[备注]")
private String remark;
@Column(length = 128, comment = "[数据库连接地址]")
private String url;
@Column(length = 32, comment = "[账号]")
private String user;
@Column(length = 64, comment = "[密码]")
private String pwd;
// 将catalogs作为JSON字符串存储但此处为了方便解析将其转换为List<String>
@Column(length = 255, comment = "[库]JSON格式存储多个库名")
private List<String> catalogs;
@Column(comment = "[状态] 1启用0未启用")
private short status;
@Column(updatable = false, comment = "[创建时间]")
private long createtime;
public String accountKey() {
int start = url.indexOf("//") + 2;
@@ -46,4 +63,5 @@ public class DbAccount extends Doc<DbAccount> {
public String getPwd() {
return pwd;
}
}

View File

@@ -33,7 +33,7 @@ public class DbKit implements DbSource {
try {
if (Utils.isEmpty(dbAccount.getPwd())) {
DbAccount account = MetaKit.getDbPlat(dbAccount.getKey());
DbAccount account = MetaKit.getDbPlat(dbAccount.getDbid());
dbAccount.setPwd(account.getPwd());
}
@@ -43,7 +43,8 @@ public class DbKit implements DbSource {
this.dbSource = dbSource;
} catch (Exception e) {
throw new IllegalArgumentException(String.format("创建DbKit失败数据库类型[cate:%s]未知", dbAccount.getCate()));
e.printStackTrace();
// throw new IllegalArgumentException(String.format("创建DbKit失败数据库类型[cate:%s]未知", dbAccount.getCate()));
}
}

View File

@@ -1,10 +1,13 @@
package net.tccn.base.dbq.parser;
import net.tccn.base.*;
import net.tccn.base.CfgException;
import net.tccn.base.Kv;
import net.tccn.base.MetaKit;
import net.tccn.base.Utils;
import net.tccn.base.dbq.fbean.*;
import net.tccn.meta.MetaLink;
import net.tccn.meta.MetaService;
import net.tccn.meta.MetaTable;
import net.tccn.meta.MLink;
import net.tccn.meta.MService;
import net.tccn.meta.MTable;
import java.util.List;
import java.util.Map;
@@ -19,12 +22,12 @@ import java.util.stream.Collectors;
*/
public class ParseMysql implements Parser {
Predicate<Kv<String, MetaTable>> sameDbFun = (kv) -> {
String dbPlatId = null;
for (MetaTable metaTable : kv.values()) {
if (dbPlatId == null) {
dbPlatId = metaTable.getDbPlatId();
} else if (!dbPlatId.equals(metaTable.getDbPlatId())) {
Predicate<Kv<String, MTable>> sameDbFun = (kv) -> {
int dbid = 0;
for (MTable metaTable : kv.values()) {
if (dbid == 0) {
dbid = metaTable.getDbid();
} else if (dbid != metaTable.getDbid()) {
return false;
}
}
@@ -38,16 +41,16 @@ public class ParseMysql implements Parser {
*/
@Override
public String[] parseList(FBean fBean) {
MetaService metaService = MetaKit.getMetaService(fBean.getName(), fBean.getPlatToken());
MService metaService = MetaKit.getMetaService(fBean.getName(), fBean.getPlattoken());
Kv<String, MetaTable> tables = MetaKit.getMetaTables(metaService, false);//所有的关联表信息
MetaTable metaTable = tables.get(metaService.getTable());//基础元数据
Kv<String, MTable> tables = MetaKit.getMTables(metaService, false);//所有的关联表信息
MTable metaTable = tables.get(metaService.getTablealias());//基础元数据
List<Map<String, String>> shows = metaService.getShows();//查询的属性-列表
List<Map<String, String>> exports = metaService.getExports();//查询的属性-导出
List<String> _filters = fBean.getFilters().stream().map(Filter::getCol).collect(Collectors.toList());
List<MetaLink> links = MetaKit.getMetaLinks(
metaService.getTable(),
List<MLink> links = MetaKit.getMetaLinks(
metaService.getTablealias(),
shows.stream().map(x -> x.get("col")).collect(Collectors.toList()),
_filters
);
@@ -75,8 +78,7 @@ public class ParseMysql implements Parser {
bufSelect.append(x.get("col")).append(" as ").append("'").append(x.get("col")).append("',");
});
bufSelect.deleteCharAt(bufSelect.length() - 1);
}
else if ("list".equals(fBean.getType()) && !Utils.isEmpty(shows)) {
} else if ("list".equals(fBean.getType()) && !Utils.isEmpty(shows)) {
shows.forEach(x -> {
bufSelect.append(x.get("col")).append(" as ").append("'").append(x.get("col")).append("',");
});
@@ -87,15 +89,15 @@ public class ParseMysql implements Parser {
//from
StringBuilder bufFrom = new StringBuilder();
bufFrom.append(" from `").append(metaTable.getCatalog()).append("`.`").append(metaTable.getName()).append("` `").append(metaTable.getAlias()).append("`");
bufFrom.append(" from `").append(metaTable.getCatalog()).append("`.`").append(metaTable.getTablename()).append("` `").append(metaTable.getAlias()).append("`");
//left join
if (!Utils.isEmpty(links)) {
links.forEach(x -> {
MetaTable rightTable = tables.get(metaTable.getAlias().equals(x.getTables()[0]) ? x.getTables()[1] : x.getTables()[0]);
MTable rightTable = tables.get(metaTable.getAlias().equals(x.getTables()[0]) ? x.getTables()[1] : x.getTables()[0]);
if (rightTable != null) {
bufFrom.append(" left join ").append(rightTable.getCatalog()).append(".").append(rightTable.getName()).append(" `").append(rightTable.getAlias()).append("` on ");
bufFrom.append(" left join ").append(rightTable.getCatalog()).append(".").append(rightTable.getTablename()).append(" `").append(rightTable.getAlias()).append("` on ");
int tag = bufFrom.length();
x.getLink().forEach((k, v) -> {
x.getLinks().forEach((k, v) -> {
if (bufFrom.length() > tag) {
bufFrom.append(" and ");
}
@@ -129,14 +131,14 @@ public class ParseMysql implements Parser {
* @param token
* @return
*/
public String parseDel(String name, Map data, String token) {
MetaService metaService = MetaKit.getMetaService(name, token);
/*public String parseDel(String name, Map data, String token) {
MService metaService = MetaKit.getMetaService(name, token);
Map<String, String> dels = metaService.getDels();
MetaTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable());
MTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable());
String sql = "";
if ("UP_FIELD".equalsIgnoreCase(dels.get("cate"))) {
data.put("table", mainTable.getName());
data.put("table", mainTable.getTablename());
sql = TplKit.parseTpl("update #(table) set status=9 where id=#(id)", data);
} else if ("SQL".equalsIgnoreCase(dels.get("cate"))) {
sql = TplKit.parseTpl(dels.get("sql"), data);
@@ -145,7 +147,7 @@ public class ParseMysql implements Parser {
}
return sql;
}
}*/
/**
* 保存数据解析逻辑:
@@ -157,7 +159,7 @@ public class ParseMysql implements Parser {
* @return sql 待执行的sql语句
*/
public String parseSave(String serviceName, Map<String, String> data, String token) {
MetaTable mainTable = MetaKit.getMainTable(serviceName, token);
MTable mainTable = MetaKit.getMainTable(serviceName, token);
String alias = mainTable.getAlias();
String[] pks = mainTable.pk();
@@ -170,7 +172,7 @@ public class ParseMysql implements Parser {
x.startsWith(alias + ".") || !Utils.isEmpty(data.get(alias + "." + x))
).collect(Collectors.toList());
if (pks.length == 0) {
throw new CfgException("保存数据失败,检查业务主表[%s-%S]主键配置", mainTable.getName(), mainTable.getComment());
throw new CfgException("保存数据失败,检查业务主表[%s-%S]主键配置", mainTable.getTablename(), mainTable.getComment());
} else if (keys.size() == 0) {
throw new CfgException("保存数据失败,提交数据不能改空");
}
@@ -192,10 +194,8 @@ public class ParseMysql implements Parser {
vs.deleteCharAt(vs.length() - 1);
}
return String.format(sqlTpl, mainTable.getName(), ks, vs);
}
else { //修改
return String.format(sqlTpl, mainTable.getTablename(), ks, vs);
} else { //修改
String sqlTpl = "update `%s` set %s where `%s` = '%s';"; // para: table、 kvs、 pk、 pv
StringBuilder kvs = new StringBuilder(); // `k1`='v1',`k2`='v2', ...
String pk = pks[0];
@@ -208,7 +208,7 @@ public class ParseMysql implements Parser {
kvs.deleteCharAt(kvs.length() - 1);
}
return String.format(sqlTpl, mainTable.getName(), kvs, pk, pv);
return String.format(sqlTpl, mainTable.getTablename(), kvs, pk, pv);
}
}
}

View File

@@ -24,7 +24,7 @@ public class DbTask extends Doc<DbTask> {
private String sql; //SQL
private String para; //默认查询参数
private String cate; //任务类型 find|update
private Integer sysPlatId; //数据平台id
private Integer platid; //数据平台id
private Integer platId; //数据平台id
private String catalog; //数据库名
private Integer status; //状态 1启用|0未启用|-1删除

View File

@@ -2,24 +2,24 @@ package net.tccn.dict;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.arango.Doc;
import net.tccn.base.BaseEntity;
import javax.persistence.Table;
import java.io.Serializable;
/**
* @author: liangxianyou
*/
@Getter
@Setter
@Table(name = "Dict", catalog = "db_meta")
public class Dict extends Doc<Dict> implements Serializable {
public static Dict dao = Doc.dao(Dict.class);
@Table(name = "Dict")
public class Dict extends BaseEntity {
private int dictid;
private String type; // 字典类型
private String value; // 字典值
private String label; // 中文名
private String pValue; // 父级字典值
private String code; //
private String sysPlatId; // 系统平台id
private Integer platid; // 系统平台id
}

View File

@@ -12,25 +12,25 @@ import java.util.*;
*/
public final class DictKit {
private static Map<String, DictKit> kits = new HashMap<>();
private String platToken;
private String plattoken;
private Map<String, List<Dict>> dicts;
private DictKit() {
}
public synchronized static DictKit use(String platToken) {
DictKit dictKit = kits.get(platToken);
public synchronized static DictKit use(String plattoken) {
DictKit dictKit = kits.get(plattoken);
if (dictKit == null) {
dictKit = new DictKit();
dictKit.platToken = platToken;
dictKit.dicts = MetaKit.getDictData(platToken);
kits.put(platToken, dictKit);
dictKit.plattoken = plattoken;
dictKit.dicts = MetaKit.getDictData(plattoken);
kits.put(plattoken, dictKit);
}
return dictKit;
}
public synchronized void reload() {
this.dicts = MetaKit.getDictData(platToken);
this.dicts = MetaKit.getDictData(plattoken);
}
// 初始化字典,不同模式下,数据来源不同
@@ -55,8 +55,8 @@ public final class DictKit {
ArangoDB arangoDb = new ArangoDB.Builder().host(host, port).user(user).password(passwd).build();
ArangoDatabase dbDemo = arangoDb.db("db_demo");
String platId = "28121369";//MetaKit.getPlatId(platToken);
String dictAQL = String.format("for d in Dict filter d.sysPlatId=='%s'return d", platId);
String platId = "28121369";//MetaKit.getPlatId(plattoken);
String dictAQL = String.format("for d in Dict filter d.platid=='%s'return d", platId);
List<Dict> list = (List) dbDemo.query(dictAQL, Map.class).asListRemaining();
String[] fields = {"label", "value", "pValue"};

View File

@@ -18,7 +18,7 @@ import java.util.Map;
public class DictService extends BaseService {
@RestMapping(name = "list", comment = "根据type 加载对应的字典列表")
public JBean list(@RestParam(name = "platToken") String token, String type) {
public JBean list(@RestParam(name = "plattoken") String token, String type) {
JBean jBean = new JBean();
DictKit dictKit = DictKit.use(token);

View File

@@ -2,11 +2,11 @@ package net.tccn.file;
import net.tccn.base.*;
import net.tccn.base.dbq.table.Field;
import net.tccn.meta.MetaTable;
import net.tccn.plat.MetaPlat;
import net.tccn.meta.MTable;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService;
import org.redkale.source.FilterNode;
import java.io.File;
import java.util.ArrayList;
@@ -41,19 +41,19 @@ public class _FileService extends BaseService {
}).collect(Collectors.toList());
}
public MetaPlat getSysPlat(String token) {
/*public MetaPlat getSysPlat(String token) {
return getT(token, MetaPlat.class, () -> MetaPlat.dao.findFirst(new MetaPlat(token)));
}
}*/
@RestMapping(name = "data", comment = "得到文件数据")
public JBean data(String filePath, @RestParam(name = "platToken") String token) {
public JBean data(String filePath, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
//SysPlat sysPlat = getSysPlat(token);
File file = new File(webroot, filePath);
if (file.exists()) {
Map<String, List<Map>> map = ExcelKit.readExcelAll(file, FIELDS);
Kv<String, MetaTable> data = Kv.of();
Kv<String, MTable> data = Kv.of();
map.forEach((k, v) -> {
if (v.size() > 2) {
data.put(k.replace(" ", ""), toMetaTable(v));
@@ -67,8 +67,8 @@ public class _FileService extends BaseService {
data.forEach((k, v) -> {
Kv kv = Kv.of();
res.put(k,
kv.set("name", v.getName())
.set("hv", hv.contains(v.getName()) ? 1 : 0)
kv.set("name", v.getTablename())
.set("hv", hv.contains(v.getTablename()) ? 1 : 0)
.set("comment", v.getComment())
);
});
@@ -80,11 +80,11 @@ public class _FileService extends BaseService {
}
@RestMapping(name = "sheet_data", comment = "得到sheet数据")
public JBean sheetData(String filePath, String sheetName, @RestParam(name = "platToken") String token) {
public JBean sheetData(String filePath, String sheetName, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
File file = new File(webroot, filePath);
List<Map> list = ExcelKit.readExcel(file, FIELDS, sheetName);
MetaTable metaTable = toMetaTable(list);
MTable metaTable = toMetaTable(list);
jBean.setBody(metaTable);
@@ -94,7 +94,7 @@ public class _FileService extends BaseService {
@RestMapping(ignore = true, comment = "导入excel数据到metatable")
public JBean saveSheet(@RestParam(name = "sheetArr", comment = "sheet名") String[] sheetArr,
@RestParam(name = "filePath", comment = "文件路径") String filePath,
@RestParam(name = "platToken") String token) {
@RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
File file = new File(webroot, filePath);
@@ -103,31 +103,31 @@ public class _FileService extends BaseService {
Set<String> ks = map.keySet();
// 找到需要导入的sheet名并组装对应的数据
MetaTable[] metaTables = Stream.of(sheetArr).filter(x -> {
MTable[] metaTables = Stream.of(sheetArr).filter(x -> {
if (!ks.contains(x)) return false;
MetaTable bean = new MetaTable();
bean.setSysPlatId(platId(token));
bean.setName(x);
return MetaTable.dao.findFirst(bean) == null;
FilterNode node = FilterNode.create("platid", platId(token)).and("tablename", x);
return !metaSource.exists(MTable.class, node);
}).map(x -> {
MetaTable metaTable = toMetaTable(map.get(x));
metaTable.setSysPlatId(platId(token));
metaTable.setAlias(MetaKit.nextAlias());
MTable metaTable = toMetaTable(map.get(x));
metaTable.setPlatid(platId(token));
metaTable.setAlias(metaKit.nextAlias());
return metaTable;
}).toArray(MetaTable[]::new);
}).toArray(MTable[]::new);
MetaKit.save(metaTables);
for (MTable x : metaTables) {
metaKit.save(x);
}
return jBean;
}
/**
* 组装元数据
*/
private MetaTable toMetaTable(List<Map> list) {
private MTable toMetaTable(List<Map> list) {
//Kv col = Kv.of();
MetaTable metaTable = new MetaTable();
MTable metaTable = new MTable();
list.remove(1);//list[0] head info
Map rowHead = list.remove(0);
@@ -135,7 +135,7 @@ public class _FileService extends BaseService {
String comment = getComment(rowHead);//list[1] comment,
String tableName = getTableName(rowHead);
//col.set("name", tableName).set("comment", comment);
metaTable.setName(tableName);
metaTable.setTablename(tableName);
metaTable.setComment(comment);
//所有字段

View File

@@ -0,0 +1,31 @@
package net.tccn.meta;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.BaseEntity;
import org.redkale.persistence.Column;
import org.redkale.persistence.Entity;
import org.redkale.persistence.Id;
import org.redkale.persistence.Table;
import java.util.HashMap;
import java.util.Map;
/**
* Created by liangxianyou at 2018/12/25 16:22.
*/
@Getter
@Setter
@Entity
@Table(name = "mlink", comment = "MLink表")
public class MLink extends BaseEntity {
@Id
@Column(comment = "[主键ID]自增")
private int linkid; // 根据您的说明移除了nonnull但通常主键不应该允许为空
@Column(comment = "[关联的表]存储表别名")
private String[] tables = new String[0];
@Column(comment = "[关联关系]")
private Map<String, String> links = new HashMap<>();
}

View File

@@ -0,0 +1,53 @@
package net.tccn.meta;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.BaseEntity;
import org.redkale.persistence.Column;
import org.redkale.persistence.Entity;
import org.redkale.persistence.Id;
import org.redkale.persistence.Table;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by liangxianyou at 2018/12/24 16:15.
*/
@Getter
@Setter
@Entity
@Table(name = "mservice", comment = "MService表")
public class MService extends BaseEntity {
@Id
@Column(comment = "[服务ID]")
private int servid;
@Column(length = 64, comment = "[业务标识]")
private String name;
@Column(length = 15, comment = "[主体表别名]")
private String tablealias;
@Column(length = 64, comment = "[业务中文名]")
private String comment;
@Column(comment = "[平台id]")
private Integer platid;
@Column(comment = "[SHOWS]")
private List<Map<String, String>> shows = new ArrayList<>();
@Column(comment = "[EDITS]")
private List<FromItem> edits = new ArrayList<>();
@Column(comment = "[DETAILS]")
private List<Map<String, String>> details = new ArrayList<>();
@Column(comment = "[FILTERS]")
private List<Filter> filters = new ArrayList<>();
@Column(comment = "[exports]")
private List<Map<String, String>> exports = new ArrayList<>();
}

View File

@@ -2,11 +2,10 @@ package net.tccn.meta;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.arango.Doc;
import net.tccn.base.BaseEntity;
import net.tccn.base.dbq.table.Field;
import org.redkale.persistence.*;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -18,26 +17,47 @@ import java.util.stream.Collectors;
*/
@Getter
@Setter
@Table(name = "MetaTable", catalog = "db_meta")
public class MetaTable extends Doc<MetaTable> implements Serializable {
public static final MetaTable dao = MetaTable.dao(MetaTable.class);
@Entity
@Table(name = "mtable", comment = "TABLE记录表")
@Cacheable(value = true, interval = 60 * 60 * 1000, direct = true)
public class MTable extends BaseEntity {
@Id
@Column(comment = "[表ID]")
private Integer tableid;
private String name;
private String alias; //表别名全库唯一程序自动生成
private String comment;
@Column(length = 64, comment = "[表名称]")
private String tablename;
@Column(length = 15, unique = true, comment = "[表别名]全库唯一,程序自动生成")
private String alias;
@Column(comment = "[表字段]")
private List<Field> items;
private String sysPlatId; //所属系统平台
private String dbPlatId; //所属数据平台
private String catalog; //所在database
private Integer status; //状态 0 默认 9删除
private Integer hv;//临时
@Column(length = 64, comment = "[表注释]")
private String comment;
@Column(comment = "[临时]")
private int hv;
@Column(comment = "[状态]0 默认, 9删除'")
private int status;
@Column(comment = "[所属系统平台]")
private Integer platid;
@Column(comment = "[所属数据平台]")
private Integer dbid;
@Column(length = 32, comment = "[所在database]")
private String catalog;
// ------------------------------------------------
public static MetaTable toAs(net.tccn.base.dbq.table.Table table) {
public static MTable toAs(net.tccn.base.dbq.table.Table table) {
List<Field> fields = table.getColumns().stream().map(Field::toAs).collect(Collectors.toList());
MetaTable _bean = new MetaTable();
_bean.setName(table.getName());
MTable _bean = new MTable();
_bean.setTablename(table.getName());
_bean.setComment(table.getComment());
_bean.setCatalog(table.getCatalog());
_bean.setItems(fields);

View File

@@ -1,21 +0,0 @@
package net.tccn.meta;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.arango.Doc;
import javax.persistence.Table;
import java.util.Map;
/**
* Created by liangxianyou at 2018/12/25 16:22.
*/
@Getter
@Setter
@Table(name = "MetaLink", catalog = "db_meta")
public class MetaLink extends Doc<MetaLink> {
public static MetaLink dao = Doc.dao(MetaLink.class);
private String[] tables;
private Map<String, String> link;
}

View File

@@ -1,36 +0,0 @@
package net.tccn.meta;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.arango.Doc;
import javax.persistence.Table;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by liangxianyou at 2018/12/24 16:15.
*/
@Getter
@Setter
@Table(name = "MetaService", catalog = "db_meta")
public class MetaService extends Doc<MetaService> {
public static MetaService dao = Doc.dao(MetaService.class);
private String name; //业务标识
private String table; //主体表别名
private String comment; //业务中文名
private String sysPlatId; //平台id
private List<Map<String,String>> shows = new ArrayList<>();
private List<FromItem> edits = new ArrayList<>();
private List<Map<String,String>> details = new ArrayList<>();
private Map<String, String> dels = new HashMap<>();
private List<Filter> filters = new ArrayList<>();//{name:"", label:"", checked:true, }
private List<Map<String,String>> exports = new ArrayList<>();
//------
}

View File

@@ -2,7 +2,7 @@ package net.tccn.meta;
import net.tccn.base.*;
import net.tccn.base.dbq.table.Field;
import net.tccn.plat.MetaPlat;
import net.tccn.plat.MPlat;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService;
@@ -19,20 +19,20 @@ public class MetadataService extends BaseService { //arango
//----------- 元数据管理 ---------------
@RestMapping(name = "tablelist", comment = "table列表")
public JBean tableList(@RestParam(name = "platToken") String token, String catalog, String dbPlatId, String name) {
public JBean tableList(@RestParam(name = "plattoken") String token, String catalog, Integer dbid, String name) {
JBean jBean = new JBean();
List<Kv> list = MetaKit.getMetaTables().stream().filter(x
List<Kv> list = MetaKit.getMTables().stream().filter(x
-> (isEmpty(catalog) || catalog.equals(x.getCatalog())) &&
(isEmpty(dbPlatId) || dbPlatId.equals(x.getDbPlatId())) &&
(isEmpty(name) || x.getName().contains(name)) &&
(isEmpty(token) || x.getSysPlatId().equals(platId(token))) &&
(isEmpty(dbid) || dbid == (int) x.getDbid()) &&
(isEmpty(name) || x.getTablename().contains(name)) &&
(isEmpty(token) || x.getPlatid().equals(platId(token))) &&
(isEmpty(x.getStatus()) || x.getStatus() != 9)
).map(x -> Kv.of("name", x.getName())
).map(x -> Kv.of("tablename", x.getTablename())
.set("comment", x.getComment())
.set("catalog", x.getCatalog())
.set("alias", x.getAlias())
.set("dbPlatId", x.getDbPlatId())
.set("dbid", x.getDbid())
.set("linkCount", MetaKit.getMetaLinks().stream().filter(link -> { // 关联表数量
String[] tables = link.getTables();
return x.getAlias().equals(tables[0]) || x.getAlias().equals(tables[1]);
@@ -43,11 +43,11 @@ public class MetadataService extends BaseService { //arango
@RestMapping(name = "service_list", comment = "业务列表")
public JBean serviceList(@RestParam(name = "platToken") String token) {
public JBean serviceList(@RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
List<MetaService> list = MetaKit.getMetaServices().stream()
.filter(x -> platId(token).equals(x.getSysPlatId()))
List<MService> list = MetaKit.getMetaServices().stream()
.filter(x -> platId(token).equals(x.getPlatid()))
.collect(Collectors.toList());
jBean.setBody(list);
@@ -55,10 +55,10 @@ public class MetadataService extends BaseService { //arango
}
@RestMapping(name = "tableinfo", comment = "table详情")
public JBean tableInfo(@RestParam(name = "platToken") String token, String name, String alias) {
public JBean tableInfo(@RestParam(name = "plattoken") String token, String name, String alias) {
JBean jBean = new JBean();
MetaTable metaTable = null;
MTable metaTable = null;
if (!isEmpty(name)) {
metaTable = MetaKit.getMetaTable(name, token);
}
@@ -70,11 +70,11 @@ public class MetadataService extends BaseService { //arango
}
@RestMapping(name = "service_save", comment = "service信息保存")
public JBean serviceSave(@RestParam(name = "platToken") String token, @RestParam(name = "service") MetaService service) {
public JBean serviceSave(@RestParam(name = "plattoken") String token, @RestParam(name = "service") MService service) {
JBean jBean = new JBean();
do {
// 标识码非空校验
if (isEmpty(service.getTable())) {
if (isEmpty(service.getTablealias())) {
jBean.set(-1, "请选择业务主表");
break;
}
@@ -86,29 +86,29 @@ public class MetadataService extends BaseService { //arango
}
// 标识码重复校验
MetaService metaService = MetaKit.getMetaService(service.getName(), token);
if (metaService != null && !metaService.getKey().equals(service.getKey())) {
MService metaService = MetaKit.getMetaService(service.getName(), token);
if (metaService != null && metaService.getServid() != service.getServid()) {
jBean.set(-1, "业务标识码被占用,修改业务标识码重试");
break;
}
if (service.getKey() == null) {
service.setSysPlatId(platId(token));
if (service.getServid() == 0) {
service.setPlatid(platId(token));
}
MetaKit.save(service);
metaKit.save(service);
} while (false);
return jBean;
}
@RestMapping(name = "service_info", comment = "service基本信息")
public JBean serviceInfo(@RestParam(name = "platToken") String token, String name) {
MetaService metaService = MetaKit.getMetaService(name, token);
return JBean.by(0, "", metaService);
public JBean serviceInfo(@RestParam(name = "plattoken") String token, String name) {
MService mService = MetaKit.getMetaService(name, token);
return JBean.by(0, "", mService);
}
@RestMapping(name = "service_detail", comment = "service详情")
public JBean serviceDetail(@RestParam(name = "platToken") String token, String name) {
MetaService metaService = MetaKit.getMetaService(name, token);
public JBean serviceDetail(@RestParam(name = "plattoken") String token, String name) {
MService metaService = MetaKit.getMetaService(name, token);
Kv detail = MetaKit.buildeDetail(metaService);
return JBean.by(0, "", detail);
@@ -116,122 +116,122 @@ public class MetadataService extends BaseService { //arango
//修改item的排序
@RestMapping(name = "itemsort", comment = "字段排序")
public JBean itemSortSave(String alias, String[] items, @RestParam(name = "platToken") String token) {
public JBean itemSortSave(String alias, String[] items, @RestParam(name = "plattoken") String token) {
MetaTable metaTable = MetaKit.getMetaTableByAlias(alias);
MTable metaTable = MetaKit.getMetaTableByAlias(alias);
MetaKit.sortItem.apply(metaTable, items);
MetaKit.save(metaTable);
metaKit.save(metaTable);
return JBean.OK;
}
@RestMapping(name = "itemupdate", comment = "字段修改")
public JBean itemUpdate(String alias, List<Field> items, @RestParam(name = "platToken") String token) {
MetaTable metaTable = MetaKit.getMetaTableByAlias(alias);
public JBean itemUpdate(String alias, List<Field> items, @RestParam(name = "plattoken") String token) {
MTable metaTable = MetaKit.getMetaTableByAlias(alias);
MetaKit.itemUpdate.apply(metaTable, items);
MetaKit.save(metaTable);
metaKit.save(metaTable);
return JBean.OK;
}
@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 (Utils.isEmpty(shows)) return null;
MetaService metaService = MetaKit.getMetaService(name, token);
MService metaService = MetaKit.getMetaService(name, token);
metaService.setShows(shows);
MetaKit.save(metaService);
metaKit.save(metaService);
return JBean.OK;
}
@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 (Utils.isEmpty(exports)) return null;
MetaService metaService = MetaKit.getMetaService(name, token);
MService metaService = MetaKit.getMetaService(name, token);
metaService.setExports(exports);
MetaKit.save(metaService);
metaKit.save(metaService);
return JBean.OK;
}
@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 (Utils.isEmpty(details)) return null;
MetaService metaService = MetaKit.getMetaService(name, token);
MService metaService = MetaKit.getMetaService(name, token);
metaService.setDetails(details);
MetaKit.save(metaService);
metaKit.save(metaService);
return JBean.OK;
}
@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 (Utils.isEmpty(edits)) return null;
MetaService metaService = MetaKit.getMetaService(name, token);
MService metaService = MetaKit.getMetaService(name, token);
metaService.setEdits(edits);
MetaKit.save(metaService);
metaKit.save(metaService);
return JBean.OK;
}
@RestMapping(name = "delsave", comment = "删除配置保存")
public JBean delSave(String name, Map<String, String> dels, @RestParam(name = "platToken") String token) {
/*@RestMapping(name = "delsave", comment = "删除配置保存")
public JBean delSave(String name, Map<String, String> dels, @RestParam(name = "plattoken") String token) {
if (Utils.isEmpty(dels)) return null;
MetaService metaService = MetaKit.getMetaService(name, token);
MService metaService = MetaKit.getMetaService(name, token);
metaService.setDels(dels);
MetaKit.save(metaService);
return JBean.OK;
}
}*/
@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 (Utils.isEmpty(items)) return null;
MetaTable metaTable = MetaKit.getMetaTable(serviceKey, token);
MTable metaTable = MetaKit.getMetaTable(serviceKey, token);
//fixme: metaTable.setImports(items);
MetaKit.save(metaTable);
metaKit.save(metaTable);
return JBean.OK;
}
@RestMapping(name = "dbplatupdate", comment = "数据平台修改")
public JBean dbPlatUpdate(MetaTable metaTable, @RestParam(name = "platToken") String token) {
public JBean dbPlatUpdate(MTable metaTable, @RestParam(name = "plattoken") String token) {
MetaTable _metaTable = MetaKit.getMetaTableByKey(metaTable.getKey());
_metaTable.setName(metaTable.getName());
MTable _metaTable = MetaKit.getMetaTableByKey(metaTable.getTableid());
_metaTable.setTablename(metaTable.getTablename());
_metaTable.setComment(metaTable.getComment());
_metaTable.setCatalog(metaTable.getCatalog());
_metaTable.setDbPlatId(metaTable.getDbPlatId());
_metaTable.setDbid(metaTable.getDbid());
_metaTable.setCatalog(metaTable.getCatalog());
MetaKit.save(_metaTable);
metaKit.save(_metaTable);
return JBean.OK;
}
@RestMapping(name = "filter_update", comment = "查询配置修改")
public JBean filterUpdate(String name, List<Filter> filters, @RestParam(name = "platToken") String token) {
MetaService metaService = MetaKit.getMetaService(name, token);
public JBean filterUpdate(String name, List<Filter> filters, @RestParam(name = "plattoken") String token) {
MService metaService = MetaKit.getMetaService(name, token);
metaService.setFilters(filters);
MetaKit.save(metaService);
metaKit.save(metaService);
return JBean.OK;
}
@RestMapping(name = "table_link_list", comment = "实体表包含link信息的列表,(metalink 管理页面使用)")
public JBean tableLinkList(@RestParam(name = "platToken") String token) {
public JBean tableLinkList(@RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
List<Kv> list = MetaKit.getMetaTables().stream()
.filter(x -> (isEmpty(token) || x.getSysPlatId().equals(platId(token)))
&& (x.getStatus() == null || x.getStatus() != 9)
List<Kv> list = MetaKit.getMTables().stream()
.filter(x -> (isEmpty(token) || x.getPlatid().equals(platId(token)))
&& (x.getStatus() != 9)
).map(x -> {
Kv kv = Kv.of("name", x.getName())
Kv kv = Kv.of("tablename", x.getTablename())
.set("comment", x.getComment())
.set("alias", x.getAlias())
.set("linkCount", 0);
@@ -257,12 +257,12 @@ public class MetadataService extends BaseService { //arango
List<Kv> list = MetaKit.getMetaLinks().stream().filter(x ->
x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias)
).map(x -> {
MetaTable linkTable = MetaKit.getMetaTableByAlias(x.getTables()[0].equals(alias) ? x.getTables()[1] : x.getTables()[0]);
Kv kv = Kv.of("name", linkTable.getName())
MTable linkTable = MetaKit.getMetaTableByAlias(x.getTables()[0].equals(alias) ? x.getTables()[1] : x.getTables()[0]);
Kv kv = Kv.of("tablename", linkTable.getTablename())
.set("alias", linkTable.getAlias())
.set("comment", linkTable.getComment())
.set("linkSize", x.getLink().size())
.set("link", x.getLink());
.set("linkSize", x.getLinks().size())
.set("links", x.getLinks());
return kv;
}).collect(Collectors.toList());
@@ -273,7 +273,7 @@ public class MetadataService extends BaseService { //arango
public JBean linkList(String alias) {
JBean jBean = new JBean();
List<MetaLink> links = MetaKit.getMetaLinks();
List<MLink> links = MetaKit.getMetaLinks();
if (!isEmpty(alias)) {
links = Utils.filter(links, x -> x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias));
@@ -283,8 +283,8 @@ public class MetadataService extends BaseService { //arango
}
@RestMapping(name = "link_save", comment = "实体关系列表")
public JBean linkSave(MetaLink link, @RestParam(name = "platToken") String token) {
MetaKit.save(link);
public JBean linkSave(MLink link, @RestParam(name = "plattoken") String token) {
metaKit.save(link);
return JBean.OK;
}
@@ -292,7 +292,7 @@ public class MetadataService extends BaseService { //arango
@RestMapping(name = "plat_list", comment = "平台列表")
public JBean platList() {
JBean jBean = new JBean();
List<MetaPlat> plats = MetaKit.getSysPlats();
List<MPlat> plats = MetaKit.getMPlats();
return jBean.setBody(plats);
}
@@ -306,7 +306,7 @@ public class MetadataService extends BaseService { //arango
// ------------------------------------ 对外服务 --------------------------------------
@RestMapping(name = "cfg", auth = false, comment = " 功能配置")
public JBean cfg(String name, @RestParam(name = "platToken") String token) {
public JBean cfg(String name, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
Map cfg = MetaKit.cfg(name, token);

View File

@@ -1,10 +1,10 @@
package net.tccn.open;
import net.tccn.base.*;
import net.tccn.base.dbq.DbExecutors;
import net.tccn.base.dbq.fbean.FBean;
import net.tccn.base.dbq.*;
import net.tccn.dict.DictKit;
import net.tccn.meta.MetaService;
import net.tccn.meta.MService;
import org.redkale.net.http.HttpScope;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam;
@@ -23,10 +23,10 @@ import java.util.concurrent.ExecutionException;
public class DataService extends BaseService {
@RestMapping(name = "list", auth = false, comment = "数据分页列表")
public JBean findList(FBean fBean, @RestParam(name = "platToken") String token) {
public JBean findList(FBean fBean, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
try {
fBean.setPlatToken(token);
fBean.setPlattoken(token);
fBean.setType("list");
PageBean page = DbExecutors.findPage(fBean);
jBean.setBody(page);
@@ -38,7 +38,7 @@ public class DataService extends BaseService {
}
@RestMapping(name = "save", comment = "数据保存")
public JBean save(String name, Map<String, String> data, @RestParam(name = "platToken") String token) {
public JBean save(String name, Map<String, String> data, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
try {
DbExecutors.save(name, data, token);
@@ -50,9 +50,9 @@ public class DataService extends BaseService {
}
@RestMapping(name = "export", auth = false, comment = "数据导出excel")
public HttpScope export(FBean fBean, String fileName, @RestParam(name = "platToken") String token) {
public HttpScope export(FBean fBean, String fileName, @RestParam(name = "plattoken") String token) {
try {
fBean.setPlatToken(token);
fBean.setPlattoken(token);
fBean.setType("export");
PageBean page = DbExecutors.findPage(fBean);
Kv heads = MetaKit.cfgExport(fBean.getName(), token);
@@ -64,7 +64,7 @@ public class DataService extends BaseService {
List<Map> data = page.getRows();
//dataDeal
MetaService metaService = MetaKit.getMetaService(fBean.getName(), token);
MService metaService = MetaKit.getMetaService(fBean.getName(), token);
List<Map<String, String>> exports = metaService.getExports();
DictKit dictKit = DictKit.use(token);
//字典映射 、日期转换 、时间转换
@@ -107,8 +107,8 @@ public class DataService extends BaseService {
return HttpScope.refer("excel");
}
@RestMapping(name = "del", auth = false, comment = "数据删除")
public JBean del(String name, Map<String, String> data, @RestParam(name = "platToken") String token) {
/*@RestMapping(name = "del", auth = false, comment = "数据删除")
public JBean del(String name, Map<String, String> data, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
try {
DbExecutors.del(name, data, token);
@@ -116,5 +116,5 @@ public class DataService extends BaseService {
jBean.set(-1, "删除数据失败!");
}
return jBean;
}
}*/
}

View File

@@ -0,0 +1,31 @@
package net.tccn.plat;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.BaseEntity;
import org.redkale.annotation.Comment;
import org.redkale.persistence.Column;
import org.redkale.persistence.Entity;
import org.redkale.persistence.Id;
@Getter
@Setter
@Entity
public class MPlat extends BaseEntity {
@Id
@Comment("[平台ID]")
private Integer platid;
@Comment("[平台名称]")
private String platname;
@Comment("[平台令牌]")
private String plattoken;
@Comment("[备注信息]")
private String remark;
@Comment("[创建时间]")
@Column(updatable = false)
private Long createtime;
}

View File

@@ -1,3 +1,4 @@
/*
package net.tccn.plat;
import lombok.Getter;
@@ -7,10 +8,12 @@ import org.redkale.convert.ConvertColumn;
import javax.persistence.Table;
*/
/**
* 数据库平台
* @author: liangxianyou at 2018/11/14 12:58.
*/
*//*
@Getter
@Setter
@Table(name = "MetaDb", catalog = "db_meta")
@@ -37,8 +40,9 @@ public class MetaDb extends Doc<MetaDb> {
return user + ":" + pwd + "@" + host;
}
@ConvertColumn(ignore = true)
//@ConvertColumn(ignore = true)
public String getPwd() {
return pwd;
}
}
*/

View File

@@ -1,3 +1,4 @@
/*
package net.tccn.plat;
import lombok.Getter;
@@ -5,9 +6,11 @@ import lombok.Setter;
import net.tccn.base.arango.Doc;
import javax.persistence.Table;
*/
/**
* @author: liangxianyou at 2018/11/26 17:46.
*/
*//*
@Getter
@Setter
@Table(name = "MetaPlat", catalog = "db_meta")
@@ -25,3 +28,4 @@ public class MetaPlat extends Doc<MetaPlat> {
}
}
*/

View File

@@ -3,32 +3,37 @@ package net.tccn.plat;
import net.tccn.base.BaseService;
import net.tccn.base.JBean;
import net.tccn.base.MetaKit;
import net.tccn.base.PageBean;
import net.tccn.base.Utils;
import net.tccn.base.dbq.jdbc.api.DbAccount;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestService;
import org.redkale.source.FilterBean;
import org.redkale.source.Flipper;
import org.redkale.util.Comment;
import java.util.List;
import org.redkale.util.Sheet;
@RestService(name = "plat", automapping = true, comment = "业务/数据平台")
public class PlatService extends BaseService {
@RestMapping(name = "list", comment = "平台列表")
public JBean list(MetaPlat plat, Flipper flipper) {
public JBean list(MPlat plat, Flipper flipper) {
JBean jBean = new JBean();
//PageBean<SysPlat> page = SysPlat.dao.findPage(plat, flipper);
List<MetaPlat> list = MetaKit.getSysPlats();
PageBean page = PageBean.by(list, list.size());
/*List<MetaPlat> list = MetaKit.getSysPlats();
PageBean page = PageBean.by(list, list.size());*/
return jBean.setBody(page);
Sheet<MPlat> sheet = metaSource.querySheet(MPlat.class, flipper, (FilterBean) null);
return jBean.setBody(sheet);
}
@Comment("平台信息保存")
public JBean save(MetaPlat plat) {
MetaKit.save(plat);
public JBean save(MPlat plat) {
if (!Utils.isEmpty(plat.getPlatid())) {
metaSource.update(plat);
} else {
metaSource.insert(plat);
}
return JBean.OK;
}
@@ -40,18 +45,29 @@ public class PlatService extends BaseService {
//------------------------
@RestMapping(name = "db_list", comment = "数据源列表")
public JBean dbList(MetaDb plat, Flipper flipper) {
public JBean dbList(DbAccount plat, Flipper flipper) {
JBean jBean = new JBean();
List<DbAccount> list = MetaKit.getDbPlats();
PageBean page = PageBean.by(list, list.size());
/*List<DbAccount> list = MetaKit.getDbPlats();
PageBean page = PageBean.by(list, list.size());*/
return jBean.setBody(page);
Sheet<DbAccount> sheet = metaSource.querySheet(DbAccount.class, flipper, (FilterBean) null);
return jBean.setBody(sheet);
}
@RestMapping(name = "db_save", comment = "数据源信息保存")
public JBean dbSave(MetaDb plat) {
MetaKit.save(plat);
public JBean dbSave(DbAccount plat) {
// MetaKit.save(plat);
if (!Utils.isEmpty(plat.getDbid()) || plat.getDbid() != 0) {
if (Utils.isEmpty(plat.getPwd())) {
DbAccount account = MetaKit.getDbPlat(plat.getDbid());
plat.setPwd(account.getPwd());
}
metaSource.update(plat);
} else {
metaSource.insert(plat);
}
return JBean.OK;
}

View File

@@ -8,7 +8,7 @@ import net.tccn.base.dbq.jdbc.api.DbAccount;
import net.tccn.base.dbq.jdbc.api.DbKit;
import net.tccn.base.dbq.table.Column;
import net.tccn.base.dbq.table.Table;
import net.tccn.meta.MetaTable;
import net.tccn.meta.MTable;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestService;
@@ -23,13 +23,13 @@ import java.util.stream.Stream;
public class _DbService extends BaseService {
@RestMapping(name = "catalog_list", comment = "获取数据源的database")
public JBean catalogList(DbAccount dbAccount, String dbPlatId) {
public JBean catalogList(DbAccount dbAccount, int dbid) {
JBean jBean = new JBean();
DbKit dbKit = null;
if (dbAccount != null) {
dbKit = new DbKit(dbAccount, "");
} else {
dbKit = MetaKit.getDbKit(dbPlatId, "");
dbKit = MetaKit.getDbKit(dbid, "");
}
List<Map> list = dbKit.queryList("SHOW DATABASES;", Map.class);
@@ -40,29 +40,29 @@ public class _DbService extends BaseService {
}
@RestMapping(name = "table_list", comment = "数据库表列表")
public List<Table> tableList(String dbPlatId, String catalog, String[] tables) {
DbKit dbKit = MetaKit.getDbKit(dbPlatId, "");
public List<Table> tableList(int dbid, String catalog, String[] tables) {
DbKit dbKit = MetaKit.getDbKit(dbid, "");
String sql = tplKit.getTpl("db.table_list", Kv.of("catalog", catalog).set("tables", tables));
return dbKit.queryList(sql, Table.class);
}
@RestMapping(ignore = true)
public List<Table> tableInfoList(String dbPlatId, String catalog, String[] tables) {
public List<Table> tableInfoList(int dbid, String catalog, String[] tables) {
List<Table> list = new ArrayList<>(tables.length);
for (String table : tables) {
list.add(tableInfo(dbPlatId, catalog, table));
list.add(tableInfo(dbid, catalog, table));
}
return list;
}
@RestMapping(name = "table_info", comment = "数据库表详情")
public JBean MetatableInfo(String dbPlatId, String catalog, String tableName) {
public JBean MetatableInfo(int dbid, String catalog, String tableName) {
JBean jBean = new JBean();
try {
Table table = tableInfo(dbPlatId, catalog, tableName);
Table table = tableInfo(dbid, catalog, tableName);
jBean.setBody(MetaTable.toAs(table));
jBean.setBody(MTable.toAs(table));
} catch (Exception e) {
jBean.set(-1, "查询表信息失败");
new IllegalArgumentException("查询表信息失败", e);
@@ -71,8 +71,8 @@ public class _DbService extends BaseService {
}
@RestMapping(ignore = true, comment = "查询表信息")
public Table tableInfo(String dbPlatId, String catalog, String tableName) {
DbKit dbKit = MetaKit.getDbKit(dbPlatId, catalog);
public Table tableInfo(int dbid, String catalog, String tableName) {
DbKit dbKit = MetaKit.getDbKit(dbid, catalog);
String sql = tplKit.getTpl("db.table_list", Kv.of("table", tableName));
String columnSql = String.format("SHOW FULL COLUMNS FROM %s.`%s`", catalog, tableName);
@@ -92,10 +92,10 @@ public class _DbService extends BaseService {
}
@RestMapping(name = "table_create", comment = "新建表[mysql]")
public JBean tableCreate(String dbPlatId, String catalog, String sql) {
public JBean tableCreate(int dbid, String catalog, String sql) {
JBean jBean = new JBean();
DbKit dbKit = MetaKit.getDbKit(dbPlatId, catalog);
DbKit dbKit = MetaKit.getDbKit(dbid, catalog);
dbKit.createTable(sql);
return jBean;

View File

@@ -6,7 +6,7 @@ import net.tccn.base.Kv;
import net.tccn.base.MetaKit;
import net.tccn.base.dbq.table.Table;
import net.tccn.file._FileService;
import net.tccn.meta.MetaTable;
import net.tccn.meta.MTable;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService;
@@ -35,8 +35,8 @@ public class _TableService extends BaseService {
// excel
String filePath,
//mysql {数据库连接账号、数据源id、数据库database数组}
String dbPlatId, String catalog,
@RestParam(name = "platToken") String token) {
int dbid, String catalog,
@RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
@@ -44,21 +44,21 @@ public class _TableService extends BaseService {
jBean = fileService.data(filePath, token);
} else if ("mysql".equals(cate)) {
List<Table> list = dbService.tableList(dbPlatId, catalog, null);
List<Table> list = dbService.tableList(dbid, catalog, null);
String[] tableArr = list.stream().map(Table::getName).toArray(String[]::new);
List<String> hv = MetaKit.tableExist(tableArr, token);
List<MetaTable> sheets = new ArrayList<>();
List<MTable> sheets = new ArrayList<>();
list.forEach(x -> {
MetaTable bean = MetaTable.toAs(x);
MTable bean = MTable.toAs(x);
bean.setHv(hv.contains(x.getName()) ? 1 : 0);
sheets.add(bean);
});
//对数据分组后返回
Kv<String, MetaTable> data = Kv.of();
sheets.forEach(x -> data.set(x.getName(), x));
Kv<String, MTable> data = Kv.of();
sheets.forEach(x -> data.set(x.getTablename(), x));
jBean.setBody(data);
}
@@ -67,63 +67,65 @@ public class _TableService extends BaseService {
}
@RestMapping(name = "sheet_info", comment = "sheet详情")
public JBean sheetInfo(String cate, @RestParam(name = "platToken") String token,
public JBean sheetInfo(String cate, @RestParam(name = "plattoken") String token,
// excel
String filePath, String sheetName,
// mysql
String dbPlatId, String catalog, String tableName) {
int dbid, String catalog, String tableName) {
if ("excel".equals(cate)) {
return fileService.sheetData(filePath, sheetName, token);
} else if ("mysql".equals(cate)) {
return new JBean().setBody(dbService.tableInfo(dbPlatId, catalog, tableName));
return new JBean().setBody(dbService.tableInfo(dbid, catalog, tableName));
}
return null;
}
@RestMapping(name = "table_save", comment = "保存数据源实体到元数据实体表")
public JBean tableSave(String cate, @RestParam(name = "platToken") String token,
public JBean tableSave(String cate, @RestParam(name = "plattoken") String token,
String filePath, String[] sheetNames,
String dbPlatId, String catalog, String[] tableArr) {
int dbid, String catalog, String[] tableArr) {
if ("excel".equals(cate)) {
return fileService.saveSheet(sheetNames, filePath, token);
} else if ("mysql".equals(cate)) {
List<String> hv = MetaKit.tableExist(tableArr, token);
List<Table> tables = dbService.tableInfoList(dbPlatId, catalog, tableArr);
List<Table> tables = dbService.tableInfoList(dbid, catalog, tableArr);
MetaTable[] metaTables = tables.stream()
MTable[] metaTables = tables.stream()
.filter(t -> !hv.contains(t.getName())) // 去除同名
.map(t -> {
MetaTable metaTable = MetaTable.toAs(t);
MTable metaTable = MTable.toAs(t);
metaTable.setCatalog(catalog);
metaTable.setDbPlatId(dbPlatId);
metaTable.setAlias(MetaKit.nextAlias());// 表别名
metaTable.setSysPlatId(platId(token));
metaTable.setDbid(dbid);
metaTable.setAlias(metaKit.nextAlias());// 表别名
metaTable.setPlatid(platId(token));
return metaTable;
}).toArray(MetaTable[]::new);
MetaKit.save(metaTables);
}).toArray(MTable[]::new);
for (MTable table : metaTables) {
metaKit.save(table);
}
// 已经有的表 更新
MetaTable[] metaTables2 = tables.stream()
MTable[] metaTables2 = tables.stream()
.filter(t -> hv.contains(t.getName())) // 去除同名
.map(t -> {
MetaTable table = MetaKit.getMetaTable(t.getName(), token);
MTable table = MetaKit.getMetaTable(t.getName(), token);
MetaTable metaTable = MetaTable.toAs(t);
MTable metaTable = MTable.toAs(t);
table.setCatalog(catalog);
table.setDbPlatId(dbPlatId);
table.setDbid(dbid);
table.setAlias(table.getAlias());// 表别名
table.setSysPlatId(platId(token));
table.setPlatid(platId(token));
table.setItems(metaTable.getItems());
table.setComment(metaTable.getComment());
return table;
}).toArray(MetaTable[]::new);
MetaKit.save(metaTables2);
}).toArray(MTable[]::new);
for (MTable table : metaTables2) {
metaKit.save(table);
}
}
return JBean.OK;
}

View File

@@ -21,13 +21,13 @@ public class DbTask extends Doc<DbTask> {
private String name; // 任务标识码
private String title; // 任务名称
//private String cate; // 任务类型
private String dbPlatId; // 数据平台id
private int dbid; // 数据平台id
private String catalog; //
private String content; // 任务内容
private String remark; // 任务备注
private String para; // 任务参数
private String sysPlatId; // 平台id
private String platid; // 平台id
// ---------------------
}

View File

@@ -13,13 +13,13 @@ import org.redkale.service.RetResult;
@RestService(name = "qtask", automapping = true, comment = "qtask查询服务")
public class QtaskService extends BaseService {
// 调用示例: http://qtask_service_addr_xxxxxx/qtask/call?name=abxx&platToken=3421432&para={h:1}
// 调用示例: http://qtask_service_addr_xxxxxx/qtask/call?name=abxx&plattoken=3421432&para={h:1}
@RestMapping(name = "call", auth = false)
public RetResult<Object> call(String name, Kv<String, String> para, @RestParam(name = "platToken") String platToken) {
public RetResult<Object> call(String name, Kv<String, String> para, @RestParam(name = "plattoken") String plattoken) {
if (para == null) {
para = Kv.of();
}
return RetResult.success(TaskKit.taskRun(name, platToken, para));
return RetResult.success(TaskKit.taskRun(name, plattoken, para));
}
}

View File

@@ -5,9 +5,10 @@ import lombok.Setter;
import net.tccn.base.Kv;
import net.tccn.base.dbq.jdbc.api.DbAccount;
/**
* |- dbp: 调用谁, 参数,
* |- 谁:谁(干什么) => dbPlatId + content (在程序的世界每个个体,往往都有其明确的职责)
* |- 谁:谁(干什么) => dbid + content (在程序的世界每个个体,往往都有其明确的职责)
* |-
* 任务对象
*/
@@ -16,7 +17,7 @@ import net.tccn.base.dbq.jdbc.api.DbAccount;
public class Task {
private String name; // 任务标识,同一系统唯一
private String dbPlatId; // 数据源id
private int dbid; // 数据源id
private String catalog; // 数据库 database
private String content; // 任务内容

View File

@@ -25,7 +25,7 @@ public class TaskKit {
public static Task buildTask(dev.zhub.mk.qtask.QTask qTask, Kv para) {
Task task = qTask.createTask(para);
task.setDbAccount(MetaKit.getDbPlat(qTask.getDbplatid()));
task.setDbAccount(MetaKit.getDbPlat(qTask.getDbid()));
return task;
}

View File

@@ -23,7 +23,7 @@ public class _QtaskService extends BaseService {
/*if (task == null) {
task = new DbTask();
}
task.setSysPlatId(platId(token));
task.setplatid(platId(token));
PageBean<DbTask> page = DbTask.dao.findPage(task, flipper);*/
@@ -72,7 +72,7 @@ public class _QtaskService extends BaseService {
/*@Comment("qtask保存")
public JBean save(DbTask task, @RestParam(name = "platToken") String token) {
public JBean save(DbTask task, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
do {
@@ -83,7 +83,7 @@ public class _QtaskService extends BaseService {
// 同平台name 唯一校验
DbTask bean = new DbTask();
bean.setSysPlatId(platId(token));
bean.setplatid(platId(token));
bean.setName(task.getName());
DbTask entity = DbTask.dao.findFirst(bean);
@@ -95,7 +95,7 @@ public class _QtaskService extends BaseService {
if (task.getKey() != null) {
task.update();
} else {
task.setSysPlatId(platId(token));
task.setplatid(platId(token));
task.save();
}
MetaKit.reload(task);
@@ -107,7 +107,7 @@ public class _QtaskService extends BaseService {
}*/
@Comment("debug调试接口")
public JBean debug(QTask task, @RestParam(name = "platToken") String token) {
public JBean debug(QTask task, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean();
Object res = TaskKit.taskRun(task);

View File

@@ -27,7 +27,7 @@ public class QTaskMysql extends QTaskAbs implements QTask {
public QTaskMysql(Task task) {
super(task);
this.dbKit = MetaKit.getDbKit(task.getDbPlatId(), task.getCatalog());
this.dbKit = MetaKit.getDbKit(task.getDbid(), task.getCatalog());
}
@Override

View File

@@ -3,37 +3,40 @@ package net.tccn.user;
import lombok.Getter;
import lombok.Setter;
import net.tccn.base.JBean;
import net.tccn.base.arango.Doc;
import org.redkale.persistence.Cacheable;
import org.redkale.persistence.Column;
import org.redkale.persistence.Entity;
import org.redkale.persistence.Id;
import org.redkale.util.Utility;
import javax.persistence.Table;
/**
* @author: liangxianyou at 2018/11/22 17:37.
*/
@Getter
@Setter
@Table(name = "MetaUser", catalog = "db_meta")
public class MetaUser extends Doc<MetaUser> {
public static MetaUser dao = dao(MetaUser.class);
@Entity
@Cacheable(value = true, interval = 60 * 60 * 1000, direct = true)
public class MUser {
@Id
@Column(comment = "[用户ID]")
private Integer userid;
@Column(length = 64, comment = "[用户名]")
private String username;
//@ConvertColumn(ignore = true,type = ConvertType.JSON)
@Column(length = 64, comment = "[加密后的密码]")
private String pwd;
private Long createTime;
private Long loginTime;
private Integer status;
@Column(length = 64, comment = "[会话ID]")
private String sessionid;
public MetaUser() {
}
@Column(comment = "[状态] 1启用0未启用")
private short status;
public MetaUser(String sessionid) {
this.sessionid = sessionid;
}
//-------------------------------
@Column(updatable = false, comment = "[创建时间]")
private long createtime;
public static String md5IfNeed(String password){
@Column(comment = "[最后登录时间]")
private long logintime;
public static String md5IfNeed(String password) {
if (password == null || password.length() == 0) {
return "";
}
@@ -54,5 +57,4 @@ public class MetaUser extends Doc<MetaUser> {
jBean.setBody(this);
return jBean;
}
}

View File

@@ -2,11 +2,10 @@ package net.tccn.user;
import net.tccn.base.BaseService;
import net.tccn.base.JBean;
import net.tccn.base.MetaKit;
import org.redkale.net.http.RestBody;
import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestService;
import org.redkale.net.http.RestSessionid;
import org.redkale.source.FilterNode;
/**
* @author: liangxianyou at 2018/11/22 17:16.
@@ -18,39 +17,44 @@ public class UserService extends BaseService {
public JBean login(@RestSessionid String sessionid,
String username,
String pwd) {
MetaUser bean = new MetaUser();
MUser bean = new MUser();
bean.setUsername(username);
MetaUser user = MetaKit.findFirst(bean);
//MUser user = MetaKit.findFirst(bean);
MUser user = metaSource.find(MUser.class, FilterNode.create("username", username));
if (user == null) {
return JBean.by(-1, "登陆失败:账号无效");
}
JBean jBean = user.checkLogin(pwd);
if (jBean.getCode() == 0) {
cacheSource.set(30 * 60 * 2,sessionid, MetaUser.class, user);
cacheSource.set(30 * 60 * 2, sessionid, MUser.class, user);
user.setSessionid(sessionid);
user.setLoginTime(System.currentTimeMillis());
MetaKit.save(user);
user.setLogintime(System.currentTimeMillis());
// MetaKit.save(user);
metaSource.updateColumn(user, "sessionid", "logintime");
}
return jBean;
}
@RestMapping(name = "current")
public MetaUser current(@RestSessionid String sessionid) {
return getT("user_" + sessionid, MetaUser.class, () -> MetaKit.findFirst(new MetaUser(sessionid)));
public MUser current(@RestSessionid String sessionid) {
// T
//return getT("user_" + sessionid, MUser.class, () -> MetaKit.findFirst(new MetaUser(sessionid)));
MUser user = metaSource.find(MUser.class, FilterNode.create("sessionid", sessionid));
return user;
}
@RestMapping(name = "logout", comment = "退出登陆")
public JBean logout(@RestSessionid String sessionid) {
MetaUser user = MetaKit.findFirst(new MetaUser(sessionid));
MUser user = metaSource.find(MUser.class, FilterNode.create("sessionid", sessionid));
if (user != null) {
user.setSessionid("");
MetaKit.save(user);
metaSource.updateColumn(user, "sessionid");
}
cacheSource.removeAsync("user_" + sessionid);
// cacheSource.removeAsync("user_" + sessionid);
return JBean.OK;
}

View File

@@ -5,6 +5,13 @@
UPDATE "#(key)" WITH { link:null } IN Characters
#end
#sql("mable.lastAlias")
SELECT alias
FROM mtable
ORDER BY LENGTH(alias) DESC, alias DESC
LIMIT 1;
#end
#sql("metaTable.lastAlias")
for d in MetaTable
sort length(d.alias) desc, d.alias desc

View File

@@ -1,26 +1,15 @@
import net.tccn.base.*;
import net.tccn.base.dbq.fbean.FBean;
import net.tccn.base.dbq.jdbc.api.DbAccount;
import net.tccn.base.dbq.jdbc.api.DbKit;
import net.tccn.base.dbq.parser.ParseMysql;
import net.tccn.dict.Dict;
import net.tccn.dict.DictKit;
import net.tccn.meta.MetaService;
import net.tccn.meta.MetaTable;
import net.tccn.user.MetaUser;
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Test;
import org.redkale.convert.json.JsonConvert;
import org.redkale.source.CacheMemorySource;
import org.redkale.util.TypeToken;
import org.redkale.util.Utility;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.*;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
@@ -39,7 +28,7 @@ public class RunTest<T> {
/*public static Task A = new Task("mysql", "select * from user where userid=#(userid)", "查询用户列表", Kv.of("userid", 1));
public static Task B = new Task("method", "User.say", "user调用", Kv.of("name", "张三").set("age", 13));
public static Task C = new Task("http", "http://127.0.0.1/meta/db_plat_list?platToken=3421432", "查询数据平台列表", Kv.of("abx", "abx111"));
public static Task C = new Task("http", "http://127.0.0.1/meta/db_plat_list?plattoken=3421432", "查询数据平台列表", Kv.of("abx", "abx111"));
public static Task d = new Task("es", "http://192.168.91.5:9200/_sql?", "查询数据平台列表", Kv.of("sql", "select * from basic_iotdevice_all limit 10"));
public static Task e = new Task("http", "http://192.168.91.5:9200/_sql?sql=select%20*%20from%20basic_iotdevice_all%20limit%2010", "查询数据平台列表", Kv.of());
*/
@@ -60,7 +49,7 @@ public class RunTest<T> {
//@Test
public void parseFBeanTest() {
String str = "{'platToken':'ipsm_v4','name':'historyTrack'," +
String str = "{'plattoken':'ipsm_v4','name':'historyTrack'," +
"'filters':[{'col':'ap.comName','value':'贵阳市第十九中学','type':'LIKE'},{'col':'','value':'name=213113','type':'SQL'}," +
"{'col':'age','values':[1,2],'type':'RANGE'}]," +
@@ -74,7 +63,7 @@ public class RunTest<T> {
System.out.println("list:" + parse[1]);
}
@Test
/*@Test
public void jdbcTest() {
//DbAccount jdbcAccount = new DbAccount("jdbc:mysql://192.168.202.11:3306/gxbii_dev", "root", "eversec123098");
DbAccount dbAccount = new DbAccount();
@@ -103,10 +92,10 @@ public class RunTest<T> {
//find count
/*long total = dbKit.queryColumn("select count(1) from basic_device", long.class);
*//*long total = dbKit.queryColumn("select count(1) from basic_device", long.class);
System.out.println(total);
System.out.println(int.class);*/
}
System.out.println(int.class);*//*
}*/
//@Test
public void toAsTest() {
@@ -173,7 +162,7 @@ public class RunTest<T> {
}
//@Test
public void userCreate() {
/*public void userCreate() {
MetaUser user = new MetaUser();
user.setUsername("admin");
user.setCreateTime(System.currentTimeMillis());
@@ -181,12 +170,12 @@ public class RunTest<T> {
user.setStatus(1);
user.save();
}
}*/
//@Test
public void t() {
/*public void t() {
System.out.println(MetaKit.nextAlias());
}
}*/
//@Test
public void kvTest() {
@@ -216,27 +205,38 @@ public class RunTest<T> {
Object o = Kv.toAs(k, v);
switch (v.getSimpleName()) {
case "int":
System.out.println((int)o);break;
System.out.println((int) o);
break;
case "Integer":
System.out.println((Integer)o);break;
System.out.println(o);
break;
case "long":
System.out.println((long)o);break;
System.out.println((long) o);
break;
case "Long":
System.out.println((Long)o);break;
System.out.println(o);
break;
case "short":
System.out.println((short)o);break;
System.out.println((short) o);
break;
case "Short":
System.out.println((Short)o);break;
System.out.println(o);
break;
case "byte":
System.out.println((byte)o);break;
System.out.println((byte) o);
break;
case "float":
System.out.println((float)o);break;
System.out.println((float) o);
break;
case "Float":
System.out.println((Float)o);break;
System.out.println(o);
break;
case "Byte":
System.out.println((Byte)o);break;
System.out.println(o);
break;
case "String":
System.out.println((String)o);break;
System.out.println((String) o);
break;
}
}
}
@@ -252,12 +252,12 @@ public class RunTest<T> {
}
@Test
/*@Test
public void T() {
List<MetaTable> metaTables = MetaKit.getMetaTables();
System.out.println(metaTables.size());
}
}*/
TplKit tplKit = TplKit.use();
@@ -301,7 +301,7 @@ public class RunTest<T> {
}*/
//@Test
public void dataToFileTest() {
/*public void dataToFileTest() {
List<MetaService> metaServices = MetaService.dao.find();
@@ -311,17 +311,17 @@ public class RunTest<T> {
file.getParentFile().mkdirs();
FileKit.strToFile(convert.convertTo(metaKit), file);
}
}*/
//@Test
public void readJson() {
/*public void readJson() {
File file = new File("tmp/MetaService.json");
try {
Type type = new TypeToken<List<MetaService>>() {
Type type = new TypeToken<List<MService>>() {
}.getType();
List<MetaService> list = convert.convertFrom(type, new FileInputStream(file));
List<MService> list = convert.convertFrom(type, new FileInputStream(file));
System.out.println(list);
@@ -329,22 +329,22 @@ public class RunTest<T> {
e.printStackTrace();
}
Class clazz = MetaService.class;
Class clazz = MService.class;
//File file = new File(String.format("tmp/%s.json", clazz.getSimpleName()));
/*
*//*
写入数据到 文件
MetaKit.cacheSave(MetaTable.class);
MetaKit.cacheSave(MetaLink.class);
MetaKit.cacheSave(MetaService.class);
MetaKit.cacheSave(DbAccount.class);
MetaKit.cacheSave(SysPlat.class);*/
MetaKit.cacheSave(SysPlat.class);*//*
}
}*/
//@Test
public void cacheMemorySourceTest() {
/*public void cacheMemorySourceTest() {
CacheMemorySource source = new CacheMemorySource("");
//MetaKit.dcate = "db";
//MetaKit.init();
@@ -365,9 +365,9 @@ public class RunTest<T> {
System.out.println(metaTable);
}
}*/
public List<Map> dbKitTest() {
/*public List<Map> dbKitTest() {
DbAccount dbAccount = new DbAccount();
dbAccount.setCate("mysql");
dbAccount.setUrl("jdbc:mysql://192.168.202.11:3306/gxbii_dev");
@@ -387,11 +387,11 @@ public class RunTest<T> {
System.out.println(list);
return list;
}
}*/
// 通用导出组件测试
//@Test
public void exportTest() {
/*public void exportTest() {
List<Map> list = dbKitTest();
Kv kv = Kv.of("platID", "平台id")
@@ -406,7 +406,7 @@ public class RunTest<T> {
e.printStackTrace();
}
}
}*/
//@Test
public void switchTest() {