Files
youzan-datahub/docs/餐饮零售数据中台/implementation_plan.md

7.3 KiB
Raw Permalink Blame History

搭建 Spring Boot 有赞数据中台服务

基于已完成的设计文档和数据库 DDLAIMachineSystem/server/ 下搭建 Spring Boot 服务覆盖数据同步、洞察计算、API 接口三层。

全局蓝图5 Phase

Phase 内容 定时
Phase 1 订单同步 (trades.sold.getdwd_trade_order_detail) 同步层 每日 02:00
Phase 2 商品同步 + 客户同步 同步层 每日 02:30
Phase 3 库存流水 + 优惠券 + 退款同步 同步层 每日 03:00
Phase 4 RFM 计算、动销排名、购物篮分析、客群分层 洞察层 每日 04:00
Phase 5 REST API仪表盘接口、导出接口 接口层 实时

技术选型确认

  • Java 17 / Spring Boot 3.2.x
  • MyBatis-Plus 3.5.x (持久层)
  • Spring @Scheduled (定时任务)
  • RestTemplate (HTTP 调用有赞 API)
  • 有赞应用类型:自用型grant_type=silent,直接用 client_id + client_secret + kdt_id 获取 Token

项目目录结构

server/
├── pom.xml
└── src/main/
    ├── java/com/chuyishidai/datahub/
    │   ├── DataHubApplication.java
    │   ├── config/
    │   │   └── YouzanConfig.java             # 有赞配置 + RestTemplate Bean
    │   ├── entity/                           # MyBatis-Plus Entity对齐 DDL
    │   │   ├── TradeOrderDetail.java
    │   │   ├── TradeRefundDetail.java
    │   │   ├── ItemSku.java
    │   │   ├── CustomerInfo.java
    │   │   ├── OfflineStore.java
    │   │   ├── InventoryFlow.java
    │   │   └── CouponFlow.java
    │   ├── mapper/                           # MyBatis-Plus Mapper
    │   ├── service/
    │   │   ├── youzan/                       # 有赞 API 基础设施
    │   │   │   ├── YouzanTokenService.java   # Token 获取与缓存
    │   │   │   └── YouzanApiClient.java      # API 调用封装
    │   │   ├── sync/                         # Phase 1-3: 数据同步
    │   │   │   ├── TradeSyncService.java
    │   │   │   ├── ItemSyncService.java
    │   │   │   ├── CustomerSyncService.java
    │   │   │   ├── InventorySyncService.java
    │   │   │   └── CouponSyncService.java
    │   │   └── insight/                      # Phase 4: 洞察计算
    │   │       ├── ProductInsightService.java
    │   │       ├── CustomerInsightService.java
    │   │       └── InventoryInsightService.java
    │   ├── controller/                       # Phase 5: REST API
    │   │   ├── ProductController.java
    │   │   ├── CustomerController.java
    │   │   └── DashboardController.java
    │   └── job/                              # 定时任务
    │       ├── TradeSyncJob.java
    │       └── InsightComputeJob.java
    └── resources/
        └── application.yml

当前实施范围Phase 1订单同步

[NEW] pom.xml

Spring Boot 3.2 + MyBatis-Plus + MySQL + Lombok + Jackson

[NEW] application.yml

数据源、有赞 API 配置、cron 表达式

[NEW] YouzanTokenService.java

自用型 TokenPOST https://open.youzanyun.com/auth/tokenbody: client_id + client_secret + grant_type=silent + kdt_id。缓存至 80% TTL 自动刷新。

[NEW] YouzanApiClient.java

通用调用:GET https://open.youzanyun.com/api/{apiName}/{version}?access_token=xxx,带重试(最多 3 次)。

[NEW] TradeOrderDetail.java + Mapper

MyBatis-Plus Entity 完全对齐 DDL 的 dwd_trade_order_detail

[NEW] TradeSyncService.java

  1. update_time 窗口调用 youzan.trades.sold.get/4.0.4 分页拉取
  2. 展开 full_order_info_list[].orders[] 到 SKU 粒度
  3. saveOrUpdateBatch(基于 oid 唯一键UPSERT

[NEW] TradeSyncJob.java

@Scheduled(cron = "0 0 2 * * ?") 每日凌晨 2 点触发,拉取前一天增量。

当前实施范围Phase 4商品洞察与会员洞察

数据模型设计 (ADM 层) - sql/phase4_ddl.sql

  1. adm_customer_rfm (客户 RFM 洞察表):
    • 计算逻辑:基于过去 90 天订单流水,聚合 R最近消费、F消费频次、M消费金额
    • 包含 RFM 评分与系统自动划分的客群层级(如重要价值客户、沉睡客户)。
  2. adm_item_sales_trend (商品销售趋势表):
    • 计算逻辑:按天聚合 dwd_trade_order_detail,统计各个 SKU 的单量、销量、销售额。用于生成智能订货预测。
  3. adm_item_basket (关联销售分析表):
    • 计算逻辑:采用简化版 Apriori 算法思想,统计同一订单 (tid) 内商品对 (Item A, Item B) 的同现频率与置信度。
  4. adm_item_repurchase (商品复购分析表):
    • 计算逻辑:统计某 SKU 购买过后的用户,在接下来 30 天内再次购买的比例。

业务逻辑层设计 (Service)

  1. CustomerInsightService:
    • computeRfm(): 执行 SQL 统计与评分,生成/更新会员 RFM 白皮书。
    • computeUserTags(): 针对购买行为(如工作日午餐、高客单价)给用户打标签。
  2. ProductInsightService:
    • computeDailySalesTrend(): 日终归集单日销售统计。
    • computeBasketRules(): 统计过去 X 天的热门搭配。
    • computeRepurchaseRates(): 更新商品的 30 天复购率指标。
  3. InventoryInsightService:
    • computeStockAdvice(): 基于库存流水和流速,生成次日拿货/备货单。

定时任务层设计 (Job)

  1. InsightComputeJob:
    • @Scheduled(cron = "0 0 4 * * ?") 每日凌晨 4:00 集中触发洞察层计算(由于数据全量计算,放置在凌晨数据同步完成之后)。

当前实施范围Phase 5可视化接口层

API 设计方案

  1. DashboardController (核心监控板):

    • GET /api/dashboard/overview: 今日总体指标 (今日实付金额, 今日退款金额, 订单数)
    • GET /api/dashboard/trend: 近 14 天整体销售趋势变化折线图数据
  2. ProductController (商品洞察与预测):

    • GET /api/product/advice: 智能订货单查询 (基于过去 14 天 adm_item_sales_trend 动态计算各单品日均流速,输出建议备货量)
    • GET /api/product/basket: 购物篮高频组合列表 (查询 adm_item_basket 置信度排行)
    • GET /api/product/repurchase: 单品复购率与波士顿矩阵打标查询 (查询 adm_item_repurchase)
  3. CustomerController (会员金字塔与人群):

    • GET /api/customer/rfm/distribution: RFM 金字塔分布 (各层级人数及金额贡献占比查询)
    • GET /api/customer/tags: 各类特征人群包人数统计 (查询 adm_customer_tags)

业务与数据聚合逻辑

由于数据在 Phase 4 已通过定时任务计算沉淀到了 adm_ 系列汇总表中Phase 5 仅提供轻量级的 SQL GROUP BYSELECT 汇总查询,通过 JdbcTemplateMyBatis-Plus 向前端输出标准 JSON。

Verification Plan

Automated Tests

  • cd server && mvn compile 编译通过验证

Manual Verification

  1. 重启 Spring Boot 服务。
  2. 使用 Postman 或浏览器直接测试 /api/dashboard/overview, /api/product/advice 等接口,验证返回的 JSON 结构。