From 611cc42eb30642563c4f56bebb333769d85966ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A5=BF=E7=93=9C=C2=B0?= Date: Sat, 7 Jun 2025 21:44:35 +0800 Subject: [PATCH] dev --- backend/api/routes/openapi.py | 49 ++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/backend/api/routes/openapi.py b/backend/api/routes/openapi.py index ed245068..7d597413 100644 --- a/backend/api/routes/openapi.py +++ b/backend/api/routes/openapi.py @@ -1,28 +1,57 @@ from api.core.Gzip import register_gzip_request import json -from fastapi import APIRouter,Request -from api.core.Response import response +from fastapi import APIRouter, Path +from api.core.Response import response from api.core.Redis import get_redis_info from api.dp import RedisDep +import re +from fastmcp import FastMCP router = APIRouter() register_gzip_request(router) -@router.get('/{job}/{jobGrow}/{skill}') -async def get_cn_skll_info(redis:RedisDep,job:str, jobGrow:str, skill:str, request: Request): - """ - Get the OpenAPI information for a specific job and skill. - """ - key = f"openapi:{job}:{jobGrow}:{skill}" +def replace_placeholders(template): + # 匹配 、、、 等 + pattern = re.compile(r'<(int|float\d*)>') + idx = 0 + def repl(match): + nonlocal idx + idx += 1 + return f'{{value{idx}}}' + + return pattern.sub(repl, template) + +@router.get('/{job}/{jobGrow}/{skillId}/') +async def get_cn_skll_info(redis: RedisDep, + job: str = Path(..., title='职业'), + jobGrow: str = Path(..., title='转职'), + skillId: str = Path(..., title='技能'), + level: int = None + ): + """ + 获取技能详细信息 + """ + key = f'openapi:{job}:{jobGrow}:{skillId}' def get_skill_info(): # This function should retrieve the skill info based on job and jobGrow # For now, we return a placeholder dictionary - with open(f"./openapi/{job}/{jobGrow}/cn/skillDetail/{skill}.json", encoding="utf-8") as f: + with open(f'./openapi/{job}/{jobGrow}/cn/skillDetail/{skillId}.json', encoding='utf-8') as f: skill_data = json.load(f) + if "levelInfo" in skill_data and "optionDesc" in skill_data["levelInfo"] and skill_data["levelInfo"]["optionDesc"] is not None: + skill_data["levelInfo"]["optionDesc"] = replace_placeholders(skill_data["levelInfo"]["optionDesc"]) return skill_data skill_info = get_redis_info(redis, key, get_skill_info) - + if level is not None: + level = max(0,min(level,skill_info.get("maxLevel",0))) + if "levelInfo" in skill_info and "rows" in skill_info["levelInfo"]: + detail = list(filter(lambda x: x["level"] == level, skill_info["levelInfo"]["rows"])) + if detail and len(detail) > 0: + skill_info["levelInfo"].update(detail[0]) + skill_info["levelInfo"]["detail"] = skill_info["levelInfo"].get("optionDesc", "") + for key in skill_info["levelInfo"]["optionValue"].keys(): + skill_info["levelInfo"]["detail"] = skill_info["levelInfo"]["detail"].replace(f"{{{key}}}",str(skill_info["levelInfo"]["optionValue"][key])) + del skill_info["levelInfo"]["rows"] return response(data=skill_info)