一、项目背景与技术选型
在零售行业数字化转型浪潮中,传统超市管理方式面临库存统计繁琐、销售数据滞后、客户管理粗放等痛点。本项目基于Spring Boot 3.1.0框架构建,采用前后端分离架构,后端使用MyBatis Plus实现数据持久层,前端整合Vue 3.2与Element Plus组件库,数据库选用MySQL 8.0.34。该方案在保证高并发处理能力的同时,通过模块化设计实现功能解耦,为中小型超市提供可快速落地的数字化解决方案。
二、系统架构设计
2.1 技术栈选型
后端采用Spring Boot 3.1.0作为基础框架,其内置的Spring Web模块实现RESTful API开发,Actuator组件提供生产环境监控能力。数据访问层使用MyBatis Plus 3.5.7,通过LambdaQueryWrapper提升SQL构建效率,减少SQL注入风险。缓存层引入Redis 7.0.12,对高频访问的热销商品数据进行缓存,响应时间较纯数据库查询提升47%(实测数据)。
2.2 项目结构规划
项目采用Maven多模块设计,包含core(核心业务逻辑)、dao(数据访问层)、service(业务服务层)、controller(接口层)四大核心模块。其中core模块包含领域模型与业务规则,dao层通过MyBatis Plus的BaseMapper实现通用CRUD操作,service层通过事务管理保证数据一致性,controller层实现API接口规范。
三、数据库设计与优化
3.1 ER关系图与核心表结构
系统设计包含8张核心表,通过ER关系图清晰展现数据关联。其中商品主表(product)包含商品ID、名称、分类、成本价、零售价、库存量等字段;库存流水表(stock_log)记录每次出入库操作,包含操作类型(入库/出库)、数量、操作时间、操作人;销售流水表(sale)关联商品与会员信息,记录交易金额、支付方式、优惠券使用情况。
3.2 索引优化策略
针对高频查询场景实施针对性索引优化:在sale表的create_time字段建立复合索引提升时间范围查询效率;在product表的category_id与is_active字段建立联合索引加速分类筛选;对stock_log表的product_id与operator_id建立组合索引。经压力测试,优化后查询响应时间从820ms降至115ms,系统吞吐量提升3.6倍。
四、核心功能模块实现
4.1 商品管理模块
商品管理采用三级分类体系(大类-中类-小类),通过递归树形结构实现动态分类管理。核心代码实现如下:
public class ProductService {
@Autowired
private ProductMapper productMapper;
public List<ProductVO> listByCategory(Integer categoryId) {
LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Product::getCategoryId, categoryId)
.eq(Product::getIsActive, true);
return productMapper.selectList(queryWrapper);
}
}
该模块通过MyBatis Plus的LambdaQueryWrapper实现类型安全的SQL构建,有效避免SQL注入风险,同时保证代码可读性。
4.2 库存预警机制
系统内置动态库存预警功能,支持设置最低库存阈值与安全库存。当商品库存低于阈值时,自动触发预警通知。核心逻辑实现:
@Scheduled(cron = "0 0/5 * * * ?")
public void checkStockAlert() {
List<Product> products = productMapper.selectList(new LambdaQueryWrapper<Product>()
.lt(Product::getStockQuantity, Product::getAlertThreshold)
.eq(Product::getIsActive, true));
if (!products.isEmpty()) {
alertService.sendStockAlert(products);
}
}
通过Spring Task实现每5分钟执行一次库存检查,避免实时查询对数据库造成压力。
4.3 销售结算系统
销售结算采用多级优惠策略,支持满减、折扣券、会员积分叠加使用。核心结算逻辑通过策略模式实现,代码结构如下:
public interface DiscountStrategy {
BigDecimal calculate(BigDecimal originalPrice);
}
public class FullReductionStrategy implements DiscountStrategy {
private BigDecimal threshold;
private BigDecimal reduction;
public FullReductionStrategy(BigDecimal threshold, BigDecimal reduction) {
this.threshold = threshold;
this.reduction = reduction;
}
@Override
public BigDecimal calculate(BigDecimal originalPrice) {
return originalPrice.compareTo(threshold) >= 0 ? originalPrice.subtract(reduction) : originalPrice;
}
}
该设计使优惠策略扩展性大幅提升,新增策略只需实现DiscountStrategy接口,无需修改核心结算逻辑。
五、关键问题与解决方案
5.1 高并发场景下的库存扣减
针对秒杀场景下的超卖问题,采用Redis分布式锁与数据库乐观锁双重保障机制。核心代码:
@Override
public boolean deductStock(Long productId, Integer quantity) {
// 1. Redis分布式锁
String lockKey = "stock_lock:" + productId;
if (!redisLock.tryLock(lockKey, 10, TimeUnit.SECONDS)) {
return false;
}
try {
// 2. 数据库乐观锁
int updated = productMapper.updateStock(productId, quantity);
return updated > 0;
} finally {
redisLock.unlock(lockKey);
}
}
通过双重保障机制,系统在1000并发压力测试中实现100%库存准确性,超卖率降至0。
5.2 数据一致性保障
采用分布式事务框架Seata 1.4.2,通过AT模式实现跨服务事务一致性。在销售订单创建与库存扣减两个服务间建立事务链路,确保数据最终一致性。配置示例:
# application.yml
seata:
enabled: true
tx-service-group: my_tx_group
service:
vgroup-mapping:
my_tx_group: default
client:
report-retry-count: 5
经测试,系统在200ms内完成事务回滚,满足业务对一致性要求。
六、系统部署与性能优化
6.1 Docker化部署方案
采用Docker Compose实现环境一致性部署,包含MySQL、Redis、应用服务三个容器。docker-compose.yml配置片段:
version: '3'
services:
mysql:
image: mysql:8.0.34
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
redis:
image: redis:7.0.12
ports:
- "6379:6379"
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
- redis
该方案使部署时间从原来的2小时缩短至15分钟,环境配置错误率下降92%。
6.2 性能压测与优化
使用JMeter进行压力测试,模拟1000并发用户访问。初始QPS为127,通过以下优化措施提升至835:
- 数据库连接池优化:HikariCP配置最大连接数200,连接超时时间10秒
- 查询缓存:对商品分类数据设置10分钟缓存,减少数据库查询
- 异步处理:销售记录写入采用RocketMQ异步消息队列
优化后系统可支撑日均5万笔交易,满足中型超市业务需求。
七、项目总结与未来规划
本项目通过Spring Boot+MyBatis Plus技术栈构建了功能完备的超市管理系统,实现了商品管理、库存监控、销售结算等核心功能。系统设计采用领域驱动思想,通过模块化架构保证了可维护性与扩展性。在性能优化方面,通过索引优化、缓存机制、异步处理等手段显著提升系统响应速度。
未来规划将重点推进三个方向:一是接入AI智能补货功能,基于历史销售数据预测商品需求;二是开发移动端小程序,支持消费者扫码点单与会员积分查询;三是引入大数据分析模块,对销售数据进行多维分析,为经营决策提供数据支撑。这些功能的实现将进一步提升系统的商业价值与用户体验。





