Files
Django/jituan/services/order_grab_share.py

91 lines
3.1 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.
"""俱乐部订单单向互通抢单grabber 可看/抢 order 俱乐部的待接单。"""
from django.db.models import Q
from jituan.constants import CLUB_ID_DEFAULT
from jituan.models import Club, ClubOrderGrabLink
def normalize_club_id(club_id):
return (club_id or '').strip() or CLUB_ID_DEFAULT
def order_club_ids_for_grabber(grabber_club_id):
"""
打手所属俱乐部可见的订单 ClubID 集合(含本店 + 已配置可抢的对方店)。
"""
gc = normalize_club_id(grabber_club_id)
ids = {gc}
for oc in ClubOrderGrabLink.query.filter(
grabber_club_id=gc,
).values_list('order_club_id', flat=True):
oc = (oc or '').strip()
if oc:
ids.add(oc)
return ids
def order_club_q_for_grabber(grabber_club_id):
"""用于 Order 查询的 Q本店 + 互通店;本店含默认俱乐部时兼容空 ClubID 旧单。"""
allowed = order_club_ids_for_grabber(grabber_club_id)
q = Q(ClubID__in=list(allowed))
if CLUB_ID_DEFAULT in allowed:
q |= Q(ClubID__isnull=True) | Q(ClubID='')
return q
def can_grabber_take_order_club(grabber_club_id, order_club_id):
gc = normalize_club_id(grabber_club_id)
oc = normalize_club_id(order_club_id)
if gc == oc:
return True
return ClubOrderGrabLink.query.filter(
grabber_club_id=gc, order_club_id=oc,
).exists()
def list_grab_links():
name_map = {c.club_id: c.name for c in Club.query.filter(status=1)}
rows = list(ClubOrderGrabLink.query.order_by('grabber_club_id', 'order_club_id'))
return [
{
'id': r.id,
'grabber_club_id': r.grabber_club_id,
'grabber_club_name': name_map.get(r.grabber_club_id, r.grabber_club_id),
'order_club_id': r.order_club_id,
'order_club_name': name_map.get(r.order_club_id, r.order_club_id),
'create_time': r.CreateTime.strftime('%Y-%m-%d %H:%M:%S') if r.CreateTime else '',
}
for r in rows
]
def add_grab_link(grabber_club_id, order_club_id):
gc = (grabber_club_id or '').strip()
oc = (order_club_id or '').strip()
if not gc or not oc:
return None, '请选择抢单方与被抢订单俱乐部'
if gc == oc:
return None, '不能配置本店抢本店(本店订单默认可见)'
if not Club.query.filter(club_id=gc, status=1).exists():
return None, f'抢单方俱乐部不存在: {gc}'
if not Club.query.filter(club_id=oc, status=1).exists():
return None, f'订单方俱乐部不存在: {oc}'
if ClubOrderGrabLink.query.filter(grabber_club_id=gc, order_club_id=oc).exists():
return None, '该互通规则已存在'
row = ClubOrderGrabLink.query.create(
grabber_club_id=gc,
order_club_id=oc,
)
return {'id': row.id, 'grabber_club_id': gc, 'order_club_id': oc}, None
def delete_grab_link(link_id):
try:
link_id = int(link_id)
except (TypeError, ValueError):
return False, '无效的规则 id'
deleted, _ = ClubOrderGrabLink.objects.filter(id=link_id).delete()
if not deleted:
return False, '规则不存在'
return True, None