1. 项目概述
这个ONLY在线商城系统是一个典型的全栈电商解决方案,采用目前主流的SpringBoot+Vue前后端分离架构。作为一名经历过多个电商项目的老兵,我特别欣赏这套代码的几个亮点:开箱即用的完整功能模块、清晰的接口文档、以及完善的权限控制体系。系统后端基于SpringBoot 2.7.x构建,前端使用Vue 3组合式API开发,数据库选用MySQL 8.0,整套技术栈都是2023年企业级开发的首选方案。
2. 核心功能模块解析
2.1 商品管理子系统
商品中心采用SPU-SKU标准数据模型,支持多规格商品管理。在数据库设计上,通过goods(商品主表)、goods_sku(sku表)、goods_spec(规格表)三表关联实现。特别值得注意的是sku编码生成算法:
// SKU编码生成规则:品类ID(3位)+时间戳(6位)+随机数(3位) public String generateSkuCode(Integer categoryId) { String timeStamp = new SimpleDateFormat("yyMMdd").format(new Date()); Random random = new Random(); return String.format("%03d%s%03d", categoryId, timeStamp, random.nextInt(999)); }2.2 订单交易引擎
订单系统采用状态机模式设计,包含以下核心状态:
- 待支付(10)
- 已支付(20)
- 已发货(30)
- 已完成(40)
- 已关闭(-10)
状态转换通过OrderStateMachine类实现,关键代码如下:
public boolean changeState(Order order, OrderEvent event) { OrderState current = OrderState.of(order.getStatus()); OrderState next = current.nextState(event); if(next != null) { order.setStatus(next.getCode()); return true; } return false; }3. 技术架构详解
3.1 后端技术栈
- SpringBoot 2.7.12
- MyBatis-Plus 3.5.3
- Spring Security 5.8
- Redis 6.2(缓存&分布式锁)
- RabbitMQ 3.11(异步消息)
3.2 前端技术栈
- Vue 3.2 + Composition API
- Element Plus 2.3
- Axios 1.3
- Vue Router 4.1
- Pinia 2.0(状态管理)
3.3 数据库设计
主要表结构及关系:
用户体系(user,user_auth,user_address) 商品体系(goods,goods_sku,goods_spec) 订单体系(order,order_item,order_log) 营销体系(coupon,user_coupon,seckill)4. 部署指南
4.1 开发环境搭建
- 安装JDK17+和Node16+
- MySQL8.0配置(建议innodb_buffer_pool_size=2G)
- Redis配置(requirepass建议设置)
- 导入sql/init.sql初始化数据
4.2 生产环境部署
推荐使用Docker Compose部署:
version: '3' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: yourpassword volumes: - ./mysql/data:/var/lib/mysql redis: image: redis:6.2-alpine command: redis-server --requirepass yourpassword backend: build: ./backend ports: - "8080:8080" frontend: build: ./frontend ports: - "80:80"5. 二次开发建议
5.1 扩展支付网关
系统默认集成支付宝沙箱,实际商用需要:
- 实现PaymentStrategy接口
- 在payment.properties配置密钥
- 在PaymentType枚举添加新类型
5.2 性能优化方案
- 商品详情页加入Redis缓存
- 订单查询添加Elasticsearch支持
- 使用Sentinel实现熔断降级
6. 常见问题排查
6.1 跨域问题
解决方案:
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("*") .maxAge(3600); } }6.2 事务失效场景
注意点:
- 确保异常被正确抛出
- 检查方法是否为public
- 避免同类内方法调用
这套系统最让我惊喜的是它完整的日志体系设计,从操作日志到接口日志都考虑周全。特别是在商品修改处采用了AOP+注解的方式记录操作轨迹,这个设计值得很多商业项目借鉴。