Files
DjangoAdmin_FastAPI_EleVue/apps/services/ad_sort.py
T
ClaudeandClaude dbcce79536 chore: 基线提交(重构前快照)
重构前保存现有 apps/ 结构基线,供后续各阶段回滚。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 09:43:18 +08:00

142 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from datetime import datetime, timezone
from fastapi.logger import logger
from sqlalchemy import and_
from apps.constants.constants import AD_SORT_PLATFORM_LIST
from apps.constants.message import PAGE_SIZE
from apps.forms.ad_sort import AdSortForm
from apps.models.ad_sort import AdSort
from apps.models.item import Item
from apps.models.item_cate import ItemCate
from extensions import get_db_session
from utils import R
from utils.security import get_user_id
from utils.request import like_contains
# 获取广告位分页数据
def get_ad_sort_page(request):
db = get_db_session()
# 页码
page = int(request.query_params.get("pageNo", 1))
# 每页数
limit = int(request.query_params.get("pageSize", PAGE_SIZE))
# 实例化查询对象
query = db.query(AdSort).filter(AdSort.is_delete == 0)
# 名称
name = request.query_params.get('name')
if name:
query = query.filter(AdSort.name.like(like_contains(name), escape='\\'))
# 投放平台:1PC站 2WAP站 3微信小程序 4APP应用
platform = request.query_params.get('platform')
if platform:
query = query.filter(AdSort.platform == platform)
# 栏目状态筛选
status = request.query_params.get('status')
if status:
query = query.filter(AdSort.status == status)
# 排序
query = query.order_by(AdSort.sort.asc())
# 记录总数
count = query.count()
# 分页查询
ad_sort_list = query.limit(limit).offset((page - 1) * limit).all()
# 若当前页超出末页(数据被并发删除),自动回退到第一页
if page > 1 and not ad_sort_list:
page = 1
count = query.count()
ad_sort_list = query.limit(limit).offset(0).all()
# 实例化结果
result = []
# 遍历数据源
if len(ad_sort_list) > 0:
for v in ad_sort_list:
# 对象转字典
data = v.to_dict()
# 投放平台
data['platform_name'] = AD_SORT_PLATFORM_LIST.get(v.platform)
# 站点信息
item_info = db.query(Item).filter(and_(Item.id == v.item_id, Item.is_delete == 0)).first()
data['item_name'] = item_info.name if item_info else None
# 栏目信息
cate_info = db.query(ItemCate).filter(and_(ItemCate.id == v.cate_id, ItemCate.is_delete == 0)).first()
data['cate_name'] = cate_info.name if cate_info else None
# 加入列表
result.append(data)
# 返回结果
return R.ok(data=result, count=count)
# 根据ID查询广告位详情
def get_ad_sort_detail(adsort_id):
db = get_db_session()
# 根据ID查询广告位
adsort = db.query(AdSort).filter(and_(AdSort.id == adsort_id, AdSort.is_delete == 0)).first()
# 查询结果为空判断
if not adsort:
return None
# 对象转字典
data = adsort.to_dict()
# 返回结果
return data
# 添加广告位
def add_ad_sort(request, data: AdSortForm):
db = get_db_session()
# 表单数据赋值给对象
adsort = AdSort(**data.model_dump(exclude={'id'}))
adsort.create_user = get_user_id(request)
# 插入数据
adsort.save()
# 返回结果
return R.ok(msg="添加成功")
# 更新广告位
def update_ad_sort(request, data: AdSortForm):
db = get_db_session()
# 记录ID判空
if not data.id or data.id <= 0:
return R.failed("记录ID不能为空")
# 根据ID查询记录
adsort = db.query(AdSort).filter(and_(AdSort.id == data.id, AdSort.is_delete == 0)).first()
# 查询结果判空
if not adsort:
return R.failed("记录不存在")
# 构造更新数据(排除 id)
updData = data.model_dump(exclude={'id'})
updData['update_user'] = get_user_id(request)
updData['update_time'] = datetime.now(tz=timezone.utc)
result = db.query(AdSort).filter_by(id=data.id).update(updData)
# 提交数据
if not result:
return R.failed("更新失败")
# 返回结果
return R.ok(msg="更新成功")
# 删除广告位
def delete_ad_sort(adsort_id):
return AdSort.batch_delete_r(adsort_id)
# 查询广告位列表
def get_ad_sort_list():
db = get_db_session()
# 查询全部广告位列表
ad_sort_list = db.query(AdSort).filter(AdSort.is_delete == 0).all()
# 实例化广告位对象列表
sortList = []
if ad_sort_list:
for v in ad_sort_list:
item = {
'id': v.id,
'description': v.description + "=>" + str(v.loc_id)
}
# 加入列表
sortList.append(item)
# 返回结果
return sortList