1. 项目概述
黔醉酒业白酒销售系统是一个基于SpringBoot+Vue技术栈的电商平台,核心特色在于整合了协同过滤推荐算法,为白酒消费者提供个性化商品推荐服务。这个毕设项目完整实现了从用户注册登录、商品展示、购物车管理到订单处理的全流程功能,同时通过分析用户历史行为数据(浏览、购买、评分)建立推荐模型,有效解决了传统酒类电商平台推荐精准度低的问题。
我在实际开发中发现,白酒作为高客单价、强文化属性的商品,用户决策周期长且复购率高,因此个性化推荐对提升转化率尤为重要。系统采用经典的基于用户的协同过滤算法(UserCF),通过计算用户相似度来发现潜在兴趣商品,相比简单按销量或价格排序,能显著提升推荐相关性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体架构
系统采用前后端分离架构:
- 前端:Vue 2.x + ElementUI + Axios
- 后端:SpringBoot 2.5 + MyBatis-Plus + Redis
- 数据库:MySQL 8.0
- 算法服务:Python Flask(独立微服务)
提示:选择Python实现推荐算法是考虑到其丰富的数据科学库(如NumPy、pandas),但实际部署时需注意Java与Python服务的进程间通信效率问题。
2.2 技术选型考量
-
SpringBoot优势:
- 内嵌Tomcat简化部署
- 自动配置减少XML配置
- 与MyBatis-Plus配合实现快速CRUD开发
- 示例代码(application.yml节选):
yaml复制spring: datasource: url: jdbc:mysql://localhost:3306/liquor_sales?useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver
-
Vue+ElementUI组合:
- 响应式布局适配多端
- 丰富的UI组件加速开发
- 典型商品卡片组件代码:
vue复制<el-card :body-style="{ padding: '0px' }"> <img :src="product.image" class="product-image"> <div style="padding: 14px;"> <span>{{ product.name }}</span> <div class="price">{{ product.price }}元</div> <el-button type="warning" @click="addToCart">加入购物车</el-button> </div> </el-card>
3. 核心功能实现
3.1 用户行为采集模块
系统在以下关键节点埋点:
- 商品详情页停留超过30秒记为浏览行为
- 加入购物车/立即购买触发购买行为记录
- 订单完成后引导用户评分(1-5星)
行为数据表设计优化点:
sql复制CREATE TABLE `user_behavior` (
`behavior_id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL COMMENT '关联用户ID',
`product_id` bigint NOT NULL COMMENT '关联商品ID',
`behavior_type` enum('VIEW','PURCHASE','RATING') COLLATE utf8mb4_bin NOT NULL,
`behavior_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`rating` tinyint DEFAULT NULL COMMENT '1-5分评分',
`duration` int DEFAULT NULL COMMENT '浏览时长(秒)',
PRIMARY KEY (`behavior_id`),
KEY `idx_user_product` (`user_id`,`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
3.2 协同过滤算法实现
3.2.1 算法流程
- 构建用户-商品评分矩阵
- 计算用户相似度(余弦相似度)
- 选取最相似的K个邻居
- 预测目标用户对未购买商品的兴趣度
- 生成Top-N推荐列表
关键Python代码片段:
python复制def calculate_similarity(user1, user2):
# 获取共同评分商品
common_items = set(user1['ratings'].keys()) & set(user2['ratings'].keys())
if not common_items:
return 0
# 计算余弦相似度
sum_xx = sum_yy = sum_xy = 0
for item in common_items:
sum_xy += user1['ratings'][item] * user2['ratings'][item]
sum_xx += user1['ratings'][item] ** 2
sum_yy += user2['ratings'][item] ** 2
return sum_xy / (math.sqrt(sum_xx) * math.sqrt(sum_yy))
3.2.2 性能优化
- 使用Redis缓存用户相似度矩阵
- 定时任务每日凌晨更新推荐结果
- 冷启动问题解决方案:
- 新用户:展示热销榜+随机商品
- 新商品:优先推荐给口味相似的用户群
4. 数据库设计与优化
4.1 核心表关系

4.2 索引优化实践
- 组合索引优化查询:
sql复制ALTER TABLE `order_detail` ADD INDEX `idx_user_time` (`user_id`, `create_time`); - 商品分类字段添加枚举索引:
java复制@Enumerated(EnumType.STRING) @Column(length = 20) private LiquorCategory category;
4.3 分表策略
对于可能产生海量数据的用户行为表,按月份分表:
java复制@TableName("user_behavior_#{T(com.qianzui.util.DateUtil).getCurrentMonth()}")
public class UserBehavior {
// 字段定义
}
5. 系统部署与测试
5.1 压力测试结果
使用JMeter模拟1000并发用户:
| 接口名称 | 平均响应时间 | 错误率 | TPS |
|---|---|---|---|
| 商品列表 | 128ms | 0% | 235 |
| 推荐接口 | 203ms | 0.2% | 189 |
| 下单接口 | 256ms | 0.5% | 167 |
5.2 推荐效果评估
A/B测试对比(两周数据):
| 指标 | 传统推荐 | 协同过滤 | 提升 |
|---|---|---|---|
| 点击率 | 12.3% | 18.7% | +52% |
| 转化率 | 3.2% | 5.6% | +75% |
| 客单价 | ¥356 | ¥412 | +16% |
6. 开发经验与避坑指南
-
跨域问题解决方案:
java复制@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("GET", "POST", "PUT", "DELETE") .allowCredentials(true) .maxAge(3600); } } -
ElementUI表单验证陷阱:
- 必须给
el-form-item设置prop属性 - 验证规则需要与
v-model路径一致 - 动态表单需手动触发验证:
javascript复制this.$refs.form.validateField('items.' + index + '.price')
- 必须给
-
MyBatis-Plus批量插入优化:
java复制List<UserBehavior> behaviors = ...; SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH); UserBehaviorMapper mapper = session.getMapper(UserBehaviorMapper.class); behaviors.forEach(mapper::insert); session.commit(); -
推荐算法冷启动建议:
- 收集用户注册时的口味偏好
- 结合商品标签体系(香型、度数、产地)
- 初期采用混合推荐策略
这个项目从技术选型到算法实现涉及全栈开发的多个关键点,特别要注意前后端数据格式约定和算法服务的性能监控。在实际部署时,建议使用Docker容器化各服务组件,便于扩展和维护。对于毕业设计而言,可以重点展示推荐算法与常规电商功能的结合创新点,这往往是答辩时的加分项。
