修改: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> </dependency>
<!-- arangodb支持 --> <!-- arangodb支持 -->
<dependency> <!--<dependency>
<groupId>com.arangodb</groupId> <groupId>com.arangodb</groupId>
<artifactId>arangodb-java-driver-async</artifactId> <artifactId>arangodb-java-driver-async</artifactId>
<version>6.0.0</version> <version>6.0.0</version>
@@ -55,7 +55,7 @@
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>-->
<dependency> <dependency>
<groupId>com.jfinal</groupId> <groupId>com.jfinal</groupId>

View File

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

View File

@@ -19,9 +19,9 @@ const meta = {
getServiceInfo({name}, callback) { getServiceInfo({name}, callback) {
red.getJSON("/meta/service_info",{name}, res => { 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) { getServiceDetail({name}, callback) {
@@ -97,7 +97,7 @@ const meta = {
//client //client
exportData({fbean, cate}) { exportData({fbean, cate}) {
if (cate == 'excel') { 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 == 'cvs') {
} else if (cate == 'json') { } else if (cate == 'json') {

View File

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

View File

@@ -1,19 +1,19 @@
const table = { const table = {
_sheets({cate, filePath, dbAccount, dbPlatId, catalog}) { _sheets({cate, filePath, dbAccount, dbid, catalog}) {
return red.postX('/_table/sheets',{cate, filePath, dbAccount, dbPlatId, catalog}) return red.postX('/_table/sheets',{cate, filePath, dbAccount, dbid, catalog})
}, },
sheetsExcel({filePath}) { sheetsExcel({filePath}) {
return table._sheets({cate: "excel", filePath}) return table._sheets({cate: "excel", filePath})
}, },
sheetMySql({dbPlatId, catalog}) { sheetMySql({dbid, catalog}) {
return table._sheets({cate: "mysql", dbPlatId, catalog}) return table._sheets({cate: "mysql", dbid, catalog})
}, },
sheetInfo({filePath, sheetName}) { sheetInfo({filePath, sheetName}) {
return red.postX('/_table/sheet_info', {cate: 'excel', filePath, sheetName}) return red.postX('/_table/sheet_info', {cate: 'excel', filePath, sheetName})
}, },
saveTable({dbPlatId, catalog, tableArr}) { // saveTable({dbid, catalog, tableArr}) { //
return red.postX('/_table/table_save', {cate: 'mysql', dbPlatId, catalog, tableArr: JSON.stringify(tableArr)}) return red.postX('/_table/table_save', {cate: 'mysql', dbid, catalog, tableArr: JSON.stringify(tableArr)})
}, },
saveSheet({filePath, sheetNames}) { saveSheet({filePath, sheetNames}) {
return red.postX('/_table/table_save', {cate: 'excel', filePath, sheetNames: JSON.stringify(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' //import red from '../res/js/red'
const login = ({username, pwd}) => { const login = ({username, pwd}) => {
return red.postX("/user/login", {username, pwd, platToken: 'xx'}) return red.postX("/user/login", {username, pwd, plattoken: 'xx'})
} }
const logout = () => { const logout = () => {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -128,7 +128,7 @@
<tr> <tr>
<th>数据平台</th> <th>数据平台</th>
<td> <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> <option v-for="item in dbPlats" :value="item.key" v-text="item.name"></option>
</select> </select>
</td> </td>

View File

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

View File

@@ -80,7 +80,7 @@
<label for="username" class="col-md-3">业务平台</label> <label for="username" class="col-md-3">业务平台</label>
<div class="col-md-8"> <div class="col-md-8">
<select v-model="sysPlat" class="form-control"> <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> </select>
</div> </div>
</div> </div>
@@ -88,7 +88,7 @@
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<!--<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>--> <!--<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> </div>
</div> </div>

View File

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

View File

@@ -2,7 +2,6 @@ package dev.zhub.mk.qtask;
import net.tccn.base.BaseService; import net.tccn.base.BaseService;
import net.tccn.base.Utils; import net.tccn.base.Utils;
import org.redkale.convert.json.JsonConvert;
import org.redkale.net.http.RestHeader; import org.redkale.net.http.RestHeader;
import org.redkale.net.http.RestMapping; import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestService; import org.redkale.net.http.RestService;
@@ -12,7 +11,6 @@ import org.redkale.source.Flipper;
import org.redkale.util.AnyValue; import org.redkale.util.AnyValue;
import org.redkale.util.Sheet; import org.redkale.util.Sheet;
import java.util.List;
import java.util.Map; import java.util.Map;
@RestService(name = "qtask", comment = "qtask服务") @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; return t;
} }
protected String platId(String token) { protected Integer platId(String token) {
return MetaKit.getPlatId(token); return MetaKit.getPlatId(token);
} }

View File

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

View File

@@ -2,28 +2,24 @@ package net.tccn.base;
import dev.zhub.mk.qtask.QTask; import dev.zhub.mk.qtask.QTask;
import lombok.Getter; import lombok.Getter;
import net.tccn.base.arango.Doc;
import net.tccn.base.dbq.jdbc.api.DbAccount; import net.tccn.base.dbq.jdbc.api.DbAccount;
import net.tccn.base.dbq.jdbc.api.DbKit; import net.tccn.base.dbq.jdbc.api.DbKit;
import net.tccn.base.dbq.table.Field; import net.tccn.base.dbq.table.Field;
import net.tccn.dict.Dict; import net.tccn.dict.Dict;
import net.tccn.meta.*; import net.tccn.meta.*;
import net.tccn.plat.MetaDb; import net.tccn.plat.MPlat;
import net.tccn.plat.MetaPlat;
import net.tccn.qtask.TaskKit; import net.tccn.qtask.TaskKit;
import net.tccn.user.MetaUser; import net.tccn.user.MUser;
import org.redkale.annotation.Resource; import org.redkale.annotation.Resource;
import org.redkale.convert.json.JsonConvert; import org.redkale.convert.json.JsonConvert;
import org.redkale.service.AbstractService; import org.redkale.service.AbstractService;
import org.redkale.source.DataJdbcSource;
import org.redkale.source.DataSource; import org.redkale.source.DataSource;
import org.redkale.util.AnyValue; import org.redkale.util.AnyValue;
import org.redkale.util.Comment; 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.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -36,17 +32,17 @@ import static java.util.Arrays.asList;
public class MetaKit extends AbstractService { public class MetaKit extends AbstractService {
//基础数据缓存 //基础数据缓存
@Getter @Getter
private static List<MetaTable> metaTables; private static List<MTable> mTables;
@Getter @Getter
private static List<MetaLink> metaLinks; private static List<MLink> metaLinks;
@Getter @Getter
private static List<MetaService> metaServices; private static List<MService> metaServices;
@Getter @Getter
private static List<DbAccount> dbPlats; private static List<DbAccount> dbPlats;
@Getter @Getter
private static List<MetaPlat> sysPlats; private static List<MPlat> mPlats;
@Getter @Getter
private static List<MetaUser> users; private static List<MUser> users;
@Getter @Getter
private static List<QTask> qTasks; private static List<QTask> qTasks;
@Getter @Getter
@@ -60,27 +56,83 @@ public class MetaKit extends AbstractService {
protected DataSource metaSource; protected DataSource metaSource;
public <T> void reloadxAsync(Class<T> clazz) { public <T> void reloadxAsync(Class<T> clazz) {
CompletableFuture.runAsync(() -> {
if (clazz == QTask.class) { if (clazz == QTask.class) {
qTasks = metaSource.queryList(QTask.class); qTasks = metaSource.queryList(QTask.class);
TaskKit.init(qTasks); 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 @Override
public void init(AnyValue config) { public void init(AnyValue config) {
reloadxAsync(QTask.class); 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() { public static void init() {
reload(MetaTable.class); // reload(MetaTable.class);
reload(MetaLink.class); // reload(MLink.class);
reload(MetaService.class); // reload(MetaService.class);
reload(DbAccount.class); // reload(DbAccount.class);
reload(MetaPlat.class); // reload(MetaPlat.class);
reload(MetaUser.class); // reload(MetaUser.class);
// reload(DbTask.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); reload(clazz, null);
} }
public static <T extends Doc> void reload(T t) { public static <T extends Doc> void reload(T t) {
reload(t.getClass(), t.getKey()); 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>>() { Type type = new TypeToken<List<DbAccount>>() {
}.getType(); }.getType();
dbPlats = FileKit.readAs(new File("D:\\Java\\meta-kit\\conf\\data\\DbAccount.json"), type); 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\"}]"); //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()); 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 { try {
File file = new File(String.format("%s%s.json", dataPath, clazz.getSimpleName())); File file = new File(String.format("%s%s.json", dataPath, clazz.getSimpleName()));
if ("file".equals(dcate)) { if ("file".equals(dcate)) {
if (MetaTable.class == clazz) { *//*if (MetaTable.class == clazz) {
Type type = new TypeToken<List<MetaTable>>() { Type type = new TypeToken<List<MetaTable>>() {
}.getType(); }.getType();
metaTables = FileKit.readAs(file, type); metaTables = FileKit.readAs(file, type);
} else if (MetaLink.class == clazz) { } else*//*
Type type = new TypeToken<List<MetaLink>>() { *//*if (MLink.class == clazz) {
Type type = new TypeToken<List<MLink>>() {
}.getType(); }.getType();
metaLinks = FileKit.readAs(file, type);; metaLinks = FileKit.readAs(file, type);
} else if (MetaService.class == clazz) { }*//* *//*else if (MetaService.class == clazz) {
Type type = new TypeToken<List<MetaService>>() { Type type = new TypeToken<List<MetaService>>() {
}.getType(); }.getType();
metaServices = FileKit.readAs(file, type);; metaServices = FileKit.readAs(file, type);
} else if (DbAccount.class == clazz) { }*//* *//*else if (DbAccount.class == clazz) {
Type type = new TypeToken<List<DbAccount>>() { Type type = new TypeToken<List<DbAccount>>() {
}.getType(); }.getType();
dbPlats = FileKit.readAs(file, type); dbPlats = FileKit.readAs(file, type);
} else if (MetaDb.class == clazz) { }*//* *//*else if (MetaDb.class == clazz) {
Type type = new TypeToken<List<DbAccount>>() { Type type = new TypeToken<List<DbAccount>>() {
}.getType(); }.getType();
dbPlats = FileKit.readAs(file, type);; dbPlats = FileKit.readAs(file, type);;
} else if (MetaPlat.class == clazz) { }*//* *//*else if (MetaPlat.class == clazz) {
Type type = new TypeToken<List<MetaPlat>>() { Type type = new TypeToken<List<MetaPlat>>() {
}.getType(); }.getType();
sysPlats = FileKit.readAs(file, type);; mPlats = FileKit.readAs(file, type);;
} else if (MetaUser.class == clazz) { } *//* *//*else if (MetaUser.class == clazz) {
Type type = new TypeToken<List<MetaUser>>() { Type type = new TypeToken<List<MetaUser>>() {
}.getType(); }.getType();
users = FileKit.readAs(file, type);; users = FileKit.readAs(file, type);;
} /*else if (DbTask.class == clazz) { }*//* *//*else if (DbTask.class == clazz) {
Type type = new TypeToken<List<DbTask>>() { Type type = new TypeToken<List<DbTask>>() {
}.getType(); }.getType();
taskEntities = FileKit.readAs(file, type);; taskEntities = FileKit.readAs(file, type);;
} */ else if (Dict.class == clazz) { } *//* *//*else if (Dict.class == clazz) {
Type type = new TypeToken<List<Dict>>() { Type type = new TypeToken<List<Dict>>() {
}.getType(); }.getType();
dicts = FileKit.readAs(file, type);; dicts = FileKit.readAs(file, type);
} }*//*
} else { } else {
if (MetaTable.class == clazz) metaTables = MetaTable.dao.find(); *//*if (MetaTable.class == clazz) {
else if (MetaLink.class == clazz) metaLinks = MetaLink.dao.find(); metaTables = MetaTable.dao.find();
else if (MetaService.class == clazz) metaServices = MetaService.dao.find(); }
else if (DbAccount.class == clazz) dbPlats = DbAccount.dao.find(); else*//*
else if (MetaDb.class == clazz) dbPlats = DbAccount.dao.find(); //if (MLink.class == clazz) metaLinks = MLink.dao.find();
else if (MetaPlat.class == clazz) sysPlats = MetaPlat.dao.find(); //else if (MetaService.class == clazz) metaServices = MetaService.dao.find();
else if (MetaUser.class == clazz) users = MetaUser.dao.find(); //else if (DbAccount.class == clazz) dbPlats = DbAccount.dao.find();
/*else if (DbTask.class == clazz) { //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(); // taskEntities = DbTask.dao.find();
// TaskKit.init(); // TaskKit.init();
}*/ }*//*
else if (Dict.class == clazz) { //else
*//*if (Dict.class == clazz) {
dicts = Dict.dao.find(); dicts = Dict.dao.find();
} }*//*
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }*/
public static void cacheSave() { /*public static void cacheSave() {
cacheSave(MetaTable.class); //cacheSave(MetaTable.class);
cacheSave(MetaLink.class); //cacheSave(MLink.class);
cacheSave(MetaService.class); //cacheSave(MService.class);
cacheSave(DbAccount.class); //cacheSave(DbAccount.class);
cacheSave(MetaPlat.class); //cacheSave(MetaPlat.class);
cacheSave(MetaUser.class); //cacheSave(MetaUser.class);
//cacheSave(DbTask.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; List list = null;
if (MetaTable.class == clazz) list = metaTables; *//*if (MetaTable.class == clazz) list = metaTables;
else if (MetaLink.class == clazz) list = metaLinks; else*//*
else if (MetaService.class == clazz) list = metaServices; if (MLink.class == clazz) list = metaLinks;
else if (DbAccount.class == clazz) list = dbPlats; else if (MService.class == clazz) list = metaServices;
else if (MetaPlat.class == clazz) list = sysPlats; //else if (DbAccount.class == clazz) list = dbPlats;
else if (MetaUser.class == clazz) list = users; //else if (MetaPlat.class == clazz) list = mPlats;
//else if (MetaUser.class == clazz) list = users;
// else if (DbTask.class == clazz) list = taskEntities; // else if (DbTask.class == clazz) list = taskEntities;
else if (Dict.class == clazz) list = dicts; 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 file = new File(String.format("%s%s.json", dataPath, list.get(0).getClass().getSimpleName()));
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
FileKit.strToFile(MetaKit.convert.convertTo(list), file); FileKit.strToFile(MetaKit.convert.convertTo(list), file);
} }*/
/** /**
* 得到业务主表 * 得到业务主表
@@ -208,20 +266,21 @@ public class MetaKit extends AbstractService {
* @param token * @param token
* @return * @return
*/ */
public static MetaTable getMainTable(String serviceName, String token) { public static MTable getMainTable(String serviceName, String token) {
MetaService metaService = MetaKit.getMetaService(serviceName, token); MService metaService = MetaKit.getMetaService(serviceName, token);
return MetaKit.getMetaTableByAlias(metaService.getTable()); return MetaKit.getMetaTableByAlias(metaService.getTablealias());
} }
/** /**
* 通过平台token 得到平台字典数据 * 通过平台token 得到平台字典数据
* *
* @param platToken * @param plattoken
*/ */
public static Map<String, List<Dict>> getDictData(String platToken) { public static Map<String, List<Dict>> getDictData(String plattoken) {
String platId = MetaKit.getPlatId(platToken); /*Integer platId = MetaKit.getPlatId(plattoken);
Map<String, List<Dict>> dicts = MetaKit.dicts.stream().filter(x -> x.getSysPlatId().equals(platId)).collect(Collectors.groupingBy(Dict::getType)); Map<String, List<Dict>> dicts = MetaKit.dicts.stream().filter(x -> x.getPlatid() == (int) platId).collect(Collectors.groupingBy(Dict::getType));
return dicts; return dicts;*/
return new HashMap<>();
} }
// ----------------------------------- // -----------------------------------
@@ -235,28 +294,28 @@ public class MetaKit extends AbstractService {
* @param alias * @param alias
* @return * @return
*/ */
public static MetaTable getMetaTableByAlias(String alias) { public static MTable getMetaTableByAlias(String alias) {
Optional<MetaTable> table = metaTables.stream().filter(x -> x.getAlias().equals(alias)).findAny(); Optional<MTable> table = mTables.stream().filter(x -> x.getAlias().equals(alias)).findAny();
return table.orElse(null); return table.orElse(null);
} }
public static MetaTable getMetaTable(String name, String token) { public static MTable getMetaTable(String name, String token) {
Optional<MetaTable> any = getMetaTables().stream().filter(x -> { Optional<MTable> any = getMTables().stream().filter(x -> {
return x.getName().equals(name) && x.getSysPlatId().equals(getPlatId(token)); return x.getTablename().equals(name) && x.getPlatid().equals(getPlatId(token));
}).findAny(); }).findAny();
return any.get(); return any.get();
} }
public static MetaService getMetaService(String name, String token) { public static MService getMetaService(String name, String token) {
Optional<MetaService> service = metaServices.stream() Optional<MService> service = metaServices.stream()
.filter(x -> x.getName().equals(name) && x.getSysPlatId().equals(getPlatId(token))) .filter(x -> x.getName().equals(name) && x.getPlatid().equals(getPlatId(token)))
.findAny(); .findAny();
return service.orElse(null); 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(); List<Field> items = t.getItems();
//x 是跨越值 //x 是跨越值
@@ -283,8 +342,8 @@ public class MetaKit extends AbstractService {
}; };
public static Map cfg(String name, String token) { public static Map cfg(String name, String token) {
MetaService metaService = getMetaService(name, token); MService metaService = getMetaService(name, token);
Kv<String, MetaTable> metaTables = getMetaTables(metaService, false); Kv<String, MTable> metaTables = getMTables(metaService, false);
List<Map<String, String>> shows = metaService.getShows(); List<Map<String, String>> shows = metaService.getShows();
List<FromItem> edits = metaService.getEdits(); List<FromItem> edits = metaService.getEdits();
@@ -404,18 +463,18 @@ public class MetaKit extends AbstractService {
//pk业务主表的主键 //pk业务主表的主键
StringBuffer _pks = new StringBuffer(); 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 -> { 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) { if (_pks.length() > 0) {
_pks.deleteCharAt(_pks.length() - 1); _pks.deleteCharAt(_pks.length() - 1);
} }
if (_pks.length() == 0) { // 默认主键 if (_pks.length() == 0) { // 默认主键
List<Field> items = metaTables.get(metaService.getTable()).getItems(); List<Field> items = metaTables.get(metaService.getTablealias()).getItems();
//存在id字段取id //存在id字段取id
items.stream().filter(x -> x.getName().equalsIgnoreCase("id")).findAny().ifPresent(x -> { 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") @Comment("获取导出excel表头配置k-v")
public static Kv cfgExport(String name, String token) { 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(); List<Map<String, String>> exports = metaService.getExports();
Kv kv = Kv.of(); // {col:label} Kv kv = Kv.of(); // {col:label}
@@ -442,7 +501,7 @@ public class MetaKit extends AbstractService {
} }
//itemUpdate //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(); List<Field> items = t.getItems();
for (int i = 0; i < fields.size(); i++) { for (int i = 0; i < fields.size(); i++) {
for (int j = 0; j < items.size(); j++) { for (int j = 0; j < items.size(); j++) {
@@ -468,11 +527,11 @@ public class MetaKit extends AbstractService {
};*/ };*/
public static MetaTable getMetaTableByKey(String key) { public static MTable getMetaTableByKey(int key) {
return metaTables.stream().filter(x -> x.getKey().equals(key)).findAny().orElse(null); 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 -> { Predicate<String> contain = s -> {
@@ -493,7 +552,7 @@ public class MetaKit extends AbstractService {
//1、直接关联 表: t.equals(x.getTables()[0]) || t.equals(x.getTables()[1] //1、直接关联 表: t.equals(x.getTables()[0]) || t.equals(x.getTables()[1]
//2、关联且有过滤 //2、关联且有过滤
//3、关联有展示 //3、关联有展示
List<MetaLink> links = metaLinks.stream() List<MLink> links = metaLinks.stream()
.filter(x -> { .filter(x -> {
return (t.equals(x.getTables()[0]) || t.equals(x.getTables()[1])) return (t.equals(x.getTables()[0]) || t.equals(x.getTables()[1]))
&& (contain.test(x.getTables()[0]) || contain.test(x.getTables()[1])); && (contain.test(x.getTables()[0]) || contain.test(x.getTables()[1]));
@@ -502,17 +561,17 @@ public class MetaKit extends AbstractService {
return links; return links;
} }
public static Kv buildeDetail(MetaService metaService) { public static Kv buildeDetail(MService metaService) {
//tables //tables
Kv<String, MetaTable> tables = getMetaTables(metaService, true); Kv<String, MTable> tables = getMTables(metaService, true);
return Kv.of("tables", tables) return Kv.of("tables", tables)
.set("links", Kv.of()); .set("links", Kv.of());
} }
public static Kv<String, MetaTable> getMetaTables(MetaService metaService, Boolean all) { public static Kv<String, MTable> getMTables(MService metaService, Boolean all) {
Kv<String, MetaTable> tables = Kv.of(); Kv<String, MTable> tables = Kv.of();
String table = metaService.getTable();// String table = metaService.getTablealias();//
tables.set(table, getMetaTableByAlias(table)); tables.set(table, getMetaTableByAlias(table));
//收集所有的col //收集所有的col
@@ -545,34 +604,35 @@ public class MetaKit extends AbstractService {
return tables; return tables;
} }
/*public static DbKit getDbKit(String dbPlatId) { /*public static DbKit getDbKit(int dbid) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbPlatId)).findAny(); Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbid)).findAny();
return new DbKit(dbAccount.get()); return new DbKit(dbAccount.get());
}*/ }*/
public static DbKit getDbKit(String dbPlatId, String catalog) { public static DbKit getDbKit(int dbid, String catalog) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbPlatId)).findAny(); Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getDbid() == dbid).findAny();
return new DbKit(dbAccount.get(), catalog); return new DbKit(dbAccount.get(), catalog);
} }
public static DbAccount getDbPlat(String dbPlatId) { public static DbAccount getDbPlat(int dbid) {
Optional<DbAccount> dbAccount = dbPlats.stream().filter(x -> x.getKey().equals(dbPlatId)).findFirst(); Optional<DbAccount> db = dbPlats.stream().filter(x -> x.getDbid() == dbid).findFirst();
return dbAccount.get(); return db.get();
} }
@Comment("通过平台token 得到平台id") @Comment("通过平台token 得到平台id")
public static String getPlatId(String platToken) { // public static Integer getPlatId(String plattoken) { //
Optional<MetaPlat> plat = sysPlats.stream().filter(x -> x.getToken().equals(platToken)).findAny(); Optional<MPlat> plat = mPlats.stream().filter(x -> x.getPlattoken().equals(plattoken)).findAny();
return plat.get().getKey(); return plat.get().getPlatid();
} }
public static String lastAlias; public static String lastAlias;
public static String nextAlias() { public String nextAlias() {
if (lastAlias == null) { if (lastAlias == null) {
String aql = TplKit.use(true).getTpl("metaTable.lastAlias"); //String aql = TplKit.use(true).getTpl("metaTable.lastAlias");
lastAlias = MetaTable.dao.findFirst(aql, String.class); lastAlias = findColumn("mable.lastAlias", Kv.of(), String.class);
// lastAlias = MetaTable.dao.findFirst(aql, String.class); // TODO....
} }
return lastAlias = next(lastAlias, ""); return lastAlias = next(lastAlias, "");
} }
@@ -594,15 +654,72 @@ public class MetaKit extends AbstractService {
public static List<String> tableExist(String[] tableArr, String token) { public static List<String> tableExist(String[] tableArr, String token) {
List<String> _tableArr = asList(tableArr); List<String> _tableArr = asList(tableArr);
List<String> hv = metaTables.stream() List<String> hv = mTables.stream()
.filter(x -> _tableArr.contains(x.getName()) && x.getSysPlatId().equals(getPlatId(token))) .filter(x -> _tableArr.contains(x.getTablename()) && x.getPlatid().equals(getPlatId(token)))
.map(MetaTable::getName) .map(MTable::getTablename)
.collect(Collectors.toList()); .collect(Collectors.toList());
return hv; return hv;
} }
// ---------------------- repository ------------------- // ---------------------- 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; if (ts == null || ts.length == 0) return;
for (T t : ts) { for (T t : ts) {
@@ -619,21 +736,21 @@ public class MetaKit extends AbstractService {
t.save(); t.save();
} else { } 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.find(String.format("UPDATE '%s' WITH { link:null } IN MetaLink", t.getKey()), Map.class);
} }
} }*//*
t.update(); t.update();
} }
} }
reload(ts[0].getClass()); 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); Objects.nonNull(t);
List<T> list = asList(); List<T> list = asList();
@@ -654,5 +771,13 @@ public class MetaKit extends AbstractService {
}).findAny(); }).findAny();
return (T) any.orElse(null); 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 @Override
public void preShutdown(Application application) { public void preShutdown(Application application) {
if ("db".equals(dcate)) { /*if ("db".equals(dcate)) {
MetaKit.cacheSave(); 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.fbean.FBean;
import net.tccn.base.dbq.jdbc.api.DbKit; import net.tccn.base.dbq.jdbc.api.DbKit;
import net.tccn.base.dbq.parser.ParseMysql; import net.tccn.base.dbq.parser.ParseMysql;
import net.tccn.meta.MetaService; import net.tccn.meta.MService;
import net.tccn.meta.MetaTable; import net.tccn.meta.MTable;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -25,9 +25,9 @@ public class DbExecutors {
String[] sqls = PARSER.parseList(fBean); String[] sqls = PARSER.parseList(fBean);
//当前的业务 => 获取主表 信息 => 数据源信息 => 数据源对象 => 创建数据工具对象 => 查询数据 //当前的业务 => 获取主表 信息 => 数据源信息 => 数据源对象 => 创建数据工具对象 => 查询数据
MetaService metaService = MetaKit.getMetaService(fBean.getName(), fBean.getPlatToken()); MService metaService = MetaKit.getMetaService(fBean.getName(), fBean.getPlattoken());
MetaTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable()); MTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTablealias());
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbPlatId(), mainTable.getCatalog()); DbKit dbKit = MetaKit.getDbKit(mainTable.getDbid(), mainTable.getCatalog());
System.out.printf("----------------%n countSql:%s%n findSql:%s%n----------------%n", sqls[0], sqls[1]); System.out.printf("----------------%n countSql:%s%n findSql:%s%n----------------%n", sqls[0], sqls[1]);
CompletableFuture<Integer> countFuture = CompletableFuture.supplyAsync(() -> dbKit.findColumn(sqls[0], int.class)); CompletableFuture<Integer> countFuture = CompletableFuture.supplyAsync(() -> dbKit.findColumn(sqls[0], int.class));
@@ -55,18 +55,18 @@ public class DbExecutors {
return PageBean.by(rows, total); return PageBean.by(rows, total);
} }
public static void del(String name, Map data, String token) { /*public static void del(String name, Map data, String token) {
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
MetaTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable()); MTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTablealias());
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbPlatId(), mainTable.getCatalog()); DbKit dbKit = MetaKit.getDbKit(mainTable.getDbid(), mainTable.getCatalog());
String delSql = PARSER.parseDel(name, data, token); String delSql = PARSER.parseDel(name, data, token);
dbKit.exetute(delSql); dbKit.exetute(delSql);
} }*/
public static void save(String name, Map data, String token) { public static void save(String name, Map data, String token) {
MetaTable mainTable = MetaKit.getMainTable(name, token); MTable mainTable = MetaKit.getMainTable(name, token);
DbKit dbKit = MetaKit.getDbKit(mainTable.getDbPlatId(), mainTable.getCatalog()); DbKit dbKit = MetaKit.getDbKit(mainTable.getDbid(), mainTable.getCatalog());
String sql = PARSER.parseSave(name, data, token); String sql = PARSER.parseSave(name, data, token);
dbKit.exetute(sql); dbKit.exetute(sql);

View File

@@ -13,7 +13,7 @@ import java.util.List;
@Setter @Setter
public class FBean { public class FBean {
private String platToken; // 平台token private String plattoken; // 平台token
private String name; // 业务名称 private String name; // 业务名称
private String type; // 操作类型 list列表export导出 private String type; // 操作类型 list列表export导出

View File

@@ -57,7 +57,7 @@ public class Filter {
filters.forEach(x -> { filters.forEach(x -> {
buf.append(" and d.").append(x.col).append(" " + (x.type == null ? "==" : x.type) + " "); 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); buf.append(x.value);
} else { } else {
buf.append("'" + x.value + "'"); buf.append("'" + x.value + "'");

View File

@@ -2,34 +2,51 @@ package net.tccn.base.dbq.jdbc.api;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import net.tccn.base.arango.Doc; import org.redkale.annotation.Comment;
import org.redkale.convert.ConvertColumn; 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; import java.util.List;
/**
* 数据库平台
*
* @author: liangxianyou at 2018/11/14 12:58.
*/
@Getter @Getter
@Setter @Setter
@Table(name = "MetaDb", catalog = "db_meta") @Entity(comment = "[数据库平台表]")
public class DbAccount extends Doc<DbAccount> { public class DbAccount {
public static DbAccount dao = dao(DbAccount.class); @Id
@Comment("[数据库ID]")
private int dbid;
private String name; //名称 @Column(length = 64, comment = "[名称]")
private String cate; //类型 mysql|ArangoDb private String dbname;
private String remark; //备注
private String url; //数据库连接地址
private String user; //账号
private String pwd; //密码
private List<String> catalogs; //库
private Integer status;//状态 1启用 0 未启用
//---------------------------- @Comment("[类型mysql|ArangoDb]")
private boolean tmp; // TODO: 处理临时连接对象 @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() { public String accountKey() {
int start = url.indexOf("//") + 2; int start = url.indexOf("//") + 2;
@@ -46,4 +63,5 @@ public class DbAccount extends Doc<DbAccount> {
public String getPwd() { public String getPwd() {
return pwd; return pwd;
} }
} }

View File

@@ -33,7 +33,7 @@ public class DbKit implements DbSource {
try { try {
if (Utils.isEmpty(dbAccount.getPwd())) { if (Utils.isEmpty(dbAccount.getPwd())) {
DbAccount account = MetaKit.getDbPlat(dbAccount.getKey()); DbAccount account = MetaKit.getDbPlat(dbAccount.getDbid());
dbAccount.setPwd(account.getPwd()); dbAccount.setPwd(account.getPwd());
} }
@@ -43,7 +43,8 @@ public class DbKit implements DbSource {
this.dbSource = dbSource; this.dbSource = dbSource;
} catch (Exception e) { } 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; 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.base.dbq.fbean.*;
import net.tccn.meta.MetaLink; import net.tccn.meta.MLink;
import net.tccn.meta.MetaService; import net.tccn.meta.MService;
import net.tccn.meta.MetaTable; import net.tccn.meta.MTable;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -19,12 +22,12 @@ import java.util.stream.Collectors;
*/ */
public class ParseMysql implements Parser { public class ParseMysql implements Parser {
Predicate<Kv<String, MetaTable>> sameDbFun = (kv) -> { Predicate<Kv<String, MTable>> sameDbFun = (kv) -> {
String dbPlatId = null; int dbid = 0;
for (MetaTable metaTable : kv.values()) { for (MTable metaTable : kv.values()) {
if (dbPlatId == null) { if (dbid == 0) {
dbPlatId = metaTable.getDbPlatId(); dbid = metaTable.getDbid();
} else if (!dbPlatId.equals(metaTable.getDbPlatId())) { } else if (dbid != metaTable.getDbid()) {
return false; return false;
} }
} }
@@ -38,16 +41,16 @@ public class ParseMysql implements Parser {
*/ */
@Override @Override
public String[] parseList(FBean fBean) { 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);//所有的关联表信息 Kv<String, MTable> tables = MetaKit.getMTables(metaService, false);//所有的关联表信息
MetaTable metaTable = tables.get(metaService.getTable());//基础元数据 MTable metaTable = tables.get(metaService.getTablealias());//基础元数据
List<Map<String, String>> shows = metaService.getShows();//查询的属性-列表 List<Map<String, String>> shows = metaService.getShows();//查询的属性-列表
List<Map<String, String>> exports = metaService.getExports();//查询的属性-导出 List<Map<String, String>> exports = metaService.getExports();//查询的属性-导出
List<String> _filters = fBean.getFilters().stream().map(Filter::getCol).collect(Collectors.toList()); List<String> _filters = fBean.getFilters().stream().map(Filter::getCol).collect(Collectors.toList());
List<MetaLink> links = MetaKit.getMetaLinks( List<MLink> links = MetaKit.getMetaLinks(
metaService.getTable(), metaService.getTablealias(),
shows.stream().map(x -> x.get("col")).collect(Collectors.toList()), shows.stream().map(x -> x.get("col")).collect(Collectors.toList()),
_filters _filters
); );
@@ -75,8 +78,7 @@ public class ParseMysql implements Parser {
bufSelect.append(x.get("col")).append(" as ").append("'").append(x.get("col")).append("',"); bufSelect.append(x.get("col")).append(" as ").append("'").append(x.get("col")).append("',");
}); });
bufSelect.deleteCharAt(bufSelect.length() - 1); 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 -> { shows.forEach(x -> {
bufSelect.append(x.get("col")).append(" as ").append("'").append(x.get("col")).append("',"); bufSelect.append(x.get("col")).append(" as ").append("'").append(x.get("col")).append("',");
}); });
@@ -87,15 +89,15 @@ public class ParseMysql implements Parser {
//from //from
StringBuilder bufFrom = new StringBuilder(); StringBuilder bufFrom = new StringBuilder();
bufFrom.append(" from `").append(metaTable.getCatalog()).append("`.`").append(metaTable.getName()).append("` `").append(metaTable.getAlias()).append("`"); bufFrom.append(" from `").append(metaTable.getCatalog()).append("`.`").append(metaTable.getTablename()).append("` `").append(metaTable.getAlias()).append("`");
//left join //left join
if (!Utils.isEmpty(links)) { if (!Utils.isEmpty(links)) {
links.forEach(x -> { 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) { 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(); int tag = bufFrom.length();
x.getLink().forEach((k, v) -> { x.getLinks().forEach((k, v) -> {
if (bufFrom.length() > tag) { if (bufFrom.length() > tag) {
bufFrom.append(" and "); bufFrom.append(" and ");
} }
@@ -129,14 +131,14 @@ public class ParseMysql implements Parser {
* @param token * @param token
* @return * @return
*/ */
public String parseDel(String name, Map data, String token) { /*public String parseDel(String name, Map data, String token) {
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
Map<String, String> dels = metaService.getDels(); Map<String, String> dels = metaService.getDels();
MetaTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable()); MTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable());
String sql = ""; String sql = "";
if ("UP_FIELD".equalsIgnoreCase(dels.get("cate"))) { 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); sql = TplKit.parseTpl("update #(table) set status=9 where id=#(id)", data);
} else if ("SQL".equalsIgnoreCase(dels.get("cate"))) { } else if ("SQL".equalsIgnoreCase(dels.get("cate"))) {
sql = TplKit.parseTpl(dels.get("sql"), data); sql = TplKit.parseTpl(dels.get("sql"), data);
@@ -145,7 +147,7 @@ public class ParseMysql implements Parser {
} }
return sql; return sql;
} }*/
/** /**
* 保存数据解析逻辑: * 保存数据解析逻辑:
@@ -157,7 +159,7 @@ public class ParseMysql implements Parser {
* @return sql 待执行的sql语句 * @return sql 待执行的sql语句
*/ */
public String parseSave(String serviceName, Map<String, String> data, String token) { 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 alias = mainTable.getAlias();
String[] pks = mainTable.pk(); String[] pks = mainTable.pk();
@@ -170,7 +172,7 @@ public class ParseMysql implements Parser {
x.startsWith(alias + ".") || !Utils.isEmpty(data.get(alias + "." + x)) x.startsWith(alias + ".") || !Utils.isEmpty(data.get(alias + "." + x))
).collect(Collectors.toList()); ).collect(Collectors.toList());
if (pks.length == 0) { 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) { } else if (keys.size() == 0) {
throw new CfgException("保存数据失败,提交数据不能改空"); throw new CfgException("保存数据失败,提交数据不能改空");
} }
@@ -192,10 +194,8 @@ public class ParseMysql implements Parser {
vs.deleteCharAt(vs.length() - 1); vs.deleteCharAt(vs.length() - 1);
} }
return String.format(sqlTpl, mainTable.getName(), ks, vs); return String.format(sqlTpl, mainTable.getTablename(), ks, vs);
} } else { //修改
else { //修改
String sqlTpl = "update `%s` set %s where `%s` = '%s';"; // para: table、 kvs、 pk、 pv String sqlTpl = "update `%s` set %s where `%s` = '%s';"; // para: table、 kvs、 pk、 pv
StringBuilder kvs = new StringBuilder(); // `k1`='v1',`k2`='v2', ... StringBuilder kvs = new StringBuilder(); // `k1`='v1',`k2`='v2', ...
String pk = pks[0]; String pk = pks[0];
@@ -208,7 +208,7 @@ public class ParseMysql implements Parser {
kvs.deleteCharAt(kvs.length() - 1); 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 sql; //SQL
private String para; //默认查询参数 private String para; //默认查询参数
private String cate; //任务类型 find|update private String cate; //任务类型 find|update
private Integer sysPlatId; //数据平台id private Integer platid; //数据平台id
private Integer platId; //数据平台id private Integer platId; //数据平台id
private String catalog; //数据库名 private String catalog; //数据库名
private Integer status; //状态 1启用|0未启用|-1删除 private Integer status; //状态 1启用|0未启用|-1删除

View File

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

View File

@@ -12,25 +12,25 @@ import java.util.*;
*/ */
public final class DictKit { public final class DictKit {
private static Map<String, DictKit> kits = new HashMap<>(); private static Map<String, DictKit> kits = new HashMap<>();
private String platToken; private String plattoken;
private Map<String, List<Dict>> dicts; private Map<String, List<Dict>> dicts;
private DictKit() { private DictKit() {
} }
public synchronized static DictKit use(String platToken) { public synchronized static DictKit use(String plattoken) {
DictKit dictKit = kits.get(platToken); DictKit dictKit = kits.get(plattoken);
if (dictKit == null) { if (dictKit == null) {
dictKit = new DictKit(); dictKit = new DictKit();
dictKit.platToken = platToken; dictKit.plattoken = plattoken;
dictKit.dicts = MetaKit.getDictData(platToken); dictKit.dicts = MetaKit.getDictData(plattoken);
kits.put(platToken, dictKit); kits.put(plattoken, dictKit);
} }
return dictKit; return dictKit;
} }
public synchronized void reload() { 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(); ArangoDB arangoDb = new ArangoDB.Builder().host(host, port).user(user).password(passwd).build();
ArangoDatabase dbDemo = arangoDb.db("db_demo"); ArangoDatabase dbDemo = arangoDb.db("db_demo");
String platId = "28121369";//MetaKit.getPlatId(platToken); String platId = "28121369";//MetaKit.getPlatId(plattoken);
String dictAQL = String.format("for d in Dict filter d.sysPlatId=='%s'return d", platId); 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(); List<Dict> list = (List) dbDemo.query(dictAQL, Map.class).asListRemaining();
String[] fields = {"label", "value", "pValue"}; String[] fields = {"label", "value", "pValue"};

View File

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

View File

@@ -2,11 +2,11 @@ package net.tccn.file;
import net.tccn.base.*; import net.tccn.base.*;
import net.tccn.base.dbq.table.Field; import net.tccn.base.dbq.table.Field;
import net.tccn.meta.MetaTable; import net.tccn.meta.MTable;
import net.tccn.plat.MetaPlat;
import org.redkale.net.http.RestMapping; import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam; import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService; import org.redkale.net.http.RestService;
import org.redkale.source.FilterNode;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
@@ -41,19 +41,19 @@ public class _FileService extends BaseService {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
public MetaPlat getSysPlat(String token) { /*public MetaPlat getSysPlat(String token) {
return getT(token, MetaPlat.class, () -> MetaPlat.dao.findFirst(new MetaPlat(token))); return getT(token, MetaPlat.class, () -> MetaPlat.dao.findFirst(new MetaPlat(token)));
} }*/
@RestMapping(name = "data", comment = "得到文件数据") @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(); JBean jBean = new JBean();
//SysPlat sysPlat = getSysPlat(token); //SysPlat sysPlat = getSysPlat(token);
File file = new File(webroot, filePath); File file = new File(webroot, filePath);
if (file.exists()) { if (file.exists()) {
Map<String, List<Map>> map = ExcelKit.readExcelAll(file, FIELDS); 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) -> { map.forEach((k, v) -> {
if (v.size() > 2) { if (v.size() > 2) {
data.put(k.replace(" ", ""), toMetaTable(v)); data.put(k.replace(" ", ""), toMetaTable(v));
@@ -67,8 +67,8 @@ public class _FileService extends BaseService {
data.forEach((k, v) -> { data.forEach((k, v) -> {
Kv kv = Kv.of(); Kv kv = Kv.of();
res.put(k, res.put(k,
kv.set("name", v.getName()) kv.set("name", v.getTablename())
.set("hv", hv.contains(v.getName()) ? 1 : 0) .set("hv", hv.contains(v.getTablename()) ? 1 : 0)
.set("comment", v.getComment()) .set("comment", v.getComment())
); );
}); });
@@ -80,11 +80,11 @@ public class _FileService extends BaseService {
} }
@RestMapping(name = "sheet_data", comment = "得到sheet数据") @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(); JBean jBean = new JBean();
File file = new File(webroot, filePath); File file = new File(webroot, filePath);
List<Map> list = ExcelKit.readExcel(file, FIELDS, sheetName); List<Map> list = ExcelKit.readExcel(file, FIELDS, sheetName);
MetaTable metaTable = toMetaTable(list); MTable metaTable = toMetaTable(list);
jBean.setBody(metaTable); jBean.setBody(metaTable);
@@ -94,7 +94,7 @@ public class _FileService extends BaseService {
@RestMapping(ignore = true, comment = "导入excel数据到metatable") @RestMapping(ignore = true, comment = "导入excel数据到metatable")
public JBean saveSheet(@RestParam(name = "sheetArr", comment = "sheet名") String[] sheetArr, public JBean saveSheet(@RestParam(name = "sheetArr", comment = "sheet名") String[] sheetArr,
@RestParam(name = "filePath", comment = "文件路径") String filePath, @RestParam(name = "filePath", comment = "文件路径") String filePath,
@RestParam(name = "platToken") String token) { @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean(); JBean jBean = new JBean();
File file = new File(webroot, filePath); File file = new File(webroot, filePath);
@@ -103,31 +103,31 @@ public class _FileService extends BaseService {
Set<String> ks = map.keySet(); Set<String> ks = map.keySet();
// 找到需要导入的sheet名并组装对应的数据 // 找到需要导入的sheet名并组装对应的数据
MetaTable[] metaTables = Stream.of(sheetArr).filter(x -> { MTable[] metaTables = Stream.of(sheetArr).filter(x -> {
if (!ks.contains(x)) return false; if (!ks.contains(x)) return false;
MetaTable bean = new MetaTable(); FilterNode node = FilterNode.create("platid", platId(token)).and("tablename", x);
bean.setSysPlatId(platId(token)); return !metaSource.exists(MTable.class, node);
bean.setName(x);
return MetaTable.dao.findFirst(bean) == null;
}).map(x -> { }).map(x -> {
MetaTable metaTable = toMetaTable(map.get(x)); MTable metaTable = toMetaTable(map.get(x));
metaTable.setSysPlatId(platId(token)); metaTable.setPlatid(platId(token));
metaTable.setAlias(MetaKit.nextAlias()); metaTable.setAlias(metaKit.nextAlias());
return metaTable; return metaTable;
}).toArray(MetaTable[]::new); }).toArray(MTable[]::new);
MetaKit.save(metaTables); for (MTable x : metaTables) {
metaKit.save(x);
}
return jBean; return jBean;
} }
/** /**
* 组装元数据 * 组装元数据
*/ */
private MetaTable toMetaTable(List<Map> list) { private MTable toMetaTable(List<Map> list) {
//Kv col = Kv.of(); //Kv col = Kv.of();
MetaTable metaTable = new MetaTable(); MTable metaTable = new MTable();
list.remove(1);//list[0] head info list.remove(1);//list[0] head info
Map rowHead = list.remove(0); Map rowHead = list.remove(0);
@@ -135,7 +135,7 @@ public class _FileService extends BaseService {
String comment = getComment(rowHead);//list[1] comment, String comment = getComment(rowHead);//list[1] comment,
String tableName = getTableName(rowHead); String tableName = getTableName(rowHead);
//col.set("name", tableName).set("comment", comment); //col.set("name", tableName).set("comment", comment);
metaTable.setName(tableName); metaTable.setTablename(tableName);
metaTable.setComment(comment); 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.Getter;
import lombok.Setter; import lombok.Setter;
import net.tccn.base.arango.Doc; import net.tccn.base.BaseEntity;
import net.tccn.base.dbq.table.Field; 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.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -18,26 +17,47 @@ import java.util.stream.Collectors;
*/ */
@Getter @Getter
@Setter @Setter
@Table(name = "MetaTable", catalog = "db_meta") @Entity
public class MetaTable extends Doc<MetaTable> implements Serializable { @Table(name = "mtable", comment = "TABLE记录表")
public static final MetaTable dao = MetaTable.dao(MetaTable.class); @Cacheable(value = true, interval = 60 * 60 * 1000, direct = true)
public class MTable extends BaseEntity {
@Id
@Column(comment = "[表ID]")
private Integer tableid;
private String name; @Column(length = 64, comment = "[表名称]")
private String alias; //表别名全库唯一程序自动生成 private String tablename;
private String comment;
@Column(length = 15, unique = true, comment = "[表别名]全库唯一,程序自动生成")
private String alias;
@Column(comment = "[表字段]")
private List<Field> items; 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()); List<Field> fields = table.getColumns().stream().map(Field::toAs).collect(Collectors.toList());
MetaTable _bean = new MetaTable(); MTable _bean = new MTable();
_bean.setName(table.getName()); _bean.setTablename(table.getName());
_bean.setComment(table.getComment()); _bean.setComment(table.getComment());
_bean.setCatalog(table.getCatalog()); _bean.setCatalog(table.getCatalog());
_bean.setItems(fields); _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.*;
import net.tccn.base.dbq.table.Field; 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.RestMapping;
import org.redkale.net.http.RestParam; import org.redkale.net.http.RestParam;
import org.redkale.net.http.RestService; import org.redkale.net.http.RestService;
@@ -19,20 +19,20 @@ public class MetadataService extends BaseService { //arango
//----------- 元数据管理 --------------- //----------- 元数据管理 ---------------
@RestMapping(name = "tablelist", comment = "table列表") @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(); 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(catalog) || catalog.equals(x.getCatalog())) &&
(isEmpty(dbPlatId) || dbPlatId.equals(x.getDbPlatId())) && (isEmpty(dbid) || dbid == (int) x.getDbid()) &&
(isEmpty(name) || x.getName().contains(name)) && (isEmpty(name) || x.getTablename().contains(name)) &&
(isEmpty(token) || x.getSysPlatId().equals(platId(token))) && (isEmpty(token) || x.getPlatid().equals(platId(token))) &&
(isEmpty(x.getStatus()) || x.getStatus() != 9) (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("comment", x.getComment())
.set("catalog", x.getCatalog()) .set("catalog", x.getCatalog())
.set("alias", x.getAlias()) .set("alias", x.getAlias())
.set("dbPlatId", x.getDbPlatId()) .set("dbid", x.getDbid())
.set("linkCount", MetaKit.getMetaLinks().stream().filter(link -> { // 关联表数量 .set("linkCount", MetaKit.getMetaLinks().stream().filter(link -> { // 关联表数量
String[] tables = link.getTables(); String[] tables = link.getTables();
return x.getAlias().equals(tables[0]) || x.getAlias().equals(tables[1]); 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 = "业务列表") @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(); JBean jBean = new JBean();
List<MetaService> list = MetaKit.getMetaServices().stream() List<MService> list = MetaKit.getMetaServices().stream()
.filter(x -> platId(token).equals(x.getSysPlatId())) .filter(x -> platId(token).equals(x.getPlatid()))
.collect(Collectors.toList()); .collect(Collectors.toList());
jBean.setBody(list); jBean.setBody(list);
@@ -55,10 +55,10 @@ public class MetadataService extends BaseService { //arango
} }
@RestMapping(name = "tableinfo", comment = "table详情") @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(); JBean jBean = new JBean();
MetaTable metaTable = null; MTable metaTable = null;
if (!isEmpty(name)) { if (!isEmpty(name)) {
metaTable = MetaKit.getMetaTable(name, token); metaTable = MetaKit.getMetaTable(name, token);
} }
@@ -70,11 +70,11 @@ public class MetadataService extends BaseService { //arango
} }
@RestMapping(name = "service_save", comment = "service信息保存") @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(); JBean jBean = new JBean();
do { do {
// 标识码非空校验 // 标识码非空校验
if (isEmpty(service.getTable())) { if (isEmpty(service.getTablealias())) {
jBean.set(-1, "请选择业务主表"); jBean.set(-1, "请选择业务主表");
break; break;
} }
@@ -86,29 +86,29 @@ public class MetadataService extends BaseService { //arango
} }
// 标识码重复校验 // 标识码重复校验
MetaService metaService = MetaKit.getMetaService(service.getName(), token); MService metaService = MetaKit.getMetaService(service.getName(), token);
if (metaService != null && !metaService.getKey().equals(service.getKey())) { if (metaService != null && metaService.getServid() != service.getServid()) {
jBean.set(-1, "业务标识码被占用,修改业务标识码重试"); jBean.set(-1, "业务标识码被占用,修改业务标识码重试");
break; break;
} }
if (service.getKey() == null) { if (service.getServid() == 0) {
service.setSysPlatId(platId(token)); service.setPlatid(platId(token));
} }
MetaKit.save(service); metaKit.save(service);
} while (false); } while (false);
return jBean; return jBean;
} }
@RestMapping(name = "service_info", comment = "service基本信息") @RestMapping(name = "service_info", comment = "service基本信息")
public JBean serviceInfo(@RestParam(name = "platToken") String token, String name) { public JBean serviceInfo(@RestParam(name = "plattoken") String token, String name) {
MetaService metaService = MetaKit.getMetaService(name, token); MService mService = MetaKit.getMetaService(name, token);
return JBean.by(0, "", metaService); return JBean.by(0, "", mService);
} }
@RestMapping(name = "service_detail", comment = "service详情") @RestMapping(name = "service_detail", comment = "service详情")
public JBean serviceDetail(@RestParam(name = "platToken") String token, String name) { public JBean serviceDetail(@RestParam(name = "plattoken") String token, String name) {
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
Kv detail = MetaKit.buildeDetail(metaService); Kv detail = MetaKit.buildeDetail(metaService);
return JBean.by(0, "", detail); return JBean.by(0, "", detail);
@@ -116,122 +116,122 @@ public class MetadataService extends BaseService { //arango
//修改item的排序 //修改item的排序
@RestMapping(name = "itemsort", comment = "字段排序") @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.sortItem.apply(metaTable, items);
MetaKit.save(metaTable); metaKit.save(metaTable);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "itemupdate", comment = "字段修改") @RestMapping(name = "itemupdate", comment = "字段修改")
public JBean itemUpdate(String alias, List<Field> items, @RestParam(name = "platToken") String token) { public JBean itemUpdate(String alias, List<Field> items, @RestParam(name = "plattoken") String token) {
MetaTable metaTable = MetaKit.getMetaTableByAlias(alias); MTable metaTable = MetaKit.getMetaTableByAlias(alias);
MetaKit.itemUpdate.apply(metaTable, items); MetaKit.itemUpdate.apply(metaTable, items);
MetaKit.save(metaTable); metaKit.save(metaTable);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "showsort", comment = "展示字段修改") @RestMapping(name = "showsort", comment = "展示字段修改")
public JBean showSort(String name, List<Map<String, String>> shows, @RestParam(name = "platToken") String token) { public JBean showSort(String name, List<Map<String, String>> shows, @RestParam(name = "plattoken") String token) {
if (Utils.isEmpty(shows)) return null; if (Utils.isEmpty(shows)) return null;
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
metaService.setShows(shows); metaService.setShows(shows);
MetaKit.save(metaService); metaKit.save(metaService);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "exportsave", comment = "导出配置保存") @RestMapping(name = "exportsave", comment = "导出配置保存")
public JBean exportSave(String name, List<Map<String, String>> exports, @RestParam(name = "platToken") String token) { public JBean exportSave(String name, List<Map<String, String>> exports, @RestParam(name = "plattoken") String token) {
if (Utils.isEmpty(exports)) return null; if (Utils.isEmpty(exports)) return null;
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
metaService.setExports(exports); metaService.setExports(exports);
MetaKit.save(metaService); metaKit.save(metaService);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "detailsave", comment = "详情配置保存") @RestMapping(name = "detailsave", comment = "详情配置保存")
public JBean detailSave(String name, List<Map<String, String>> details, @RestParam(name = "platToken") String token) { public JBean detailSave(String name, List<Map<String, String>> details, @RestParam(name = "plattoken") String token) {
if (Utils.isEmpty(details)) return null; if (Utils.isEmpty(details)) return null;
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
metaService.setDetails(details); metaService.setDetails(details);
MetaKit.save(metaService); metaKit.save(metaService);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "editsave", comment = "表单配置保存") @RestMapping(name = "editsave", comment = "表单配置保存")
public JBean editSave(String name, List<FromItem> edits, @RestParam(name = "platToken") String token) { public JBean editSave(String name, List<FromItem> edits, @RestParam(name = "plattoken") String token) {
if (Utils.isEmpty(edits)) return null; if (Utils.isEmpty(edits)) return null;
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
metaService.setEdits(edits); metaService.setEdits(edits);
MetaKit.save(metaService); metaKit.save(metaService);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "delsave", comment = "删除配置保存") /*@RestMapping(name = "delsave", comment = "删除配置保存")
public JBean delSave(String name, Map<String, String> dels, @RestParam(name = "platToken") String token) { public JBean delSave(String name, Map<String, String> dels, @RestParam(name = "plattoken") String token) {
if (Utils.isEmpty(dels)) return null; if (Utils.isEmpty(dels)) return null;
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
metaService.setDels(dels); metaService.setDels(dels);
MetaKit.save(metaService); MetaKit.save(metaService);
return JBean.OK; return JBean.OK;
} }*/
@RestMapping(name = "importsort", comment = "导入字段保存") @RestMapping(name = "importsort", comment = "导入字段保存")
public JBean importSort(String serviceKey, List<String> items, @RestParam(name = "platToken") String token) { public JBean importSort(String serviceKey, List<String> items, @RestParam(name = "plattoken") String token) {
if (Utils.isEmpty(items)) return null; if (Utils.isEmpty(items)) return null;
MetaTable metaTable = MetaKit.getMetaTable(serviceKey, token); MTable metaTable = MetaKit.getMetaTable(serviceKey, token);
//fixme: metaTable.setImports(items); //fixme: metaTable.setImports(items);
MetaKit.save(metaTable); metaKit.save(metaTable);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "dbplatupdate", comment = "数据平台修改") @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()); MTable _metaTable = MetaKit.getMetaTableByKey(metaTable.getTableid());
_metaTable.setName(metaTable.getName()); _metaTable.setTablename(metaTable.getTablename());
_metaTable.setComment(metaTable.getComment()); _metaTable.setComment(metaTable.getComment());
_metaTable.setCatalog(metaTable.getCatalog()); _metaTable.setCatalog(metaTable.getCatalog());
_metaTable.setDbPlatId(metaTable.getDbPlatId()); _metaTable.setDbid(metaTable.getDbid());
_metaTable.setCatalog(metaTable.getCatalog()); _metaTable.setCatalog(metaTable.getCatalog());
MetaKit.save(_metaTable); metaKit.save(_metaTable);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "filter_update", comment = "查询配置修改") @RestMapping(name = "filter_update", comment = "查询配置修改")
public JBean filterUpdate(String name, List<Filter> filters, @RestParam(name = "platToken") String token) { public JBean filterUpdate(String name, List<Filter> filters, @RestParam(name = "plattoken") String token) {
MetaService metaService = MetaKit.getMetaService(name, token); MService metaService = MetaKit.getMetaService(name, token);
metaService.setFilters(filters); metaService.setFilters(filters);
MetaKit.save(metaService); metaKit.save(metaService);
return JBean.OK; return JBean.OK;
} }
@RestMapping(name = "table_link_list", comment = "实体表包含link信息的列表,(metalink 管理页面使用)") @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(); JBean jBean = new JBean();
List<Kv> list = MetaKit.getMetaTables().stream() List<Kv> list = MetaKit.getMTables().stream()
.filter(x -> (isEmpty(token) || x.getSysPlatId().equals(platId(token))) .filter(x -> (isEmpty(token) || x.getPlatid().equals(platId(token)))
&& (x.getStatus() == null || x.getStatus() != 9) && (x.getStatus() != 9)
).map(x -> { ).map(x -> {
Kv kv = Kv.of("name", x.getName()) Kv kv = Kv.of("tablename", x.getTablename())
.set("comment", x.getComment()) .set("comment", x.getComment())
.set("alias", x.getAlias()) .set("alias", x.getAlias())
.set("linkCount", 0); .set("linkCount", 0);
@@ -257,12 +257,12 @@ public class MetadataService extends BaseService { //arango
List<Kv> list = MetaKit.getMetaLinks().stream().filter(x -> List<Kv> list = MetaKit.getMetaLinks().stream().filter(x ->
x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias) x.getTables()[0].equals(alias) || x.getTables()[1].equals(alias)
).map(x -> { ).map(x -> {
MetaTable linkTable = MetaKit.getMetaTableByAlias(x.getTables()[0].equals(alias) ? x.getTables()[1] : x.getTables()[0]); MTable linkTable = MetaKit.getMetaTableByAlias(x.getTables()[0].equals(alias) ? x.getTables()[1] : x.getTables()[0]);
Kv kv = Kv.of("name", linkTable.getName()) Kv kv = Kv.of("tablename", linkTable.getTablename())
.set("alias", linkTable.getAlias()) .set("alias", linkTable.getAlias())
.set("comment", linkTable.getComment()) .set("comment", linkTable.getComment())
.set("linkSize", x.getLink().size()) .set("linkSize", x.getLinks().size())
.set("link", x.getLink()); .set("links", x.getLinks());
return kv; return kv;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
@@ -273,7 +273,7 @@ public class MetadataService extends BaseService { //arango
public JBean linkList(String alias) { public JBean linkList(String alias) {
JBean jBean = new JBean(); JBean jBean = new JBean();
List<MetaLink> links = MetaKit.getMetaLinks(); List<MLink> links = MetaKit.getMetaLinks();
if (!isEmpty(alias)) { if (!isEmpty(alias)) {
links = Utils.filter(links, x -> x.getTables()[0].equals(alias) || x.getTables()[1].equals(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 = "实体关系列表") @RestMapping(name = "link_save", comment = "实体关系列表")
public JBean linkSave(MetaLink link, @RestParam(name = "platToken") String token) { public JBean linkSave(MLink link, @RestParam(name = "plattoken") String token) {
MetaKit.save(link); metaKit.save(link);
return JBean.OK; return JBean.OK;
} }
@@ -292,7 +292,7 @@ public class MetadataService extends BaseService { //arango
@RestMapping(name = "plat_list", comment = "平台列表") @RestMapping(name = "plat_list", comment = "平台列表")
public JBean platList() { public JBean platList() {
JBean jBean = new JBean(); JBean jBean = new JBean();
List<MetaPlat> plats = MetaKit.getSysPlats(); List<MPlat> plats = MetaKit.getMPlats();
return jBean.setBody(plats); return jBean.setBody(plats);
} }
@@ -306,7 +306,7 @@ public class MetadataService extends BaseService { //arango
// ------------------------------------ 对外服务 -------------------------------------- // ------------------------------------ 对外服务 --------------------------------------
@RestMapping(name = "cfg", auth = false, comment = " 功能配置") @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(); JBean jBean = new JBean();
Map cfg = MetaKit.cfg(name, token); Map cfg = MetaKit.cfg(name, token);

View File

@@ -1,10 +1,10 @@
package net.tccn.open; package net.tccn.open;
import net.tccn.base.*; import net.tccn.base.*;
import net.tccn.base.dbq.DbExecutors;
import net.tccn.base.dbq.fbean.FBean; import net.tccn.base.dbq.fbean.FBean;
import net.tccn.base.dbq.*;
import net.tccn.dict.DictKit; 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.HttpScope;
import org.redkale.net.http.RestMapping; import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestParam; import org.redkale.net.http.RestParam;
@@ -23,10 +23,10 @@ import java.util.concurrent.ExecutionException;
public class DataService extends BaseService { public class DataService extends BaseService {
@RestMapping(name = "list", auth = false, comment = "数据分页列表") @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(); JBean jBean = new JBean();
try { try {
fBean.setPlatToken(token); fBean.setPlattoken(token);
fBean.setType("list"); fBean.setType("list");
PageBean page = DbExecutors.findPage(fBean); PageBean page = DbExecutors.findPage(fBean);
jBean.setBody(page); jBean.setBody(page);
@@ -38,7 +38,7 @@ public class DataService extends BaseService {
} }
@RestMapping(name = "save", comment = "数据保存") @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(); JBean jBean = new JBean();
try { try {
DbExecutors.save(name, data, token); DbExecutors.save(name, data, token);
@@ -50,9 +50,9 @@ public class DataService extends BaseService {
} }
@RestMapping(name = "export", auth = false, comment = "数据导出excel") @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 { try {
fBean.setPlatToken(token); fBean.setPlattoken(token);
fBean.setType("export"); fBean.setType("export");
PageBean page = DbExecutors.findPage(fBean); PageBean page = DbExecutors.findPage(fBean);
Kv heads = MetaKit.cfgExport(fBean.getName(), token); Kv heads = MetaKit.cfgExport(fBean.getName(), token);
@@ -64,7 +64,7 @@ public class DataService extends BaseService {
List<Map> data = page.getRows(); List<Map> data = page.getRows();
//dataDeal //dataDeal
MetaService metaService = MetaKit.getMetaService(fBean.getName(), token); MService metaService = MetaKit.getMetaService(fBean.getName(), token);
List<Map<String, String>> exports = metaService.getExports(); List<Map<String, String>> exports = metaService.getExports();
DictKit dictKit = DictKit.use(token); DictKit dictKit = DictKit.use(token);
//字典映射 、日期转换 、时间转换 //字典映射 、日期转换 、时间转换
@@ -107,8 +107,8 @@ public class DataService extends BaseService {
return HttpScope.refer("excel"); return HttpScope.refer("excel");
} }
@RestMapping(name = "del", auth = false, comment = "数据删除") /*@RestMapping(name = "del", auth = false, comment = "数据删除")
public JBean del(String name, Map<String, String> data, @RestParam(name = "platToken") String token) { public JBean del(String name, Map<String, String> data, @RestParam(name = "plattoken") String token) {
JBean jBean = new JBean(); JBean jBean = new JBean();
try { try {
DbExecutors.del(name, data, token); DbExecutors.del(name, data, token);
@@ -116,5 +116,5 @@ public class DataService extends BaseService {
jBean.set(-1, "删除数据失败!"); jBean.set(-1, "删除数据失败!");
} }
return jBean; 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; package net.tccn.plat;
import lombok.Getter; import lombok.Getter;
@@ -7,10 +8,12 @@ import org.redkale.convert.ConvertColumn;
import javax.persistence.Table; import javax.persistence.Table;
*/
/** /**
* 数据库平台 * 数据库平台
* @author: liangxianyou at 2018/11/14 12:58. * @author: liangxianyou at 2018/11/14 12:58.
*/ *//*
@Getter @Getter
@Setter @Setter
@Table(name = "MetaDb", catalog = "db_meta") @Table(name = "MetaDb", catalog = "db_meta")
@@ -37,8 +40,9 @@ public class MetaDb extends Doc<MetaDb> {
return user + ":" + pwd + "@" + host; return user + ":" + pwd + "@" + host;
} }
@ConvertColumn(ignore = true) //@ConvertColumn(ignore = true)
public String getPwd() { public String getPwd() {
return pwd; return pwd;
} }
} }
*/

View File

@@ -1,3 +1,4 @@
/*
package net.tccn.plat; package net.tccn.plat;
import lombok.Getter; import lombok.Getter;
@@ -5,9 +6,11 @@ import lombok.Setter;
import net.tccn.base.arango.Doc; import net.tccn.base.arango.Doc;
import javax.persistence.Table; import javax.persistence.Table;
*/
/** /**
* @author: liangxianyou at 2018/11/26 17:46. * @author: liangxianyou at 2018/11/26 17:46.
*/ *//*
@Getter @Getter
@Setter @Setter
@Table(name = "MetaPlat", catalog = "db_meta") @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.BaseService;
import net.tccn.base.JBean; import net.tccn.base.JBean;
import net.tccn.base.MetaKit; import net.tccn.base.MetaKit;
import net.tccn.base.PageBean; import net.tccn.base.Utils;
import net.tccn.base.dbq.jdbc.api.DbAccount; import net.tccn.base.dbq.jdbc.api.DbAccount;
import org.redkale.net.http.RestMapping; import org.redkale.net.http.RestMapping;
import org.redkale.net.http.RestService; import org.redkale.net.http.RestService;
import org.redkale.source.FilterBean;
import org.redkale.source.Flipper; import org.redkale.source.Flipper;
import org.redkale.util.Comment; import org.redkale.util.Comment;
import org.redkale.util.Sheet;
import java.util.List;
@RestService(name = "plat", automapping = true, comment = "业务/数据平台") @RestService(name = "plat", automapping = true, comment = "业务/数据平台")
public class PlatService extends BaseService { public class PlatService extends BaseService {
@RestMapping(name = "list", comment = "平台列表") @RestMapping(name = "list", comment = "平台列表")
public JBean list(MetaPlat plat, Flipper flipper) { public JBean list(MPlat plat, Flipper flipper) {
JBean jBean = new JBean(); JBean jBean = new JBean();
//PageBean<SysPlat> page = SysPlat.dao.findPage(plat, flipper); //PageBean<SysPlat> page = SysPlat.dao.findPage(plat, flipper);
List<MetaPlat> list = MetaKit.getSysPlats(); /*List<MetaPlat> list = MetaKit.getSysPlats();
PageBean page = PageBean.by(list, list.size()); 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("平台信息保存") @Comment("平台信息保存")
public JBean save(MetaPlat plat) { public JBean save(MPlat plat) {
MetaKit.save(plat); if (!Utils.isEmpty(plat.getPlatid())) {
metaSource.update(plat);
} else {
metaSource.insert(plat);
}
return JBean.OK; return JBean.OK;
} }
@@ -40,18 +45,29 @@ public class PlatService extends BaseService {
//------------------------ //------------------------
@RestMapping(name = "db_list", comment = "数据源列表") @RestMapping(name = "db_list", comment = "数据源列表")
public JBean dbList(MetaDb plat, Flipper flipper) { public JBean dbList(DbAccount plat, Flipper flipper) {
JBean jBean = new JBean(); JBean jBean = new JBean();
List<DbAccount> list = MetaKit.getDbPlats(); /*List<DbAccount> list = MetaKit.getDbPlats();
PageBean page = PageBean.by(list, list.size()); 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 = "数据源信息保存") @RestMapping(name = "db_save", comment = "数据源信息保存")
public JBean dbSave(MetaDb plat) { public JBean dbSave(DbAccount plat) {
MetaKit.save(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; 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.jdbc.api.DbKit;
import net.tccn.base.dbq.table.Column; import net.tccn.base.dbq.table.Column;
import net.tccn.base.dbq.table.Table; 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.RestMapping;
import org.redkale.net.http.RestService; import org.redkale.net.http.RestService;
@@ -23,13 +23,13 @@ import java.util.stream.Stream;
public class _DbService extends BaseService { public class _DbService extends BaseService {
@RestMapping(name = "catalog_list", comment = "获取数据源的database") @RestMapping(name = "catalog_list", comment = "获取数据源的database")
public JBean catalogList(DbAccount dbAccount, String dbPlatId) { public JBean catalogList(DbAccount dbAccount, int dbid) {
JBean jBean = new JBean(); JBean jBean = new JBean();
DbKit dbKit = null; DbKit dbKit = null;
if (dbAccount != null) { if (dbAccount != null) {
dbKit = new DbKit(dbAccount, ""); dbKit = new DbKit(dbAccount, "");
} else { } else {
dbKit = MetaKit.getDbKit(dbPlatId, ""); dbKit = MetaKit.getDbKit(dbid, "");
} }
List<Map> list = dbKit.queryList("SHOW DATABASES;", Map.class); List<Map> list = dbKit.queryList("SHOW DATABASES;", Map.class);
@@ -40,29 +40,29 @@ public class _DbService extends BaseService {
} }
@RestMapping(name = "table_list", comment = "数据库表列表") @RestMapping(name = "table_list", comment = "数据库表列表")
public List<Table> tableList(String dbPlatId, String catalog, String[] tables) { public List<Table> tableList(int dbid, String catalog, String[] tables) {
DbKit dbKit = MetaKit.getDbKit(dbPlatId, ""); DbKit dbKit = MetaKit.getDbKit(dbid, "");
String sql = tplKit.getTpl("db.table_list", Kv.of("catalog", catalog).set("tables", tables)); String sql = tplKit.getTpl("db.table_list", Kv.of("catalog", catalog).set("tables", tables));
return dbKit.queryList(sql, Table.class); return dbKit.queryList(sql, Table.class);
} }
@RestMapping(ignore = true) @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); List<Table> list = new ArrayList<>(tables.length);
for (String table : tables) { for (String table : tables) {
list.add(tableInfo(dbPlatId, catalog, table)); list.add(tableInfo(dbid, catalog, table));
} }
return list; return list;
} }
@RestMapping(name = "table_info", comment = "数据库表详情") @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(); JBean jBean = new JBean();
try { 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) { } catch (Exception e) {
jBean.set(-1, "查询表信息失败"); jBean.set(-1, "查询表信息失败");
new IllegalArgumentException("查询表信息失败", e); new IllegalArgumentException("查询表信息失败", e);
@@ -71,8 +71,8 @@ public class _DbService extends BaseService {
} }
@RestMapping(ignore = true, comment = "查询表信息") @RestMapping(ignore = true, comment = "查询表信息")
public Table tableInfo(String dbPlatId, String catalog, String tableName) { public Table tableInfo(int dbid, String catalog, String tableName) {
DbKit dbKit = MetaKit.getDbKit(dbPlatId, catalog); DbKit dbKit = MetaKit.getDbKit(dbid, catalog);
String sql = tplKit.getTpl("db.table_list", Kv.of("table", tableName)); String sql = tplKit.getTpl("db.table_list", Kv.of("table", tableName));
String columnSql = String.format("SHOW FULL COLUMNS FROM %s.`%s`", catalog, tableName); String columnSql = String.format("SHOW FULL COLUMNS FROM %s.`%s`", catalog, tableName);
@@ -92,10 +92,10 @@ public class _DbService extends BaseService {
} }
@RestMapping(name = "table_create", comment = "新建表[mysql]") @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(); JBean jBean = new JBean();
DbKit dbKit = MetaKit.getDbKit(dbPlatId, catalog); DbKit dbKit = MetaKit.getDbKit(dbid, catalog);
dbKit.createTable(sql); dbKit.createTable(sql);
return jBean; return jBean;

View File

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

View File

@@ -21,13 +21,13 @@ public class DbTask extends Doc<DbTask> {
private String name; // 任务标识码 private String name; // 任务标识码
private String title; // 任务名称 private String title; // 任务名称
//private String cate; // 任务类型 //private String cate; // 任务类型
private String dbPlatId; // 数据平台id private int dbid; // 数据平台id
private String catalog; // private String catalog; //
private String content; // 任务内容 private String content; // 任务内容
private String remark; // 任务备注 private String remark; // 任务备注
private String para; // 任务参数 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查询服务") @RestService(name = "qtask", automapping = true, comment = "qtask查询服务")
public class QtaskService extends BaseService { 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) @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) { if (para == null) {
para = Kv.of(); 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.Kv;
import net.tccn.base.dbq.jdbc.api.DbAccount; import net.tccn.base.dbq.jdbc.api.DbAccount;
/** /**
* |- dbp: 调用谁, 参数, * |- dbp: 调用谁, 参数,
* |- 谁:谁(干什么) => dbPlatId + content (在程序的世界每个个体,往往都有其明确的职责) * |- 谁:谁(干什么) => dbid + content (在程序的世界每个个体,往往都有其明确的职责)
* |- * |-
* 任务对象 * 任务对象
*/ */
@@ -16,7 +17,7 @@ import net.tccn.base.dbq.jdbc.api.DbAccount;
public class Task { public class Task {
private String name; // 任务标识,同一系统唯一 private String name; // 任务标识,同一系统唯一
private String dbPlatId; // 数据源id private int dbid; // 数据源id
private String catalog; // 数据库 database private String catalog; // 数据库 database
private String content; // 任务内容 private String content; // 任务内容

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,26 +1,15 @@
import net.tccn.base.*; import net.tccn.base.*;
import net.tccn.base.dbq.fbean.FBean; 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.base.dbq.parser.ParseMysql;
import net.tccn.dict.Dict; import net.tccn.dict.Dict;
import net.tccn.dict.DictKit; 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.junit.Test;
import org.redkale.convert.json.JsonConvert; 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.File;
import java.io.FileInputStream; import java.util.Date;
import java.io.FileOutputStream; import java.util.Timer;
import java.io.IOException; import java.util.TimerTask;
import java.lang.reflect.Type;
import java.util.*;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.BiPredicate; import java.util.function.BiPredicate;
import java.util.function.Predicate; 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 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 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 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()); 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 //@Test
public void parseFBeanTest() { 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'}," + "'filters':[{'col':'ap.comName','value':'贵阳市第十九中学','type':'LIKE'},{'col':'','value':'name=213113','type':'SQL'}," +
"{'col':'age','values':[1,2],'type':'RANGE'}]," + "{'col':'age','values':[1,2],'type':'RANGE'}]," +
@@ -74,7 +63,7 @@ public class RunTest<T> {
System.out.println("list:" + parse[1]); System.out.println("list:" + parse[1]);
} }
@Test /*@Test
public void jdbcTest() { public void jdbcTest() {
//DbAccount jdbcAccount = new DbAccount("jdbc:mysql://192.168.202.11:3306/gxbii_dev", "root", "eversec123098"); //DbAccount jdbcAccount = new DbAccount("jdbc:mysql://192.168.202.11:3306/gxbii_dev", "root", "eversec123098");
DbAccount dbAccount = new DbAccount(); DbAccount dbAccount = new DbAccount();
@@ -103,10 +92,10 @@ public class RunTest<T> {
//find count //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(total);
System.out.println(int.class);*/ System.out.println(int.class);*//*
} }*/
//@Test //@Test
public void toAsTest() { public void toAsTest() {
@@ -173,7 +162,7 @@ public class RunTest<T> {
} }
//@Test //@Test
public void userCreate() { /*public void userCreate() {
MetaUser user = new MetaUser(); MetaUser user = new MetaUser();
user.setUsername("admin"); user.setUsername("admin");
user.setCreateTime(System.currentTimeMillis()); user.setCreateTime(System.currentTimeMillis());
@@ -181,12 +170,12 @@ public class RunTest<T> {
user.setStatus(1); user.setStatus(1);
user.save(); user.save();
} }*/
//@Test //@Test
public void t() { /*public void t() {
System.out.println(MetaKit.nextAlias()); System.out.println(MetaKit.nextAlias());
} }*/
//@Test //@Test
public void kvTest() { public void kvTest() {
@@ -216,27 +205,38 @@ public class RunTest<T> {
Object o = Kv.toAs(k, v); Object o = Kv.toAs(k, v);
switch (v.getSimpleName()) { switch (v.getSimpleName()) {
case "int": case "int":
System.out.println((int)o);break; System.out.println((int) o);
break;
case "Integer": case "Integer":
System.out.println((Integer)o);break; System.out.println(o);
break;
case "long": case "long":
System.out.println((long)o);break; System.out.println((long) o);
break;
case "Long": case "Long":
System.out.println((Long)o);break; System.out.println(o);
break;
case "short": case "short":
System.out.println((short)o);break; System.out.println((short) o);
break;
case "Short": case "Short":
System.out.println((Short)o);break; System.out.println(o);
break;
case "byte": case "byte":
System.out.println((byte)o);break; System.out.println((byte) o);
break;
case "float": case "float":
System.out.println((float)o);break; System.out.println((float) o);
break;
case "Float": case "Float":
System.out.println((Float)o);break; System.out.println(o);
break;
case "Byte": case "Byte":
System.out.println((Byte)o);break; System.out.println(o);
break;
case "String": 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() { public void T() {
List<MetaTable> metaTables = MetaKit.getMetaTables(); List<MetaTable> metaTables = MetaKit.getMetaTables();
System.out.println(metaTables.size()); System.out.println(metaTables.size());
} }*/
TplKit tplKit = TplKit.use(); TplKit tplKit = TplKit.use();
@@ -301,7 +301,7 @@ public class RunTest<T> {
}*/ }*/
//@Test //@Test
public void dataToFileTest() { /*public void dataToFileTest() {
List<MetaService> metaServices = MetaService.dao.find(); List<MetaService> metaServices = MetaService.dao.find();
@@ -311,17 +311,17 @@ public class RunTest<T> {
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
FileKit.strToFile(convert.convertTo(metaKit), file); FileKit.strToFile(convert.convertTo(metaKit), file);
} }*/
//@Test //@Test
public void readJson() { /*public void readJson() {
File file = new File("tmp/MetaService.json"); File file = new File("tmp/MetaService.json");
try { try {
Type type = new TypeToken<List<MetaService>>() { Type type = new TypeToken<List<MService>>() {
}.getType(); }.getType();
List<MetaService> list = convert.convertFrom(type, new FileInputStream(file)); List<MService> list = convert.convertFrom(type, new FileInputStream(file));
System.out.println(list); System.out.println(list);
@@ -329,22 +329,22 @@ public class RunTest<T> {
e.printStackTrace(); e.printStackTrace();
} }
Class clazz = MetaService.class; Class clazz = MService.class;
//File file = new File(String.format("tmp/%s.json", clazz.getSimpleName())); //File file = new File(String.format("tmp/%s.json", clazz.getSimpleName()));
/* *//*
写入数据到 文件 写入数据到 文件
MetaKit.cacheSave(MetaTable.class); MetaKit.cacheSave(MetaTable.class);
MetaKit.cacheSave(MetaLink.class); MetaKit.cacheSave(MetaLink.class);
MetaKit.cacheSave(MetaService.class); MetaKit.cacheSave(MetaService.class);
MetaKit.cacheSave(DbAccount.class); MetaKit.cacheSave(DbAccount.class);
MetaKit.cacheSave(SysPlat.class);*/ MetaKit.cacheSave(SysPlat.class);*//*
} }*/
//@Test //@Test
public void cacheMemorySourceTest() { /*public void cacheMemorySourceTest() {
CacheMemorySource source = new CacheMemorySource(""); CacheMemorySource source = new CacheMemorySource("");
//MetaKit.dcate = "db"; //MetaKit.dcate = "db";
//MetaKit.init(); //MetaKit.init();
@@ -365,9 +365,9 @@ public class RunTest<T> {
System.out.println(metaTable); System.out.println(metaTable);
} }*/
public List<Map> dbKitTest() { /*public List<Map> dbKitTest() {
DbAccount dbAccount = new DbAccount(); DbAccount dbAccount = new DbAccount();
dbAccount.setCate("mysql"); dbAccount.setCate("mysql");
dbAccount.setUrl("jdbc:mysql://192.168.202.11:3306/gxbii_dev"); dbAccount.setUrl("jdbc:mysql://192.168.202.11:3306/gxbii_dev");
@@ -387,11 +387,11 @@ public class RunTest<T> {
System.out.println(list); System.out.println(list);
return list; return list;
} }*/
// 通用导出组件测试 // 通用导出组件测试
//@Test //@Test
public void exportTest() { /*public void exportTest() {
List<Map> list = dbKitTest(); List<Map> list = dbKitTest();
Kv kv = Kv.of("platID", "平台id") Kv kv = Kv.of("platID", "平台id")
@@ -406,7 +406,7 @@ public class RunTest<T> {
e.printStackTrace(); e.printStackTrace();
} }
} }*/
//@Test //@Test
public void switchTest() { public void switchTest() {