上传代码
This commit is contained in:
@@ -6,32 +6,89 @@ import uuid
|
||||
|
||||
def _determine_project_type(data):
|
||||
"""
|
||||
根据division字段判断工程类型
|
||||
:param data: 项目数据
|
||||
:return: 主网, 配网, 技改
|
||||
根据basicData中的"软件类别"或"软件名称"判断工程类型
|
||||
:param data: 项目数据,包含 basicData 字段
|
||||
:return: 主网, 配网, 技改;如果无法匹配则返回 None
|
||||
"""
|
||||
# 软件类别名称映射字典,将各种变体映射到标准类别
|
||||
CATEGORY_MAPPING = {
|
||||
# 主网及其变体
|
||||
"主网": "主网",
|
||||
"主网工程": "主网",
|
||||
"主网项目": "主网",
|
||||
# 配网及其变体
|
||||
"配网": "配网",
|
||||
"配网造价": "配网",
|
||||
"配网清单": "配网",
|
||||
# 技改及其变体
|
||||
"技改": "技改",
|
||||
"技改工程": "技改",
|
||||
"技改项目": "技改",
|
||||
"技改造价": "技改",
|
||||
"技改清单": "技改",
|
||||
}
|
||||
|
||||
# 尝试从数据中获取division字段
|
||||
division = None
|
||||
if "division" in data:
|
||||
division = data["division"]
|
||||
# 获取 basicData
|
||||
basic_data = data.get("basicData") or {}
|
||||
|
||||
# 如果找到division字段
|
||||
if division:
|
||||
# 去掉"主网-"前缀
|
||||
if "-" in division:
|
||||
division_type = division.split("-")[0]
|
||||
else:
|
||||
division_type = division
|
||||
# 尝试获取 "软件类别",若不存在则尝试获取 "软件名称"
|
||||
category = basic_data.get("软件类别") or basic_data.get("软件名称")
|
||||
|
||||
if division_type in ["主网", "主网线路"]:
|
||||
return "主网"
|
||||
elif division_type in ["配网", "配网造价", "配网清单"]:
|
||||
return "配网"
|
||||
elif division_type in ["技改", "技改造价", "技改清单"]:
|
||||
return "技改"
|
||||
if not category:
|
||||
return None
|
||||
|
||||
return None
|
||||
# 去除前后空格并查找映射
|
||||
category = category.strip()
|
||||
return CATEGORY_MAPPING.get(category)
|
||||
|
||||
|
||||
# 新增:按工程类型为 projectData.projectInfo 增补键值对的映射与函数
|
||||
# 可按需扩展不同工程类型需要自动补充的字段
|
||||
PROJECT_INFO_ADDITIONS = {
|
||||
# 主网:如需新增字段,请在此处补充,示例:"示例字段": "" 或默认值
|
||||
"主网": {
|
||||
# 在此处按需添加主网专属字段,例如:
|
||||
# "主网示例字段": ""
|
||||
},
|
||||
# 配网:如需新增字段,请在此处补充
|
||||
"配网": {
|
||||
# "配网示例字段": ""
|
||||
},
|
||||
# 技改:需求示例——同时支持以下两个字段,缺哪个补哪个
|
||||
"技改": {
|
||||
"建筑材机按系数调差": "",
|
||||
"建筑修缮材机按系数调差": "",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def add_project_info_fields(data):
|
||||
"""
|
||||
根据工程类型(主网/配网/技改),为 data["projectData"]["projectInfo"] 增补字段。
|
||||
- 若 projectInfo 不存在则创建。
|
||||
- 仅在键不存在时补充,不覆盖已有值。
|
||||
"""
|
||||
try:
|
||||
project_type = _determine_project_type(data)
|
||||
except Exception:
|
||||
project_type = None
|
||||
|
||||
if not project_type:
|
||||
return
|
||||
|
||||
additions = PROJECT_INFO_ADDITIONS.get(project_type) or {}
|
||||
if not additions:
|
||||
return
|
||||
|
||||
project_data = data.setdefault("projectData", {})
|
||||
project_info = project_data.get("projectInfo")
|
||||
if not isinstance(project_info, dict):
|
||||
project_info = {}
|
||||
project_data["projectInfo"] = project_info
|
||||
|
||||
for k, v in additions.items():
|
||||
if k not in project_info:
|
||||
project_info[k] = v
|
||||
|
||||
|
||||
def transform_expense_preview(input_file, output_file):
|
||||
@@ -235,6 +292,9 @@ def transform_expense_preview(input_file, output_file):
|
||||
# 更新data中的expensePreview
|
||||
data["projectData"]["expensePreview"] = new_expense_preview
|
||||
|
||||
# 新增:按工程类型为 projectInfo 补充字段
|
||||
add_project_info_fields(data)
|
||||
|
||||
# 保存转换后的文件
|
||||
print(f"正在保存文件: {output_file}")
|
||||
with open(output_file, "w", encoding="utf-8") as f:
|
||||
@@ -572,6 +632,10 @@ def transform_json_types(input_file_path, output_file_path=None):
|
||||
if device_type in device_type_mapping:
|
||||
obj["设备类型"] = device_type_mapping[device_type]
|
||||
|
||||
# 若节点存在“类型”但没有“type”,则补充一个“type”属性,其值等于当前“类型”的值
|
||||
if "类型" in obj and "type" not in obj:
|
||||
obj["type"] = obj["类型"]
|
||||
|
||||
# 递归处理所有值
|
||||
for value in obj.values():
|
||||
traverse(value)
|
||||
@@ -582,6 +646,9 @@ def transform_json_types(input_file_path, output_file_path=None):
|
||||
# 执行转换
|
||||
traverse(data)
|
||||
|
||||
# 新增:按工程类型为 projectInfo 补充字段
|
||||
add_project_info_fields(data)
|
||||
|
||||
# 确定输出路径
|
||||
if output_file_path is None:
|
||||
output_file_path = input_file_path
|
||||
@@ -731,5 +798,5 @@ if __name__ == "__main__":
|
||||
# traceback.print_exc()
|
||||
|
||||
# 批量处理目录
|
||||
json_directory = "project2json/outputs/json"
|
||||
json_directory = "data/output/json"
|
||||
process_directory(json_directory)
|
||||
|
||||
Reference in New Issue
Block a user