From 88a31a96f51c70fba7e2c8c9ac7c1c9490609ac3 Mon Sep 17 00:00:00 2001 From: xueyinfei <1207092115@qq.com> Date: Sun, 7 Dec 2025 00:42:09 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2sql=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BloodAnalysisController.java | 9 +++- .../mapper/TableAndColumnsMapper.java | 15 ++++++ .../bloodanalysis/parser/SqlParser.java | 4 +- .../parser/utils/ExportParseResultUtil.java | 13 ++--- .../service/BloodAnalysisService.java | 2 +- .../bloodanalysis/service/TableService.java | 54 +++++++++++++++++++ .../mapper/MetaBloodAnalysisMapper.xml | 16 +++--- .../mapper/TableAndColumnsMapper.xml | 27 ++++++++++ 8 files changed, 121 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/guozhi/bloodanalysis/mapper/TableAndColumnsMapper.java create mode 100644 src/main/java/com/guozhi/bloodanalysis/service/TableService.java create mode 100644 src/main/resources/mapper/TableAndColumnsMapper.xml diff --git a/src/main/java/com/guozhi/bloodanalysis/controller/BloodAnalysisController.java b/src/main/java/com/guozhi/bloodanalysis/controller/BloodAnalysisController.java index ca096a7..0c85726 100644 --- a/src/main/java/com/guozhi/bloodanalysis/controller/BloodAnalysisController.java +++ b/src/main/java/com/guozhi/bloodanalysis/controller/BloodAnalysisController.java @@ -2,6 +2,7 @@ package com.guozhi.bloodanalysis.controller; import com.guozhi.bloodanalysis.entity.vo.BloodAnalysisBySql; import com.guozhi.bloodanalysis.service.BloodAnalysisService; +import com.guozhi.bloodanalysis.service.TableService; import com.guozhi.bloodanalysis.utils.ApiResult; import com.guozhi.bloodanalysis.utils.RedisUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +20,9 @@ public class BloodAnalysisController { @Autowired BloodAnalysisService bloodAnalysisService; + @Autowired + TableService tableService; + @Autowired RedisUtils redisUtils; @@ -36,8 +40,9 @@ public class BloodAnalysisController { } @PostMapping("/sql/analysis") - public ApiResult>> analysisBySQL(@RequestBody BloodAnalysisBySql sqlModel) throws Exception { - List> result = bloodAnalysisService.analysisBySQL(sqlModel); + public ApiResult> analysisBySQL(@RequestBody BloodAnalysisBySql sqlModel) throws Exception { + List> relation = bloodAnalysisService.analysisBySQL(sqlModel); + Map result = tableService.getTableAndColumn(relation); return ApiResult.success(result); } } diff --git a/src/main/java/com/guozhi/bloodanalysis/mapper/TableAndColumnsMapper.java b/src/main/java/com/guozhi/bloodanalysis/mapper/TableAndColumnsMapper.java new file mode 100644 index 0000000..974328c --- /dev/null +++ b/src/main/java/com/guozhi/bloodanalysis/mapper/TableAndColumnsMapper.java @@ -0,0 +1,15 @@ +package com.guozhi.bloodanalysis.mapper; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface TableAndColumnsMapper { + + List> getColumns(@Param("ssysId") int ssysId, @Param("mdlName") String mdlName, @Param("tableName") String tableName); + + String getTableNameByTable(@Param("ssysId") int ssysId, @Param("mdlName") String mdlName, @Param("tableName") String tableName); +} diff --git a/src/main/java/com/guozhi/bloodanalysis/parser/SqlParser.java b/src/main/java/com/guozhi/bloodanalysis/parser/SqlParser.java index 4e6236f..29941f8 100644 --- a/src/main/java/com/guozhi/bloodanalysis/parser/SqlParser.java +++ b/src/main/java/com/guozhi/bloodanalysis/parser/SqlParser.java @@ -155,10 +155,10 @@ public class SqlParser { } } - public List> parse(String procSql, String dbType, Integer defaultSystem, String defaultModel) throws Exception { + public List> parse(String procSql, String dbType, Integer defaultSystem, String defaultModel) throws Exception { try { String sqlText = ""; - List> resultList = new ArrayList<>(); + List> resultList = new ArrayList<>(); List targetSqlList = new ArrayList<>(); String sql = new GenericLogNormalizer().normalizer(procSql,dbType); sql = optDeclare(sql,null); diff --git a/src/main/java/com/guozhi/bloodanalysis/parser/utils/ExportParseResultUtil.java b/src/main/java/com/guozhi/bloodanalysis/parser/utils/ExportParseResultUtil.java index 0c7cc00..480fb60 100644 --- a/src/main/java/com/guozhi/bloodanalysis/parser/utils/ExportParseResultUtil.java +++ b/src/main/java/com/guozhi/bloodanalysis/parser/utils/ExportParseResultUtil.java @@ -31,7 +31,7 @@ public class ExportParseResultUtil { log.info("解析结果导出完成"); } - public List> expResult(List kColumns) throws Exception{ + public List> expResult(List kColumns) throws Exception{ List result = new ArrayList<>(); for (KColumn tCol : kColumns) { getOutList(kColumns, tCol, tCol.getRefColumns(), result); @@ -59,21 +59,22 @@ public class ExportParseResultUtil { metaBloodAnalysisMapper.insert(metaBloodAnalysis); } } - private List> outTable(List result){ - List> list = new ArrayList<>(); + private List> outTable(List result){ + List> list = new ArrayList<>(); for (String line : result) { String lines [] = line.split(","); - Map map = new HashMap<>(); - map.put("sourceSysId",lines[0]); + Map map = new HashMap<>(); + map.put("sourceSysId",Integer.parseInt(lines[0])); map.put("sourceMdlName",lines[1]); map.put("sourceTableName",lines[2]); map.put("sourceColName",lines[3]); - map.put("targetSysId",lines[4]); + map.put("targetSysId",Integer.parseInt(lines[4])); map.put("targetMdlName",lines[5]); String[] arr = lines[6].split("\\."); String targetTableName = arr[arr.length-1]; map.put("targetTableName",targetTableName); map.put("targetColName",lines[7]); + list.add(map); } return list; } diff --git a/src/main/java/com/guozhi/bloodanalysis/service/BloodAnalysisService.java b/src/main/java/com/guozhi/bloodanalysis/service/BloodAnalysisService.java index 8efaf69..504b426 100644 --- a/src/main/java/com/guozhi/bloodanalysis/service/BloodAnalysisService.java +++ b/src/main/java/com/guozhi/bloodanalysis/service/BloodAnalysisService.java @@ -105,7 +105,7 @@ public class BloodAnalysisService { } } - public List> analysisBySQL(BloodAnalysisBySql sqlModel) throws Exception { + public List> analysisBySQL(BloodAnalysisBySql sqlModel) throws Exception { SqlParser sqlParser = applicationContext.getBean(SqlParser.class); return sqlParser.parse(sqlModel.getSql(), sqlModel.getSqlType(), sqlModel.getDefaultSystem(), sqlModel.getDefaultModel()); } diff --git a/src/main/java/com/guozhi/bloodanalysis/service/TableService.java b/src/main/java/com/guozhi/bloodanalysis/service/TableService.java new file mode 100644 index 0000000..a821ae0 --- /dev/null +++ b/src/main/java/com/guozhi/bloodanalysis/service/TableService.java @@ -0,0 +1,54 @@ +package com.guozhi.bloodanalysis.service; + +import com.guozhi.bloodanalysis.mapper.TableAndColumnsMapper; +import io.swagger.models.auth.In; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class TableService { + + @Autowired + TableAndColumnsMapper tableAndColumnsMapper; + + public Map getTableAndColumn(List> relations) { + List> tables = new ArrayList<>(); + Set uniqueKeys = new HashSet<>(); + if (relations != null && relations.size()>0){ + for (Map relation : relations) { + Map sourceTable = new HashMap<>(); + sourceTable.put("ssys_id", relation.get("sourceSysId")); + sourceTable.put("mdl_name", relation.get("sourceMdlName")); + sourceTable.put("tab_eng_name", relation.get("sourceTableName")); + String sourceUniqueKey = (int)relation.get("sourceSysId") + '-' + (String)relation.get("sourceMdlName") + '-' + relation.get("sourceTableName"); + if (!uniqueKeys.contains(sourceUniqueKey)) { + uniqueKeys.add(sourceUniqueKey); + tables.add(sourceTable); + } + Map targetTable = new HashMap<>(); + targetTable.put("ssys_id", relation.get("targetSysId")); + targetTable.put("mdl_name", relation.get("targetMdlName")); + targetTable.put("tab_eng_name", relation.get("targetTableName")); + String targetUniqueKey = (int)relation.get("targetSysId") + '-' + (String)relation.get("targetMdlName") + '-' + relation.get("targetTableName"); + if (!uniqueKeys.contains(targetUniqueKey)) { + uniqueKeys.add(targetUniqueKey); + tables.add(targetTable); + } + } + } + if (tables.size()>0){ + for (Map table : tables) { + String tableName = tableAndColumnsMapper.getTableNameByTable((int)table.get("ssys_id"),(String)table.get("mdl_name"),(String)table.get("tab_eng_name")); + table.put("tab_cn_name",tableName); + List> columns = tableAndColumnsMapper.getColumns((int)table.get("ssys_id"),(String)table.get("mdl_name"),(String)table.get("tab_eng_name")); + table.put("column",columns); + } + } + Map map = new HashMap<>(); + map.put("relation",relations); + map.put("tableList",tables); + return map; + } +} diff --git a/src/main/resources/mapper/MetaBloodAnalysisMapper.xml b/src/main/resources/mapper/MetaBloodAnalysisMapper.xml index 8778076..3229f7b 100644 --- a/src/main/resources/mapper/MetaBloodAnalysisMapper.xml +++ b/src/main/resources/mapper/MetaBloodAnalysisMapper.xml @@ -28,26 +28,26 @@ delete from meta_blood_analysis diff --git a/src/main/resources/mapper/TableAndColumnsMapper.xml b/src/main/resources/mapper/TableAndColumnsMapper.xml new file mode 100644 index 0000000..67486f7 --- /dev/null +++ b/src/main/resources/mapper/TableAndColumnsMapper.xml @@ -0,0 +1,27 @@ + + + + + + \ No newline at end of file