聊天配对群组ID与准备接口:打手商家同群、订单卡片推送

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-06-23 22:49:28 +08:00
parent 7daa05c8c6
commit 2db394b2f9
3 changed files with 229 additions and 20 deletions

View File

@@ -4421,7 +4421,10 @@ from rest_framework import status, permissions
from .models import Dingdan, DingdanPingtai, DingdanShangjia
from yonghu.models import UserMain, UserDashou, UserBoss, UserShangjia
from peizhi.models import ClubConfig
from utils.chat_utils import _send_group_message, _subscribe_users_to_group
from utils.chat_utils import (
_send_group_message, _subscribe_users_to_group,
resolve_group_id_for_order, prepare_order_group_chat,
)
logger = logging.getLogger('dingdan')
@@ -4593,6 +4596,44 @@ def get_partner_club_config(partner_club_id):
# ----------------- 主视图 -----------------
class DingdanLiaotianZhunbeiView(APIView):
"""订单详情进入聊天前:确保配对群订阅并返回 groupId"""
permission_classes = [permissions.IsAuthenticated]
def post(self, request):
dingdan_id = request.data.get('dingdan_id') or request.data.get('orderId')
identity_type = request.data.get('identityType')
push_order_card = request.data.get('push_order_card', True)
if isinstance(push_order_card, str):
push_order_card = push_order_card.lower() in ('1', 'true', 'yes')
if not dingdan_id:
return Response({'code': 400, 'msg': '缺少 dingdan_id'})
if not identity_type:
return Response({'code': 400, 'msg': '缺少 identityType'})
if identity_type not in ('dashou', 'shangjia', 'boss'):
return Response({'code': 400, 'msg': 'identityType 无效'})
uid = request.user.yonghuid
try:
order = Dingdan.objects.select_related('pingtai_kuozhan', 'shangjia_kuozhan').get(dingdan_id=dingdan_id)
except Dingdan.DoesNotExist:
return Response({'code': 404, 'msg': '订单不存在'})
valid, err_msg = check_user_permission(identity_type, uid, order)
if not valid:
return Response({'code': 403, 'msg': err_msg})
prefix_map = {'dashou': 'Ds', 'shangjia': 'Sj', 'boss': 'Boss'}
caller_goeasy_id = prefix_map[identity_type] + uid
result = prepare_order_group_chat(dingdan_id, caller_goeasy_id, push_order_card=push_order_card)
if not result:
return Response({'code': 500, 'msg': '准备群聊失败,请稍后重试'})
return Response({'code': 0, 'msg': 'ok', 'data': result})
class DaiLiQunLiaoXiaoXiView(APIView):
"""
代理发送群聊消息
@@ -4648,7 +4689,7 @@ class DaiLiQunLiaoXiaoXiView(APIView):
return Response({'code': 500, 'msg': '系统配置错误(APPKEY)'})
# ===== 6. 公共群信息 =====
real_group_id = f"group_{order.dingdan_id}"
real_group_id = resolve_group_id_for_order(order)
group_name = (order.jieshao[:20] + '') if order.jieshao and len(order.jieshao) > 20 else f"订单{order.dingdan_id}"
sender_avatar = full_avatar(sender_avatar_raw) if sender_avatar_raw else full_avatar('')