Files
Django/merchant_ops/services/template_query.py
2026-06-20 03:27:42 +08:00

105 lines
3.5 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.
"""子客服读取商家模板:按 merchant_id 查 ShangjiaMoban与老板同一批数据"""
from decimal import Decimal, InvalidOperation
from django.core.paginator import Paginator
from django.db.models import Q
from config.models import ShangjiaMoban
from rank.models import Chenghao
def _format_moban(moban):
texiao_json = ''
label_name = ''
if moban.TitleID:
try:
ch = Chenghao.query.get(id=moban.TitleID)
label_name = ch.mingcheng
texiao_json = ch.texiao_miaoshu or ''
except Chenghao.DoesNotExist:
pass
return {
'mobanId': moban.id,
'shangpinTypeId': moban.ProductTypeID,
'jieshao': moban.TemplateDesc,
'jiage': str(moban.Price),
'fabushuliang': moban.PublishedCount,
'commissionEnabled': moban.CommissionGrabEnabled,
'commissionValue': str(moban.CommissionPrice) if moban.CommissionPrice is not None else None,
'labelId': moban.TitleID,
'labelName': label_name,
'texiaoJson': texiao_json,
'createTime': moban.CreateTime.strftime('%Y-%m-%d %H:%M:%S') if moban.CreateTime else '',
}
def list_merchant_templates(merchant_id, data):
"""
查询某商家全部模板UserID=merchant_id
返回 (payload_dict, http_status) 与 /peizhi/sjddmblb 一致code=200。
"""
leixing_id = data.get('shangpinTypeId')
if not leixing_id:
return {'code': 400, 'msg': '商品类型ID不能为空', 'data': {}}, 400
get_type = int(data.get('getType', 2))
page = int(data.get('page', 1))
page_size = int(data.get('pageSize', 50))
keyword = data.get('keyword', '')
min_price = data.get('minPrice', '')
label_id = data.get('labelId', None)
if label_id is not None:
try:
label_id = int(label_id)
except (ValueError, TypeError):
label_id = None
query = Q(UserID=merchant_id, ProductTypeID=leixing_id)
if get_type == 1:
if keyword:
keyword = str(keyword).strip()
try:
mid = int(keyword)
query &= Q(id=mid) | Q(TemplateDesc__icontains=keyword)
except ValueError:
query &= Q(TemplateDesc__icontains=keyword)
if min_price:
try:
query &= Q(Price__gte=Decimal(str(min_price)))
except (InvalidOperation, ValueError, TypeError):
pass
if label_id:
query &= Q(TitleID=label_id)
mobans = ShangjiaMoban.query.filter(query).order_by('-id')
formatted = [_format_moban(m) for m in mobans]
return {
'code': 200,
'msg': '搜索成功',
'data': {'list': formatted, 'total': len(formatted), 'hasMore': False},
}, 200
queryset = ShangjiaMoban.query.filter(query).order_by('-id')
paginator = Paginator(queryset, page_size)
if page < 1 or page > max(paginator.num_pages, 1):
return {'code': 400, 'msg': '页码超出范围', 'data': {}}, 400
current_page = paginator.page(page)
formatted = [_format_moban(m) for m in current_page.object_list]
has_more = current_page.has_next()
if len(formatted) < page_size:
has_more = False
return {
'code': 200,
'msg': '获取成功',
'data': {
'list': formatted,
'total': paginator.count,
'hasMore': has_more,
'currentPage': page,
'pageSize': page_size,
'totalPages': paginator.num_pages,
},
}, 200