Browse Source

问题修复

master
si@aidatagov.com 1 week ago
parent
commit
12ed4e8c92
  1. 346
      vue-fastapi-backend/module_admin/service/datastd_service.py
  2. 12
      vue-fastapi-backend/module_admin/service/metatask_service.py
  3. 34
      vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue

346
vue-fastapi-backend/module_admin/service/datastd_service.py

@ -1767,15 +1767,19 @@ class DataStdService:
file: UploadFile, file: UploadFile,
current_user: CurrentUserModel current_user: CurrentUserModel
): ):
"""
批量导入标准信息
"""
# Step 1: 读取 Excel # Step 1: 读取 Excel
content = await file.read() content = await file.read()
try: try:
df = pd.read_excel(io.BytesIO(content)) df = pd.read_excel(io.BytesIO(content))
except Exception: except Exception:
raise HTTPException(status_code=400, detail="Excel 文件解析失败") raise HTTPException(status_code=400, detail="Excel 文件解析失败")
if df.empty: if df.empty:
raise HTTPException(status_code=400, detail="导入文件内容为空") raise HTTPException(status_code=400, detail="导入文件内容为空")
std_type_mapping = { std_type_mapping = {
'基础数据': '0', '基础数据': '0',
'指标数据': '1' '指标数据': '1'
@ -1784,10 +1788,11 @@ class DataStdService:
'公司级': 'company', '公司级': 'company',
'系统级': 'sys' '系统级': 'sys'
} }
# 获取全量标准代码 # 获取全量标准代码
std_code_list = await DataStdDao.get_std_code_list_all(query_db) std_code_list = await DataStdDao.get_std_code_list_all(query_db)
# Step 2: 表头映射(中文转英文字段名) # Step 2: 表头映射
header_dict = { header_dict = {
'标准归属': 'data_std_vest', '标准归属': 'data_std_vest',
'来源系统': 'std_source_system', '来源系统': 'std_source_system',
@ -1805,104 +1810,137 @@ class DataStdService:
'业务认责人员': 'biz_person', '业务认责人员': 'biz_person',
'技术认责部门': 'tech_dept', '技术认责部门': 'tech_dept',
'技术认责人员': 'tech_person', '技术认责人员': 'tech_person',
} }
df.rename(columns=header_dict, inplace=True) df.rename(columns=header_dict, inplace=True)
# ds系统列表
data_tree_result = await MetataskService.get_data_source_tree( request,current_user) # 获取 DS 系统列表
data_tree_result = await MetataskService.get_data_source_tree(request, current_user)
# Step 3: 生成统一 flowId # Step 3: 生成统一 flowId
batch_flow_id = str(uuid.uuid4()) batch_flow_id = str(uuid.uuid4())
# 统一字符串清洗函数
def safe_str(val):
if pd.isna(val):
return ""
return str(val).strip()
try: try:
for idx, row in df.iterrows(): for idx, row in df.iterrows():
# VO 数据校验
try: try:
input_code_no = row.get('code_no') # === 基础字段取值 ===
matched_code = next((item for item in std_code_list if item.cd_no == input_code_no), None) input_code_no = safe_str(row.get('code_no'))
input_src_sys = safe_str(row.get('std_source_system'))
if input_code_no and not matched_code: input_std_vest = safe_str(row.get('data_std_vest'))
raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,代码编号 [{input_code_no}] 在系统中不存在") input_std_type = safe_str(row.get('std_type'))
# 获取来源系统字段 input_dir = safe_str(row.get('std_dir'))
input_src_sys = row.get("std_source_system") input_data_std_no = safe_str(row.get('data_std_no'))
matched_source = next((ds for ds in data_tree_result if ds.name == input_src_sys or str(ds.id) == str(input_src_sys)), None) input_std_name_zh = safe_str(row.get('std_name_zh'))
# === 获取标准目录树 === input_std_name_en = safe_str(row.get('std_name_en'))
catalog_result = await cls.get_catalog_list_services(query_db, query_object=None, user_id=current_user.user.user_id, is_page=True) input_std_definition = safe_str(row.get('std_definition'))
input_std_source = safe_str(row.get('std_source'))
# 将目录树展开成 { "一级目录/二级目录": contentOnum } 结构 input_data_category = safe_str(row.get('data_category'))
def build_catalog_mapping(node, path="", mapping=None): input_security_level = safe_str(row.get('security_level'))
if mapping is None: input_biz_dept = safe_str(row.get('biz_dept'))
mapping = {} input_biz_person = safe_str(row.get('biz_person'))
current_path = f"{path}/{node['contentName']}" if path else node['contentName'] input_tech_dept = safe_str(row.get('tech_dept'))
mapping[current_path] = node['contentOnum'] input_tech_person = safe_str(row.get('tech_person'))
for child in node.get("children", []):
build_catalog_mapping(child, current_path, mapping) # === 校验标准代码编号 ===
return mapping matched_code = next(
(item for item in std_code_list if item.cd_no == input_code_no),
catalog_mapping = build_catalog_mapping(catalog_result.rows[0]) None
# === 处理标准目录 === )
input_dir = row.get("std_dir") if input_code_no and not matched_code:
if not input_dir or str(input_dir).strip() == "": raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败:代码编号 [{input_code_no}] 在系统中不存在")
belt_content_onum = 2
else: # === 来源系统匹配 ===
input_dir = input_dir.strip() matched_source = next(
if input_dir not in catalog_mapping: (ds for ds in data_tree_result if ds.name == input_src_sys or str(ds.id) == input_src_sys),
raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,标准目录 [{input_dir}] 不存在") None
belt_content_onum = catalog_mapping[input_dir] )
# 如果能匹配到系统,则使用 id;否则判断是否为空
if matched_source: # === 获取标准目录树 ===
src_sys_id = matched_source.id catalog_result = await cls.get_catalog_list_services(
elif not input_src_sys or str(input_src_sys).strip() == "": query_db,
src_sys_id = 10000 query_object=None,
else: user_id=current_user.user.user_id,
raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,来源系统 [{input_src_sys}] 不存在") is_page=True
def safe_str(val): )
if pd.isna(val):
return "" # 构建目录映射
return str(val).strip() def build_catalog_mapping(node, path="", mapping=None):
# 如果存在,使用对应 onum 作为 cdId if mapping is None:
cd_id = matched_code.onum if matched_code else None mapping = {}
vo = DataStdMainModel( current_path = f"{path}/{node['contentName']}" if path else node['contentName']
dataStdVest=std_vest_mapping.get(row.get('data_std_vest'), 'company'), # 默认转为 'company', mapping[current_path] = node['contentOnum']
srcSys=src_sys_id, for child in node.get("children", []):
dataStdNo=row.get('data_std_no'), build_catalog_mapping(child, current_path, mapping)
dataStdCnName=row.get('std_name_zh'), return mapping
dataStdEngName=row.get('std_name_en'),
dataStdBusiDefn=row.get('std_definition'), catalog_mapping = build_catalog_mapping(catalog_result.rows[0])
dataStdType=std_type_mapping.get(row.get('std_type'), '1'), # 默认转为 '1',
dataStdSrc=row.get('std_source'), # === 处理标准目录 ===
dataClas=row.get('data_category'), if not input_dir:
dataSecLvl=str(row.get('security_level')), belt_content_onum = 2
cdId=cd_id, else:
dataStdBusiOwnershipDept=safe_str(row.get('biz_dept')), if input_dir not in catalog_mapping:
dataStdBusiOwnershipPrsn=safe_str(row.get('biz_person')), raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败:标准目录 [{input_dir}] 不存在")
dataStdItOwnershipDept=safe_str(row.get('tech_dept')), belt_content_onum = catalog_mapping[input_dir]
dataStdItOwnershipPrsn=safe_str(row.get('tech_person')),
beltDataStdContent=belt_content_onum, # 固定值 # === 来源系统 id 处理 ===
) if matched_source:
src_sys_id = matched_source.id
elif not input_src_sys:
src_sys_id = 10000
else:
raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败:来源系统 [{input_src_sys}] 不存在")
# === cdId ===
cd_id = matched_code.onum if matched_code else None
# === 构造 VO ===
vo = DataStdMainModel(
dataStdVest=std_vest_mapping.get(input_std_vest, 'company'),
srcSys=src_sys_id,
dataStdNo=input_data_std_no,
dataStdCnName=input_std_name_zh,
dataStdEngName=input_std_name_en,
dataStdBusiDefn=input_std_definition,
dataStdType=std_type_mapping.get(input_std_type, '1'),
dataStdSrc=input_std_source,
dataClas=input_data_category,
dataSecLvl=input_security_level,
cdId=cd_id,
dataStdBusiOwnershipDept=input_biz_dept,
dataStdBusiOwnershipPrsn=input_biz_person,
dataStdItOwnershipDept=input_tech_dept,
dataStdItOwnershipPrsn=input_tech_person,
beltDataStdContent=belt_content_onum,
)
except Exception as ve: except Exception as ve:
raise HTTPException(status_code=400, detail=f"{idx + 2} 行数据校验失败: {ve}") raise HTTPException(status_code=400, detail=f"{idx + 2} 行数据校验失败{ve}")
# 构造查询对象并检查是否存在 # === 查询是否存在 ===
query_obj = DataStdMainModel(dataStdNo=vo.data_std_no) query_obj = DataStdMainModel(dataStdNo=vo.data_std_no)
exist_model = await DataStdDao.get_data_main_by_info(query_db, query_obj) exist_model = await DataStdDao.get_data_main_by_info(query_db, query_obj)
# 构造审批模型(无论新增/修改) # === 构造审批模型 ===
model = DataStdMainModel(**vo.model_dump(exclude_unset=True, by_alias=True)) model = DataStdMainModel(**vo.model_dump(exclude_unset=True, by_alias=True))
model.create_by = current_user.user.user_name model.create_by = current_user.user.user_name
model.std_status = "1" model.std_status = "1"
model.create_time = datetime.now() model.create_time = datetime.now()
if exist_model: if exist_model:
# === 修改审批逻辑 === # 修改审批逻辑
# 标准正在审批中则抛错
wating_list = await DataStdDao.check_std_main_waiting(exist_model.onum, query_db) wating_list = await DataStdDao.check_std_main_waiting(exist_model.onum, query_db)
if wating_list: if wating_list:
raise ServiceException(message=f"{idx + 2} 行数据标准正在审批中,请等待审批完成") raise ServiceException(message=f"{idx + 2} 行数据标准正在审批中,请等待审批完成")
last_appr = await DataStdDao.get_last_std_main_appr_by_id(query_db, exist_model.onum) last_appr = await DataStdDao.get_last_std_main_appr_by_id(query_db, exist_model.onum)
model.onum = exist_model.onum model.onum = exist_model.onum
appr_model = DataStdMainApprModel(**model.model_dump(exclude_unset=True, by_alias=True)) appr_model = DataStdMainApprModel(**model.model_dump(exclude_unset=True, by_alias=True))
appr_model.changeType = "edit" appr_model.changeType = "edit"
appr_model.onum = str(uuid.uuid4()) appr_model.onum = str(uuid.uuid4())
@ -1911,33 +1949,31 @@ class DataStdService:
appr_model.approStatus = "waiting" appr_model.approStatus = "waiting"
appr_model.flowId = batch_flow_id appr_model.flowId = batch_flow_id
else: else:
# === 新增审批逻辑 === # 新增审批逻辑
model.onum = str(uuid.uuid4()) model.onum = str(uuid.uuid4())
appr_model = DataStdMainApprModel(**model.model_dump(exclude_unset=True, by_alias=True)) appr_model = DataStdMainApprModel(**model.model_dump(exclude_unset=True, by_alias=True))
appr_model.changeType = "add" appr_model.changeType = "add"
appr_model.compareId = model.onum appr_model.compareId = model.onum
appr_model.oldInstId = model.onum appr_model.oldInstId = model.onum
appr_model.oldInstId = model.onum
appr_model.approStatus = "waiting" appr_model.approStatus = "waiting"
appr_model.flowId = batch_flow_id appr_model.flowId = batch_flow_id
# 保存审批数据 # 保存审批数据
await DataStdDao.add_std_main_appr(query_db, appr_model) await DataStdDao.add_std_main_appr(query_db, appr_model)
# 全部处理完成后统一发起审批流程 # === 批量发起审批 ===
apply_model = ApplyModel() apply_model = ApplyModel()
apply_model.businessType = "dataStdMain" apply_model.businessType = "dataStdMain"
apply_model.businessId = batch_flow_id apply_model.businessId = batch_flow_id
apply_model.applicant = current_user.user.user_name apply_model.applicant = current_user.user.user_name
await ApprovalService.apply_services(query_db, apply_model, 'dataStdMain') await ApprovalService.apply_services(query_db, apply_model, 'dataStdMain')
await query_db.commit() await query_db.commit()
return CrudResponseModel(is_success=True, message="批量导入标准成功") return CrudResponseModel(is_success=True, message="批量导入标准成功")
except Exception as e: except Exception as e:
await query_db.rollback() await query_db.rollback()
raise ServiceException(message=f"导入失败:{str(e)}") raise ServiceException(message=f"导入失败:{str(e)}")
@classmethod @classmethod
async def batch_import_dict_services( async def batch_import_dict_services(
cls, cls,
@ -1946,15 +1982,19 @@ class DataStdService:
file: UploadFile, file: UploadFile,
current_user: CurrentUserModel current_user: CurrentUserModel
): ):
"""
批量导入数据字典服务
"""
# Step 1: 读取 Excel # Step 1: 读取 Excel
content = await file.read() content = await file.read()
try: try:
df = pd.read_excel(io.BytesIO(content)) df = pd.read_excel(io.BytesIO(content))
except Exception: except Exception:
raise HTTPException(status_code=400, detail="Excel 文件解析失败") raise HTTPException(status_code=400, detail="Excel 文件解析失败")
if df.empty: if df.empty:
raise HTTPException(status_code=400, detail="导入文件内容为空") raise HTTPException(status_code=400, detail="导入文件内容为空")
std_type_mapping = { std_type_mapping = {
'基础数据': '0', '基础数据': '0',
'指标数据': '1' '指标数据': '1'
@ -1963,10 +2003,11 @@ class DataStdService:
'公司级': 'company', '公司级': 'company',
'系统级': 'sys' '系统级': 'sys'
} }
# 获取全量标准代码
# 获取全量标准主表数据
std_list = await DataStdDao.get_std_main_list_import(query_db) std_list = await DataStdDao.get_std_main_list_import(query_db)
# Step 2: 表头映射(中文英文字段名) # Step 2: 表头映射(中文 -> 英文字段名)
header_dict = { header_dict = {
'字典归属': 'data_dict_vest', '字典归属': 'data_dict_vest',
'来源系统': 'source_system', '来源系统': 'source_system',
@ -1978,72 +2019,75 @@ class DataStdService:
'数据类型': 'data_type', '数据类型': 'data_type',
'数据标准': 'data_std' '数据标准': 'data_std'
} }
df.rename(columns=header_dict, inplace=True) df.rename(columns=header_dict, inplace=True)
# ds系统列表
data_tree_result = await MetataskService.get_data_source_tree( request,current_user) # ds 系统树
data_tree_result = await MetataskService.get_data_source_tree(request, current_user)
# Step 3: 生成统一 flowId # Step 3: 生成统一 flowId
batch_flow_id = str(uuid.uuid4()) batch_flow_id = str(uuid.uuid4())
# 安全字符串函数
def safe_str(val):
if pd.isna(val):
return ""
return str(val).strip()
try: try:
for idx, row in df.iterrows(): for idx, row in df.iterrows():
# VO 数据校验
try: try:
input_code_no = row.get('data_std') # === 1. 校验数据标准 ===
matched_code = next((item for item in std_list if item.data_std_no == input_code_no), None) input_code_no = safe_str(row.get('data_std'))
matched_code = next((item for item in std_list if item.data_std_no == input_code_no), None)
if input_code_no and not matched_code: if input_code_no and not matched_code:
raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,数据标准 [{input_code_no}] 在系统中不存在") raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,数据标准 [{input_code_no}] 在系统中不存在")
# 获取来源系统字段
input_src_sys = row.get("source_system") # === 2. 来源系统匹配 ===
matched_source = next((ds for ds in data_tree_result if ds.name == input_src_sys or str(ds.id) == str(input_src_sys)), None) input_src_sys = safe_str(row.get("source_system"))
matched_source = next((ds for ds in data_tree_result if ds.name == input_src_sys or str(ds.id) == str(input_src_sys)), None)
# 如果能匹配到系统,则使用 id;否则判断是否为空
if matched_source: if matched_source:
src_sys_id = matched_source.id src_sys_id = matched_source.id
elif not input_src_sys or str(input_src_sys).strip() == "": elif not input_src_sys:
src_sys_id = 10000 src_sys_id = 10000
else: else:
raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,来源系统 [{input_src_sys}] 不存在") raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,来源系统 [{input_src_sys}] 不存在")
# 如果存在,使用对应 onum 作为 cdId # === 3. 构造 VO ===
cd_id = matched_code.data_std_no if matched_code else None cd_id = matched_code.data_std_no if matched_code else None
vo = DataStdDictModel( vo = DataStdDictModel(
dataDictVest=std_vest_mapping.get(row.get('data_dict_vest'), 'company'), # 默认转为 'company', dataDictVest=std_vest_mapping.get(safe_str(row.get('data_dict_vest')), 'company'),
srcSys=str(src_sys_id), srcSys=str(src_sys_id),
dataDictNo=row.get('dict_no'), dataDictNo=safe_str(row.get('dict_no')),
dataDictCnName=row.get('dict_name_zh'), dataDictCnName=safe_str(row.get('dict_name_zh')),
dataDictEngName=row.get('dict_name_en'), dataDictEngName=safe_str(row.get('dict_name_en')),
dataDictBusiMean=row.get('dict_definition'), dataDictBusiMean=safe_str(row.get('dict_definition')),
dataDictType=std_type_mapping.get(row.get('dict_type'), '1'), # 默认转为 '1', dataDictType=std_type_mapping.get(safe_str(row.get('dict_type')), '1'),
dataDictDataType=str(row.get('data_type')), dataDictDataType=safe_str(row.get('data_type')),
dataStdNo=cd_id, dataStdNo=cd_id,
dataDictStat="1", # 固定值 dataDictStat="1",
) )
except Exception as ve: except Exception as ve:
raise HTTPException(status_code=400, detail=f"{idx + 2} 行数据校验失败: {ve}") raise HTTPException(status_code=400, detail=f"{idx + 2} 行数据校验失败: {ve}")
# 构造查询对象并检查是否存在 # === 4. 判断是否已存在 ===
query_obj = DataStdDictModel(dataDictNo=vo.data_dict_no) query_obj = DataStdDictModel(dataDictNo=vo.data_dict_no)
exist_model = await DataStdDao.get_data_dict_by_info(query_db, query_obj) exist_model = await DataStdDao.get_data_dict_by_info(query_db, query_obj)
# 构造审批模型(无论新增/修改) # === 5. 构造审批数据 ===
model = DataStdDictModel(**vo.model_dump(exclude_unset=True, by_alias=True)) model = DataStdDictModel(**vo.model_dump(exclude_unset=True, by_alias=True))
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()
if exist_model: if exist_model:
# === 修改审批逻辑 === # 修改审批逻辑
# 标准正在审批中则抛错 waiting_list = await DataStdDao.check_std_dict_waiting(exist_model.onum, query_db)
wating_list = await DataStdDao.check_std_dict_waiting(exist_model.onum, query_db) if waiting_list:
if wating_list:
raise ServiceException(message=f"{idx + 2} 行数据字典正在审批中,请等待审批完成") raise ServiceException(message=f"{idx + 2} 行数据字典正在审批中,请等待审批完成")
last_appr = await DataStdDao.get_last_std_dict_appr_by_id(query_db, exist_model.onum) last_appr = await DataStdDao.get_last_std_dict_appr_by_id(query_db, exist_model.onum)
model.onum = exist_model.onum model.onum = exist_model.onum
appr_model = DataStdDictApprModel(**model.model_dump(exclude_unset=True, by_alias=True)) appr_model = DataStdDictApprModel(**model.model_dump(exclude_unset=True, by_alias=True))
appr_model.changeType = "edit" appr_model.changeType = "edit"
appr_model.onum = str(uuid.uuid4()) appr_model.onum = str(uuid.uuid4())
@ -2052,30 +2096,30 @@ class DataStdService:
appr_model.approStatus = "waiting" appr_model.approStatus = "waiting"
appr_model.flowId = batch_flow_id appr_model.flowId = batch_flow_id
else: else:
# === 新增审批逻辑 === # 新增审批逻辑
model.onum = str(uuid.uuid4()) model.onum = str(uuid.uuid4())
appr_model = DataStdDictApprModel(**model.model_dump(exclude_unset=True, by_alias=True)) appr_model = DataStdDictApprModel(**model.model_dump(exclude_unset=True, by_alias=True))
appr_model.changeType = "add" appr_model.changeType = "add"
appr_model.compareId = model.onum appr_model.compareId = model.onum
appr_model.oldInstId = model.onum appr_model.oldInstId = model.onum
appr_model.oldInstId = model.onum
appr_model.approStatus = "waiting" appr_model.approStatus = "waiting"
appr_model.flowId = batch_flow_id appr_model.flowId = batch_flow_id
# 保存审批数据 # 保存审批数据
await DataStdDao.add_std_dict_appr(query_db, appr_model) await DataStdDao.add_std_dict_appr(query_db, appr_model)
# 全部处理完成后统一发起审批流程 # === 6. 发起审批流程 ===
apply_model = ApplyModel() apply_model = ApplyModel()
apply_model.businessType = "dataStdDict" apply_model.businessType = "dataStdDict"
apply_model.businessId = batch_flow_id apply_model.businessId = batch_flow_id
apply_model.applicant = current_user.user.user_name apply_model.applicant = current_user.user.user_name
await ApprovalService.apply_services(query_db, apply_model, 'dataStdDict') await ApprovalService.apply_services(query_db, apply_model, 'dataStdDict')
await query_db.commit() await query_db.commit()
return CrudResponseModel(is_success=True, message="批量导入字典成功") return CrudResponseModel(is_success=True, message="批量导入字典成功")
except Exception as e: except Exception as e:
await query_db.rollback() await query_db.rollback()
raise ServiceException(message=f"导入失败:{str(e)}") raise ServiceException(message=f"导入失败:{str(e)}")

12
vue-fastapi-backend/module_admin/service/metatask_service.py

@ -214,7 +214,7 @@ class MetataskService:
for config in processConfigList: for config in processConfigList:
# mysql表字段 # mysql表字段
if config.ac_target=='0': if config.ac_target=='0':
modified_json_str = config.taskDefinitionJson.replace("16199683466336", str_list[0]).replace("16199683466337", str_list[1]).replace("16199683466338", str_list[2]).replace("11 as ssys_id", f"{page_object.dbRCode} as ssys_id") modified_json_str = config.taskDefinitionJson.replace("16199683466336", str_list[0]).replace("16199683466337", str_list[1]).replace("16199683466338", str_list[2]).replace("2 as ssys_id", f"{page_object.dbRCode} as ssys_id").replace("ssys_id = 2", f"ssys_id = {page_object.dbRCode}")
if page_object.dbSName: if page_object.dbSName:
modified_json_str=modified_json_str.replace("'dash_test_w'", f"'{page_object.dbSName}'") modified_json_str=modified_json_str.replace("'dash_test_w'", f"'{page_object.dbSName}'")
else: else:
@ -505,7 +505,7 @@ class MetataskService:
# oracl表字段 # oracl表字段
if config.ac_target=='0': if config.ac_target=='0':
# modified_json_str = config.taskDefinitionJson.replace("16699723296864", str_list[0]).replace("16699723296865", str_list[1]).replace("16699723296866", str_list[2]).replace("'ORCL_USER'", f"'{page_object.dbSName}'").replace("'orcl_conn'", f"'{page_object.dbRName}'") # modified_json_str = config.taskDefinitionJson.replace("16699723296864", str_list[0]).replace("16699723296865", str_list[1]).replace("16699723296866", str_list[2]).replace("'ORCL_USER'", f"'{page_object.dbSName}'").replace("'orcl_conn'", f"'{page_object.dbRName}'")
modified_json_str = config.taskDefinitionJson.replace("16699723296864", str_list[0]).replace("16699723296865", str_list[1]).replace("16699723296866", str_list[2]).replace("'ORCL_USER'", f"'{page_object.dbSName}'").replace("11 as ssys_id", f"{page_object.dbRCode} as ssys_id") modified_json_str = config.taskDefinitionJson.replace("16699723296864", str_list[0]).replace("16699723296865", str_list[1]).replace("16699723296866", str_list[2]).replace("'ORCL_USER'", f"'{page_object.dbSName}'").replace("4 as ssys_id", f"{page_object.dbRCode} as ssys_id").replace("ssys_id = 4", f"ssys_id = {page_object.dbRCode}")
if page_object.dbSName: if page_object.dbSName:
modified_json_str=modified_json_str.replace("'ORCL_USER'", f"'{page_object.dbSName}'") modified_json_str=modified_json_str.replace("'ORCL_USER'", f"'{page_object.dbSName}'")
else: else:
@ -602,7 +602,7 @@ class MetataskService:
for config in processConfigList: for config in processConfigList:
# db2表字段 # db2表字段
if config.ac_target=='0': if config.ac_target=='0':
modified_json_str = config.taskDefinitionJson.replace("16699625480160", str_list[0]).replace("16699625480161", str_list[1]).replace("16699625480162", str_list[2]).replace("'db2_conn'", f"'{page_object.dbRName}'") modified_json_str = config.taskDefinitionJson.replace("16699625480160", str_list[0]).replace("16699625480161", str_list[1]).replace("16699625480162", str_list[2]).replace("'db2_conn'", f"'{page_object.dbRName}'").replace("6 as ssys_id", f"{page_object.dbRCode} as ssys_id").replace("6 AS SSYS_ID", f"{page_object.dbRCode} as ssys_id").replace("ssys_id = 6", f"ssys_id = {page_object.dbRCode}")
if page_object.dbSName: if page_object.dbSName:
modified_json_str=modified_json_str.replace("'MYSCHEMA'", f"'{page_object.dbSName}'") modified_json_str=modified_json_str.replace("'MYSCHEMA'", f"'{page_object.dbSName}'")
else: else:
@ -797,11 +797,11 @@ class MetataskService:
# POSTGRESQL表字段 # POSTGRESQL表字段
if config.ac_target=='0': if config.ac_target=='0':
# modified_json_str = config.taskDefinitionJson.replace("16688213802592", str_list[0]).replace("16688213802593", str_list[1]).replace("16688213802594", str_list[2]).replace("'pg_conn'", f"'{page_object.dbRName}'") # modified_json_str = config.taskDefinitionJson.replace("16688213802592", str_list[0]).replace("16688213802593", str_list[1]).replace("16688213802594", str_list[2]).replace("'pg_conn'", f"'{page_object.dbRName}'")
modified_json_str = config.taskDefinitionJson.replace("16688213802592", str_list[0]).replace("16688213802593", str_list[1]).replace("16688213802594", str_list[2]).replace("11 as ssys_id", f"{page_object.dbRCode} as ssys_id") modified_json_str = config.taskDefinitionJson.replace("16688213802592", str_list[0]).replace("16688213802593", str_list[1]).replace("16688213802594", str_list[2]).replace("11 as ssys_id", f"{page_object.dbRCode} as ssys_id").replace("ssys_id = 11", f"ssys_id = {page_object.dbRCode}")
if page_object.dbSName: if page_object.dbSName:
modified_json_str=modified_json_str.replace("'public'", f"'{page_object.dbSName}'") modified_json_str=modified_json_str.replace("'jydb_stk'", f"'{page_object.dbSName}'")
else: else:
modified_json_str=modified_json_str.replace("n.nspname = 'public'", "1=1") modified_json_str=modified_json_str.replace("n.nspname = 'jydb_stk'", "1=1")
modified_json_str2=config.taskRelationJson.replace("16688213802592", str_list[0]).replace("16688213802593", str_list[1]).replace("16688213802594", str_list[2]) modified_json_str2=config.taskRelationJson.replace("16688213802592", str_list[0]).replace("16688213802593", str_list[1]).replace("16688213802594", str_list[2])
modified_json_str3=config.locations.replace("16688213802592", str_list[0]).replace("16688213802593", str_list[1]).replace("16688213802594", str_list[2]) modified_json_str3=config.locations.replace("16688213802592", str_list[0]).replace("16688213802593", str_list[1]).replace("16688213802594", str_list[2])
metaprocessconfig_dict = MetaprocessconfigModel(taskDefinitionJson=modified_json_str,# 替换taskDefinitionJson metaprocessconfig_dict = MetaprocessconfigModel(taskDefinitionJson=modified_json_str,# 替换taskDefinitionJson

34
vue-fastapi-frontend/src/views/metadataConfig/taskBizConfig/index.vue

@ -265,7 +265,7 @@
placeholder="请选择系统" placeholder="请选择系统"
clearable clearable
filterable filterable
style="width: 180px" style="width: 100px"
> >
<el-option <el-option
v-for="item in dsSysList" v-for="item in dsSysList"
@ -274,13 +274,21 @@
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
</el-form-item>
<el-form-item label="模式名">
<el-input
v-model="leftQueryForm.mdlName"
placeholder="请输入模式名"
clearable
style="width: 100px"
/>
</el-form-item> </el-form-item>
<el-form-item label="表名"> <el-form-item label="表名">
<el-input <el-input
v-model="leftQueryForm.tabName" v-model="leftQueryForm.tabName"
placeholder="请输入表名" placeholder="请输入表名"
clearable clearable
style="width: 180px" style="width: 120px"
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -309,13 +317,17 @@
<el-table-column prop="tabEngName" label="表名" /> <el-table-column prop="tabEngName" label="表名" />
</el-table> </el-table>
<pagination <pagination
v-show="leftTotal > 0" style="position: absolute!important;right: 800px!important;margin-top: 20px;"
:total="leftTotal" v-show="leftTotal > 0"
v-model:page="leftQueryForm.pageNum" :total="leftTotal"
v-model:limit="leftQueryForm.pageSize" v-model:page="leftQueryForm.pageNum"
@pagination="loadLeftTable" v-model:limit="leftQueryForm.pageSize"
/> @pagination="loadLeftTable"
/>
</el-col> </el-col>
<el-col :span="4" class="flex-col-center"> <el-col :span="4" class="flex-col-center">
@ -431,6 +443,7 @@ const queryForm = reactive({
const leftQueryForm = reactive({ const leftQueryForm = reactive({
ssysId: '', ssysId: '',
tabName: '', tabName: '',
mdlName: '',
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
}) })
@ -809,4 +822,7 @@ const logdialog = ref(null)
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
</style> </style>

Loading…
Cancel
Save