Browse Source

元数据模块增加安全等级

master
xueyinfei 2 months ago
parent
commit
7499f35002
  1. 91
      vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
  2. 153
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  3. 4
      vue-fastapi-backend/module_admin/dao/meta_dao.py
  4. 43
      vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
  5. 23
      vue-fastapi-backend/module_admin/entity/do/datastd_do.py
  6. 2
      vue-fastapi-backend/module_admin/entity/do/meta_do.py
  7. 1
      vue-fastapi-backend/module_admin/entity/vo/meta_vo.py
  8. 37
      vue-fastapi-backend/module_admin/service/approval_service.py
  9. 17
      vue-fastapi-backend/module_admin/service/meta_service.py
  10. 8
      vue-fastapi-backend/module_admin/service/metadata_config_service.py
  11. 8
      vue-fastapi-frontend/src/api/metadataConfig/metadataConfig.js
  12. 42
      vue-fastapi-frontend/src/views/meta/metaInfo/index.vue
  13. 13
      vue-fastapi-frontend/src/views/system/flow/index.vue

91
vue-fastapi-backend/module_admin/controller/metadata_config_controller.py

@ -37,8 +37,8 @@ from utils.page_util import PageResponseModel
from utils.log_util import logger from utils.log_util import logger
from module_admin.service.login_service import LoginService from module_admin.service.login_service import LoginService
from module_admin.entity.vo.user_vo import CurrentUserModel from module_admin.entity.vo.user_vo import CurrentUserModel
from module_admin.entity.vo.metatask_vo import DeleteMetataskModel,OperaMetataskModel 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.dataSource_vo import ProcessDefinition, ParmScheduleVo, ProcessInstancePage
metadataConfigController = APIRouter(prefix='/metadataConfig') metadataConfigController = APIRouter(prefix='/metadataConfig')
@ -122,6 +122,16 @@ async def get_metadata_sec_list(
return ResponseUtil.success(model_content=result) 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') @metadataConfigController.post('/sec')
@ValidateFields(validate_model='add_metadata_sec') @ValidateFields(validate_model='add_metadata_sec')
async def add_metadata_sec( async def add_metadata_sec(
@ -366,7 +376,7 @@ async def get_busi_label_detail(
@metadataConfigController.get('/dataopLabel/list', response_model=PageResponseModel) @metadataConfigController.get('/dataopLabel/list', response_model=PageResponseModel)
async def get_dataop_label_list( async def get_dataop_label_list(
request: Request, request: Request,
query: BatchDataopLabelConfigModel=Depends(BatchDataopLabelModelPageQueryModel.as_query), query: BatchDataopLabelConfigModel = Depends(BatchDataopLabelModelPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
): ):
result = await BatchLabelConfigService.get_dataop_vo_services(query_db, query, is_page=True) result = await BatchLabelConfigService.get_dataop_vo_services(query_db, query, is_page=True)
@ -435,7 +445,7 @@ async def get_datatype_label_list(
query_db: AsyncSession = Depends(get_db), 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('获取数据类型标签配置列表成功') logger.info('获取数据类型标签配置列表成功')
return ResponseUtil.success(data=result) return ResponseUtil.success(data=result)
@ -492,6 +502,8 @@ async def get_datatype_label_detail(
result = await BatchLabelConfigService.get_datatype_detail_services(query_db, onum) result = await BatchLabelConfigService.get_datatype_detail_services(query_db, onum)
logger.info(f'获取数据类型标签配置 onum={onum} 详情成功') logger.info(f'获取数据类型标签配置 onum={onum} 详情成功')
return ResponseUtil.success(data=result) return ResponseUtil.success(data=result)
@metadataConfigController.get("/datasecConfig/list", response_model=PageResponseModel) @metadataConfigController.get("/datasecConfig/list", response_model=PageResponseModel)
async def get_datasec_config_list( async def get_datasec_config_list(
request: Request, request: Request,
@ -513,7 +525,7 @@ async def add_datasec_config(
): ):
model.create_by = current_user.user.user_name model.create_by = current_user.user.user_name
model.create_time = datetime.now() 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) logger.info(result.message)
return ResponseUtil.success(msg=result.message) return ResponseUtil.success(msg=result.message)
@ -528,7 +540,7 @@ async def edit_datasec_config(
): ):
model.update_by = current_user.user.user_name model.update_by = current_user.user.user_name
model.update_time = datetime.now() 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) logger.info(result.message)
return ResponseUtil.success(msg=result.message) return ResponseUtil.success(msg=result.message)
@ -543,13 +555,17 @@ async def edit_datasec_config(
# logger.info(result.message) # logger.info(result.message)
# return ResponseUtil.success(msg=result.message) # return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete('/datasecConfig/{metatask_ids}/{ds_ids}') @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)): async def delete_system_config(request: Request, metatask_ids: str, ds_ids: str,
delete_config = DeleteMetataskModel(metatask_ids=metatask_ids,ds_ids=ds_ids) query_db: AsyncSession = Depends(get_db),
delete_config_result = await DatasecConfigService.delete_datasec_services(request, query_db, delete_config,current_user) 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) logger.info(delete_config_result.message)
return ResponseUtil.success(msg=delete_config_result.message) return ResponseUtil.success(msg=delete_config_result.message)
@metadataConfigController.get("/datasecConfig/{onum}", response_model=DatasecConfigModel) @metadataConfigController.get("/datasecConfig/{onum}", response_model=DatasecConfigModel)
async def get_datasec_config_detail( async def get_datasec_config_detail(
request: Request, request: Request,
@ -559,6 +575,8 @@ async def get_datasec_config_detail(
result = await DatasecConfigService.get_datasec_detail_services(query_db, onum) result = await DatasecConfigService.get_datasec_detail_services(query_db, onum)
logger.info(f"获取数据安全参数配置 onum={onum} 详情成功") logger.info(f"获取数据安全参数配置 onum={onum} 详情成功")
return ResponseUtil.success(data=result) return ResponseUtil.success(data=result)
@metadataConfigController.put('/upOrdown') @metadataConfigController.put('/upOrdown')
async def up_or_down_meta_metatask( async def up_or_down_meta_metatask(
request: Request, request: Request,
@ -566,10 +584,12 @@ async def up_or_down_meta_metatask(
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user), current_user: CurrentUserModel = Depends(LoginService.get_current_user),
): ):
edit_config_result = await DatasecConfigService.up_or_down_metatask_services(request, query_db, current_user,
edit_config_result = await DatasecConfigService.up_or_down_metatask_services(request, query_db,current_user, DownOrUpdate.id,DownOrUpdate.type) DownOrUpdate.id, DownOrUpdate.type)
logger.info(edit_config_result.message) logger.info(edit_config_result.message)
return ResponseUtil.success(msg=edit_config_result.message) return ResponseUtil.success(msg=edit_config_result.message)
# 元数据任务调度 # 元数据任务调度
@metadataConfigController.put('/DS') @metadataConfigController.put('/DS')
async def DS_meta_metatask( async def DS_meta_metatask(
@ -578,24 +598,25 @@ async def DS_meta_metatask(
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user) 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) return ResponseUtil.success(msg=edit_config_result)
@metadataConfigController.get('/DS/{id}')
@metadataConfigController.get('/DS/{id}')
async def DS_meta_metatask_detail( async def DS_meta_metatask_detail(
request: Request, request: Request,
id: int, id: int,
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user) current_user: CurrentUserModel = Depends(LoginService.get_current_user)
): ):
process=ParmScheduleVo() process = ParmScheduleVo()
process.processDefinitionCode=id process.processDefinitionCode = id
edit_config_result = await DatasecConfigService.ds_metatask_detail(request, query_db, process,current_user) edit_config_result = await DatasecConfigService.ds_metatask_detail(request, query_db, process, current_user)
return ResponseUtil.success(data=edit_config_result) return ResponseUtil.success(data=edit_config_result)
@metadataConfigController.delete('/DS') @metadataConfigController.delete('/DS')
async def DS_meta_metatask_delete( async def DS_meta_metatask_delete(
request: Request, request: Request,
@ -603,10 +624,11 @@ async def DS_meta_metatask_delete(
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user) 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) return ResponseUtil.success(msg=edit_config_result)
# ----------元数据标签调度任务 ---------- # ----------元数据标签调度任务 ----------
@metadataConfigController.get('/taskBizConfig/list', response_model=PageResponseModel) @metadataConfigController.get('/taskBizConfig/list', response_model=PageResponseModel)
@ -639,7 +661,7 @@ async def add_task_biz_config(
): ):
item.create_by = current_user.user.user_name item.create_by = current_user.user.user_name
item.create_time = datetime.now() 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) return ResponseUtil.success(msg=result.message)
@ -653,7 +675,7 @@ async def edit_task_biz_config(
): ):
item.update_by = current_user.user.user_name item.update_by = current_user.user.user_name
item.update_time = datetime.now() 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) return ResponseUtil.success(msg=result.message)
@ -662,15 +684,22 @@ async def edit_task_biz_config(
# result = await MetadataConfigService.delete_task_biz_config_services(db, onums) # result = await MetadataConfigService.delete_task_biz_config_services(db, onums)
# return ResponseUtil.success(msg=result.message) # return ResponseUtil.success(msg=result.message)
@metadataConfigController.delete('/taskBizConfig/{metatask_ids}/{ds_ids}') @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)): async def delete_task_biz_config(request: Request, metatask_ids: str, ds_ids: str,
delete_config = DeleteMetataskModel(metatask_ids=metatask_ids,ds_ids=ds_ids) query_db: AsyncSession = Depends(get_db),
delete_config_result = await MetadataConfigService.delete_task_biz_config_services(request, query_db, delete_config,current_user) 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) logger.info(delete_config_result.message)
return ResponseUtil.success(msg=delete_config_result.message) return ResponseUtil.success(msg=delete_config_result.message)
@metadataConfigController.get('/taskBizConfig/detail') @metadataConfigController.get('/taskBizConfig/detail')
async def get_task_biz_config_detail(onum: str, db: AsyncSession = Depends(get_db)): 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) data = await MetadataConfigService.get_task_biz_config_detail_services(db, onum)
return ResponseUtil.success(data=data) return ResponseUtil.success(data=data)
@metadataConfigController.get('/taskBizConfigRela/list/{bizOnum}') @metadataConfigController.get('/taskBizConfigRela/list/{bizOnum}')
async def get_task_biz_rela_config_list( async def get_task_biz_rela_config_list(
bizOnum: int, bizOnum: int,
@ -679,6 +708,8 @@ async def get_task_biz_rela_config_list(
ai_chat_list_result = await MetadataConfigService.get_task_biz_config_rela_list_services(query_db, bizOnum) ai_chat_list_result = await MetadataConfigService.get_task_biz_config_rela_list_services(query_db, bizOnum)
logger.info('获取成功') logger.info('获取成功')
return ResponseUtil.success(data=ai_chat_list_result) return ResponseUtil.success(data=ai_chat_list_result)
@metadataConfigController.put('/taskBiz/upOrdown') @metadataConfigController.put('/taskBiz/upOrdown')
async def task_biz_up_or_down_meta_metatask( async def task_biz_up_or_down_meta_metatask(
request: Request, request: Request,
@ -686,13 +717,12 @@ async def task_biz_up_or_down_meta_metatask(
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user), current_user: CurrentUserModel = Depends(LoginService.get_current_user),
): ):
edit_config_result = await MetadataConfigService.up_or_down_metatask_services(request, query_db, current_user,
edit_config_result = await MetadataConfigService.up_or_down_metatask_services(request, query_db,current_user, DownOrUpdate.id,DownOrUpdate.type) DownOrUpdate.id, DownOrUpdate.type)
logger.info(edit_config_result.message) 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') @metadataConfigController.put('/taskBiz/DS')
async def task_biz_DS_meta_metatask( async def task_biz_DS_meta_metatask(
request: Request, request: Request,
@ -700,11 +730,11 @@ async def task_biz_DS_meta_metatask(
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user) 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') @metadataConfigController.delete('/taskBiz/DS')
async def task_biz_DS_meta_metatask_delete( async def task_biz_DS_meta_metatask_delete(
request: Request, request: Request,
@ -712,7 +742,6 @@ async def task_biz_DS_meta_metatask_delete(
query_db: AsyncSession = Depends(get_db), query_db: AsyncSession = Depends(get_db),
current_user: CurrentUserModel = Depends(LoginService.get_current_user) 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) return ResponseUtil.success(msg=edit_config_result)

153
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 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, \ from module_admin.entity.vo.datastd_vo import DataStdCodeModel, DataStdDictModel, DataStdMainModel, \
DataStdMainApprModel, DataStdDictApprModel, DataStdCodeApprModel, StdDictNoPageParam DataStdMainApprModel, DataStdDictApprModel, DataStdCodeApprModel, StdDictNoPageParam
from module_admin.entity.do.dept_do import SysDept from module_admin.entity.do.dept_do import SysDept
from utils.page_util import PageUtil from utils.page_util import PageUtil
from sqlalchemy.orm import aliased 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 datetime import datetime
from module_admin.entity.do.approval_do import FlowApproval, FlowConfig from module_admin.entity.do.approval_do import FlowApproval, FlowConfig
@ -15,14 +17,15 @@ class DataStdDao:
# ----------------------------------------------------------------数据标准模块---------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------数据标准模块----------------------------------------------------------------------------------------------------
@classmethod @classmethod
async def get_std_code_appr_list(cls, flowId:str,db: AsyncSession): async def get_std_code_appr_list(cls, flowId: str, db: AsyncSession):
filters = [] filters = []
filters.append(DataStdCodeAppr.flowId == flowId) filters.append(DataStdCodeAppr.flowId == flowId)
filters.append(DataStdCodeAppr.class_id == "code") filters.append(DataStdCodeAppr.class_id == "code")
query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time)) query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time))
return await PageUtil.paginate(db, query, 0, 0, False) return await PageUtil.paginate(db, query, 0, 0, False)
@classmethod @classmethod
async def get_std_code_appr_list_Flow(cls, flowId:str,db: AsyncSession): async def get_std_code_appr_list_Flow(cls, flowId: str, db: AsyncSession):
filters = [] filters = []
filters.append(DataStdCodeAppr.flowId == flowId) filters.append(DataStdCodeAppr.flowId == flowId)
query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time)) query = select(DataStdCodeAppr).where(*filters).order_by(desc(DataStdCodeAppr.create_time))
@ -103,23 +106,23 @@ class DataStdDao:
if query_object.cd_val_cn_mean: if query_object.cd_val_cn_mean:
filters.append(DataStdCodeAppr.cd_val_cn_mean.like(f"%{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: if query_object.cd_no:
filters.append( or_( filters.append(or_(
DataStdCodeAppr.cd_val_cn_mean.like(f"%{query_object.cd_no}%"), DataStdCodeAppr.cd_val_cn_mean.like(f"%{query_object.cd_no}%"),
DataStdCodeAppr.cd_no.like(f"%{query_object.cd_no}%") DataStdCodeAppr.cd_no.like(f"%{query_object.cd_no}%")
)) ))
if query_object.cd_val_stat: if query_object.cd_val_stat:
filters.append(DataStdCodeAppr.cd_val_stat==query_object.cd_val_stat) filters.append(DataStdCodeAppr.cd_val_stat == query_object.cd_val_stat)
if query_object.src_sys: if query_object.src_sys:
filters.append(DataStdCodeAppr.src_sys==query_object.src_sys) filters.append(DataStdCodeAppr.src_sys == query_object.src_sys)
if query_object.cd_type: if query_object.cd_type:
filters.append(DataStdCodeAppr.cd_type==query_object.cd_type) filters.append(DataStdCodeAppr.cd_type == query_object.cd_type)
if query_object.class_id: if query_object.class_id:
filters.append(DataStdCodeAppr.class_id==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: if query_object.class_id == 'codeItem' and not query_object.parent_id:
filters.append(1==2) filters.append(1 == 2)
if query_object.parent_id: if query_object.parent_id:
filters.append(DataStdCodeAppr.parent_id==query_object.parent_id) filters.append(DataStdCodeAppr.parent_id == query_object.parent_id)
# 构建查询语句 # 构建查询语句
query = ( query = (
select(DataStdCodeAppr) select(DataStdCodeAppr)
@ -132,8 +135,9 @@ class DataStdDao:
db, query, query_object.page_num, query_object.page_size, is_page db, query, query_object.page_num, query_object.page_size, is_page
) )
return col_list return col_list
@classmethod @classmethod
async def get_last_std_code_appr_by_id(cls,db: AsyncSession, Id: str ): async def get_last_std_code_appr_by_id(cls, db: AsyncSession, Id: str):
result = await db.execute( result = await db.execute(
select(DataStdCodeAppr) select(DataStdCodeAppr)
.where( .where(
@ -144,6 +148,7 @@ class DataStdDao:
.limit(1) .limit(1)
) )
return result.scalar_one_or_none() return result.scalar_one_or_none()
@classmethod @classmethod
async def get_std_code_list_all(cls, query_db: AsyncSession): 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') # 只查有效的 stmt = select(DataStdCode).where(DataStdCode.class_id == 'code') # 只查有效的
result = await query_db.execute(stmt) result = await query_db.execute(stmt)
return result.scalars().all() return result.scalars().all()
@classmethod @classmethod
async def get_std_main_list_import(cls, query_db: AsyncSession): async def get_std_main_list_import(cls, query_db: AsyncSession):
""" """
@ -161,9 +167,10 @@ class DataStdDao:
:param session: 异步数据库会话 :param session: 异步数据库会话
:return: List[DataStdCode] :return: List[DataStdCode]
""" """
stmt = select(DataStdMain).where(1== 1) # 只查有效的 stmt = select(DataStdMain).where(1 == 1) # 只查有效的
result = await query_db.execute(stmt) result = await query_db.execute(stmt)
return result.scalars().all() return result.scalars().all()
@classmethod @classmethod
async def get_std_code_map_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False): async def get_std_code_map_list(cls, db: AsyncSession, query_object: DataStdCodeModel, is_page: bool = False):
# 构建查询条件 # 构建查询条件
@ -174,7 +181,7 @@ class DataStdDao:
c3 = aliased(DataStdCode) # 别名 c3 表示映射的代码 c3 = aliased(DataStdCode) # 别名 c3 表示映射的代码
c4 = aliased(DataStdCode) # 别名 c4 表示映射父级代码 c4 = aliased(DataStdCode) # 别名 c4 表示映射父级代码
if query_object.parent_id: if query_object.parent_id:
if query_object.cd_type =='sys': if query_object.cd_type == 'sys':
filters.append(c1.parent_id == query_object.parent_id) filters.append(c1.parent_id == query_object.parent_id)
else: else:
filters.append(c3.parent_id == query_object.parent_id) filters.append(c3.parent_id == query_object.parent_id)
@ -207,6 +214,7 @@ class DataStdDao:
db, query, query_object.page_num, query_object.page_size, is_page db, query, query_object.page_num, query_object.page_size, is_page
) )
return col_list return col_list
@classmethod @classmethod
async def get_std_main_map_list(cls, db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False): async def get_std_main_map_list(cls, db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False):
# 构建查询条件 # 构建查询条件
@ -238,6 +246,7 @@ class DataStdDao:
db, query, query_object.page_num, query_object.page_size, is_page db, query, query_object.page_num, query_object.page_size, is_page
) )
return col_list return col_list
@classmethod @classmethod
async def get_data_code_list_by_info(cls, db: AsyncSession, query_object: DataStdCodeModel): async def get_data_code_list_by_info(cls, db: AsyncSession, query_object: DataStdCodeModel):
List = ( List = (
@ -256,6 +265,7 @@ class DataStdDao:
) )
).scalars().all() ).scalars().all()
return List return List
@classmethod @classmethod
async def get_data_code_by_info(cls, db: AsyncSession, query_object: DataStdCodeModel): async def get_data_code_by_info(cls, db: AsyncSession, query_object: DataStdCodeModel):
List = ( List = (
@ -273,6 +283,7 @@ class DataStdDao:
) )
).scalars().first() ).scalars().first()
return List return List
@classmethod @classmethod
async def get_std_code_by_id(cls, db: AsyncSession, Id: str): async def get_std_code_by_id(cls, db: AsyncSession, Id: str):
col = ( col = (
@ -282,6 +293,7 @@ class DataStdDao:
) )
).scalars().first() ).scalars().first()
return col return col
@classmethod @classmethod
async def get_std_code_appr_by_id(cls, db: AsyncSession, Id: str): async def get_std_code_appr_by_id(cls, db: AsyncSession, Id: str):
col = ( col = (
@ -293,7 +305,7 @@ class DataStdDao:
return col return col
@classmethod @classmethod
async def add_std_code(cls, db: AsyncSession,model:DataStdCodeModel): async def add_std_code(cls, db: AsyncSession, model: DataStdCodeModel):
col = DataStdCode( col = DataStdCode(
**model.model_dump() **model.model_dump()
) )
@ -302,7 +314,7 @@ class DataStdDao:
return col return col
@classmethod @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( col = DataStdCodeAppr(
**model.model_dump() **model.model_dump()
) )
@ -313,6 +325,7 @@ class DataStdDao:
@classmethod @classmethod
async def delete_std_code(cls, db: AsyncSession, Id: str): async def delete_std_code(cls, db: AsyncSession, Id: str):
await db.execute(delete(DataStdCode).where(DataStdCode.onum == Id)) await db.execute(delete(DataStdCode).where(DataStdCode.onum == Id))
@classmethod @classmethod
async def update_std_code_appr(cls, db: AsyncSession, update_data: DataStdCodeApprModel): async def update_std_code_appr(cls, db: AsyncSession, update_data: DataStdCodeApprModel):
@ -341,6 +354,7 @@ class DataStdDao:
return existing_code_item is not None return existing_code_item is not None
return True return True
# ----------------------------------------------------------------数据字典---------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------数据字典----------------------------------------------------------------------------------------------------
@classmethod @classmethod
async def get_std_dict_list(cls, db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False): async def get_std_dict_list(cls, db: AsyncSession, query_object: DataStdDictModel, is_page: bool = False):
@ -390,10 +404,10 @@ class DataStdDao:
DataStdDict.data_dict_data_type, DataStdDict.data_dict_data_type,
DataStdDict.data_std_no, DataStdDict.data_std_no,
DataStdDict.data_dict_stat, DataStdDict.data_dict_stat,
DataStdMain.data_std_cn_name.label("data_std_cn_name") , 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_it_ownership_dept.label("data_std_it_ownership_dept"),
DataStdMain.data_std_busi_ownership_dept.label("data_std_busi_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_it_ownership_prsn.label("data_std_it_ownership_prsn"),
DataStdMain.data_std_busi_ownership_prsn.label("data_std_busi_ownership_prsn") DataStdMain.data_std_busi_ownership_prsn.label("data_std_busi_ownership_prsn")
) )
@ -438,9 +452,8 @@ class DataStdDao:
list = (await db.execute(query)).fetchall() list = (await db.execute(query)).fetchall()
return list return list
@classmethod @classmethod
async def add_std_dict(cls, db: AsyncSession,model:DataStdDictModel): async def add_std_dict(cls, db: AsyncSession, model: DataStdDictModel):
col = DataStdDict( col = DataStdDict(
**model.model_dump() **model.model_dump()
) )
@ -451,6 +464,7 @@ class DataStdDao:
@classmethod @classmethod
async def delete_std_dict(cls, db: AsyncSession, Id: str): async def delete_std_dict(cls, db: AsyncSession, Id: str):
await db.execute(delete(DataStdDict).where(DataStdDict.onum == Id)) await db.execute(delete(DataStdDict).where(DataStdDict.onum == Id))
@classmethod @classmethod
async def get_std_dict_list_all(cls, db: AsyncSession, query_object: DataStdDict): async def get_std_dict_list_all(cls, db: AsyncSession, query_object: DataStdDict):
filters = [] filters = []
@ -458,6 +472,7 @@ class DataStdDao:
filters.append(DataStdDict.data_std_no.like(f"%{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)) query = select(DataStdDict).where(*filters).order_by(desc(DataStdDict.create_time))
return await PageUtil.paginate(db, query, 0, 0, False) return await PageUtil.paginate(db, query, 0, 0, False)
@classmethod @classmethod
async def get_data_dict_list_by_info(cls, db: AsyncSession, query_object: DataStdDictModel): async def get_data_dict_list_by_info(cls, db: AsyncSession, query_object: DataStdDictModel):
List = ( List = (
@ -469,6 +484,7 @@ class DataStdDao:
) )
).scalars().all() ).scalars().all()
return List return List
@classmethod @classmethod
async def update_std_dict(cls, db: AsyncSession, update_data: DataStdDictModel): async def update_std_dict(cls, db: AsyncSession, update_data: DataStdDictModel):
@ -484,6 +500,7 @@ class DataStdDao:
) )
).scalars().first() ).scalars().first()
return col return col
@classmethod @classmethod
async def get_data_dict_by_info(cls, db: AsyncSession, query_object: DataStdDictModel): async def get_data_dict_by_info(cls, db: AsyncSession, query_object: DataStdDictModel):
List = ( List = (
@ -500,8 +517,27 @@ class DataStdDao:
) )
).scalars().first() ).scalars().first()
return List return List
@classmethod @classmethod
async def get_data_dict_by_id(cls, db: AsyncSession, id: str): 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 = ( List = (
await db.execute( await db.execute(
select(DataStdDict) select(DataStdDict)
@ -511,6 +547,7 @@ class DataStdDao:
) )
).scalars().first() ).scalars().first()
return List return List
# 数据标准目录 # 数据标准目录
@classmethod @classmethod
@ -523,7 +560,8 @@ class DataStdDao:
:return: 目录信息对象 :return: 目录信息对象
""" """
catalog_info = ( 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() .scalars()
.first() .first()
) )
@ -600,7 +638,6 @@ class DataStdDao:
db.add(db_catalog) db.add(db_catalog)
await db.flush() await db.flush()
# 处理子关系(统一转换为 ORM 模型) # 处理子关系(统一转换为 ORM 模型)
for child in catalog2.get('children', []): for child in catalog2.get('children', []):
# 如果是 Pydantic 模型实例,先转换为字典 # 如果是 Pydantic 模型实例,先转换为字典
@ -620,6 +657,7 @@ class DataStdDao:
await db.flush() await db.flush()
return db_catalog return db_catalog
@classmethod @classmethod
async def edit_catalog_leaf_dao(cls, db: AsyncSession, catalog: dict): async def edit_catalog_leaf_dao(cls, db: AsyncSession, catalog: dict):
""" """
@ -639,6 +677,7 @@ class DataStdDao:
) )
await db.execute(stmt) await db.execute(stmt)
@classmethod @classmethod
async def edit_catalog_child_dao(cls, db: AsyncSession, catalog: dict): async def edit_catalog_child_dao(cls, db: AsyncSession, catalog: dict):
""" """
@ -662,7 +701,7 @@ class DataStdDao:
leaf_node_flag=catalog['leaf_node_flag'], leaf_node_flag=catalog['leaf_node_flag'],
upd_prsn=catalog['upd_prsn'], upd_prsn=catalog['upd_prsn'],
upd_time=datetime.now() upd_time=datetime.now()
) ) ))
await db.execute(stmt) await db.execute(stmt)
@ -719,7 +758,6 @@ class DataStdDao:
) )
) )
await cls.update_leaf_node_flag(db) await cls.update_leaf_node_flag(db)
@classmethod @classmethod
@ -735,11 +773,12 @@ class DataStdDao:
stmt = ( stmt = (
update(DataAstContent) 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( .values(
supr_content_onum=moved_catalog_data['supr_content_onum_after'], supr_content_onum=moved_catalog_data['supr_content_onum_after'],
upd_time=datetime.now() upd_time=datetime.now()
) ) ))
await db.execute(stmt) await db.execute(stmt)
await cls.update_leaf_node_flag(db) await cls.update_leaf_node_flag(db)
@ -766,7 +805,8 @@ class DataStdDao:
# await db.execute(stmt) # await db.execute(stmt)
stmt1 = ( stmt1 = (
update(DataAstContentRela) 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( .values(
content_onum=merge_catalog_data['content_onum_after'], content_onum=merge_catalog_data['content_onum_after'],
rela_eff_begn_date=datetime.now() rela_eff_begn_date=datetime.now()
@ -776,12 +816,14 @@ class DataStdDao:
stmt2 = ( stmt2 = (
update(DataAstContent) update(DataAstContent)
.where(DataAstContent.content_onum == merge_catalog_data['content_onum'] , DataAstContent.supr_content_onum == merge_catalog_data['supr_content_onum']) .where(DataAstContent.content_onum == merge_catalog_data['content_onum'],
.values( content_stat = '0' ) DataAstContent.supr_content_onum == merge_catalog_data['supr_content_onum'])
.values(content_stat='0')
) )
await db.execute(stmt2) await db.execute(stmt2)
await cls.update_leaf_node_flag(db) await cls.update_leaf_node_flag(db)
@classmethod @classmethod
async def removerel_data_ast_catalog_dao(cls, db: AsyncSession, removerel_catalog_data: dict): async def removerel_data_ast_catalog_dao(cls, db: AsyncSession, removerel_catalog_data: dict):
""" """
@ -794,15 +836,15 @@ class DataStdDao:
stmt = ( stmt = (
update(DataAstContentRela) 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( .values(
rela_status=removerel_catalog_data['rela_status'] rela_status=removerel_catalog_data['rela_status']
) ) ))
await db.execute(stmt) await db.execute(stmt)
await cls.update_leaf_node_flag(db) await cls.update_leaf_node_flag(db)
@classmethod @classmethod
async def moverel_data_ast_catalog_dao(cls, db: AsyncSession, moverel_catalog_data: dict): async def moverel_data_ast_catalog_dao(cls, db: AsyncSession, moverel_catalog_data: dict):
""" """
@ -815,16 +857,19 @@ class DataStdDao:
stmt = ( stmt = (
update(DataAstContentRela) 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( .values(
content_onum=moverel_catalog_data['content_onum_after'], content_onum=moverel_catalog_data['content_onum_after'],
rela_eff_end_date=datetime.now() rela_eff_end_date=datetime.now()
) ) ))
await db.execute(stmt) await db.execute(stmt)
await cls.update_leaf_node_flag(db) await cls.update_leaf_node_flag(db)
@classmethod @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: 数据资产目录分页列表 :return: 数据资产目录分页列表
""" """
# 修改子查询部分 # 修改子查询部分
subquery_t1 = ( subquery_t1 = (
select(DataAstContentRela) 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( .union_all(
select(DataAstContentRela) select(DataAstContentRela)
.where(DataAstContentRela.content_onum != '2' and DataAstContentRela.rela_status == '1') .where(DataAstContentRela.content_onum != '2' and DataAstContentRela.rela_status == '1')
@ -881,7 +926,8 @@ class DataStdDao:
) )
return data_ast_list return data_ast_list
#------------------------------------------------------------数据标准(658行)-------------------------------------------------------------------------------------------------
# ------------------------------------------------------------数据标准(658行)-------------------------------------------------------------------------------------------------
@classmethod @classmethod
async def get_std_main_list(cls, db: AsyncSession, query_object: DataStdMainModel, is_page: bool = False): async def get_std_main_list(cls, db: AsyncSession, query_object: DataStdMainModel, is_page: bool = False):
filters = [] filters = []
@ -942,6 +988,7 @@ class DataStdDao:
.order_by(desc(DataStdMain.create_time)) .order_by(desc(DataStdMain.create_time))
) )
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
@classmethod @classmethod
async def get_std_main_list_all(cls, db: AsyncSession, query_object: DataStdMainModel): async def get_std_main_list_all(cls, db: AsyncSession, query_object: DataStdMainModel):
filters = [] filters = []
@ -993,27 +1040,32 @@ class DataStdDao:
.order_by(desc(DataStdMain.create_time)) .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 @classmethod
async def add_std_main(cls, db: AsyncSession, model: DataStdMainModel): async def add_std_main(cls, db: AsyncSession, model: DataStdMainModel):
col = DataStdMain(**model.model_dump()) col = DataStdMain(**model.model_dump())
db.add(col) db.add(col)
await db.flush() await db.flush()
return col return col
@classmethod @classmethod
async def add_std_main_appr(cls, db: AsyncSession, model: DataStdMainApprModel): async def add_std_main_appr(cls, db: AsyncSession, model: DataStdMainApprModel):
col = DataStdMainAppr(**model.model_dump()) col = DataStdMainAppr(**model.model_dump())
db.add(col) db.add(col)
await db.flush() await db.flush()
return col return col
@classmethod @classmethod
async def add_std_dict_appr(cls, db: AsyncSession, model: DataStdDictApprModel): async def add_std_dict_appr(cls, db: AsyncSession, model: DataStdDictApprModel):
col = DataStdDictAppr(**model.model_dump()) col = DataStdDictAppr(**model.model_dump())
db.add(col) db.add(col)
await db.flush() await db.flush()
return col return col
@classmethod @classmethod
async def delete_std_main(cls, db: AsyncSession, Id: str): async def delete_std_main(cls, db: AsyncSession, Id: str):
await db.execute(delete(DataStdMain).where(DataStdMain.onum == Id)) await db.execute(delete(DataStdMain).where(DataStdMain.onum == Id))
@classmethod @classmethod
async def delete_std_dict_appr(cls, db: AsyncSession, Id: str): async def delete_std_dict_appr(cls, db: AsyncSession, Id: str):
await db.execute(delete(DataStdDictAppr).where(DataStdDictAppr.onum == Id)) await db.execute(delete(DataStdDictAppr).where(DataStdDictAppr.onum == Id))
@ -1023,6 +1075,7 @@ class DataStdDao:
update_dict = update_data.model_dump(exclude_unset=True) update_dict = update_data.model_dump(exclude_unset=True)
await db.execute(update(DataStdMain), [update_dict]) await db.execute(update(DataStdMain), [update_dict])
await db.flush() await db.flush()
@classmethod @classmethod
async def update_std_dict_appr(cls, db: AsyncSession, update_data: DataStdDictApprModel): async def update_std_dict_appr(cls, db: AsyncSession, update_data: DataStdDictApprModel):
update_dict = update_data.model_dump(exclude_unset=True) update_dict = update_data.model_dump(exclude_unset=True)
@ -1048,6 +1101,7 @@ class DataStdDao:
) )
) )
return col.scalars().first() return col.scalars().first()
@classmethod @classmethod
async def get_std_main_appr_list_all(cls, db: AsyncSession, query_object: DataStdMainApprModel): async def get_std_main_appr_list_all(cls, db: AsyncSession, query_object: DataStdMainApprModel):
filters = [] filters = []
@ -1070,13 +1124,14 @@ class DataStdDao:
return await PageUtil.paginate(db, query, 0, 0, False) return await PageUtil.paginate(db, query, 0, 0, False)
@classmethod @classmethod
async def get_std_main_appr_list(cls, flowId:str,db: AsyncSession): async def get_std_main_appr_list(cls, flowId: str, db: AsyncSession):
filters = [] filters = []
filters.append(DataStdMainAppr.flowId == flowId) filters.append(DataStdMainAppr.flowId == flowId)
query = select(DataStdMainAppr).where(*filters).order_by(desc(DataStdMainAppr.create_time)) query = select(DataStdMainAppr).where(*filters).order_by(desc(DataStdMainAppr.create_time))
return await PageUtil.paginate(db, query, 0, 0, False) return await PageUtil.paginate(db, query, 0, 0, False)
@classmethod @classmethod
async def get_std_dict_appr_list(cls, flowId:str,db: AsyncSession): async def get_std_dict_appr_list(cls, flowId: str, db: AsyncSession):
filters = [] filters = []
filters.append(DataStdDictAppr.flowId == flowId) filters.append(DataStdDictAppr.flowId == flowId)
query = select(DataStdDictAppr).where(*filters).order_by(desc(DataStdDictAppr.create_time)) query = select(DataStdDictAppr).where(*filters).order_by(desc(DataStdDictAppr.create_time))
@ -1086,12 +1141,14 @@ class DataStdDao:
async def get_std_main_appr_by_id(cls, db: AsyncSession, Id: str): async def get_std_main_appr_by_id(cls, db: AsyncSession, Id: str):
col = await db.execute(select(DataStdMainAppr).where(DataStdMainAppr.onum == Id)) col = await db.execute(select(DataStdMainAppr).where(DataStdMainAppr.onum == Id))
return col.scalars().first() return col.scalars().first()
@classmethod @classmethod
async def get_std_dict_appr_by_id(cls, db: AsyncSession, Id: str): async def get_std_dict_appr_by_id(cls, db: AsyncSession, Id: str):
col = await db.execute(select(DataStdDictAppr).where(DataStdDictAppr.onum == Id)) col = await db.execute(select(DataStdDictAppr).where(DataStdDictAppr.onum == Id))
return col.scalars().first() return col.scalars().first()
@classmethod @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( result = await db.execute(
select(DataStdMainAppr) select(DataStdMainAppr)
.where( .where(
@ -1102,8 +1159,9 @@ class DataStdDao:
.limit(1) .limit(1)
) )
return result.scalar_one_or_none() return result.scalar_one_or_none()
@classmethod @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( result = await db.execute(
select(DataStdDictAppr) select(DataStdDictAppr)
.where( .where(
@ -1153,6 +1211,7 @@ class DataStdDao:
# 返回 FlowApproval 对象或布尔值 # 返回 FlowApproval 对象或布尔值
return approval # 或 return approval is not None return approval # 或 return approval is not None
@classmethod @classmethod
async def check_std_dict_waiting(cls, oldInstId: str, db: AsyncSession): async def check_std_dict_waiting(cls, oldInstId: str, db: AsyncSession):
""" """
@ -1185,5 +1244,3 @@ class DataStdDao:
# 返回 FlowApproval 对象或布尔值 # 返回 FlowApproval 对象或布尔值
return approval # 或 return approval is not None return approval # 或 return approval is not None

4
vue-fastapi-backend/module_admin/dao/meta_dao.py

@ -178,6 +178,7 @@ class MetaDao:
MetadataFldSuppInfo.fld_clas, MetadataFldSuppInfo.fld_clas,
MetadataFldSuppInfo.fld_null_rate, MetadataFldSuppInfo.fld_null_rate,
MetadataFldSuppInfo.data_dict_id, MetadataFldSuppInfo.data_dict_id,
MetadataFldSuppInfo.data_sec_lvl,
DataStdDict.data_dict_cn_name.label('data_dict_name'), DataStdDict.data_dict_cn_name.label('data_dict_name'),
MetadataFldSuppInfo.rec_stat.label('supp_rec_stat'), MetadataFldSuppInfo.rec_stat.label('supp_rec_stat'),
MetadataFldSuppInfo.upd_time.label('supp_upd_time') MetadataFldSuppInfo.upd_time.label('supp_upd_time')
@ -329,6 +330,7 @@ class MetaDao:
"fld_clas": vett_info.fld_clas, "fld_clas": vett_info.fld_clas,
"fld_null_rate": vett_info.fld_null_rate, "fld_null_rate": vett_info.fld_null_rate,
"data_dict_id": vett_info.data_dict_id, "data_dict_id": vett_info.data_dict_id,
"data_sec_lvl": vett_info.data_sec_lvl,
"rec_stat": vett_info.rec_stat, "rec_stat": vett_info.rec_stat,
"upd_time": vett_info.upd_time, "upd_time": vett_info.upd_time,
"rec_subm_prsn": vett_info.rec_subm_prsn, "rec_subm_prsn": vett_info.rec_subm_prsn,
@ -389,6 +391,7 @@ class MetaDao:
fld_clas=column.fld_clas, fld_clas=column.fld_clas,
fld_null_rate=column.fld_null_rate, fld_null_rate=column.fld_null_rate,
data_dict_id=column.data_dict_id, data_dict_id=column.data_dict_id,
data_sec_lvl=column.data_sec_lvl,
rec_stat=column.rec_stat, rec_stat=column.rec_stat,
upd_time=column.upd_time if column.upd_time else datetime.now(), 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_clas = column.fld_clas
suppColumn.fld_null_rate = column.fld_null_rate suppColumn.fld_null_rate = column.fld_null_rate
suppColumn.data_dict_id = column.data_dict_id suppColumn.data_dict_id = column.data_dict_id
suppColumn.data_sec_lvl = column.data_sec_lvl
suppColumn.rec_stat = column.rec_stat suppColumn.rec_stat = column.rec_stat
suppColumn.upd_time = column.upd_time suppColumn.upd_time = column.upd_time
db.add(suppColumn) db.add(suppColumn)

43
vue-fastapi-backend/module_admin/dao/metadata_config_dao.py

@ -1,9 +1,10 @@
from datetime import datetime, time 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 sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.do.meta_do import MetadataClas,MetadataExtractInfo # ORM 类 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 ,\ from module_admin.entity.do.metadata_config_do import MetadataSec, SecuBizConfig, SecuBizPermiConfig, SecuBizConfigRela, \
TaskBizConfigRela,TaskBizConfig DatasecConfig, \
TaskBizConfigRela, TaskBizConfig
# ORM 类 # ORM 类
from typing import List from typing import List
@ -11,6 +12,7 @@ from sqlalchemy.orm import joinedload
from sqlalchemy.sql import true from sqlalchemy.sql import true
from utils.page_util import PageUtil from utils.page_util import PageUtil
class MetadataConfigDao: class MetadataConfigDao:
""" """
标签信息数据库操作层 标签信息数据库操作层
@ -37,6 +39,7 @@ class MetadataConfigDao:
) )
) )
return result.scalars().first() return result.scalars().first()
@classmethod @classmethod
async def get_clas_by_onum(cls, db: AsyncSession, clas_onum: int): async def get_clas_by_onum(cls, db: AsyncSession, clas_onum: int):
""" """
@ -55,7 +58,8 @@ class MetadataConfigDao:
query = select(MetadataClas).where( 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_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_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_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.clas_eff_flag == query_object.clas_eff_flag if query_object.clas_eff_flag else True,
MetadataClas.upd_time.between( MetadataClas.upd_time.between(
@ -94,6 +98,7 @@ class MetadataConfigDao:
删除标签信息支持批量 删除标签信息支持批量
""" """
await db.execute(delete(MetadataClas).where(MetadataClas.clas_onum.in_(clas_onum_list))) await db.execute(delete(MetadataClas).where(MetadataClas.clas_onum.in_(clas_onum_list)))
@classmethod @classmethod
async def get_sec_detail_by_id(cls, db: AsyncSession, onum: str): async def get_sec_detail_by_id(cls, db: AsyncSession, onum: str):
result = await db.execute(select(MetadataSec).where(MetadataSec.onum == onum)) result = await db.execute(select(MetadataSec).where(MetadataSec.onum == onum))
@ -102,7 +107,8 @@ class MetadataConfigDao:
@classmethod @classmethod
async def get_metadata_sec_list(cls, db: AsyncSession, query_object, is_page: bool = False): async def get_metadata_sec_list(cls, db: AsyncSession, query_object, is_page: bool = False):
query = select(MetadataSec).where( 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.sec_eff_flag == query_object.sec_eff_flag if query_object.sec_eff_flag else True,
MetadataSec.upd_time.between( MetadataSec.upd_time.between(
datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(0, 0, 0)), 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 from utils.page_util import PageUtil
return await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page) 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 @classmethod
async def add_metadata_sec_dao(cls, db: AsyncSession, sec): async def add_metadata_sec_dao(cls, db: AsyncSession, sec):
db_sec = MetadataSec(**sec.model_dump()) db_sec = MetadataSec(**sec.model_dump())
db.add(db_sec) db.add(db_sec)
await db.flush() await db.flush()
return db_sec return db_sec
@classmethod @classmethod
async def get_by_sec_level_summary(cls, query_db: AsyncSession, sec_level_summary: str, exclude_onum: str = None): 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) stmt = select(MetadataSec).where(MetadataSec.sec_level_summary == sec_level_summary)
@ -136,6 +149,7 @@ class MetadataConfigDao:
@classmethod @classmethod
async def delete_metadata_sec_dao(cls, db: AsyncSession, onum_list: list[str]): async def delete_metadata_sec_dao(cls, db: AsyncSession, onum_list: list[str]):
await db.execute(delete(MetadataSec).where(MetadataSec.onum.in_(onum_list))) await db.execute(delete(MetadataSec).where(MetadataSec.onum.in_(onum_list)))
# ------------- t_secu_biz_config 相关方法 -------------- # ------------- t_secu_biz_config 相关方法 --------------
@classmethod @classmethod
@ -173,6 +187,7 @@ class MetadataConfigDao:
@classmethod @classmethod
async def delete_biz_config(cls, db: AsyncSession, onum_list: list[int]): async def delete_biz_config(cls, db: AsyncSession, onum_list: list[int]):
await db.execute(delete(SecuBizConfig).where(SecuBizConfig.onum.in_(onum_list))) await db.execute(delete(SecuBizConfig).where(SecuBizConfig.onum.in_(onum_list)))
@classmethod @classmethod
async def add_biz_permi_config_batch(cls, db: AsyncSession, records: List[SecuBizPermiConfig]): async def add_biz_permi_config_batch(cls, db: AsyncSession, records: List[SecuBizPermiConfig]):
orm_objs = [] orm_objs = []
@ -190,6 +205,7 @@ class MetadataConfigDao:
) )
orm_objs.append(orm_obj) orm_objs.append(orm_obj)
db.add_all(orm_objs) db.add_all(orm_objs)
# ------------- t_secu_biz_permi_config 相关方法 -------------- # ------------- t_secu_biz_permi_config 相关方法 --------------
@classmethod @classmethod
@ -247,6 +263,7 @@ class MetadataConfigDao:
return await PageUtil.paginate( return await PageUtil.paginate(
db, query, query_object.page_num, query_object.page_size, is_page db, query, query_object.page_num, query_object.page_size, is_page
) )
@classmethod @classmethod
async def add_biz_permi_config(cls, db: AsyncSession, obj): async def add_biz_permi_config(cls, db: AsyncSession, obj):
db_obj = SecuBizPermiConfig(**obj.model_dump()) db_obj = SecuBizPermiConfig(**obj.model_dump())
@ -263,17 +280,21 @@ class MetadataConfigDao:
@classmethod @classmethod
async def delete_biz_permi_config(cls, db: AsyncSession, onum_list: list[int]): async def delete_biz_permi_config(cls, db: AsyncSession, onum_list: list[int]):
await db.execute(delete(SecuBizPermiConfig).where(SecuBizPermiConfig.onum.in_(onum_list))) await db.execute(delete(SecuBizPermiConfig).where(SecuBizPermiConfig.onum.in_(onum_list)))
# ----------------------------------biz_confg_rela------------------------------
# ----------------------------------biz_confg_rela------------------------------
@classmethod @classmethod
async def delete_biz_rela_dao(cls, db: AsyncSession, biz_onum: int): 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 @classmethod
async def delete_biz_rela_batch(cls, db: AsyncSession, bonum_list: list[int]): 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 @classmethod
async def add_batch_biz_rela_dao(cls, db: AsyncSession, rela_list: List[SecuBizConfigRela]): async def add_batch_biz_rela_dao(cls, db: AsyncSession, rela_list: List[SecuBizConfigRela]):
db.add_all(rela_list) db.add_all(rela_list)
await db.flush() await db.flush()
@classmethod @classmethod
async def get_biz_rela_by_biz_id(cls, db: AsyncSession, biz_onum: int): async def get_biz_rela_by_biz_id(cls, db: AsyncSession, biz_onum: int):
result = await db.execute( result = await db.execute(
@ -282,6 +303,7 @@ class MetadataConfigDao:
.where(SecuBizConfigRela.biz_onum == biz_onum) .where(SecuBizConfigRela.biz_onum == biz_onum)
) )
return result.scalars().all() return result.scalars().all()
@classmethod @classmethod
async def get_detail_by_id(cls, db: AsyncSession, onum: int): async def get_detail_by_id(cls, db: AsyncSession, onum: int):
""" """
@ -333,7 +355,8 @@ 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 @classmethod
async def get_task_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False): async def get_task_biz_config_list(cls, db: AsyncSession, query_object, is_page: bool = False):
query = select(TaskBizConfig).where( query = select(TaskBizConfig).where(

23
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 config.database import Base
from datetime import datetime from datetime import datetime
from sqlalchemy.dialects.mysql import MEDIUMTEXT from sqlalchemy.dialects.mysql import MEDIUMTEXT
# 数据标准模块相关表 # 数据标准模块相关表
class DataStdCode(Base): class DataStdCode(Base):
@ -23,7 +24,8 @@ class DataStdCode(Base):
src_sys = Column(String(50), default=None, comment='归属系统') src_sys = Column(String(50), default=None, comment='归属系统')
class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)') class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)')
parent_id = Column(String(50), default=None, comment='父id') 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): class DataStdCodeAppr(Base):
""" """
@ -43,12 +45,14 @@ class DataStdCodeAppr(Base):
src_sys = Column(String(50), default=None, comment='归属系统') src_sys = Column(String(50), default=None, comment='归属系统')
class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)') class_id = Column(String(10), default=None, comment='代码类型(code:代码 codeItem:代码项)')
parent_id = Column(String(50), default=None, comment='父id') 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')
changeType = Column(String(10), default=None, comment='变更类型') changeType = Column(String(10), default=None, comment='变更类型')
flowId = Column(String(50), default=None, comment='审批Id') flowId = Column(String(50), default=None, comment='审批Id')
oldInstId = Column(String(50), default=None, comment='原始正式id') oldInstId = Column(String(50), default=None, comment='原始正式id')
compareId = 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已取消)') approStatus = Column(String(10), default=None,
comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)')
class DataStdDict(Base): class DataStdDict(Base):
""" """
@ -73,6 +77,7 @@ class DataStdDict(Base):
src_sys_tab_fld_name = Column(MEDIUMTEXT, default=None, comment='来源系统表字段名') src_sys_tab_fld_name = Column(MEDIUMTEXT, default=None, comment='来源系统表字段名')
data_dict_stat = Column(String(1), default=None, comment='字典状态(1:有效 0:无效)') data_dict_stat = Column(String(1), default=None, comment='字典状态(1:有效 0:无效)')
class DataStdDictAppr(Base): class DataStdDictAppr(Base):
""" """
标准字典审批表 (Standard Code Table) 标准字典审批表 (Standard Code Table)
@ -99,7 +104,9 @@ class DataStdDictAppr(Base):
flowId = Column(String(50), default=None, comment='审批Id') flowId = Column(String(50), default=None, comment='审批Id')
oldInstId = Column(String(50), default=None, comment='原始正式id') oldInstId = Column(String(50), default=None, comment='原始正式id')
compareId = 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已取消)') approStatus = Column(String(10), default=None,
comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)')
class DataAstContent(Base): class DataAstContent(Base):
__tablename__ = "t_data_std_content" __tablename__ = "t_data_std_content"
@ -115,8 +122,6 @@ class DataAstContent(Base):
upd_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间') upd_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
class DataAstContentRela(Base): class DataAstContentRela(Base):
__tablename__ = "t_data_std_content_rela" __tablename__ = "t_data_std_content_rela"
@ -194,5 +199,5 @@ class DataStdMainAppr(Base):
flowId = Column(String(50), default=None, comment='审批Id') flowId = Column(String(50), default=None, comment='审批Id')
oldInstId = Column(String(50), default=None, comment='原始正式id') oldInstId = Column(String(50), default=None, comment='原始正式id')
compareId = 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已取消)') approStatus = Column(String(10), default=None,
comment='审批状态(waiting,申请中,pending审核中,succeed,rejected已审核,canceled已取消)')

2
vue-fastapi-backend/module_admin/entity/do/meta_do.py

@ -130,6 +130,7 @@ class MetadataFldSuppInfo(Base):
fld_clas = Column(Text, comment='字段分类') fld_clas = Column(Text, comment='字段分类')
fld_null_rate = Column(String(50, collation='utf8_general_ci'), 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_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='记录状态') rec_stat = Column(String(50, collation='utf8_general_ci'), comment='记录状态')
upd_time = Column(DateTime, comment='更新时间') upd_time = Column(DateTime, comment='更新时间')
@ -153,6 +154,7 @@ class MetadataFldSuppInfoVett(Base):
fld_clas = Column(Text, comment='字段分类') fld_clas = Column(Text, comment='字段分类')
fld_null_rate = Column(String(50, collation='utf8_general_ci'), 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_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='记录状态') rec_stat = Column(String(50, collation='utf8_general_ci'), comment='记录状态')
upd_time = Column(DateTime, comment='更新时间') upd_time = Column(DateTime, comment='更新时间')
rec_subm_prsn = Column(String(255, collation='utf8_general_ci'), comment='记录提交人') rec_subm_prsn = Column(String(255, collation='utf8_general_ci'), comment='记录提交人')

1
vue-fastapi-backend/module_admin/entity/vo/meta_vo.py

@ -41,6 +41,7 @@ class ColumnSuppleModel(BaseModel):
fld_null_rate: Optional[str] = None fld_null_rate: Optional[str] = None
rec_stat: Optional[str] = None rec_stat: Optional[str] = None
data_dict_id: Optional[str] = None data_dict_id: Optional[str] = None
data_sec_lvl: Optional[str] = None
class SuppleModel(BaseModel): class SuppleModel(BaseModel):

37
vue-fastapi-backend/module_admin/service/approval_service.py

@ -4,7 +4,8 @@ import uuid
from typing import Optional from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.vo.common_vo import CrudResponseModel 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.vo.user_vo import CurrentUserModel
from module_admin.entity.do.approval_do import FlowApproval from module_admin.entity.do.approval_do import FlowApproval
from exceptions.exception import ServiceException, ServiceWarning 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.meta_dao import MetaDao
from module_admin.dao.datastd_dao import DataStdDao from module_admin.dao.datastd_dao import DataStdDao
from module_admin.dao.dataast_dao import DataAstDao from module_admin.dao.dataast_dao import DataAstDao
from module_admin.entity.vo.dataast_vo import DataAstApprModel,DataAstInfoModel 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.datastd_vo import DataStdCodeModel, DataStdDictModel, DataStdMainModel, \
DataStdMainApprModel, DataStdDictApprModel, DataStdDictModel, DataStdCodeApprModel
class ApprovalService: class ApprovalService:
@ -138,6 +139,7 @@ class ApprovalService:
else: else:
await MetaDao.updateMetadataSuppInfo(suppTable.onum, table, result_db) await MetaDao.updateMetadataSuppInfo(suppTable.onum, table, result_db)
return CrudResponseModel(is_success=True, message='操作成功') return CrudResponseModel(is_success=True, message='操作成功')
@classmethod @classmethod
async def syncStdMainInfo(cls, result_db: AsyncSession, suppId: str, operateType: str): async def syncStdMainInfo(cls, result_db: AsyncSession, suppId: str, operateType: str):
apprList = await DataStdDao.get_std_main_appr_list(suppId, result_db) apprList = await DataStdDao.get_std_main_appr_list(suppId, result_db)
@ -147,7 +149,7 @@ class ApprovalService:
appr_model = DataStdMainApprModel.model_validate(appr) appr_model = DataStdMainApprModel.model_validate(appr)
change_type = appr_model.changeType change_type = appr_model.changeType
if operateType =='succeed': if operateType == 'succeed':
if change_type == "add": if change_type == "add":
# 将 DataStdMainApprModel 转换为 DataStdMainModel # 将 DataStdMainApprModel 转换为 DataStdMainModel
main_model = DataStdMainModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) main_model = DataStdMainModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))
@ -167,7 +169,6 @@ class ApprovalService:
appr_model.approStatus = operateType appr_model.approStatus = operateType
await DataStdDao.update_std_main_appr(result_db, appr_model) await DataStdDao.update_std_main_appr(result_db, appr_model)
return CrudResponseModel(is_success=True, message='操作成功') return CrudResponseModel(is_success=True, message='操作成功')
@classmethod @classmethod
@ -179,7 +180,7 @@ class ApprovalService:
appr_model = DataStdDictApprModel.model_validate(appr) appr_model = DataStdDictApprModel.model_validate(appr)
change_type = appr_model.changeType change_type = appr_model.changeType
if operateType =='succeed': if operateType == 'succeed':
if change_type == "add": if change_type == "add":
# 将 DataStdDictApprModel 转换为 DataStdDictModel # 将 DataStdDictApprModel 转换为 DataStdDictModel
main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) main_model = DataStdDictModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))
@ -200,7 +201,6 @@ class ApprovalService:
appr_model.approStatus = operateType appr_model.approStatus = operateType
await DataStdDao.update_std_dict_appr(result_db, appr_model) await DataStdDao.update_std_dict_appr(result_db, appr_model)
return CrudResponseModel(is_success=True, message='操作成功') return CrudResponseModel(is_success=True, message='操作成功')
@classmethod @classmethod
@ -212,7 +212,7 @@ class ApprovalService:
appr_model = DataStdCodeApprModel.model_validate(appr) appr_model = DataStdCodeApprModel.model_validate(appr)
change_type = appr_model.changeType change_type = appr_model.changeType
if operateType =='succeed': if operateType == 'succeed':
if change_type == "add": if change_type == "add":
main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) main_model = DataStdCodeModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))
@ -235,6 +235,7 @@ class ApprovalService:
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='操作成功') return CrudResponseModel(is_success=True, message='操作成功')
@classmethod @classmethod
async def syncDataAstInfo(cls, result_db: AsyncSession, suppId: str, operateType: str): async def syncDataAstInfo(cls, result_db: AsyncSession, suppId: str, operateType: str):
apprList = await DataAstDao.get_dataast_appr_list_Flow(suppId, result_db) apprList = await DataAstDao.get_dataast_appr_list_Flow(suppId, result_db)
@ -243,14 +244,13 @@ class ApprovalService:
# 将 SQLAlchemy 模型实例转换为 Pydantic 模型实例 # 将 SQLAlchemy 模型实例转换为 Pydantic 模型实例
appr_model = DataAstApprModel.model_validate(appr) appr_model = DataAstApprModel.model_validate(appr)
change_type = appr_model.changeType change_type = appr_model.changeType
if operateType =='succeed': if operateType == 'succeed':
if change_type == "add": if change_type == "add":
# logger.info(f"发现新增类型变更,准备添加数据资产,AST_NO: {appr_model.ast_no}") # logger.info(f"发现新增类型变更,准备添加数据资产,AST_NO: {appr_model.ast_no}")
main_model = DataAstInfoModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) main_model = DataAstInfoModel(**appr_model.model_dump(exclude_unset=True, by_alias=True))
await DataAstDao.add_dataast_data(result_db, main_model) await DataAstDao.add_dataast_data(result_db, main_model)
# logger.info(f"数据资产添加成功,AST_NO: {main_model.ast_no}") # logger.info(f"数据资产添加成功,AST_NO: {main_model.ast_no}")
# 更新 approStatus 状态 # 更新 approStatus 状态
appr_model.approStatus = operateType appr_model.approStatus = operateType
main_appro_model = DataStdCodeApprModel(**appr_model.model_dump(exclude_unset=True, by_alias=True)) 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='操作成功') return CrudResponseModel(is_success=True, message='操作成功')
@classmethod @classmethod
async def get_flow_list_services(cls, query_db: AsyncSession, query_param: ApprovalQueryObject, async def get_flow_list_services(cls, query_db: AsyncSession, query_param: ApprovalQueryObject,
current_user: CurrentUserModel): current_user: CurrentUserModel):
@ -282,27 +280,27 @@ class ApprovalService:
for item in approval_list: for item in approval_list:
nextRoles = json.loads(item.nextStepRole) nextRoles = json.loads(item.nextStepRole)
nextUsers = json.loads(item.nextStepUser) 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: if current_user.user.user_name in nextUsers:
count = count+1 count = count + 1
break break
if any(element in set(current_user.roles) for element in nextRoles): if any(element in set(current_user.roles) for element in nextRoles):
count = count+1 count = count + 1
break break
if len(nextRoles) > 0 and len(nextUsers) == 0: if len(nextRoles) > 0 and len(nextUsers) == 0:
if any(element in set(current_user.roles) for element in nextRoles): if any(element in set(current_user.roles) for element in nextRoles):
count = count+1 count = count + 1
break break
if len(nextRoles) == 0 and len(nextUsers) > 0: if len(nextRoles) == 0 and len(nextUsers) > 0:
if current_user.user.user_name in nextUsers: if current_user.user.user_name in nextUsers:
count = count+1 count = count + 1
break break
return count return count
@classmethod @classmethod
async def cancel_apply_services(cls, query_db: AsyncSession, flow_id: str, async def cancel_apply_services(cls, query_db: AsyncSession, flow_id: str,
current_user: CurrentUserModel): current_user: CurrentUserModel):
flow = await ApprovalDao.get_flow_by_idAndUser(query_db,flow_id, current_user.user.user_name) flow = await ApprovalDao.get_flow_by_idAndUser(query_db, flow_id, current_user.user.user_name)
if flow is None: if flow is None:
raise ServiceException(message=f'所操作的流程不存在') raise ServiceException(message=f'所操作的流程不存在')
if flow.status == 'succeed' or flow.status == 'rejected': if flow.status == 'succeed' or flow.status == 'rejected':
@ -335,4 +333,3 @@ class ApprovalService:
await ApprovalDao.add_flow_config(query_db, confDict) await ApprovalDao.add_flow_config(query_db, confDict)
await query_db.commit() await query_db.commit()
return CrudResponseModel(is_success=True, message='操作成功') return CrudResponseModel(is_success=True, message='操作成功')

17
vue-fastapi-backend/module_admin/service/meta_service.py

@ -46,8 +46,13 @@ class MetaService:
table['batchTabClas'] = CamelCaseUtil.transform_result(tab_list) table['batchTabClas'] = CamelCaseUtil.transform_result(tab_list)
return meta_rel_list return meta_rel_list
else: else:
# meta_rel_list = MetaDao.get_meta_rel_list(result_db, query_object, data_scope_sql) meta_rel_list = await MetaDao.get_meta_rel_list(result_db, query_object)
return None 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 @classmethod
async def get_meta_col_list_services(cls, result_db: AsyncSession, query_object: MetaColObject): 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'], fld_list = await MetaDao.get_meta_fld_clas(result_db, column['ssysCd'], column['mdlName'],
column['tabEngName'], column['fldEngName']) column['tabEngName'], column['fldEngName'])
column['batchFldClas'] = CamelCaseUtil.transform_result(fld_list) 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 return result
@classmethod @classmethod
@ -99,7 +108,7 @@ class MetaService:
supple.tab_eng_name, supple.tab_eng_name,
column.fld_eng_name, result_db) column.fld_eng_name, result_db)
data_dict_name = '' 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) 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 '' 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, 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_clas = column.fld_clas
suppColumnInfo.fld_null_rate = column.fld_null_rate suppColumnInfo.fld_null_rate = column.fld_null_rate
suppColumnInfo.data_dict_id = column.data_dict_id suppColumnInfo.data_dict_id = column.data_dict_id
suppColumnInfo.data_sec_lvl = column.data_sec_lvl
suppColumnInfo.rec_stat = column.rec_stat suppColumnInfo.rec_stat = column.rec_stat
suppColumnInfo.rec_subm_prsn = current_user.user.user_name suppColumnInfo.rec_subm_prsn = current_user.user.user_name
suppColumnInfo.apply_time = applyTime suppColumnInfo.apply_time = applyTime
@ -174,6 +184,7 @@ class MetaService:
fldClas=column.fld_clas if column and column.fld_clas else None, 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, 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, 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, dataDictName=dictName,
recStat=column.rec_stat if column and column.rec_stat else None, 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 updTime=column.upd_time.isoformat() if column and column.upd_time else None

8
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) result = await MetadataConfigDao.get_metadata_sec_list(query_db, query_object, is_page)
return result 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 @classmethod
async def add_metadata_sec_services(cls, query_db: AsyncSession, page_object: MetadataSecModel): async def add_metadata_sec_services(cls, query_db: AsyncSession, page_object: MetadataSecModel):
""" """

8
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) { export function getMetadataSec(secId) {
return request({ return request({

42
vue-fastapi-frontend/src/views/meta/metaInfo/index.vue

@ -313,6 +313,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="引用字典/标准" align="center" prop="dataDictName"></el-table-column> <el-table-column label="引用字典/标准" align="center" prop="dataDictName"></el-table-column>
<el-table-column label="安全等级" align="center" prop="dataSecLvl"></el-table-column>
<el-table-column label="更新时间" align="center" prop="suppUpdTime" width="180"> <el-table-column label="更新时间" align="center" prop="suppUpdTime" width="180">
<template #default="scope"> <template #default="scope">
<template v-if="scope.row.suppUpdTime && scope.row.suppUpdTime !== ''"> <template v-if="scope.row.suppUpdTime && scope.row.suppUpdTime !== ''">
@ -521,6 +522,21 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="安全等级">
<el-select
v-model="currentColumnData.dataSecLvl"
filterable
style="width: 192px"
placeholder="请输入关键词"
:loading="loading">
<el-option
v-for="item in secLvlOptions"
:key="item.onum"
:label="item.secLevelSummary + ' - ' + item.secLevelName"
:value="item.secLevelSummary">
</el-option>
</el-select>
</el-form-item>
</el-form> </el-form>
<el-form :model="currentColumnTag" :inline="true" label-width="100px"> <el-form :model="currentColumnTag" :inline="true" label-width="100px">
<el-form-item label="一级分类:" prop="userName"> <el-form-item label="一级分类:" prop="userName">
@ -738,6 +754,7 @@
import cache from "@/plugins/cache"; import cache from "@/plugins/cache";
import BusinssRelation from "./businssRelation.vue"; import BusinssRelation from "./businssRelation.vue";
import BloodRelation from "./bloodRelation.vue"; import BloodRelation from "./bloodRelation.vue";
import {listMetadataSecOptions} from "@/api/metadataConfig/metadataConfig.js";
const data = reactive({ const data = reactive({
queryParams:{ queryParams:{
@ -823,6 +840,7 @@
"clasScdClas": "" "clasScdClas": ""
}); });
const stddictOptions = ref([]) const stddictOptions = ref([])
const secLvlOptions = ref([])
function changeColumnTab(){ function changeColumnTab(){
if (activeColumnTab.value === 'businessRelation'){ if (activeColumnTab.value === 'businessRelation'){
@ -858,6 +876,11 @@
}) })
} }
} }
function remoteSecLvl(){
listMetadataSecOptions().then(res=>{
secLvlOptions.value = res.data
})
}
function generateDemoData(){ function generateDemoData(){
let param ={ let param ={
dataAstSrc: currentMetaData.value.ssysCd, dataAstSrc: currentMetaData.value.ssysCd,
@ -965,6 +988,10 @@
columnList.value[i].dataDictName = currentColumnData.value.dataDictName columnList.value[i].dataDictName = currentColumnData.value.dataDictName
changed = true changed = true
} }
if (columnList.value[i].dataSecLvl !== currentColumnData.value.dataSecLvl){
columnList.value[i].dataSecLvl = currentColumnData.value.dataSecLvl
changed = true
}
if (currentColumnData.value.showFldClas && currentColumnData.value.showFldClas.length > 0){ if (currentColumnData.value.showFldClas && currentColumnData.value.showFldClas.length > 0){
let showFldClas = currentColumnData.value.showFldClas let showFldClas = currentColumnData.value.showFldClas
let fldClas = [] let fldClas = []
@ -1037,8 +1064,21 @@
} }
columnInfoDialog.value = false columnInfoDialog.value = false
if (changed){ if (changed){
if (changedColumns.value.length>0){
let hasCol = false
for (let i = 0; i < changedColumns.value.length; i++) {
if (changedColumns.value[i].fldEngName === currentColumnData.value.fldEngName){
changedColumns.value[i] = currentColumnData.value
hasCol = true
}
}
if (!hasCol){
changedColumns.value.push(currentColumnData.value) changedColumns.value.push(currentColumnData.value)
} }
}else{
changedColumns.value.push(currentColumnData.value)
}
}
} }
function addTableTag(){ function addTableTag(){
let json = JSON.parse(JSON.stringify(currentTableTag.value)) let json = JSON.parse(JSON.stringify(currentTableTag.value))
@ -1188,6 +1228,7 @@
metaClasList.value = res.data metaClasList.value = res.data
}) })
remoteStddict() remoteStddict()
remoteSecLvl()
} }
function showColumnDialog(row) { function showColumnDialog(row) {
let tableData = JSON.parse(JSON.stringify(row)) let tableData = JSON.parse(JSON.stringify(row))
@ -1501,6 +1542,7 @@
fldClas: JSON.stringify(column.showFldClas), fldClas: JSON.stringify(column.showFldClas),
fldNullRate: column.fldNullRate, fldNullRate: column.fldNullRate,
dataDictId: column.dataDictId, dataDictId: column.dataDictId,
dataSecLvl: column.dataSecLvl,
recStat: column.recStat recStat: column.recStat
}) })
} }

13
vue-fastapi-frontend/src/views/system/flow/index.vue

@ -344,6 +344,12 @@
<span v-else style="color: red">{{scope.row.dataDictName}}</span> <span v-else style="color: red">{{scope.row.dataDictName}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="安全等级" align="center" prop="dataSecLvl">
<template #default="scope">
<span v-if="oldColumnList[scope.$index].dataSecLvl === newColumnList[scope.$index].dataSecLvl">{{scope.row.dataSecLvl}}</span>
<span v-else style="color: red">{{scope.row.dataSecLvl}}</span>
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
<br><br> <br><br>
@ -524,6 +530,12 @@
<span v-else style="color: red">{{scope.row.dataDictName}}</span> <span v-else style="color: red">{{scope.row.dataDictName}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="安全等级" align="center" prop="dataSecLvl">
<template #default="scope">
<span v-if="oldColumnList[scope.$index].dataSecLvl === newColumnList[scope.$index].dataSecLvl">{{scope.row.dataSecLvl}}</span>
<span v-else style="color: red">{{scope.row.dataSecLvl}}</span>
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
</el-dialog> </el-dialog>
@ -983,6 +995,7 @@ function showBusinessDataDialog(row){
fldCnName:column.fldCnName, fldCnName:column.fldCnName,
fldType:column.fldType, fldType:column.fldType,
dataDictName: col.dataDictName, dataDictName: col.dataDictName,
dataSecLvl: col.dataSecLvl,
showColClas: showNewColClas showColClas: showNewColClas
}) })
} }

Loading…
Cancel
Save