diff --git a/vue-fastapi-backend/module_admin/controller/datastd_controller.py b/vue-fastapi-backend/module_admin/controller/datastd_controller.py index a27c742..5ca8c28 100644 --- a/vue-fastapi-backend/module_admin/controller/datastd_controller.py +++ b/vue-fastapi-backend/module_admin/controller/datastd_controller.py @@ -871,4 +871,11 @@ async def export_std_dict_template(request: Request, query_db: AsyncSession = De dict_import_template_result = await DataStdService.get_dict_import_template_services() logger.info('获取成功') - return ResponseUtil.streaming(data=bytes2file_response(dict_import_template_result)) \ No newline at end of file + return ResponseUtil.streaming(data=bytes2file_response(dict_import_template_result)) +@datastdController.post("/stdmain/saveStdStatus") +async def save_tsmcb(request: Request, + saveSscfModel: DataStdMainModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user)): + result = await DataStdService.edit_std_main_status(query_db, saveSscfModel) + return ResponseUtil.success(msg=result.message) \ 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 d27b2f3..4b1c833 100644 --- a/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py +++ b/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py @@ -13,7 +13,7 @@ from sqlalchemy.sql import true from utils.page_util import PageUtil from module_admin.entity.vo.data_ast_content_vo import DataCatalogPageQueryModel, DeleteDataCatalogModel, \ DataCatalogChild -from sqlalchemy import delete, select, update, desc, or_, not_, and_ +from sqlalchemy import delete, select, update, desc, or_, not_, and_,func from exceptions.exception import ServiceException,ServiceWarning class MetadataConfigDao: @@ -159,18 +159,55 @@ class MetadataConfigDao: result = await db.execute(select(SecuBizConfig).where(SecuBizConfig.onum == onum)) return result.scalars().first() + # @classmethod + # async def get_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False): + # query = select(SecuBizConfig).where( + # SecuBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True, + # SecuBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True, + # SecuBizConfig.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(SecuBizConfig.create_time.desc()) + + # from utils.page_util import PageUtil + # return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) @classmethod async def get_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False): - query = select(SecuBizConfig).where( - SecuBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True, - SecuBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True, - SecuBizConfig.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(SecuBizConfig.create_time.desc()) + # === 副表数量子查询 === + subquery = ( + select( + SecuBizConfigRela.biz_onum.label("biz_onum"), + func.count(SecuBizConfigRela.onum).label("rela_count") + ) + .group_by(SecuBizConfigRela.biz_onum) + .subquery() + ) - from utils.page_util import PageUtil + # === 主查询,LEFT JOIN 子查询 === + query = ( + select( + SecuBizConfig.biz_name, + SecuBizConfig.onum, + SecuBizConfig.risk_lvl, + SecuBizConfig.update_by, + SecuBizConfig.update_time, + SecuBizConfig.isStop, + SecuBizConfig.create_by, + SecuBizConfig.create_time, + func.coalesce(subquery.c.rela_count, 0).label("rela_count") # 无关联时为 0 + ) + .outerjoin(subquery, SecuBizConfig.onum == subquery.c.biz_onum) + .where( + SecuBizConfig.risk_lvl.like(f"%{query_object.risk_lvl}%") if query_object.risk_lvl else True, + SecuBizConfig.isStop == query_object.isStop if query_object.isStop is not None else True, + SecuBizConfig.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(SecuBizConfig.create_time.desc()) + ) return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) @classmethod diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index 8a842ce..0e20de1 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/vue-fastapi-backend/module_admin/service/datastd_service.py @@ -1257,6 +1257,16 @@ class DataStdService: else: raise ServiceException(message=f'标准 {model.onum} 不存在') @classmethod + async def edit_std_main_status(cls, query_db: AsyncSession, model: DataStdMainModel): + existing = await cls.get_std_main_by_id(query_db, model.onum) + if existing: + existing.std_status=model.std_status + await DataStdDao.update_std_main(query_db, existing) + await query_db.commit() + return CrudResponseModel(is_success=True, message='编辑标准成功') + else: + raise ServiceException(message=f'标准 {model.onum} 不存在') + @classmethod async def add_std_main_appr(cls, query_db: AsyncSession, model: DataStdMainModel): if not await cls.check_std_num_unique(query_db, model): raise ServiceException(message=f"标准编号 {model.data_std_no} 已存在") diff --git a/vue-fastapi-frontend/src/api/datastd/std.js b/vue-fastapi-frontend/src/api/datastd/std.js index ece12d1..58968e1 100644 --- a/vue-fastapi-frontend/src/api/datastd/std.js +++ b/vue-fastapi-frontend/src/api/datastd/std.js @@ -254,6 +254,7 @@ export function listStdCodeAppr(query) { params: query }) } + // 查询数据标准列表 export function listStdMainSelect(query) { return request({ @@ -262,7 +263,13 @@ export function listStdMainSelect(query) { params: query }) } - +export function saveStdStatus(data){ + return request({ + url: '/default-api/datastd/stdmain/saveStdStatus', + method: 'post', + data: data + }) +} // 查询数据标准详情 diff --git a/vue-fastapi-frontend/src/views/datastd/main/index.vue b/vue-fastapi-frontend/src/views/datastd/main/index.vue index 6e9e515..48448fc 100644 --- a/vue-fastapi-frontend/src/views/datastd/main/index.vue +++ b/vue-fastapi-frontend/src/views/datastd/main/index.vue @@ -309,6 +309,13 @@ + + +