From c3bab3564a90f753285a45cdeb17f164fc15f357 Mon Sep 17 00:00:00 2001 From: XingQue Date: Sun, 12 Jul 2026 13:15:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=9B=BA=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E8=A7=A3=E5=86=BB=EF=BC=9A=E6=A0=A1=E9=AA=8C=E8=90=BD=E5=BA=93?= =?UTF-8?q?=E5=B9=B6=E8=BF=94=E5=9B=9E=E4=BD=99=E9=A2=9D/=E5=86=BB?= =?UTF-8?q?=E7=BB=93=E6=B1=A0=E5=8F=98=E5=8A=A8=E6=98=8E=E7=BB=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 解冻接口返回 unfreeze_result,便于后台核对池→余额是否真正写回。 Co-authored-by: Cursor --- houtai/dongjie_views.py | 12 ++++++++++-- yonghu/freeze_service.py | 28 ++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/houtai/dongjie_views.py b/houtai/dongjie_views.py index 3ea5890..0ed189a 100644 --- a/houtai/dongjie_views.py +++ b/houtai/dongjie_views.py @@ -77,12 +77,20 @@ class DongjieUserConfigView(APIView): return Response({'code': 400, 'msg': '请填写解冻金额'}) try: with transaction.atomic(): - new_balance = admin_unfreeze_balance( + result = admin_unfreeze_balance( user_main, leixing, jine, operator_id=username, beizhu=beizhu, ) info = get_user_freeze_info(user_main, leixing) - info['balance'] = str(new_balance) + info['balance'] = str(result['balance_after']) + info['dongjie_chi'] = str(result['dongjie_chi_after']) + info['unfreeze_result'] = { + 'balance_before': str(result['balance_before']), + 'balance_after': str(result['balance_after']), + 'dongjie_chi_before': str(result['dongjie_chi_before']), + 'dongjie_chi_after': str(result['dongjie_chi_after']), + 'unfreeze_jine': str(result['unfreeze_jine']), + } return Response({'code': 0, 'msg': '解冻成功', 'data': info}) except ValueError as e: return Response({'code': 400, 'msg': str(e)}) diff --git a/yonghu/freeze_service.py b/yonghu/freeze_service.py index 1ecc95c..09d99cf 100644 --- a/yonghu/freeze_service.py +++ b/yonghu/freeze_service.py @@ -313,8 +313,8 @@ def apply_balance_freeze(user_main: UserMain, leixing: int, apply_jine) -> Apply ) -def admin_unfreeze_balance(user_main: UserMain, leixing: int, jine, operator_id='', beizhu='') -> decimal.Decimal: - """管理员解冻:冻结池 → 可提现余额。""" +def admin_unfreeze_balance(user_main: UserMain, leixing: int, jine, operator_id='', beizhu='') -> dict: + """管理员解冻:冻结池 → 可提现余额。返回变动前后快照。""" leixing = int(leixing) jine = _q(jine) if jine <= 0: @@ -334,12 +334,32 @@ def admin_unfreeze_balance(user_main: UserMain, leixing: int, jine, operator_id= if hasattr(profile, 'update_time'): update_fields.append('update_time') profile.save(update_fields=update_fields) + profile.refresh_from_db() + + actual_balance = _q(getattr(profile, meta['balance'])) + actual_pool = _q(getattr(profile, meta['pool'])) + if actual_balance != new_balance or actual_pool != new_pool: + logger.error( + '解冻落库不一致 yonghuid=%s leixing=%s expect_balance=%s actual=%s expect_pool=%s actual=%s', + user_main.yonghuid, leixing, new_balance, actual_balance, new_pool, actual_pool, + ) + raise ValueError('解冻写入失败,请重试或联系技术') _write_freeze_log( - user_main.yonghuid, leixing, jine, pool, new_pool, + user_main.yonghuid, leixing, jine, pool, actual_pool, TixianDongjieJilu.CAOZUO_UNFREEZE, operator_id=operator_id, beizhu=beizhu, ) - return new_balance + logger.info( + '管理员解冻 yonghuid=%s leixing=%s jine=%s balance %s→%s pool %s→%s operator=%s', + user_main.yonghuid, leixing, jine, balance, actual_balance, pool, actual_pool, operator_id, + ) + return { + 'balance_before': balance, + 'balance_after': actual_balance, + 'dongjie_chi_before': pool, + 'dongjie_chi_after': actual_pool, + 'unfreeze_jine': jine, + } def get_user_freeze_info(user_main: UserMain, leixing: int) -> dict: