|
@ -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 |
|
|