fix: 成交指标始终记账并回填;抢单建聊移出事务并重试
抢单池刷新触发历史回填,旧单也能出成交率/罚款率/均时;建聊失败重试并订阅组队成员,避免消息列表空白。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -413,16 +413,40 @@ def establish_order_chat(dingdan_id):
|
||||
|
||||
# ========== 普通订单 / 我方派单 ==========
|
||||
def _handle_local_order(order, dashou_goeasy_id, dashou_name, dashou_avatar, appkey, secret):
|
||||
group_id = resolve_pair_group_id(order) or f"group_{order.OrderID}"
|
||||
# 与详情「联系」一致:有组队用 group_订单,否则配对群
|
||||
group_id = resolve_order_chat_group_id(order) or f"group_{order.OrderID}"
|
||||
group_name = (order.Description[:20] + '…') if order.Description and len(order.Description) > 20 else (order.Description or f"订单{order.OrderID}")
|
||||
group_avatar = _full_local_avatar(order.ImageURL) if order.ImageURL else _full_local_avatar('')
|
||||
|
||||
partner_goeasy_id, partner_name, partner_avatar = _get_local_partner_info(order)
|
||||
if not partner_goeasy_id:
|
||||
logger.error('抢单建聊失败:找不到商家/老板 partner order=%s', order.OrderID)
|
||||
return False
|
||||
|
||||
# 订阅双方
|
||||
if not _subscribe_users_to_group([dashou_goeasy_id, partner_goeasy_id], [group_id], appkey, secret):
|
||||
subscribe_ids = [dashou_goeasy_id, partner_goeasy_id]
|
||||
# 组队订单:把在队队员也拉进群,避免队员消息列表空白
|
||||
try:
|
||||
from orders.models import TeamMember, TeamRecruit
|
||||
rec = TeamRecruit.query.filter(
|
||||
order_id=order.OrderID,
|
||||
status__in=[TeamRecruit.STATUS_RECRUITING, TeamRecruit.STATUS_LOCKED],
|
||||
).first()
|
||||
if rec:
|
||||
for uid in TeamMember.query.filter(
|
||||
recruit_id=rec.id, join_status=TeamMember.JOIN_ACTIVE,
|
||||
).values_list('user_uid', flat=True):
|
||||
u = (uid or '').strip()
|
||||
if u:
|
||||
subscribe_ids.append(f'Ds{u}')
|
||||
except Exception as e:
|
||||
logger.warning('抢单建聊订阅组队成员失败: %s', e)
|
||||
|
||||
# 订阅双方(失败则重试)
|
||||
subscribed = _subscribe_users_to_group(subscribe_ids, [group_id], appkey, secret)
|
||||
if not subscribed:
|
||||
subscribed = _subscribe_users_to_group(subscribe_ids, [group_id], appkey, secret)
|
||||
if not subscribed:
|
||||
logger.error('抢单建聊订阅失败 order=%s group=%s', order.OrderID, group_id)
|
||||
return False
|
||||
|
||||
# 1. 打手发送初始化消息
|
||||
@@ -431,15 +455,28 @@ def _handle_local_order(order, dashou_goeasy_id, dashou_name, dashou_avatar, app
|
||||
appkey, secret, group_id, dashou_goeasy_id, dashou_name, group_avatar,
|
||||
init_msg_text, None, group_name=group_name, order_id=order.OrderID
|
||||
)
|
||||
if not success1:
|
||||
success1 = _send_group_message(
|
||||
appkey, secret, group_id, dashou_goeasy_id, dashou_name, group_avatar,
|
||||
init_msg_text, None, group_name=group_name, order_id=order.OrderID
|
||||
)
|
||||
|
||||
# 2. 【新增】派单方也发一条消息,确保他也能看到群聊
|
||||
partner_msg = f"订单已确认,请开始服务。"
|
||||
# 2. 派单方也发一条,确保商家/老板会话列表能立刻出现该群
|
||||
partner_msg = f"订单已被接单,请及时沟通。"
|
||||
success2 = _send_group_message(
|
||||
appkey, secret, group_id, partner_goeasy_id, partner_name, partner_avatar,
|
||||
partner_msg, None, group_name=group_name, order_id=order.OrderID
|
||||
)
|
||||
if not success2:
|
||||
success2 = _send_group_message(
|
||||
appkey, secret, group_id, partner_goeasy_id, partner_name, partner_avatar,
|
||||
partner_msg, None, group_name=group_name, order_id=order.OrderID
|
||||
)
|
||||
|
||||
return success1 and success2
|
||||
ok = bool(success1 or success2)
|
||||
if not ok:
|
||||
logger.error('抢单建聊发消息失败 order=%s group=%s', order.OrderID, group_id)
|
||||
return ok
|
||||
|
||||
def _get_local_partner_info(order):
|
||||
"""本地订单下单方:老板或商家"""
|
||||
|
||||
Reference in New Issue
Block a user