# 零售AI 租户端
**Repository Path**: neomor/Retail-AI
## Basic Information
- **Project Name**: 零售AI 租户端
- **Description**: RetailAI-Lite 是在 RuoYi-Vue v3.8.9 基础上深度改造的多租户 SaaS 零售 AI 智慧门店系统后端,专为中小零售门店提供 AI 驱动的经营决策支持。本模块也可以独立于saas端运行,支持数据独立
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-05
- **Last Updated**: 2026-08-05
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
RetailAI-Lite Backend
基于 RuoYi-Vue v3.8.9 改造的多租户 SaaS 零售 AI 智慧门店系统后端
## 项目简介
RetailAI-Lite 是在 RuoYi-Vue v3.8.9 基础上深度改造的多租户 SaaS 零售 AI 智慧门店系统后端,专为中小零售门店提供 AI 驱动的经营决策支持。
### 核心特性
- **多租户 SaaS 架构**:动态数据源管理,每个租户独立数据库,数据完全隔离
- **三层权限安全**:门店级数据权限 + 角色级功能权限 + 套餐级付费权限
- **AI 服务集成**:DeepSeek API 驱动的日报/周报生成、订货预测、营销文案生成
- **数据导入引擎**:支持银豹/六讯/中仑等主流收银系统模板解析
- **库存风险智能评估**:多维度风险识别与 AI 建议
- **Flyway 数据库迁移**:版本化管理数据库变更,支持回滚
- **容器化部署**:Docker + Docker Compose 一键部署
## 技术栈
### 后端
- **核心框架**:Spring Boot 2.5.x + Spring Security + Spring Validation
- **多租户数据源**:baomidou dynamic-datasource-spring-boot-starter(动态创建/销毁租户连接池)
- **数据库**:MySQL 8.0 + Flyway 8.x(版本化迁移)
- **缓存**:Redis(JWT Token + 租户数据源缓存 + 限流计数)
- **安全**:JWT + AES-256-GCM(敏感字段加密)+ HMAC-SHA256(签名)
- **AI 服务**:DeepSeek API(日报/周报/文案)+ Prophet(订货预测)
- **工具库**:Hutool 5.x + Lombok + MapStruct
### 前端
- **框架**:Vue 2.6 + Element UI 2.15
- **构建**:Webpack 5
- **状态管理**:Vuex 3
### 容器化
- **Docker**:多阶段构建,生产镜像不含源码
- **Docker Compose**:编排 MySQL + Redis + Backend + Frontend + Prophet Service
## 架构改造亮点
### 1. 多租户数据源管理
```
TenantDataSourceManager
├── 运行时动态创建租户数据库连接池(Druid)
├── 租户登录时注入 tenantId 到 SecurityContext
├── TenantContextFilter 拦截请求注入租户上下文
└── StoreDataInterceptor 强制所有业务 SQL 携带 store_id
```
**关键改造**:
- 移除原 RuoYi 自研 `DynamicDataSource`,改用 baomidou 方案
- 新增 `sys_auth_user` 主库统一认证表(替代原 `sys_user` 承载跨租户登录)
- 新增 `sys_global_username` 全局用户名占用表(注册防重)
- 租户注册流程 7 步:建库 → 建表 → 初始化数据 → 分配角色 → 分配菜单 → 创建用户 → 回调通知
### 2. 三层权限安全
| 层级 | 实现方式 | 说明 |
|------|---------|------|
| 数据权限 | `StoreDataInterceptor` | 所有业务 SQL 强制 `WHERE store_id = ?`,无跨店查询 |
| 角色权限 | Spring Security + 自定义 `DesensitizedUtil` | 店员账号自动脱敏营收敏感数据 |
| 套餐权限 | `PackageAuthAspect` 切面 | 基础版功能前端隐藏 + 后端 403 双拦截 |
### 3. AI 服务层
```
AI Services
├── DeepSeekServiceImpl(DeepSeek API 集成)
│ ├── 日报生成:销售分析 + 异常识别 + AI 建议
│ ├── 周报生成:趋势分析 + 品类洞察 + 经营建议
│ └── 营销文案生成:场景化文案 + 风格定制
├── OrderPredictServiceImpl(订货预测)
│ ├── Prophet 时序预测(调用独立 Prophet 服务)
│ └── 规则引擎混合(库存阈值 + 历史销量 + 风险标签)
└── InventoryRiskServiceImpl(库存风险评估)
├── 多维度风险识别(缺货/滞销/临期/异常)
└── AI 建议生成(补货量/促销策略/调价建议)
```
### 4. 数据导入引擎
```
DataImportServiceImpl
├── TemplateParserFactory(模板识别工厂)
│ ├── YinbaoTemplateParser(银豹销售/库存/会员/收银)
│ ├── SixunTemplateParser(六讯模板)
│ └── ZhonglunTemplateParser(中仑模板)
├── DataCleanEngine(数据清洗)
│ ├── SKU 标准化(去重/合并/分类推断)
│ └── 异常检测(负库存/异常价格/重复订单)
└── ImportLockAspect(防重入锁)
```
## 内置功能
### 系统管理(继承自 RuoYi)
1. 用户管理:系统用户配置,支持多租户隔离
2. 部门管理:组织机构树结构,支持数据权限
3. 岗位管理:用户担任职务配置
4. 菜单管理:动态菜单 + 操作权限 + 按钮权限
5. 角色管理:角色菜单权限 + 数据范围权限
6. 字典管理:系统字典数据维护
7. 参数管理:系统动态参数配置
8. 通知公告:系统公告发布维护
9. 操作日志:系统操作日志记录查询
10. 登录日志:系统登录日志记录查询
11. 在线用户:活跃用户状态监控
12. 定时任务:在线任务调度 + 执行日志
13. 代码生成:前后端代码生成(java/html/xml/sql)
14. 系统接口:Swagger API 文档
15. 服务监控:系统 CPU/内存/磁盘监控
16. 缓存监控:Redis 缓存信息查询
17. 连接池监视:Druid 连接池状态监控
### 多租户管理(新增)
18. 租户管理:租户 CRUD + 数据源生命周期管理
19. 租户注册:6 步注册流程(建库/建表/初始化/角色/菜单/用户)
20. 租户菜单管理:菜单模板 + 租户级覆盖
21. 租户到期扫描:定时任务自动禁用过期租户
22. 开户意愿确认:企业认证 + 法人认证
### 业务功能(新增)
23. 门店管理:门店信息 CRUD + 套餐绑定
24. 数据导入:银豹/六讯/中仑模板导入 + 清洗 + 校验
25. 销售明细:销售数据查询 + 导出 + 统计
26. 库存管理:库存查询 + 预警 + 盘点
27. 库存风险:多维度风险评估 + AI 建议
28. 订货预测:Prophet 时序预测 + 规则引擎
29. AI 日报:每日经营分析 + AI 建议
30. AI 周报:每周趋势分析 + 经营建议
31. 营销文案:场景化文案生成 + 风格定制
32. 收银记录:收银数据查询 + 对账
33. 仪表盘:销售/库存/趋势聚合展示
34. 子账号管理:多账号权限管理
35. 套餐订购:套餐购买 + 到期管理
### AI 服务(新增)
36. DeepSeek 集成:日报/周报/文案生成
37. Prophet 集成:时序预测服务客户端
38. AI 用量追踪:API 调用统计 + 限流
## 数据库架构
### 主库(ry_saas)
- `sys_tenant`:租户注册信息(db_url/db_username/db_password AES 加密)
- `sys_auth_user`:跨租户统一认证用户表
- `sys_global_username`:全局用户名占用表
- `saas_*`:SaaS 主控表(角色模板/菜单模板/套餐定义)
- `ops_*`:运营中台表(迁移至独立服务 saas-ops-service)
### 租户库(tenant_xxx)
- `sys_user`:租户内用户表(登录时同步 sys_auth_user)
- `sys_store`:门店信息表
- `biz_sales_detail`:销售明细
- `biz_inventory`:库存台账
- `biz_inventory_risk`:库存风险
- `biz_order_prediction`:订货预测
- `biz_ai_daily_report`:AI 日报
- `biz_ai_weekly_report`:AI 周报
- `biz_marketing_copy`:营销文案
- `biz_cashier`:收银记录
- `biz_import_log`:导入日志
- `biz_api_usage_log`:AI 用量日志
### 数据库迁移
所有数据库变更通过 Flyway 管理,位于 `ruoyi-admin/src/main/resources/db/migration/`:
```
V20240629.1__init_ry_base.sql # RuoYi 基础表
V20240629.2__init_quartz.sql # Quartz 定时任务表
V20240629.3__init_retail_ai.sql # 零售业务表
V20240629.4__init_saas_master.sql # SaaS 主控表
V20240629.5__init_master.sql # 主库初始化
V20240629.6__init_tenant.sql # 租户库模板
V20240629.7__init_ops.sql # 运营中台表
V20240701~V20240711 # 增量补丁
V20260728~V20260805 # 近期迁移
```
## 安全加固
### P0 阻断项修复
- ✅ 敏感配置外部化(AES_KEY / JWT_SECRET 等通过环境变量注入)
- ✅ 异常信息脱敏(生产环境不返回堆栈信息)
- ✅ 事务 rollbackFor 配置(所有 @Transactional 指定 rollbackFor = Exception.class)
- ✅ 分布式锁防重入(导入/预测等操作加 ImportLock)
- ✅ XSS 校验增强(HTML 上传白名单 + 内容过滤)
- ✅ CORS 配置严格化(生产环境仅允许指定域名)
### 敏感数据加密
- `sys_tenant.db_password`:AES-256-GCM 加密,支持多版本密钥轮换
- `sys_user.password`:BCrypt 加密(继承自 RuoYi)
- API 签名:HMAC-SHA256(内部接口调用)
### 数据脱敏
- 店员账号自动脱敏营收敏感字段(通过 `DesensitizedUtil`)
- 日志脱敏(不记录密码/Token 等敏感信息)
## 快速开始
### 环境要求
- JDK 11+
- Maven 3.6+
- MySQL 8.0+
- Redis 6.0+
- Node.js 14+(前端构建)
- Docker & Docker Compose(推荐)
### Docker Compose 部署(推荐)
```bash
# 克隆项目
git clone https://gitee.com/neomor/retail-ai-lite.git
cd retail-ai-lite
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入必要的配置(AES_KEY / JWT_SECRET / DB_PASSWORD 等)
# 启动所有服务
docker compose up -d
# 查看日志
docker compose logs -f ruoyi-backend
# 访问系统
# 前端:http://localhost:80
# 后端:http://localhost:8080
# 默认账号:tenant_demo / admin / admin123
```
### 本地开发
```bash
# 后端
cd ruoyi
mvn clean install
cd ruoyi-admin
mvn spring-boot:run
# 前端
cd ruoyi-ui
npm install
npm run dev
```
## 项目结构
```
ruoyi/
├── ruoyi-admin/ # 后端主模块
│ ├── src/main/java/
│ │ └── com/ruoyi/web/controller/ # 控制器
│ └── src/main/resources/
│ ├── application.yml # 主配置
│ ├── db/migration/ # Flyway 迁移脚本
│ └── sql/ # SQL 脚本
├── ruoyi-common/ # 公共模块
│ └── src/main/java/
│ ├── constant/ # 常量定义
│ ├── core/domain/ # 领域模型
│ ├── enums/ # 枚举定义
│ └── utils/ # 工具类(AES/HMAC/脱敏等)
├── ruoyi-framework/ # 框架模块
│ └── src/main/java/
│ ├── config/ # 配置类(多租户数据源/安全等)
│ ├── interceptor/ # 拦截器(门店数据权限/租户上下文)
│ └── web/service/ # 登录/注册服务
├── ruoyi-system/ # 系统模块
│ └── src/main/java/
│ ├── service/ # 业务服务
│ │ ├── TenantRegisterService # 租户注册(688 行)
│ │ ├── TenantService # 租户管理(480 行)
│ │ ├── ai/ # AI 服务
│ │ ├── aipredict/ # 订货预测
│ │ ├── aireport/ # AI 日报/周报
│ │ ├── imports/ # 数据导入
│ │ ├── inventory/ # 库存风险
│ │ └── dashboard/ # 仪表盘
│ └── mapper/ # MyBatis Mapper
├── ruoyi-ui/ # 前端
│ ├── src/
│ │ ├── api/ # API 接口
│ │ ├── views/ # 页面组件
│ │ └── utils/ # 工具函数
│ └── dist/ # 构建产物
├── sql/ # SQL 脚本
│ └── tenant_demo_init.sql # 演示租户初始化
├── Dockerfile # 后端容器化
└── pom.xml # Maven 父 POM
```
## 测试覆盖
核心业务测试覆盖率达 60%+,关键模块测试用例:
- `TenantRegisterServiceTest`(698 行):租户注册流程单元测试
- `TenantRegistrationConcurrencyTest`:并发注册测试
- `TenantRegistrationIntegrationTest`:集成测试
- `DataImportServiceTest`:数据导入测试
- `DataCleanEngineTest`:数据清洗测试
- `OrderPredictServiceTest`:订货预测测试
- `InventoryRiskServiceTest`:库存风险测试
- `AiReportServiceTest`:AI 日报/周报测试
- `AesUtilTest` / `HmacUtilTest`:加密工具测试
- `PackageAuthServiceTest`:套餐权限测试
## 性能优化
- 租户数据源缓存:首次访问创建连接池,缓存 30 分钟
- SQL 优化:所有业务查询强制走索引(store_id + create_time)
- Redis 缓存:菜单/角色/字典等热点数据缓存
- 异步处理:AI 报告生成异步执行,不阻塞主线程
- 分页查询:所有列表查询强制分页,默认 20 条/页
## 监控与运维
- 健康检查:`GET /actuator/health`
- 指标监控:Spring Boot Actuator + Prometheus(可选)
- 日志聚合:logback 配置 JSON 格式日志(可选 ELK)
- 连接池监控:Druid 内置监控页面
## 与 RuoYi-Vue 原版的主要差异
| 项目 | RuoYi-Vue v3.8.9 | RetailAI-Lite |
|------|------------------|---------------|
| 架构 | 单体应用 | 多租户 SaaS |
| 数据源 | 单数据源 + 自研动态数据源 | baomidou dynamic-datasource(动态创建连接池) |
| 用户体系 | sys_user 单表 | sys_auth_user(主) + tenant_xxx.sys_user(租户)双表 |
| 权限 | 角色权限 + 数据权限 | 角色权限 + 数据权限 + 套餐权限(三层) |
| 数据库迁移 | 手动执行 SQL | Flyway 版本化管理 |
| 业务功能 | 通用后台管理 | 零售 AI 专用(导入/预测/日报/周报/文案) |
| AI 服务 | 无 | DeepSeek + Prophet 集成 |
| 安全 | 基础安全 | 增强安全(AES 加密/HMAC 签名/脱敏/限流) |
| 部署 | 手动部署 | Docker Compose 一键部署 |
## 开源协议
本项目基于 RuoYi-Vue 改造,遵循 MIT 协议开源。
- RuoYi-Vue 原版:https://gitee.com/y_project/RuoYi-Vue
- RetailAI-Lite:https://gitee.com/neomor/retail-ai-lite
## 致谢
感谢 RuoYi 团队提供优秀的基础框架,本项目在其基础上进行了深度改造和扩展。