#!/usr/bin/env python3 """ 更新岗位描述脚本 为瑞小美轻医美连锁品牌的真实岗位添加专业描述 """ import asyncio import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent)) from sqlalchemy import select, update from app.core.database import AsyncSessionLocal from app.models.position import Position from app.core.logger import get_logger logger = get_logger(__name__) # 轻医美岗位描述映射 POSITION_DESCRIPTIONS = { # 医疗专业类 "护士": "负责医美项目的护理工作,包括术前准备、术中配合、术后护理及客户健康指导", "护士长": "管理护理团队,制定护理标准流程,确保医疗安全和服务质量", "副护士长": "协助护士长管理护理团队,负责日常护理工作的督导和质量控制", "区域医务主任兼护士长": "统筹区域内各门店的医务管理工作,制定护理标准和培训体系", "储备护士长": "接受护士长岗位培训,准备承担护理团队管理工作", "皮肤科医生": "提供专业皮肤诊疗服务,制定个性化医美方案,确保客户安全和效果", "皮肤科助理医生": "协助主治医生进行皮肤诊疗工作,参与医美项目的实施", "微创技术院长": "负责微创医美技术的研发和应用,带领技术团队提升专业水平", # 咨询销售类 "美学规划师": "为客户提供专业医美咨询,设计个性化美丽方案,促进项目成交", "美学规划师兼店长": "负责门店运营管理的同时,担任首席美学规划师", "见习美学规划师": "接受美学规划专业培训,学习咨询技巧和方案设计", "会员服务经理": "负责VIP会员的全周期服务管理,提升客户满意度和复购率", "网络咨询专员": "通过线上渠道为客户提供医美咨询服务,引导到店体验", # 管理类 "院长": "全面负责门店运营管理、团队建设、业绩达成和客户服务质量", "连锁院长": "统筹多家门店的运营管理,制定标准化流程,推动连锁发展", "店长": "负责门店日常运营管理、团队协调和业绩目标达成", "区域总经理&人才战略董事&瑞小美学苑苑长": "负责区域战略规划、人才培养体系建设和学苑运营管理", "微创运营经理": "负责微创项目的运营推广和业绩管理", "储备总经理助理": "接受高管培训,准备承担门店总经理工作", # 客服服务类 "前厅接待": "负责客户接待、预约管理、环境维护,提供优质的前台服务", "分诊结算专员": "负责客户分诊引导和费用结算工作,确保流程顺畅", "客服总监": "统筹客户服务体系建设,制定服务标准,提升客户满意度", # 运营支持类 "保洁员": "负责门店环境卫生维护,确保医美场所的清洁和消毒标准", "瑞柏美五象总院保洁员": "负责五象总院的环境卫生和消毒管理工作", "药房兼行政": "负责药品和医疗器械管理,同时协助行政事务处理", "行政采购": "负责门店物资采购和供应商管理,确保运营物资供应", # 市场品牌类 "小红书运营专员": "负责小红书平台的内容运营和粉丝互动,提升品牌影响力", "电商运营": "负责线上商城的运营管理,推动电商业务发展", "医生IP运营": "负责医生个人品牌打造和IP运营,提升医生影响力", "设计总监": "负责品牌视觉设计、营销物料设计和品牌形象管理", "平面设计师": "负责平面设计工作,包括海报、宣传册、广告物料等", "摄影剪辑师": "负责门店的摄影摄像和视频剪辑工作,制作营销内容", "首席文化传播官": "负责企业文化建设和品牌传播策略制定", "AI PR": "负责品牌公关工作,运用AI技术提升传播效率", # 人力财务类 "人事经理&瑞小美学苑执行秘书长": "负责人力资源管理和学苑行政工作", "人事专员&瑞小美学苑执行秘书": "负责人事日常工作和学苑事务协调", "薪酬服务BP": "负责薪酬福利管理和人力资源业务支持", "财务经理": "负责财务管理、成本控制和财务报表分析", "财务专员": "负责日常财务核算、报销审核和账务处理", "资金管理专员": "负责资金流管理、账户管理和资金调度", # 战略发展类 "战投经理": "负责战略投资项目的评估和推进,支持公司扩张发展", "商业分析师": "负责业务数据分析和商业模式研究,支持决策制定", "AI维护程序员": "负责AI系统的维护和优化,支持智能化运营", # 高管类 "总裁": "负责公司整体战略规划和经营管理,带领团队实现发展目标", "区域经理": "负责区域内多家门店的运营管理和业绩达成", } async def update_position_descriptions(): """更新岗位描述""" logger.info("=" * 60) logger.info("开始更新岗位描述") logger.info("=" * 60) async with AsyncSessionLocal() as db: try: # 查询所有未删除的岗位 stmt = select(Position).where(Position.is_deleted == False) result = await db.execute(stmt) positions = result.scalars().all() logger.info(f"找到 {len(positions)} 个岗位") updated_count = 0 for position in positions: # 查找匹配的描述 description = POSITION_DESCRIPTIONS.get(position.name) if description: position.description = description logger.info(f"✓ 更新岗位: {position.name}") updated_count += 1 else: # 如果没有匹配的描述,使用通用描述 position.description = f"{position.name}岗位,负责相关专业工作" logger.info(f"○ 使用通用描述: {position.name}") updated_count += 1 # 提交更新 await db.commit() logger.info("=" * 60) logger.info(f"✅ 成功更新 {updated_count} 个岗位描述") logger.info("=" * 60) except Exception as e: logger.error(f"更新失败: {str(e)}") await db.rollback() raise if __name__ == "__main__": asyncio.run(update_position_descriptions())