fix: 微信支付入账补记 + 财务按俱乐部分组

This commit is contained in:
XingQue
2026-06-24 21:10:55 +08:00
parent 0827da594c
commit a6068f7e2b
7 changed files with 240 additions and 35 deletions

View File

@@ -205,9 +205,16 @@ class WechatPayNotifyView(APIView):
logger.info(f"订单当前状态: {dingdan.Status}")
# 幂等处理只有状态为9未支付才处理已处理则跳过
# 幂等:已支付则补试收支记账(防止首次入账失败后再也无法统计)
if dingdan.Status != 9:
logger.info(f"订单 {out_trade_no} 已处理过,状态={dingdan.Status}跳过")
logger.info(f"订单 {out_trade_no} 已处理过,状态={dingdan.Status}补试收支记账")
try:
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
repair_wechat_income_if_missing(
dingdan.Amount, getattr(dingdan, 'ClubID', None), biz_ref=f'order:{out_trade_no}',
)
except Exception as e:
logger.error(f'订单补记收支失败 {out_trade_no}: {e}', exc_info=True)
return
# 保存微信交易号
@@ -309,8 +316,8 @@ class WechatPayNotifyView(APIView):
# 更新收支记录(总累计);统计失败不得回滚订单支付
try:
from jituan.services.szjilu_accounting import record_wechat_income_once
record_wechat_income_once(
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
repair_wechat_income_if_missing(
dingdan.Amount, getattr(dingdan, 'ClubID', None), biz_ref=f'order:{out_trade_no}',
)
except Exception as e:
@@ -498,7 +505,15 @@ class PaymentVerifyView(APIView):
# 重新锁定订单,防止并发更新
dingdan = Order.query.select_for_update().get(pk=dingdan.pk)
if dingdan.Status != 9:
# 订单状态已被其他进程更新,直接返回(幂等)
try:
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
repair_wechat_income_if_missing(
dingdan.Amount,
getattr(dingdan, 'ClubID', None),
biz_ref=f'order:{dingdan.OrderID}',
)
except Exception as e:
logger.error(f'订单复查补记收支失败 {dingdan.OrderID}: {e}', exc_info=True)
return
# 更新订单状态
@@ -571,10 +586,9 @@ class PaymentVerifyView(APIView):
# =============================================
# 更新收支记录
try:
from jituan.services.szjilu_accounting import record_wechat_income_once
record_wechat_income_once(
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
repair_wechat_income_if_missing(
dingdan.Amount,
getattr(dingdan, 'ClubID', None),
biz_ref=f'order:{dingdan.OrderID}',