Browse Source

业务关系(完成)

master
xueyinfei 1 month ago
parent
commit
a8b614e2af
  1. 24
      vue-fastapi-backend/.env.dev
  2. 104
      vue-fastapi-backend/module_admin/dao/meta_dao.py
  3. 481
      vue-fastapi-backend/module_admin/service/meta_service.py
  4. 4
      vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue
  5. 31
      vue-fastapi-frontend/src/views/meta/metaInfo/index.vue

24
vue-fastapi-backend/.env.dev

@ -33,20 +33,24 @@ JWT_REDIS_EXPIRE_MINUTES = 30
# 数据库类型,可选的有'mysql'、'postgresql',默认为'mysql'
DB_TYPE = 'mysql'
# 数据库主机
# DB_HOST = '192.168.0.3'
DB_HOST = '127.0.0.1'
#DB_HOST = '192.168.0.3'
DB_HOST = '47.113.147.166'
# DB_HOST = '127.0.0.1'
# 数据库端口
DB_PORT = 3306
# 数据库用户名
# DB_USERNAME = 'admin'
DB_USERNAME = 'root'
#DB_USERNAME = 'admin'
DB_USERNAME = 'dbf'
#DB_USERNAME = 'root'
# 数据库密码
# DB_PASSWORD = '123456'
DB_PASSWORD = 'root'
#DB_PASSWORD = '123456'
DB_PASSWORD = '1q2w3e4r'
# DB_PASSWORD = 'root'
# 数据库名称
# DB_DATABASE = 'vue_faseapi'
DB_DATABASE = 'ruoyi-fastapi'
#DB_DATABASE = 'vue_faseapi'
DB_DATABASE = 'vfa_test_0115'
# DB_DATABASE = 'ruoyi-fastapi'
# 是否开启sqlalchemy日志
DB_ECHO = true
@ -61,8 +65,8 @@ DB_POOL_TIMEOUT = 30
# -------- Redis配置 --------
# Redis主机
# REDIS_HOST = '192.168.0.3'
REDIS_HOST = '127.0.0.1'
REDIS_HOST = '192.168.0.3'
#REDIS_HOST = '127.0.0.1'
# Redis端口
REDIS_PORT = 6379

104
vue-fastapi-backend/module_admin/dao/meta_dao.py

@ -494,6 +494,29 @@ class MetaDao:
)).first()
return CamelCaseUtil.transform_result(result)
@classmethod
async def get_meta_col_name_list(cls, db: AsyncSession, query_object: MetaColObject):
query_result = (
(
await db.execute(
select(
MetadataFldTabExtractInfo.ssys_cd,
MetadataFldTabExtractInfo.mdl_name,
MetadataFldTabExtractInfo.tab_eng_name,
MetadataFldTabExtractInfo.fld_eng_name,
MetadataFldTabExtractInfo.fld_cn_name,
MetadataFldTabExtractInfo.fld_type,
MetadataFldTabExtractInfo.pk_flag,
).where(
MetadataFldTabExtractInfo.ssys_cd == query_object.ssys_cd,
MetadataFldTabExtractInfo.mdl_name == query_object.mdl_name,
MetadataFldTabExtractInfo.tab_eng_name == query_object.tab_name
).distinct()
)
).all()
)
return [row._asdict() for row in query_result]
@classmethod
async def get_er_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str):
sql = text("select a1.*,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end AS father "
@ -516,7 +539,7 @@ class MetaDao:
"and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName)"
" or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName))")
result = (await result_db.execute(sql, {"sysCode": ssys_cd,
"mdlName": mdl_name, "tabName": tab_eng_name}))
"mdlName": mdl_name, "tabName": tab_eng_name}))
# 获取列名
columns = result.keys() # 返回列名列表
@ -524,33 +547,33 @@ class MetaDao:
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict
@classmethod
async def get_meta_col_name_list(cls, db: AsyncSession, query_object: MetaColObject):
query_result = (
(
await db.execute(
select(
MetadataFldTabExtractInfo.ssys_cd,
MetadataFldTabExtractInfo.mdl_name,
MetadataFldTabExtractInfo.tab_eng_name,
MetadataFldTabExtractInfo.fld_eng_name,
MetadataFldTabExtractInfo.fld_cn_name,
MetadataFldTabExtractInfo.fld_type,
MetadataFldTabExtractInfo.pk_flag,
).where(
MetadataFldTabExtractInfo.ssys_cd == query_object.ssys_cd,
MetadataFldTabExtractInfo.mdl_name == query_object.mdl_name,
MetadataFldTabExtractInfo.tab_eng_name == query_object.tab_name
).distinct()
)
).all()
)
return [row._asdict() for row in query_result]
async def get_op_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str):
sql = text("select a1.* ,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end AS father"
" from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd ,b_mdl_name "
",b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation where rela_type = 'op2_relation' "
"and rela_value <> '[]') a1 left join t_batch_fld_relation a2 on a1.a_ssys_cd = a2.a_ssys_cd "
" and a1.a_mdl_name = a2.a_mdl_name and a1.a_tab_eng_name = a2.a_tab_eng_name and "
"a1.a_fld_eng_name = a2.a_fld_eng_name and a1.b_ssys_cd = a2.b_ssys_cd "
"and a1.b_mdl_name = a2.b_mdl_name and a1.b_tab_eng_name = a2.b_tab_eng_name "
"and a1.b_fld_eng_name = a2.b_fld_eng_name and a2.rela_type = 'set_flag' and a2.rela_value <> 0 "
"where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) in "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas) "
"or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) in "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)) "
"and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName) "
" or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName))")
result = (await result_db.execute(sql, {"sysCode": ssys_cd,
"mdlName": mdl_name, "tabName": tab_eng_name}))
# 获取列名
columns = result.keys() # 返回列名列表
# 将结果转换为字典列表
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict
@classmethod
async def get_er_relation_by_column(cls, result_db: AsyncSession, column: [], module: str):
async def get_er_relation_by_column(cls, result_db: AsyncSession, column: {}, module: str):
sql = text("select a1.*,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end AS father "
"from ( select a_ssys_cd,a_mdl_name,a_tab_eng_name,a_fld_eng_name,b_ssys_cd,b_mdl_name,"
"b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation "
@ -585,4 +608,35 @@ class MetaDao:
# 将结果转换为字典列表
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict
return result_as_dict
@classmethod
async def get_op_relation_by_column(cls, result_db: AsyncSession, column: {}, module: str):
sql = text("select a1.* ,case when a2.rela_value = '1' then 'A' when a2.rela_value = '2' then 'B' end AS father"
" from ( select a_ssys_cd ,a_mdl_name ,a_tab_eng_name ,a_fld_eng_name ,b_ssys_cd ,b_mdl_name "
",b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation where rela_type = 'op2_relation' "
"and rela_value <> '[]') a1 left join t_batch_fld_relation a2 on a1.a_ssys_cd = a2.a_ssys_cd "
" and a1.a_mdl_name = a2.a_mdl_name and a1.a_tab_eng_name = a2.a_tab_eng_name and "
"a1.a_fld_eng_name = a2.a_fld_eng_name and a1.b_ssys_cd = a2.b_ssys_cd "
"and a1.b_mdl_name = a2.b_mdl_name and a1.b_tab_eng_name = a2.b_tab_eng_name "
"and a1.b_fld_eng_name = a2.b_fld_eng_name and a2.rela_type = 'set_flag' and a2.rela_value <> 0 "
" where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) in "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas) "
"or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) in "
"(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)) "
"and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName "
" and a1.a_fld_eng_name = :fldName and a2.rela_value = :rela_value) "
" or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName "
" and a1.b_fld_eng_name = :fldName and a2.rela_value = :rela_value2))")
result = (await result_db.execute(sql, {"sysCode": column['ssys_cd'],
"mdlName": column['mdl_name'], "tabName": column['tab_eng_name'],
"fldName": column['fld_eng_name'],
"rela_value": '2' if module == 'pre' else '1',
"rela_value2": '1' if module == 'pre' else '2'
}))
# 获取列名
columns = result.keys() # 返回列名列表
# 将结果转换为字典列表
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict

481
vue-fastapi-backend/module_admin/service/meta_service.py

@ -210,282 +210,207 @@ class MetaService:
@classmethod
async def getBusinessRelationShip(cls, result_db: AsyncSession, meta_query: MetaBusinessRelShipObject):
if meta_query.type == 'op':
# 传递关系
currentNodeList = None
if meta_query.type == 'er':
# er关系
currentNodeList = await MetaDao.get_er_relation_by_table(result_db, meta_query.ssys_cd, meta_query.mdl_name,
meta_query.tab_eng_name)
tableList = []
preTableList = []
nextTableList = []
relationList = []
if currentNodeList is not None and len(currentNodeList) > 0:
for currentNode in currentNodeList:
if len(tableList) > 0:
hasATable = False
hasBTable = False
for tab in tableList:
if tab['ssys_cd'] == currentNode['a_ssys_cd'] and tab['mdl_name'] == \
currentNode['a_mdl_name'] and tab['tab_eng_name'] == currentNode['a_tab_eng_name']:
hasATable = True
if tab['ssys_cd'] == currentNode['b_ssys_cd'] and tab['mdl_name'] == \
currentNode['b_mdl_name'] and tab['tab_eng_name'] == currentNode['b_tab_eng_name']:
hasBTable = True
if not hasATable:
tableList.append({"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name']})
if not hasBTable:
tableList.append({"ssys_cd": currentNode['b_ssys_cd'],
"mdl_name": currentNode['b_mdl_name'],
"tab_eng_name": currentNode['b_tab_eng_name']})
else:
tableList.append({"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name']})
tableList.append({"ssys_cd": currentNode['b_ssys_cd'],
"mdl_name": currentNode['b_mdl_name'],
"tab_eng_name": currentNode['b_tab_eng_name']})
if currentNode['a_tab_eng_name'] == meta_query.tab_eng_name:
if currentNode['father'] == 'A':
# b为下游
hasTable = False
for table in nextTableList:
if table['tab_eng_name'] == currentNode['b_tab_eng_name']:
table['column'].append({'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']})
relationList.append({"source": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']},
"target": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}})
hasTable = True
break
if not hasTable:
nextTableList.append({'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'column': [{'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}]})
relationList.append({"source": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']},
"target": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}})
if currentNode['father'] == 'B':
# b为上游
hasTable = False
for table in preTableList:
if table['tab_eng_name'] == currentNode['b_tab_eng_name']:
table['column'].append({'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']})
relationList.append({"source": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']},
"target": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']}})
hasTable = True
break
if not hasTable:
preTableList.append({'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'column': [{'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}]})
relationList.append({"source": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']},
"target": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']}})
if currentNode['b_tab_eng_name'] == meta_query.tab_eng_name:
if currentNode['father'] == 'A':
# a 为上游
hasTable = False
for table in preTableList:
if table['tab_eng_name'] == currentNode['a_tab_eng_name']:
table['column'].append({'ssys_cd': currentNode['a_ssys_cd'],
'mdl_name': currentNode['a_mdl_name'],
'tab_eng_name': currentNode['a_tab_eng_name'],
'fld_eng_name': currentNode['a_fld_eng_name']})
relationList.append({"source": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']},
"target": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}})
hasTable = True
break
if not hasTable:
preTableList.append({'ssys_cd': currentNode['a_ssys_cd'],
'mdl_name': currentNode['a_mdl_name'],
'tab_eng_name': currentNode['a_tab_eng_name'],
'column': [{'ssys_cd': currentNode['a_ssys_cd'],
'mdl_name': currentNode['a_mdl_name'],
'tab_eng_name': currentNode['a_tab_eng_name'],
'fld_eng_name': currentNode['a_fld_eng_name']}]})
relationList.append({"source": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']},
"target": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}})
if currentNode['father'] == 'B':
# a 为下游
hasTable = False
for table in nextTableList:
if table['tab_eng_name'] == currentNode['a_tab_eng_name']:
table['column'].append({'ssys_cd': currentNode['a_ssys_cd'],
'mdl_name': currentNode['a_mdl_name'],
'tab_eng_name': currentNode['a_tab_eng_name'],
'fld_eng_name': currentNode['a_fld_eng_name']})
relationList.append({"source": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']},
"target": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']}})
hasTable = True
break
if not hasTable:
nextTableList.append({'ssys_cd': currentNode['a_ssys_cd'],
'mdl_name': currentNode['a_mdl_name'],
'tab_eng_name': currentNode['a_tab_eng_name'],
'column': [{'ssys_cd': currentNode['a_ssys_cd'],
'mdl_name': currentNode['a_mdl_name'],
'tab_eng_name': currentNode['a_tab_eng_name'],
'fld_eng_name': currentNode['a_fld_eng_name']}]})
relationList.append({"source": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']},
"target": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']}})
if len(preTableList) > 0:
for preTable in preTableList:
for column in preTable['column']:
firstNodeList = await MetaDao.get_er_relation_by_column(result_db, column, "pre") # 取上游
for node in firstNodeList:
if node['a_fld_eng_name'] == column['fld_eng_name']:
# a为下游,取b上游
existTable = False
for tab in tableList:
if tab['ssys_cd'] == node['b_ssys_cd'] and tab['mdl_name'] == \
node['b_mdl_name'] and tab['tab_eng_name'] == node['b_tab_eng_name']:
existTable = True
if not existTable:
tableList.append({"ssys_cd": node['b_ssys_cd'],
"mdl_name": node['b_mdl_name'],
"tab_eng_name": node['b_tab_eng_name']})
relationList.append({"source": {'ssys_cd': node['b_ssys_cd'],
'mdl_name': node['b_mdl_name'],
'tab_eng_name': node['b_tab_eng_name'],
'fld_eng_name': node['b_fld_eng_name']},
"target": {"ssys_cd": node['a_ssys_cd'],
"mdl_name": node['a_mdl_name'],
"tab_eng_name": node['a_tab_eng_name'],
"fld_eng_name": node['a_fld_eng_name']}})
if node['b_fld_eng_name'] == column['fld_eng_name']:
# b为下游,取a上游
existTable2 = False
for tab in tableList:
if tab['ssys_cd'] == node['a_ssys_cd'] and tab['mdl_name'] == \
node['a_mdl_name'] and tab['tab_eng_name'] == node['a_tab_eng_name']:
existTable2 = True
if not existTable2:
tableList.append({"ssys_cd": node['a_ssys_cd'],
"mdl_name": node['a_mdl_name'],
"tab_eng_name": node['a_tab_eng_name']})
relationList.append({"source": {"ssys_cd": node['a_ssys_cd'],
"mdl_name": node['a_mdl_name'],
"tab_eng_name": node['a_tab_eng_name'],
"fld_eng_name": node['a_fld_eng_name']},
"target": {'ssys_cd': node['b_ssys_cd'],
'mdl_name': node['b_mdl_name'],
'tab_eng_name': node['b_tab_eng_name'],
'fld_eng_name': node['b_fld_eng_name']}})
if len(nextTableList) > 0:
for preTable in preTableList:
for column in preTable['column']:
lastNodeList = await MetaDao.get_er_relation_by_column(result_db, column, "next") # 取下游
for node in lastNodeList:
if node['a_fld_eng_name'] == column['fld_eng_name']:
existTable = False
for tab in tableList:
if tab['ssys_cd'] == node['b_ssys_cd'] and tab['mdl_name'] == \
node['b_mdl_name'] and tab['tab_eng_name'] == node['b_tab_eng_name']:
existTable = True
if not existTable:
tableList.append({"ssys_cd": node['b_ssys_cd'],
"mdl_name": node['b_mdl_name'],
"tab_eng_name": node['b_tab_eng_name']})
relationList.append({"source": {"ssys_cd": node['a_ssys_cd'],
"mdl_name": node['a_mdl_name'],
"tab_eng_name": node['a_tab_eng_name'],
"fld_eng_name": node['a_fld_eng_name']},
"target": {'ssys_cd': node['b_ssys_cd'],
'mdl_name': node['b_mdl_name'],
'tab_eng_name': node['b_tab_eng_name'],
'fld_eng_name': node['b_fld_eng_name']}})
if node['b_fld_eng_name'] == column['fld_eng_name']:
existTable = False
for tab in tableList:
if tab['ssys_cd'] == node['a_ssys_cd'] and tab['mdl_name'] == \
node['a_mdl_name'] and tab['tab_eng_name'] == node['a_tab_eng_name']:
existTable = True
if not existTable:
tableList.append({"ssys_cd": node['a_ssys_cd'],
"mdl_name": node['a_mdl_name'],
"tab_eng_name": node['a_tab_eng_name']})
relationList.append({"source": {'ssys_cd': node['b_ssys_cd'],
'mdl_name': node['b_mdl_name'],
'tab_eng_name': node['b_tab_eng_name'],
'fld_eng_name': node['b_fld_eng_name']},
"target": {"ssys_cd": node['a_ssys_cd'],
"mdl_name": node['a_mdl_name'],
"tab_eng_name": node['a_tab_eng_name'],
"fld_eng_name": node['a_fld_eng_name']}})
if len(tableList) > 0:
for table in tableList:
query_object = MetaColObject()
query_object.ssys_cd = table['ssys_cd']
query_object.mdl_name = table['mdl_name']
query_object.tab_name = table['tab_eng_name']
meta_result = await MetaDao.get_meta_col_name_list(result_db, query_object)
result = CamelCaseUtil.transform_result(meta_result)
table['column'] = result
result = {
"tableList": tableList,
"relation": relationList
}
return result
currentNodeList = await cls.getRelationByTable(result_db, meta_query.ssys_cd, meta_query.mdl_name,
meta_query.tab_eng_name, meta_query.type)
relationList = []
if currentNodeList is not None and len(currentNodeList) > 0:
for currentNode in currentNodeList:
relation = {"source": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']},
"target": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}} if \
currentNode['father'] == 'A' else {
"source": {'ssys_cd': currentNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']},
"target": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']}}
relationList.append(relation)
if currentNode['a_tab_eng_name'] == meta_query.tab_eng_name:
if currentNode['father'] == 'A':
# b为下游,取b字段的下下游
nextNodeList =(await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'],
currentNode['b_mdl_name'],
currentNode['b_tab_eng_name'],
currentNode['b_fld_eng_name'],
meta_query.type,
'next') )
if nextNodeList and len(nextNodeList) > 0:
for nextNode in nextNodeList:
relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'],
"mdl_name": nextNode['a_mdl_name'],
"tab_eng_name": nextNode['a_tab_eng_name'],
"fld_eng_name": nextNode['a_fld_eng_name']},
"target": {'ssys_cd': nextNode['b_ssys_cd'],
'mdl_name': nextNode['b_mdl_name'],
'tab_eng_name': nextNode['b_tab_eng_name'],
'fld_eng_name': nextNode['b_fld_eng_name']}} if nextNode[
'father'] == 'A' else {
"source": {'ssys_cd': nextNode['b_ssys_cd'],
'mdl_name': nextNode['b_mdl_name'],
'tab_eng_name': nextNode['b_tab_eng_name'],
'fld_eng_name': nextNode['b_fld_eng_name']},
"target": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'],
"tab_eng_name": nextNode['a_tab_eng_name'],
"fld_eng_name": nextNode['a_fld_eng_name']}}
relationList.append(relation)
if currentNode['father'] == 'B':
# b为上游, 取b字段的上上游
preNodeList = await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'],
currentNode['b_mdl_name'],
currentNode['b_tab_eng_name'],
currentNode['b_fld_eng_name'],
meta_query.type,
'pre')
if preNodeList and len(preNodeList) > 0:
for preNode in preNodeList:
relation = {"source": {"ssys_cd": preNode['a_ssys_cd'],
"mdl_name": preNode['a_mdl_name'],
"tab_eng_name": preNode['a_tab_eng_name'],
"fld_eng_name": preNode['a_fld_eng_name']},
"target": {'ssys_cd': preNode['b_ssys_cd'],
'mdl_name': preNode['b_mdl_name'],
'tab_eng_name': preNode['b_tab_eng_name'],
'fld_eng_name': preNode['b_fld_eng_name']}} if preNode[
'father'] == 'A' else {
"source": {'ssys_cd': preNode['b_ssys_cd'],
'mdl_name': preNode['b_mdl_name'],
'tab_eng_name': preNode['b_tab_eng_name'],
'fld_eng_name': preNode['b_fld_eng_name']},
"target": {"ssys_cd": preNode['a_ssys_cd'], "mdl_name": preNode['a_mdl_name'],
"tab_eng_name": preNode['a_tab_eng_name'],
"fld_eng_name": preNode['a_fld_eng_name']}}
relationList.append(relation)
if currentNode['b_tab_eng_name'] == meta_query.tab_eng_name:
if currentNode['father'] == 'A':
# a 为上游,取a字段的上上游
preNodeList = await cls.getRelationByColumn(result_db, currentNode['a_ssys_cd'],
currentNode['a_mdl_name'],
currentNode['a_tab_eng_name'],
currentNode['a_fld_eng_name'],
meta_query.type,
'pre')
if preNodeList and len(preNodeList) > 0:
for preNode in preNodeList:
relation = {"source": {"ssys_cd": preNode['a_ssys_cd'],
"mdl_name": preNode['a_mdl_name'],
"tab_eng_name": preNode['a_tab_eng_name'],
"fld_eng_name": preNode['a_fld_eng_name']},
"target": {'ssys_cd': preNode['b_ssys_cd'],
'mdl_name': preNode['b_mdl_name'],
'tab_eng_name': preNode['b_tab_eng_name'],
'fld_eng_name': preNode['b_fld_eng_name']}} if \
preNode['father'] == 'A' else {
"source": {'ssys_cd': preNode['b_ssys_cd'],
'mdl_name': preNode['b_mdl_name'],
'tab_eng_name': preNode['b_tab_eng_name'],
'fld_eng_name': preNode['b_fld_eng_name']},
"target": {"ssys_cd": preNode['a_ssys_cd'], "mdl_name": preNode['a_mdl_name'],
"tab_eng_name": preNode['a_tab_eng_name'],
"fld_eng_name": preNode['a_fld_eng_name']}}
relationList.append(relation)
if currentNode['father'] == 'B':
# a 为下游,取a字段的下下游
nextNodeList = await cls.getRelationByColumn(result_db, currentNode['a_ssys_cd'],
currentNode['a_mdl_name'],
currentNode['a_tab_eng_name'],
currentNode['a_fld_eng_name'],
meta_query.type,
'next')
for nextNode in nextNodeList:
relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'],
"mdl_name": nextNode['a_mdl_name'],
"tab_eng_name": nextNode['a_tab_eng_name'],
"fld_eng_name": nextNode['a_fld_eng_name']},
"target": {'ssys_cd': nextNode['b_ssys_cd'],
'mdl_name': nextNode['b_mdl_name'],
'tab_eng_name': nextNode['b_tab_eng_name'],
'fld_eng_name': nextNode['b_fld_eng_name']}} if \
nextNode['father'] == 'A' else {
"source": {'ssys_cd': nextNode['b_ssys_cd'],
'mdl_name': nextNode['b_mdl_name'],
'tab_eng_name': nextNode['b_tab_eng_name'],
'fld_eng_name': nextNode['b_fld_eng_name']},
"target": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'],
"tab_eng_name": nextNode['a_tab_eng_name'],
"fld_eng_name": nextNode['a_fld_eng_name']}}
relationList.append(relation)
tableList = []
if len(relationList) > 0:
for relation in relationList:
if len(tableList) > 0:
hasSourceTable = False
hasTargetTable = False
for tab in tableList:
if tab['ssys_cd'] == relation['source']['ssys_cd'] and tab['mdl_name'] == \
relation['source']['mdl_name'] and tab['tab_eng_name'] == \
relation['source']['tab_eng_name']:
hasSourceTable = True
if tab['ssys_cd'] == relation['target']['ssys_cd'] and tab['mdl_name'] == \
relation['target']['mdl_name'] and tab['tab_eng_name'] == \
relation['target']['tab_eng_name']:
hasTargetTable = True
if not hasSourceTable:
tableList.append({"ssys_cd": relation['source']['ssys_cd'],
"mdl_name": relation['source']['mdl_name'],
"tab_eng_name": relation['source']['tab_eng_name']})
if not hasTargetTable:
tableList.append({"ssys_cd": relation['target']['ssys_cd'],
"mdl_name": relation['target']['mdl_name'],
"tab_eng_name": relation['target']['tab_eng_name']})
else:
tableList.append({"ssys_cd": relation['source']['ssys_cd'],
"mdl_name": relation['source']['mdl_name'],
"tab_eng_name": relation['source']['tab_eng_name']})
tableList.append({"ssys_cd": relation['target']['ssys_cd'],
"mdl_name": relation['target']['mdl_name'],
"tab_eng_name": relation['target']['tab_eng_name']})
if len(tableList) > 0:
for table in tableList:
query_object = MetaColObject()
query_object.ssys_cd = table['ssys_cd']
query_object.mdl_name = table['mdl_name']
query_object.tab_name = table['tab_eng_name']
meta_result = await MetaDao.get_meta_col_name_list(result_db, query_object)
result = CamelCaseUtil.transform_result(meta_result)
table['column'] = result
result = {
"tableList": tableList,
"relation": relationList
}
return result
@classmethod
async def getRelationByTable(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str,
tab_eng_name: str, rel_type: str):
if rel_type == 'op':
currentNodeList = await MetaDao.get_op_relation_by_table(result_db, ssys_cd, mdl_name, tab_eng_name)
return currentNodeList
if rel_type == 'er':
currentNodeList = await MetaDao.get_er_relation_by_table(result_db, ssys_cd, mdl_name, tab_eng_name)
return currentNodeList
return None
@classmethod
async def getRelationByColumn(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str,
tab_eng_name: str, fld_eng_name: str, rel_type: str, module: str):
col = {
'ssys_cd': ssys_cd,
'mdl_name': mdl_name,
'tab_eng_name': tab_eng_name,
'fld_eng_name': fld_eng_name
}
if rel_type == 'op':
currentNodeList = await MetaDao.get_op_relation_by_column(result_db, col, module)
return currentNodeList
if rel_type == 'er':
currentNodeList = await MetaDao.get_er_relation_by_column(result_db, col, module)
return currentNodeList
return None

4
vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue

@ -665,6 +665,10 @@ watch(
}
let g6 = document.getElementById("businessRelationG6")
const mini_container = document.getElementById("g6mini-container");
if (mini_container){
mini_container.innerHTML=''
}
if (g6){
g6.innerHTML=''
initG6()

31
vue-fastapi-frontend/src/views/meta/metaInfo/index.vue

@ -313,10 +313,10 @@
<div style="position: absolute;top:10px;left: 10px;z-index: 10">
<el-form>
<el-form-item label="关系选择:">
<el-select v-model="businessOptionSelect" style="width: 120px">
<el-option value="op" label="传递关系"></el-option>
<el-option value="er" label="ER关系"></el-option>
</el-select>
<el-radio-group v-model="businessOptionSelect" @change="changeBusinessOption">
<el-radio-button label="ER关系" value="er" />
<el-radio-button label="传递关系" value="op" />
</el-radio-group>
</el-form-item>
</el-form>
</div>
@ -629,16 +629,7 @@
function changeColumnTab(){
if (activeColumnTab.value === 'businessRelation'){
let data = {
ssysCd: currentMetaData.value.ssysCd,
mdlName: currentMetaData.value.mdlName,
tabEngName: currentMetaData.value.tabEngName,
type: businessOptionSelect.value
}
getMetaDataRelship(data).then(res=>{
console.log(res)
businessRelation.value = res.data
})
changeBusinessOption()
}
if (activeColumnTab.value === 'proc'){
procStr.value = "--基金量化产品监管报送存储过程:ADS.SP_ADS_SAC_QNTPRD_ALL\n" +
@ -646,6 +637,17 @@
}
}
function changeBusinessOption(){
let data = {
ssysCd: currentMetaData.value.ssysCd,
mdlName: currentMetaData.value.mdlName,
tabEngName: currentMetaData.value.tabEngName,
type: businessOptionSelect.value
}
getMetaDataRelship(data).then(res=>{
businessRelation.value = res.data
})
}
function confirmTableTags(){
currentMetaData.value.tags = JSON.parse(JSON.stringify(tableTags.value))
tableTagDialog.value = false
@ -941,6 +943,7 @@
}
}
})
activeColumnTab.value = 'column'
drawer.value = true
changedColumns.value = []
}

Loading…
Cancel
Save