#!/usr/bin/env python3 # -*- coding: utf-8 -*- import json import re from datetime import datetime # 读取岗位等级数据 def load_job_levels(): with open('网页未导入数据/文旅产业/岗位等级.json', 'r', encoding='utf-8') as f: data = json.load(f) # 创建岗位名称到等级的映射 job_levels_map = {} for item in data: job_name = item['❌岗位名称'] level = item['前端查询名称'] job_levels_map[job_name] = level return job_levels_map # 读取项目案例适用岗位映射 def load_project_positions_mapping(): with open('网页未导入数据/文旅产业/项目案例适用岗位.json', 'r', encoding='utf-8') as f: data = json.load(f) # 创建项目名称到岗位列表的映射 mapping = {} for item in data: project_name = item['案例名称'] positions = item['岗位名称_文旅'] mapping[project_name] = positions return mapping # 定义等级排序 LEVEL_ORDER = { '普通岗': 1, '技术骨干岗': 2, '储备干部岗': 3 } # 生成适用岗位数组字符串 def generate_positions_array(positions, job_levels_map): # 创建岗位对象列表 position_objects = [] for position in positions: if position in job_levels_map: level = job_levels_map[position] position_objects.append({ 'level': level, 'position': position, 'order': LEVEL_ORDER.get(level, 999) }) else: print(f" 警告: 未找到岗位 '{position}' 的等级信息") # 按等级排序 position_objects.sort(key=lambda x: x['order']) # 生成字符串 positions_str = ', '.join([ f"{{ level: '{p['level']}', position: '{p['position']}' }}" for p in position_objects ]) return f"[{positions_str}]" # 更新projectLibraryMock.js文件 def update_project_library_mock(project_mapping, job_levels_map): file_path = 'src/mocks/projectLibraryMock.js' # 备份文件 backup_path = f'{file_path}.backup_{datetime.now().strftime("%Y%m%d_%H%M%S")}_remapped' with open(file_path, 'r', encoding='utf-8') as f: content = f.read() with open(backup_path, 'w', encoding='utf-8') as f: f.write(content) print(f"已备份: {backup_path}") # 项目名称映射(因为代码中的名称可能略有不同) name_variations = { 'id: 1': '舟山某民宿180天提升入住率项目', 'id: 2': '希尔顿欢朋酒店经营管理与服务一体化优化项目', 'id: 3': '长安汽车新款车型线下推广活动', 'id: 4': '春风 450MT新品上市营销活动策划项目', 'id: 5': '敦煌文创品牌策划与IP运营', 'id: 6': '"长安幻夜"文创IP运营与品牌建设项目', 'id: 7': '2024年深圳国际家具展策划项目', 'id: 8': '2024 合肥国际 3C 电子产业博览会策划项目', 'id: 9': '盐城第九届 ICGC 动漫嘉年华漫展策划项目', 'id: 10': '某地森林湿地自然景区多平台新媒体运营方案', 'id: 11': '漓江畔水墨居度假酒店新媒体直播运营方案', 'id: 12': '某自驾游平台SEO/SEM全流程优化项目', 'id: 13': '环渤海经济圈城市足球冠军赛策划与执行项目', 'id: 14': '某歌手2025公益演唱会策划与执行项目', 'id: 15': '贵州黔东南非遗文化探索之旅线路设计项目', 'id: 16': '某宠物生活馆经营改善项目', 'id: 17': '"水墨苏乡"文化创意产品设计与量产落地项目', 'id: 18': '谷子店开店与经营管理', 'id: 19': '轻奢露营市集玩乐活动运营项目', 'id: 20': '中国科学院武汉植物园生态科普与文旅运营项目' } updated_count = 0 # 对每个项目进行处理 for id_pattern, project_name in name_variations.items(): if project_name in project_mapping: positions = project_mapping[project_name] new_positions_str = generate_positions_array(positions, job_levels_map) # 查找并替换该项目的applicablePositions # 使用更精确的正则表达式来定位特定项目 pattern = rf'({id_pattern}.*?applicablePositions:\s*)\[[^\]]*\]' def replace_func(match): nonlocal updated_count updated_count += 1 print(f"\n更新项目 {project_name}:") print(f" 新岗位: {positions}") return match.group(1) + new_positions_str content = re.sub(pattern, replace_func, content, flags=re.DOTALL) # 写回文件 with open(file_path, 'w', encoding='utf-8') as f: f.write(content) print(f"\nprojectLibraryMock.js 更新完成,共更新了 {updated_count} 个项目") # 主函数 def main(): print("=" * 50) print("根据项目案例适用岗位.json重新匹配适用岗位") print("=" * 50) # 加载数据 job_levels_map = load_job_levels() print(f"已加载 {len(job_levels_map)} 个岗位等级映射") project_mapping = load_project_positions_mapping() print(f"已加载 {len(project_mapping)} 个项目岗位映射\n") # 更新文件 update_project_library_mock(project_mapping, job_levels_map) print("\n" + "=" * 50) print("所有更新完成!") print("=" * 50) if __name__ == "__main__": main()