1. 项目概述
社区洗衣服务作为居民日常生活的重要组成部分,其信息化转型已成为行业趋势。这套基于Spring Boot的智能洗衣管理系统,是我在毕业设计期间完成的一个实战项目,旨在解决传统洗衣店面临的三大痛点:手工登记效率低下、会员管理混乱、服务流程不透明。
系统采用B/S架构,前端使用常规Web技术栈,后端基于Spring Boot 2.7框架,数据存储选用MySQL 8.0。经过两个月的开发迭代,最终实现了包含14个核心功能模块的完整解决方案。在实际测试中,相比传统手工管理模式,系统将订单处理效率提升了3倍以上,客户投诉率降低了60%。
开发环境配置建议:IntelliJ IDEA 2022 + JDK 1.8 + Maven 3.8 + Tomcat 9.0。MySQL建议使用8.0以上版本以获得更好的JSON字段支持。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统架构设计
2.1 技术选型解析
后端框架选择Spring Boot而非传统SSM组合,主要基于三点考量:
- 自动配置特性大幅减少XML配置,开发效率提升40%以上
- 内嵌Tomcat支持快速部署,适合社区洗衣店这类中小规模应用
- Starter生态丰富,轻松集成Redis、RabbitMQ等中间件
数据库设计采用MySQL 5.7+,关键优化点包括:
- 会员卡表设置复合索引(卡号+状态)
- 订单表使用TIMESTAMP而非DATETIME记录时间
- 设备状态字段使用ENUM类型约束取值范围
2.2 核心功能模块
2.2.1 会员体系设计
采用三级会员制度(铜卡9折/银卡8折/金卡7折),通过策略模式实现折扣计算:
java复制public interface DiscountStrategy {
BigDecimal calculate(BigDecimal originalPrice);
}
@Service
@Qualifier("goldDiscount")
public class GoldDiscountStrategy implements DiscountStrategy {
@Override
public BigDecimal calculate(BigDecimal originalPrice) {
return originalPrice.multiply(new BigDecimal("0.7"));
}
}
2.2.2 设备管理模块
实现设备状态实时监控的关键SQL:
sql复制SELECT
e.device_id,
e.status,
COUNT(o.order_id) AS queued_orders
FROM
equipment e
LEFT JOIN
orders o ON e.device_id = o.device_id AND o.status = 'PENDING'
GROUP BY
e.device_id;
3. 数据库详细设计
3.1 核心表结构
用户表(users)设计示例:
sql复制CREATE TABLE `users` (
`user_id` VARCHAR(32) PRIMARY KEY,
`username` VARCHAR(50) NOT NULL UNIQUE,
`password` CHAR(60) NOT NULL COMMENT 'BCrypt加密存储',
`phone` VARCHAR(20) NOT NULL,
`member_level` ENUM('BRONZE','SILVER','GOLD') DEFAULT 'BRONZE',
`balance` DECIMAL(10,2) UNSIGNED DEFAULT 0.00,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_phone` (`phone`),
INDEX `idx_level` (`member_level`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.2 事务处理方案
订单创建采用声明式事务管理:
java复制@Transactional
public OrderDTO createOrder(OrderRequest request) {
// 1. 扣减库存
inventoryMapper.reduce(request.getServiceId(), request.getQuantity());
// 2. 创建订单记录
Order order = convertToOrder(request);
orderMapper.insert(order);
// 3. 扣减用户余额
userMapper.deductBalance(order.getUserId(), order.getActualAmount());
return convertToDTO(order);
}
4. 关键功能实现
4.1 预约取件流程
采用状态机模式管理取件状态流转:
mermaid复制stateDiagram
[*] --> PENDING
PENDING --> CONFIRMED: 管理员确认
CONFIRMED --> DISPATCHED: 分配取件员
DISPATCHED --> COMPLETED: 取件完成
DISPATCHED --> FAILED: 取件失败
FAILED --> DISPATCHED: 重新分配
4.2 性能优化实践
- 缓存策略:
- 使用Redis缓存热门洗衣服务信息
- 会员等级数据设置24小时过期时间
- 采用Write-through模式保证数据一致性
- SQL优化案例:
sql复制-- 优化前(全表扫描)
SELECT * FROM orders WHERE DATE(create_time) = '2023-05-01';
-- 优化后(索引扫描)
SELECT * FROM orders
WHERE create_time >= '2023-05-01 00:00:00'
AND create_time < '2023-05-02 00:00:00';
5. 部署与运维
5.1 生产环境配置
推荐服务器规格:
- CPU: 2核以上
- 内存: 4GB+
- 磁盘: 50GB SSD
- 带宽: 5Mbps+
关键JVM参数:
code复制-Xms512m -Xmx1024m -XX:+UseG1GC
-XX:MaxGCPauseMillis=200
5.2 监控方案
- 使用Spring Boot Actuator暴露健康检查端点
- Prometheus + Grafana监控体系:
- 应用指标:QPS、响应时间、错误率
- 系统指标:CPU、内存、磁盘IO
- 日志收集:ELK Stack处理业务日志
6. 开发经验总结
6.1 典型问题排查
- 并发下单问题:
- 现象:高并发时出现超卖
- 解决方案:采用SELECT FOR UPDATE悲观锁
- 优化后:引入Redis分布式锁
- 定时任务异常:
- 现象:邮件提醒服务偶发失效
- 根因:单机部署时任务重复执行
- 修复:增加ShedLock分布式锁
6.2 值得注意的细节
- 金额计算必须使用BigDecimal,避免浮点精度问题
- 时间处理统一采用UTC时区存储
- 密码加密使用BCrypt算法而非MD5
- 接口设计遵循RESTful规范
这套系统在开发过程中经历了三次架构调整,最终形成的技术方案既满足了毕业设计的要求,也具备了实际商业应用的潜力。特别是在会员积分系统和设备调度算法上的创新,获得了指导老师的高度评价。对于想学习Spring Boot实战的同学,这个项目涵盖了从需求分析到部署上线的完整流程,具有很好的参考价值。
