Skip to content

Repository files navigation

qucemarket — 团购营销平台 + 支付商城

基于 DDD 分层架构的拼团营销中台 + 支付商城一体仓库,提供营销试算、拼团锁单、支付结算、拼团退单、回调通知的完整闭环,营销侧规则通过自研责任链规则引擎扩展。

仓库包含两个独立可部署的工程:

工程 说明 端口
qucemarket 团购营销平台(6 个 Maven 模块) 8091
s-pay-mall-ddd-market 支付商城(6 个 Maven 模块,作为对接商户端) 8080

根聚合 pom.xml 一次性聚合 7 个模块(6 个平台模块 + 支付商城聚合工程),仓库根目录 mvn clean install 即可全量构建。

目录

架构总览

┌─────────────────── 用户 ───────────────────┐
│  微信扫码登录 / 下单 / 支付宝支付            │
└───────────────────┬────────────────────────┘
                    ▼
┌────────────────────────────────────────────────────────────────────┐
│  支付商城 s-pay-mall-ddd-market (8080)                              │
│  HTTP: 登录 / 下单 / 支付 / 拼团回调接收                             │
│  MQ:   消费订单支付成功、组队成功消息                                 │
│  定时: 超时关单、未支付订单通知                                      │
└───────┬──────────────────────────────────┬─────────────────────────┘
        │ Retrofit2 锁单/结算                 │ HTTP 回调 + MQ
        ▼                                   ▼
┌────────────────────────────────────────────────────────────────────┐
│  营销平台 qucemarket (8091)                                          │
│  HTTP: 锁单 / 结算 / 退单 / 活动索引(限流)/ DCC 动态配置              │
│  领域: 营销试算(策略树)│ 交易(责任链 + 策略)│ 人群标签                 │
│  MQ:   发布组队成功 / 退单消息                                        │
│  定时: 超时未支付自动退款、通知重试补偿                               │
└────────────────────────────────────────────────────────────────────┘

项目结构

qucemarket/
├── qucemarket-api            # 对外接口层 + DTO
├── qucemarket-app            # 营销平台启动层(启动类、配置)
├── qucemarket-domain         # 领域层(活动试算、交易锁单/结算/退单、人群标签)
├── qucemarket-infrastructure # 基础设施层(DAO、仓储、Redis、DCC、回调网关、限流 AOP)
├── qucemarket-trigger        # 触发层(HTTP 接口、MQ 监听、定时任务)
├── qucemarket-types          # 通用类型 + 自研框架(责任链/策略树/DCC/限流)
├── s-pay-mall-ddd-market/    # 支付商城(嵌套聚合工程,6 个模块)
│   ├── s-pay-mall-ddd-api / -app / -domain / -infrastructure / -trigger / -types
└── docs                      # 部署脚本、SQL、UI

自研框架(com.quce.framework)

qucemarket-types 模块内置自研框架组件,不依赖任何外部责任链/规则引擎组件:

组件 说明
责任链 model1 com.quce.framework.link.model1 节点持有下一节点引用(appendNext 链尾追加)
责任链 model2 com.quce.framework.link.model2 LinkArmory 组装 + 路由上下文,ILogicHandler.next() 自动路由到下一节点
策略树 com.quce.framework.tree AbstractMultiThreadStrategyRouter 模板方法路由,支持多线程数据预加载
动态配置 DCC com.quce.framework.dcc @DCCValue 注解注入 + Redis 主题动态更新(/api/v1/gbm/dcc/update_config)
限流 com.quce.framework.ratelimiter @RateLimiterAccessInterceptor 注解 + Redisson 令牌桶限流:超限走降级方法,连续超限进入黑名单

限流注解定义在 types 模块,拦截器实现(RateLimiterInterceptor,基于 RRateLimiter)在 infrastructure 模块,按 @RateLimiterAccessInterceptor(key = "userId", ...) 维度限流。

核心业务链路

  • 营销试算:商品 + 活动 → 折扣试算 → 人群标签限定 → 返回优惠价(策略树:Root → Switch → Market → Tag → End)
  • 锁单:用户下单携带活动ID → 责任链校验(黑名单/活动可用性/参与次数/队伍库存)→ 锁定营销优惠
  • 结算:支付成功 → 责任链校验(渠道黑名单/外部单号/有效时间/队伍状态/折扣上限)→ 组队记账 → 回调通知商户
  • 退单:拼团失败/超时未支付 → 策略处理(未支付退款/已支付退款/已组队退款)→ 回调通知
  • 通知补偿:回调失败进入 NotifyTask 定时任务重试,不丢单

规则引擎(责任链)

规则通过责任链编排,新增规则只需实现过滤器并注入工厂即可,无需改动主流程。

锁单链:黑名单拦截 → 活动可用性 → 用户参与次数 → 队伍库存占用

结算链:渠道黑名单 → 外部单号 → 有效时间 → 队伍状态 → 折扣上限 → 结束

退单策略:未支付退款 / 已支付退款 / 已组队退款三种策略按订单状态分发。

新增规则(本仓库扩展)

规则 责任链 说明 错误码
用户黑名单拦截 锁单链(首位) 基于人群标签 RQ_QUCE_BLACKLIST 的 Redis BitSet 校验,黑名单用户直接拦截 E0107
拼团队伍状态校验 结算链 仅「拼单中」队伍允许结算,拦截已完结/已失败队伍的重复记账 E0109
折扣力度上限校验 结算链 实付折扣率不得超过配置上限(默认 8 折),防资损 E0108

黑名单人群标签可通过 TagService.execTagBatchJob 批次任务写入;折扣上限可通过 DCC 配置中心动态调整(discountCap,默认 0.8)。

对外接口

营销平台(8091,前缀 /api/v1/gbm/*)

接口 说明
POST /api/v1/gbm/trade/lock_market_pay_order 拼团锁单
POST /api/v1/gbm/trade/settlement_market_pay_order 支付成功结算
POST /api/v1/gbm/trade/refund_market_pay_order 拼团退单
POST /api/v1/gbm/index/query_group_buy_market_config 活动配置查询(试算 + 进行中队伍 + 队伍统计,含限流保护)
GET /api/v1/gbm/dcc/update_config DCC 动态配置发布
POST /api/v1/test/group_buy_notify 模拟第三方回调(联调用)

支付商城(8080,前缀 /api/v1/*)

接口 说明
GET /api/v1/login/weixin_qrcode_ticket 微信扫码登录(生成二维码 ticket)
GET /api/v1/login/weixin_qrcode_ticket_scene 扫码登录(场景值版本)
GET /api/v1/login/check_login / check_login_scene 轮询确认登录状态
POST /api/v1/alipay/create_pay_order 创建支付单(下单 + 营销锁单)
POST /api/v1/alipay/alipay_notify_url 支付宝异步支付回调
POST /api/v1/alipay/group_buy_notify 接收营销平台拼团组队完成回调
GET/POST /api/v1/weixin/portal/receive 微信公众号消息接入(签名校验 + XML 收发)

消息拓扑(RabbitMQ)

交换机 group_buy_market_exchange(TOPIC),供平台发布、商城消费:

Routing Key 生产方 消费方 说明
topic.team_success 营销平台(组队完成) 商城 + 平台 组队成功通知,商城更新订单状态
topic.team_refund 营销平台(退单) 平台 退单通知,恢复队伍锁单库存

定时任务

工程 任务 周期 说明
营销平台 TimeoutRefundJob 每分钟 扫描超时未支付订单自动退款(Redisson 分布式锁防并发)
营销平台 GroupBuyNotifyJob 每日凌晨 扫描未通知回调重试补偿,保证不丢单
支付商城 TimeoutCloseOrderJob 每 30 分钟 超时订单关闭
支付商城 NoPayNotifyOrderJob 每 30 分钟 未支付订单催付通知

环境依赖

  • JDK 8、Maven 3.6+
  • MySQL(营销库:docs/dev-ops/mysql/sql/2-29-group_buy_market.sql;商城库:s-pay-mall-ddd-market/docs/dev-ops/mysql/sql/s-pay-mall-ddd-market.sql)
  • Redis(锁单库存、人群标签 BitSet、限流)
  • RabbitMQ(组队成功/退单消息、订单支付成功消息)
  • 微信公众号 + 支付宝沙箱(支付商城侧,配置见其 application-dev.yml)

快速启动

# 1. 初始化数据库
mysql -h <host> -u root -p < docs/dev-ops/mysql/sql/2-29-group_buy_market.sql
mysql -h <host> -u root -p < s-pay-mall-ddd-market/docs/dev-ops/mysql/sql/s-pay-mall-ddd-market.sql

# 2. 按需修改两个工程的 application-dev.yml(MySQL / Redis / RabbitMQ / 微信 / 支付宝)

# 3. 仓库根目录一次构建全部工程
mvn clean install -DskipTests

# 4. 启动营销平台(端口 8091)
java -jar qucemarket-app/target/qucemarket-app.jar --spring.profiles.active=dev

# 5. 启动支付商城(端口 8080)
java -jar s-pay-mall-ddd-market/s-pay-mall-ddd-app/target/s-pay-mall-ddd-app.jar --spring.profiles.active=dev

依赖中间件也可用 docs/dev-ops/docker-compose-*.yml 一键拉起(MySQL / Redis / RabbitMQ / Nginx / ELK / Grafana 等)。

对接流程

用户 → 支付商城(s-pay-mall-ddd-market)                  营销平台(qucemarket)
           │ 1.下单(携带活动ID + 回调地址)                      │
           │ ────────────────────────────────────────────────▶ │
           │ 2.营销锁单/试算(Retrofit2)                        │
           │ ◀──────────────────────────────────────────────── │
           │ 3.支付宝支付                                      │
           │ 4.支付成功 → 结算接口                             │
           │ ────────────────────────────────────────────────▶ │
           │ 5.拼团组队完成:HTTP 回调 + MQ(topic.team_success) │
           │ ◀──────────────────────────────────────────────── │
  • 支付商城通过 IGroupBuyMarketService(Retrofit2)调用平台锁单/结算接口,平台地址配置 app.config.group-buy-market.api-url
  • 平台组队完成通过 HTTP 回调(notifyConfigVO.notifyUrl)与 MQ(group_buy_market_exchange/topic.team_success)双通道通知支付商城
  • 详见 s-pay-mall-ddd-market/README.md

运维与可观测

  • 日志:Logstash 采集上报 ELK(docs/dev-ops/docker-compose-elk.yml)
  • 监控:Prometheus + Grafana(docs/dev-ops/docker-compose-grafana.ymldocs/dev-ops/prometheus)
  • 部署:docs/dev-ops/app/start.sh / stop.shdocs/dev-ops/docker-compose-app.yml
  • 版本发布:各里程碑配置快照见 docs/tag/v1.0 ~ v3.0

说明

  • 镜像地址 quce-studio/* 为占位,请按需替换为自己的镜像仓库。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages