From a8b614e2afee4ad08ce6c04a310c133f38b92321 Mon Sep 17 00:00:00 2001 From: xueyinfei <1207092115@qq.com> Date: Wed, 30 Apr 2025 17:58:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=85=B3=E7=B3=BB=EF=BC=88?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue-fastapi-backend/.env.dev | 24 +- .../module_admin/dao/meta_dao.py | 104 +++- .../module_admin/service/meta_service.py | 481 ++++++++---------- .../views/meta/metaInfo/businssRelation.vue | 4 + .../src/views/meta/metaInfo/index.vue | 31 +- 5 files changed, 317 insertions(+), 327 deletions(-) diff --git a/vue-fastapi-backend/.env.dev b/vue-fastapi-backend/.env.dev index 54276fc..397641c 100644 --- a/vue-fastapi-backend/.env.dev +++ b/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 diff --git a/vue-fastapi-backend/module_admin/dao/meta_dao.py b/vue-fastapi-backend/module_admin/dao/meta_dao.py index 1a8d5dc..b6afa03 100644 --- a/vue-fastapi-backend/module_admin/dao/meta_dao.py +++ b/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 \ No newline at end of file + 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 diff --git a/vue-fastapi-backend/module_admin/service/meta_service.py b/vue-fastapi-backend/module_admin/service/meta_service.py index 5da8612..89f6f34 100644 --- a/vue-fastapi-backend/module_admin/service/meta_service.py +++ b/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 diff --git a/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue b/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue index 0d168d1..46d3c99 100644 --- a/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue +++ b/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() diff --git a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue index ef494ed..67ffd42 100644 --- a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue +++ b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue @@ -313,10 +313,10 @@