Browse Source

元数据模块增加安全等级

master
xueyinfei 2 months ago
parent
commit
7499f35002
  1. 57
      vue-fastapi-backend/module_admin/controller/metadata_config_controller.py
  2. 93
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  3. 4
      vue-fastapi-backend/module_admin/dao/meta_dao.py
  4. 29
      vue-fastapi-backend/module_admin/dao/metadata_config_dao.py
  5. 17
      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. 15
      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

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

@ -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(
@ -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,
@ -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,
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 = DeleteMetataskModel(metatask_ids=metatask_ids, ds_ids=ds_ids)
delete_config_result = await DatasecConfigService.delete_datasec_services(request, query_db, delete_config,current_user) 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,13 +598,12 @@ 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,
@ -596,6 +615,8 @@ async def DS_meta_metatask_detail(
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)
@ -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,
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 = 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) 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)

93
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
@ -21,6 +23,7 @@ class DataStdDao:
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 = []
@ -132,6 +135,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_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(
@ -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):
""" """
@ -164,6 +170,7 @@ class DataStdDao:
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):
# 构建查询条件 # 构建查询条件
@ -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 = (
@ -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):
@ -438,7 +452,6 @@ 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(
@ -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):
""" """
@ -719,7 +758,6 @@ class DataStdDao:
) )
) )
await cls.update_leaf_node_flag(db) await cls.update_leaf_node_flag(db)
@classmethod @classmethod
@ -735,7 +773,8 @@ 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()
@ -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'],
DataAstContent.supr_content_onum == merge_catalog_data['supr_content_onum'])
.values(content_stat='0') .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,7 +836,8 @@ 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']
)) ))
@ -802,7 +845,6 @@ class DataStdDao:
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,7 +857,8 @@ 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()
@ -823,8 +866,10 @@ class DataStdDao:
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,6 +926,7 @@ 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):
@ -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 = []
@ -1075,6 +1129,7 @@ class DataStdDao:
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 = []
@ -1086,10 +1141,12 @@ 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(
@ -1102,6 +1159,7 @@ 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(
@ -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)

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

@ -2,7 +2,8 @@ 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, \
DatasecConfig, \
TaskBizConfigRela, TaskBizConfig 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,6 +355,7 @@ 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):

17
vue-fastapi-backend/module_admin/entity/do/datastd_do.py

@ -3,6 +3,7 @@ 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):
@ -25,6 +26,7 @@ class DataStdCode(Base):
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):
""" """
标准代码表 (Standard Code Table) 标准代码表 (Standard Code Table)
@ -48,7 +50,9 @@ class DataStdCodeAppr(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 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):

15
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
@ -16,8 +17,8 @@ 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)
@ -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
@ -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
@ -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)
@ -250,7 +251,6 @@ class ApprovalService:
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):
@ -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