小程序在9月27日发布了正式版

This commit is contained in:
qcloud
2025-10-01 08:29:09 +08:00
parent 8d90798647
commit c44e6715a0
15 changed files with 6679 additions and 25074 deletions

View File

@@ -147,7 +147,7 @@ def create_museum(data: dict):
return execute_query(sql, params)
def get_museums(search: str = None, free: int = None):
def get_museums(search: str = None, free: int = None, id_list: Union[None, int, List[int]] = None):
base_sql = "SELECT * FROM mesum_overview WHERE 1=1"
params = []
@@ -159,11 +159,30 @@ def get_museums(search: str = None, free: int = None):
base_sql += " AND free = %s"
params.append(free)
# 处理 id_list 参数
if id_list is not None:
# 如果 id_list 是单个整数,转换为列表
if isinstance(id_list, int):
id_list = [id_list]
# 如果 id_list 是列表且不为空
if isinstance(id_list, list) and len(id_list) > 0:
# 创建占位符字符串,例如 "%s, %s, %s"
placeholders = ", ".join(["%s"] * len(id_list))
base_sql += f" AND id IN ({placeholders})"
params.extend(id_list)
if isinstance(id_list, str):
id_list = [int(x) for x in id_list.split(',') if x.strip().isdigit()]
# 创建占位符字符串,例如 "%s, %s, %s"
placeholders = ", ".join(["%s"] * len(id_list))
base_sql += f" AND id IN ({placeholders})"
params.extend(id_list)
base_sql += " ORDER BY create_time DESC"
return execute_query(base_sql, tuple(params))
def update_museum(museum_id: int, data: dict):
"""动态更新博物馆信息仅更新data中包含的字段"""
allowed_fields = {
@@ -940,7 +959,7 @@ def get_subscription_template_by_id(template_id: int) -> dict:
return result[0] if result else None
def get_active_user_subscription(user_id: str, museum_id: int) -> dict:
def get_user_subscription(user_id: str, museum_id: int) -> dict:
"""
获取用户在指定博物馆的有效订阅
@@ -975,6 +994,82 @@ def get_active_user_subscription(user_id: str, museum_id: int) -> dict:
return result[0] if result else None
def get_all_users_subscriptions_paginated(
museum_id: Optional[int] = None,
page: int = 1,
page_size: int = 50
) -> Dict[str, any]:
"""
获取所有用户的有效订阅(分页版)
参数说明:
- museum_id: 博物馆ID如果为None则查询所有博物馆
- page: 页码从1开始
- page_size: 每页记录数
返回:
- 包含订阅列表和分页信息的字典
"""
offset = (page - 1) * page_size
# 基础查询条件
#where_conditions = ["us.is_active = 1", "us.end_date > NOW()"]
where_conditions = []
params = []
if museum_id is not None:
where_conditions.append("ms.museum_id = %s")
params.append(museum_id)
where_clause = " AND ".join(where_conditions)
# 获取总数
count_sql = f"""
SELECT COUNT(*) as total
FROM user_subscriptions us
JOIN museum_subscriptions ms ON us.museum_subscription_id = ms.sub_id
WHERE {where_clause}
"""
total_result = execute_query(count_sql, params)
total = total_result[0]['total'] if total_result else 0
# 获取分页数据
data_sql = f"""
SELECT
us.*,
st.name as template_name,
st.description as template_description,
st.validity_type as template_validity_type,
ui.openid as openid,
ui.phone as phone,
ms.museum_id,
ms.price as price,
m.name as museum_name
FROM user_subscriptions us
JOIN museum_subscriptions ms ON us.museum_subscription_id = ms.sub_id
JOIN subscription_templates st ON ms.template_id = st.id
JOIN users_info ui ON us.user_id = ui.user_id
LEFT JOIN mesum_overview m ON ms.museum_id = m.id
WHERE {where_clause}
ORDER BY us.create_date, ms.museum_id, us.user_id ASC
LIMIT %s OFFSET %s
"""
# 添加分页参数
data_params = params + [page_size, offset]
data_result = execute_query(data_sql, data_params)
return {
"data": data_result if data_result else [],
"pagination": {
"page": page,
"page_size": page_size,
"total": total,
"total_pages": (total + page_size - 1) // page_size if page_size > 0 else 0
}
}
def get_user_subscription_history(user_id: str) -> list:
"""
获取用户的订阅历史记录
@@ -1191,7 +1286,7 @@ def check_user_subscription(user_id: str, museum_id: int) -> dict:
- 如果没有,检查免费订阅是否可用
"""
# 1. 检查当前有效订阅
active_sub = get_active_user_subscription(user_id, museum_id)
active_sub = get_user_subscription(user_id, museum_id)
if active_sub:
return active_sub
@@ -1288,6 +1383,15 @@ def calculate_subscription_expiry(start_date: datetime, validity_type: str) -> d
elif validity_type == "1month":
# 下个月的同一天(自动处理月末情况)
return start_date + relativedelta(months=1)
elif validity_type == "2month":
# 下个月的同一天(自动处理月末情况)
return start_date + relativedelta(months=2)
elif validity_type == "3month":
# 下个月的同一天(自动处理月末情况)
return start_date + relativedelta(months=3)
elif validity_type == "6month":
# 下个月的同一天(自动处理月末情况)
return start_date + relativedelta(months=6)
elif validity_type == "1year":
# 下一年的同一天
return start_date + relativedelta(years=1)
@@ -1358,4 +1462,27 @@ def is_subscription_valid(subscription: dict) -> bool:
# 时间格式无效,跳过时间检查
pass
return True
return True
# 查询用户(多条件)
def get_admin_account_info(status: int = None, email: str = None, phone: str = None):
base_sql = "SELECT * FROM rag_flow.admin_account WHERE 1=1"
params = []
if status is not None:
base_sql += " AND status = %s"
params.append(status)
if email:
base_sql += " AND email = %s"
params.append(email)
if phone:
base_sql += " AND phone = %s"
params.append(phone)
base_sql += " ORDER BY create_time DESC"
return execute_query(base_sql, tuple(params))