原来我们常见的充促活动是这样的!从业务设计思考与记录带你解析

充值促销的背后

1、背景

在绝大数游戏产品中,我们会看到各种充值赠送的类似活动,例如王者荣耀。在其他类产品中也会存在。

需求目的主要是为了保证产品流水,带来产品收入,与此同时给予用户其他满足感。

通过充值获得其他奖励,比如充值后,会有积分奖励。那么这部分积分可以兑换一些其他商品。

2、充值促销的业务分析

这里只对业务简单的分析:

  1. 在充值界面上,凸显充值赠送逻辑;
  2. 用户充值后会有对应充值奖励到帐;
  3. 充值策略包括每次充值,每天首次,累计充值等;
  4. 充值赠送不限于积分,快乐币,开心币等。
  5. 保证充值策略和赠送的可扩展性

图示1 (充值界面:Pinta不太会用,只能这样了)

原来我们常见的充促活动是这样的!从业务设计思考与记录带你解析

 

3、方案规划

(1)主要方向

1.促销业务依赖与充值支付业务,最好不要影响原本充值业务性能

​ 2.后台可管理充值策略,便于运营运营策略

​ 3.充值后要保证,不可多送等情况

(2)项目架构梳理:

本业务主要牵涉两个服务:1,支付系统 2,主要的各个业务系统。

图示2(整个支付架构与主要业务流程)

原来我们常见的充促活动是这样的!从业务设计思考与记录带你解析

 

图示3

原来我们常见的充促活动是这样的!从业务设计思考与记录带你解析

 

4、解决方案

使用责任链模式来衔接普通充值和充值赠送策略业务,使用策略模式来判定赠送,用户充值完后异步判断是否满足促销条件,可以使用mq来解偶相关异步操作,插入充值促销获得记录,插入对应赠送的流水表(比如赠送快乐币)

业务系统接收到支付系统成功后,通过责任链来衔接普通充值和充值促销活动,当执行到促销业务逻辑时,通过获取在此之间运行的充值促销活动来判断执行充值的逻辑有哪些,执行逻辑中会有其他赠送逻辑,依旧使用策略模式去判断调用

图示3(划分逻辑),画图工具额)

原来我们常见的充促活动是这样的!从业务设计思考与记录带你解析

 

5、数据库表的逻辑设计

原来我们常见的充促活动是这样的!从业务设计思考与记录带你解析

 

原来我们常见的充促活动是这样的!从业务设计思考与记录带你解析

 

6、相关code

ps:记录一下( 害怕健忘)

/**
 * @author 易成贤
 * @Description 责任链模式下
 **/
@Slf4j
public abstract class PayCoin {

    /**
     * 记录下一条链子
     */
    private PayCoin next;

    /**
     * 适配业务币
     * @param payNoticeDto
     * @return
     */
    private final void handlerCoin(PayNoticeDto payNoticeDto) {
      
       	//todo 具体实现
       	
        //如果有下一条链子就继续进行处理
        if (Objects.nonNull(next)) {
            coinCount += next.handlerCoin(payNoticeDto);
        }
 
    }

    /**
     * 设置下一条链子
     */
    protected void setNext(PayCoin payHandler) {
        this.next = payHandler;
    }
}
/**
 * @author 易成贤
 * @Description TODO 上下文策略
 **/
@Service
public class RewardPayContext {

    @Resource
    private final Map<String, RewardPayStrategy> strategyMap = new ConcurrentHashMap<>();

    /**
     *
     * @param map
     */
    public RewardPayContext(Map<String, RewardPayStrategy> map){
        this.strategyMap.clear();
        map.forEach((k,v)->this.strategyMap.put(k,v));
    }

    /**
     * 获取策略
     * @param strategyId 策略对应的id
     * @return 对应的策略
     */
    public RewardPayStrategy getStrategy(String strategyId){
        return strategyMap.get(strategyId);
    }

}
/**
 * @author 易成贤
 * @Description TODO 策略 模式实现
 **/
public interface RewardPayStrategy {
    /**
     * 一系列操作
     */
   void todoString(CommonUserInfoDo commonUserInfoDo, PayNoticeDto payNoticeDto);
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值