feat(market): 添加市场分析数据基础架构和功能模块 - 新增市场分析相关数据库表结构,包括市场工具、每日报价、财务指标、 宏观指标和公告等数据模型 - 创建市场分析相关的Alembic迁移脚本,包含完整的up和downgrade逻辑 - 集成市场分析路由到主API路由器中 - 添加市场数据定时任务调度,支持盘前、收盘和周度市场分析报告 - 实现市场数据后台任务队列,包含报告生成和收盘分析功能 - 扩展系统配置设置,添加市场分析启用开关和相关参数配置 - 增加AI智能技能支持,包含市场概览分析和股票分析功能 - 添加审计日志记录,支持市场数据同步和自选股更新操作追踪 - 实现飞书命令集成,支持股票分析、自选股管理、公告查询等交互 - 提供市场数据服务层,包含行业分析、股票对比、市场概览等功能 ```
141 lines
3.5 KiB
Python
141 lines
3.5 KiB
Python
from enum import StrEnum
|
|
|
|
|
|
class FeishuReceiveIdType(StrEnum):
|
|
CHAT_ID = "chat_id"
|
|
|
|
|
|
class FeishuMessageType(StrEnum):
|
|
TEXT = "text"
|
|
INTERACTIVE = "interactive"
|
|
|
|
|
|
class FeishuEventSource(StrEnum):
|
|
WEBHOOK = "webhook"
|
|
LONG_CONNECTION = "long_connection"
|
|
|
|
|
|
class FeishuPayloadKey(StrEnum):
|
|
APP_ID = "app_id"
|
|
APP_SECRET = "app_secret"
|
|
CARD = "card"
|
|
CHALLENGE = "challenge"
|
|
CODE = "code"
|
|
CONFIG = "config"
|
|
CONTENT = "content"
|
|
DIV = "div"
|
|
DATA = "data"
|
|
ELEMENTS = "elements"
|
|
EXPIRE = "expire"
|
|
FEISHU_ERROR = "feishu_error"
|
|
HEADER = "header"
|
|
IMAGE = "image"
|
|
IMAGE_KEY = "image_key"
|
|
IMAGE_TYPE = "image_type"
|
|
IMG = "img"
|
|
IMG_KEY = "img_key"
|
|
ALT = "alt"
|
|
EVENT = "event"
|
|
EVENT_ID = "event_id"
|
|
EVENT_TYPE = "event_type"
|
|
LARK_MARKDOWN = "lark_md"
|
|
MESSAGE = "message"
|
|
MESSAGE_ID = "message_id"
|
|
MESSAGE_TYPE = "msg_type"
|
|
OPEN_ID = "open_id"
|
|
PLAIN_TEXT = "plain_text"
|
|
RECEIVE_ID = "receive_id"
|
|
RECEIVE_ID_TYPE = "receive_id_type"
|
|
SENDER = "sender"
|
|
SENDER_ID = "sender_id"
|
|
TAG = "tag"
|
|
TENANT_ACCESS_TOKEN = "tenant_access_token"
|
|
TEXT = "text"
|
|
TITLE = "title"
|
|
TOKEN = "token"
|
|
USER_ID = "user_id"
|
|
WIDE_SCREEN_MODE = "wide_screen_mode"
|
|
|
|
|
|
class FeishuCommandKey(StrEnum):
|
|
TEXT = "text"
|
|
CHAT_ID = "chat_id"
|
|
ACTOR = "actor"
|
|
|
|
|
|
class FeishuResponseKey(StrEnum):
|
|
OK = "ok"
|
|
ACCEPTED = "accepted"
|
|
HANDLED = "handled"
|
|
DUPLICATE = "duplicate"
|
|
RESULT = "result"
|
|
CHALLENGE = "challenge"
|
|
PROVIDER_RESPONSE = "provider_response"
|
|
STATUS = "status"
|
|
APPROVER = "approver"
|
|
|
|
|
|
class FeishuCommandResultKey(StrEnum):
|
|
COMMAND = "command"
|
|
REPLY_TYPE = "reply_type"
|
|
TITLE = "title"
|
|
CONTENT = "content"
|
|
LINES = "lines"
|
|
PROVIDER_RESPONSE = "provider_response"
|
|
|
|
|
|
class FeishuCommandName(StrEnum):
|
|
RULE_CREATE = "rule_create"
|
|
RULE_LIST = "rule_list"
|
|
RULE_DISABLE = "rule_disable"
|
|
RULE_ENABLE = "rule_enable"
|
|
FINANCE_NEEDS = "finance_needs"
|
|
PROJECT_FINANCE = "project_finance"
|
|
MARKET_OVERVIEW = "market_overview"
|
|
MARKET_MACRO = "market_macro"
|
|
MARKET_ANNOUNCEMENTS = "market_announcements"
|
|
STOCK_ANALYSIS = "stock_analysis"
|
|
WATCHLIST_ADD = "watchlist_add"
|
|
WATCHLIST_LIST = "watchlist_list"
|
|
DAILY_BRIEF = "daily_brief"
|
|
PROJECT_WEEKLY = "project_weekly"
|
|
ATTENDANCE_SUMMARY = "attendance_summary"
|
|
RISK_SUMMARY = "risk_summary"
|
|
AI_ASK = "ai_ask"
|
|
FALLBACK_AI = "fallback_ai"
|
|
|
|
|
|
class FeishuReplyType(StrEnum):
|
|
CARD = "card"
|
|
TEXT = "text"
|
|
|
|
|
|
class FeishuEventReceiptKey(StrEnum):
|
|
EVENT_KEY = "event_key"
|
|
SOURCE = "source"
|
|
EVENT_ID = "event_id"
|
|
MESSAGE_ID = "message_id"
|
|
|
|
|
|
class FeishuCardKey(StrEnum):
|
|
ACTIONS = "actions"
|
|
BUTTON_TYPE = "type"
|
|
VALUE = "value"
|
|
|
|
|
|
FEISHU_TENANT_TOKEN_PATH = "/auth/v3/tenant_access_token/internal"
|
|
FEISHU_MESSAGE_PATH = "/im/v1/messages"
|
|
FEISHU_IMAGE_PATH = "/im/v1/images"
|
|
FEISHU_DEFAULT_OPEN_API_DOMAIN = "https://open.feishu.cn"
|
|
FEISHU_AUTH_MISSING = "Feishu app credentials are not configured"
|
|
FEISHU_VERIFICATION_TOKEN_REQUIRED = "FEISHU_VERIFICATION_TOKEN is required"
|
|
FEISHU_INVALID_TOKEN = "Invalid Feishu token"
|
|
FEISHU_RECEIVE_ID_MISSING = "receive_id or FEISHU_DEFAULT_CHAT_ID is required"
|
|
FEISHU_SUCCESS_CODE = 0
|
|
FEISHU_DEFAULT_TOKEN_EXPIRE_SECONDS = 7200
|
|
FEISHU_TOKEN_EXPIRE_SAFETY_SECONDS = 300
|
|
FEISHU_AI_REPLY_TITLE = "AI 回复"
|
|
FEISHU_EMPTY_CARD_TEXT = "暂无数据"
|
|
FEISHU_MENTION_PATTERN = r"@\S+"
|
|
FEISHU_ZERO_WIDTH_SPACE = "\u200b"
|