抢单建群写入双方头像昵称元数据,更换打手后补建群聊

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-06-23 23:21:21 +08:00
parent 2db394b2f9
commit 56c66846cc
2 changed files with 180 additions and 35 deletions

View File

@@ -4424,6 +4424,7 @@ from peizhi.models import ClubConfig
from utils.chat_utils import (
_send_group_message, _subscribe_users_to_group,
resolve_group_id_for_order, prepare_order_group_chat,
build_pair_to_data_for_order,
)
logger = logging.getLogger('dingdan')
@@ -4495,7 +4496,8 @@ def subscribe_users_to_group(user_ids, group_ids, appkey=None, secret=None):
def send_group_message(
appkey, secret, group_id, sender_id, sender_name, sender_avatar,
message_text='', custom_payload=None, group_name='', order_id='', is_cross=0
message_text='', custom_payload=None, group_name='', order_id='', is_cross=0,
to_data_extra=None,
):
"""
通过 GoEasy REST API 发送群消息。
@@ -4503,12 +4505,20 @@ def send_group_message(
custom_payload: 自定义消息体(如订单卡片),此时 type 设为 'order'
"""
url = 'https://rest-hangzhou.goeasy.io/v2/im/message'
to_data = {
"name": group_name or group_id,
"avatar": sender_avatar or '',
"orderId": order_id,
"isCross": is_cross
}
sender_avatar = sender_avatar or ''
if to_data_extra:
to_data = dict(to_data_extra)
if order_id and 'orderId' not in to_data:
to_data['orderId'] = order_id
if 'isCross' not in to_data:
to_data['isCross'] = is_cross
else:
to_data = {
"name": group_name or group_id,
"avatar": sender_avatar,
"orderId": order_id,
"isCross": is_cross
}
msg_type = 'order' if custom_payload else 'text'
payload = custom_payload if custom_payload else message_text
@@ -4707,6 +4717,8 @@ class DaiLiQunLiaoXiaoXiView(APIView):
custom_payload = order_payload if message_type == 'order' else None
text_content = message_text
pair_to_data = build_pair_to_data_for_order(order, viewer_goeasy_id=sender_id)
# ---------- 先向我方群发送消息(永远执行) ----------
local_ok = send_group_message(
appkey=self_appkey,
@@ -4719,7 +4731,8 @@ class DaiLiQunLiaoXiaoXiView(APIView):
custom_payload=custom_payload,
group_name=group_name,
order_id=order.dingdan_id,
is_cross=is_cross
is_cross=is_cross,
to_data_extra=pair_to_data,
)
if not local_ok:
return Response({'code': 500, 'msg': '消息发送失败'})
@@ -6212,6 +6225,11 @@ class AdGengHuanDaShou(APIView):
dingdan_obj.zhuangtai = 2 # 进行中状态
dingdan_obj.save()
try:
establish_order_chat_with_retry(dingdan_obj.dingdan_id, max_rounds=3)
except Exception as chat_err:
logger.error(f"更换打手后建聊失败: {chat_err}", exc_info=True)
# 13. 返回成功响应
return Response({
'code': 0,