Commit e4e5411d authored by 陈祥烨's avatar 陈祥烨

删除调整

parent e660518b
......@@ -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>
......
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");
}
}
......@@ -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
......
......@@ -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> {
......
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(StringBuilder 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();
}
}
}
spring.application.name=DemoProject
spring.application.name=AMOS-ATL
server.servlet.context-path=/atl
#server.servlet.context-path=/jcs
server.port=30201
server.port=30002
#server.port=20000
spring.profiles.active=dev
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment