Browse Source

页面sql解析

master
xueyinfei 1 week ago
parent
commit
88a31a96f5
  1. 9
      src/main/java/com/guozhi/bloodanalysis/controller/BloodAnalysisController.java
  2. 15
      src/main/java/com/guozhi/bloodanalysis/mapper/TableAndColumnsMapper.java
  3. 4
      src/main/java/com/guozhi/bloodanalysis/parser/SqlParser.java
  4. 13
      src/main/java/com/guozhi/bloodanalysis/parser/utils/ExportParseResultUtil.java
  5. 2
      src/main/java/com/guozhi/bloodanalysis/service/BloodAnalysisService.java
  6. 54
      src/main/java/com/guozhi/bloodanalysis/service/TableService.java
  7. 16
      src/main/resources/mapper/MetaBloodAnalysisMapper.xml
  8. 27
      src/main/resources/mapper/TableAndColumnsMapper.xml

9
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<List<Map<String,String>>> analysisBySQL(@RequestBody BloodAnalysisBySql sqlModel) throws Exception {
List<Map<String,String>> result = bloodAnalysisService.analysisBySQL(sqlModel);
public ApiResult<Map<String,Object>> analysisBySQL(@RequestBody BloodAnalysisBySql sqlModel) throws Exception {
List<Map<String,Object>> relation = bloodAnalysisService.analysisBySQL(sqlModel);
Map<String,Object> result = tableService.getTableAndColumn(relation);
return ApiResult.success(result);
}
}

15
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<Map<String,Object>> 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);
}

4
src/main/java/com/guozhi/bloodanalysis/parser/SqlParser.java

@ -155,10 +155,10 @@ public class SqlParser {
}
}
public List<Map<String,String>> parse(String procSql, String dbType, Integer defaultSystem, String defaultModel) throws Exception {
public List<Map<String,Object>> parse(String procSql, String dbType, Integer defaultSystem, String defaultModel) throws Exception {
try {
String sqlText = "";
List<Map<String,String>> resultList = new ArrayList<>();
List<Map<String,Object>> resultList = new ArrayList<>();
List<String> targetSqlList = new ArrayList<>();
String sql = new GenericLogNormalizer().normalizer(procSql,dbType);
sql = optDeclare(sql,null);

13
src/main/java/com/guozhi/bloodanalysis/parser/utils/ExportParseResultUtil.java

@ -31,7 +31,7 @@ public class ExportParseResultUtil {
log.info("解析结果导出完成");
}
public List<Map<String,String>> expResult(List<KColumn> kColumns) throws Exception{
public List<Map<String,Object>> expResult(List<KColumn> kColumns) throws Exception{
List<String> 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<Map<String,String>> outTable(List<String> result){
List<Map<String,String>> list = new ArrayList<>();
private List<Map<String,Object>> outTable(List<String> result){
List<Map<String,Object>> list = new ArrayList<>();
for (String line : result) {
String lines [] = line.split(",");
Map<String,String> map = new HashMap<>();
map.put("sourceSysId",lines[0]);
Map<String,Object> 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;
}

2
src/main/java/com/guozhi/bloodanalysis/service/BloodAnalysisService.java

@ -105,7 +105,7 @@ public class BloodAnalysisService {
}
}
public List<Map<String, String>> analysisBySQL(BloodAnalysisBySql sqlModel) throws Exception {
public List<Map<String, Object>> analysisBySQL(BloodAnalysisBySql sqlModel) throws Exception {
SqlParser sqlParser = applicationContext.getBean(SqlParser.class);
return sqlParser.parse(sqlModel.getSql(), sqlModel.getSqlType(), sqlModel.getDefaultSystem(), sqlModel.getDefaultModel());
}

54
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<String, Object> getTableAndColumn(List<Map<String, Object>> relations) {
List<Map<String,Object>> tables = new ArrayList<>();
Set<String> uniqueKeys = new HashSet<>();
if (relations != null && relations.size()>0){
for (Map<String, Object> relation : relations) {
Map<String, Object> 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<String, Object> 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<String, Object> 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<Map<String,Object>> columns = tableAndColumnsMapper.getColumns((int)table.get("ssys_id"),(String)table.get("mdl_name"),(String)table.get("tab_eng_name"));
table.put("column",columns);
}
}
Map<String,Object> map = new HashMap<>();
map.put("relation",relations);
map.put("tableList",tables);
return map;
}
}

16
src/main/resources/mapper/MetaBloodAnalysisMapper.xml

@ -28,26 +28,26 @@
<select id="isColExis" resultType="com.guozhi.bloodanalysis.entity.MetaColumn">
select a.onum as onum,a.ssys_id as ssysId,a.mdl_name as mdlName,a.tab_eng_name as tabEngName, b.tab_cn_name as tabCnName,
a.fld_eng_name as fldEngName,a.fld_cn_name as fldCnName from t_metadata_fld_tab_extract_info a
left join t_metadata_extract_info b on a.ssys_cd = b.ssys_cd and a.mdl_name = b.mdl_name and a.tab_eng_name = b.tab_eng_name
where a.ssys_cd = #{db} and a.mdl_name = #{schema} and a.tab_eng_name = #{tableCode} and a.fld_eng_name = #{columnName}
left join t_metadata_extract_info b on a.ssys_id = b.ssys_id and a.mdl_name = b.mdl_name and a.tab_eng_name = b.tab_eng_name
where a.ssys_id = #{db} and a.mdl_name = #{schema} and a.tab_eng_name = #{tableCode} and a.fld_eng_name = #{columnName}
</select>
<select id="getColumnsByTabId" resultType="java.util.Map">
select fld_eng_name as colCode, fld_cn_name as colName,fld_no as fldNo from t_metadata_fld_tab_extract_info a
left join t_metadata_extract_info b on a.ssys_cd = b.ssys_cd and a.mdl_name = b.mdl_name and a.tab_eng_name = b.tab_eng_name
select a.fld_eng_name as colCode, a.fld_cn_name as colName,a.fld_no as fldNo from t_metadata_fld_tab_extract_info a
left join t_metadata_extract_info b on a.ssys_id = b.ssys_id and a.mdl_name = b.mdl_name and a.tab_eng_name = b.tab_eng_name
where b.onum = #{tableId}
<if test="colCode != null and colCode !=''">
and a.fld_eng_name = #{colCode}
</if>
order by fld_no
order by a.fld_no
</select>
<select id="getColumnsByTable" resultType="java.util.Map">
select fld_eng_name as colCode, fld_cn_name as colName,fld_no as fldNo from t_metadata_fld_tab_extract_info a
where ssys_cd =#{ssysId} and mdl_name = #{mdlName} and tab_eng_name = #{tableName}
select fld_eng_name as colCode, fld_cn_name as colName,fld_no as fldNo from t_metadata_fld_tab_extract_info
where ssys_id =#{ssysId} and mdl_name = #{mdlName} and tab_eng_name = #{tableName}
order by fld_no
</select>
<select id="getSystem" resultType="java.util.Map">
select ssys_cd as SYS_CODE, ssys_cd as SYS_NAME, mdl_name as SCH_CODE, mdl_name as SCH_NAME, tab_eng_name as TAB_CODE, tab_cn_name as TAB_NAME, onum as TAB_ID from t_metadata_extract_info where mdl_name = #{schema} and tab_eng_name = #{tableCode}
select ssys_id as SYS_ID, mdl_name as SCH_CODE, mdl_name as SCH_NAME, tab_eng_name as TAB_CODE, tab_cn_name as TAB_NAME, onum as TAB_ID from t_metadata_extract_info where mdl_name = #{schema} and tab_eng_name = #{tableCode}
</select>
<delete id="deleteAllBloodData">
delete from meta_blood_analysis

27
src/main/resources/mapper/TableAndColumnsMapper.xml

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.guozhi.bloodanalysis.mapper.TableAndColumnsMapper">
<select id="getColumns" resultType="java.util.Map">
select a.onum as onum,
a.ssys_id as ssysId,
a.mdl_name as mdlName,
a.tab_eng_name as tabEngName,
a.fld_eng_name as fldEngName,
COALESCE(a.fld_cn_name, b.fld_crrct_name) AS fldCnName,
a.fld_type as fldType,
a.pk_flag as pkFlag,
a.fld_no as fldNo
from t_metadata_fld_tab_extract_info a
left join t_metadata_fld_supp_info b
on a.ssys_id = b.ssys_id and a.mdl_name = b.mdl_name and a.tab_eng_name = b.tab_eng_name and a.fld_eng_name = b.fld_eng_name
where a.ssys_id = #{ssysId} and a.mdl_name = #{mdlName} and a.tab_eng_name = #{tableName}
order by a.fld_no
</select>
<select id="getTableNameByTable" resultType="java.lang.String">
select COALESCE(a.tab_cn_name, b.tab_crrct_name) AS tabCnName
from t_metadata_extract_info a
left join t_metadata_supp_info b
on a.ssys_id = b.ssys_id and a.mdl_name = b.mdl_name and a.tab_eng_name = b.tab_eng_name
where a.ssys_id = #{ssysId} and a.mdl_name = #{mdlName} and a.tab_eng_name = #{tableName}
</select>
</mapper>
Loading…
Cancel
Save