Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-tool
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tool
amos-tool
Commits
e4e5411d
Commit
e4e5411d
authored
Jul 19, 2023
by
陈祥烨
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
删除调整
parent
e660518b
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
317 additions
and
6 deletions
+317
-6
pom.xml
pom.xml
+20
-0
RelationResource.java
...om/yeejoin/amos/api/tool/controller/RelationResource.java
+22
-0
RelationTreeModel.java
...m/yeejoin/amos/api/tool/face/model/RelationTreeModel.java
+2
-0
RelationMapper.java
...om/yeejoin/amos/api/tool/face/orm/dao/RelationMapper.java
+2
-0
RelationService.java
...m/yeejoin/amos/api/tool/face/service/RelationService.java
+269
-4
application.properties
src/main/resources/application.properties
+2
-2
No files found.
pom.xml
View file @
e4e5411d
...
...
@@ -36,6 +36,12 @@
<version>
1.4.5.RELEASE
</version>
</dependency>
<!--JSqlparser(高效的SQL解析工具)-->
<dependency>
<groupId>
com.github.jsqlparser
</groupId>
<artifactId>
jsqlparser
</artifactId>
<version>
4.4
</version>
</dependency>
<!-- easy-poi -->
<dependency>
...
...
@@ -233,7 +239,21 @@
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<version>
2.7.9
</version>
<executions>
<execution>
<phase>
package
</phase>
<goals>
<goal>
repackage
</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>
true
</includeSystemScope>
<mainClass>
com.yeejoin.amos.Application
</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-deploy-plugin
</artifactId>
...
...
src/main/java/com/yeejoin/amos/api/tool/controller/RelationResource.java
View file @
e4e5411d
package
com
.
yeejoin
.
amos
.
api
.
tool
.
controller
;
import
com.yeejoin.amos.api.tool.face.model.DataBaseLinkModel
;
import
com.yeejoin.amos.api.tool.face.service.DataBaseLinkService
;
import
com.yeejoin.amos.api.tool.face.service.RelationService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Configurable
;
import
org.springframework.web.bind.annotation.*
;
import
org.typroject.tyboot.core.foundation.enumeration.UserType
;
import
org.typroject.tyboot.core.restful.doc.TycloudOperation
;
import
org.typroject.tyboot.core.restful.utils.ResponseHelper
;
import
org.typroject.tyboot.core.restful.utils.ResponseModel
;
import
javax.xml.crypto.Data
;
import
java.sql.Connection
;
import
java.util.ArrayList
;
import
java.util.List
;
@CrossOrigin
@RestController
...
...
@@ -18,6 +26,8 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
public
class
RelationResource
{
@Autowired
private
RelationService
relationService
;
@Autowired
DataBaseLinkService
dataBaseLinkService
;
/**
* 根据机构ID和数据库sequenceNbr批量删除数据库
...
...
@@ -34,4 +44,16 @@ public class RelationResource {
relationService
.
deleteAgency
(
agencyCodeId
,
sequenceNbrs
);
return
ResponseHelper
.
buildResponse
(
"The data has been deleted !"
);
}
/**
* 导出SQL脚本
* @return String
*/
@TycloudOperation
(
ApiLevel
=
UserType
.
AGENCY
,
needAuth
=
false
)
@GetMapping
(
value
=
"/output/{agencyCodeId}/{sequenceNbrs}"
)
@ApiOperation
(
httpMethod
=
"GET"
,
value
=
"导出"
,
notes
=
"导出"
)
public
ResponseModel
<
String
>
genereteSQL
(
@PathVariable
Long
agencyCodeId
,
@PathVariable
String
sequenceNbrs
)
throws
Exception
{
relationService
.
outputAgency
(
agencyCodeId
,
sequenceNbrs
);
return
ResponseHelper
.
buildResponse
(
"yes"
);
}
}
src/main/java/com/yeejoin/amos/api/tool/face/model/RelationTreeModel.java
View file @
e4e5411d
...
...
@@ -4,9 +4,11 @@ import io.swagger.annotations.ApiModel;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
sun.reflect.generics.tree.Tree
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.TreeMap
;
@Data
@NoArgsConstructor
...
...
src/main/java/com/yeejoin/amos/api/tool/face/orm/dao/RelationMapper.java
View file @
e4e5411d
...
...
@@ -13,6 +13,8 @@ import org.springframework.stereotype.Repository;
import
java.util.HashMap
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
@Mapper
@Repository
public
interface
RelationMapper
extends
BaseMapper
<
Relation
>
{
...
...
src/main/java/com/yeejoin/amos/api/tool/face/service/RelationService.java
View file @
e4e5411d
package
com
.
yeejoin
.
amos
.
api
.
tool
.
face
.
service
;
import
com.alibaba.fastjson.JSON
;
import
com.yeejoin.amos.api.tool.face.model.DataBaseLinkModel
;
import
com.yeejoin.amos.api.tool.face.model.RelationModel
;
import
com.yeejoin.amos.api.tool.face.model.RelationTreeModel
;
import
com.yeejoin.amos.api.tool.face.orm.dao.RelationMapper
;
import
com.yeejoin.amos.api.tool.face.orm.entity.Relation
;
import
com.yeejoin.amos.api.tool.face.orm.entity.TableColumn
;
import
io.github.classgraph.json.JSONUtils
;
import
org.apache.commons.beanutils.ConvertUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.ObjectUtils
;
import
org.typroject.tyboot.core.foundation.utils.StringUtil
;
import
org.typroject.tyboot.core.rdbms.service.BaseService
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.*
;
import
java.sql.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
@Service
public
class
RelationService
extends
BaseService
<
RelationModel
,
Relation
,
RelationMapper
>
{
/**
* 数据库备份路径
*/
public
static
final
String
BACKUP_PATH
=
"/db/"
;
/**
* 数据库备份文本前缀
*/
public
static
String
ONESQL_PREFIX
=
""
;
private
static
String
SUFFIX
=
"sql"
;
private
static
String
BR
=
"\r\n"
;
private
static
String
SLASH
=
"/"
;
private
static
String
BRANCH
=
";"
;
private
static
String
SPLIT
=
"`"
;
private
static
String
SPACE
=
" "
;
private
static
String
INSERT_INTO
=
" INSERT INTO "
;
private
static
String
CREATE_INTO
=
" CREATE TABLE "
;
private
static
String
VALUES
=
"VALUES"
;
private
static
String
LEFTBRACE
=
"("
;
private
static
String
RIGHTBRACE
=
")"
;
private
static
String
QUOTES
=
"'"
;
private
static
String
COMMA
=
","
;
private
static
String
DISABLEFOREIGN
=
"SET FOREIGN_KEY_CHECKS = 0;\r\n"
;
private
static
String
ABLEFOREIGN
=
"SET FOREIGN_KEY_CHECKS = 1;\r\n"
;
private
static
String
DELIMITER
=
"###################################"
;
@Autowired
private
RelationMapper
relationMapper
;
@Autowired
private
DataBaseLinkService
dataBaseLinkService
;
@Autowired
private
AgencyTreeService
agencyTreeService
;
@Autowired
JdbcTemplate
jdbcTemplate
;
@Autowired
StudioResourceService
studioResourceService
;
/**
* 根据机构删除
...
...
@@ -53,23 +91,23 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
List
<
RelationTreeModel
>
array
=
this
.
createList
(
tree
);
//根据列表获取sql语句
System
.
out
.
println
(
this
.
createSqlByArray
(
array
,
agencyCode
));
System
.
out
.
println
(
statementSql
(
this
.
createSqlByArray
(
array
,
agencyCode
),
connection
));
System
.
out
.
println
(
statementSql
(
this
.
createSqlByArray
(
array
,
agencyCode
)
.
toString
()
,
connection
));
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
connection
.
close
();
return
null
;
}
}
/**
* 执行sql
*/
public
int
statementSql
(
String
Builder
sql
,
Connection
connection
)
{
public
int
statementSql
(
String
sql
,
Connection
connection
)
{
int
count
=
0
;
try
{
Statement
statement
=
connection
.
createStatement
();
count
=
statement
.
executeUpdate
(
sql
.
toString
()
);
count
=
statement
.
executeUpdate
(
sql
);
statement
.
close
();
return
count
;
}
catch
(
SQLException
e
)
{
...
...
@@ -159,6 +197,159 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
}
/**
*
* @param connection
* @param agencyCode
* @param dbName
* @return
* @throws SQLException
*/
public
String
insertData
(
Connection
connection
,
String
agencyCode
,
String
dbName
)
throws
SQLException
{
try
{
if
(!
connection
.
isClosed
())
System
.
out
.
println
(
"Succeeded connecting to the Database!"
);
//通过连接获取relation表树形结构
List
<
RelationTreeModel
>
trees
=
this
.
createRelationTree
(
dbName
);
for
(
RelationTreeModel
tree
:
trees
)
{
//根据根节点获得根节点相关列表
List
<
RelationTreeModel
>
array
=
this
.
createList
(
tree
);
//根据列表获取sql语句
for
(
RelationTreeModel
model:
array
){
List
<
RelationTreeModel
>
tableSet
=
tableRelation
(
model
,
array
);
List
<
String
>
columNames
=
this
.
selectColumNames
(
model
.
getName
(),
connection
);
String
sql
=
this
.
insertSqlByTableName
(
tableSet
,
model
.
getName
(),
columNames
,
agencyCode
).
toString
();
System
.
out
.
println
(
sql
);
String
columnSql
=
""
+
"\t\t SELECT\n"
+
"\t\t table_name as table_name,\n"
+
"\t\t\tcolumn_name as columnName,\n"
+
"\t\t\t( CASE WHEN ( is_nullable = 'no' && column_key != 'PRI' ) THEN '1' ELSE NULL END ) AS isRequired,\n"
+
"\t\t\t( CASE WHEN column_key = 'PRI' THEN '1' ELSE '0' END ) AS isPk,\n"
+
"\t\t\tordinal_position AS sort,\n"
+
"\t\t\tcolumn_comment as columnComment,\n"
+
"\t\t\t( CASE WHEN extra = 'auto_increment' THEN '1' ELSE '0' END ) AS isIncrement,\n"
+
"\t\t\tcolumn_type as columnType \n"
+
"\t\tFROM\n"
+
"\t\t\tinformation_schema.COLUMNS \n"
+
"\t\tWHERE\n"
+
"\t\t\ttable_schema = database()\n"
+
"\t\t\tAND table_name = \""
+
model
.
getName
()
+
"\"\n"
+
"\t\tORDER BY\n"
+
"\t\t\tordinal_position\t"
;
List
<
Map
<
String
,
Object
>>
dataList
=
this
.
setToMap
(
sql
,
connection
);
List
<
Map
<
String
,
Object
>>
columnList
=
this
.
setToMap
(
columnSql
,
connection
);
List
<
TableColumn
>
columns
=
new
ArrayList
<>();
for
(
Map
<
String
,
Object
>
map:
columnList
){
TableColumn
column
=
JSON
.
parseObject
(
JSON
.
toJSONString
(
map
),
TableColumn
.
class
);
columns
.
add
(
column
);
}
StringBuffer
sbsql
=
new
StringBuffer
();
for
(
Map
<
String
,
Object
>
map
:
dataList
)
{
sbsql
.
append
(
INSERT_INTO
);
sbsql
.
append
(
SPACE
).
append
(
model
.
getName
()).
append
(
SPACE
);
sbsql
.
append
(
LEFTBRACE
);
for
(
TableColumn
column
:
columns
)
{
sbsql
.
append
(
SPLIT
);
sbsql
.
append
(
column
.
getColumnName
());
sbsql
.
append
(
SPLIT
);
sbsql
.
append
(
COMMA
);
}
sbsql
.
deleteCharAt
(
sbsql
.
length
()
-
1
);
sbsql
.
append
(
RIGHTBRACE
);
sbsql
.
append
(
VALUES
);
sbsql
.
append
(
LEFTBRACE
);
for
(
TableColumn
column
:
columns
)
{
if
(
column
.
getColumnType
().
contains
(
"bigint"
)
||
column
.
getColumnType
().
contains
(
"int"
)
||
column
.
getColumnType
().
contains
(
"bit(1)"
))
{
if
(!
ObjectUtils
.
isEmpty
(
map
.
get
(
column
.
getColumnName
())))
{
sbsql
.
append
(
map
.
get
(
column
.
getColumnName
()));
}
else
{
sbsql
.
append
(
"0"
);
}
}
else
{
if
(!
ObjectUtils
.
isEmpty
(
map
.
get
(
column
.
getColumnName
())))
{
sbsql
.
append
(
"'"
).
append
(
map
.
get
(
column
.
getColumnName
())).
append
(
"'"
);
}
else
{
sbsql
.
append
(
"null"
);
}
}
sbsql
.
append
(
COMMA
);
}
sbsql
.
deleteCharAt
(
sbsql
.
length
()
-
1
);
sbsql
.
append
(
RIGHTBRACE
);
sbsql
.
append
(
BRANCH
).
append
(
BR
);
}
download
(
sql
);
}
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
connection
.
close
();
return
null
;
}
/**
* 导出插入语句
* @param array
* @param agencyCode
* @return
*/
public
StringBuilder
insertSqlByTableName
(
List
<
RelationTreeModel
>
array
,
String
tableName
,
List
<
String
>
columNames
,
String
agencyCode
)
{
StringBuilder
sql
=
new
StringBuilder
();
if
(
array
.
size
()
==
1
)
{
sql
.
append
(
"SELECT * FROM "
).
append
(
array
.
get
(
0
).
getName
()).
append
(
" WHERE "
);
sql
.
append
(
array
.
get
(
0
).
getName
()).
append
(
"."
).
append
(
array
.
get
(
0
).
getField
());
sql
.
append
(
" = '"
).
append
(
agencyCode
).
append
(
"' ;"
);
}
else
{
sql
.
append
(
"SELECT "
);
int
count
=
0
;
for
(
String
name
:
columNames
){
if
(
count
!=
0
){
sql
.
append
(
","
);
}
count
++;
sql
.
append
(
tableName
).
append
(
"."
).
append
(
name
);
}
sql
.
append
(
" FROM "
).
append
(
array
.
get
(
0
).
getName
());
for
(
RelationTreeModel
model
:
array
)
{
if
(!
model
.
getParentName
().
equals
(
""
))
{
sql
.
append
(
" JOIN "
).
append
(
model
.
getName
()).
append
(
" ON "
);
sql
.
append
(
model
.
getParentName
()).
append
(
"."
).
append
(
model
.
getParentField
()).
append
(
" = "
);
sql
.
append
(
model
.
getName
()).
append
(
"."
).
append
(
model
.
getField
());
}
}
sql
.
append
(
" WHERE "
).
append
(
array
.
get
(
0
).
getName
()).
append
(
"."
).
append
(
array
.
get
(
0
).
getField
());
sql
.
append
(
" = '"
).
append
(
agencyCode
).
append
(
"' ;"
);
}
return
sql
;
}
/**
*
* @param tableName
* @param connection
* @return
* @throws SQLException
*/
public
List
<
String
>
selectColumNames
(
String
tableName
,
Connection
connection
)
throws
SQLException
{
List
<
String
>
columNames
=
new
ArrayList
<>();
String
sql
=
"SELECT * FROM "
+
tableName
+
" limit 0,0"
;
Statement
statement
=
connection
.
createStatement
();
ResultSet
resultSet
=
statement
.
executeQuery
(
sql
);
ResultSetMetaData
data
=
resultSet
.
getMetaData
();
for
(
int
i
=
1
;
i
<=
data
.
getColumnCount
();
i
++
){
if
(!(
"content"
).
equals
(
data
.
getColumnName
(
i
)))
columNames
.
add
(
data
.
getColumnName
(
i
));
}
return
columNames
;
}
/**
* 列表节点生成(递归)
*/
public
List
<
RelationTreeModel
>
createNodeList
(
List
<
RelationTreeModel
>
tree
)
{
...
...
@@ -185,4 +376,78 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
result
.
addAll
(
createNodeList
(
model
.
getChildren
()));
return
result
;
}
/**
*
* @param table
* @param list
* @return
*/
public
List
<
RelationTreeModel
>
tableRelation
(
RelationTreeModel
table
,
List
<
RelationTreeModel
>
list
){
List
<
RelationTreeModel
>
result
=
new
ArrayList
<>();
if
(
table
.
getParentName
().
equals
(
""
))
{
result
.
add
(
table
);
}
else
{
for
(
RelationTreeModel
node
:
list
)
{
if
(
node
.
getName
().
equals
(
table
.
getParentName
()))
{
result
.
addAll
(
tableRelation
(
node
,
list
));
result
.
add
(
table
);
break
;
}
}
}
return
result
;
}
/**
* 获取关系表转化为map
*/
public
List
<
Map
<
String
,
Object
>>
setToMap
(
String
sql
,
Connection
connection
)
throws
SQLException
{
Statement
statement
=
connection
.
createStatement
();
ResultSet
rs
=
statement
.
executeQuery
(
sql
);
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<
Map
<
String
,
Object
>>();
try
{
ResultSetMetaData
md
=
rs
.
getMetaData
();
int
columnCount
=
md
.
getColumnCount
();
while
(
rs
.
next
())
{
Map
<
String
,
Object
>
rowData
=
new
HashMap
<
String
,
Object
>();
for
(
int
i
=
1
;
i
<=
columnCount
;
i
++)
{
rowData
.
put
(
md
.
getColumnName
(
i
),
rs
.
getObject
(
i
));
}
list
.
add
(
rowData
);
}
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
finally
{
try
{
if
(
rs
!=
null
)
rs
.
close
();
rs
=
null
;
}
catch
(
SQLException
e
)
{
e
.
printStackTrace
();
}
}
return
list
;
}
public
void
outputAgency
(
Long
agencyCodeId
,
String
sequenceNbrs
)
throws
Exception
{
for
(
Long
seq
:
(
Long
[])
ConvertUtils
.
convert
(
StringUtil
.
string2Array
(
sequenceNbrs
),
Long
.
class
))
{
DataBaseLinkModel
model
=
dataBaseLinkService
.
queryBySeq
(
seq
);
Connection
connection
=
dataBaseLinkService
.
connectNewDatabase
(
model
);
this
.
insertData
(
connection
,
agencyTreeService
.
queryForAgencyCodeById
(
agencyCodeId
),
model
.
getDbName
());
}
}
public
void
download
(
String
filePath
,
String
sql
)
throws
IOException
{
File
file
=
new
File
(
filePath
);
try
{
FileWriter
writer
=
new
FileWriter
(
file
);
writer
.
write
(
sql
);
writer
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
src/main/resources/application.properties
View file @
e4e5411d
spring.application.name
=
DemoProject
spring.application.name
=
AMOS-ATL
server.servlet.context-path
=
/atl
#server.servlet.context-path=/jcs
server.port
=
30
201
server.port
=
30
002
#server.port=20000
spring.profiles.active
=
dev
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment