在高校宿舍、青年公寓等集体居住环境中,公共洗衣服务长期面临设备使用效率低、排队时间长、支付方式单一等痛点。传统模式下,用户无法实时了解洗衣机状态,经常出现设备闲置与排队等待并存的现象。为解决这一实际问题,设计并实现了基于SSM(Spring + Spring MVC + MyBatis)框架的智能洗衣服务管理系统,通过线上化服务整合分散的洗衣机资源,实现设备状态的透明化管理和智能化预约。
系统采用分层架构设计,前端使用HTML、CSS和JavaScript构建用户界面,后端基于Java EE技术栈,通过Maven进行项目管理。Spring框架负责业务对象管理和事务控制,Spring MVC处理Web请求路由,MyBatis作为数据持久层框架操作MySQL数据库。系统支持用户注册登录、洗衣机状态查询、在线预约、订单管理、支付结算等核心功能,同时为管理员提供设备监控、订单查询、数据统计等管理功能。
系统架构与技术栈
系统采用典型的三层架构模式,将表现层、业务逻辑层和数据持久层进行分离,确保系统的高内聚低耦合。Spring框架的IoC容器负责管理各层组件之间的依赖关系,通过依赖注入实现组件解耦。Spring MVC作为Web层框架,采用前端控制器模式,通过DispatcherServlet统一接收HTTP请求,根据@RequestMapping注解将请求分发给对应的Controller处理。
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
@RequestMapping("/create")
@ResponseBody
public Map<String, Object> createOrder(@RequestBody Order order) {
Map<String, Object> result = new HashMap<>();
try {
orderService.createOrder(order);
result.put("success", true);
result.put("message", "订单创建成功");
} catch (Exception e) {
result.put("success", false);
result.put("message", "订单创建失败:" + e.getMessage());
}
return result;
}
}
业务逻辑层由Spring的@Service组件实现,负责处理复杂的业务规则和事务管理。通过@Transactional注解声明事务边界,确保数据操作的一致性。
@Service
@Transactional
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private WashingMachineMapper machineMapper;
@Override
public void createOrder(Order order) {
// 检查洗衣机状态
WashingMachine machine = machineMapper.selectById(order.getMachineId());
if (machine.getStatus() != 0) {
throw new RuntimeException("该洗衣机当前不可用");
}
// 更新洗衣机状态为已预约
machine.setStatus(1);
machineMapper.update(machine);
// 创建订单
order.setCreateTime(new Date());
order.setStatus(0);
orderMapper.insert(order);
}
}
数据持久层采用MyBatis框架,通过XML映射文件或注解方式定义SQL语句,实现对象关系映射。MyBatis的动态SQL功能支持根据不同条件构建灵活的查询语句。
<!-- OrderMapper.xml -->
<mapper namespace="com.laundry.mapper.OrderMapper">
<select id="selectByUserId" parameterType="int" resultType="Order">
SELECT * FROM orders
WHERE user_id = #{userId}
<if test="status != null">
AND status = #{status}
</if>
ORDER BY create_time DESC
</select>
<update id="updateStatus">
UPDATE orders SET status = #{status}
WHERE id = #{orderId}
</update>
</mapper>
数据库设计亮点分析
系统数据库包含11张表,涵盖用户管理、设备信息、订单管理、支付记录等核心业务模块。其中订单表(orders)和设备表(washing_machine)的设计体现了系统的业务复杂性。
订单表设计
订单表作为系统的核心业务表,记录了用户预约洗衣服务的完整信息。表结构设计考虑了多种业务场景的需求。
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL COMMENT '用户ID',
machine_id INT NOT NULL COMMENT '洗衣机ID',
appointment_time DATETIME NOT NULL COMMENT '预约时间',
duration INT NOT NULL COMMENT '使用时长(分钟)',
amount DECIMAL(10,2) NOT NULL COMMENT '订单金额',
status TINYINT NOT NULL DEFAULT 0 COMMENT '订单状态:0-待支付 1-已支付 2-进行中 3-已完成 4-已取消',
pay_time DATETIME COMMENT '支付时间',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_time DATETIME NOT NULL COMMENT '更新时间',
FOREIGN KEY (user_id) REFERENCES user(id),
FOREIGN KEY (machine_id) REFERENCES washing_machine(id)
);
订单状态字段采用TINYINT类型,定义了完整的订单生命周期状态机。时间字段的精细划分支持订单流程的精确追踪,为后续的数据分析和统计提供基础。外键约束确保了数据的一致性和完整性。
设备表设计
设备表管理所有洗衣机的静态信息和动态状态,支持设备的精细化管理和状态监控。
CREATE TABLE washing_machine (
id INT PRIMARY KEY AUTO_INCREMENT,
machine_code VARCHAR(50) UNIQUE NOT NULL COMMENT '设备编码',
building_id INT NOT NULL COMMENT '所在楼栋ID',
floor_id INT NOT NULL COMMENT '所在楼层ID',
type_id INT NOT NULL COMMENT '设备类型ID',
status TINYINT NOT NULL DEFAULT 0 COMMENT '设备状态:0-空闲 1-已预约 2-使用中 3-故障',
current_order_id INT COMMENT '当前订单ID',
last_maintenance_date DATE COMMENT '最后维护日期',
create_time DATETIME NOT NULL COMMENT '创建时间',
FOREIGN KEY (building_id) REFERENCES building(id),
FOREIGN KEY (floor_id) REFERENCES floor(id),
FOREIGN KEY (type_id) REFERENCES machine_type(id)
);
设备状态管理是系统的核心功能,状态字段实时反映设备的可用性。current_order_id字段建立了设备与订单的关联,支持快速查询设备当前的使用情况。维护日期字段为设备保养提供数据支持,确保服务的可靠性。

核心功能实现解析
实时设备状态查询与预约
系统首页展示所有洗衣机的实时状态,用户可根据楼栋、楼层等条件筛选设备。设备状态通过颜色编码直观显示:绿色表示空闲、黄色表示已预约、红色表示使用中、灰色表示故障。
@Service
public class WashingMachineServiceImpl implements WashingMachineService {
@Override
public List<MachineVO> getAvailableMachines(Integer buildingId, Integer floorId) {
Map<String, Object> params = new HashMap<>();
if (buildingId != null) {
params.put("buildingId", buildingId);
}
if (floorId != null) {
params.put("floorId", floorId);
}
params.put("status", 0); // 只查询空闲设备
List<WashingMachine> machines = machineMapper.selectByConditions(params);
return machines.stream().map(this::convertToVO).collect(Collectors.toList());
}
private MachineVO convertToVO(WashingMachine machine) {
MachineVO vo = new MachineVO();
vo.setId(machine.getId());
vo.setMachineCode(machine.getMachineCode());
vo.setStatus(machine.getStatus());
vo.setBuildingName(buildingMapper.selectById(machine.getBuildingId()).getName());
vo.setFloorNumber(floorMapper.selectById(machine.getFloorId()).getFloorNumber());
return vo;
}
}
前端通过Ajax定时轮询或WebSocket连接实时更新设备状态,确保用户看到的信息与实际情况一致。

智能预约与冲突检测
预约功能包含复杂的时间冲突检测逻辑,防止同一时间段内多个用户预约同一台设备。系统支持选择预约时长,并根据设备类型自动计算费用。
@Service
public class BookingServiceImpl implements BookingService {
@Override
public BookingResult bookMachine(BookingRequest request) {
// 检查设备是否存在且可用
WashingMachine machine = machineMapper.selectById(request.getMachineId());
if (machine == null) {
return BookingResult.error("设备不存在");
}
if (machine.getStatus() != 0) {
return BookingResult.error("设备当前不可用");
}
// 检查时间冲突
if (hasTimeConflict(request.getMachineId(), request.getAppointmentTime(), request.getDuration())) {
return BookingResult.error("该时间段已被预约");
}
// 创建预约记录
Order order = new Order();
order.setUserId(request.getUserId());
order.setMachineId(request.getMachineId());
order.setAppointmentTime(request.getAppointmentTime());
order.setDuration(request.getDuration());
order.setAmount(calculateAmount(request.getDuration(), machine.getTypeId()));
orderMapper.insert(order);
// 更新设备状态
machine.setStatus(1);
machine.setCurrentOrderId(order.getId());
machineMapper.update(machine);
return BookingResult.success("预约成功", order.getId());
}
private boolean hasTimeConflict(Integer machineId, Date appointmentTime, Integer duration) {
Date endTime = DateUtils.addMinutes(appointmentTime, duration);
return orderMapper.countConflictOrders(machineId, appointmentTime, endTime) > 0;
}
}

订单管理与状态追踪
订单管理模块提供完整的订单生命周期管理,用户可查看历史订单、当前订单详情,并支持订单取消等操作。
@Controller
@RequestMapping("/user/order")
public class UserOrderController {
@RequestMapping("/list")
public String orderList(Model model, HttpSession session) {
Integer userId = (Integer) session.getAttribute("userId");
List<Order> orders = orderService.getOrdersByUserId(userId);
List<OrderVO> orderVOS = orders.stream().map(order -> {
OrderVO vo = new OrderVO();
vo.setOrder(order);
vo.setMachine(machineMapper.selectById(order.getMachineId()));
return vo;
}).collect(Collectors.toList());
model.addAttribute("orders", orderVOS);
return "user/order_list";
}
@RequestMapping("/cancel")
@ResponseBody
public Map<String, Object> cancelOrder(@RequestParam Integer orderId) {
return orderService.cancelOrder(orderId);
}
}
订单状态实时更新,用户可清晰了解订单当前所处阶段:待支付、已支付、进行中、已完成或已取消。

管理员设备监控功能
管理员后台提供完整的设备监控界面,可实时查看所有设备状态、使用统计和故障信息。支持设备信息的增删改查和状态手动调整。
@Controller
@RequestMapping("/admin/machine")
public class AdminMachineController {
@RequestMapping("/dashboard")
public String dashboard(Model model) {
// 获取设备统计信息
MachineStats stats = machineService.getMachineStats();
model.addAttribute("stats", stats);
// 获取设备列表
List<MachineDetailVO> machines = machineService.getAllMachinesWithDetail();
model.addAttribute("machines", machines);
return "admin/machine_dashboard";
}
@RequestMapping("/updateStatus")
@ResponseBody
public Map<String, Object> updateStatus(@RequestParam Integer machineId,
@RequestParam Integer status) {
return machineService.updateMachineStatus(machineId, status);
}
}

实体模型与业务逻辑
系统实体模型围绕核心业务对象构建,包括用户(User)、设备(WashingMachine)、订单(Order)、楼栋(Building)、楼层(Floor)等。实体间的关系通过外键维护,确保数据一致性。
用户实体包含基本信息、账户余额和注册时间等字段,支持用户身份验证和权限管理。
public class User {
private Integer id;
private String username;
private String password;
private String phone;
private String email;
private BigDecimal balance;
private Integer status; // 0-正常 1-禁用
private Date createTime;
private Date updateTime;
// getter和setter方法
}
设备类型实体定义不同类型洗衣机的特性和收费标准,支持系统的扩展性。
public class MachineType {
private Integer id;
private String typeName; // 如"滚筒洗衣机","波轮洗衣机"
private String description;
private BigDecimal pricePerMinute; // 每分钟费用
private Integer maxDuration; // 最大使用时长
private String specifications; // 技术规格
}
功能优化与发展展望
基于现有系统架构和业务需求,可从以下几个方向进行功能扩展和性能优化:
智能推荐算法:基于用户历史使用数据和实时设备状态,开发智能推荐系统。通过协同过滤算法分析用户使用习惯,推荐最合适的设备和时间段。实现思路包括收集用户行为数据,建立用户画像模型,设计推荐算法接口。
物联网设备集成:通过物联网技术实现洗衣机的远程控制和状态监控。为洗衣机加装智能模块,实时上传运行状态、剩余时间等信息。技术实现需要设计设备通信协议,开发数据接收服务,建立设备管理平台。
移动端应用开发:开发原生移动应用,提供更便捷的用户体验。采用React Native或Flutter跨平台框架,复用部分业务逻辑。需要设计移动端UI组件,实现与后端API的对接。
数据分析与报表系统:构建数据分析平台,为运营决策提供支持。使用ELK栈或类似技术实现数据可视化,分析设备使用率、高峰时段、用户行为等指标。需要设计数据仓库模型,开发ETL流程和报表生成功能。
微服务架构重构:随着业务规模扩大,可将单体应用重构为微服务架构。按业务域拆分服务,如用户服务、设备服务、订单服务等。使用Spring Cloud技术栈实现服务治理、配置管理和链路追踪。
支付系统增强:集成多种支付方式,支持会员卡、优惠券等营销工具。需要设计支付网关接口,实现交易对账和资金管理功能。
系统通过SSM框架的合理运用,实现了高内聚低耦合的架构设计,为后续功能扩展和技术升级奠定了坚实基础。分层架构确保了代码的可维护性,模块化设计支持功能的灵活组合,为智能洗衣服务的持续优化提供技术保障。