电商推荐系统架构设计方案
·
1. 整体架构概述
本电商推荐项目是一个前后端分离的商城系统,后端采用 Java 语言,基于 Spring Boot 框架开发,使用 MyBatis - Plus 作为持久层框架,同时集成了 Spring Security 进行权限管理,Spring AOP 实现系统日志记录。前端使用 Vue.js 框架,借助 avue 轻量级表格插件实现通用分页表格。系统包括购物车、订单、商品管理、权限管理、异常处理、通用分页表格、文件上传下载、系统日志等多个功能模块。
2. 前端架构
- 技术栈:采用 Vue.js 框架,借助
avue轻量级表格插件实现通用分页表格。前端项目包括 后台管理员界面、小程序项目和H5 项目。 - 交互逻辑:前端通过调用后端提供的接口获取数据,并将数据使用我们的推荐算法展示给用户。用户在前端页面上进行操作,如添加商品到购物车、修改购物车商品信息、提交订单、选择支付方式等,前端将这些操作请求发送给后端进行处理,我们也会再收集这些用户交互数据用于下一步的推荐。
3. 后端架构
- 技术栈:Java 语言,Spring Boot 框架,MyBatis - Plus 持久层框架,Spring Security 权限管理,Spring AOP 系统日志记录。
- 模块划分:
- shop - admin:后台(vue)接口工程,提供后台管理界面所需的接口服务。
- shop - api:前端(小程序)接口工程,为小程序和 H5 页面提供接口支持,如购物车信息获取接口
/info、订单确认接口、订单提交接口、支付接口等。 - shop - bean:包含所有公共的实体类,如
ShopCartDto、ShopCartItemDto、OrderSettlement等,是商城基本流程所需的实体类集合。 - shop - common:前后台需要用到的公共配置和工具类的集合地,如异常处理类、通用工具类等。
- shop - security:OAuth2.0 授权认证模块,用于用户身份验证和权限管理。
- shop - service:前后台需要用到的公共的、商城基本流程所需的 Service 和 DAO 的集合地,如
BasketService用于处理购物车相关业务逻辑,OrderService用于处理订单相关业务逻辑。 - shop - sys:后台用户角色权限管理模块,负责管理后台用户的角色和权限。
4. 数据库架构
- 购物车表:存储购物车的基本信息,关联商品表、SKU 表、店铺表和用户表,用于管理用户购物车中的商品信息。
- 商品表:存储商品的基本信息,如商品名称、价格、图片、库存等,支持多商户和商品分类。
- SKU 表:存储商品的具体规格和库存信息,如颜色、内存、重量、体积等。
- 店铺表:存储店铺的相关信息,如店铺名称、联系方式等。
- 用户表:存储用户的基本信息,如用户名、密码、联系方式等。
- 订单表:存储订单的基本信息,如订单编号、用户 ID、店铺 ID、商品信息、订单状态、支付信息等。
- 优惠券表:存储优惠券的相关信息,如优惠券编号、优惠类型、优惠金额、使用条件等。
5. 系统交互流程
5.1购物车流程
- 前端页面向
shop - api发送获取购物车信息的请求,携带用户选中的活动项数组Map<Long, ShopCartParam> basketIdShopCartParamMap。 shop - api接收到请求后,调用BasketService的相关方法进行处理。BasketService从数据库中获取购物车的商品项信息,并调用事件模式触发满减模块对购物车信息进行处理。- 满减模块对购物车信息进行 “装饰”,计算商品的优惠价格。
BasketService将处理后的购物车信息返回给shop - api。shop - api将购物车信息返回给前端页面进行展示。
5.2订单流程
- 用户点击 “立即购买” 或 “购物车 - 结算” 进入到 “确认订单” 页面。
- 在 “确认订单” 页面,前端向
shop - api发送确认订单请求,携带用户选择的收货地址、优惠券等信息。 shop - api调用OrderService的相关方法进行处理,重新计算运费和订单价格,对购物车中的商品进行校验。OrderService将计算结果保存到缓存中,并返回订单信息给前端页面。- 用户提交订单,前端向
shop - api发送提交订单请求,携带订单信息。 shop - api调用OrderService的相关方法进行处理,为每个店铺生成一个订单,使用雪花算法生成订单 ID,清空购物车中勾选的商品,使用数据库的乐观锁防止超卖。OrderService返回订单编号给前端页面。
5.3支付流程
- 用户选择支付方式,前端向
shop - api发送支付请求,携带订单编号和支付方式信息。 shop - api调用PayService的相关方法进行处理,更新订单的支付信息。PayService调用第三方支付接口进行支付,等待支付结果回调。- 第三方支付平台返回支付结果,
shop - api接收到支付回调后,调用PayService的相关方法进行处理,更新订单的支付状态。
6.系统特性
- 模块化设计:将系统划分为多个模块,如购物车模块、订单模块、商品管理模块、权限管理模块等,每个模块具有独立的功能和职责,提高了系统的可维护性和可扩展性。
- 事件驱动:使用事件模式对模块之间进行解耦,如购物车计算价格时触发满减模块的事件,提高了系统的灵活性和可维护性。
- 统一异常处理:定义了统一的异常类和异常管理类,对异常进行统一处理,避免代码中出现大量的
try - catch代码块,提高了代码的可读性和可维护性。 - 通用分页表格:前端使用
avue插件实现通用分页表格,后端使用MyBatis - Plus进行分页查询,方便数据展示和分页查询。 - 系统日志记录:使用自定义注解和 Spring AOP 实现系统日志记录,将操作信息保存到数据库中,方便后续查看和管理。
7. 部署架构
- 开发环境:推荐使用 IDEA 开发工具,安装 Lombok 插件,导入 Maven 项目。启动 Redis 服务,将
shop.sql导入到 MySQL 中,修改application - dev.yml、shop.properties、api.properties等配置文件。启动WebApplication项目后台接口,ApiApplication项目前端接口。 - 生产环境:将整个项目上传到 CentOS 中,安装 Docker、Docker Compose、Open - JDK17、Maven 等工具。使用
mvn clean package - DskipTests命令进行打包,使用docker - compose up启动项目,使用 Nginx 将请求指向特定的端口。
更多推荐

所有评论(0)