首次提交:初始化后端、数据库结构与文档代码

This commit is contained in:
Peter
2026-03-23 16:10:29 +08:00
commit 86f384c2d3
95 changed files with 10090 additions and 0 deletions

View File

@@ -0,0 +1,146 @@
# 搭建 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 结构。