From 48baf0ee1c07c528ae33f01d0a791e2be8287a18 Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Tue, 12 Aug 2025 02:14:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=A0=87=E5=87=86=E5=9B=BE?= =?UTF-8?q?=E8=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/datastd_controller.py | 2 +- .../module_admin/dao/datastd_dao.py | 14 +- .../module_admin/service/datastd_service.py | 132 ++++++++++++++---- 3 files changed, 117 insertions(+), 31 deletions(-) diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index 5f46ec4..52dd0d8 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -801,7 +801,7 @@ async def get_code_map_list2( id: str, query_db: AsyncSession = Depends(get_db), ): - code_page_query_result = await DataStdService.get_code_map_list2(query_db, id) + code_page_query_result = await DataStdService.get_code_map_list2(request,query_db, id) logger.info('获取列配置列表成功') return ResponseUtil.success(data=code_page_query_result) # -----------------------------------------------------导入---------------------------------------------------------------------- diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 914812e..ff2ee7c 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -9,7 +9,7 @@ from sqlalchemy.orm import aliased from module_admin.entity.vo.data_ast_content_vo import DataCatalogPageQueryModel, DeleteDataCatalogModel,DataCatalogChild from datetime import datetime from module_admin.entity.do.approval_do import FlowApproval, FlowConfig - +from module_admin.entity.do.meta_do import MetadataFldSuppInfo class DataStdDao: @@ -470,6 +470,18 @@ class DataStdDao: ).scalars().all() return List @classmethod + async def get_meta_field_list_by_onum(cls, db: AsyncSession, onum: str): + + List = ( + await db.execute( + select(MetadataFldSuppInfo) + .where( + MetadataFldSuppInfo.data_dict_id == onum if onum else False + ) + ) + ).scalars().all() + return List + @classmethod async def update_std_dict(cls, db: AsyncSession, update_data: DataStdDictModel): await db.execute(update(DataStdDict), [update_data]) diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index 288a02b..1bf5d9c 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -22,6 +22,8 @@ from module_admin.service.config_service import ConfigService import requests import pandas as pd from config.env import AppConfig +from config.enums import RedisInitKeyConfig + class DataStdService: """ 数据源标准服务层 @@ -1551,42 +1553,114 @@ class DataStdService: "tableData": table_data, "children": children } + # @classmethod + # async def get_code_map_list2(cls, request: Request, query_db: AsyncSession, id: str): + + # check_model = DataStdDictModel() + # dataStdNo=await DataStdDao.get_std_main_by_id(query_db, id) + # cd_type=dataStdNo.src_sys + # check_model.data_std_no=dataStdNo.onum + # hasDict = await request.app.state.redis.get(f'{RedisInitKeyConfig.SYS_CONFIG.key}:sys.std.dict') + # # 字典 + # main_list = await DataStdDao.get_data_dict_list_by_info(query_db, check_model) + # # 元数据 + # meta_list = await DataStdDao.get_meta_field_list_by_onum(query_db, dataStdNo.onum) + + # if not main_list: + # return { "children": []} # 如果 A 表没有数据,返回空结构 + + # table_data = [] # 存储表格数据 + # children = [] # 存储图谱数据 + + # for main in main_list: + # # 组织图谱数据(A 表作为父节点) + # node = { + # "id": f"node_{main.onum}", # 使用 get() 方法访问字段 + # "name": main.data_dict_cn_name, # 使用 get() 方法访问字段 + # "label": main.data_dict_eng_name, # 使用 get() 方法访问字段 + # "rate": 1.0, + # "status": "B", + # # "currency": main.get('dataStdNo'), # 使用 get() 方法访问字段 + # "variableValue": "数据字典", + # "variableUp": True, + # "children": [], + # } + + + # children.append(node) + + # return { + # "tableData": table_data, + # "children": children + # } @classmethod - async def get_code_map_list2(cls, query_db: AsyncSession, id: str): + async def get_code_map_list2(cls, request: Request, query_db: AsyncSession, id: str): check_model = DataStdDictModel() - dataStdNo=await DataStdDao.get_std_main_by_id(query_db, id) - cd_type=dataStdNo.src_sys - check_model.data_std_no=dataStdNo.onum - main_list = await DataStdDao.get_data_dict_list_by_info(query_db, check_model) - - if not main_list: - return { "children": []} # 如果 A 表没有数据,返回空结构 - + dataStdNo = await DataStdDao.get_std_main_by_id(query_db, id) + cd_type = dataStdNo.src_sys + check_model.data_std_no = dataStdNo.onum + + # Redis 判断是否有字典层 + hasDict = await request.app.state.redis.get(f'{RedisInitKeyConfig.SYS_CONFIG.key}:sys.std.dict') + hasDict = hasDict.decode() if isinstance(hasDict, bytes) else hasDict + table_data = [] # 存储表格数据 - children = [] # 存储图谱数据 - - for main in main_list: - # 组织图谱数据(A 表作为父节点) - node = { - "id": f"node_{main.onum}", # 使用 get() 方法访问字段 - "name": main.data_dict_cn_name, # 使用 get() 方法访问字段 - "label": main.data_dict_eng_name, # 使用 get() 方法访问字段 - "rate": 1.0, - "status": "B", - # "currency": main.get('dataStdNo'), # 使用 get() 方法访问字段 - "variableValue": "数据字典", - "variableUp": True, - "children": [], - } - - - children.append(node) - + children = [] # 存储图谱数据 + + if hasDict == "是": + # 获取字典列表 + main_list = await DataStdDao.get_data_dict_list_by_info(query_db, check_model) + if not main_list: + return {"children": []} + + for main in main_list: + dict_node = { + "id": f"dict_{main.onum}", + "name": main.data_dict_cn_name, + "label": main.data_dict_eng_name, + "rate": 1.0, + "status": "B", + "variableValue": "数据字典", + "variableUp": True, + "children": [], + } + + # 获取该字典的元数据列表 + meta_list = await DataStdDao.get_meta_field_list_by_onum(query_db, main.onum) + for meta in meta_list: + meta_node = { + "id": f"meta_{meta.onum}", + "name": meta.fld_desc, + "label": meta.fld_eng_name+"("+meta.tab_eng_name+")", + "rate": 1.0, + "status": "Y", + "variableValue": "元数据", + "variableUp": False, + } + dict_node["children"].append(meta_node) + + children.append(dict_node) + + else: + # 获取标准直接挂载的元数据列表 + meta_list = await DataStdDao.get_meta_field_list_by_onum(query_db, dataStdNo.onum) + for meta in meta_list: + meta_node = { + "id": f"meta_{meta.onum}", + "name": meta.fld_desc, + "label": meta.fld_eng_name+"("+meta.tab_eng_name+")", + "rate": 1.0, + "status": "Y", + "variableValue": "元数据", + "variableUp": False, + } + children.append(meta_node) + return { "tableData": table_data, "children": children } - + @staticmethod async def get_main_import_template_services(): """