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 b837846..3e729f2 100644 --- a/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py +++ b/vue-fastapi-backend/module_admin/controller/metadata_config_controller.py @@ -37,17 +37,17 @@ from utils.page_util import PageResponseModel from utils.log_util import logger from module_admin.service.login_service import LoginService from module_admin.entity.vo.user_vo import CurrentUserModel -from module_admin.entity.vo.metatask_vo import DeleteMetataskModel,OperaMetataskModel -from module_admin.entity.vo.dataSource_vo import ProcessDefinition,ParmScheduleVo,ProcessInstancePage +from module_admin.entity.vo.metatask_vo import DeleteMetataskModel, OperaMetataskModel +from module_admin.entity.vo.dataSource_vo import ProcessDefinition, ParmScheduleVo, ProcessInstancePage metadataConfigController = APIRouter(prefix='/metadataConfig') @metadataConfigController.get('/clas/list', response_model=PageResponseModel) async def get_metadata_clas_list( - request: Request, - query: MetadataClasPageQueryModel = Depends(MetadataClasPageQueryModel.as_query), - query_db: AsyncSession = Depends(get_db), + request: Request, + query: MetadataClasPageQueryModel = Depends(MetadataClasPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.get_metadata_clas_list_services(query_db, query, is_page=True) logger.info('获取元数据分类列表成功') @@ -57,10 +57,10 @@ async def get_metadata_clas_list( @metadataConfigController.post('/clas') @ValidateFields(validate_model='add_metadata_clas') async def add_metadata_clas( - request: Request, - add_clas: MetadataClasModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + add_clas: MetadataClasModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): add_clas.upd_time = datetime.now() add_clas.rec_subm_prsn = current_user.user.user_name @@ -74,10 +74,10 @@ async def add_metadata_clas( @metadataConfigController.put('/clas') @ValidateFields(validate_model='edit_metadata_clas') async def edit_metadata_clas( - request: Request, - edit_clas: MetadataClasModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + edit_clas: MetadataClasModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): edit_clas.upd_time = datetime.now() edit_clas.rec_subm_prsn = current_user.user.user_name @@ -88,9 +88,9 @@ async def edit_metadata_clas( @metadataConfigController.delete('/clas/{clas_ids}') async def delete_metadata_clas( - request: Request, - clas_ids: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + clas_ids: str, + query_db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.delete_metadata_clas_services(query_db, clas_ids) logger.info(result.message) @@ -99,9 +99,9 @@ async def delete_metadata_clas( @metadataConfigController.get('/clas/{clas_id}', response_model=MetadataClasModel) async def get_metadata_clas_detail( - request: Request, - clas_id: int, - query_db: AsyncSession = Depends(get_db), + request: Request, + clas_id: int, + query_db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.get_metadata_clas_detail_services(query_db, clas_id) logger.info(f'获取元数据分类ID={clas_id}详情成功') @@ -113,22 +113,32 @@ async def get_metadata_clas_detail( @metadataConfigController.get('/sec/list', response_model=PageResponseModel) async def get_metadata_sec_list( - request: Request, - query: MetadataSecPageQueryModel = Depends(MetadataSecPageQueryModel.as_query), - query_db: AsyncSession = Depends(get_db), + request: Request, + query: MetadataSecPageQueryModel = Depends(MetadataSecPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.get_metadata_sec_list_services(query_db, query, is_page=True) logger.info('获取数据安全配置列表成功') return ResponseUtil.success(model_content=result) +@metadataConfigController.get('/sec/optionList', response_model=PageResponseModel) +async def get_metadata_sec_list( + request: Request, + query_db: AsyncSession = Depends(get_db), +): + result = await MetadataConfigService.get_metadata_sec_option_list_services(query_db) + logger.info('获取数据安全配置列表成功') + return ResponseUtil.success(data=result) + + @metadataConfigController.post('/sec') @ValidateFields(validate_model='add_metadata_sec') async def add_metadata_sec( - request: Request, - add_sec: MetadataSecModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + add_sec: MetadataSecModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): add_sec.upd_time = datetime.now() add_sec.rec_subm_prsn = current_user.user.user_name @@ -141,10 +151,10 @@ async def add_metadata_sec( @metadataConfigController.put('/sec') @ValidateFields(validate_model='edit_metadata_sec') async def edit_metadata_sec( - request: Request, - edit_sec: MetadataSecModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + edit_sec: MetadataSecModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): edit_sec.upd_time = datetime.now() edit_sec.rec_subm_prsn = current_user.user.user_name @@ -156,9 +166,9 @@ async def edit_metadata_sec( @metadataConfigController.delete('/sec/{sec_ids}') async def delete_metadata_sec( - request: Request, - sec_ids: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + sec_ids: str, + query_db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.delete_metadata_sec_services(query_db, sec_ids) logger.info(result.message) @@ -167,9 +177,9 @@ async def delete_metadata_sec( @metadataConfigController.get('/sec/{sec_id}', response_model=MetadataSecModel) async def get_metadata_sec_detail( - request: Request, - sec_id: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + sec_id: str, + query_db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.get_metadata_sec_detail_services(query_db, sec_id) logger.info(f'获取数据安全配置 onum={sec_id} 详情成功') @@ -181,9 +191,9 @@ async def get_metadata_sec_detail( @metadataConfigController.get('/bizConfig/list', response_model=PageResponseModel) async def get_biz_config_list( - request: Request, - query: SecuBizConfigQueryModel = Depends(SecuBizConfigPageQueryModel.as_query), - db: AsyncSession = Depends(get_db), + request: Request, + query: SecuBizConfigQueryModel = Depends(SecuBizConfigPageQueryModel.as_query), + db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.get_biz_config_list_services(db, query, is_page=True) return ResponseUtil.success(model_content=result) @@ -191,9 +201,9 @@ async def get_biz_config_list( @metadataConfigController.get('/bizConfig/listall') async def get_biz_config_list_all( - request: Request, - query: SecuBizConfigQueryModel = Depends(SecuBizConfigPageQueryModel.as_query), - db: AsyncSession = Depends(get_db), + request: Request, + query: SecuBizConfigQueryModel = Depends(SecuBizConfigPageQueryModel.as_query), + db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.get_biz_config_list_services(db, query, is_page=False) return ResponseUtil.success(data=result) @@ -202,9 +212,9 @@ async def get_biz_config_list_all( @metadataConfigController.post('/bizConfig/add') @ValidateFields(['bizModule', 'configType', 'data_sec_lvl', 'applyType']) async def add_biz_config( - item: SecuBizConfigAddModel, - db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + item: SecuBizConfigAddModel, + 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() @@ -215,9 +225,9 @@ async def add_biz_config( @metadataConfigController.post('/bizConfig/edit') @ValidateFields(['onum']) async def edit_biz_config( - item: SecuBizConfigAddModel, - db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + item: SecuBizConfigAddModel, + 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() @@ -242,9 +252,9 @@ async def get_biz_config_detail(onum: str, db: AsyncSession = Depends(get_db)): @metadataConfigController.get('/bizPermiConfig/list', response_model=PageResponseModel) async def get_biz_permi_config_list( - request: Request, - query: SecuBizConfigModel = Depends(SecuBizPermiConfigPageQueryModel.as_query), - query_db: AsyncSession = Depends(get_db), + request: Request, + query: SecuBizConfigModel = Depends(SecuBizPermiConfigPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), ): result = await MetadataConfigService.get_biz_permi_config_list_services(query_db, query, is_page=True) return ResponseUtil.success(model_content=result) @@ -252,9 +262,9 @@ async def get_biz_permi_config_list( @metadataConfigController.post('/bizPermiConfig/add') async def add_biz_permi_config( - item: SecuBizPermiConfigBatchModel, - db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + item: SecuBizPermiConfigBatchModel, + db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): create_by = current_user.user.user_name create_time = datetime.now() @@ -265,9 +275,9 @@ async def add_biz_permi_config( @metadataConfigController.post('/bizPermiConfig/edit') @ValidateFields(['onum']) async def edit_biz_permi_config( - item: SecuBizPermiConfigModel, - db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + item: SecuBizPermiConfigModel, + 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() @@ -290,8 +300,8 @@ async def get_biz_permi_config_detail(onum: str, db: AsyncSession = Depends(get_ @metadataConfigController.get('/bizConfigRela/list/{bizOnum}') async def get_biz_rela_config_list( - bizOnum: int, - query_db: AsyncSession = Depends(get_db), + bizOnum: int, + query_db: AsyncSession = Depends(get_db), ): ai_chat_list_result = await MetadataConfigService.get_biz_config_rela_list_services(query_db, bizOnum) logger.info('获取成功') @@ -300,9 +310,9 @@ async def get_biz_rela_config_list( @metadataConfigController.get('/busiLabel/list', response_model=PageResponseModel) async def get_busi_label_list( - request: Request, - query: BatchBusiLabelConfigModel = Depends(BatchBusiLabelConfigPageQueryModel.as_query), - query_db: AsyncSession = Depends(get_db), + request: Request, + query: BatchBusiLabelConfigModel = Depends(BatchBusiLabelConfigPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), ): result = await BatchLabelConfigService.get_busi_list_services(query_db, query, False) logger.info('获取业务标签配置列表成功') @@ -312,10 +322,10 @@ async def get_busi_label_list( @metadataConfigController.post('/busiLabel') @ValidateFields(validate_model='add_busi_label') async def add_busi_label( - request: Request, - model: BatchBusiLabelConfigModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + model: BatchBusiLabelConfigModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): model.upd_by = current_user.user.user_name @@ -328,10 +338,10 @@ async def add_busi_label( @metadataConfigController.put('/busiLabel') @ValidateFields(validate_model='edit_busi_label') async def edit_busi_label( - request: Request, - model: BatchBusiLabelConfigModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + model: BatchBusiLabelConfigModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): model.upd_by = current_user.user.user_name @@ -343,9 +353,9 @@ async def edit_busi_label( @metadataConfigController.delete('/busiLabel/{onum_list}') async def delete_busi_label( - request: Request, - onum_list: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + onum_list: str, + query_db: AsyncSession = Depends(get_db), ): result = await BatchLabelConfigService.delete_busi_services(query_db, onum_list) logger.info(result.message) @@ -354,9 +364,9 @@ async def delete_busi_label( @metadataConfigController.get('/busiLabel/{onum}', response_model=BatchBusiLabelConfigModel) async def get_busi_label_detail( - request: Request, - onum: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + onum: str, + query_db: AsyncSession = Depends(get_db), ): result = await BatchLabelConfigService.get_busi_detail_services(query_db, onum) logger.info(f'获取业务标签配置 onum={onum} 详情成功') @@ -365,9 +375,9 @@ async def get_busi_label_detail( @metadataConfigController.get('/dataopLabel/list', response_model=PageResponseModel) async def get_dataop_label_list( - request: Request, - query: BatchDataopLabelConfigModel=Depends(BatchDataopLabelModelPageQueryModel.as_query), - query_db: AsyncSession = Depends(get_db), + request: Request, + query: BatchDataopLabelConfigModel = Depends(BatchDataopLabelModelPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), ): result = await BatchLabelConfigService.get_dataop_vo_services(query_db, query, is_page=True) logger.info('获取操作标签配置列表成功') @@ -377,10 +387,10 @@ async def get_dataop_label_list( @metadataConfigController.post('/dataopLabel') @ValidateFields(validate_model='add_dataop_label') async def add_dataop_label( - request: Request, - model: BatchDataopLabelConfigModelVo, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + model: BatchDataopLabelConfigModelVo, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): model.upd_by = current_user.user.user_name @@ -393,10 +403,10 @@ async def add_dataop_label( @metadataConfigController.put('/dataopLabel') @ValidateFields(validate_model='edit_dataop_label') async def edit_dataop_label( - request: Request, - model: BatchDataopLabelConfigModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + model: BatchDataopLabelConfigModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): model.upd_by = current_user.user.user_name @@ -408,9 +418,9 @@ async def edit_dataop_label( @metadataConfigController.delete('/dataopLabel/{onum_list}') async def delete_dataop_label( - request: Request, - onum_list: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + onum_list: str, + query_db: AsyncSession = Depends(get_db), ): result = await BatchLabelConfigService.delete_dataop_services(query_db, onum_list) logger.info(result.message) @@ -419,9 +429,9 @@ async def delete_dataop_label( @metadataConfigController.get('/dataopLabel/{onum}', response_model=BatchDataopLabelConfigModel) async def get_dataop_label_detail( - request: Request, - onum: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + onum: str, + query_db: AsyncSession = Depends(get_db), ): result = await BatchLabelConfigService.get_dataop_detail_services(query_db, onum) logger.info(f'获取操作标签配置 onum={onum} 详情成功') @@ -430,12 +440,12 @@ async def get_dataop_label_detail( @metadataConfigController.get('/datatypeLabel/list', response_model=PageResponseModel) async def get_datatype_label_list( - request: Request, - query: BatchDatatypeLabelConfigModel = Depends(BatchDatatypeLabelConfigPageQueryModel.as_query), - query_db: AsyncSession = Depends(get_db), + request: Request, + query: BatchDatatypeLabelConfigModel = Depends(BatchDatatypeLabelConfigPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), ): - result = await BatchLabelConfigService.get_datatype_list_services(query_db, query,False) + result = await BatchLabelConfigService.get_datatype_list_services(query_db, query, False) logger.info('获取数据类型标签配置列表成功') return ResponseUtil.success(data=result) @@ -443,14 +453,14 @@ async def get_datatype_label_list( @metadataConfigController.post('/datatypeLabel') @ValidateFields(validate_model='add_datatype_label') async def add_datatype_label( - request: Request, - model: BatchDatatypeLabelConfigModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + model: BatchDatatypeLabelConfigModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): model.upd_by = current_user.user.user_name model.upd_time = datetime.now() - + result = await BatchLabelConfigService.add_datatype_services(query_db, model) logger.info(result.message) return ResponseUtil.success(msg=result.message) @@ -459,10 +469,10 @@ async def add_datatype_label( @metadataConfigController.put('/datatypeLabel') @ValidateFields(validate_model='edit_datatype_label') async def edit_datatype_label( - request: Request, - model: BatchDatatypeLabelConfigModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + model: BatchDatatypeLabelConfigModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): model.upd_by = current_user.user.user_name @@ -474,9 +484,9 @@ async def edit_datatype_label( @metadataConfigController.delete('/datatypeLabel/{onum_list}') async def delete_datatype_label( - request: Request, - onum_list: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + onum_list: str, + query_db: AsyncSession = Depends(get_db), ): result = await BatchLabelConfigService.delete_datatype_services(query_db, onum_list) logger.info(result.message) @@ -485,18 +495,20 @@ async def delete_datatype_label( @metadataConfigController.get('/datatypeLabel/{onum}', response_model=BatchDatatypeLabelConfigModel) async def get_datatype_label_detail( - request: Request, - onum: str, - query_db: AsyncSession = Depends(get_db), + request: Request, + onum: str, + query_db: AsyncSession = Depends(get_db), ): result = await BatchLabelConfigService.get_datatype_detail_services(query_db, onum) logger.info(f'获取数据类型标签配置 onum={onum} 详情成功') return ResponseUtil.success(data=result) + + @metadataConfigController.get("/datasecConfig/list", response_model=PageResponseModel) async def get_datasec_config_list( - request: Request, - query: DatasecConfigModel = Depends(DatasecConfigPageQueryModel.as_query), - query_db: AsyncSession = Depends(get_db), + request: Request, + query: DatasecConfigModel = Depends(DatasecConfigPageQueryModel.as_query), + query_db: AsyncSession = Depends(get_db), ): result = await DatasecConfigService.get_datasec_list_services(query_db, query, True) logger.info("获取数据安全参数配置列表成功") @@ -506,14 +518,14 @@ async def get_datasec_config_list( @metadataConfigController.post("/datasecConfig") @ValidateFields(validate_model="add_datasec_config") async def add_datasec_config( - request: Request, - model: DatasecConfigModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + model: DatasecConfigModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): model.create_by = current_user.user.user_name model.create_time = datetime.now() - result = await DatasecConfigService.add_datasec_services(query_db, model,current_user,request) + result = await DatasecConfigService.add_datasec_services(query_db, model, current_user, request) logger.info(result.message) return ResponseUtil.success(msg=result.message) @@ -521,14 +533,14 @@ async def add_datasec_config( @metadataConfigController.put("/datasecConfig") @ValidateFields(validate_model="edit_datasec_config") async def edit_datasec_config( - request: Request, - model: DatasecConfigModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + model: DatasecConfigModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): model.update_by = current_user.user.user_name model.update_time = datetime.now() - result = await DatasecConfigService.edit_datasec_services(query_db, model,current_user,request) + result = await DatasecConfigService.edit_datasec_services(query_db, model, current_user, request) logger.info(result.message) return ResponseUtil.success(msg=result.message) @@ -543,77 +555,87 @@ async def edit_datasec_config( # logger.info(result.message) # return ResponseUtil.success(msg=result.message) @metadataConfigController.delete('/datasecConfig/{metatask_ids}/{ds_ids}') -async def delete_system_config(request: Request, metatask_ids: str,ds_ids:str, query_db: AsyncSession = Depends(get_db),current_user: CurrentUserModel = Depends(LoginService.get_current_user)): - delete_config = DeleteMetataskModel(metatask_ids=metatask_ids,ds_ids=ds_ids) - delete_config_result = await DatasecConfigService.delete_datasec_services(request, query_db, delete_config,current_user) +async def delete_system_config(request: Request, metatask_ids: str, ds_ids: str, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user)): + delete_config = DeleteMetataskModel(metatask_ids=metatask_ids, ds_ids=ds_ids) + delete_config_result = await DatasecConfigService.delete_datasec_services(request, query_db, delete_config, + current_user) logger.info(delete_config_result.message) return ResponseUtil.success(msg=delete_config_result.message) + @metadataConfigController.get("/datasecConfig/{onum}", response_model=DatasecConfigModel) async def get_datasec_config_detail( - request: Request, - onum: int, - query_db: AsyncSession = Depends(get_db), + request: Request, + onum: int, + query_db: AsyncSession = Depends(get_db), ): result = await DatasecConfigService.get_datasec_detail_services(query_db, onum) logger.info(f"获取数据安全参数配置 onum={onum} 详情成功") return ResponseUtil.success(data=result) + + @metadataConfigController.put('/upOrdown') async def up_or_down_meta_metatask( - request: Request, - DownOrUpdate: OperaMetataskModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + DownOrUpdate: OperaMetataskModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): - - edit_config_result = await DatasecConfigService.up_or_down_metatask_services(request, query_db,current_user, DownOrUpdate.id,DownOrUpdate.type) + edit_config_result = await DatasecConfigService.up_or_down_metatask_services(request, query_db, current_user, + DownOrUpdate.id, DownOrUpdate.type) logger.info(edit_config_result.message) return ResponseUtil.success(msg=edit_config_result.message) + + # 元数据任务调度 @metadataConfigController.put('/DS') async def DS_meta_metatask( - request: Request, - process: ParmScheduleVo, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user) + request: Request, + process: ParmScheduleVo, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): - - edit_config_result = await DatasecConfigService.ds_metatask_services(request, query_db, process,current_user) + edit_config_result = await DatasecConfigService.ds_metatask_services(request, query_db, process, current_user) return ResponseUtil.success(msg=edit_config_result) -@metadataConfigController.get('/DS/{id}') +@metadataConfigController.get('/DS/{id}') async def DS_meta_metatask_detail( - request: Request, - id: int, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user) + request: Request, + id: int, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): - process=ParmScheduleVo() - process.processDefinitionCode=id - edit_config_result = await DatasecConfigService.ds_metatask_detail(request, query_db, process,current_user) + process = ParmScheduleVo() + process.processDefinitionCode = id + edit_config_result = await DatasecConfigService.ds_metatask_detail(request, query_db, process, current_user) return ResponseUtil.success(data=edit_config_result) + + @metadataConfigController.delete('/DS') async def DS_meta_metatask_delete( - request: Request, - process: ParmScheduleVo, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user) + request: Request, + process: ParmScheduleVo, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): - - edit_config_result = await DatasecConfigService.ds_metatask_delete(request, query_db, process,current_user) + edit_config_result = await DatasecConfigService.ds_metatask_delete(request, query_db, process, current_user) 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), + 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) @@ -621,9 +643,9 @@ async def get_task_biz_config_list( @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), + 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) @@ -632,28 +654,28 @@ async def get_task_biz_config_list_all( @metadataConfigController.post('/taskBizConfig/add') @ValidateFields(['bizModule', 'configType', 'data_sec_lvl', 'applyType']) async def add_task_biz_config( - request: Request, - item: TaskBizConfigAddModel, - db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + 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,current_user,request) + result = await MetadataConfigService.add_task_biz_config_services(db, item, current_user, request) return ResponseUtil.success(msg=result.message) @metadataConfigController.post('/taskBizConfig/edit') @ValidateFields(['onum']) async def edit_task_biz_config( - request: Request, - item: TaskBizConfigAddModel, - db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + 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,current_user,request) + result = await MetadataConfigService.edit_task_biz_config_services(db, item, current_user, request) return ResponseUtil.success(msg=result.message) @@ -662,57 +684,64 @@ async def edit_task_biz_config( # result = await MetadataConfigService.delete_task_biz_config_services(db, onums) # return ResponseUtil.success(msg=result.message) @metadataConfigController.delete('/taskBizConfig/{metatask_ids}/{ds_ids}') -async def delete_task_biz_config(request: Request, metatask_ids: str,ds_ids:str, query_db: AsyncSession = Depends(get_db),current_user: CurrentUserModel = Depends(LoginService.get_current_user)): - delete_config = DeleteMetataskModel(metatask_ids=metatask_ids,ds_ids=ds_ids) - delete_config_result = await MetadataConfigService.delete_task_biz_config_services(request, query_db, delete_config,current_user) +async def delete_task_biz_config(request: Request, metatask_ids: str, ds_ids: str, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user)): + delete_config = DeleteMetataskModel(metatask_ids=metatask_ids, ds_ids=ds_ids) + delete_config_result = await MetadataConfigService.delete_task_biz_config_services(request, query_db, delete_config, + current_user) logger.info(delete_config_result.message) return ResponseUtil.success(msg=delete_config_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), + 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) + + @metadataConfigController.put('/taskBiz/upOrdown') async def task_biz_up_or_down_meta_metatask( - request: Request, - DownOrUpdate: OperaMetataskModel, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user), + request: Request, + DownOrUpdate: OperaMetataskModel, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user), ): - - edit_config_result = await MetadataConfigService.up_or_down_metatask_services(request, query_db,current_user, DownOrUpdate.id,DownOrUpdate.type) + edit_config_result = await MetadataConfigService.up_or_down_metatask_services(request, query_db, current_user, + DownOrUpdate.id, DownOrUpdate.type) logger.info(edit_config_result.message) - return ResponseUtil.success(msg=edit_config_result.message) - + return ResponseUtil.success(msg=edit_config_result.message) @metadataConfigController.put('/taskBiz/DS') async def task_biz_DS_meta_metatask( - request: Request, - process: ParmScheduleVo, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user) + request: Request, + process: ParmScheduleVo, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): + edit_config_result = await MetadataConfigService.ds_metatask_services(request, query_db, process, current_user) - edit_config_result = await MetadataConfigService.ds_metatask_services(request, query_db, process,current_user) + return ResponseUtil.success(msg=edit_config_result) - return ResponseUtil.success(msg=edit_config_result) @metadataConfigController.delete('/taskBiz/DS') async def task_biz_DS_meta_metatask_delete( - request: Request, - process: ParmScheduleVo, - query_db: AsyncSession = Depends(get_db), - current_user: CurrentUserModel = Depends(LoginService.get_current_user) + request: Request, + process: ParmScheduleVo, + query_db: AsyncSession = Depends(get_db), + current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): + edit_config_result = await MetadataConfigService.ds_metatask_delete(request, query_db, process, current_user) - edit_config_result = await MetadataConfigService.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) diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index 914812e..8403571 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/vue-fastapi-backend/module_admin/dao/datastd_dao.py @@ -1,12 +1,14 @@ -from sqlalchemy import delete, select, update, desc,or_,not_ +from sqlalchemy import delete, select, update, desc, or_, not_, and_ from sqlalchemy.ext.asyncio import AsyncSession -from module_admin.entity.do.datastd_do import DataStdCode,DataStdDict,DataAstContent,DataAstContentRela,DataStdMain,DataStdMainAppr,DataStdDictAppr,DataStdCodeAppr +from module_admin.entity.do.datastd_do import DataStdCode, DataStdDict, DataAstContent, DataAstContentRela, DataStdMain, \ + DataStdMainAppr, DataStdDictAppr, DataStdCodeAppr from module_admin.entity.vo.datastd_vo import DataStdCodeModel, DataStdDictModel, DataStdMainModel, \ DataStdMainApprModel, DataStdDictApprModel, DataStdCodeApprModel, StdDictNoPageParam from module_admin.entity.do.dept_do import SysDept from utils.page_util import PageUtil from sqlalchemy.orm import aliased -from module_admin.entity.vo.data_ast_content_vo import DataCatalogPageQueryModel, DeleteDataCatalogModel,DataCatalogChild +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 @@ -15,18 +17,19 @@ class DataStdDao: # ----------------------------------------------------------------数据标准模块---------------------------------------------------------------------------------------------------- @classmethod - async def get_std_code_appr_list(cls, flowId:str,db: AsyncSession): - filters = [] - filters.append(DataStdCodeAppr.flowId == flowId) - filters.append(DataStdCodeAppr.class_id == "code") - query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time)) - return await PageUtil.paginate(db, query, 0, 0, False) + async def get_std_code_appr_list(cls, flowId: str, db: AsyncSession): + filters = [] + filters.append(DataStdCodeAppr.flowId == flowId) + filters.append(DataStdCodeAppr.class_id == "code") + query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time)) + return await PageUtil.paginate(db, query, 0, 0, False) + @classmethod - async def get_std_code_appr_list_Flow(cls, flowId:str,db: AsyncSession): - filters = [] - filters.append(DataStdCodeAppr.flowId == flowId) - query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time)) - return await PageUtil.paginate(db, query, 0, 0, False) + async def get_std_code_appr_list_Flow(cls, flowId: str, db: AsyncSession): + filters = [] + filters.append(DataStdCodeAppr.flowId == flowId) + query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time)) + return await PageUtil.paginate(db, query, 0, 0, False) @classmethod async def get_std_code_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False): @@ -40,7 +43,7 @@ class DataStdDao: # 构建别名 c1 = aliased(DataStdCode) # 当前记录 c2 = aliased(DataStdCode) # 关联 code_map_id - + # 构建过滤条件 filters = [] if query_object.cd_val_cn_mean: @@ -62,7 +65,7 @@ class DataStdDao: filters.append(1 == 2) if query_object.parent_id: filters.append(c1.parent_id == query_object.parent_id) - + # 构建查询 query = ( select( @@ -82,7 +85,7 @@ class DataStdDao: .where(*filters) .order_by(desc(c1.create_time)) ) - + # 分页处理 result = await PageUtil.paginate( db, query, query_object.page_num, query_object.page_size, is_page @@ -91,59 +94,61 @@ class DataStdDao: @classmethod async def get_appr_std_code_list(cls, db: AsyncSession, query_object: DataStdCodeApprModel, is_page: bool = False): - """ + """ 获取 DataStdCode 的列表信息,支持模糊查询和分页 :param db: ORM对象 :param query_object: 查询参数对象 :param is_page: 是否开启分页 :return: 列表信息 """ - # 构建查询条件 - filters = [] - if query_object.cd_val_cn_mean: - filters.append(DataStdCodeAppr.cd_val_cn_mean.like(f"%{query_object.cd_val_cn_mean}%")) - if query_object.cd_no: - filters.append( or_( - DataStdCodeAppr.cd_val_cn_mean.like(f"%{query_object.cd_no}%"), - DataStdCodeAppr.cd_no.like(f"%{query_object.cd_no}%") - )) - if query_object.cd_val_stat: - filters.append(DataStdCodeAppr.cd_val_stat==query_object.cd_val_stat) - if query_object.src_sys: - filters.append(DataStdCodeAppr.src_sys==query_object.src_sys) - if query_object.cd_type: - filters.append(DataStdCodeAppr.cd_type==query_object.cd_type) - - if query_object.class_id: - filters.append(DataStdCodeAppr.class_id==query_object.class_id) - if query_object.class_id=='codeItem' and not query_object.parent_id: - filters.append(1==2) - if query_object.parent_id: - filters.append(DataStdCodeAppr.parent_id==query_object.parent_id) - # 构建查询语句 - query = ( - select(DataStdCodeAppr) - .where(*filters) - .order_by(desc(DataStdCodeAppr.create_time)) # 按创建时间降序排序 - ) - - # 分页处理 - col_list = await PageUtil.paginate( - db, query, query_object.page_num, query_object.page_size, is_page - ) - return col_list + # 构建查询条件 + filters = [] + if query_object.cd_val_cn_mean: + filters.append(DataStdCodeAppr.cd_val_cn_mean.like(f"%{query_object.cd_val_cn_mean}%")) + if query_object.cd_no: + filters.append(or_( + DataStdCodeAppr.cd_val_cn_mean.like(f"%{query_object.cd_no}%"), + DataStdCodeAppr.cd_no.like(f"%{query_object.cd_no}%") + )) + if query_object.cd_val_stat: + filters.append(DataStdCodeAppr.cd_val_stat == query_object.cd_val_stat) + if query_object.src_sys: + filters.append(DataStdCodeAppr.src_sys == query_object.src_sys) + if query_object.cd_type: + filters.append(DataStdCodeAppr.cd_type == query_object.cd_type) + + if query_object.class_id: + filters.append(DataStdCodeAppr.class_id == query_object.class_id) + if query_object.class_id == 'codeItem' and not query_object.parent_id: + filters.append(1 == 2) + if query_object.parent_id: + filters.append(DataStdCodeAppr.parent_id == query_object.parent_id) + # 构建查询语句 + query = ( + select(DataStdCodeAppr) + .where(*filters) + .order_by(desc(DataStdCodeAppr.create_time)) # 按创建时间降序排序 + ) + + # 分页处理 + col_list = await PageUtil.paginate( + db, query, query_object.page_num, query_object.page_size, is_page + ) + return col_list + @classmethod - async def get_last_std_code_appr_by_id(cls,db: AsyncSession, Id: str ): - result = await db.execute( - select(DataStdCodeAppr) - .where( - DataStdCodeAppr.oldInstId == Id, - DataStdCodeAppr.approStatus == "succeed" - ) - .order_by(DataStdCodeAppr.upd_time.desc()) - .limit(1) - ) - return result.scalar_one_or_none() + async def get_last_std_code_appr_by_id(cls, db: AsyncSession, Id: str): + result = await db.execute( + select(DataStdCodeAppr) + .where( + DataStdCodeAppr.oldInstId == Id, + DataStdCodeAppr.approStatus == "succeed" + ) + .order_by(DataStdCodeAppr.upd_time.desc()) + .limit(1) + ) + return result.scalar_one_or_none() + @classmethod async def get_std_code_list_all(cls, query_db: AsyncSession): """ @@ -154,6 +159,7 @@ class DataStdDao: stmt = select(DataStdCode).where(DataStdCode.class_id == 'code') # 只查有效的 result = await query_db.execute(stmt) return result.scalars().all() + @classmethod async def get_std_main_list_import(cls, query_db: AsyncSession): """ @@ -161,118 +167,123 @@ class DataStdDao: :param session: 异步数据库会话 :return: List[DataStdCode] """ - stmt = select(DataStdMain).where(1== 1) # 只查有效的 + stmt = select(DataStdMain).where(1 == 1) # 只查有效的 result = await query_db.execute(stmt) return result.scalars().all() + @classmethod async def get_std_code_map_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False): - # 构建查询条件 - filters = [] - # 系统级代码 - c1 = aliased(DataStdCode) # 当前 codeItem 表(c1) - c2 = aliased(DataStdCode) # 别名 c2 表示父级(parent) - c3 = aliased(DataStdCode) # 别名 c3 表示映射的代码 - c4 = aliased(DataStdCode) # 别名 c4 表示映射父级代码 - if query_object.parent_id: - if query_object.cd_type =='sys': - filters.append(c1.parent_id == query_object.parent_id) - else: - filters.append(c3.parent_id == query_object.parent_id) - # 公司级代码 - # 2. 创建别名并进行连接 - filters.append(c1.class_id == 'codeItem') # class_id 为 'codeItem' - # 3. 构建基础查询,使用连接和别名 - query = ( - select( - c2.src_sys.label("target_sys_id"), # 父级系统编号 - c2.src_sys.label("target_sys_name"), # 父级系统名称 - c2.cd_no.label("target_code_num"), # 父级代码编号 - c2.cd_val_cn_mean.label("target_code_name"), # 父级代码名称 - c1.cd_no.label("target_code_num_item"), # 当前 codeItem 的编号 - c1.cd_val_cn_mean.label("target_code_name_item"), # 当前 codeItem 的名称 - c4.cd_no.label("resource_code_num"), # 映射的父级代码编号 - c4.cd_val_cn_mean.label("resource_code_name"), # 映射的父级代码名称 - c3.cd_no.label("resource_code_num_item"), # 映射的父级代码编号 - c3.cd_val_cn_mean.label("resource_code_name_item") # 映射的父级代码名称 - ) - .select_from(c1) # 从 c1 开始查询 - .join(c2, c1.parent_id == c2.onum, isouter=True) # 连接 c2 - .join(c3, c1.code_map_id == c3.onum, isouter=True) # 连接 c3 - .join(c4, c3.parent_id == c4.onum, isouter=True) # 连接 c4 - .where(*filters) # 使用所有过滤条件 - .order_by(desc(c1.create_time)) # 按照创建时间降序排列 - ) - # 4. 分页逻辑 - col_list = await PageUtil.paginate( - db, query, query_object.page_num, query_object.page_size, is_page - ) - return col_list + # 构建查询条件 + filters = [] + # 系统级代码 + c1 = aliased(DataStdCode) # 当前 codeItem 表(c1) + c2 = aliased(DataStdCode) # 别名 c2 表示父级(parent) + c3 = aliased(DataStdCode) # 别名 c3 表示映射的代码 + c4 = aliased(DataStdCode) # 别名 c4 表示映射父级代码 + if query_object.parent_id: + if query_object.cd_type == 'sys': + filters.append(c1.parent_id == query_object.parent_id) + else: + filters.append(c3.parent_id == query_object.parent_id) + # 公司级代码 + # 2. 创建别名并进行连接 + filters.append(c1.class_id == 'codeItem') # class_id 为 'codeItem' + # 3. 构建基础查询,使用连接和别名 + query = ( + select( + c2.src_sys.label("target_sys_id"), # 父级系统编号 + c2.src_sys.label("target_sys_name"), # 父级系统名称 + c2.cd_no.label("target_code_num"), # 父级代码编号 + c2.cd_val_cn_mean.label("target_code_name"), # 父级代码名称 + c1.cd_no.label("target_code_num_item"), # 当前 codeItem 的编号 + c1.cd_val_cn_mean.label("target_code_name_item"), # 当前 codeItem 的名称 + c4.cd_no.label("resource_code_num"), # 映射的父级代码编号 + c4.cd_val_cn_mean.label("resource_code_name"), # 映射的父级代码名称 + c3.cd_no.label("resource_code_num_item"), # 映射的父级代码编号 + c3.cd_val_cn_mean.label("resource_code_name_item") # 映射的父级代码名称 + ) + .select_from(c1) # 从 c1 开始查询 + .join(c2, c1.parent_id == c2.onum, isouter=True) # 连接 c2 + .join(c3, c1.code_map_id == c3.onum, isouter=True) # 连接 c3 + .join(c4, c3.parent_id == c4.onum, isouter=True) # 连接 c4 + .where(*filters) # 使用所有过滤条件 + .order_by(desc(c1.create_time)) # 按照创建时间降序排列 + ) + # 4. 分页逻辑 + col_list = await PageUtil.paginate( + db, query, query_object.page_num, query_object.page_size, is_page + ) + return col_list + @classmethod - async def get_std_main_map_list(cls, db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False): - # 构建查询条件 - filters = [] - # 系统级代码 - c1 = aliased(DataStdMain) # - c2 = aliased(DataStdDict) # - - filters.append(c1.onum == query_object.onum) - - # 3. 构建基础查询,使用连接和别名 - query = ( - select( - c1.data_std_no.label("data_std_no"), # 标准编号 - c1.data_std_eng_name.label("data_std_eng_name"), # 标准英文名称 - c1.data_std_cn_name.label("data_std_cn_name"), # 标准中文名 - c2.data_dict_no.label("data_dict_no"), # 字典编号 - c2.data_dict_eng_name.label("data_dict_eng_name"), # 字典英文名称 - c2.data_dict_cn_name.label("data_dict_cn_name"), # 字典中文名 - ) - .select_from(c1) # 从 c1 开始查询 - .join(c2, c1.data_std_no == c2.data_std_no, isouter=True) # 连接 c2 - - .where(*filters) # 使用所有过滤条件 - .order_by(desc(c1.create_time)) # 按照创建时间降序排列 - ) - # 4. 分页逻辑 - col_list = await PageUtil.paginate( - db, query, query_object.page_num, query_object.page_size, is_page - ) - return col_list + async def get_std_main_map_list(cls, db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False): + # 构建查询条件 + filters = [] + # 系统级代码 + c1 = aliased(DataStdMain) # + c2 = aliased(DataStdDict) # + + filters.append(c1.onum == query_object.onum) + + # 3. 构建基础查询,使用连接和别名 + query = ( + select( + c1.data_std_no.label("data_std_no"), # 标准编号 + c1.data_std_eng_name.label("data_std_eng_name"), # 标准英文名称 + c1.data_std_cn_name.label("data_std_cn_name"), # 标准中文名 + c2.data_dict_no.label("data_dict_no"), # 字典编号 + c2.data_dict_eng_name.label("data_dict_eng_name"), # 字典英文名称 + c2.data_dict_cn_name.label("data_dict_cn_name"), # 字典中文名 + ) + .select_from(c1) # 从 c1 开始查询 + .join(c2, c1.data_std_no == c2.data_std_no, isouter=True) # 连接 c2 + + .where(*filters) # 使用所有过滤条件 + .order_by(desc(c1.create_time)) # 按照创建时间降序排列 + ) + # 4. 分页逻辑 + col_list = await PageUtil.paginate( + db, query, query_object.page_num, query_object.page_size, is_page + ) + return col_list + @classmethod async def get_data_code_list_by_info(cls, db: AsyncSession, query_object: DataStdCodeModel): List = ( await db.execute( select(DataStdCode) .where( - DataStdCode.cd_val_cn_mean == query_object.cd_val_cn_mean if query_object.cd_val_cn_mean else True, - DataStdCode.onum == query_object.onum if query_object.onum else True, - DataStdCode.cd_val_stat == query_object.cd_val_stat if query_object.cd_val_stat else True, - DataStdCode.src_sys == query_object.src_sys if query_object.src_sys else True, - DataStdCode.cd_type == query_object.cd_type if query_object.cd_type else True, - DataStdCode.code_map_id == query_object.code_map_id if query_object.code_map_id else True, - DataStdCode.parent_id == query_object.parent_id if query_object.parent_id else True, - DataStdCode.class_id == query_object.class_id if query_object.class_id else True + DataStdCode.cd_val_cn_mean == query_object.cd_val_cn_mean if query_object.cd_val_cn_mean else True, + DataStdCode.onum == query_object.onum if query_object.onum else True, + DataStdCode.cd_val_stat == query_object.cd_val_stat if query_object.cd_val_stat else True, + DataStdCode.src_sys == query_object.src_sys if query_object.src_sys else True, + DataStdCode.cd_type == query_object.cd_type if query_object.cd_type else True, + DataStdCode.code_map_id == query_object.code_map_id if query_object.code_map_id else True, + DataStdCode.parent_id == query_object.parent_id if query_object.parent_id else True, + DataStdCode.class_id == query_object.class_id if query_object.class_id else True ) ) ).scalars().all() return List + @classmethod async def get_data_code_by_info(cls, db: AsyncSession, query_object: DataStdCodeModel): List = ( await db.execute( select(DataStdCode) .where( - DataStdCode.cd_val_cn_mean == query_object.cd_val_cn_mean if query_object.cd_val_cn_mean else True, - DataStdCode.cd_no == query_object.cd_no if query_object.cd_no else True, - DataStdCode.cd_val_stat == query_object.cd_val_stat if query_object.cd_val_stat else True, - DataStdCode.src_sys == query_object.src_sys if query_object.src_sys else True, - DataStdCode.cd_type == query_object.cd_type if query_object.cd_type else True, - DataStdCode.parent_id == query_object.parent_id if query_object.parent_id else True, - DataStdCode.class_id == query_object.class_id if query_object.class_id else True + DataStdCode.cd_val_cn_mean == query_object.cd_val_cn_mean if query_object.cd_val_cn_mean else True, + DataStdCode.cd_no == query_object.cd_no if query_object.cd_no else True, + DataStdCode.cd_val_stat == query_object.cd_val_stat if query_object.cd_val_stat else True, + DataStdCode.src_sys == query_object.src_sys if query_object.src_sys else True, + DataStdCode.cd_type == query_object.cd_type if query_object.cd_type else True, + DataStdCode.parent_id == query_object.parent_id if query_object.parent_id else True, + DataStdCode.class_id == query_object.class_id if query_object.class_id else True ) ) ).scalars().first() return List + @classmethod async def get_std_code_by_id(cls, db: AsyncSession, Id: str): col = ( @@ -282,6 +293,7 @@ class DataStdDao: ) ).scalars().first() return col + @classmethod async def get_std_code_appr_by_id(cls, db: AsyncSession, Id: str): col = ( @@ -293,18 +305,18 @@ class DataStdDao: return col @classmethod - async def add_std_code(cls, db: AsyncSession,model:DataStdCodeModel): + async def add_std_code(cls, db: AsyncSession, model: DataStdCodeModel): col = DataStdCode( - **model.model_dump() + **model.model_dump() ) db.add(col) await db.flush() return col @classmethod - async def add_std_code_appr(cls, db: AsyncSession,model:DataStdCodeApprModel): + async def add_std_code_appr(cls, db: AsyncSession, model: DataStdCodeApprModel): col = DataStdCodeAppr( - **model.model_dump() + **model.model_dump() ) db.add(col) await db.flush() @@ -313,15 +325,16 @@ class DataStdDao: @classmethod async def delete_std_code(cls, db: AsyncSession, Id: str): await db.execute(delete(DataStdCode).where(DataStdCode.onum == Id)) + @classmethod async def update_std_code_appr(cls, db: AsyncSession, update_data: DataStdCodeApprModel): - + await db.execute(update(DataStdCodeAppr), [update_data]) await db.flush() - + @classmethod async def update_std_code(cls, db: AsyncSession, update_data: DataStdCodeModel): - + await db.execute(update(DataStdCode), [update_data]) await db.flush() @@ -341,6 +354,7 @@ class DataStdDao: return existing_code_item is not None return True + # ----------------------------------------------------------------数据字典---------------------------------------------------------------------------------------------------- @classmethod async def get_std_dict_list(cls, db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False): @@ -355,11 +369,11 @@ class DataStdDao: filters = [] if query_object.data_dict_cn_name: filters.append(or_( - DataStdDict.data_dict_cn_name.like(f"%{query_object.data_dict_cn_name}%"), - DataStdDict.data_dict_eng_name.like(f"%{query_object.data_dict_cn_name}%") + DataStdDict.data_dict_cn_name.like(f"%{query_object.data_dict_cn_name}%"), + DataStdDict.data_dict_eng_name.like(f"%{query_object.data_dict_cn_name}%") )) if query_object.data_dict_no: - filters.append(DataStdDict.data_dict_no.like(f"%{query_object.data_dict_no}%")) + filters.append(DataStdDict.data_dict_no.like(f"%{query_object.data_dict_no}%")) if query_object.data_dict_eng_name: filters.append(DataStdDict.data_dict_eng_name.like(f"%{query_object.data_dict_eng_name}%")) if query_object.data_dict_vest: @@ -374,30 +388,30 @@ class DataStdDao: # 构建查询语句 query = ( select(DataStdDict.onum, - DataStdDict.create_by, - DataStdDict.create_time, - DataStdDict.upd_prsn, - DataStdDict.upd_time, - DataStdDict.data_dict_no, - DataStdDict.data_dict_eng_name, - DataStdDict.data_dict_cn_name, - DataStdDict.data_dict_vest, - DataStdDict.data_dict_type, - DataStdDict.data_dict_data_type, - DataStdDict.src_sys, - DataStdDict.src_sys, - DataStdDict.data_dict_busi_mean, - DataStdDict.data_dict_data_type, - DataStdDict.data_std_no, - DataStdDict.data_dict_stat, - DataStdMain.data_std_cn_name.label("data_std_cn_name") , - DataStdMain.data_std_it_ownership_dept.label("data_std_it_ownership_dept") , - DataStdMain.data_std_busi_ownership_dept.label("data_std_busi_ownership_dept") , - DataStdMain.data_std_it_ownership_prsn.label("data_std_it_ownership_prsn") , - DataStdMain.data_std_busi_ownership_prsn.label("data_std_busi_ownership_prsn") - - ) - .outerjoin(DataStdMain, DataStdDict.data_std_no == DataStdMain.data_std_no) # 正确方向的左连接 + DataStdDict.create_by, + DataStdDict.create_time, + DataStdDict.upd_prsn, + DataStdDict.upd_time, + DataStdDict.data_dict_no, + DataStdDict.data_dict_eng_name, + DataStdDict.data_dict_cn_name, + DataStdDict.data_dict_vest, + DataStdDict.data_dict_type, + DataStdDict.data_dict_data_type, + DataStdDict.src_sys, + DataStdDict.src_sys, + DataStdDict.data_dict_busi_mean, + DataStdDict.data_dict_data_type, + DataStdDict.data_std_no, + DataStdDict.data_dict_stat, + DataStdMain.data_std_cn_name.label("data_std_cn_name"), + DataStdMain.data_std_it_ownership_dept.label("data_std_it_ownership_dept"), + DataStdMain.data_std_busi_ownership_dept.label("data_std_busi_ownership_dept"), + DataStdMain.data_std_it_ownership_prsn.label("data_std_it_ownership_prsn"), + DataStdMain.data_std_busi_ownership_prsn.label("data_std_busi_ownership_prsn") + + ) + .outerjoin(DataStdMain, DataStdDict.data_std_no == DataStdMain.data_std_no) # 正确方向的左连接 .where(*filters) .order_by(desc(DataStdDict.create_time)) # 按创建时间降序排序 @@ -407,7 +421,7 @@ class DataStdDao: db, query, query_object.page_num, query_object.page_size, is_page ) - return col_list + return col_list @classmethod async def get_std_dict_list_no_page(cls, db: AsyncSession, query: StdDictNoPageParam): @@ -438,11 +452,10 @@ class DataStdDao: list = (await db.execute(query)).fetchall() return list - @classmethod - async def add_std_dict(cls, db: AsyncSession,model:DataStdDictModel): + async def add_std_dict(cls, db: AsyncSession, model: DataStdDictModel): col = DataStdDict( - **model.model_dump() + **model.model_dump() ) db.add(col) await db.flush() @@ -451,29 +464,32 @@ class DataStdDao: @classmethod async def delete_std_dict(cls, db: AsyncSession, Id: str): await db.execute(delete(DataStdDict).where(DataStdDict.onum == Id)) + @classmethod async def get_std_dict_list_all(cls, db: AsyncSession, query_object: DataStdDict): - filters = [] - if query_object.data_std_no: - filters.append(DataStdDict.data_std_no.like(f"%{query_object.data_std_no}%")) - query = select(DataStdDict).where(*filters).order_by(desc(DataStdDict.create_time)) - return await PageUtil.paginate(db, query, 0, 0, False) + filters = [] + if query_object.data_std_no: + filters.append(DataStdDict.data_std_no.like(f"%{query_object.data_std_no}%")) + query = select(DataStdDict).where(*filters).order_by(desc(DataStdDict.create_time)) + return await PageUtil.paginate(db, query, 0, 0, False) + @classmethod async def get_data_dict_list_by_info(cls, db: AsyncSession, query_object: DataStdDictModel): List = ( await db.execute( select(DataStdDict) .where( - DataStdDict.data_std_no == query_object.data_std_no if query_object.data_std_no else True + DataStdDict.data_std_no == query_object.data_std_no if query_object.data_std_no else True ) ) ).scalars().all() return List + @classmethod async def update_std_dict(cls, db: AsyncSession, update_data: DataStdDictModel): - + await db.execute(update(DataStdDict), [update_data]) - await db.flush() + await db.flush() @classmethod async def get_std_dict_by_id(cls, db: AsyncSession, Id: str): @@ -483,25 +499,45 @@ class DataStdDao: .where(DataStdDict.onum == Id) ) ).scalars().first() - return col + return col + @classmethod async def get_data_dict_by_info(cls, db: AsyncSession, query_object: DataStdDictModel): List = ( await db.execute( select(DataStdDict) .where( - DataStdDict.data_dict_cn_name == query_object.data_dict_cn_name if query_object.data_dict_cn_name else True, - DataStdDict.data_dict_no == query_object.data_dict_no if query_object.data_dict_no else True, - DataStdDict.data_dict_stat == query_object.data_dict_stat if query_object.data_dict_stat else True, - DataStdDict.data_std_no == query_object.data_std_no if query_object.data_std_no else True, - DataStdDict.src_sys == query_object.src_sys if query_object.src_sys else True, - DataStdDict.data_dict_data_type == query_object.data_dict_data_type if query_object.data_dict_data_type else True, + DataStdDict.data_dict_cn_name == query_object.data_dict_cn_name if query_object.data_dict_cn_name else True, + DataStdDict.data_dict_no == query_object.data_dict_no if query_object.data_dict_no else True, + DataStdDict.data_dict_stat == query_object.data_dict_stat if query_object.data_dict_stat else True, + DataStdDict.data_std_no == query_object.data_std_no if query_object.data_std_no else True, + DataStdDict.src_sys == query_object.src_sys if query_object.src_sys else True, + DataStdDict.data_dict_data_type == query_object.data_dict_data_type if query_object.data_dict_data_type else True, ) ) ).scalars().first() return List + @classmethod async def get_data_dict_by_id(cls, db: AsyncSession, id: str): + List = ( + await db.execute( + select(DataStdMain.data_sec_lvl).select_from(DataStdMain) + .join( + DataStdDict, + and_( + DataStdDict.data_std_no == DataStdMain.data_std_no, + ), isouter=True + ) + .where( + DataStdDict.onum == id + ) + ) + ).scalars().first() + return List + + @classmethod + async def get_data_sec_lvl_by_dict_id(cls, db: AsyncSession, id: str): List = ( await db.execute( select(DataStdDict) @@ -511,8 +547,9 @@ class DataStdDao: ) ).scalars().first() return List + # 数据标准目录 - + @classmethod async def get_catalog_by_id(cls, db: AsyncSession, content_onum: int): """ @@ -523,7 +560,8 @@ class DataStdDao: :return: 目录信息对象 """ catalog_info = ( - (await db.execute(select(DataAstContent).where(DataAstContent.content_onum == content_onum , DataAstContent.content_stat == 1))) + (await db.execute(select(DataAstContent).where(DataAstContent.content_onum == content_onum, + DataAstContent.content_stat == 1))) .scalars() .first() ) @@ -579,7 +617,7 @@ class DataStdDao: ) ) ).alias('temp') - + stmt = ( update(DataAstContent) .where(DataAstContent.content_onum.in_(subquery)) @@ -600,7 +638,6 @@ class DataStdDao: db.add(db_catalog) await db.flush() - # 处理子关系(统一转换为 ORM 模型) for child in catalog2.get('children', []): # 如果是 Pydantic 模型实例,先转换为字典 @@ -615,11 +652,12 @@ class DataStdDao: processed_child = dict(child_dict) processed_child['content_onum'] = db_catalog.content_onum db_child = DataAstContentRela(**processed_child) - + db.add(db_child) await db.flush() return db_catalog + @classmethod async def edit_catalog_leaf_dao(cls, db: AsyncSession, catalog: dict): """ @@ -637,8 +675,9 @@ class DataStdDao: leaf_node_flag=catalog['leaf_node_flag'] ) ) - + await db.execute(stmt) + @classmethod async def edit_catalog_child_dao(cls, db: AsyncSession, catalog: dict): """ @@ -662,7 +701,7 @@ class DataStdDao: leaf_node_flag=catalog['leaf_node_flag'], upd_prsn=catalog['upd_prsn'], upd_time=datetime.now() - ) ) + )) await db.execute(stmt) @@ -680,7 +719,7 @@ class DataStdDao: rela_eff_begn_date=child.get('rela_eff_begn_date'), rela_eff_end_date=child.get('rela_eff_end_date'), upd_prsn=child.get('upd_prsn')) - ) + ) await db.execute(st) await cls.update_leaf_node_flag(db) @@ -690,7 +729,7 @@ class DataStdDao: db.add(db_child) await db.flush() await cls.update_leaf_node_flag(db) - + @classmethod async def delete_catalog_dao(cls, db: AsyncSession, catalog: DeleteDataCatalogModel): """ @@ -708,7 +747,7 @@ class DataStdDao: .values( rela_status=0, rela_eff_end_date=datetime.now() - ) + ) ) await db.execute( update(DataAstContent) @@ -716,10 +755,9 @@ class DataStdDao: .values( content_stat=0, upd_time=datetime.now() - ) + ) ) - await cls.update_leaf_node_flag(db) @classmethod @@ -735,15 +773,16 @@ class DataStdDao: stmt = ( update(DataAstContent) - .where(DataAstContent.content_onum == moved_catalog_data['content_onum'] , DataAstContent.supr_content_onum == moved_catalog_data['supr_content_onum']) + .where(DataAstContent.content_onum == moved_catalog_data['content_onum'], + DataAstContent.supr_content_onum == moved_catalog_data['supr_content_onum']) .values( supr_content_onum=moved_catalog_data['supr_content_onum_after'], upd_time=datetime.now() - ) ) + )) await db.execute(stmt) await cls.update_leaf_node_flag(db) - + @classmethod async def merge_catalog_instr_dao(cls, db: AsyncSession, merge_catalog_data: dict): """ @@ -766,7 +805,8 @@ class DataStdDao: # await db.execute(stmt) stmt1 = ( update(DataAstContentRela) - .where( DataAstContentRela.content_onum == merge_catalog_data['content_onum'] and DataAstContentRela.rela_status == 1 ) + .where(DataAstContentRela.content_onum == merge_catalog_data[ + 'content_onum'] and DataAstContentRela.rela_status == 1) .values( content_onum=merge_catalog_data['content_onum_after'], rela_eff_begn_date=datetime.now() @@ -776,12 +816,14 @@ class DataStdDao: stmt2 = ( update(DataAstContent) - .where(DataAstContent.content_onum == merge_catalog_data['content_onum'] , DataAstContent.supr_content_onum == merge_catalog_data['supr_content_onum']) - .values( content_stat = '0' ) + .where(DataAstContent.content_onum == merge_catalog_data['content_onum'], + DataAstContent.supr_content_onum == merge_catalog_data['supr_content_onum']) + .values(content_stat='0') ) await db.execute(stmt2) await cls.update_leaf_node_flag(db) + @classmethod async def removerel_data_ast_catalog_dao(cls, db: AsyncSession, removerel_catalog_data: dict): """ @@ -794,14 +836,14 @@ class DataStdDao: stmt = ( update(DataAstContentRela) - .where(DataAstContentRela.rela_onum == removerel_catalog_data['rela_onum'] , DataAstContentRela.content_onum == removerel_catalog_data['content_onum']) + .where(DataAstContentRela.rela_onum == removerel_catalog_data['rela_onum'], + DataAstContentRela.content_onum == removerel_catalog_data['content_onum']) .values( rela_status=removerel_catalog_data['rela_status'] - ) ) + )) await db.execute(stmt) await cls.update_leaf_node_flag(db) - @classmethod async def moverel_data_ast_catalog_dao(cls, db: AsyncSession, moverel_catalog_data: dict): @@ -815,16 +857,19 @@ class DataStdDao: stmt = ( update(DataAstContentRela) - .where(DataAstContentRela.rela_onum == moverel_catalog_data['rela_onum'] , DataAstContentRela.content_onum == moverel_catalog_data['content_onum']) + .where(DataAstContentRela.rela_onum == moverel_catalog_data['rela_onum'], + DataAstContentRela.content_onum == moverel_catalog_data['content_onum']) .values( content_onum=moverel_catalog_data['content_onum_after'], rela_eff_end_date=datetime.now() - ) ) + )) await db.execute(stmt) - await cls.update_leaf_node_flag(db) + await cls.update_leaf_node_flag(db) + @classmethod - async def get_catalog_list(cls, db: AsyncSession, query_object: DataCatalogPageQueryModel, user_id: int, is_page: bool = False): + async def get_catalog_list(cls, db: AsyncSession, query_object: DataCatalogPageQueryModel, user_id: int, + is_page: bool = False): """ 根据查询参数获取数据资产目录列表 @@ -834,11 +879,11 @@ class DataStdDao: :return: 数据资产目录分页列表 """ - # 修改子查询部分 subquery_t1 = ( select(DataAstContentRela) - .where(DataAstContentRela.upd_prsn == query_object.upd_prsn, DataAstContentRela.content_onum == '2' and DataAstContentRela.rela_status == '1') + .where(DataAstContentRela.upd_prsn == query_object.upd_prsn, + DataAstContentRela.content_onum == '2' and DataAstContentRela.rela_status == '1') .union_all( select(DataAstContentRela) .where(DataAstContentRela.content_onum != '2' and DataAstContentRela.rela_status == '1') @@ -856,13 +901,13 @@ class DataStdDao: DataAstContent.leaf_node_flag, DataAstContent.upd_prsn, DataAstContent.upd_time, - + subquery_t1.c.rela_onum, # 明确指定子查询的字段 subquery_t1.c.ast_onum, subquery_t1.c.rela_type, subquery_t1.c.rela_eff_begn_date, subquery_t1.c.rela_eff_end_date, - subquery_t1.c.upd_prsn, + subquery_t1.c.upd_prsn, ) .distinct() .select_from(DataAstContent) @@ -873,15 +918,16 @@ class DataStdDao: # 使用分页工具进行查询 data_ast_list = await PageUtil.paginate( - db, - query, + db, + query, page_num=query_object.page_num, page_size=query_object.page_size, is_page=is_page ) return data_ast_list -#------------------------------------------------------------数据标准(658行)------------------------------------------------------------------------------------------------- + + # ------------------------------------------------------------数据标准(658行)------------------------------------------------------------------------------------------------- @classmethod async def get_std_main_list(cls, db: AsyncSession, query_object: DataStdMainModel, is_page: bool = False): filters = [] @@ -889,11 +935,11 @@ class DataStdDao: filters.append(DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_cn_name}%")) if query_object.data_std_eng_name: filters.append( - or_( - DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_eng_name}%"), - DataStdMain.data_std_eng_name.like(f"%{query_object.data_std_eng_name}%") - ) - ) + or_( + DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_eng_name}%"), + DataStdMain.data_std_eng_name.like(f"%{query_object.data_std_eng_name}%") + ) + ) if query_object.data_std_busi_defn: filters.append(DataStdMain.data_std_busi_defn.like(f"%{query_object.data_std_busi_defn}%")) if query_object.data_std_no: @@ -906,114 +952,120 @@ class DataStdDao: filters.append(DataStdMain.std_status == query_object.std_status) if query_object.belt_data_std_content: filters.append(DataStdMain.belt_data_std_content == query_object.belt_data_std_content) - + query = ( - select( - DataStdMain.onum, - DataStdMain.create_by, - DataStdMain.create_time, - DataStdMain.upd_prsn, - DataStdMain.upd_time, - DataStdMain.data_std_no, - DataStdMain.data_std_eng_name, - DataStdMain.data_std_cn_name, - DataStdMain.data_std_type, - DataStdMain.data_sec_lvl, - DataStdMain.src_sys, - DataStdMain.data_std_vest, - DataStdMain.data_std_busi_defn, - DataStdMain.cd_id, - DataStdMain.std_status, - DataStdMain.data_std_busi_ownership_dept, - DataStdMain.data_std_it_ownership_dept, - DataStdMain.data_std_busi_ownership_prsn, - DataStdMain.data_std_it_ownership_prsn, - DataStdMain.belt_data_std_content, - DataStdMain.data_std_src, - DataStdMain.data_clas, - DataStdMain.typical_fld, - DataStdCode.cd_no.label("cd_no") # 关联查询的cd_no - ) - .outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据 - DataStdCode, - DataStdMain.cd_id == DataStdCode.onum - ) - .where(*filters) - .order_by(desc(DataStdMain.create_time)) - ) + select( + DataStdMain.onum, + DataStdMain.create_by, + DataStdMain.create_time, + DataStdMain.upd_prsn, + DataStdMain.upd_time, + DataStdMain.data_std_no, + DataStdMain.data_std_eng_name, + DataStdMain.data_std_cn_name, + DataStdMain.data_std_type, + DataStdMain.data_sec_lvl, + DataStdMain.src_sys, + DataStdMain.data_std_vest, + DataStdMain.data_std_busi_defn, + DataStdMain.cd_id, + DataStdMain.std_status, + DataStdMain.data_std_busi_ownership_dept, + DataStdMain.data_std_it_ownership_dept, + DataStdMain.data_std_busi_ownership_prsn, + DataStdMain.data_std_it_ownership_prsn, + DataStdMain.belt_data_std_content, + DataStdMain.data_std_src, + DataStdMain.data_clas, + DataStdMain.typical_fld, + DataStdCode.cd_no.label("cd_no") # 关联查询的cd_no + ) + .outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据 + DataStdCode, + DataStdMain.cd_id == DataStdCode.onum + ) + .where(*filters) + .order_by(desc(DataStdMain.create_time)) + ) return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) + @classmethod async def get_std_main_list_all(cls, db: AsyncSession, query_object: DataStdMainModel): - filters = [] - - if query_object.data_std_cn_name: - filters.append(DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_cn_name}%")) - if query_object.data_std_no: - filters.append(DataStdMain.data_std_no.like(f"%{query_object.data_std_no}%")) - if query_object.src_sys: - filters.append(DataStdMain.src_sys == query_object.src_sys) - if query_object.cd_id: - filters.append(DataStdMain.cd_id == query_object.cd_id) - if query_object.data_std_type: - filters.append(DataStdMain.data_std_type == query_object.data_std_type) - if query_object.std_status: - filters.append(DataStdMain.std_status == query_object.std_status) - query = ( - select( - DataStdMain.onum, - DataStdMain.create_by, - DataStdMain.create_time, - DataStdMain.upd_prsn, - DataStdMain.upd_time, - DataStdMain.data_std_no, - DataStdMain.data_std_eng_name, - DataStdMain.data_std_cn_name, - DataStdMain.data_std_type, - DataStdMain.data_sec_lvl, - DataStdMain.src_sys, - DataStdMain.data_std_vest, - DataStdMain.data_std_busi_defn, - DataStdMain.cd_id, - DataStdMain.std_status, - DataStdMain.data_std_busi_ownership_dept, - DataStdMain.data_std_it_ownership_dept, - DataStdMain.data_std_busi_ownership_prsn, - DataStdMain.data_std_it_ownership_prsn, - DataStdMain.belt_data_std_content, - DataStdMain.data_std_src, - DataStdMain.data_clas, - DataStdMain.typical_fld, - DataStdCode.cd_no.label("cd_no") # 关联查询的cd_no - ) - .outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据 - DataStdCode, - DataStdMain.cd_id == DataStdCode.onum + filters = [] + + if query_object.data_std_cn_name: + filters.append(DataStdMain.data_std_cn_name.like(f"%{query_object.data_std_cn_name}%")) + if query_object.data_std_no: + filters.append(DataStdMain.data_std_no.like(f"%{query_object.data_std_no}%")) + if query_object.src_sys: + filters.append(DataStdMain.src_sys == query_object.src_sys) + if query_object.cd_id: + filters.append(DataStdMain.cd_id == query_object.cd_id) + if query_object.data_std_type: + filters.append(DataStdMain.data_std_type == query_object.data_std_type) + if query_object.std_status: + filters.append(DataStdMain.std_status == query_object.std_status) + query = ( + select( + DataStdMain.onum, + DataStdMain.create_by, + DataStdMain.create_time, + DataStdMain.upd_prsn, + DataStdMain.upd_time, + DataStdMain.data_std_no, + DataStdMain.data_std_eng_name, + DataStdMain.data_std_cn_name, + DataStdMain.data_std_type, + DataStdMain.data_sec_lvl, + DataStdMain.src_sys, + DataStdMain.data_std_vest, + DataStdMain.data_std_busi_defn, + DataStdMain.cd_id, + DataStdMain.std_status, + DataStdMain.data_std_busi_ownership_dept, + DataStdMain.data_std_it_ownership_dept, + DataStdMain.data_std_busi_ownership_prsn, + DataStdMain.data_std_it_ownership_prsn, + DataStdMain.belt_data_std_content, + DataStdMain.data_std_src, + DataStdMain.data_clas, + DataStdMain.typical_fld, + DataStdCode.cd_no.label("cd_no") # 关联查询的cd_no + ) + .outerjoin( # 使用left outer join确保即使没有关联code也能返回主表数据 + DataStdCode, + DataStdMain.cd_id == DataStdCode.onum + ) + .where(*filters) + .order_by(desc(DataStdMain.create_time)) ) - .where(*filters) - .order_by(desc(DataStdMain.create_time)) - ) - return await PageUtil.paginate(db, query, 0, 0, False) + return await PageUtil.paginate(db, query, 0, 0, False) + @classmethod async def add_std_main(cls, db: AsyncSession, model: DataStdMainModel): col = DataStdMain(**model.model_dump()) db.add(col) await db.flush() return col + @classmethod async def add_std_main_appr(cls, db: AsyncSession, model: DataStdMainApprModel): col = DataStdMainAppr(**model.model_dump()) db.add(col) await db.flush() return col + @classmethod async def add_std_dict_appr(cls, db: AsyncSession, model: DataStdDictApprModel): col = DataStdDictAppr(**model.model_dump()) db.add(col) await db.flush() return col + @classmethod async def delete_std_main(cls, db: AsyncSession, Id: str): await db.execute(delete(DataStdMain).where(DataStdMain.onum == Id)) + @classmethod async def delete_std_dict_appr(cls, db: AsyncSession, Id: str): await db.execute(delete(DataStdDictAppr).where(DataStdDictAppr.onum == Id)) @@ -1023,17 +1075,18 @@ class DataStdDao: update_dict = update_data.model_dump(exclude_unset=True) await db.execute(update(DataStdMain), [update_dict]) await db.flush() + @classmethod async def update_std_dict_appr(cls, db: AsyncSession, update_data: DataStdDictApprModel): update_dict = update_data.model_dump(exclude_unset=True) await db.execute(update(DataStdDictAppr), [update_dict]) await db.flush() - + @classmethod async def get_std_main_by_id(cls, db: AsyncSession, Id: str): col = await db.execute(select(DataStdMain).where(DataStdMain.onum == Id)) return col.scalars().first() - + @classmethod async def get_data_main_by_info(cls, db: AsyncSession, query_object: DataStdMainModel): col = await db.execute( @@ -1048,50 +1101,54 @@ class DataStdDao: ) ) return col.scalars().first() + @classmethod async def get_std_main_appr_list_all(cls, db: AsyncSession, query_object: DataStdMainApprModel): - filters = [] - - if query_object.data_std_cn_name: - filters.append(DataStdMainAppr.data_std_cn_name.like(f"%{query_object.data_std_cn_name}%")) - if query_object.data_std_no: - filters.append(DataStdMainAppr.data_std_no.like(f"%{query_object.data_std_no}%")) - if query_object.src_sys: - filters.append(DataStdMainAppr.src_sys == query_object.src_sys) - if query_object.cd_id: - filters.append(DataStdMainAppr.cd_id == query_object.cd_id) - if query_object.flowId: - filters.append(DataStdMainAppr.flowId == query_object.flowId) - if query_object.data_std_type: - filters.append(DataStdMainAppr.data_std_type == query_object.data_std_type) - if query_object.std_status: - filters.append(DataStdMainAppr.std_status == query_object.std_status) - query = select(DataStdMainAppr).where(*filters).order_by(desc(DataStdMainAppr.create_time)) - return await PageUtil.paginate(db, query, 0, 0, False) - + filters = [] + + if query_object.data_std_cn_name: + filters.append(DataStdMainAppr.data_std_cn_name.like(f"%{query_object.data_std_cn_name}%")) + if query_object.data_std_no: + filters.append(DataStdMainAppr.data_std_no.like(f"%{query_object.data_std_no}%")) + if query_object.src_sys: + filters.append(DataStdMainAppr.src_sys == query_object.src_sys) + if query_object.cd_id: + filters.append(DataStdMainAppr.cd_id == query_object.cd_id) + if query_object.flowId: + filters.append(DataStdMainAppr.flowId == query_object.flowId) + if query_object.data_std_type: + filters.append(DataStdMainAppr.data_std_type == query_object.data_std_type) + if query_object.std_status: + filters.append(DataStdMainAppr.std_status == query_object.std_status) + query = select(DataStdMainAppr).where(*filters).order_by(desc(DataStdMainAppr.create_time)) + return await PageUtil.paginate(db, query, 0, 0, False) + @classmethod - async def get_std_main_appr_list(cls, flowId:str,db: AsyncSession): - filters = [] - filters.append(DataStdMainAppr.flowId == flowId) - query = select(DataStdMainAppr).where(*filters).order_by(desc(DataStdMainAppr.create_time)) - return await PageUtil.paginate(db, query, 0, 0, False) + async def get_std_main_appr_list(cls, flowId: str, db: AsyncSession): + filters = [] + filters.append(DataStdMainAppr.flowId == flowId) + query = select(DataStdMainAppr).where(*filters).order_by(desc(DataStdMainAppr.create_time)) + return await PageUtil.paginate(db, query, 0, 0, False) + @classmethod - async def get_std_dict_appr_list(cls, flowId:str,db: AsyncSession): - filters = [] - filters.append(DataStdDictAppr.flowId == flowId) - query = select(DataStdDictAppr).where(*filters).order_by(desc(DataStdDictAppr.create_time)) - return await PageUtil.paginate(db, query, 0, 0, False) - + async def get_std_dict_appr_list(cls, flowId: str, db: AsyncSession): + filters = [] + filters.append(DataStdDictAppr.flowId == flowId) + query = select(DataStdDictAppr).where(*filters).order_by(desc(DataStdDictAppr.create_time)) + return await PageUtil.paginate(db, query, 0, 0, False) + @classmethod async def get_std_main_appr_by_id(cls, db: AsyncSession, Id: str): col = await db.execute(select(DataStdMainAppr).where(DataStdMainAppr.onum == Id)) - return col.scalars().first() + return col.scalars().first() + @classmethod async def get_std_dict_appr_by_id(cls, db: AsyncSession, Id: str): col = await db.execute(select(DataStdDictAppr).where(DataStdDictAppr.onum == Id)) - return col.scalars().first() + return col.scalars().first() + @classmethod - async def get_last_std_main_appr_by_id(cls,db: AsyncSession, Id: str ): + async def get_last_std_main_appr_by_id(cls, db: AsyncSession, Id: str): result = await db.execute( select(DataStdMainAppr) .where( @@ -1102,8 +1159,9 @@ class DataStdDao: .limit(1) ) return result.scalar_one_or_none() + @classmethod - async def get_last_std_dict_appr_by_id(cls,db: AsyncSession, Id: str ): + async def get_last_std_dict_appr_by_id(cls, db: AsyncSession, Id: str): result = await db.execute( select(DataStdDictAppr) .where( @@ -1114,7 +1172,7 @@ class DataStdDao: .limit(1) ) return result.scalar_one_or_none() - + @classmethod async def update_std_main_appr(cls, db: AsyncSession, update_data: DataStdMainApprModel): update_dict = update_data.model_dump(exclude_unset=True) @@ -1134,13 +1192,13 @@ class DataStdDao: ) result = await db.execute(query) first_record = result.scalars().first() - + if not first_record: return None # 或 raise 自定义异常,例如“未找到审批记录” - + # 2. 获取 instid,去 FlowApproval 中查询是否存在 pending 或 waiting 状态 instid = first_record.flowId - + approval_query = ( select(FlowApproval) .where( @@ -1150,9 +1208,10 @@ class DataStdDao: ) approval_result = await db.execute(approval_query) approval = approval_result.scalars().first() - + # 返回 FlowApproval 对象或布尔值 return approval # 或 return approval is not None + @classmethod async def check_std_dict_waiting(cls, oldInstId: str, db: AsyncSession): """ @@ -1166,13 +1225,13 @@ class DataStdDao: ) result = await db.execute(query) first_record = result.scalars().first() - + if not first_record: return None # 或 raise 自定义异常,例如“未找到审批记录” - + # 2. 获取 instid,去 FlowApproval 中查询是否存在 pending 或 waiting 状态 instid = first_record.flowId - + approval_query = ( select(FlowApproval) .where( @@ -1182,8 +1241,6 @@ class DataStdDao: ) approval_result = await db.execute(approval_query) approval = approval_result.scalars().first() - + # 返回 FlowApproval 对象或布尔值 return approval # 或 return approval is not None - - \ No newline at end of file diff --git a/vue-fastapi-backend/module_admin/dao/meta_dao.py b/vue-fastapi-backend/module_admin/dao/meta_dao.py index aad3405..e186802 100644 --- a/vue-fastapi-backend/module_admin/dao/meta_dao.py +++ b/vue-fastapi-backend/module_admin/dao/meta_dao.py @@ -178,6 +178,7 @@ class MetaDao: MetadataFldSuppInfo.fld_clas, MetadataFldSuppInfo.fld_null_rate, MetadataFldSuppInfo.data_dict_id, + MetadataFldSuppInfo.data_sec_lvl, DataStdDict.data_dict_cn_name.label('data_dict_name'), MetadataFldSuppInfo.rec_stat.label('supp_rec_stat'), MetadataFldSuppInfo.upd_time.label('supp_upd_time') @@ -329,6 +330,7 @@ class MetaDao: "fld_clas": vett_info.fld_clas, "fld_null_rate": vett_info.fld_null_rate, "data_dict_id": vett_info.data_dict_id, + "data_sec_lvl": vett_info.data_sec_lvl, "rec_stat": vett_info.rec_stat, "upd_time": vett_info.upd_time, "rec_subm_prsn": vett_info.rec_subm_prsn, @@ -389,6 +391,7 @@ class MetaDao: fld_clas=column.fld_clas, fld_null_rate=column.fld_null_rate, data_dict_id=column.data_dict_id, + data_sec_lvl=column.data_sec_lvl, rec_stat=column.rec_stat, upd_time=column.upd_time if column.upd_time else datetime.now(), ) @@ -409,6 +412,7 @@ class MetaDao: suppColumn.fld_clas = column.fld_clas suppColumn.fld_null_rate = column.fld_null_rate suppColumn.data_dict_id = column.data_dict_id + suppColumn.data_sec_lvl = column.data_sec_lvl suppColumn.rec_stat = column.rec_stat suppColumn.upd_time = column.upd_time db.add(suppColumn) 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 e9068df..620a4c2 100644 --- a/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py +++ b/vue-fastapi-backend/module_admin/dao/metadata_config_dao.py @@ -1,9 +1,10 @@ from datetime import datetime, time -from sqlalchemy import delete, select, update,and_ +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 ,\ -TaskBizConfigRela,TaskBizConfig +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, \ + TaskBizConfigRela, TaskBizConfig # ORM 类 from typing import List @@ -11,6 +12,7 @@ from sqlalchemy.orm import joinedload from sqlalchemy.sql import true from utils.page_util import PageUtil + class MetadataConfigDao: """ 标签信息数据库操作层 @@ -37,6 +39,7 @@ class MetadataConfigDao: ) ) return result.scalars().first() + @classmethod async def get_clas_by_onum(cls, db: AsyncSession, clas_onum: int): """ @@ -55,7 +58,8 @@ class MetadataConfigDao: query = select(MetadataClas).where( MetadataClas.clas_pri_clas.like(f"%{query_object.clas_pri_clas}%") if query_object.clas_pri_clas else True, MetadataClas.clas_scd_clas.like(f"%{query_object.clas_scd_clas}%") if query_object.clas_scd_clas else True, - MetadataClas.clas_thre_clas.like(f"%{query_object.clas_thre_clas}%") if query_object.clas_thre_clas else True, + MetadataClas.clas_thre_clas.like( + f"%{query_object.clas_thre_clas}%") if query_object.clas_thre_clas else True, MetadataClas.clas_name.like(f"%{query_object.clas_name}%") if query_object.clas_name else True, MetadataClas.clas_eff_flag == query_object.clas_eff_flag if query_object.clas_eff_flag else True, MetadataClas.upd_time.between( @@ -94,6 +98,7 @@ class MetadataConfigDao: 删除标签信息(支持批量) """ await db.execute(delete(MetadataClas).where(MetadataClas.clas_onum.in_(clas_onum_list))) + @classmethod async def get_sec_detail_by_id(cls, db: AsyncSession, onum: str): result = await db.execute(select(MetadataSec).where(MetadataSec.onum == onum)) @@ -102,7 +107,8 @@ class MetadataConfigDao: @classmethod async def get_metadata_sec_list(cls, db: AsyncSession, query_object, is_page: bool = False): query = select(MetadataSec).where( - MetadataSec.sec_level_name.like(f"%{query_object.sec_level_name}%") if query_object.sec_level_name else True, + MetadataSec.sec_level_name.like( + f"%{query_object.sec_level_name}%") if query_object.sec_level_name else True, MetadataSec.sec_eff_flag == query_object.sec_eff_flag if query_object.sec_eff_flag else True, MetadataSec.upd_time.between( datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(0, 0, 0)), @@ -113,12 +119,19 @@ class MetadataConfigDao: 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_metadata_sec_option_list(cls, db: AsyncSession): + query = select(MetadataSec).where(MetadataSec.sec_eff_flag == '1').order_by(MetadataSec.sec_level_summary) + result = (await db.execute(query)).scalars().all() + return result + @classmethod async def add_metadata_sec_dao(cls, db: AsyncSession, sec): db_sec = MetadataSec(**sec.model_dump()) db.add(db_sec) await db.flush() - return db_sec + return db_sec + @classmethod async def get_by_sec_level_summary(cls, query_db: AsyncSession, sec_level_summary: str, exclude_onum: str = None): stmt = select(MetadataSec).where(MetadataSec.sec_level_summary == sec_level_summary) @@ -136,7 +149,8 @@ class MetadataConfigDao: @classmethod async def delete_metadata_sec_dao(cls, db: AsyncSession, onum_list: list[str]): await db.execute(delete(MetadataSec).where(MetadataSec.onum.in_(onum_list))) - # ------------- t_secu_biz_config 相关方法 -------------- + + # ------------- t_secu_biz_config 相关方法 -------------- @classmethod async def get_biz_config_detail_by_id(cls, db: AsyncSession, onum: int): @@ -173,6 +187,7 @@ class MetadataConfigDao: @classmethod async def delete_biz_config(cls, db: AsyncSession, onum_list: list[int]): await db.execute(delete(SecuBizConfig).where(SecuBizConfig.onum.in_(onum_list))) + @classmethod async def add_biz_permi_config_batch(cls, db: AsyncSession, records: List[SecuBizPermiConfig]): orm_objs = [] @@ -190,6 +205,7 @@ class MetadataConfigDao: ) orm_objs.append(orm_obj) db.add_all(orm_objs) + # ------------- t_secu_biz_permi_config 相关方法 -------------- @classmethod @@ -247,6 +263,7 @@ class MetadataConfigDao: return await PageUtil.paginate( db, query, query_object.page_num, query_object.page_size, is_page ) + @classmethod async def add_biz_permi_config(cls, db: AsyncSession, obj): db_obj = SecuBizPermiConfig(**obj.model_dump()) @@ -262,26 +279,31 @@ class MetadataConfigDao: @classmethod async def delete_biz_permi_config(cls, db: AsyncSession, onum_list: list[int]): - await db.execute(delete(SecuBizPermiConfig).where(SecuBizPermiConfig.onum.in_(onum_list))) -# ----------------------------------biz_confg_rela------------------------------ + await db.execute(delete(SecuBizPermiConfig).where(SecuBizPermiConfig.onum.in_(onum_list))) + + # ----------------------------------biz_confg_rela------------------------------ @classmethod async def delete_biz_rela_dao(cls, db: AsyncSession, biz_onum: int): - await db.execute(delete(SecuBizConfigRela).where(SecuBizConfigRela.biz_onum == biz_onum) ) + 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)) ) + 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() + await db.flush() + @classmethod async def get_biz_rela_by_biz_id(cls, db: AsyncSession, biz_onum: int): result = await db.execute( select(MetadataExtractInfo) .join(SecuBizConfigRela, MetadataExtractInfo.onum == SecuBizConfigRela.tab_onum) .where(SecuBizConfigRela.biz_onum == biz_onum) - ) - return result.scalars().all() + ) + return result.scalars().all() + @classmethod async def get_detail_by_id(cls, db: AsyncSession, onum: int): """ @@ -332,8 +354,9 @@ class MetadataConfigDao: """ 批量删除任务配置 """ - await db.execute(delete(DatasecConfig).where(DatasecConfig.onum.in_(onum_list))) -# ----------------------------------元数据标签调度------------------------------ + 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( @@ -398,4 +421,4 @@ class MetadataConfigDao: .join(TaskBizConfigRela, MetadataExtractInfo.onum == TaskBizConfigRela.tab_onum) .where(TaskBizConfigRela.biz_onum == biz_onum) ) - return result.scalars().all() \ No newline at end of file + return result.scalars().all() diff --git a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py index 25951ab..b0e85dc 100644 --- a/vue-fastapi-backend/module_admin/entity/do/datastd_do.py +++ b/vue-fastapi-backend/module_admin/entity/do/datastd_do.py @@ -1,8 +1,9 @@ -from sqlalchemy import Column, Integer, String, DateTime,Text, DateTime,Date, BigInteger +from sqlalchemy import Column, Integer, String, DateTime, Text, DateTime, Date, BigInteger from config.database import Base from datetime import datetime from sqlalchemy.dialects.mysql import MEDIUMTEXT + # 数据标准模块相关表 class DataStdCode(Base): @@ -23,7 +24,8 @@ class DataStdCode(Base): src_sys = Column(String(50), default=None, comment='归属系统') class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)') parent_id = Column(String(50), default=None, comment='父id') - code_map_id = Column(String(50), default=None,comment='标准代码Id') + code_map_id = Column(String(50), default=None, comment='标准代码Id') + class DataStdCodeAppr(Base): """ @@ -43,19 +45,21 @@ class DataStdCodeAppr(Base): src_sys = Column(String(50), default=None, comment='归属系统') class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)') parent_id = Column(String(50), default=None, comment='父id') - code_map_id = Column(String(50), default=None,comment='标准代码Id') - changeType = Column(String(10), default=None, comment='变更类型') - flowId = Column(String(50), default=None, comment='审批Id') - oldInstId = Column(String(50), default=None, comment='原始正式id') - compareId = Column(String(50), default=None, comment='原始数据id(用于对比差异)') - approStatus = Column(String(10), default=None, comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)') + code_map_id = Column(String(50), default=None, comment='标准代码Id') + changeType = Column(String(10), default=None, comment='变更类型') + flowId = Column(String(50), default=None, comment='审批Id') + oldInstId = Column(String(50), default=None, comment='原始正式id') + compareId = Column(String(50), default=None, comment='原始数据id(用于对比差异)') + approStatus = Column(String(10), default=None, + comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)') + class DataStdDict(Base): """ 标准字典表 (Standard Code Table) """ __tablename__ = 't_data_dict' # 表名为 t_datastd_dict - + onum = Column(String(50), primary_key=True, comment='标准代码Id') create_by = Column(String(20), default='', comment='创建者') create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') @@ -73,12 +77,13 @@ class DataStdDict(Base): src_sys_tab_fld_name = Column(MEDIUMTEXT, default=None, comment='来源系统表字段名') data_dict_stat = Column(String(1), default=None, comment='字典状态(1:有效 0:无效)') + class DataStdDictAppr(Base): """ 标准字典审批表 (Standard Code Table) """ __tablename__ = 't_data_dict_appr' # 表名为 t_datastd_dict - + onum = Column(String(50), primary_key=True, comment='标准代码Id') create_by = Column(String(20), default='', comment='创建者') create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') @@ -95,15 +100,17 @@ class DataStdDictAppr(Base): data_dict_stat = Column(String(1), default=None, comment='字典状态(1:有效 0:无效)') data_dict_data_type = Column(String(100), default=None, comment='数据类型') src_sys_tab_fld_name = Column(MEDIUMTEXT, default=None, comment='来源系统表字段名') - changeType = Column(String(10), default=None, comment='变更类型') - flowId = Column(String(50), default=None, comment='审批Id') - oldInstId = Column(String(50), default=None, comment='原始正式id') - compareId = Column(String(50), default=None, comment='原始数据id(用于对比差异)') - approStatus = Column(String(10), default=None, comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)') + changeType = Column(String(10), default=None, comment='变更类型') + flowId = Column(String(50), default=None, comment='审批Id') + oldInstId = Column(String(50), default=None, comment='原始正式id') + compareId = Column(String(50), default=None, comment='原始数据id(用于对比差异)') + approStatus = Column(String(10), default=None, + comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)') + class DataAstContent(Base): __tablename__ = "t_data_std_content" - + content_onum = Column(Integer, primary_key=True, autoincrement=True, comment='目录序号') content_name = Column(String(255), nullable=False, comment='目录名称') content_stat = Column(String(10), nullable=False, comment='目录状态(有效/废弃/停用)') @@ -115,11 +122,9 @@ class DataAstContent(Base): upd_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间') - - class DataAstContentRela(Base): __tablename__ = "t_data_std_content_rela" - + rela_onum = Column(Integer, primary_key=True, autoincrement=True, comment='关系序号') content_onum = Column(Integer, nullable=False, comment='目录序号') ast_onum = Column(Integer, nullable=False, comment='资产序号') @@ -128,14 +133,14 @@ class DataAstContentRela(Base): rela_eff_end_date = Column(Date, nullable=True, comment='关系生效结束日期') upd_prsn = Column(String(255), nullable=False, comment='更新人员') rela_status = Column(String(18), nullable=True, comment='关系状态') - - + + class DataStdMain(Base): """ 数据标准表 """ __tablename__ = 't_data_std' - + onum = Column(String(50), primary_key=True, comment='标准代码Id') create_by = Column(String(20), default='', comment='创建者') create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') @@ -157,16 +162,16 @@ class DataStdMain(Base): data_std_it_ownership_prsn = Column(String(100), default=None, comment='技术认责人员') belt_data_std_content = Column(Integer, default=None, comment='分类') data_std_src = Column(String(20), default=None, comment='标准来源') - data_clas = Column(String(20), default=None, comment='数据类别') - typical_fld = Column(String(500), default=None, comment='典型字段') - - + data_clas = Column(String(20), default=None, comment='数据类别') + typical_fld = Column(String(500), default=None, comment='典型字段') + + class DataStdMainAppr(Base): """ 数据标准表 """ __tablename__ = 't_data_std_appr' - + onum = Column(String(50), primary_key=True, comment='标准代码Id') create_by = Column(String(20), default='', comment='创建者') create_time = Column(DateTime, nullable=True, default=None, comment='创建时间') @@ -188,11 +193,11 @@ class DataStdMainAppr(Base): data_std_it_ownership_prsn = Column(String(100), default=None, comment='技术认责人员') belt_data_std_content = Column(Integer, default=None, comment='分类') data_std_src = Column(String(20), default=None, comment='标准来源') - data_clas = Column(String(20), default=None, comment='数据类别') - typical_fld = Column(String(500), default=None, comment='典型字段') - changeType = Column(String(10), default=None, comment='变更类型') - flowId = Column(String(50), default=None, comment='审批Id') - oldInstId = Column(String(50), default=None, comment='原始正式id') - compareId = Column(String(50), default=None, comment='原始数据id(用于对比差异)') - approStatus = Column(String(10), default=None, comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)') - \ No newline at end of file + data_clas = Column(String(20), default=None, comment='数据类别') + typical_fld = Column(String(500), default=None, comment='典型字段') + changeType = Column(String(10), default=None, comment='变更类型') + flowId = Column(String(50), default=None, comment='审批Id') + oldInstId = Column(String(50), default=None, comment='原始正式id') + compareId = Column(String(50), default=None, comment='原始数据id(用于对比差异)') + approStatus = Column(String(10), default=None, + comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)') 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 3e1c6b1..07aa07c 100644 --- a/vue-fastapi-backend/module_admin/entity/do/meta_do.py +++ b/vue-fastapi-backend/module_admin/entity/do/meta_do.py @@ -130,6 +130,7 @@ class MetadataFldSuppInfo(Base): fld_clas = Column(Text, comment='字段分类') fld_null_rate = Column(String(50, collation='utf8_general_ci'), comment='字段空值率') data_dict_id = Column(String(50, collation='utf8_general_ci'), comment='数据字典ID') + data_sec_lvl = Column(String(50, collation='utf8_general_ci'), comment='字段安全等级') rec_stat = Column(String(50, collation='utf8_general_ci'), comment='记录状态') upd_time = Column(DateTime, comment='更新时间') @@ -153,6 +154,7 @@ class MetadataFldSuppInfoVett(Base): fld_clas = Column(Text, comment='字段分类') fld_null_rate = Column(String(50, collation='utf8_general_ci'), comment='字段空值率') data_dict_id = Column(String(50, collation='utf8_general_ci'), comment='数据字典ID') + data_sec_lvl = Column(String(50, collation='utf8_general_ci'), comment='字段安全等级') rec_stat = Column(String(50, collation='utf8_general_ci'), comment='记录状态') upd_time = Column(DateTime, comment='更新时间') rec_subm_prsn = Column(String(255, 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 4707fb5..8558146 100644 --- a/vue-fastapi-backend/module_admin/entity/vo/meta_vo.py +++ b/vue-fastapi-backend/module_admin/entity/vo/meta_vo.py @@ -41,6 +41,7 @@ class ColumnSuppleModel(BaseModel): fld_null_rate: Optional[str] = None rec_stat: Optional[str] = None data_dict_id: Optional[str] = None + data_sec_lvl: Optional[str] = None class SuppleModel(BaseModel): diff --git a/vue-fastapi-backend/module_admin/service/approval_service.py b/vue-fastapi-backend/module_admin/service/approval_service.py index 32943da..f1ab552 100644 --- a/vue-fastapi-backend/module_admin/service/approval_service.py +++ b/vue-fastapi-backend/module_admin/service/approval_service.py @@ -4,7 +4,8 @@ import uuid from typing import Optional from sqlalchemy.ext.asyncio import AsyncSession from module_admin.entity.vo.common_vo import CrudResponseModel -from module_admin.entity.vo.approval_vo import ApplyModel, OperateModel, ApprovalQueryObject, EditObjectModel, SaveConfModel +from module_admin.entity.vo.approval_vo import ApplyModel, OperateModel, ApprovalQueryObject, EditObjectModel, \ + SaveConfModel from module_admin.entity.vo.user_vo import CurrentUserModel from module_admin.entity.do.approval_do import FlowApproval from exceptions.exception import ServiceException, ServiceWarning @@ -15,9 +16,9 @@ from module_admin.dao.user_dao import UserDao from module_admin.dao.meta_dao import MetaDao from module_admin.dao.datastd_dao import DataStdDao from module_admin.dao.dataast_dao import DataAstDao -from module_admin.entity.vo.dataast_vo import DataAstApprModel,DataAstInfoModel -from module_admin.entity.vo.datastd_vo import DataStdCodeModel,DataStdDictModel,DataStdMainModel,DataStdMainApprModel,DataStdDictApprModel,DataStdDictModel,DataStdCodeApprModel - +from module_admin.entity.vo.dataast_vo import DataAstApprModel, DataAstInfoModel +from module_admin.entity.vo.datastd_vo import DataStdCodeModel, DataStdDictModel, DataStdMainModel, \ + DataStdMainApprModel, DataStdDictApprModel, DataStdDictModel, DataStdCodeApprModel class ApprovalService: @@ -96,8 +97,8 @@ class ApprovalService: await cls.syncSuppInfo(result_db, flow_approval.businessId, edit.status) # 数据标准审批 elif flow_approval.businessType == 'dataStdMain': - await cls.syncStdMainInfo(result_db, flow_approval.businessId, edit.status) - # 数据字典审批 + await cls.syncStdMainInfo(result_db, flow_approval.businessId, edit.status) + # 数据字典审批 elif flow_approval.businessType == 'dataStdDict': await cls.syncStdDictInfo(result_db, flow_approval.businessId, edit.status) # 标准代码审批 @@ -138,103 +139,103 @@ class ApprovalService: else: await MetaDao.updateMetadataSuppInfo(suppTable.onum, table, result_db) return CrudResponseModel(is_success=True, message='操作成功') + @classmethod async def syncStdMainInfo(cls, result_db: AsyncSession, suppId: str, operateType: str): apprList = await DataStdDao.get_std_main_appr_list(suppId, result_db) - + for appr in apprList: # 将 SQLAlchemy 模型实例转换为 Pydantic 模型实例 appr_model = DataStdMainApprModel.model_validate(appr) - + change_type = appr_model.changeType - if operateType =='succeed': - if change_type == "add": - # 将 DataStdMainApprModel 转换为 DataStdMainModel - main_model = DataStdMainModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) - - await DataStdDao.add_std_main(result_db, main_model) - - elif change_type == "edit": - # 使用 oldInstId 作为主键 - main_model = DataStdMainModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) - main_model.onum = appr_model.oldInstId - await DataStdDao.update_std_main(result_db, main_model) - - elif change_type == "delete": - await DataStdDao.delete_std_main(result_db, appr_model.oldInstId) - + if operateType == 'succeed': + if change_type == "add": + # 将 DataStdMainApprModel 转换为 DataStdMainModel + main_model = DataStdMainModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + + await DataStdDao.add_std_main(result_db, main_model) + + elif change_type == "edit": + # 使用 oldInstId 作为主键 + main_model = DataStdMainModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + main_model.onum = appr_model.oldInstId + await DataStdDao.update_std_main(result_db, main_model) + + elif change_type == "delete": + await DataStdDao.delete_std_main(result_db, appr_model.oldInstId) + # 更新 approStatus 状态 appr_model.approStatus = operateType await DataStdDao.update_std_main_appr(result_db, appr_model) - - + return CrudResponseModel(is_success=True, message='操作成功') - + @classmethod async def syncStdDictInfo(cls, result_db: AsyncSession, suppId: str, operateType: str): apprList = await DataStdDao.get_std_dict_appr_list(suppId, result_db) - + for appr in apprList: # 将 SQLAlchemy 模型实例转换为 Pydantic 模型实例 appr_model = DataStdDictApprModel.model_validate(appr) - + change_type = appr_model.changeType - if operateType =='succeed': - if change_type == "add": - # 将 DataStdDictApprModel 转换为 DataStdDictModel - main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) - - await DataStdDao.add_std_dict(result_db, main_model) - - elif change_type == "edit": - # 使用 oldInstId 作为主键 - main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) - - main_model.onum = appr_model.oldInstId - await DataStdDao.update_std_dict(result_db, main_model.model_dump(exclude_unset=True)) - - elif change_type == "delete": - await DataStdDao.delete_std_dict(result_db, appr_model.oldInstId) - + if operateType == 'succeed': + if change_type == "add": + # 将 DataStdDictApprModel 转换为 DataStdDictModel + main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + + await DataStdDao.add_std_dict(result_db, main_model) + + elif change_type == "edit": + # 使用 oldInstId 作为主键 + main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + + main_model.onum = appr_model.oldInstId + await DataStdDao.update_std_dict(result_db, main_model.model_dump(exclude_unset=True)) + + elif change_type == "delete": + await DataStdDao.delete_std_dict(result_db, appr_model.oldInstId) + # 更新 approStatus 状态 appr_model.approStatus = operateType await DataStdDao.update_std_dict_appr(result_db, appr_model) - - + return CrudResponseModel(is_success=True, message='操作成功') @classmethod async def syncStdCodeInfo(cls, result_db: AsyncSession, suppId: str, operateType: str): apprList = await DataStdDao.get_std_code_appr_list_Flow(suppId, result_db) - + for appr in apprList: # 将 SQLAlchemy 模型实例转换为 Pydantic 模型实例 appr_model = DataStdCodeApprModel.model_validate(appr) - + change_type = appr_model.changeType - if operateType =='succeed': - if change_type == "add": - main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) - - await DataStdDao.add_std_code(result_db, main_model) - - elif change_type == "update": - # 使用 oldInstId 作为主键 - main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) - - main_model.onum = appr_model.oldInstId - await DataStdDao.update_std_code(result_db, main_model.model_dump(exclude_unset=True)) - - elif change_type == "delete": - await DataStdDao.delete_std_code(result_db, appr_model.oldInstId) - + if operateType == 'succeed': + if change_type == "add": + main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + + await DataStdDao.add_std_code(result_db, main_model) + + elif change_type == "update": + # 使用 oldInstId 作为主键 + main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) + + main_model.onum = appr_model.oldInstId + await DataStdDao.update_std_code(result_db, main_model.model_dump(exclude_unset=True)) + + elif change_type == "delete": + await DataStdDao.delete_std_code(result_db, appr_model.oldInstId) + # 更新 approStatus 状态 appr_model.approStatus = operateType main_appro_model = DataStdCodeApprModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) - await DataStdDao.update_std_code_appr(result_db, main_appro_model.model_dump(exclude_unset=True)) - + await DataStdDao.update_std_code_appr(result_db, main_appro_model.model_dump(exclude_unset=True)) + return CrudResponseModel(is_success=True, message='操作成功') + @classmethod async def syncDataAstInfo(cls, result_db: AsyncSession, suppId: str, operateType: str): apprList = await DataAstDao.get_dataast_appr_list_Flow(suppId, result_db) @@ -243,14 +244,13 @@ class ApprovalService: # 将 SQLAlchemy 模型实例转换为 Pydantic 模型实例 appr_model = DataAstApprModel.model_validate(appr) change_type = appr_model.changeType - if operateType =='succeed': + if operateType == 'succeed': if change_type == "add": # logger.info(f"发现新增类型变更,准备添加数据资产,AST_NO: {appr_model.ast_no}") main_model = DataAstInfoModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) await DataAstDao.add_dataast_data(result_db, main_model) # logger.info(f"数据资产添加成功,AST_NO: {main_model.ast_no}") - # 更新 approStatus 状态 appr_model.approStatus = operateType main_appro_model = DataStdCodeApprModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) @@ -259,8 +259,6 @@ class ApprovalService: return CrudResponseModel(is_success=True, message='操作成功') - - @classmethod async def get_flow_list_services(cls, query_db: AsyncSession, query_param: ApprovalQueryObject, current_user: CurrentUserModel): @@ -282,27 +280,27 @@ class ApprovalService: for item in approval_list: nextRoles = json.loads(item.nextStepRole) nextUsers = json.loads(item.nextStepUser) - if len(nextRoles)>0 and len(nextUsers) > 0: + if len(nextRoles) > 0 and len(nextUsers) > 0: if current_user.user.user_name in nextUsers: - count = count+1 + count = count + 1 break if any(element in set(current_user.roles) for element in nextRoles): - count = count+1 + count = count + 1 break if len(nextRoles) > 0 and len(nextUsers) == 0: if any(element in set(current_user.roles) for element in nextRoles): - count = count+1 + count = count + 1 break if len(nextRoles) == 0 and len(nextUsers) > 0: if current_user.user.user_name in nextUsers: - count = count+1 + count = count + 1 break return count @classmethod async def cancel_apply_services(cls, query_db: AsyncSession, flow_id: str, - current_user: CurrentUserModel): - flow = await ApprovalDao.get_flow_by_idAndUser(query_db,flow_id, current_user.user.user_name) + current_user: CurrentUserModel): + flow = await ApprovalDao.get_flow_by_idAndUser(query_db, flow_id, current_user.user.user_name) if flow is None: raise ServiceException(message=f'所操作的流程不存在') if flow.status == 'succeed' or flow.status == 'rejected': @@ -335,4 +333,3 @@ class ApprovalService: await ApprovalDao.add_flow_config(query_db, confDict) await query_db.commit() return CrudResponseModel(is_success=True, message='操作成功') - diff --git a/vue-fastapi-backend/module_admin/service/meta_service.py b/vue-fastapi-backend/module_admin/service/meta_service.py index 04e965f..1307742 100644 --- a/vue-fastapi-backend/module_admin/service/meta_service.py +++ b/vue-fastapi-backend/module_admin/service/meta_service.py @@ -46,8 +46,13 @@ class MetaService: table['batchTabClas'] = CamelCaseUtil.transform_result(tab_list) return meta_rel_list else: - # meta_rel_list = MetaDao.get_meta_rel_list(result_db, query_object, data_scope_sql) - return None + meta_rel_list = await MetaDao.get_meta_rel_list(result_db, query_object) + if meta_rel_list and len(meta_rel_list.rows) > 0: + for table in meta_rel_list.rows: + tab_list = await MetaDao.get_meta_tab_clas(result_db, table['ssysCd'], table['mdlName'], + table['tabEngName']) + table['batchTabClas'] = CamelCaseUtil.transform_result(tab_list) + return meta_rel_list @classmethod async def get_meta_col_list_services(cls, result_db: AsyncSession, query_object: MetaColObject): @@ -57,6 +62,10 @@ class MetaService: fld_list = await MetaDao.get_meta_fld_clas(result_db, column['ssysCd'], column['mdlName'], column['tabEngName'], column['fldEngName']) column['batchFldClas'] = CamelCaseUtil.transform_result(fld_list) + if column['dataSecLvl'] is None and column['dataDictId'] is not None: + # 获取数据标准的安全等级 + data_sec_lvl = await DataStdDao.get_data_sec_lvl_by_dict_id(result_db, column['dataDictId']) + column['dataSecLvl'] = data_sec_lvl return result @classmethod @@ -99,7 +108,7 @@ class MetaService: supple.tab_eng_name, column.fld_eng_name, result_db) data_dict_name = '' - if oldColumn.data_dict_id and oldColumn.data_dict_id != '': + if oldColumn and oldColumn.data_dict_id and oldColumn.data_dict_id != '': oldDict = await DataStdDao.get_data_dict_by_id(result_db, oldColumn.data_dict_id) data_dict_name = oldDict.data_dict_cn_name if oldDict else '' columnInfo = await MetaDao.get_meta_column(supple.ssys_cd, supple.mdl_name, supple.tab_eng_name, @@ -117,6 +126,7 @@ class MetaService: suppColumnInfo.fld_clas = column.fld_clas suppColumnInfo.fld_null_rate = column.fld_null_rate suppColumnInfo.data_dict_id = column.data_dict_id + suppColumnInfo.data_sec_lvl = column.data_sec_lvl suppColumnInfo.rec_stat = column.rec_stat suppColumnInfo.rec_subm_prsn = current_user.user.user_name suppColumnInfo.apply_time = applyTime @@ -174,6 +184,7 @@ class MetaService: fldClas=column.fld_clas if column and column.fld_clas else None, fldNullRate=column.fld_null_rate if column and column.fld_null_rate else None, dataDictId=column.data_dict_id if column and column.data_dict_id else None, + dataSecLvl=column.data_sec_lvl if column and column.data_sec_lvl else None, dataDictName=dictName, recStat=column.rec_stat if column and column.rec_stat else None, updTime=column.upd_time.isoformat() if column and column.upd_time else None 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 9ede624..0d357e8 100644 --- a/vue-fastapi-backend/module_admin/service/metadata_config_service.py +++ b/vue-fastapi-backend/module_admin/service/metadata_config_service.py @@ -133,6 +133,14 @@ class MetadataConfigService: result = await MetadataConfigDao.get_metadata_sec_list(query_db, query_object, is_page) return result + @classmethod + async def get_metadata_sec_option_list_services(cls, query_db: AsyncSession): + """ + 查询数据安全配置列表 + """ + result = await MetadataConfigDao.get_metadata_sec_option_list(query_db) + return CamelCaseUtil.transform_result(result) + @classmethod async def add_metadata_sec_services(cls, query_db: AsyncSession, page_object: MetadataSecModel): """ diff --git a/vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js b/vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js index 2bab37d..7f51f3a 100644 --- a/vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js +++ b/vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js @@ -53,6 +53,14 @@ export function listMetadataSec(query) { }) } +// 查询数据安全配置列表,不带分页 +export function listMetadataSecOptions() { + return request({ + url: '/default-api/metadataConfig/sec/optionList', + method: 'get' + }) +} + // 查询数据安全配置详情 export function getMetadataSec(secId) { return request({ diff --git a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue index 4a2a5a8..f9afc99 100644 --- a/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue +++ b/vue-fastapi-frontend/src/views/meta/metaInfo/index.vue @@ -313,6 +313,7 @@ + + + + @@ -983,6 +995,7 @@ function showBusinessDataDialog(row){ fldCnName:column.fldCnName, fldType:column.fldType, dataDictName: col.dataDictName, + dataSecLvl: col.dataSecLvl, showColClas: showNewColClas }) }