169 lines
6.0 KiB
Python
169 lines
6.0 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
import json
|
|||
|
|
import re
|
|||
|
|
|
|||
|
|
def extract_chemical_student_projects():
|
|||
|
|
"""从学生完成的项目.json中提取化工产业数据"""
|
|||
|
|
|
|||
|
|
# 读取学生完成的项目数据
|
|||
|
|
with open('网页未导入数据/学生完成的项目.json', 'r', encoding='utf-8') as f:
|
|||
|
|
data = json.load(f)
|
|||
|
|
|
|||
|
|
chemical_projects = []
|
|||
|
|
|
|||
|
|
# 筛选化工产业相关项目
|
|||
|
|
for item in data:
|
|||
|
|
if item.get('所属就业管家') == '化工':
|
|||
|
|
unit_name = item.get('单元名称查询', '')
|
|||
|
|
ai_projects = item.get('AI项目名称', [])
|
|||
|
|
|
|||
|
|
if unit_name and ai_projects:
|
|||
|
|
# 清理项目名称,去除序号前缀
|
|||
|
|
cleaned_projects = []
|
|||
|
|
for project in ai_projects:
|
|||
|
|
# 去除 "1.", "2." 等序号前缀
|
|||
|
|
cleaned_project = re.sub(r'^\d+\.', '', project).strip()
|
|||
|
|
cleaned_projects.append(cleaned_project)
|
|||
|
|
|
|||
|
|
chemical_projects.append({
|
|||
|
|
'unitName': unit_name,
|
|||
|
|
'projects': cleaned_projects
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
return chemical_projects
|
|||
|
|
|
|||
|
|
def read_clickable_project_data():
|
|||
|
|
"""读取学生完成的项目文件夹中的详细数据"""
|
|||
|
|
try:
|
|||
|
|
with open('网页未导入数据/化工产业/学生完成的项目/化工储罐液位自动补水与搅拌联锁控制.md', 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
return content
|
|||
|
|
except FileNotFoundError:
|
|||
|
|
return None
|
|||
|
|
|
|||
|
|
def create_updated_project_library():
|
|||
|
|
"""创建更新后的项目库数据"""
|
|||
|
|
|
|||
|
|
chemical_projects = extract_chemical_student_projects()
|
|||
|
|
clickable_content = read_clickable_project_data()
|
|||
|
|
|
|||
|
|
print(f"提取到 {len(chemical_projects)} 个化工单元的项目数据")
|
|||
|
|
|
|||
|
|
# 生成新的myProjectsData
|
|||
|
|
my_projects_data = []
|
|||
|
|
for project in chemical_projects:
|
|||
|
|
my_projects_data.append({
|
|||
|
|
"unitName": project['unitName'],
|
|||
|
|
"projects": project['projects']
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
# 生成可点击的项目数据
|
|||
|
|
clickable_project = None
|
|||
|
|
if clickable_content:
|
|||
|
|
# 解析markdown内容创建项目详情
|
|||
|
|
sections = []
|
|||
|
|
lines = clickable_content.split('\n')
|
|||
|
|
current_section = None
|
|||
|
|
current_content = []
|
|||
|
|
|
|||
|
|
for line in lines:
|
|||
|
|
if line.startswith('# '):
|
|||
|
|
if current_section:
|
|||
|
|
sections.append({
|
|||
|
|
'title': current_section,
|
|||
|
|
'content': '\n'.join(current_content).strip()
|
|||
|
|
})
|
|||
|
|
current_section = line[2:].strip()
|
|||
|
|
current_content = []
|
|||
|
|
elif current_section:
|
|||
|
|
current_content.append(line)
|
|||
|
|
|
|||
|
|
# 添加最后一个section
|
|||
|
|
if current_section:
|
|||
|
|
sections.append({
|
|||
|
|
'title': current_section,
|
|||
|
|
'content': '\n'.join(current_content).strip()
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
clickable_project = {
|
|||
|
|
"id": "clickable-1",
|
|||
|
|
"name": "化工储罐液位自动补水与搅拌联锁控制项目",
|
|||
|
|
"unitName": "化工PLC可编程逻辑控制系统",
|
|||
|
|
"isClickable": True,
|
|||
|
|
"content": {
|
|||
|
|
"title": "化工储罐液位自动补水与搅拌联锁控制项目",
|
|||
|
|
"description": "本项目基于PLC可编程逻辑控制器,实现化工储罐液位的自动监控、补水控制以及搅拌器的联锁保护功能。",
|
|||
|
|
"images": [],
|
|||
|
|
"sections": sections
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return my_projects_data, clickable_project
|
|||
|
|
|
|||
|
|
def update_project_library_file():
|
|||
|
|
"""更新ProjectLibraryPage文件"""
|
|||
|
|
|
|||
|
|
my_projects_data, clickable_project = create_updated_project_library()
|
|||
|
|
|
|||
|
|
# 读取原文件
|
|||
|
|
with open('src/pages/ProjectLibraryPage/index.jsx', 'r', encoding='utf-8') as f:
|
|||
|
|
content = f.read()
|
|||
|
|
|
|||
|
|
# 替换myProjectsData
|
|||
|
|
my_projects_js = json.dumps(my_projects_data, ensure_ascii=False, indent=2)
|
|||
|
|
|
|||
|
|
# 替换myProjectsData部分
|
|||
|
|
pattern = r'const myProjectsData = \[[\s\S]*?\];'
|
|||
|
|
replacement = f'const myProjectsData = {my_projects_js};'
|
|||
|
|
content = re.sub(pattern, replacement, content)
|
|||
|
|
|
|||
|
|
# 如果有可点击项目数据,替换clickableProjects
|
|||
|
|
if clickable_project:
|
|||
|
|
# 构建clickableProjects JavaScript代码
|
|||
|
|
clickable_js = json.dumps([clickable_project], ensure_ascii=False, indent=2)
|
|||
|
|
clickable_pattern = r'const clickableProjects = \[[\s\S]*?\];'
|
|||
|
|
clickable_replacement = f'const clickableProjects = {clickable_js};'
|
|||
|
|
content = re.sub(clickable_pattern, clickable_replacement, content)
|
|||
|
|
|
|||
|
|
# 写入文件
|
|||
|
|
with open('src/pages/ProjectLibraryPage/index.jsx', 'w', encoding='utf-8') as f:
|
|||
|
|
f.write(content)
|
|||
|
|
|
|||
|
|
print("✅ 已更新ProjectLibraryPage.jsx文件")
|
|||
|
|
print(f"✅ 替换了 {len(my_projects_data)} 个化工单元的我的项目数据")
|
|||
|
|
if clickable_project:
|
|||
|
|
print("✅ 添加了1个可点击查看的化工项目详情")
|
|||
|
|
|
|||
|
|
return my_projects_data
|
|||
|
|
|
|||
|
|
def show_summary():
|
|||
|
|
"""显示项目数据摘要"""
|
|||
|
|
my_projects_data, _ = create_updated_project_library()
|
|||
|
|
|
|||
|
|
print("\n化工产业我的项目库数据摘要:")
|
|||
|
|
print("=" * 80)
|
|||
|
|
|
|||
|
|
total_projects = 0
|
|||
|
|
for i, unit in enumerate(my_projects_data, 1):
|
|||
|
|
unit_name = unit['unitName']
|
|||
|
|
projects = unit['projects']
|
|||
|
|
project_count = len(projects)
|
|||
|
|
total_projects += project_count
|
|||
|
|
|
|||
|
|
print(f"\n{i}. {unit_name} ({project_count}个项目)")
|
|||
|
|
for j, project in enumerate(projects, 1):
|
|||
|
|
print(f" {j}. {project}")
|
|||
|
|
|
|||
|
|
print(f"\n总计: {len(my_projects_data)} 个单元,{total_projects} 个项目")
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
print("正在更新我的项目库为化工产业数据...")
|
|||
|
|
|
|||
|
|
# 先显示摘要
|
|||
|
|
show_summary()
|
|||
|
|
|
|||
|
|
print("\n" + "=" * 80)
|
|||
|
|
|
|||
|
|
# 执行更新
|
|||
|
|
update_project_library_file()
|