基于SSM框架的共享洗衣机预约平台 - 源码深度解析

JavaJavaScriptMavenHTMLCSSSSM框架MySQL
2026-03-265 浏览

文章摘要

基于SSM框架的共享洗衣机预约平台,旨在解决高校宿舍、青年公寓等集中居住场景下洗衣设备使用效率低、排队时间长、支付方式单一等核心痛点。该平台通过线上化服务将分散的洗衣机资源整合,用户可随时查看设备状态并远程预约,有效避免了传统模式下因信息不透明造成的资源闲置或争抢冲突,其核心业务价值在于提升了公共洗...

在高校宿舍、青年公寓等集体居住环境中,公共洗衣服务长期面临设备使用效率低、排队时间长、支付方式单一等痛点。传统模式下,用户无法实时了解洗衣机状态,经常出现设备闲置与排队等待并存的现象。为解决这一实际问题,设计并实现了基于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; // 技术规格
}

功能优化与发展展望

基于现有系统架构和业务需求,可从以下几个方向进行功能扩展和性能优化:

  1. 智能推荐算法:基于用户历史使用数据和实时设备状态,开发智能推荐系统。通过协同过滤算法分析用户使用习惯,推荐最合适的设备和时间段。实现思路包括收集用户行为数据,建立用户画像模型,设计推荐算法接口。

  2. 物联网设备集成:通过物联网技术实现洗衣机的远程控制和状态监控。为洗衣机加装智能模块,实时上传运行状态、剩余时间等信息。技术实现需要设计设备通信协议,开发数据接收服务,建立设备管理平台。

  3. 移动端应用开发:开发原生移动应用,提供更便捷的用户体验。采用React Native或Flutter跨平台框架,复用部分业务逻辑。需要设计移动端UI组件,实现与后端API的对接。

  4. 数据分析与报表系统:构建数据分析平台,为运营决策提供支持。使用ELK栈或类似技术实现数据可视化,分析设备使用率、高峰时段、用户行为等指标。需要设计数据仓库模型,开发ETL流程和报表生成功能。

  5. 微服务架构重构:随着业务规模扩大,可将单体应用重构为微服务架构。按业务域拆分服务,如用户服务、设备服务、订单服务等。使用Spring Cloud技术栈实现服务治理、配置管理和链路追踪。

  6. 支付系统增强:集成多种支付方式,支持会员卡、优惠券等营销工具。需要设计支付网关接口,实现交易对账和资金管理功能。

系统通过SSM框架的合理运用,实现了高内聚低耦合的架构设计,为后续功能扩展和技术升级奠定了坚实基础。分层架构确保了代码的可维护性,模块化设计支持功能的灵活组合,为智能洗衣服务的持续优化提供技术保障。

本文关键词
SSM框架共享洗衣机预约平台源码解析Java EE

上下篇

上一篇
没有更多文章
下一篇
没有更多文章