fix: 成交指标 ensure 遇唯一键冲突时复用已有行
回填并发插入 merchant_deal_stat/dashou_deal_stat 时不再因 Duplicate entry 中断。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -91,20 +91,31 @@ def _claim_event(club_id: str, event_key: str, event_type: str, order_id='', sub
|
|||||||
|
|
||||||
def _ensure_merchant(club_id, uid):
|
def _ensure_merchant(club_id, uid):
|
||||||
from jituan.models import MerchantDealStat
|
from jituan.models import MerchantDealStat
|
||||||
|
from django.db import IntegrityError
|
||||||
row = MerchantDealStat.query.filter(club_id=club_id, merchant_uid=uid).first()
|
row = MerchantDealStat.query.filter(club_id=club_id, merchant_uid=uid).first()
|
||||||
if not row:
|
if row:
|
||||||
|
return row
|
||||||
|
try:
|
||||||
row = MerchantDealStat(club_id=club_id, merchant_uid=uid)
|
row = MerchantDealStat(club_id=club_id, merchant_uid=uid)
|
||||||
row.save()
|
row.save()
|
||||||
return row
|
return row
|
||||||
|
except IntegrityError:
|
||||||
|
# 并发回填/记账时可能已有同 club+merchant 行,读回即可
|
||||||
|
return MerchantDealStat.query.filter(club_id=club_id, merchant_uid=uid).first()
|
||||||
|
|
||||||
|
|
||||||
def _ensure_dashou(club_id, uid):
|
def _ensure_dashou(club_id, uid):
|
||||||
from jituan.models import DashouDealStat
|
from jituan.models import DashouDealStat
|
||||||
|
from django.db import IntegrityError
|
||||||
row = DashouDealStat.query.filter(club_id=club_id, dashou_uid=uid).first()
|
row = DashouDealStat.query.filter(club_id=club_id, dashou_uid=uid).first()
|
||||||
if not row:
|
if row:
|
||||||
|
return row
|
||||||
|
try:
|
||||||
row = DashouDealStat(club_id=club_id, dashou_uid=uid)
|
row = DashouDealStat(club_id=club_id, dashou_uid=uid)
|
||||||
row.save()
|
row.save()
|
||||||
return row
|
return row
|
||||||
|
except IntegrityError:
|
||||||
|
return DashouDealStat.query.filter(club_id=club_id, dashou_uid=uid).first()
|
||||||
|
|
||||||
|
|
||||||
def _merchant_uid(order):
|
def _merchant_uid(order):
|
||||||
|
|||||||
Reference in New Issue
Block a user