fix: 会员首次充值积分加满10分,后续充值不再加分
体验会员原仅加5分且正式会员会重复加分;改为首次充值会员(任意类型)补满至10分,此后任意会员充值不再增加积分。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user