Browse Source

Merge remote-tracking branch 'origin/master'

master
xueyinfei 7 hours ago
parent
commit
54593032af
  1. 6
      vue-fastapi-backend/module_admin/dao/datastd_dao.py
  2. 46
      vue-fastapi-backend/module_admin/service/datastd_service.py
  3. 2
      vue-fastapi-frontend/src/views/meta/metatask/index.vue

6
vue-fastapi-backend/module_admin/dao/datastd_dao.py

@ -954,7 +954,7 @@ class DataStdDao:
# 修改子查询部分
subquery_t1 = (
select(DataAstContentRela)
.where(DataAstContentRela.upd_prsn == query_object.upd_prsn,
.where(
DataAstContentRela.content_onum == '2' and DataAstContentRela.rela_status == '1')
.union_all(
select(DataAstContentRela)
@ -992,8 +992,8 @@ class DataStdDao:
data_ast_list = await PageUtil.paginate(
db,
query,
page_num=query_object.page_num,
page_size=query_object.page_size,
page_num=1,
page_size=100000,
is_page=is_page
)

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

@ -1734,9 +1734,9 @@ class DataStdService:
:return: 用户导入模板excel的二进制数据
"""
header_list = ['标准归属', '来源系统', '标准编号', '标准中文名', '标准英文名', '标准业务定义', '标准类型', '标准来源', '数据类别', '标准业务定义', '安全等级', '代码编号', '业务认则部门', '业务认则人员', '技术认则部门', '技术认则人员']
header_list = ['标准归属', '来源系统', '标准编号', '标准中文名', '标准英文名', '标准业务定义', '标准类型', '标准来源', '数据类别', '标准业务定义', '安全等级', '代码编号', '标准目录','业务认则部门', '业务认则人员', '技术认则部门', '技术认则人员']
selector_header_list = ['标准归属', '标准类型',"标准来源"]
option_list = [{'标准归属': ['公司级', '系统级']}, {'标准类型': ['基础数据', '指标数据']}, {'标准来源': ['行业标准', '自建标准']}]
option_list = [{'标准归属': ['公司级', '系统级']}, {'标准类型': ['基础数据', '指标数据']}, {'标准来源': ['行业标准', '自建标准','自建标准-智能']}]
binary_data = get_excel_template(
header_list=header_list, selector_header_list=selector_header_list, option_list=option_list
)
@ -1800,10 +1800,12 @@ class DataStdService:
'数据类别': 'data_category',
'安全等级': 'security_level',
'代码编号': 'code_no',
'标准目录': 'std_dir',
'业务认则部门': 'biz_dept',
'业务认则人员': 'biz_person',
'技术认则部门': 'tech_dept',
'技术认则人员': 'tech_person',
}
df.rename(columns=header_dict, inplace=True)
# ds系统列表
@ -1824,7 +1826,29 @@ class DataStdService:
# 获取来源系统字段
input_src_sys = row.get("std_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)
# === 获取标准目录树 ===
catalog_result = await cls.get_catalog_list_services(query_db, query_object=None, user_id=current_user.user.user_id, is_page=True)
# 将目录树展开成 { "一级目录/二级目录": contentOnum } 结构
def build_catalog_mapping(node, path="", mapping=None):
if mapping is None:
mapping = {}
current_path = f"{path}/{node['contentName']}" if path else node['contentName']
mapping[current_path] = node['contentOnum']
for child in node.get("children", []):
build_catalog_mapping(child, current_path, mapping)
return mapping
catalog_mapping = build_catalog_mapping(catalog_result.rows[0])
# === 处理标准目录 ===
input_dir = row.get("std_dir")
if not input_dir or str(input_dir).strip() == "":
belt_content_onum = 2
else:
input_dir = input_dir.strip()
if input_dir not in catalog_mapping:
raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,标准目录 [{input_dir}] 不存在")
belt_content_onum = catalog_mapping[input_dir]
# 如果能匹配到系统,则使用 id;否则判断是否为空
if matched_source:
src_sys_id = matched_source.id
@ -1832,7 +1856,10 @@ class DataStdService:
src_sys_id = 10000
else:
raise HTTPException(status_code=400, detail=f"{idx + 2} 行导入失败,来源系统 [{input_src_sys}] 不存在")
def safe_str(val):
if pd.isna(val):
return ""
return str(val).strip()
# 如果存在,使用对应 onum 作为 cdId
cd_id = matched_code.onum if matched_code else None
vo = DataStdMainModel(
@ -1847,11 +1874,11 @@ class DataStdService:
dataClas=row.get('data_category'),
dataSecLvl=str(row.get('security_level')),
cdId=cd_id,
dataStdBusiOwnershipDept=row.get('biz_dept'),
dataStdBusiOwnershipPrsn=row.get('biz_person'),
dataStdItOwnershipDept=row.get('tech_dept'),
dataStdItOwnershipPrsn=row.get('tech_person'),
beltDataStdContent=2, # 固定值
dataStdBusiOwnershipDept=safe_str(row.get('biz_dept')),
dataStdBusiOwnershipPrsn=safe_str(row.get('biz_person')),
dataStdItOwnershipDept=safe_str(row.get('tech_dept')),
dataStdItOwnershipPrsn=safe_str(row.get('tech_person')),
beltDataStdContent=belt_content_onum, # 固定值
)
except Exception as ve:
raise HTTPException(status_code=400, detail=f"{idx + 2} 行数据校验失败: {ve}")
@ -1864,7 +1891,6 @@ class DataStdService:
model = DataStdMainModel(**vo.model_dump(exclude_unset=True, by_alias=True))
model.create_by = current_user.user.user_name
model.std_status = "1"
model.belt_data_std_content = 2
model.create_time = datetime.now()
if exist_model:

2
vue-fastapi-frontend/src/views/meta/metatask/index.vue

@ -812,7 +812,7 @@ const handleCommand = (command, row) => {
const handleAdd = () => {
if (!clickNode.value) {
$message.warning("请选择数据源节点!");
proxy.$modal.msgError("请选择数据源节点!");
return;
}
reset();

Loading…
Cancel
Save