7.3 KiB
7.3 KiB
搭建 Spring Boot 有赞数据中台服务
基于已完成的设计文档和数据库 DDL,在 AIMachineSystem/server/ 下搭建 Spring Boot 服务,覆盖数据同步、洞察计算、API 接口三层。
全局蓝图(5 Phase)
| Phase | 内容 | 层 | 定时 |
|---|---|---|---|
| Phase 1 | 订单同步 (trades.sold.get → dwd_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
自用型 Token:POST https://open.youzanyun.com/auth/token,body: 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
- 按
update_time窗口调用youzan.trades.sold.get/4.0.4分页拉取 - 展开
full_order_info_list[].orders[]到 SKU 粒度 saveOrUpdateBatch(基于oid唯一键)UPSERT
[NEW] TradeSyncJob.java
@Scheduled(cron = "0 0 2 * * ?") 每日凌晨 2 点触发,拉取前一天增量。
当前实施范围:Phase 4(商品洞察与会员洞察)
数据模型设计 (ADM 层) - sql/phase4_ddl.sql
adm_customer_rfm(客户 RFM 洞察表):- 计算逻辑:基于过去 90 天订单流水,聚合 R(最近消费)、F(消费频次)、M(消费金额)。
- 包含 RFM 评分与系统自动划分的客群层级(如重要价值客户、沉睡客户)。
adm_item_sales_trend(商品销售趋势表):- 计算逻辑:按天聚合
dwd_trade_order_detail,统计各个 SKU 的单量、销量、销售额。用于生成智能订货预测。
- 计算逻辑:按天聚合
adm_item_basket(关联销售分析表):- 计算逻辑:采用简化版 Apriori 算法思想,统计同一订单 (tid) 内商品对 (Item A, Item B) 的同现频率与置信度。
adm_item_repurchase(商品复购分析表):- 计算逻辑:统计某 SKU 购买过后的用户,在接下来 30 天内再次购买的比例。
业务逻辑层设计 (Service)
CustomerInsightService:computeRfm(): 执行 SQL 统计与评分,生成/更新会员 RFM 白皮书。computeUserTags(): 针对购买行为(如工作日午餐、高客单价)给用户打标签。
ProductInsightService:computeDailySalesTrend(): 日终归集单日销售统计。computeBasketRules(): 统计过去 X 天的热门搭配。computeRepurchaseRates(): 更新商品的 30 天复购率指标。
InventoryInsightService:computeStockAdvice(): 基于库存流水和流速,生成次日拿货/备货单。
定时任务层设计 (Job)
InsightComputeJob:@Scheduled(cron = "0 0 4 * * ?")每日凌晨 4:00 集中触发洞察层计算(由于数据全量计算,放置在凌晨数据同步完成之后)。
当前实施范围:Phase 5(可视化接口层)
API 设计方案
-
DashboardController(核心监控板):GET /api/dashboard/overview: 今日总体指标 (今日实付金额, 今日退款金额, 订单数)GET /api/dashboard/trend: 近 14 天整体销售趋势变化折线图数据
-
ProductController(商品洞察与预测):GET /api/product/advice: 智能订货单查询 (基于过去 14 天adm_item_sales_trend动态计算各单品日均流速,输出建议备货量)GET /api/product/basket: 购物篮高频组合列表 (查询adm_item_basket置信度排行)GET /api/product/repurchase: 单品复购率与波士顿矩阵打标查询 (查询adm_item_repurchase)
-
CustomerController(会员金字塔与人群):GET /api/customer/rfm/distribution: RFM 金字塔分布 (各层级人数及金额贡献占比查询)GET /api/customer/tags: 各类特征人群包人数统计 (查询adm_customer_tags)
业务与数据聚合逻辑
由于数据在 Phase 4 已通过定时任务计算沉淀到了 adm_ 系列汇总表中,Phase 5 仅提供轻量级的 SQL GROUP BY 和 SELECT 汇总查询,通过 JdbcTemplate 或 MyBatis-Plus 向前端输出标准 JSON。
Verification Plan
Automated Tests
cd server && mvn compile编译通过验证
Manual Verification
- 重启 Spring Boot 服务。
- 使用 Postman 或浏览器直接测试
/api/dashboard/overview,/api/product/advice等接口,验证返回的 JSON 结构。