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 @@
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+
+ 新增
+
+
+ 修改
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+ {{ formatDateTime(row.createTime) }}
+
+
+
+
+
+ {{ formatDateTime(row.updateTime) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ <
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
+
+
+
+