feat: 组队招募(/zudui)+ 结单/自动结算/罚款挂钩
新增 Team 表与接口;进8强制锁、组队分账优先且失败不回退全额队长。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -888,12 +888,35 @@ class ShangjiaJiesuanView(APIView):
|
||||
|
||||
# 原子更新打手数据(可提现走冻结网关;未开启时与原先全额进 yue 一致)
|
||||
from jituan.services.fund_freeze import credit_dashou_order_settle
|
||||
credit_dashou_order_settle(
|
||||
order=order,
|
||||
dashou_profile=dashou,
|
||||
user_id=jiedan_dashou_id,
|
||||
amount=dashou_fencheng,
|
||||
)
|
||||
from orders.services.team_recruit import settle_team_or_legacy, get_active_recruit, lock_recruit
|
||||
from orders.models import TeamRecruit, TeamSettleLedger
|
||||
team_done = False
|
||||
try:
|
||||
rec = get_active_recruit(order.OrderID)
|
||||
if rec and rec.status == TeamRecruit.STATUS_RECRUITING:
|
||||
lock_recruit(rec.id, actor_uid='system', reason='merchant_settle_force_lock')
|
||||
team_done = settle_team_or_legacy(order, set_idle_leader=True)
|
||||
except Exception as e:
|
||||
logger.error('商家结单组队分账失败 %s: %s', dingdan_id, e)
|
||||
if TeamSettleLedger.query.filter(order_id=dingdan_id).exists() or get_active_recruit(dingdan_id):
|
||||
return Response({
|
||||
'code': 8,
|
||||
'msg': f'组队分账失败,已阻止全额打给队长: {e}',
|
||||
'data': None
|
||||
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
if not team_done:
|
||||
if get_active_recruit(order.OrderID):
|
||||
return Response({
|
||||
'code': 8,
|
||||
'msg': '存在有效组队但分账未完成,已阻止全额打给队长',
|
||||
'data': None
|
||||
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
credit_dashou_order_settle(
|
||||
order=order,
|
||||
dashou_profile=dashou,
|
||||
user_id=jiedan_dashou_id,
|
||||
amount=dashou_fencheng,
|
||||
)
|
||||
|
||||
# 更新商家成交单量
|
||||
UserShangjia.query.filter(id=shangjia.id).update(
|
||||
|
||||
Reference in New Issue
Block a user