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

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

@ -494,6 +494,29 @@ class MetaDao:
)).first() )).first()
return CamelCaseUtil.transform_result(result) 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 @classmethod
async def get_er_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str): 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 " 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)" "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))") " 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, 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() # 返回列名列表 columns = result.keys() # 返回列名列表
@ -524,33 +547,33 @@ class MetaDao:
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()] result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict return result_as_dict
@classmethod @classmethod
async def get_meta_col_name_list(cls, db: AsyncSession, query_object: MetaColObject): async def get_op_relation_by_table(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str, tab_eng_name: str):
query_result = ( 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 "
await db.execute( ",b_tab_eng_name,b_fld_eng_name from t_batch_fld_relation where rela_type = 'op2_relation' "
select( "and rela_value <> '[]') a1 left join t_batch_fld_relation a2 on a1.a_ssys_cd = a2.a_ssys_cd "
MetadataFldTabExtractInfo.ssys_cd, " and a1.a_mdl_name = a2.a_mdl_name and a1.a_tab_eng_name = a2.a_tab_eng_name and "
MetadataFldTabExtractInfo.mdl_name, "a1.a_fld_eng_name = a2.a_fld_eng_name and a1.b_ssys_cd = a2.b_ssys_cd "
MetadataFldTabExtractInfo.tab_eng_name, "and a1.b_mdl_name = a2.b_mdl_name and a1.b_tab_eng_name = a2.b_tab_eng_name "
MetadataFldTabExtractInfo.fld_eng_name, "and a1.b_fld_eng_name = a2.b_fld_eng_name and a2.rela_type = 'set_flag' and a2.rela_value <> 0 "
MetadataFldTabExtractInfo.fld_cn_name, "where ((a1.a_ssys_cd,a1.a_mdl_name,a1.a_tab_eng_name,a1.a_fld_eng_name) in "
MetadataFldTabExtractInfo.fld_type, "(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas) "
MetadataFldTabExtractInfo.pk_flag, "or (a1.b_ssys_cd,a1.b_mdl_name,a1.b_tab_eng_name,a1.b_fld_eng_name) in "
).where( "(select ssys_cd,mdl_name,tab_eng_name,clas_value from t_batch_tab_clas)) "
MetadataFldTabExtractInfo.ssys_cd == query_object.ssys_cd, "and ((a1.a_ssys_cd = :sysCode and a1.a_mdl_name = :mdlName and a1.a_tab_eng_name = :tabName) "
MetadataFldTabExtractInfo.mdl_name == query_object.mdl_name, " or (a1.b_ssys_cd = :sysCode and a1.b_mdl_name = :mdlName and a1.b_tab_eng_name = :tabName))")
MetadataFldTabExtractInfo.tab_eng_name == query_object.tab_name result = (await result_db.execute(sql, {"sysCode": ssys_cd,
).distinct() "mdlName": mdl_name, "tabName": tab_eng_name}))
) # 获取列名
).all() columns = result.keys() # 返回列名列表
)
return [row._asdict() for row in query_result]
# 将结果转换为字典列表
result_as_dict = [dict(zip(columns, row)) for row in result.fetchall()]
return result_as_dict
@classmethod @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 " 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," "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 " "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()] 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 @classmethod
async def getBusinessRelationShip(cls, result_db: AsyncSession, meta_query: MetaBusinessRelShipObject): async def getBusinessRelationShip(cls, result_db: AsyncSession, meta_query: MetaBusinessRelShipObject):
if meta_query.type == 'op': currentNodeList = await cls.getRelationByTable(result_db, meta_query.ssys_cd, meta_query.mdl_name,
# 传递关系 meta_query.tab_eng_name, meta_query.type)
currentNodeList = None relationList = []
if meta_query.type == 'er': if currentNodeList is not None and len(currentNodeList) > 0:
# er关系 for currentNode in currentNodeList:
currentNodeList = await MetaDao.get_er_relation_by_table(result_db, meta_query.ssys_cd, meta_query.mdl_name, relation = {"source": {"ssys_cd": currentNode['a_ssys_cd'],
meta_query.tab_eng_name) "mdl_name": currentNode['a_mdl_name'],
tableList = [] "tab_eng_name": currentNode['a_tab_eng_name'],
preTableList = [] "fld_eng_name": currentNode['a_fld_eng_name']},
nextTableList = [] "target": {'ssys_cd': currentNode['b_ssys_cd'],
relationList = [] 'mdl_name': currentNode['b_mdl_name'],
if currentNodeList is not None and len(currentNodeList) > 0: 'tab_eng_name': currentNode['b_tab_eng_name'],
for currentNode in currentNodeList: 'fld_eng_name': currentNode['b_fld_eng_name']}} if \
if len(tableList) > 0: currentNode['father'] == 'A' else {
hasATable = False "source": {'ssys_cd': currentNode['b_ssys_cd'],
hasBTable = False 'mdl_name': currentNode['b_mdl_name'],
for tab in tableList: 'tab_eng_name': currentNode['b_tab_eng_name'],
if tab['ssys_cd'] == currentNode['a_ssys_cd'] and tab['mdl_name'] == \ 'fld_eng_name': currentNode['b_fld_eng_name']},
currentNode['a_mdl_name'] and tab['tab_eng_name'] == currentNode['a_tab_eng_name']: "target": {"ssys_cd": currentNode['a_ssys_cd'],
hasATable = True "mdl_name": currentNode['a_mdl_name'],
if tab['ssys_cd'] == currentNode['b_ssys_cd'] and tab['mdl_name'] == \ "tab_eng_name": currentNode['a_tab_eng_name'],
currentNode['b_mdl_name'] and tab['tab_eng_name'] == currentNode['b_tab_eng_name']: "fld_eng_name": currentNode['a_fld_eng_name']}}
hasBTable = True relationList.append(relation)
if not hasATable: if currentNode['a_tab_eng_name'] == meta_query.tab_eng_name:
tableList.append({"ssys_cd": currentNode['a_ssys_cd'], if currentNode['father'] == 'A':
"mdl_name": currentNode['a_mdl_name'], # b为下游,取b字段的下下游
"tab_eng_name": currentNode['a_tab_eng_name']}) nextNodeList =(await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'],
if not hasBTable: currentNode['b_mdl_name'],
tableList.append({"ssys_cd": currentNode['b_ssys_cd'], currentNode['b_tab_eng_name'],
"mdl_name": currentNode['b_mdl_name'], currentNode['b_fld_eng_name'],
"tab_eng_name": currentNode['b_tab_eng_name']}) meta_query.type,
else: 'next') )
tableList.append({"ssys_cd": currentNode['a_ssys_cd'], if nextNodeList and len(nextNodeList) > 0:
"mdl_name": currentNode['a_mdl_name'], for nextNode in nextNodeList:
"tab_eng_name": currentNode['a_tab_eng_name']}) relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'],
tableList.append({"ssys_cd": currentNode['b_ssys_cd'], "mdl_name": nextNode['a_mdl_name'],
"mdl_name": currentNode['b_mdl_name'], "tab_eng_name": nextNode['a_tab_eng_name'],
"tab_eng_name": currentNode['b_tab_eng_name']}) "fld_eng_name": nextNode['a_fld_eng_name']},
if currentNode['a_tab_eng_name'] == meta_query.tab_eng_name: "target": {'ssys_cd': nextNode['b_ssys_cd'],
if currentNode['father'] == 'A': 'mdl_name': nextNode['b_mdl_name'],
# b为下游 'tab_eng_name': nextNode['b_tab_eng_name'],
hasTable = False 'fld_eng_name': nextNode['b_fld_eng_name']}} if nextNode[
for table in nextTableList: 'father'] == 'A' else {
if table['tab_eng_name'] == currentNode['b_tab_eng_name']: "source": {'ssys_cd': nextNode['b_ssys_cd'],
table['column'].append({'ssys_cd': currentNode['b_ssys_cd'], 'mdl_name': nextNode['b_mdl_name'],
'mdl_name': currentNode['b_mdl_name'], 'tab_eng_name': nextNode['b_tab_eng_name'],
'tab_eng_name': currentNode['b_tab_eng_name'], 'fld_eng_name': nextNode['b_fld_eng_name']},
'fld_eng_name': currentNode['b_fld_eng_name']}) "target": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'],
relationList.append({"source": {"ssys_cd": currentNode['a_ssys_cd'], "tab_eng_name": nextNode['a_tab_eng_name'],
"mdl_name": currentNode['a_mdl_name'], "fld_eng_name": nextNode['a_fld_eng_name']}}
"tab_eng_name": currentNode['a_tab_eng_name'], relationList.append(relation)
"fld_eng_name": currentNode['a_fld_eng_name']}, if currentNode['father'] == 'B':
"target": {'ssys_cd': currentNode['b_ssys_cd'], # b为上游, 取b字段的上上游
'mdl_name': currentNode['b_mdl_name'], preNodeList = await cls.getRelationByColumn(result_db, currentNode['b_ssys_cd'],
'tab_eng_name': currentNode['b_tab_eng_name'], currentNode['b_mdl_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}}) currentNode['b_tab_eng_name'],
hasTable = True currentNode['b_fld_eng_name'],
break meta_query.type,
if not hasTable: 'pre')
nextTableList.append({'ssys_cd': currentNode['b_ssys_cd'], if preNodeList and len(preNodeList) > 0:
'mdl_name': currentNode['b_mdl_name'], for preNode in preNodeList:
'tab_eng_name': currentNode['b_tab_eng_name'], relation = {"source": {"ssys_cd": preNode['a_ssys_cd'],
'column': [{'ssys_cd': currentNode['b_ssys_cd'], "mdl_name": preNode['a_mdl_name'],
'mdl_name': currentNode['b_mdl_name'], "tab_eng_name": preNode['a_tab_eng_name'],
'tab_eng_name': currentNode['b_tab_eng_name'], "fld_eng_name": preNode['a_fld_eng_name']},
'fld_eng_name': currentNode['b_fld_eng_name']}]}) "target": {'ssys_cd': preNode['b_ssys_cd'],
relationList.append({"source": {"ssys_cd": currentNode['a_ssys_cd'], 'mdl_name': preNode['b_mdl_name'],
"mdl_name": currentNode['a_mdl_name'], 'tab_eng_name': preNode['b_tab_eng_name'],
"tab_eng_name": currentNode['a_tab_eng_name'], 'fld_eng_name': preNode['b_fld_eng_name']}} if preNode[
"fld_eng_name": currentNode['a_fld_eng_name']}, 'father'] == 'A' else {
"target": {'ssys_cd': currentNode['b_ssys_cd'], "source": {'ssys_cd': preNode['b_ssys_cd'],
'mdl_name': currentNode['b_mdl_name'], 'mdl_name': preNode['b_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'], 'tab_eng_name': preNode['b_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}}) 'fld_eng_name': preNode['b_fld_eng_name']},
if currentNode['father'] == 'B': "target": {"ssys_cd": preNode['a_ssys_cd'], "mdl_name": preNode['a_mdl_name'],
# b为上游 "tab_eng_name": preNode['a_tab_eng_name'],
hasTable = False "fld_eng_name": preNode['a_fld_eng_name']}}
for table in preTableList: relationList.append(relation)
if table['tab_eng_name'] == currentNode['b_tab_eng_name']: if currentNode['b_tab_eng_name'] == meta_query.tab_eng_name:
table['column'].append({'ssys_cd': currentNode['b_ssys_cd'], if currentNode['father'] == 'A':
'mdl_name': currentNode['b_mdl_name'], # a 为上游,取a字段的上上游
'tab_eng_name': currentNode['b_tab_eng_name'], preNodeList = await cls.getRelationByColumn(result_db, currentNode['a_ssys_cd'],
'fld_eng_name': currentNode['b_fld_eng_name']}) currentNode['a_mdl_name'],
relationList.append({"source": {'ssys_cd': currentNode['b_ssys_cd'], currentNode['a_tab_eng_name'],
'mdl_name': currentNode['b_mdl_name'], currentNode['a_fld_eng_name'],
'tab_eng_name': currentNode['b_tab_eng_name'], meta_query.type,
'fld_eng_name': currentNode['b_fld_eng_name']}, 'pre')
"target": {"ssys_cd": currentNode['a_ssys_cd'], if preNodeList and len(preNodeList) > 0:
"mdl_name": currentNode['a_mdl_name'], for preNode in preNodeList:
"tab_eng_name": currentNode['a_tab_eng_name'], relation = {"source": {"ssys_cd": preNode['a_ssys_cd'],
"fld_eng_name": currentNode['a_fld_eng_name']}}) "mdl_name": preNode['a_mdl_name'],
hasTable = True "tab_eng_name": preNode['a_tab_eng_name'],
break "fld_eng_name": preNode['a_fld_eng_name']},
if not hasTable: "target": {'ssys_cd': preNode['b_ssys_cd'],
preTableList.append({'ssys_cd': currentNode['b_ssys_cd'], 'mdl_name': preNode['b_mdl_name'],
'mdl_name': currentNode['b_mdl_name'], 'tab_eng_name': preNode['b_tab_eng_name'],
'tab_eng_name': currentNode['b_tab_eng_name'], 'fld_eng_name': preNode['b_fld_eng_name']}} if \
'column': [{'ssys_cd': currentNode['b_ssys_cd'], preNode['father'] == 'A' else {
'mdl_name': currentNode['b_mdl_name'], "source": {'ssys_cd': preNode['b_ssys_cd'],
'tab_eng_name': currentNode['b_tab_eng_name'], 'mdl_name': preNode['b_mdl_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}]}) 'tab_eng_name': preNode['b_tab_eng_name'],
relationList.append({"source": {'ssys_cd': currentNode['b_ssys_cd'], 'fld_eng_name': preNode['b_fld_eng_name']},
'mdl_name': currentNode['b_mdl_name'], "target": {"ssys_cd": preNode['a_ssys_cd'], "mdl_name": preNode['a_mdl_name'],
'tab_eng_name': currentNode['b_tab_eng_name'], "tab_eng_name": preNode['a_tab_eng_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}, "fld_eng_name": preNode['a_fld_eng_name']}}
"target": {"ssys_cd": currentNode['a_ssys_cd'], relationList.append(relation)
"mdl_name": currentNode['a_mdl_name'], if currentNode['father'] == 'B':
"tab_eng_name": currentNode['a_tab_eng_name'], # a 为下游,取a字段的下下游
"fld_eng_name": currentNode['a_fld_eng_name']}}) nextNodeList = await cls.getRelationByColumn(result_db, currentNode['a_ssys_cd'],
if currentNode['b_tab_eng_name'] == meta_query.tab_eng_name: currentNode['a_mdl_name'],
if currentNode['father'] == 'A': currentNode['a_tab_eng_name'],
# a 为上游 currentNode['a_fld_eng_name'],
hasTable = False meta_query.type,
for table in preTableList: 'next')
if table['tab_eng_name'] == currentNode['a_tab_eng_name']: for nextNode in nextNodeList:
table['column'].append({'ssys_cd': currentNode['a_ssys_cd'], relation = {"source": {"ssys_cd": nextNode['a_ssys_cd'],
'mdl_name': currentNode['a_mdl_name'], "mdl_name": nextNode['a_mdl_name'],
'tab_eng_name': currentNode['a_tab_eng_name'], "tab_eng_name": nextNode['a_tab_eng_name'],
'fld_eng_name': currentNode['a_fld_eng_name']}) "fld_eng_name": nextNode['a_fld_eng_name']},
relationList.append({"source": {"ssys_cd": currentNode['a_ssys_cd'], "target": {'ssys_cd': nextNode['b_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'], 'mdl_name': nextNode['b_mdl_name'],
"tab_eng_name": currentNode['a_tab_eng_name'], 'tab_eng_name': nextNode['b_tab_eng_name'],
"fld_eng_name": currentNode['a_fld_eng_name']}, 'fld_eng_name': nextNode['b_fld_eng_name']}} if \
"target": {'ssys_cd': currentNode['b_ssys_cd'], nextNode['father'] == 'A' else {
'mdl_name': currentNode['b_mdl_name'], "source": {'ssys_cd': nextNode['b_ssys_cd'],
'tab_eng_name': currentNode['b_tab_eng_name'], 'mdl_name': nextNode['b_mdl_name'],
'fld_eng_name': currentNode['b_fld_eng_name']}}) 'tab_eng_name': nextNode['b_tab_eng_name'],
hasTable = True 'fld_eng_name': nextNode['b_fld_eng_name']},
break "target": {"ssys_cd": nextNode['a_ssys_cd'], "mdl_name": nextNode['a_mdl_name'],
if not hasTable: "tab_eng_name": nextNode['a_tab_eng_name'],
preTableList.append({'ssys_cd': currentNode['a_ssys_cd'], "fld_eng_name": nextNode['a_fld_eng_name']}}
'mdl_name': currentNode['a_mdl_name'], relationList.append(relation)
'tab_eng_name': currentNode['a_tab_eng_name'], tableList = []
'column': [{'ssys_cd': currentNode['a_ssys_cd'], if len(relationList) > 0:
'mdl_name': currentNode['a_mdl_name'], for relation in relationList:
'tab_eng_name': currentNode['a_tab_eng_name'], if len(tableList) > 0:
'fld_eng_name': currentNode['a_fld_eng_name']}]}) hasSourceTable = False
relationList.append({"source": {"ssys_cd": currentNode['a_ssys_cd'], hasTargetTable = False
"mdl_name": currentNode['a_mdl_name'], for tab in tableList:
"tab_eng_name": currentNode['a_tab_eng_name'], if tab['ssys_cd'] == relation['source']['ssys_cd'] and tab['mdl_name'] == \
"fld_eng_name": currentNode['a_fld_eng_name']}, relation['source']['mdl_name'] and tab['tab_eng_name'] == \
"target": {'ssys_cd': currentNode['b_ssys_cd'], relation['source']['tab_eng_name']:
'mdl_name': currentNode['b_mdl_name'], hasSourceTable = True
'tab_eng_name': currentNode['b_tab_eng_name'], if tab['ssys_cd'] == relation['target']['ssys_cd'] and tab['mdl_name'] == \
'fld_eng_name': currentNode['b_fld_eng_name']}}) relation['target']['mdl_name'] and tab['tab_eng_name'] == \
if currentNode['father'] == 'B': relation['target']['tab_eng_name']:
# a 为下游 hasTargetTable = True
hasTable = False if not hasSourceTable:
for table in nextTableList: tableList.append({"ssys_cd": relation['source']['ssys_cd'],
if table['tab_eng_name'] == currentNode['a_tab_eng_name']: "mdl_name": relation['source']['mdl_name'],
table['column'].append({'ssys_cd': currentNode['a_ssys_cd'], "tab_eng_name": relation['source']['tab_eng_name']})
'mdl_name': currentNode['a_mdl_name'], if not hasTargetTable:
'tab_eng_name': currentNode['a_tab_eng_name'], tableList.append({"ssys_cd": relation['target']['ssys_cd'],
'fld_eng_name': currentNode['a_fld_eng_name']}) "mdl_name": relation['target']['mdl_name'],
relationList.append({"source": {'ssys_cd': currentNode['b_ssys_cd'], "tab_eng_name": relation['target']['tab_eng_name']})
'mdl_name': currentNode['b_mdl_name'], else:
'tab_eng_name': currentNode['b_tab_eng_name'], tableList.append({"ssys_cd": relation['source']['ssys_cd'],
'fld_eng_name': currentNode['b_fld_eng_name']}, "mdl_name": relation['source']['mdl_name'],
"target": {"ssys_cd": currentNode['a_ssys_cd'], "tab_eng_name": relation['source']['tab_eng_name']})
"mdl_name": currentNode['a_mdl_name'], tableList.append({"ssys_cd": relation['target']['ssys_cd'],
"tab_eng_name": currentNode['a_tab_eng_name'], "mdl_name": relation['target']['mdl_name'],
"fld_eng_name": currentNode['a_fld_eng_name']}}) "tab_eng_name": relation['target']['tab_eng_name']})
hasTable = True if len(tableList) > 0:
break for table in tableList:
if not hasTable: query_object = MetaColObject()
nextTableList.append({'ssys_cd': currentNode['a_ssys_cd'], query_object.ssys_cd = table['ssys_cd']
'mdl_name': currentNode['a_mdl_name'], query_object.mdl_name = table['mdl_name']
'tab_eng_name': currentNode['a_tab_eng_name'], query_object.tab_name = table['tab_eng_name']
'column': [{'ssys_cd': currentNode['a_ssys_cd'], meta_result = await MetaDao.get_meta_col_name_list(result_db, query_object)
'mdl_name': currentNode['a_mdl_name'], result = CamelCaseUtil.transform_result(meta_result)
'tab_eng_name': currentNode['a_tab_eng_name'], table['column'] = result
'fld_eng_name': currentNode['a_fld_eng_name']}]}) result = {
relationList.append({"source": {'ssys_cd': currentNode['b_ssys_cd'], "tableList": tableList,
'mdl_name': currentNode['b_mdl_name'], "relation": relationList
'tab_eng_name': currentNode['b_tab_eng_name'], }
'fld_eng_name': currentNode['b_fld_eng_name']}, return result
"target": {"ssys_cd": currentNode['a_ssys_cd'],
"mdl_name": currentNode['a_mdl_name'], @classmethod
"tab_eng_name": currentNode['a_tab_eng_name'], async def getRelationByTable(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str,
"fld_eng_name": currentNode['a_fld_eng_name']}}) tab_eng_name: str, rel_type: str):
if len(preTableList) > 0: if rel_type == 'op':
for preTable in preTableList: currentNodeList = await MetaDao.get_op_relation_by_table(result_db, ssys_cd, mdl_name, tab_eng_name)
for column in preTable['column']: return currentNodeList
firstNodeList = await MetaDao.get_er_relation_by_column(result_db, column, "pre") # 取上游 if rel_type == 'er':
for node in firstNodeList: currentNodeList = await MetaDao.get_er_relation_by_table(result_db, ssys_cd, mdl_name, tab_eng_name)
if node['a_fld_eng_name'] == column['fld_eng_name']: return currentNodeList
# a为下游,取b上游 return None
existTable = False
for tab in tableList: @classmethod
if tab['ssys_cd'] == node['b_ssys_cd'] and tab['mdl_name'] == \ async def getRelationByColumn(cls, result_db: AsyncSession, ssys_cd: str, mdl_name: str,
node['b_mdl_name'] and tab['tab_eng_name'] == node['b_tab_eng_name']: tab_eng_name: str, fld_eng_name: str, rel_type: str, module: str):
existTable = True col = {
if not existTable: 'ssys_cd': ssys_cd,
tableList.append({"ssys_cd": node['b_ssys_cd'], 'mdl_name': mdl_name,
"mdl_name": node['b_mdl_name'], 'tab_eng_name': tab_eng_name,
"tab_eng_name": node['b_tab_eng_name']}) 'fld_eng_name': fld_eng_name
relationList.append({"source": {'ssys_cd': node['b_ssys_cd'], }
'mdl_name': node['b_mdl_name'], if rel_type == 'op':
'tab_eng_name': node['b_tab_eng_name'], currentNodeList = await MetaDao.get_op_relation_by_column(result_db, col, module)
'fld_eng_name': node['b_fld_eng_name']}, return currentNodeList
"target": {"ssys_cd": node['a_ssys_cd'], if rel_type == 'er':
"mdl_name": node['a_mdl_name'], currentNodeList = await MetaDao.get_er_relation_by_column(result_db, col, module)
"tab_eng_name": node['a_tab_eng_name'], return currentNodeList
"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
return None return None

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

@ -665,6 +665,10 @@ watch(
} }
let g6 = document.getElementById("businessRelationG6") let g6 = document.getElementById("businessRelationG6")
const mini_container = document.getElementById("g6mini-container");
if (mini_container){
mini_container.innerHTML=''
}
if (g6){ if (g6){
g6.innerHTML='' g6.innerHTML=''
initG6() 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"> <div style="position: absolute;top:10px;left: 10px;z-index: 10">
<el-form> <el-form>
<el-form-item label="关系选择:"> <el-form-item label="关系选择:">
<el-select v-model="businessOptionSelect" style="width: 120px"> <el-radio-group v-model="businessOptionSelect" @change="changeBusinessOption">
<el-option value="op" label="传递关系"></el-option> <el-radio-button label="ER关系" value="er" />
<el-option value="er" label="ER关系"></el-option> <el-radio-button label="传递关系" value="op" />
</el-select> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -629,16 +629,7 @@
function changeColumnTab(){ function changeColumnTab(){
if (activeColumnTab.value === 'businessRelation'){ if (activeColumnTab.value === 'businessRelation'){
let data = { changeBusinessOption()
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
})
} }
if (activeColumnTab.value === 'proc'){ if (activeColumnTab.value === 'proc'){
procStr.value = "--基金量化产品监管报送存储过程:ADS.SP_ADS_SAC_QNTPRD_ALL\n" + 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(){ function confirmTableTags(){
currentMetaData.value.tags = JSON.parse(JSON.stringify(tableTags.value)) currentMetaData.value.tags = JSON.parse(JSON.stringify(tableTags.value))
tableTagDialog.value = false tableTagDialog.value = false
@ -941,6 +943,7 @@
} }
} }
}) })
activeColumnTab.value = 'column'
drawer.value = true drawer.value = true
changedColumns.value = [] changedColumns.value = []
} }

Loading…
Cancel
Save