fix: 微信支付入账补记 + 财务按俱乐部分组
This commit is contained in:
@@ -35,6 +35,15 @@ def fulfill_yajin_recharge(dingdan_id, paid_amount_yuan=None):
|
||||
if order.leixing != 2:
|
||||
raise CzjiluFulfillError('订单类型不是押金', 'type_error')
|
||||
if order.zhuangtai != 9:
|
||||
try:
|
||||
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
|
||||
repair_wechat_income_if_missing(
|
||||
Decimal(str(order.jine)),
|
||||
getattr(order, 'club_id', None) or CLUB_ID_DEFAULT,
|
||||
biz_ref=f'cz:{dingdan_id}',
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.error('押金补记收支失败 dingdan=%s: %s', dingdan_id, exc, exc_info=True)
|
||||
return {'already_done': True, 'dingdan_id': dingdan_id, 'zhuangtai': order.zhuangtai}
|
||||
|
||||
amount = Decimal(str(order.jine))
|
||||
@@ -56,8 +65,8 @@ def fulfill_yajin_recharge(dingdan_id, paid_amount_yuan=None):
|
||||
|
||||
club_id = getattr(order, 'club_id', None) or CLUB_ID_DEFAULT
|
||||
try:
|
||||
from jituan.services.szjilu_accounting import record_wechat_income_once
|
||||
record_wechat_income_once(amount, club_id, biz_ref=f'cz:{dingdan_id}')
|
||||
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
|
||||
repair_wechat_income_if_missing(amount, club_id, biz_ref=f'cz:{dingdan_id}')
|
||||
except Exception as exc:
|
||||
logger.error('押金收支统计失败 dingdan=%s: %s', dingdan_id, exc, exc_info=True)
|
||||
|
||||
@@ -116,6 +125,15 @@ def fulfill_jifen_recharge(dingdan_id, paid_amount_yuan=None):
|
||||
if order.leixing != 3:
|
||||
raise CzjiluFulfillError('订单类型不是积分', 'type_error')
|
||||
if order.zhuangtai != 9:
|
||||
try:
|
||||
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
|
||||
repair_wechat_income_if_missing(
|
||||
Decimal(str(order.jine)),
|
||||
getattr(order, 'club_id', None) or CLUB_ID_DEFAULT,
|
||||
biz_ref=f'cz:{dingdan_id}',
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.error('积分补记收支失败 dingdan=%s: %s', dingdan_id, exc, exc_info=True)
|
||||
return {'already_done': True, 'dingdan_id': dingdan_id, 'zhuangtai': order.zhuangtai}
|
||||
|
||||
amount = Decimal(str(order.jine))
|
||||
@@ -140,8 +158,8 @@ def fulfill_jifen_recharge(dingdan_id, paid_amount_yuan=None):
|
||||
|
||||
club_id = getattr(order, 'club_id', None) or CLUB_ID_DEFAULT
|
||||
try:
|
||||
from jituan.services.szjilu_accounting import record_wechat_income_once
|
||||
record_wechat_income_once(amount, club_id, biz_ref=f'cz:{dingdan_id}')
|
||||
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
|
||||
repair_wechat_income_if_missing(amount, club_id, biz_ref=f'cz:{dingdan_id}')
|
||||
except Exception as exc:
|
||||
logger.error('积分收支统计失败 dingdan=%s: %s', dingdan_id, exc, exc_info=True)
|
||||
|
||||
@@ -162,6 +180,15 @@ def confirm_czjilu_paid(dingdan_id, yonghuid, expected_leixing):
|
||||
raise CzjiluFulfillError('订单类型不匹配', 'type_error')
|
||||
|
||||
if order.zhuangtai == 3:
|
||||
try:
|
||||
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
|
||||
repair_wechat_income_if_missing(
|
||||
Decimal(str(order.jine)),
|
||||
getattr(order, 'club_id', None) or CLUB_ID_DEFAULT,
|
||||
biz_ref=f'cz:{dingdan_id}',
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.error('充值单补记收支失败 dingdan=%s: %s', dingdan_id, exc, exc_info=True)
|
||||
return {'already_done': True, 'zhuangtai': 3}
|
||||
|
||||
if order.zhuangtai != 9:
|
||||
|
||||
@@ -335,6 +335,15 @@ def fulfill_member_recharge(dingdan_id, paid_amount_yuan=None, source='callback'
|
||||
'会员订单已处理,跳过履约 dingdan=%s zhuangtai=%s source=%s',
|
||||
dingdan_id, order.zhuangtai, source,
|
||||
)
|
||||
try:
|
||||
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
|
||||
repair_wechat_income_if_missing(
|
||||
Decimal(str(order.jine)),
|
||||
getattr(order, 'club_id', None) or CLUB_ID_DEFAULT,
|
||||
biz_ref=f'cz:{dingdan_id}',
|
||||
)
|
||||
except Exception as exc:
|
||||
logger.error('会员补记收支失败 dingdan=%s: %s', dingdan_id, exc, exc_info=True)
|
||||
return {
|
||||
'already_done': True,
|
||||
'dingdan_id': dingdan_id,
|
||||
@@ -380,8 +389,8 @@ def fulfill_member_recharge(dingdan_id, paid_amount_yuan=None, source='callback'
|
||||
|
||||
jine_decimal = Decimal(str(order.jine))
|
||||
try:
|
||||
from jituan.services.szjilu_accounting import record_wechat_income_once
|
||||
record_wechat_income_once(jine_decimal, club_id, biz_ref=f'cz:{dingdan_id}')
|
||||
from jituan.services.szjilu_accounting import repair_wechat_income_if_missing
|
||||
repair_wechat_income_if_missing(jine_decimal, club_id, biz_ref=f'cz:{dingdan_id}')
|
||||
except Exception as exc:
|
||||
logger.error('会员收支统计更新失败: %s', exc, exc_info=True)
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ def record_wechat_income_once(amount, club_id=None, biz_ref=None):
|
||||
"""
|
||||
微信入账:同一 biz_ref 只记一次 daily_income_stat + szjilu。
|
||||
返回 True=本次新入账;False=已记过(重复回调)。
|
||||
若 platform_income_log 表不可用,仍记入收入(与改造前一致,不能因幂等表故障丢统计)。
|
||||
幂等日志与日统计在同一事务内提交,避免「已支付但未入账」。
|
||||
"""
|
||||
ref = (biz_ref or '').strip()
|
||||
if not ref:
|
||||
@@ -75,6 +75,7 @@ def record_wechat_income_once(amount, club_id=None, biz_ref=None):
|
||||
club_id=cid,
|
||||
amount=jine,
|
||||
)
|
||||
_apply_income_stats(jine, cid)
|
||||
except IntegrityError:
|
||||
logger.info('平台入账已存在,跳过重复记账 biz_ref=%s', ref)
|
||||
return False
|
||||
@@ -87,24 +88,25 @@ def record_wechat_income_once(amount, club_id=None, biz_ref=None):
|
||||
return True
|
||||
except Exception as exc:
|
||||
logger.error(
|
||||
'platform_income_log 写入异常,仍记入收入 biz_ref=%s err=%s',
|
||||
'platform_income_log 入账异常,仍尝试记入收入 biz_ref=%s err=%s',
|
||||
ref, exc, exc_info=True,
|
||||
)
|
||||
_apply_income_stats(jine, cid)
|
||||
return True
|
||||
|
||||
try:
|
||||
_apply_income_stats(jine, cid)
|
||||
except Exception:
|
||||
try:
|
||||
PlatformIncomeLog.objects.filter(biz_ref=ref).delete()
|
||||
except Exception:
|
||||
pass
|
||||
raise
|
||||
logger.info('平台入账记账成功 biz_ref=%s club=%s amount=%s', ref, cid, jine)
|
||||
return True
|
||||
|
||||
|
||||
def repair_wechat_income_if_missing(amount, club_id=None, biz_ref=None):
|
||||
"""已支付订单/充值单重复回调时安全补记收支(幂等)。"""
|
||||
try:
|
||||
return record_wechat_income_once(amount, club_id, biz_ref)
|
||||
except Exception as exc:
|
||||
logger.error('补记收支失败 biz_ref=%s err=%s', biz_ref, exc, exc_info=True)
|
||||
return False
|
||||
|
||||
|
||||
def apply_szjilu_expense(amount, club_id=None):
|
||||
"""平台出款/支出:总收益减少,总支出、今日支出增加。"""
|
||||
jine = Decimal(str(amount))
|
||||
|
||||
Reference in New Issue
Block a user