deliveryman-api/app/core/config.py
2025-03-12 22:52:15 +08:00

197 lines
7.2 KiB
Python

from typing import Optional
from pydantic_settings import BaseSettings
import os
from functools import lru_cache
class Settings(BaseSettings):
DEBUG: bool = True # 开发模式标志
API_V1_STR: str = "/api/v1"
PROJECT_NAME: str = "FastAPI 项目"
ENV_NAME: str = "开发环境"
PLATFORM_USER_ID: int = 9
API_BASE_URL: str = "https://api-dev.beefast.co"
# 企业微信机器人系统异常通知
URL_WECOMBOT_SYS_EXCEPTION : str = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=edcc54c5-c352-42dd-b9be-0cc5b39cc0dc"
# 企业微信机器人每日报告通知
URL_WECOMBOT_DAILY_REPORT : str = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=6869b6e2-57fc-471a-bb62-028014e2b1c8"
# 积分别名
POINT_ALIAS: str = "蜂蜜"
POINT_RATIO: float = 10.0 # 积分兑换比例
# 订单价格配置
ORDER_BASE_PRICE: float = 3.0 # 基础费用
ORDER_EXTRA_PACKAGE_PRICE: float = 0.5 # 额外包裹费用
ORDER_EXTRA_PACKAGE_THRESHOLD: int = 5 # 额外收费阈值
# 邀请新人赠送优惠券ID
FIRST_ORDER_REFERRAL_COUPON_ID: int = 1
FIRST_ORDER_REFERRAL_COUPON_COUNT: int = 1
FIRST_ORDER_REFERRAL_COUPON_EXPIRE_DAYS: int = 3
# JWT 配置
SECRET_KEY: str = "s10GmiRMmplfYWXYZLSsE3X36Ld4gVZxHgAcdqFGC20v3llv7UdOeWLBEEP3e40p"
ACCESS_TOKEN_EXPIRE_MINUTES: Optional[int] = None # None 表示永不过期
REDIS_HOST: str = "101.36.120.145"
REDIS_PORT: int = 6379
REDIS_DB: int = 0
REDIS_PASSWORD: str = "redis_rJRMHr"
VERIFICATION_CODE_EXPIRE_SECONDS: int = 300 # 验证码5分钟后过期
VERIFICATION_CODE_LIMIT_SECONDS: int = 15 # 验证码发送频率限制15秒
MYSQL_HOST: str = "gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com"
MYSQL_PORT: int = 27469
MYSQL_USER: str = "root"
MYSQL_PASSWORD: str = "Aa#223388"
MYSQL_DB: str = "beefast"
@property
def SQLALCHEMY_DATABASE_URL(self) -> str:
return f"mysql+pymysql://{self.MYSQL_USER}:{self.MYSQL_PASSWORD}@{self.MYSQL_HOST}:{self.MYSQL_PORT}/{self.MYSQL_DB}?charset=utf8mb4"
# 腾讯云短信配置
TENCENT_SECRET_ID: str = "AKIDxnbGj281iHtKallqqzvlV5YxBCrPltnS"
TENCENT_SECRET_KEY: str = "ta6PXTMBsX7dzA7IN6uYUFn8F9uTovoU"
TENCENT_REGION: str = "ap-guangzhou" # 接口地域
SMS_SDK_APP_ID: str = "1400961527"
SMS_SIGN_NAME: str = "蜂快到家公众号"
SMS_TEMPLATE_ID: str = "2353143" # 验证码短信模板ID
SMS_TEMPLATE_ID_ADDITIONAL_FEE: str = "2375181" # 加价短信模板ID
# 腾讯云 COS 配置
COS_REGION: str = "ap-chengdu"
COS_BUCKET: str = "dman-1311994147"
COS_BASE_URL: str = "dman-1311994147.cos.ap-chengdu.myqcloud.com"
# 注册赠券配置
REGISTER_COUPONS: list = [
{"coupon_id": 1, "count": 3, "expire_days": 15},
]
# 小程序 & 微信支付配置
WECHAT_APPID: str = "wx3cc5b7dcb28f2756"
WECHAT_SECRET: str = "fdf03e0ff428097c2a264da50b7d804e"
WECHAT_MCH_ID: str = "1705259837"
WECHAT_PRIVATE_KEY_PATH: str = "app/cert/apiclient_key.pem"
WECHAT_CERT_SERIAL_NO: str = "5958C6605B4651122EC364831A3011C047EE549C"
WECHAT_API_V3_KEY: str = "OAhAqXqebeT4ZC9VTYFkSWU0CENEahx5" # API v3密钥
WECHAT_PLATFORM_CERT_PATH: str = "app/cert/platform_key.pem" # 平台证书路径
# 企业微信配置
WECHAT_CORP_ID: str = "ww0e3897ec32009e20"
WECHAT_CORP_SECRET: str = "qh38-OlDnJPTENjOfZegVVv5ePhlhKhrzGPzNOixWQo"
WECHAT_CORP_TOKEN: str = "5zEDkbGNPbBoh"
WECHAT_CORP_ENCODING_AES_KEY: str = "VTFtnosOeX7cdnRDBBCE0JTC5s7W7iFP8o86Oowo2w8"
#WECHAT_CORP_AGENT_SECRET: str = "66666666666666666666666666666666"
# 公众号配置
MP_APPID: str = "wxa9db2cc7868dfefd"
MP_SECRET: str = "3eed9a717654d6460ba9afda3b0f6be2"
MP_TOKEN: str = "yORAT7RL9I3sux7uc4PbMEEHT1xowc6H" # 用于验证服务器配置
MP_AES_KEY: str = "XDc2mG1tWNikTithcSy66oD3fP5XXFasSeRk6ulicye" # 用于解密消息
# 微信模板消息ID
#配送订单创建成功
DELIVERY_ORDER_CREATED_TEMPLATE_ID: str = "N8sMeoBG6biUjWO1PbxBol6akEI6O9isSvCiB1MlVuY"
#配送订单接单
DELIVERY_ORDER_RECEIVED_TEMPLATE_ID: str = "djZ8sseKX70bAKtzIfp2MFaZG60_PHDjLRxokiw0TJQ"
#配送订单完成
DELIVERY_ORDER_COMPLETED_TEMPLATE_ID: str = "eR7UlBRWRXEuQdVNNU6AB0MkkRwMKyUspBLyK7bFYyI"
#配送订单取消
DELIVERY_ORDER_CANCELLED_TEMPLATE_ID: str = "iGR0rPtOFC_u8Xj5-R730zoDD_4Kbswkf_jSTnSSd6E"
# 加价请求
ADDITIONAL_FEE_REQUEST_TEMPLATE_ID: str = "oGOuil8q1vSXiIyzJ14ExSOSptVgE4A-b7WSmmGqiRw"
# 反馈需求企业微信
FEEDBACK_NEED_WECOM_BOT_WEBHOOK_URL: str = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=ccd6e8d4-4c8a-45b4-9b6b-dd4cae563176"
# DeepSeek 相关配置
DEEPSEEK_API_KEY: str = "sk-9f6b56f08796435d988cf202e37f6ee3"
DEEPSEEK_API_URL: str = "https://api.deepseek.com/v1/chat/completions"
# 千问 API 配置
QWEN_API_KEY: str = "sk-caa199589f1c451aaac471fad2986e28"
QWEN_API_URL: str = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"
class Config:
case_sensitive = True
env_file = ".env"
extra = "allow" # 允许额外的环境变量
class DevSettings(Settings):
DEBUG: bool = True # 开发模式标志
API_V1_STR: str = "/api/v1"
PROJECT_NAME: str = "FastAPI 项目 (测试环境)"
ENV_NAME: str = "测试环境"
PLATFORM_USER_ID: int = 9
API_BASE_URL: str = "https://api-dev.beefast.co"
# 数据库配置
MYSQL_HOST: str = "gz-cynosdbmysql-grp-2j1cnopr.sql.tencentcdb.com"
MYSQL_PORT: int = 27469
MYSQL_USER: str = "root"
MYSQL_PASSWORD: str = "Aa#223388"
MYSQL_DB: str = "beefast"
#Redis
REDIS_HOST: str = "101.36.120.145"
REDIS_PORT: int = 6379
REDIS_DB: int = 0
REDIS_PASSWORD: str = "redis_rJRMHr"
VERIFICATION_CODE_EXPIRE_SECONDS: int = 300 # 验证码5分钟后过期
class Config:
env_file = ".env.dev"
class ProdSettings(Settings):
DEBUG: bool = False # 生产模式标志
API_V1_STR: str = "/api/v1"
PROJECT_NAME: str = "FastAPI 项目 (生产环境)"
ENV_NAME: str = "生产环境"
API_BASE_URL: str = "https://api.beefast.co"
PLATFORM_USER_ID: int = 45
# 数据库配置
MYSQL_HOST: str = "cd-cynosdbmysql-grp-7kdd8qe4.sql.tencentcdb.com"
MYSQL_PORT: int = 26558
MYSQL_USER: str = "root"
MYSQL_PASSWORD: str = "gUjjmQpu6c7V0hMF"
MYSQL_DB: str = "beefast"
#Redis
REDIS_HOST: str = "129.28.101.211"
REDIS_PORT: int = 6379
REDIS_DB: int = 0
REDIS_PASSWORD: str = "redis_tjcZif"
VERIFICATION_CODE_EXPIRE_SECONDS: int = 300
FIRST_ORDER_REFERRAL_COUPON_ID: int = 2
FIRST_ORDER_REFERRAL_COUPON_COUNT: int = 1
FIRST_ORDER_REFERRAL_COUPON_EXPIRE_DAYS: int = 3
class Config:
env_file = ".env.prod"
@lru_cache()
def get_settings() -> BaseSettings:
"""
获取配置实例
使用环境变量 APP_ENV 来决定使用哪个配置
"""
env = os.getenv("APP_ENV", "dev").lower()
config_map = {
"dev": DevSettings,
"prod": ProdSettings
}
config_class = config_map.get(env, DevSettings)
return config_class()
# 导出配置实例
settings = get_settings()