小程序在9月27日发布了正式版
This commit is contained in:
@@ -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))
|
||||
Reference in New Issue
Block a user