基于若依(RuoYi)二次开发的自营商城系统:从架构设计到落地的全栈实践
项目地址 :https://gitee.com/zhbdream/shop-mall
技术栈 :Java 17 + Spring Boot + MyBatis + Shiro + JWT + MySQL 8 + uni-app(Vue 3 + TypeScript)
开源协议 :MIT License
关键词:若依、商城系统、Java 全栈、uni-app、微信小程序、自营电商
一、为什么要做这个项目?
在 2026 年的电商环境下,市面上不缺 SaaS 商城工具,但对开发者和中小团队来说,真正痛点在于:
- SaaS 工具数据不自主,迁移成本高、定制空间有限;
- 大型开源商城系统过于重量级,微服务架构虽好,但中小项目用 Spring Cloud 全家桶属于"杀鸡用牛刀";
- 若依框架生态成熟,但缺少一个"开箱即用"的商城业务样板,大多数开发者拿到若依后还要从零搭建电商模块。
Shop-Mall 就是为了解决这个问题而诞生的------基于若依框架二次开发,保留其成熟的权限管理、日志审计、代码生成等基础设施,在此之上构建一套完整的自营商城业务能力,同时配套 uni-app 移动端,实现"管理后台 + H5/微信小程序"双端覆盖。
一句话定位 :不是要做一个"全行业通用电商平台",而是给中小团队和独立开发者一个能快速跑起来、能直接二次开发的自营商城样板。
二、整体架构设计
2.1 项目结构
shop-mall/
├── ShopAdmin/ # 后端服务(Java)
│ ├── shop-admin/ # 主启动模块 + Thymeleaf 管理后台
│ ├── shop-common/ # 通用工具 & 常量
│ ├── shop-framework/ # 框架核心(安全、拦截器、配置)
│ ├── shop-system/ # 系统管理(用户、角色、菜单)
│ ├── shop-business/ # 商城业务模块(商品、订单、会员、营销等)
│ ├── sql/ # 数据库脚本(脱敏演示数据)
│ └── doc/ # 设计文档 & 界面截图
└── shopApp/ # 移动端(uni-app + Vue 3 + TypeScript)
├── pages/ # 页面组件
├── components/ # 公共组件
├── api/ # 接口定义
├── config/ # 配置文件
└── store/ # 状态管理
项目采用前后端分离 + 多端适配的设计思路:
| 端 | 技术方案 | 说明 |
|---|---|---|
| 管理后台 | Thymeleaf 服务端渲染 | 基于若依经典模板,运营/管理员使用 |
| 移动端 REST API | Spring Boot 统一接口 | 同一套 API 同时服务 H5 和小程序 |
| 用户端 H5 / 小程序 | uni-app(Vue 3 + TS) | 一套代码编译到 H5 和微信小程序 |
2.2 技术选型分析
后端技术栈
| 技术 | 版本 | 选型理由 |
|---|---|---|
| Java | 17(LTS) | 长期支持版本,虚拟线程等现代特性 |
| Spring Boot | 3.x | 自动配置、内嵌服务器、生态完善 |
| MyBatis | 3.5.x | 灵活的 SQL 映射,适合复杂电商查询 |
| Apache Shiro | 1.7+ | 轻量级安全框架,认证/授权/加密一体化 |
| JWT | - | 无状态 Token 认证,天然适配前后端分离 |
| MySQL | 8.0+ | 窗口函数、JSON 字段支持,满足复杂业务建模 |
| 阿里云 OSS | - | 商品图片/静态资源的云端存储 |
| t-io WebSocket | - | 在线客服实时通信 |
前端技术栈
| 技术 | 说明 |
|---|---|
| uni-app | 跨端框架,一套代码编译 H5 + 微信小程序 |
| Vue 3 | Composition API,更好的类型推断和性能 |
| TypeScript | 类型安全,降低多人协作的沟通成本 |
2.3 为什么选若依作为底座?
若依(RuoYi)是国内使用最广泛的 Java EE 快速开发平台之一,其核心价值在于:
- 开箱即用的基础设施:用户管理、角色权限、菜单配置、数据字典、操作日志、登录日志、代码生成器等企业级功能已经内置,不需要重复造轮子;
- 经典技术组合:Spring Boot + MyBatis + Shiro/JWT,技术栈成熟稳定,招聘门槛低,社区资料丰富;
- 模块化设计:ruoyi-common / ruoyi-framework / ruoyi-system 等分层清晰,二次开发时业务代码与框架代码边界明确;
- MIT 开源协议:商业友好,无授权风险。
在此基础上做商城业务扩展,开发者可以把精力聚焦在商品、订单、营销、库存等核心业务逻辑上,而不是花几周时间去搭建后台管理框架。
三、核心功能模块详解
3.1 商品管理
商品模块是商城系统的基石,Shop-Mall 实现了完整的商品域建模:
-
商品 SPU/SKU 模型:支持多规格组合(如颜色 × 尺码),每个 SKU 独立管理价格、库存、图片;
-
分类体系:多级商品分类树,支持拖拽排序;
-
标签系统:自定义商品标签,用于前台筛选和营销分组;
-
评价管理:用户评价、评分、图片评价,后台可审核/回复;
-
搜索运营:关键词配置、搜索推荐、热搜榜单。
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 商品 SPU │────<│ 商品 SKU │────<│ 库存管理 │
│ (标准品) │ │ (最小售卖) │ │ (独立库存) │
└─────────────┘ └─────────────┘ └─────────────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 分类/标签 │ │ 价格/图片 │
└─────────────┘ └─────────────┘
3.2 订单与售后
订单系统覆盖电商核心交易链路:
- 购物车:支持 SKU 级别的数量修改、选中/取消、失效商品标记;
- 订单流程:下单 → 支付 → 发货 → 收货 → 完成,支持超时自动取消;
- 地址管理:用户多地址管理,默认地址设置;
- 售后流程:退款/退货申请、审核、退款原路返回。
3.3 营销体系
营销是电商增长的核心驱动力,项目内置多种营销工具:
| 功能 | 说明 |
|---|---|
| Banner 轮播 | 首页/频道页轮播图,支持链接跳转配置 |
| 优惠券 | 满减券/折扣券,支持发放数量、使用门槛、有效期管理 |
| 秒杀活动 | 限时特价,库存独立管理,防超卖 |
| 搜索运营 | 热搜词、搜索推荐、关键词关联 |
3.4 会员体系
- 登录方式:短信验证码登录(接口已预留,默认 Mock)+ 密码登录;
- 收藏功能:商品收藏列表,支持批量管理;
- 余额系统:余额充值、消费记录、余额流水查询。
3.5 在线客服
基于 t-io WebSocket 实现实时客服聊天:
- 用户端:发起咨询、发送文字/图片消息;
- 管理后台:客服工作台,多会话管理、消息记录持久化;
- 连接管理:心跳检测、断线重连、离线消息队列。
3.6 供应链管理
面向自营场景的轻量供应链模块:
- 供应商管理:供应商信息维护、资质归档;
- 采购管理:采购单创建、入库确认;
- 库存流水:入库/出库/盘点记录,库存变动全链路可追溯。
3.7 堂食/桌台扫码点餐(特色扩展)
这是一个有意思的扩展模块,将商城能力延伸到了线下餐饮场景:
- 门店管理:多门店配置;
- 桌台管理:桌台编号、二维码生成;
- 扫码点餐:用户扫码进入点餐页面,选菜下单;
- 堂食看板:后厨/前台订单看板,实时查看订单状态;
- 结算:支持 Mock 支付,可对接实际支付渠道。
这个模块的设计思路值得参考------商城底层能力(商品、订单、支付)是通用的,只需要在上层叠加不同的业务场景(堂食/外卖/零售),就能快速覆盖多个业态。
四、管理后台界面一览
管理后台基于若依经典的 Thymeleaf 模板,以下是核心页面:
| 工作台 | 商品管理 | 订单管理 |
|---|---|---|
| 数据概览、待办事项 | 商品/SKU/分类/标签管理 | 订单列表、详情、发货 |
| 堂食看板 | 门店桌台 | 客服聊天 |
|---|---|---|
| 实时订单状态 | 桌台管理与二维码 | WebSocket 实时通信 |
完整截图见:ShopAdmin/doc/界面截图.md
五、移动端界面一览
移动端使用 uni-app 开发,同时支持 H5 和微信小程序:
| 首页 | 分类 | 商品详情 | 购物车 |
|---|---|---|---|
| Banner + 秒杀 + 推荐 | 多级分类浏览 | 规格选择、评价、加购 | SKU 选择、数量管理 |
| 订单 | 我的 | 登录 | 客服 |
|---|---|---|---|
| 订单列表/详情/物流 | 个人中心、收藏、余额 | 短信/密码登录 | 实时聊天 |
六、快速开始
6.1 环境要求
| 环境 | 版本要求 |
|---|---|
| JDK | ≥ 17 |
| MySQL | ≥ 8.0 |
| Maven | ≥ 3.0 |
| Node.js | ≥ 16(uni-app 推荐) |
6.2 数据库初始化
sql
CREATE DATABASE shop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
导入脱敏演示数据:
bash
mysql -u root -p shop < ShopAdmin/sql/shop.sql
数据库脚本说明详见:ShopAdmin/sql/README.md
6.3 启动后端
bash
cd ShopAdmin
# 复制本地配置(填写数据库密码、OSS密钥等,切勿提交到仓库)
cp shop-admin/src/main/resources/application-local.yml.example \
shop-admin/src/main/resources/application-local.yml
# 编译打包
mvn clean package -DskipTests
# 启动(启用 druid + local 配置)
java -jar shop-admin/target/shop-admin.jar --spring.profiles.active=druid,local
启动后访问 http://localhost/ 进入管理后台(默认账号见 SQL 说明文档)。
6.4 启动移动端
bash
cd shopApp
# 安装依赖
npm install
# 修改接口地址
# 编辑 config/index.ts 中的 baseUrl,或参考 config/index.example.ts
# 启动 H5 开发服务
npm run dev:h5
# 微信小程序:
# 1. 在 HBuilderX 或微信开发者工具中打开 shopApp 目录
# 2. 填写 manifest.json 中的微信小程序 appid
# 3. 编译运行
七、架构设计亮点与技术实践
7.1 安全设计
- 配置脱敏 :仓库内的配置文件和 SQL 均已脱敏,生产环境的密钥通过
application-local.yml或环境变量注入,杜绝密钥泄露; - Shiro + JWT 双重保障:Shiro 负责权限模型(RBAC),JWT 负责无状态认证,两者协同覆盖了管理后台和移动端 API 的安全需求;
- 安全策略文档 :项目提供独立的 SECURITY.md,明确漏洞报告流程。
7.2 移动端跨端实践
uni-app 的跨端能力是本项目的一大亮点:
┌── H5(移动端浏览器)
shopApp (Vue 3) ────┤
└── 微信小程序
通过条件编译处理平台差异:
typescript
// #ifdef MP-WEIXIN
// 微信小程序专属逻辑:调用 wx.login 获取 code
wx.login({
success: (res) => {
// 用 code 换取 openid
}
});
// #endif
// #ifdef H5
// H5 专属逻辑:走短信验证码登录
// #endif
一套代码,两端运行,大幅降低了移动端的开发和维护成本。
7.3 实时通信架构
在线客服模块基于 t-io WebSocket 实现:
用户端 (uni-app) 管理后台 (Thymeleaf)
│ │
│ WebSocket 连接 │ WebSocket 连接
│ ─────────────────────────▶│
│ │
│ 发送消息 │ 接收消息
│ ─────────────────────────▶│
│ │
│ 接收回复 │ 发送回复
│ ◀─────────────────────────│
t-io 是一个高性能的 Java 网络通信框架,相比原生 WebSocket,它提供了连接管理、心跳检测、消息分发等开箱即用的能力,非常适合客服聊天这种长连接场景。
7.4 配置管理最佳实践
项目采用了多 Profile 配置隔离的策略:
yaml
# application.yml --- 通用配置(可提交)
spring:
profiles:
active: druid
# application-local.yml --- 本地/生产配置(不提交,加入 .gitignore)
spring:
datasource:
password: your_actual_password
aliyun:
oss:
access-key: your_access_key
secret-key: your_secret_key
这样做的好处是:
- 仓库中的配置是安全的模板配置,不含任何敏感信息;
- 不同环境(开发/测试/生产)只需维护各自的
application-{env}.yml; - 新人 clone 项目后,复制 example 文件并填入自己的配置即可运行。
八、与同类开源商城系统对比
在 2026 年的开源商城生态中,有几款主流方案值得关注。以下是 Shop-Mall 与它们的定位对比:
| 维度 | Shop-Mall | Mall4j | CRMEB | JooLun |
|---|---|---|---|---|
| 后端框架 | 若依 + Spring Boot | Spring Boot 3 | ThinkPHP / Java | Spring Cloud |
| 架构模式 | 单体(轻量) | 单体/微服务 | 单体/微服务 | 微服务 |
| 移动端 | uni-app (Vue 3 + TS) | uni-app | uni-app | uni-app |
| 管理后台 | Thymeleaf(若依模板) | Vue 3 + Element Plus | Vue | Vue |
| 适用场景 | 中小自营、学习参考 | 中大型企业 | 中小商家 | 大型平台 |
| 部署复杂度 | ⭐ 低 | ⭐⭐ 中 | ⭐⭐ 中 | ⭐⭐⭐ 高 |
| 学习成本 | ⭐ 低(若依生态) | ⭐⭐ 中 | ⭐⭐ 中 | ⭐⭐⭐ 高 |
| 特色功能 | 堂食扫码点餐扩展 | B2B2C 多商户 | 分销裂变 | SaaS 多租户 |
Shop-Mall 的差异化优势:
- 最低的上手门槛:若依框架在国内 Java 开发者中覆盖率极高,大部分后端开发者对若依的代码结构和设计模式都不陌生,二次开发几乎零学习成本;
- 轻量但不简陋:单体架构部署简单(一个 JAR 包即可运行),但商城功能模块完整,覆盖了商品、订单、营销、会员、客服、供应链等核心场景;
- 堂食场景扩展:这是其他商城系统很少提供的功能,体现了"底层能力复用 + 上层场景灵活扩展"的设计哲学;
- Java 17 + TypeScript:技术栈保持现代,Java 17 的 LTS 特性和 TypeScript 的类型安全,为项目的长期维护提供保障。
九、适合什么样的团队和场景?
✅ 推荐使用场景
- 中小自营电商:品牌自营商城,商品 SKU 数量在千级别以内;
- 学习 & 毕设:Java 全栈开发者学习电商系统设计的参考样板;
- 快速 MVP:创业团队快速验证商业模型的技术底座;
- 线下 + 线上融合:堂食扫码、门店自提等 O2O 场景;
- 若依用户:已经在使用若依的团队,需要快速叠加商城能力。
❌ 不推荐场景
- 多商户入驻平台(B2B2C)→ 建议选择 Mall4j 或 JooLun;
- 大规模分布式电商(日活百万级)→ 需要微服务架构支撑;
- 跨境电商 → 需要多语言、多币种、国际支付等专项能力。
十、二次开发指南与建议
10.1 新增业务模块的标准流程
若依框架提供了强大的代码生成器,新增业务表后,可以一键生成 Controller / Service / Mapper / 前端页面。推荐的标准流程:
1. 设计数据库表(遵循若依命名规范:t_shop_xxx)
2. 在若依代码生成器中导入表
3. 生成基础 CRUD 代码
4. 在生成的基础上叠加业务逻辑(如库存扣减、订单状态机)
5. 配置菜单权限
10.2 支付对接
项目默认使用 Mock 支付,生产环境需要对接真实支付渠道:
- 微信支付:申请微信商户号,接入微信支付 V3 API;
- 支付宝:接入支付宝开放平台;
- 余额支付:项目已内置余额模块,可直接使用。
10.3 短信服务
登录验证码默认 Mock,生产环境建议对接:
- 阿里云短信
- 腾讯云短信
- 其他 SMS 服务商
接口已预留,只需实现具体的发送逻辑即可。
10.4 部署建议
单机部署(适合初期):
Nginx(静态资源 + 反向代理)
│
├── 管理后台(Thymeleaf 页面)
├── REST API(Spring Boot JAR)
└── MySQL 8
进阶部署(流量增长后):
Nginx 负载均衡
│
├── Spring Boot 实例 × 2+
├── MySQL 主从
├── Redis 缓存
└── 阿里云 OSS(静态资源)
十一、总结
Shop-Mall 的核心价值在于:用最低的技术成本,覆盖最完整的自营电商场景。
它没有追求"大而全"的微服务架构,而是务实地选择了单体 + 模块化设计,让中小团队能快速跑起来、能看懂代码、能自主迭代。基于若依的底座意味着权限管理、日志审计、代码生成等企业级基础设施已经就绪,开发者可以把精力集中在业务逻辑上。
堂食扫码点餐的扩展模块更是点睛之笔------它证明了这套系统的底层能力(商品、订单、支付)是通用的,可以灵活适配不同的业务场景。
如果你正在寻找一个轻量但完整的 Java 商城开源项目,或者你的团队已经在使用若依并需要快速叠加电商能力,Shop-Mall 值得深入了解。
项目地址 :https://gitee.com/zhbdream/shop-mall
技术栈速览:
- 后端:Java 17 / Spring Boot / MyBatis / Shiro / JWT / MySQL 8 / 阿里云 OSS / t-io WebSocket
- 前端:uni-app(Vue 3 + TypeScript)
- 管理后台:Thymeleaf(若依经典模板)
开源协议:MIT License(基于若依 MIT 二次开发)
如果这篇文章对你有帮助,欢迎点赞、收藏、关注。有任何问题欢迎在评论区交流,也欢迎到 Gitee 仓库提交 Issue 和 PR!