- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
134 lines
6.6 KiB
Python
134 lines
6.6 KiB
Python
#!/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())
|
||
|
||
|