feat: 链接填单增加拼多多订单号/手机号校验并隐藏H5价格

This commit is contained in:
XingQue
2026-07-03 23:32:33 +08:00
parent c7adec20db
commit 432387982e
5 changed files with 160 additions and 11 deletions

View File

@@ -32,6 +32,7 @@ from utils.invitationcode_utils import CreateInvitationCode, VerifyInvitationCod
from backend.utils import update_shangjia_daily
from utils.chat_utils import subscribe_merchant_link_chat
from utils.pdd_order_validator import validate_pdd_order_id, validate_cn_mobile
from .models import (
Gonggao, Lunbo, Tupianpeizhi, Qunpeizhi,
@@ -2239,7 +2240,6 @@ class KehuGetDingdanLianjieView(APIView):
# ========== 构建订单信息 ==========
dingdan_info = {
'jieshao': dingdan_obj.Description or '',
'jiage': str(dingdan_obj.Amount) if dingdan_obj.Amount is not None else '0.00', # 金额字段名是 Amount
'shangjia_mingcheng': shangjia_nicheng,
'zhuangtai': dingdan_obj.Status,
# 新增配置字段
@@ -2253,11 +2253,17 @@ class KehuGetDingdanLianjieView(APIView):
# 如果已使用,返回已填写的信息
if lianjie_obj.is_used:
laoban_shouji = ''
try:
laoban_shouji = dingdan_obj.shangjia_kuozhan.BossPhone or ''
except Exception:
pass
dingdan_info.update({
'youxi_nicheng': dingdan_obj.Nickname or '',
'zhiding_dashou': dingdan_obj.AssignedID or dingdan_obj.PlayerID or '',
'beizhu': dingdan_obj.Remark or '',
'waibu_dingdan_id': dingdan_obj.ExternalOrderID or '',
'laoban_shouji': laoban_shouji,
})
# 获取聊天相关标识(新配对群优先,旧单保留 order 群)
@@ -2279,7 +2285,6 @@ class KehuGetDingdanLianjieView(APIView):
logger.error(f"订单不存在 - 订单ID: {lianjie_obj.OrderID}")
response_data.update({
'jieshao': '',
'jiage': '0.00',
'shangjia_mingcheng': '',
'zhuangtai': None,
'dashou_biaoshi': '',
@@ -2295,7 +2300,6 @@ class KehuGetDingdanLianjieView(APIView):
logger.error(f"获取订单信息异常: {str(e)}", exc_info=True)
response_data.update({
'jieshao': '',
'jiage': '0.00',
'shangjia_mingcheng': '',
'zhuangtai': None,
'dashou_biaoshi': '',
@@ -2312,7 +2316,6 @@ class KehuGetDingdanLianjieView(APIView):
logger.warning(f"链接记录中订单ID为空 - 链接ID: {lianjie_obj.id}")
response_data.update({
'jieshao': '',
'jiage': '0.00',
'shangjia_mingcheng': '',
'zhuangtai': None,
'dashou_biaoshi': '',
@@ -2387,6 +2390,7 @@ class KehuTianxieDingdanView(APIView):
zhiding_dashou = data.get('zhiding_dashou', '').strip() # 可选
beizhu = data.get('beizhu', '').strip() # 可选
waibu_dingdan_id = str(data.get('waibu_dingdan_id') or data.get('waibuDingdanId') or '').strip()[:64]
laoban_shouji = str(data.get('laoban_shouji') or data.get('bossPhone') or data.get('laobanPhone') or '').strip()[:11]
# 4.0 临时关闭指定功能(如需开启,请删除或注释掉下面两行)
@@ -2424,6 +2428,24 @@ class KehuTianxieDingdanView(APIView):
'data': None
}, status=status.HTTP_400_BAD_REQUEST)
ok_pdd, msg_pdd = validate_pdd_order_id(waibu_dingdan_id)
if not ok_pdd:
logger.warning(f"拼多多订单号校验失败 - IP: {client_ip}, 值: {waibu_dingdan_id[:24]}")
return Response({
'code': 400,
'msg': msg_pdd,
'data': None
}, status=status.HTTP_400_BAD_REQUEST)
ok_phone, msg_phone = validate_cn_mobile(laoban_shouji)
if not ok_phone:
logger.warning(f"老板手机号校验失败 - IP: {client_ip}")
return Response({
'code': 400,
'msg': msg_phone,
'data': None
}, status=status.HTTP_400_BAD_REQUEST)
# 6. 验证游戏昵称格式
if len(youxi_nicheng) > 50:
logger.warning(f"游戏昵称过长 - IP: {client_ip}, 长度: {len(youxi_nicheng)}")
@@ -2453,7 +2475,7 @@ class KehuTianxieDingdanView(APIView):
'data': None
}, status=status.HTTP_400_BAD_REQUEST)
# 8. 验证拼多多订单号
# 8. 验证拼多多订单号长度(格式已在上方校验)
if len(waibu_dingdan_id) > 64:
return Response({
'code': 400,
@@ -2596,6 +2618,13 @@ class KehuTianxieDingdanView(APIView):
logger.info(
f"更新订单成功 - 订单ID: {dingdan_obj.OrderID}, 新状态: {zhuangtai_xin}, 指定打手: {zhiding_dashou or ''}")
try:
shangjia_ext = dingdan_obj.shangjia_kuozhan
shangjia_ext.BossPhone = laoban_shouji
shangjia_ext.save(update_fields=['BossPhone'])
except MerchantOrderExt.DoesNotExist:
logger.warning(f"商家扩展表不存在,无法保存手机号 - 订单: {dingdan_obj.OrderID}")
# 构建通知数据(你的 _get_game_type_name 方法保留在视图里直接用)
order_info = {
'dingdan_id': dingdan_obj.OrderID,