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

更多推荐