diff --git a/vue-fastapi-backend/module_admin/controller/meta_controller.py b/vue-fastapi-backend/module_admin/controller/meta_controller.py index 76709af..8538fa2 100644 --- a/vue-fastapi-backend/module_admin/controller/meta_controller.py +++ b/vue-fastapi-backend/module_admin/controller/meta_controller.py @@ -6,7 +6,7 @@ from module_admin.service.login_service import LoginService from utils.response_util import ResponseUtil from module_admin.service.meta_service import MetaService -from module_admin.entity.vo.meta_vo import MetaPageObject, MetaColObject, SuppleModel +from module_admin.entity.vo.meta_vo import MetaPageObject, MetaColObject, SuppleModel, MetaBusinessRelShipObject metaController = APIRouter(prefix='/dasset', dependencies=[Depends(LoginService.get_current_user)]) @@ -55,3 +55,11 @@ async def getTableByTableId(request: Request, query_db: AsyncSession = Depends(get_db)): result = await MetaService.get_table_by_id(query_db, tableId) return ResponseUtil.success(data=result) + + +@metaController.get("/meta/business/relation") +async def getBusinessRelationShip(request: Request, + meta_query: MetaBusinessRelShipObject = Depends(MetaBusinessRelShipObject.as_query), + query_db: AsyncSession = Depends(get_db)): + result = await MetaService.getBusinessRelationShip(query_db, meta_query) + return ResponseUtil.success(data=result) diff --git a/vue-fastapi-backend/module_admin/dao/meta_dao.py b/vue-fastapi-backend/module_admin/dao/meta_dao.py index 6bbf3e2..1a8d5dc 100644 --- a/vue-fastapi-backend/module_admin/dao/meta_dao.py +++ b/vue-fastapi-backend/module_admin/dao/meta_dao.py @@ -494,3 +494,95 @@ class MetaDao: )).first() return CamelCaseUtil.transform_result(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 " + "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 = 'sub_flag' and rela_value ='1') 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' " + "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_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_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 = 'sub_flag' and rela_value ='1') 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' " + "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 \ No newline at end of file diff --git a/vue-fastapi-backend/module_admin/entity/do/meta_do.py b/vue-fastapi-backend/module_admin/entity/do/meta_do.py index a2b39a1..5c0658f 100644 --- a/vue-fastapi-backend/module_admin/entity/do/meta_do.py +++ b/vue-fastapi-backend/module_admin/entity/do/meta_do.py @@ -185,3 +185,21 @@ class MetaBatchFldClas(Base): fld_eng_name = Column(String(200, collation='utf8_general_ci'), comment='字段英文名称') clas_onum = Column(String(200, collation='utf8_general_ci'), comment='标签序号') clas_value = Column(String(200, collation='utf8_general_ci'), comment='标签值') + + +# class MetaBatchFldRelation(Base): +# __tablename__ = 't_batch_fld_relation' +# a_ssys_cd = Column(String(50, collation='utf8_general_ci'), comment='a系统代码') +# a_data_whs_name = Column(String(50, collation='utf8_general_ci'), comment='a数据库名称') +# a_mdl_name = Column(String(50, collation='utf8_general_ci'), comment='a模式名称') +# a_tab_no = Column(Integer, comment='a表编号') +# a_tab_eng_name = Column(String(200, collation='utf8_general_ci'), comment='a表英文名称') +# a_fld_eng_name = Column(String(200, collation='utf8_general_ci'), comment='a字段英文名称') +# b_ssys_cd = Column(String(50, collation='utf8_general_ci'), comment='b源系统代码') +# b_data_whs_name = Column(String(50, collation='utf8_general_ci'), comment='b数据库名称') +# b_mdl_name = Column(String(50, collation='utf8_general_ci'), comment='b数据库名称') +# b_tab_no = Column(Integer, comment='b表编号') +# b_tab_eng_name = Column(String(200, collation='utf8_general_ci'), comment='b表英文名称') +# b_fld_eng_name = Column(String(200, collation='utf8_general_ci'), comment='b表英文名称') +# rela_type = Column(String(200, collation='utf8_general_ci'), comment='关系类型') +# rela_value = Column(String(200, collation='utf8_general_ci'), comment='关系值') diff --git a/vue-fastapi-backend/module_admin/entity/vo/meta_vo.py b/vue-fastapi-backend/module_admin/entity/vo/meta_vo.py index 88dfa5a..dfe312c 100644 --- a/vue-fastapi-backend/module_admin/entity/vo/meta_vo.py +++ b/vue-fastapi-backend/module_admin/entity/vo/meta_vo.py @@ -54,3 +54,12 @@ class SuppleModel(BaseModel): rec_stat: Optional[str] = None tab_clas: Optional[str] = None columnInfo: Optional[List[ColumnSuppleModel]] = None + + +@as_query +class MetaBusinessRelShipObject(BaseModel): + model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) + ssys_cd: Optional[str] + mdl_name: Optional[str] + tab_eng_name: Optional[str] + type: Optional[str] diff --git a/vue-fastapi-backend/module_admin/service/meta_service.py b/vue-fastapi-backend/module_admin/service/meta_service.py index 84b4162..5da8612 100644 --- a/vue-fastapi-backend/module_admin/service/meta_service.py +++ b/vue-fastapi-backend/module_admin/service/meta_service.py @@ -1,7 +1,7 @@ import json import uuid -from module_admin.entity.vo.meta_vo import MetaPageObject, MetaColObject, SuppleModel +from module_admin.entity.vo.meta_vo import MetaPageObject, MetaColObject, SuppleModel, MetaBusinessRelShipObject from module_admin.entity.do.meta_do import MetadataSuppInfo, MetadataFldSuppInfo, MetadataSuppInfoVett, \ MetadataFldSuppInfoVett, MetadataExtractInfo, MetadataFldTabExtractInfo from module_admin.dao.meta_dao import MetaDao @@ -207,3 +207,285 @@ class MetaService: column['batchColClas'] = CamelCaseUtil.transform_result(col_list) table['columnList'] = CamelCaseUtil.transform_result(columnList) return table + + @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 + return None diff --git a/vue-fastapi-frontend/src/api/meta/metaInfo.js b/vue-fastapi-frontend/src/api/meta/metaInfo.js index 9019030..0e2eca6 100644 --- a/vue-fastapi-frontend/src/api/meta/metaInfo.js +++ b/vue-fastapi-frontend/src/api/meta/metaInfo.js @@ -47,6 +47,13 @@ export function postMetaSupp(data){ data: data }) } +export function getMetaDataRelship(data){ + return request({ + url:'/default-api/dasset/meta/business/relation', + method: 'get', + params: data + }) +} diff --git a/vue-fastapi-frontend/src/views/dataAsset/assetDetail/index.vue b/vue-fastapi-frontend/src/views/dataAsset/assetDetail/index.vue index 15ee86f..f26fe54 100644 --- a/vue-fastapi-frontend/src/views/dataAsset/assetDetail/index.vue +++ b/vue-fastapi-frontend/src/views/dataAsset/assetDetail/index.vue @@ -301,7 +301,7 @@ const handleDelete = (row) => { } const handleExport = () => { - proxy.download("/system/dataAsset/export", { + proxy.download("/default-api/system/dataAsset/export", { ...queryParams.value, }, `dataAsset_${new Date().getTime()}.xlsx`); } diff --git a/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue b/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue new file mode 100644 index 0000000..0d168d1 --- /dev/null +++ b/vue-fastapi-frontend/src/views/meta/metaInfo/businssRelation.vue @@ -0,0 +1,691 @@ + + + + \ No newline at end of file diff --git a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue index c32b63a..ef494ed 100644 --- a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue +++ b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue @@ -308,7 +308,23 @@ - 业务关系 + +
+
+ + + + + + + + +
+
+ +
+
+
血缘关系 @@ -540,10 +556,11 @@