# 搭建 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 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 BY` 和 `SELECT` 汇总查询,通过 `JdbcTemplate` 或 `MyBatis-Plus` 向前端输出标准 JSON。 ## Verification Plan ### Automated Tests - `cd server && mvn compile` 编译通过验证 ### Manual Verification 1. 重启 Spring Boot 服务。 2. 使用 Postman 或浏览器直接测试 `/api/dashboard/overview`, `/api/product/advice` 等接口,验证返回的 JSON 结构。