fix: 微信支付入账补记 + 财务按俱乐部分组
This commit is contained in:
@@ -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}',
|
||||
|
||||
Reference in New Issue
Block a user