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

删除机构优化11

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