diff --git a/vue-fastapi-backend/module_admin/dao/datastd_dao.py b/vue-fastapi-backend/module_admin/dao/datastd_dao.py index ec491d8..75e591c 100644 --- a/vue-fastapi-backend/module_admin/dao/datastd_dao.py +++ b/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 ) diff --git a/vue-fastapi-backend/module_admin/service/datastd_service.py b/vue-fastapi-backend/module_admin/service/datastd_service.py index d915740..1f9902c 100644 --- a/vue-fastapi-backend/module_admin/service/datastd_service.py +++ b/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: diff --git a/vue-fastapi-frontend/src/views/meta/metatask/index.vue b/vue-fastapi-frontend/src/views/meta/metatask/index.vue index 76bbc5f..25bf55f 100644 --- a/vue-fastapi-frontend/src/views/meta/metatask/index.vue +++ b/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();