修改费用计算代码

This commit is contained in:
chentianrui
2025-08-22 18:13:09 +08:00
parent 8d595b339c
commit be848c3e78
20 changed files with 2569 additions and 360 deletions
+62
View File
@@ -57,6 +57,37 @@ def transform_expense_preview(input_file, output_file):
print(f"原始expensePreview中的顶级分类: {list(original_expense_preview.keys())}")
print(f"projectDivision中的顶级分类: {list(project_division.keys())}")
# 先清理 projectDivision:递归删除任意带有 "删除": "1" 或 1 的节点
def _filter_deleted_nodes(obj):
# 若当前对象本身标记了删除,则直接丢弃
if isinstance(obj, dict):
flag = obj.get("删除")
if flag == "1" or flag == 1:
return None
new_obj = {}
for k, v in obj.items():
filtered = _filter_deleted_nodes(v)
if filtered is not None:
new_obj[k] = filtered
return new_obj
elif isinstance(obj, list):
new_list = []
for item in obj:
filtered = _filter_deleted_nodes(item)
if filtered is not None:
new_list.append(filtered)
return new_list
else:
return obj
cleaned_project_division = _filter_deleted_nodes(project_division) or {}
if cleaned_project_division != project_division:
print("已根据 '删除' 标记清理 projectDivision 中的节点")
project_division = cleaned_project_division
# 回写清理后的结构,确保后续流程与落盘一致
if "projectData" in data:
data["projectData"]["projectDivision"] = project_division
# 创建新的expensePreview结构
new_expense_preview = {}
@@ -478,6 +509,37 @@ def transform_json_types(input_file_path, output_file_path=None):
with open(input_file_path, "r", encoding="utf-8") as f:
data = json.load(f)
# 在主网流程中,同样先清理 projectDivision:递归删除任意带有 "删除": "1" 或 1 的节点
def _filter_deleted_nodes(obj):
if isinstance(obj, dict):
flag = obj.get("删除")
if flag == "1" or flag == 1:
return None
new_obj = {}
for k, v in obj.items():
filtered = _filter_deleted_nodes(v)
if filtered is not None:
new_obj[k] = filtered
return new_obj
elif isinstance(obj, list):
new_list = []
for item in obj:
filtered = _filter_deleted_nodes(item)
if filtered is not None:
new_list.append(filtered)
return new_list
else:
return obj
try:
pd = data.get("projectData", {}).get("projectDivision", {})
cleaned_pd = _filter_deleted_nodes(pd) or {}
if cleaned_pd != pd and "projectData" in data:
data["projectData"]["projectDivision"] = cleaned_pd
print("[主网] 已根据 '删除' 标记清理 projectDivision 中的节点")
except Exception:
pass
# 递归处理函数
def traverse(obj):
if isinstance(obj, dict):