From 2a99e2ea103f8dc8fd47814accfb611afd3c3f7e Mon Sep 17 00:00:00 2001 From: XingQue Date: Fri, 10 Jul 2026 01:45:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=9A=E5=91=98=E9=A6=96=E6=AC=A1?= =?UTF-8?q?=E5=85=85=E5=80=BC=E7=A7=AF=E5=88=86=E5=8A=A0=E6=BB=A110?= =?UTF-8?q?=E5=88=86=EF=BC=8C=E5=90=8E=E7=BB=AD=E5=85=85=E5=80=BC=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E5=8A=A0=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 体验会员原仅加5分且正式会员会重复加分;改为首次充值会员(任意类型)补满至10分,此后任意会员充值不再增加积分。 Co-authored-by: Cursor --- jituan/services/member_recharge.py | 34 ++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/jituan/services/member_recharge.py b/jituan/services/member_recharge.py index e244251..18f657b 100644 --- a/jituan/services/member_recharge.py +++ b/jituan/services/member_recharge.py @@ -6,7 +6,7 @@ - formal_cishu=1:duoci_fenhong 或 club 默认正式分成。 - formal_cishu>=2:仅 duoci_fenhong;无配置则不分。 - 体验单:固定 trial_guanshifc / trial_zuzhangfc;终身仅可购 1 次。 -- 积分:体验 +5,正式 +5(体验后)或直接至 10(未买过体验),封顶 10。 +- 积分:首次充值会员(体验/正式均可)加满至 10;此后任意会员充值不再加分。 - 履约(回调/轮询/余额)均二次校验体验资格;分红失败回滚事务。 财务:每笔成功履约必须 czjilu.zhuangtai=3 + 收支入账(record_wechat_income_once)。 @@ -50,8 +50,6 @@ MEMBER_FAILED_STATUS = 8 MEMBER_CANCELLED_STATUS = 2 ENTITLEMENT_REVOKED_MARKER = '权益已撤销' MEMBER_JIFEN_CAP = 10 -MEMBER_JIFEN_TRIAL_GRANT = 5 -MEMBER_JIFEN_FORMAL_GRANT = 5 class MemberRechargeError(Exception): @@ -145,6 +143,19 @@ def has_formal_member_purchase(yonghuid, huiyuan_id, club_id, exclude_dingdan_id return False +def has_any_prior_paid_member_recharge(yonghuid, exclude_dingdan_id=None): + """是否已有成功支付的会员充值单(任意会员类型;不含后台赠送 jine=0)。""" + qs = Czjilu.query.filter( + yonghuid=yonghuid, + leixing=MEMBER_LEIXING, + zhuangtai=MEMBER_PAID_STATUS, + jine__gt=0, + ) + if exclude_dingdan_id: + qs = qs.exclude(dingdan_id=exclude_dingdan_id) + return qs.exists() + + def _sync_trial_usage_flags(yonghuid, huiyuan_id, club_id): """根据 czjilu 历史回填 huiyuangoumai.has_used_trial。""" goumai = Huiyuangoumai.query.filter( @@ -581,7 +592,7 @@ def _apply_member_fenhong(order, huiyuan, formal_cishu=None, trial_guanshi_fc=No def _apply_member_purchase_jifen(yonghuid, is_trial, huiyuan_id, club_id, current_dingdan_id=None): """ - 会员购积分:体验 +5,正式 +5(体验后)或直接到 10(未买过体验),封顶 10。 + 会员购积分:首次充值会员(体验/正式/任意类型)加满至 10;此后不再加分。 """ try: dashou = UserDashou.query.get(user__UserUID=yonghuid) @@ -593,17 +604,14 @@ def _apply_member_purchase_jifen(yonghuid, is_trial, huiyuan_id, club_id, curren if current >= MEMBER_JIFEN_CAP: return current - if is_trial: - delta = min(MEMBER_JIFEN_TRIAL_GRANT, MEMBER_JIFEN_CAP - current) - else: - had_trial = has_paid_trial_purchase( - yonghuid, huiyuan_id, club_id, exclude_dingdan_id=current_dingdan_id, + if has_any_prior_paid_member_recharge(yonghuid, exclude_dingdan_id=current_dingdan_id): + logger.info( + '会员购积分跳过(非首次充值) yonghu=%s is_trial=%s huiyuan=%s jifen=%s', + yonghuid, is_trial, huiyuan_id, current, ) - if had_trial: - delta = min(MEMBER_JIFEN_FORMAL_GRANT, MEMBER_JIFEN_CAP - current) - else: - delta = MEMBER_JIFEN_CAP - current + return current + delta = MEMBER_JIFEN_CAP - current if delta <= 0: return current