feat: 公告按页、身份标签、拼多多订单号、派单与抢单改造
This commit is contained in:
@@ -1831,6 +1831,7 @@ class ShangjiaPaifaView(APIView):
|
||||
label_id = data.get('labelId') # 整数或 None
|
||||
commission_enabled = data.get('commissionEnabled', False)
|
||||
commission_value_raw = data.get('commissionValue')
|
||||
waibu_dingdan_id_raw = data.get('waibuDingdanId', '')
|
||||
|
||||
# ----- 2. 字符串字段安全处理 -----
|
||||
dingdan_jieshao = str(dingdan_jieshao_raw).strip()
|
||||
@@ -1838,6 +1839,7 @@ class ShangjiaPaifaView(APIView):
|
||||
laoban_name = str(laoban_name_raw).strip()
|
||||
zhiding_uid = str(zhiding_uid_raw).strip()
|
||||
commission_value_str = str(commission_value_raw).strip() if commission_value_raw is not None else ''
|
||||
waibu_dingdan_id = str(waibu_dingdan_id_raw).strip()[:64] if waibu_dingdan_id_raw else ''
|
||||
|
||||
# ----- 3. 必填校验 -----
|
||||
if not all([shangpin_type_id, dingdan_jieshao, laoban_name, jiage_str]):
|
||||
@@ -1961,6 +1963,7 @@ class ShangjiaPaifaView(APIView):
|
||||
ImageURL=request.user.Avatar,
|
||||
User1ID=f"Sj{request.user.UserUID}",
|
||||
ClubID=club_id,
|
||||
ExternalOrderID=waibu_dingdan_id or None,
|
||||
)
|
||||
logger.info(f"订单主表创建: {dingdan.OrderID}")
|
||||
|
||||
@@ -2057,8 +2060,9 @@ class ShangjiaDingdanHuoquView(APIView):
|
||||
# 🆕 商品类型筛选(兼容 leixing_id / ProductTypeID)
|
||||
leixing_id = pick_leixing_id(data)
|
||||
|
||||
# 🆕 模糊搜索关键字(支持订单ID、订单介绍、游戏昵称、打手ID)
|
||||
# 🆕 模糊搜索关键字(支持订单ID、订单介绍、游戏昵称、打手ID、拼多多订单号)
|
||||
keyword = data.get('keyword', '').strip()
|
||||
waibu_dingdan_id = str(data.get('waibuDingdanId') or '').strip()
|
||||
except (ValueError, TypeError):
|
||||
return Response({
|
||||
'code': 2,
|
||||
@@ -2087,8 +2091,10 @@ class ShangjiaDingdanHuoquView(APIView):
|
||||
if leixing_id is not None:
|
||||
base_qs = base_qs.filter(Order__ProductTypeID=leixing_id)
|
||||
|
||||
# 7. 模糊搜索(支持订单ID、订单介绍、游戏昵称、打手ID)
|
||||
if keyword:
|
||||
# 7. 模糊搜索(支持订单ID、订单介绍、游戏昵称、打手ID、拼多多订单号)
|
||||
if waibu_dingdan_id:
|
||||
base_qs = base_qs.filter(Order__ExternalOrderID__exact=waibu_dingdan_id)
|
||||
elif keyword:
|
||||
# 订单ID精确匹配(dingdan_id有唯一索引,先用精确匹配)
|
||||
dingdan_id_match = Q(Order__OrderID__exact=keyword)
|
||||
# 订单介绍模糊匹配
|
||||
@@ -2097,9 +2103,11 @@ class ShangjiaDingdanHuoquView(APIView):
|
||||
nicheng_match = Q(Order__Nickname__icontains=keyword)
|
||||
# 打手ID精确匹配
|
||||
dashou_match = Q(Order__PlayerID__exact=keyword)
|
||||
# 拼多多订单号精确匹配
|
||||
waibu_match = Q(Order__ExternalOrderID__exact=keyword)
|
||||
|
||||
base_qs = base_qs.filter(
|
||||
dingdan_id_match | jieshao_match | nicheng_match | dashou_match
|
||||
dingdan_id_match | jieshao_match | nicheng_match | dashou_match | waibu_match
|
||||
)
|
||||
|
||||
# 8. 计算待结算订单数量(状态为8)
|
||||
@@ -2317,6 +2325,9 @@ class ShangjiaDingdanXiangqingView(APIView):
|
||||
|
||||
# 新增:更换打手后的新订单ID
|
||||
'xin_dingdan_id': xin_dingdan_id,
|
||||
|
||||
# 拼多多订单号(商家/客服可见)
|
||||
'waibu_dingdan_id': order.ExternalOrderID or '',
|
||||
}
|
||||
|
||||
try:
|
||||
@@ -3148,12 +3159,43 @@ class DashouDingdanHuoquView(APIView):
|
||||
})
|
||||
shangjia_tags_map[oid] = sj_tags
|
||||
|
||||
# --- 身份装饰标签 + 优质商家 ---
|
||||
from jituan.services.identity_tag import (
|
||||
SHENFEN_DASHOU,
|
||||
SHENFEN_SHANGJIA,
|
||||
batch_identity_tags,
|
||||
)
|
||||
from users.models import UserShangjia
|
||||
|
||||
identity_pairs = []
|
||||
youzhi_map = {}
|
||||
merchant_uids = set(shangjia_id_map.values())
|
||||
if merchant_uids:
|
||||
for sj in UserShangjia.query.filter(
|
||||
user__UserUID__in=merchant_uids
|
||||
).select_related('user').values('user__UserUID', 'is_youzhi_shangjia'):
|
||||
youzhi_map[sj['user__UserUID']] = bool(sj['is_youzhi_shangjia'])
|
||||
|
||||
for item in dingdan_list:
|
||||
oid = item['OrderID']
|
||||
zhid = item.get('AssignedID')
|
||||
if zhid:
|
||||
identity_pairs.append((zhid, SHENFEN_DASHOU))
|
||||
if item['Platform'] == 2 and oid in shangjia_id_map:
|
||||
sj_uid = shangjia_id_map[oid]
|
||||
if sj_uid:
|
||||
identity_pairs.append((sj_uid, SHENFEN_SHANGJIA))
|
||||
|
||||
club_id = resolve_club_id_from_request(request)
|
||||
identity_tag_map = batch_identity_tags(club_id, identity_pairs) if identity_pairs else {}
|
||||
|
||||
# 12. 格式化返回数据
|
||||
formatted_list = []
|
||||
for order in dingdan_list:
|
||||
oid = order['OrderID']
|
||||
zid = order.get('AssignedID')
|
||||
info = zhiding_info.get(zid, {})
|
||||
sj_uid = shangjia_id_map.get(oid) if order['Platform'] == 2 else None
|
||||
formatted_list.append({
|
||||
'dingdan_id': order['OrderID'],
|
||||
'zhuangtai': order['Status'],
|
||||
@@ -3176,6 +3218,10 @@ class DashouDingdanHuoquView(APIView):
|
||||
'xuqiu_biaoqian': xuqiu_tags_map.get(oid, []),
|
||||
'dashou_biaoqian': dashou_tags_map.get(oid, []),
|
||||
'shangjia_biaoqian': shangjia_tags_map.get(oid, []),
|
||||
# 身份装饰标签 + 优质商家
|
||||
'shangjia_identity_biaoqian': identity_tag_map.get((sj_uid, SHENFEN_SHANGJIA), []) if sj_uid else [],
|
||||
'zhiding_identity_biaoqian': identity_tag_map.get((zid, SHENFEN_DASHOU), []) if zid else [],
|
||||
'shangjia_youzhi': bool(youzhi_map.get(sj_uid)) if sj_uid else False,
|
||||
})
|
||||
|
||||
has_more = (page * page_size) < total
|
||||
@@ -6215,6 +6261,7 @@ class ZxsjghdsView(APIView):
|
||||
jieshao = old_order.Description
|
||||
nicheng = old_order.Nickname
|
||||
beizhu = old_order.Remark
|
||||
waibu_dingdan_id = old_order.ExternalOrderID
|
||||
user1_id = old_order.User1ID
|
||||
tupian = old_order.ImageURL
|
||||
fadan_pingtai = old_order.Platform
|
||||
@@ -6303,6 +6350,7 @@ class ZxsjghdsView(APIView):
|
||||
Remark=beizhu,
|
||||
User1ID=user1_id, # 商家标识
|
||||
ImageURL=tupian,
|
||||
ExternalOrderID=waibu_dingdan_id,
|
||||
# 不继承:zhiding_id, jiedan_dashou_id, dashou_liuyan 等
|
||||
)
|
||||
|
||||
@@ -6418,6 +6466,11 @@ class ShangjiaFakuanApplyView(APIView):
|
||||
return Response({'code': 5, 'msg': '该打手在此订单已被罚款,不能重复申请'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# ========== 6. 本地创建罚单 ==========
|
||||
staff_kefu_id = None
|
||||
staff_member = getattr(request, '_staff_member', None)
|
||||
if staff_member is not None:
|
||||
staff_kefu_id = getattr(staff_member, 'staff_user_id', None) or None
|
||||
|
||||
with transaction.atomic():
|
||||
Penalty.query.create(
|
||||
PenalizedUserID=dashou_id,
|
||||
@@ -6430,6 +6483,7 @@ class ShangjiaFakuanApplyView(APIView):
|
||||
AffectsGrabbing=yingxiang_qiangdan,
|
||||
ApplicantIdentity=5, # 申请人是商家
|
||||
ClubID=resolve_penalty_club_id(order=order, penalized_user_id=dashou_id),
|
||||
ShopStaffUserID=staff_kefu_id,
|
||||
)
|
||||
logger.info(f"商家{shangjia_id}对订单{dingdan_id}打手{dashou_id}罚款成功,金额{fakuanjine}")
|
||||
return Response({'code': 0, 'msg': '罚款申请已提交'})
|
||||
|
||||
Reference in New Issue
Block a user