Commit 46450f7b authored by 陈祥烨's avatar 陈祥烨

删除机构优化11

parent 3fd0a4ff
......@@ -17,6 +17,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
......@@ -37,21 +38,12 @@ public class RelationResource {
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@DeleteMapping(value = "/relation/{agencyCodeId}/{sequenceNbrs}")
@ApiOperation(httpMethod = "DELETE", value = "机构删除", notes = "机构删除")
public ResponseModel<String> joinSQL(@PathVariable Long agencyCodeId, @PathVariable String sequenceNbrs) throws ClassNotFoundException, SQLException {
public ResponseModel<String> deleteDataBase(@PathVariable Long agencyCodeId, @PathVariable String sequenceNbrs) throws ClassNotFoundException, SQLException {
Long[] seqs = dataBaseService.stringToLong(sequenceNbrs);
for (Long seq : seqs) {
Connection connection = connectService.connectNewDatabase(dataBaseService.queryBySeq(seq));
relationService.deleteDataBaseByAgencyCode(connection, agencyTreeService.queryForAgencyCodeById(agencyCodeId));
}
for (Long seq : seqs) {
Connection connection = connectService.connectNewDatabase(dataBaseService.queryBySeq(seq));
relationService.deleteDataBase(connection,agencyTreeService.queryForAgencyCodeById(agencyCodeId));
}
return ResponseHelper.buildResponse("The data has been deleted !");
}
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@GetMapping(value = "/relation/test")
@ApiOperation(httpMethod = "GET", value = "sql",notes = "sql")
public ResponseModel<List<List<RelationTreeModel>>> test() throws SQLException, ClassNotFoundException {
Long[] seqs = dataBaseService.stringToLong("1675757337942056962");
Connection connection = connectService.connectNewDatabase(dataBaseService.queryBySeq(seqs[0]));
return ResponseHelper.buildResponse(relationService.createRelationTree(connection));
}
}
......@@ -78,8 +78,9 @@ public class TplResource {
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@DeleteMapping(value = "/s/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除多项", notes = "根据sequenceNbr删除多项")
public void deleteModelsBySequenceNbr(HttpServletRequest request, @PathVariable(value = "sequenceNbr")String sequenceNbr){
public ResponseModel<String> deleteModelsBySequenceNbr(HttpServletRequest request, @PathVariable(value = "sequenceNbr")String sequenceNbr){
tplService.deleteByIds(sequenceNbr);
return ResponseHelper.buildResponse("Succeed!");
}
/**
* 根据sequenceNbr查询
......
......@@ -16,10 +16,10 @@ public class RelationTreeModel {
private String name;
@ApiModelProperty(value = "表字段")
private String frontField;
private String field;
@ApiModelProperty(value = "前表关联字段")
private String postField;
private String parentField;
@ApiModelProperty(value = "父表名")
private String parentName;
......@@ -27,10 +27,10 @@ public class RelationTreeModel {
@ApiModelProperty(value = "子节点")
private List<RelationTreeModel> children;
public RelationTreeModel(String name, String frontField,String postField , String parentName, List<RelationTreeModel> children) {
public RelationTreeModel(String name, String field,String parentField , String parentName, List<RelationTreeModel> children) {
this.name = name;
this.frontField = frontField;
this.postField = postField;
this.field = field;
this.parentField = parentField;
this.parentName = parentName;
this.children = children;
}
......
......@@ -10,9 +10,9 @@ import org.apache.ibatis.annotations.SelectProvider;
import java.util.HashMap;
import java.util.List;
public interface RelationMapper extends BaseMapper<Relation> {
@SelectProvider(type = RelationService.class, method = "deleteDataBaseByAgencyCode")
@SelectProvider(type = RelationService.class, method = "deleteDataBase")
@SqlParser(filter = true)
List<Relation> deleteDataBaseByAgencyCode(@Param("maps") List<HashMap<String,String>> maps);
List<Relation> deleteDataBase(@Param("maps") List<HashMap<String,String>> maps);
}
......@@ -4,6 +4,7 @@ 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 org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
......@@ -23,44 +24,30 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
/**
* 根据Relation删除数据库
* 删除数据库
*/
public String deleteDataBaseByAgencyCode(Connection connection,String agencyCode) throws SQLException {
List<HashMap<String,String>> maps = this.queryRelation(connection);
public String deleteDataBase(Connection connection, String agencyCode) throws SQLException {
try {
// 加载数据库驱动
Class.forName("com.mysql.cj.jdbc.Driver");
if(!connection.isClosed())
if (!connection.isClosed())
System.out.println("Succeeded connecting to the Database!");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
StringBuilder sql = new StringBuilder("DELETE ").append(maps.get(0).get("TABLE1"));
for (HashMap<String, String> map : maps) {
if (map.get("TABLE1") != null)
sql.append(", ").append(map.get("TABLE2"));
}
sql.append(" FROM ").append(maps.get(0).get("TABLE1"));
try {
for (HashMap<String,String> map : maps) {
if (map.get("TABLE1") != null)
sql.append(" LEFT JOIN ").append(map.get("TABLE2")).append(" ON ").append(map.get("TABLE1")).append(".").append(map.get("TABLE1_FIELD")).append(" = ").append(map.get("TABLE2")).append(".").append(map.get("TABLE2_FIELD"));
else {
StringBuilder extraSql = new StringBuilder("DELETE FROM ");
extraSql.append(map.get("TABLE2")).append(" WHERE AGENCY_CODE = '").append(agencyCode).append("' ;");
System.out.println(extraSql);
System.out.println(statementSql(extraSql, connection));
}
//通过连接获取relation表树形结构
List<RelationTreeModel> trees = this.createRelationTree(connection);
for (RelationTreeModel tree : trees) {
//根据根节点获得根节点相关列表
List<RelationTreeModel> array = this.createList(tree);
//根据列表获取sql语句
System.out.println(this.createSqlByArray(array,agencyCode));
System.out.println(statementSql(this.createSqlByArray(array, agencyCode),connection));
}
sql.append(" WHERE ").append(maps.get(0).get("TABLE1")).append(".AGENCY_CODE = '").append(agencyCode).append("' ;");
System.out.println(sql.toString());
System.out.println(statementSql(sql, connection));
connection.close();
} catch (SQLException e) {
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
connection.close();
return null;
}
}
/**
* 执行sql
......@@ -69,7 +56,7 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
int count = 0;
try {
Statement statement = connection.createStatement();
count = statement.executeUpdate(sql.toString());
count = statement.executeUpdate(sql.toString());
statement.close();
return count;
} catch (SQLException e) {
......@@ -78,15 +65,18 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
return count;
}
public List<HashMap<String,String>> queryRelation(Connection connection) throws SQLException{
/**
* 获取关系表转化为map
*/
public List<HashMap<String, String>> queryRelation(Connection connection) throws SQLException {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM relation ;");
ResultSetMetaData data = resultSet.getMetaData();
List<HashMap<String,String>> maps = new ArrayList<>();
while (resultSet.next()){
HashMap<String,String> map = new HashMap<>();
for (int i = 1; i <= data.getColumnCount(); i++){
map.put(data.getColumnName(i),resultSet.getString(data.getColumnName(i)));
List<HashMap<String, String>> maps = new ArrayList<>();
while (resultSet.next()) {
HashMap<String, String> map = new HashMap<>();
for (int i = 1; i <= data.getColumnCount(); i++) {
map.put(data.getColumnName(i), resultSet.getString(data.getColumnName(i)));
}
maps.add(map);
}
......@@ -97,45 +87,118 @@ public class RelationService extends BaseService<RelationModel, Relation, Relati
/**
* 递归建立树形结构 (算法)
*
* @param relationTreeModels
* @param parentName
* @return
*/
public List<RelationTreeModel> createTree(List<RelationTreeModel> relationTreeModels, String parentName){
public List<RelationTreeModel> createTree(List<RelationTreeModel> relationTreeModels, String parentName) {
List<RelationTreeModel> tree = new ArrayList<>();
for (RelationTreeModel relationTreeModel: relationTreeModels){
if(parentName.equals(relationTreeModel.getParentName())){
for (RelationTreeModel relationTreeModel : relationTreeModels) {
if (parentName.equals(relationTreeModel.getParentName())) {
relationTreeModel.setChildren(createTree(relationTreeModels, relationTreeModel.getName()));
tree.add(relationTreeModel);
}
}
return tree;
}
/**
* 执行sql
* 创建节点列表
*/
public List<RelationTreeModel> createNodes(List<HashMap<String,String>> maps){
public List<RelationTreeModel> createNodes(List<HashMap<String, String>> maps) {
List<RelationTreeModel> relationTreeModels = new ArrayList<>();
for(HashMap<String,String> map: maps){
RelationTreeModel model = new RelationTreeModel();
if(map.get("TABLE1") == null)
model = new RelationTreeModel(map.get("TABLE2"), map.get(""), map.get("TABLE2_FIELD"),"",null);
else model = new RelationTreeModel(map.get("TABLE2"), map.get("TABLE1_FIELD"), map.get("TABLE2_FIELD"), map.get("TABLE1"),null);
relationTreeModels.add(model);
}
return relationTreeModels;
for (HashMap<String, String> map : maps) {
RelationTreeModel model = new RelationTreeModel();
if (map.get("TABLE1") == null)
model = new RelationTreeModel(map.get("TABLE2"), map.get("TABLE2_FIELD"), map.get("TABLE1_FIELD"), "", null);
else
model = new RelationTreeModel(map.get("TABLE2"), map.get("TABLE2_FIELD"), map.get("TABLE1_FIELD"), map.get("TABLE1"), null);
relationTreeModels.add(model);
}
return relationTreeModels;
}
/**
* 创建关系表树
*/
public List<RelationTreeModel> createRelationTree(Connection connection) throws SQLException {
List<HashMap<String, String>> maps = this.queryRelation(connection);
List<RelationTreeModel> trees = new ArrayList<>();
// for (RelationTreeModel root: createNodes(maps)){
// if(root.getParentName().equals("")){
//// System.out.println(root);
// trees.addAll(createTree(createNodes(maps),""));
// }
// }
trees.addAll(createTree(createNodes(maps), ""));
return trees;
}
public List<List<RelationTreeModel>> createRelationTree(Connection connection) throws SQLException {
List<HashMap<String,String>> maps = this.queryRelation(connection);
List<List<RelationTreeModel>> trees = new ArrayList<>();
for (RelationTreeModel root: createNodes(maps)){
if(root.getParentName().equals("")){
trees.add(createTree(createNodes(maps),""));
/**
* 根据列表生成sql语句
*/
public StringBuilder createSqlByArray(List<RelationTreeModel> array, String agencyCode) {
StringBuilder sql = new StringBuilder();
if (array.size() == 1) {
sql.append("DELETE FROM ").append(array.get(0).getName()).append(" WHERE ");
sql.append(array.get(0).getName()).append(".").append(array.get(0).getField()).append(" = '").append(agencyCode).append("' ;");
} else {
sql.append("DELETE ").append(array.get(0).getName());
for (RelationTreeModel model : array) {
if (!model.getParentName().equals(""))
sql.append(", ").append(model.getName());
}
sql.append(" FROM ").append(array.get(0).getName());
for (RelationTreeModel model : array) {
if (!model.getParentName().equals("")) {
sql.append(" LEFT 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()).append(" = '").append(agencyCode).append("' ;");
}
System.out.println(trees);
return trees;
return sql;
}
/**
* 根据多颗树生成sql语句
*/
public String createSQL(List<RelationTreeModel> tree) {
StringBuilder sql = new StringBuilder("DELETE");
List<RelationTreeModel> result = new ArrayList<>();
for (RelationTreeModel node : tree) {
}
return sql.toString();
}
/**
* 列表节点生成(递归)
*/
public List<RelationTreeModel> createNodeList(List<RelationTreeModel> tree) {
List<RelationTreeModel> result = new ArrayList<>();
for (RelationTreeModel node : tree) {
RelationTreeModel model = new RelationTreeModel();
BeanUtils.copyProperties(node, model);
model.setChildren(null);
result.add(model);
result.addAll(createNodeList(node.getChildren()));
}
return result;
}
/**
* 树转化对象列表
*/
public List<RelationTreeModel> createList(RelationTreeModel model) {
List<RelationTreeModel> result = new ArrayList<>();
RelationTreeModel temp = new RelationTreeModel();
BeanUtils.copyProperties(model, temp);
temp.setChildren(null);
result.add(temp);
result.addAll(createNodeList(model.getChildren()));
return result;
}
}
......@@ -79,8 +79,10 @@ public class TplService extends BaseService<TplModel, Tpl, TplMapper> {
* 删除多个模板
*/
public void deleteByIds(String sequenceNbr){
Long[] seq = StringUtil.String2LongArray(sequenceNbr);
String[] seqs = sequenceNbr.split(",");
Long[] seq = new Long[seqs.length];
for (int i = 0;i < seq.length;i++){
seq[i] = Long.parseLong(seqs[i]);
this.removeById(seq[i]);
}
}
......
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