1. 项目背景与核心需求
智能家居行业近年来呈现爆发式增长,根据市场调研数据显示,2023年全球智能家居市场规模已突破1500亿美元。在这样的背景下,开发一个能够整合产品展示、在线销售、用户管理的智能家居销售系统具有重要的现实意义。
这个毕业设计项目的核心目标是构建一个基于SpringBoot的全栈式智能家居销售平台,需要实现以下关键功能模块:
- 产品展示与分类管理
- 用户注册登录与权限控制
- 购物车与订单处理流程
- 支付接口集成
- 销售数据分析报表
- 后台管理系统
提示:在实际开发中,建议采用模块化设计思路,将系统划分为前台商城和后台管理两个独立子系统,通过RESTful API进行数据交互。
2. 技术选型与架构设计
2.1 后端技术栈
SpringBoot作为本系统的核心框架,版本选择2.7.x(当前LTS版本),主要考虑以下技术组件:
-
持久层:
- MyBatis-Plus 3.5.x(简化CRUD操作)
- Druid连接池(监控SQL性能)
- MySQL 8.0(事务型数据库)
- Redis 6.x(缓存和会话管理)
-
安全认证:
- Spring Security 5.7.x
- JWT令牌认证
-
其他关键组件:
- Lombok(减少样板代码)
- Swagger/Knife4j(API文档生成)
- Logback(日志管理)
- Quartz(定时任务)
2.2 前端技术方案
考虑到毕业设计的完整性和学习价值,推荐两种实现方案:
方案A(传统单体架构):
- Thymeleaf模板引擎
- Bootstrap 5 + jQuery
- ECharts(数据可视化)
方案B(前后端分离):
- Vue 3 + Element Plus
- Axios HTTP客户端
- Vue Router + Pinia状态管理
注意:如果选择方案B,需要额外配置跨域处理和API网关,对于初学者可能增加复杂度。
2.3 系统架构图
code复制[表示层] → [业务逻辑层] → [数据访问层]
↑ ↑ ↑
Web前端 SpringBoot MySQL/Redis
| | |
(用户交互) (业务处理) (数据持久化)
3. 数据库设计与实现
3.1 核心表结构
-
用户表(sys_user):
sql复制CREATE TABLE `sys_user` ( `id` bigint NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '登录账号', `password` varchar(100) NOT NULL COMMENT '密码', `real_name` varchar(50) DEFAULT NULL COMMENT '真实姓名', `phone` varchar(20) DEFAULT NULL COMMENT '联系电话', `email` varchar(100) DEFAULT NULL COMMENT '邮箱', `avatar` varchar(255) DEFAULT NULL COMMENT '头像URL', `status` tinyint DEFAULT '1' COMMENT '状态(0:禁用,1:正常)', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `idx_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -
产品表(product):
sql复制CREATE TABLE `product` ( `id` bigint NOT NULL AUTO_INCREMENT, `category_id` bigint NOT NULL COMMENT '分类ID', `name` varchar(100) NOT NULL COMMENT '产品名称', `subtitle` varchar(200) DEFAULT NULL COMMENT '副标题', `main_image` varchar(255) DEFAULT NULL COMMENT '主图URL', `detail` text COMMENT '商品详情', `price` decimal(10,2) NOT NULL COMMENT '价格', `stock` int NOT NULL DEFAULT '0' COMMENT '库存', `status` tinyint DEFAULT '1' COMMENT '状态(0:下架,1:在售)', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -
订单表(order_info):
sql复制CREATE TABLE `order_info` ( `id` bigint NOT NULL AUTO_INCREMENT, `order_no` varchar(50) NOT NULL COMMENT '订单编号', `user_id` bigint NOT NULL COMMENT '用户ID', `payment` decimal(10,2) DEFAULT NULL COMMENT '实付金额', `payment_type` tinyint DEFAULT NULL COMMENT '支付类型', `postage` decimal(10,2) DEFAULT NULL COMMENT '运费', `status` tinyint DEFAULT '0' COMMENT '订单状态', `payment_time` datetime DEFAULT NULL COMMENT '支付时间', `send_time` datetime DEFAULT NULL COMMENT '发货时间', `end_time` datetime DEFAULT NULL COMMENT '交易完成时间', `close_time` datetime DEFAULT NULL COMMENT '交易关闭时间', `create_time` datetime DEFAULT CURRENT_TIMESTAMP, `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `idx_order_no` (`order_no`), KEY `idx_user_id` (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 索引优化建议
- 为所有外键字段添加普通索引
- 高频查询条件组合建立联合索引
- 订单表按用户ID和创建时间排序查询需要特殊优化
4. 核心功能实现细节
4.1 用户认证模块
采用JWT+Spring Security实现安全的认证流程:
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtAuthenticationFilter jwtAuthenticationFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.antMatchers("/api/product/list").permitAll()
.anyRequest().authenticated();
http.addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
4.2 购物车功能实现
采用Redis存储购物车数据,数据结构设计:
java复制public void addCart(Long userId, Long productId, Integer quantity) {
String key = "cart:" + userId;
// 使用Hash结构存储:field为productId,value为quantity
redisTemplate.opsForHash().put(key, productId.toString(), quantity.toString());
// 设置过期时间
redisTemplate.expire(key, 30, TimeUnit.DAYS);
}
public List<CartVO> listCart(Long userId) {
String key = "cart:" + userId;
Map<Object, Object> entries = redisTemplate.opsForHash().entries(key);
return entries.entrySet().stream()
.map(entry -> {
Long productId = Long.parseLong(entry.getKey().toString());
Integer quantity = Integer.parseInt(entry.getValue().toString());
// 查询商品详情
Product product = productService.getById(productId);
return new CartVO(product, quantity);
})
.collect(Collectors.toList());
}
4.3 订单生成与支付
订单号生成策略(雪花算法改进版):
java复制public class OrderNoGenerator {
private static final long START_TIMESTAMP = 1640995200000L; // 2022-01-01 00:00:00
private static final long SEQUENCE_BITS = 12L;
private static final long MAX_SEQUENCE = ~(-1L << SEQUENCE_BITS);
private long workerId;
private long sequence = 0L;
private long lastTimestamp = -1L;
public synchronized String generate() {
long timestamp = timeGen();
if (timestamp < lastTimestamp) {
throw new RuntimeException("Clock moved backwards");
}
if (lastTimestamp == timestamp) {
sequence = (sequence + 1) & MAX_SEQUENCE;
if (sequence == 0) {
timestamp = tilNextMillis(lastTimestamp);
}
} else {
sequence = 0L;
}
lastTimestamp = timestamp;
long orderNo = ((timestamp - START_TIMESTAMP) << SEQUENCE_BITS)
| (workerId << SEQUENCE_BITS)
| sequence;
return String.valueOf(orderNo);
}
private long tilNextMillis(long lastTimestamp) {
long timestamp = timeGen();
while (timestamp <= lastTimestamp) {
timestamp = timeGen();
}
return timestamp;
}
private long timeGen() {
return System.currentTimeMillis();
}
}
5. 系统部署与性能优化
5.1 生产环境部署方案
推荐使用Docker Compose进行容器化部署:
yaml复制version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: smart_home_mysql
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_DATABASE: smart_home
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
restart: always
redis:
image: redis:6.2
container_name: smart_home_redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
restart: always
app:
build: .
container_name: smart_home_app
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: prod
DB_URL: jdbc:mysql://mysql:3306/smart_home
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
REDIS_HOST: redis
depends_on:
- mysql
- redis
restart: always
volumes:
mysql_data:
redis_data:
5.2 性能优化策略
-
数据库层面:
- 配置合理的连接池参数
- 慢SQL监控与优化
- 读写分离(主从复制)
-
应用层面:
- 启用SpringBoot Actuator监控
- 配置合理的线程池
- 热点数据缓存策略
-
前端优化:
- 静态资源CDN加速
- 图片懒加载
- 接口数据分页
6. 毕业设计扩展建议
为了使项目更具竞争力,可以考虑以下扩展方向:
-
智能推荐系统:
- 基于用户行为的协同过滤算法
- 热门商品排行榜
- 个性化推荐
-
物联网集成:
- 设备状态实时监控
- 场景联动规则引擎
- 微信小程序控制端
-
数据分析模块:
- 销售数据可视化
- 用户画像分析
- 库存预警系统
-
微服务改造:
- SpringCloud Alibaba
- 服务拆分(商品服务、订单服务、用户服务等)
- 分布式事务处理
在实际开发过程中,我建议采用迭代式开发方法,先实现核心功能再逐步扩展。特别注意做好代码版本控制(Git),每个功能模块开发完成后及时提交并编写清晰的提交信息。
