From 616b5204a275364091bb182ad2ee46b3ed082292 Mon Sep 17 00:00:00 2001 From: "si@aidatagov.com" Date: Wed, 2 Jul 2025 01:45:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/metadata_config_controller.py | 76 +++- .../module_admin/dao/metadata_config_dao.py | 75 +++- .../entity/vo/metadata_config_vo.py | 4 + .../service/metadata_config_service.py | 122 +++++- .../api/taskMetadataConfig/metadataConfig.js | 63 ++++ .../metadataConfig/taskBizConfig/index.vue | 352 ++++++++++++++++++ 6 files changed, 682 insertions(+), 10 deletions(-) create mode 100644 vue-fastapi-frontend/src/api/taskMetadataConfig/metadataConfig.js create mode 100644 vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue diff --git a/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py b/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py index 79cc857..1f4beb5 100644 --- a/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py +++ b/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py @@ -10,9 +10,9 @@ from module_admin.entity.vo.metadata_config_vo import ( SecuBizConfigModel, SecuBizConfigPageQueryModel, SecuBizConfigQueryModel, + SecuBizConfigAddModel, SecuBizPermiConfigModel, SecuBizPermiConfigBatchModel, - SecuBizConfigAddModel, SecuBizPermiConfigPageQueryModel, BatchBusiLabelConfigModel, BatchDataopLabelConfigModel, @@ -23,6 +23,10 @@ from module_admin.entity.vo.metadata_config_vo import ( BatchDatatypeLabelConfigPageQueryModel, DatasecConfigPageQueryModel, DatasecConfigModel, + TaskBizConfigModel, + TaskBizConfigPageQueryModel, + TaskBizConfigQueryModel, + TaskBizConfigAddModel, ) from module_admin.service.metadata_config_service import MetadataConfigService from module_admin.service.batch_label_config_service import BatchLabelConfigService @@ -593,7 +597,7 @@ async def DS_meta_metatask_detail( return ResponseUtil.success(data=edit_config_result) @metadataConfigController.delete('/DS') -async def DS_meta_metatask( +async def DS_meta_metatask_delete( request: Request, process: ParmScheduleVo, query_db: AsyncSession = Depends(get_db), @@ -602,4 +606,70 @@ async def DS_meta_metatask( edit_config_result = await DatasecConfigService.ds_metatask_delete(request, query_db, process,current_user) - return ResponseUtil.success(msg=edit_config_result) \ No newline at end of file + return ResponseUtil.success(msg=edit_config_result) +# ----------元数据标签调度任务 ---------- + +@metadataConfigController.get('/taskBizConfig/list', response_model=PageResponseModel) +async def get_task_biz_config_list( + request: Request, + query: TaskBizConfigQueryModel = Depends(TaskBizConfigPageQueryModel.as_query), + db: AsyncSession = Depends(get_db), +): + result = await MetadataConfigService.get_task_biz_config_list_services(db, query, is_page=True) + return ResponseUtil.success(model_content=result) + + +@metadataConfigController.get('/taskBizConfig/listall') +async def get_task_biz_config_list_all( + request: Request, + query: TaskBizConfigQueryModel = Depends(TaskBizConfigPageQueryModel.as_query), + db: AsyncSession = Depends(get_db), +): + result = await MetadataConfigService.get_task_biz_config_list_services(db, query, is_page=False) + return ResponseUtil.success(data=result) + + +@metadataConfigController.post('/taskBizConfig/add') +@ValidateFields(['bizModule', 'configType', 'data_sec_lvl', 'applyType']) +async def add_task_biz_config( + item: TaskBizConfigAddModel, + db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), +): + item.create_by = current_user.user.user_name + item.create_time = datetime.now() + result = await MetadataConfigService.add_task_biz_config_services(db, item) + return ResponseUtil.success(msg=result.message) + + +@metadataConfigController.post('/taskBizConfig/edit') +@ValidateFields(['onum']) +async def edit_task_biz_config( + item: TaskBizConfigAddModel, + db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), +): + item.update_by = current_user.user.user_name + item.update_time = datetime.now() + result = await MetadataConfigService.edit_task_biz_config_services(db, item) + return ResponseUtil.success(msg=result.message) + + +@metadataConfigController.delete('/taskBizConfig/delete') +async def delete_task_biz_config(onums: str, db: AsyncSession = Depends(get_db)): + result = await MetadataConfigService.delete_task_biz_config_services(db, onums) + return ResponseUtil.success(msg=result.message) + + +@metadataConfigController.get('/taskBizConfig/detail') +async def get_task_biz_config_detail(onum: str, db: AsyncSession = Depends(get_db)): + data = await MetadataConfigService.get_task_biz_config_detail_services(db, onum) + return ResponseUtil.success(data=data) +@metadataConfigController.get('/taskBizConfigRela/list/{bizOnum}') +async def get_task_biz_rela_config_list( + bizOnum: int, + query_db: AsyncSession = Depends(get_db), +): + ai_chat_list_result = await MetadataConfigService.get_task_biz_config_rela_list_services(query_db, bizOnum) + logger.info('获取成功') + return ResponseUtil.success(data=ai_chat_list_result) \ No newline at end of file diff --git a/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py b/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py index 0c54e67..4eeba6b 100644 --- a/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py +++ b/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py @@ -2,7 +2,9 @@ from datetime import datetime, time from sqlalchemy import delete, select, update,and_ from sqlalchemy.ext.asyncio import AsyncSession from module_admin.entity.do.meta_do import MetadataClas,MetadataExtractInfo # ORM 类 -from module_admin.entity.do.metadata_config_do import MetadataSec,SecuBizConfig,SecuBizPermiConfig,SecuBizConfigRela,DatasecConfig # ORM 类 +from module_admin.entity.do.metadata_config_do import MetadataSec,SecuBizConfig,SecuBizPermiConfig,SecuBizConfigRela,DatasecConfig ,\ +TaskBizConfigRela,TaskBizConfig +# ORM 类 from typing import List from sqlalchemy.orm import joinedload @@ -249,6 +251,9 @@ class MetadataConfigDao: async def delete_biz_rela_dao(cls, db: AsyncSession, biz_onum: int): await db.execute(delete(SecuBizConfigRela).where(SecuBizConfigRela.biz_onum == biz_onum) ) @classmethod + async def delete_biz_rela_batch(cls, db: AsyncSession, bonum_list: list[int]): + await db.execute(delete(SecuBizConfigRela).where(SecuBizConfigRela.biz_onum.in_(bonum_list)) ) + @classmethod async def add_batch_biz_rela_dao(cls, db: AsyncSession, rela_list: List[SecuBizConfigRela]): db.add_all(rela_list) await db.flush() @@ -310,4 +315,70 @@ class MetadataConfigDao: """ 批量删除任务配置 """ - await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_(onum_list))) \ No newline at end of file + await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_(onum_list))) +# ----------------------------------元数据标签调度------------------------------ + @classmethod + async def get_task_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False): + query = select(TaskBizConfig).where( + TaskBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True, + TaskBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True, + TaskBizConfig.create_time.between( + datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time.min), + datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time.max) + ) if query_object.begin_time and query_object.end_time else True, + ).order_by(TaskBizConfig.create_time.desc()) + + return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) + + @classmethod + async def add_task_biz_config(cls, db: AsyncSession, obj): + db_obj = TaskBizConfig(**obj.model_dump()) + db.add(db_obj) + await db.flush() + return db_obj + + @classmethod + async def edit_task_biz_config(cls, db: AsyncSession, onum: int, update_data: dict): + await db.execute( + update(TaskBizConfig).where(TaskBizConfig.onum == onum).values(**update_data) + ) + + @classmethod + async def delete_task_biz_config(cls, db: AsyncSession, onum_list: List[int]): + await db.execute( + delete(TaskBizConfig).where(TaskBizConfig.onum.in_(onum_list)) + ) + + @classmethod + async def get_task_biz_config_detail_by_id(cls, db: AsyncSession, onum: int): + result = await db.execute( + select(TaskBizConfig).where(TaskBizConfig.onum == onum) + ) + return result.scalars().first() + + # ✅ 使用 TaskBizConfigRela 替代原来的 SecuBizConfigRela + @classmethod + async def delete_task_rela_dao(cls, db: AsyncSession, biz_onum: int): + await db.execute( + delete(TaskBizConfigRela).where(TaskBizConfigRela.biz_onum == biz_onum) + ) + + @classmethod + async def delete_task_rela_batch(cls, db: AsyncSession, bonum_list: List[int]): + await db.execute( + delete(TaskBizConfigRela).where(TaskBizConfigRela.biz_onum.in_(bonum_list)) + ) + + @classmethod + async def add_batch_task_rela_dao(cls, db: AsyncSession, rela_list: List[TaskBizConfigRela]): + db.add_all(rela_list) + await db.flush() + + @classmethod + async def get_task_rela_by_biz_id(cls, db: AsyncSession, biz_onum: int): + result = await db.execute( + select(MetadataExtractInfo) + .join(TaskBizConfigRela, MetadataExtractInfo.onum == TaskBizConfigRela.tab_onum) + .where(TaskBizConfigRela.biz_onum == biz_onum) + ) + return result.scalars().all() \ No newline at end of file diff --git a/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py b/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py index 677c89b..061f88a 100644 --- a/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py +++ b/vue-fastapi-backend/module_admin/entity/vo/metadata_config_vo.py @@ -362,6 +362,10 @@ class TaskBizConfigAddModel(BaseModel): create_time: Optional[datetime] = Field(default=None, description='创建时间') update_by: Optional[str] = Field(default=None, description='更新者') update_time: Optional[datetime] = Field(default=None, description='更新时间') + status: Optional[str] = Field(default="N", description="状态") + ds_time: Optional[datetime] = Field(default=None, description="调度时间") + ds_ids: Optional[str] = Field(default=None, description="任务ID") + schId: Optional[str] = Field(default=None, description="调度id") tab_onum_list: List[int] = Field(default=None, description='表id列表') class TaskBizConfigModel(BaseModel): """ diff --git a/vue-fastapi-backend/module_admin/service/metadata_config_service.py b/vue-fastapi-backend/module_admin/service/metadata_config_service.py index 4004fcf..71a153a 100644 --- a/vue-fastapi-backend/module_admin/service/metadata_config_service.py +++ b/vue-fastapi-backend/module_admin/service/metadata_config_service.py @@ -2,9 +2,11 @@ from sqlalchemy.ext.asyncio import AsyncSession from module_admin.dao.metadata_config_dao import MetadataConfigDao from module_admin.entity.vo.common_vo import CrudResponseModel from module_admin.entity.vo.metadata_config_vo import MetadataClasModel,SecuBizConfigAddModel,SecuBizConfigRelaModel,\ -SecuBizPermiConfigBatchModel,MetadataClasPageQueryModel,MetadataSecModel,MetadataSecPageQueryModel,SecuBizConfigModel ,SecuBizConfigQueryModel,SecuBizPermiConfigModel, SecuBizPermiConfigQueryModel +SecuBizPermiConfigBatchModel,MetadataClasPageQueryModel,MetadataSecModel,MetadataSecPageQueryModel,SecuBizConfigModel ,\ +SecuBizConfigQueryModel,SecuBizPermiConfigModel, SecuBizPermiConfigQueryModel,\ +TaskBizConfigAddModel, TaskBizConfigQueryModel,TaskBizConfigModel,TaskBizConfigRelaModel from utils.common_util import CamelCaseUtil -from module_admin.entity.do.metadata_config_do import SecuBizConfigRela # ORM 类 +from module_admin.entity.do.metadata_config_do import SecuBizConfigRela,TaskBizConfigRela # ORM 类 from exceptions.exception import ServiceException import uuid from typing import List @@ -250,6 +252,7 @@ class MetadataConfigService: try: await MetadataConfigDao.delete_biz_config(db, id_list) + await MetadataConfigDao.delete_biz_rela_batch(db, id_list) await db.commit() return CrudResponseModel(is_success=True, message="删除成功") except Exception as e: @@ -341,7 +344,116 @@ class MetadataConfigService: else: return SecuBizPermiConfigModel(**dict()) @classmethod - async def get_biz_config_rela_list_services(cls, result_db: AsyncSession, biz_onum: int, - ): + async def get_biz_config_rela_list_services(cls, result_db: AsyncSession, biz_onum: int): ai_session_list = await MetadataConfigDao.get_biz_rela_by_biz_id(result_db, biz_onum) # 查询最新的20条 - return CamelCaseUtil.transform_result(ai_session_list) \ No newline at end of file + return CamelCaseUtil.transform_result(ai_session_list) + # ----------元数据标签调度任务 ---------- + @classmethod + async def get_task_biz_config_list_services( + cls, db: AsyncSession, query_object: TaskBizConfigQueryModel, is_page: bool = False + ): + return await MetadataConfigDao.get_task_biz_config_list(db, query_object, is_page) + + @classmethod + async def add_task_biz_config_services(cls, db: AsyncSession, page_object: TaskBizConfigAddModel): + try: + config = TaskBizConfigModel() + config.onum = page_object.onum + config.biz_name = page_object.biz_name + config.risk_lvl = page_object.risk_lvl + # config.status = page_object.status # 映射 data_sec_lvl + # config.ds_ids = page_object.ds_ids # 映射 applyType + config.isStop = page_object.isStop + config.create_by = page_object.create_by + config.create_time = page_object.create_time + config.update_by = page_object.update_by + config.update_time = page_object.update_time + + obj = await MetadataConfigDao.add_task_biz_config(db, config) + + # 添加关联信息 + records: List[TaskBizConfigRela] = [] + for tab_onum in page_object.tab_onum_list: + record = TaskBizConfigRela() + record.biz_onum = obj.onum + record.tab_onum = tab_onum + record.create_by = obj.create_by + record.create_time = obj.create_time + records.append(record) + + await MetadataConfigDao.add_batch_task_rela_dao(db, records) + await db.commit() + return CrudResponseModel(is_success=True, message="新增成功") + except Exception as e: + await db.rollback() + raise e + + @classmethod + async def edit_task_biz_config_services(cls, db: AsyncSession, page_object: TaskBizConfigAddModel): + config = TaskBizConfigModel() + config.onum = page_object.onum + config.biz_name = page_object.biz_name + config.risk_lvl = page_object.risk_lvl + # config.status = page_object.status # 映射 data_sec_lvl + # config.ds_ids = page_object.ds_ids # 映射 applyType + config.isStop = page_object.isStop + config.create_by = page_object.create_by + config.create_time = page_object.create_time + config.update_by = page_object.update_by + config.update_time = page_object.update_time + + edit_data = config.model_dump(exclude_unset=True) + + info = await cls.get_task_biz_config_detail_services(db, page_object.onum) + if info.onum: + try: + await MetadataConfigDao.edit_task_biz_config(db, page_object.onum, edit_data) + await MetadataConfigDao.delete_task_rela_dao(db, page_object.onum) + + records: List[TaskBizConfigRela] = [] + for tab_onum in page_object.tab_onum_list: + record = TaskBizConfigRela() + record.biz_onum = page_object.onum + record.tab_onum = tab_onum + record.create_by = page_object.update_by + record.create_time = page_object.update_time + records.append(record) + + await MetadataConfigDao.add_batch_task_rela_dao(db, records) + await db.commit() + return CrudResponseModel(is_success=True, message="更新成功") + except Exception as e: + await db.rollback() + raise e + else: + raise ServiceException(message="任务业务配置不存在") + + @classmethod + async def delete_task_biz_config_services(cls, db: AsyncSession, onum_list: str): + if not onum_list: + raise ServiceException(message="传入的编号为空") + + id_list = [onum.strip() for onum in onum_list.split(",") if onum.strip()] + if not id_list: + raise ServiceException(message="无效的编号列表") + + try: + await MetadataConfigDao.delete_task_biz_config(db, id_list) + await MetadataConfigDao.delete_task_rela_batch(db, id_list) + await db.commit() + return CrudResponseModel(is_success=True, message="删除成功") + except Exception as e: + await db.rollback() + raise e + + @classmethod + async def get_task_biz_config_detail_services(cls, db: AsyncSession, onum: str): + result = await MetadataConfigDao.get_task_biz_config_detail_by_id(db, onum) + if result: + return TaskBizConfigModel(**CamelCaseUtil.transform_result(result)) + else: + return TaskBizConfigModel(**dict()) + @classmethod + async def get_task_biz_config_rela_list_services(cls, result_db: AsyncSession, biz_onum: int): + ai_session_list = await MetadataConfigDao.get_task_rela_by_biz_id(result_db, biz_onum) # 查询最新的20条 + return CamelCaseUtil.transform_result(ai_session_list) diff --git a/vue-fastapi-frontend/src/api/taskMetadataConfig/metadataConfig.js b/vue-fastapi-frontend/src/api/taskMetadataConfig/metadataConfig.js new file mode 100644 index 0000000..b386a48 --- /dev/null +++ b/vue-fastapi-frontend/src/api/taskMetadataConfig/metadataConfig.js @@ -0,0 +1,63 @@ +import request from '@/utils/request' +// 查询业务配置列表,带分页 +// 查询任务业务配置列表(分页) +export function listTaskBizConfig(query) { + return request({ + url: '/default-api/metadataConfig/taskBizConfig/list', + method: 'get', + params: query + }) +} + +// 查询任务业务配置列表(不分页) +export function listTaskBizConfigAll(query) { + return request({ + url: '/default-api/metadataConfig/taskBizConfig/listall', + method: 'get', + params: query + }) +} + +// 查询任务业务配置详情 +export function getTaskBizConfig(onum) { + return request({ + url: '/default-api/metadataConfig/taskBizConfig/detail', + method: 'get', + params: { onum } + }) +} + +// 新增任务业务配置 +export function addTaskBizConfig(data) { + return request({ + url: '/default-api/metadataConfig/taskBizConfig/add', + method: 'post', + data: data + }) +} + +// 修改任务业务配置 +export function updateTaskBizConfig(data) { + return request({ + url: '/default-api/metadataConfig/taskBizConfig/edit', + method: 'post', + data: data + }) +} + +// 删除任务业务配置(支持批量) +export function delTaskBizConfig(onumStr) { + return request({ + url: '/default-api/metadataConfig/taskBizConfig/delete', + method: 'delete', + params: { onums: onumStr } + }) +} + +// 查询任务业务配置关联表列表 +export function getTaskBizRelaList(onum) { + return request({ + url: '/default-api/metadataConfig/taskBizConfigRela/list/' + onum, + method: 'get' + }) +} \ No newline at end of file diff --git a/vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue b/vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue new file mode 100644 index 0000000..c765fe1 --- /dev/null +++ b/vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue @@ -0,0 +1,352 @@ + + + + +