Skip to content

lainXXX/rem-market

Repository files navigation

Java 8 Spring Boot 2.7.12 MyBatis-Plus 3.5.7 MySQL 8.0+ Redis 6.2 RabbitMQ Apache Dubbo 3.0.9 Nacos 2.1.0 XXL-Job 2.4.1 ZooKeeper License MIT

🎰 Rem Market

基于 DDD 领域驱动设计的营销中台系统
抽奖策略 · 活动引擎 · 积分体系 · 行为返利 · 规则决策树 · 动态配置中心


📋 项目简介

Rem Market 是一个基于 DDD(领域驱动设计) 架构的营销中台,对外提供 抽奖活动引擎 能力。用户可通过签到获取抽奖次数、消耗积分兑换 SKU 商品、参与抽奖活动赢取奖品。

项目与 Small Pay Mall 构成完整电商闭环:商城负责支付交易,本系统负责营销获客,双方通过 Dubbo RPC 打通拼团流程。

🎯 核心业务链路

每日签到 → 获得积分+抽奖次数 → 浏览活动商品 → 兑换抽奖配额 → 执行抽奖 → 规则验证 → 出奖 → 发放
                              ↑                              │
                         积分兑换                         中奖/未中
                              │                              │
                              └── 消耗积分 ─────────── 积分退回 ──┘

✨ 功能特性

🎲 抽奖引擎

  • 双算法策略装配:概率范围小时用 O(1) 直接索引,范围大时用 O(logN) 二分查找
  • 责任链前置过滤:黑名单拦截 → 权重策略 → 默认抽奖,三层链路依次放行
  • 决策树后置处理:抽奖结果经过决策树规则引擎,支持锁定解锁、库存校验、兜底奖品路由
  • 奖品库存管理:Redis 阻塞队列异步扣减库存 + XXL-Job 定时同步数据库

📅 行为返利

  • 每日签到返利:签到同时获得抽奖配额和积分奖励(双重返利)
  • 防重复机制:基于业务 ID 幂等拦截
  • 可配置返利策略:支持组合不同返利类型(SKU + 积分)

💰 积分体系

  • 用户积分账户:管理积分总额与可用余额
  • 积分流水:正向(返利获得)和逆向(兑换消耗)完整记录
  • 积分兑换商品:消耗积分兑换活动 SKU,获得抽奖配额

🧠 规则引擎

  • 前置规则链rule_blacklistrule_weightdefault
  • 后置决策树rule_lockrule_stockrule_luck_award
  • 动态权重:根据用户累积积分匹配不同奖品配置
  • 可扩展规则模型:策略表支持挂载多种规则组合

⚙️ 动态配置中心

  • ZooKeeper 实时监听:配置变更秒级生效,无需重启
  • @DCCValue 注解注入:标有注解的字段自动同步
  • 降级开关:支持按需关闭抽奖活动(应急降级)
  • 限流熔断:Redisson 令牌桶限流 + Hystrix 超时熔断

📨 可靠消息

  • Task 表模式:本地事务写任务表,异步任务扫描投递 RabbitMQ
  • 四种业务消息:发奖、返利、积分调整、SKU 库存归零
  • 分布式锁:Redisson RLock 防止任务重复执行

📊 监控运维

  • XXL-Job 分布式调度:库存同步、消息投递
  • Prometheus + Grafana:生产环境指标监控
  • Nacos 服务注册:Dubbo 服务发现与治理

🏗️ 技术栈

类别 技术 用途
框架 Spring Boot 2.7.12 应用框架
语言 Java 8 开发语言
ORM MyBatis-Plus 3.5.7 数据库 ORM
数据库 MySQL 8.0+ 数据存储(2 库 4 表分片)
缓存 Redis 6.2 (Redisson 3.26) 缓存 / 队列 / 分布式锁 / 限流
消息队列 RabbitMQ 异步事件驱动
RPC Apache Dubbo 3.0.9 服务间调用
注册中心 Nacos 2.1.0 服务发现
配置中心 ZooKeeper (Curator) 动态配置
调度任务 XXL-Job 2.4.1 分布式定时任务
限流熔断 Redisson + Hystrix 接口限流 / 超时熔断
设计模式 责任链 / 策略 / 模板 / 工厂 / 决策树 业务解耦

🧱 项目结构(DDD 分层架构)

rem-market/
├── market-types/                 # 基础类型层 — 常量、枚举、注解、事件基类
│   ├── annotations/               # @DCCValue, @RateLimiterAccessInterceptor
│   ├── common/                    # 常量、ResponseCode
│   ├── enums/                     # 业务枚举
│   ├── event/                     # BaseEvent 抽象
│   └── exception/                 # AppException
│
├── market-api/                   # RPC 服务契约(Dubbo 接口 + DTO)
│   ├── IRaffleActivityService     # 抽奖活动服务
│   ├── IRaffleStrategyService     # 抽奖策略服务
│   ├── IDCCService                # 动态配置服务
│   └── dto/                       # 请求/响应 DTO
│
├── market-domain/                # 领域层 — 核心业务逻辑
│   ├── strategy/                  # 抽奖策略(装配→抽奖→规则链→决策树)
│   ├── activity/                  # 活动引擎(配额管理、SKU兑换、活动装配)
│   ├── award/                     # 奖品发放(策略分发)
│   ├── credit/                    # 积分体系(账户、流水、交易)
│   ├── rebate/                    # 行为返利(签到返利)
│   └── task/                      # 异步任务服务
│
├── market-infrastructure/        # 基础设施层 — 持久化 + 消息集成
│   ├── adapter/repository/        # 仓储实现(DAO 转换 + 缓存)
│   ├── dao/                       # MyBatis-Plus 实体 + Mapper + Service
│   └── event/                     # RabbitMQ 事件发布
│
├── market-trigger/               # 触发层 — HTTP + RPC + MQ + 定时任务
│   ├── http/                      # REST 控制器(同时暴露为 Dubbo 服务)
│   ├── job/                       # XXL-Job 定时任务
│   └── listener/                  # RabbitMQ 消息消费者
│
└── market-app/                   # 应用层 — Spring Boot 入口 + 全局配置
    ├── Application.java           # 启动类
    ├── config/                    # Redis/ZK/线程池/XXL-Job 配置
    └── aop/                       # 限流切面

分层依赖关系

market-app (启动层)
    ↓
market-trigger (HTTP/RPC/MQ)
    ↓           ↓
market-domain  market-infrastructure
    ↓               ↓
market-types     market-api (对外契约)

🚀 快速开始

前置要求

环境 版本要求 备注
JDK 8+ 推荐 JDK 8
Maven 3.6+ 构建工具
MySQL 8.0+ 数据库
Redis 6.2+ 缓存/队列
RabbitMQ 任意版本 异步消息
Nacos 2.1.0 注册中心
ZooKeeper 3.7+ 配置中心
XXL-Job 2.4.1 调度中心

1️⃣ 克隆项目

git clone https://github.com/lainXXX/rem-market.git
cd rem-market

2️⃣ 初始化数据库

执行 docs/sql/ 目录下的 SQL 脚本:

# 建库建表(big_market 数据库)
mysql -u root -p < docs/sql/2025-01-20-credit-case.sql

# 可选:Nacos 配置、XXL-Job 表
mysql -u root -p < docs/sql/nacos-config.sql
mysql -u root -p < docs/sql/xxl-job.sql

3️⃣ 启动基础设施

docker-compose -f docs/docker-compose-environment.yml up -d

4️⃣ 修改配置

编辑 market-app/src/main/resources/application-dev.yml,配置:

  • MySQL 数据库连接
  • Redis 连接
  • RabbitMQ 连接
  • Nacos 注册中心地址
  • ZooKeeper 连接串
  • XXL-Job 调度中心地址

5️⃣ 启动应用

mvn clean package -DskipTests
mvn spring-boot:run -pl market-app

📡 API 接口

抽奖策略

方法 路径 说明
GET /v1/raffle/strategy/assemble 预热装配策略数据到 Redis
POST /v1/raffle/strategy/query_raffle_strategy_rule_weight 查询策略权重配置
POST /v1/raffle/strategy/display_award 展示活动奖品列表(含解锁状态)
POST /v1/raffle/strategy/random_raffle 执行随机抽奖

抽奖活动

方法 路径 说明
GET /v1/raffle/activity/armory 预热活动 + 策略数据
POST /v1/raffle/activity/draw 执行活动抽奖(限流 + 熔断)
POST /v1/raffle/activity/calendar_sign_rebate 日历签到返利
POST /v1/raffle/activity/is_calendar_sign_rebate 查询今日是否已签到
POST /v1/raffle/activity/query_user_activity_account 查询用户活动账户
POST /v1/raffle/activity/credit_exchange 积分兑换 SKU 商品
POST /v1/raffle/activity/query_user_credit 查询用户积分余额
POST /v1/raffle/activity/query_sku_product_list_by_activity_id 查询活动 SKU 商品列表

动态配置

方法 路径 说明
GET /v1/raffle/dcc/update_config 更新 ZooKeeper 动态配置

🗄️ 核心数据库表

表名 说明
strategy 抽奖策略定义
strategy_award 策略奖品配置(概率、库存、规则)
raffle_activity 活动定义(时间范围、关联策略)
raffle_activity_count 活动次数模板(日/月/总次数上限)
raffle_activity_sku SKU 商品(兑换后获得抽奖配额)
raffle_activity_account 用户活动账户(总/日/月剩余次数)
raffle_activity_order 活动订单(积分支付/返利)
rule 前置规则(黑名单、权重)
rule_tree / rule_tree_node / rule_tree_node_line 后置决策树定义
user_credit_account / user_credit_order 积分账户与流水
user_award_record 用户中奖记录
user_behavior_rebate_order 行为返利订单
daily_behavior_rebate 每日返利配置

🔧 DDD & 设计模式实践

模式 使用场景
责任链 抽奖前置规则过滤(黑名单 → 权重 → 默认)
决策树 抽奖后置规则处理(锁定 → 库存 → 兜底奖品)
策略模式 奖品发放(随机积分 / 商品 / 接口调用)、抽奖算法(O(1)/O(logN))、积分交易策略
模板方法 活动参与抽象、配额下单抽象
工厂模式 责任链工厂、决策树工厂、交易策略工厂
仓储模式 领域层与基础设施层解耦

📄 License

MIT License

Copyright (c) 2024-2025


Rem Market — 基于 DDD 的营销中台,为电商提供抽奖与增长能力
如果这个项目对你有帮助,欢迎 ⭐ Star 支持!

About

基于 DDD 领域驱动设计的营销中台系统 | 抽奖策略 · 活动引擎 · 积分体系 · 行为返利 · 规则决策树 · ▎ 动态配置中心

Resources

License

Stars

2 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors