【Java】智能家居管理系统 SpringBoot+Vue框架 计算机毕业设计项目 Idea+Navicat+MySQL安装 附源码+文档+讲解

41 阅读5分钟

一、个人简介

💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊

二、系统介绍

开发语言:Java+Python 数据库:MySQL 系统架构:B/S 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django 前端:Vue+HTML+CSS+JavaScript+jQuery

智能家居管理系统是一款基于B/S架构的综合性家居管理平台,采用Spring Boot框架作为后端支撑,结合Vue前端技术与MySQL数据库实现数据持久化存储。该系统涵盖了智能家居设备的全生命周期管理,从家居分类、信息录入、在线购买到远程控制与智能连接,为用户提供一站式管理服务。系统特别设计了完善的售后服务模块,包括家居报修、维修员管理、报修安排、接单处理、维修反馈及用户评价等环节,形成闭环式服务流程。同时集成了留言反馈、交流论坛等社区功能,用户可以在论坛中分享使用心得、讨论家居方案,管理员通过论坛分类管理与举报记录管理维护良好的交流环境。系统针对不同角色设置了差异化权限,普通用户可以购买设备、提交报修、参与论坛互动,维修员负责接单处理与反馈,管理员则统筹整个平台的运营与维护,实现了智能家居设备从采购到维护的全流程数字化管理。

三、视频解说

智能家居管理系统

四、部分功能展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、部分代码展示


/**
 * 家居报修管理 - 提交报修申请
 * 处理用户提交的家居设备报修请求,包括参数校验、设备状态检查、工单生成等业务逻辑
 */
@PostMapping("/submitRepair")
public Result submitRepair(@RequestBody RepairOrder repairOrder, HttpSession session) {
    User currentUser = (User) session.getAttribute("user");
    if (currentUser == null) {
        return Result.error("用户未登录");
    }
    
    // 校验报修的家居设备是否属于当前用户
    HomeDevice device = homeDeviceMapper.selectById(repairOrder.getDeviceId());
    if (device == null) {
        return Result.error("设备不存在");
    }
    if (!device.getUserId().equals(currentUser.getId())) {
        return Result.error("无权对该设备提交报修");
    }
    
    // 检查该设备是否有未完成的报修单
    QueryWrapper<RepairOrder> wrapper = new QueryWrapper<>();
    wrapper.eq("device_id", repairOrder.getDeviceId())
           .in("status", Arrays.asList(0, 1, 2)); // 0待分配 1已分配 2维修中
    RepairOrder existingOrder = repairOrderMapper.selectOne(wrapper);
    if (existingOrder != null) {
        return Result.error("该设备存在进行中的报修单,请勿重复提交");
    }
    
    // 填充报修单基本信息
    repairOrder.setUserId(currentUser.getId());
    repairOrder.setUserName(currentUser.getUsername());
    repairOrder.setUserPhone(currentUser.getPhone());
    repairOrder.setDeviceName(device.getDeviceName());
    repairOrder.setDeviceCategory(device.getCategoryName());
    repairOrder.setStatus(0); // 待分配
    repairOrder.setCreateTime(new Date());
    repairOrder.setOrderNo("RO" + System.currentTimeMillis() + RandomUtil.randomNumbers(4));
    
    // 根据设备分类和故障描述进行优先级评估
    String faultDesc = repairOrder.getFaultDescription().toLowerCase();
    if (faultDesc.contains("漏电") || faultDesc.contains("漏水") || faultDesc.contains("冒烟")) {
        repairOrder.setPriority(3); // 高优先级
    } else if (faultDesc.contains("无法启动") || faultDesc.contains("完全失效")) {
        repairOrder.setPriority(2); // 中优先级
    } else {
        repairOrder.setPriority(1); // 普通优先级
    }
    
    // 保存报修单到数据库
    int insertResult = repairOrderMapper.insert(repairOrder);
    if (insertResult > 0) {
        // 更新设备状态为报修中
        device.setRepairStatus(1);
        homeDeviceMapper.updateById(device);
        
        // 记录操作日志
        SystemLog log = new SystemLog();
        log.setUserId(currentUser.getId());
        log.setOperation("提交报修");
        log.setDetails("设备:" + device.getDeviceName() + ",工单号:" + repairOrder.getOrderNo());
        log.setCreateTime(new Date());
        systemLogMapper.insert(log);
        
        return Result.success("报修申请提交成功,工单号:" + repairOrder.getOrderNo());
    }
    return Result.error("提交失败,请重试");
}

/**
 * 报修安排管理 - 分配维修员
 * 管理员将报修工单分配给合适的维修员,考虑维修员技能、工作负荷等因素
 */
@PostMapping("/assignRepairman")
public Result assignRepairman(@RequestParam Long orderId, @RequestParam Long repairmanId, HttpSession session) {
    User admin = (User) session.getAttribute("user");
    if (admin == null || admin.getRole() != 1) {
        return Result.error("无权限操作");
    }
    
    // 查询报修单详情
    RepairOrder order = repairOrderMapper.selectById(orderId);
    if (order == null) {
        return Result.error("报修单不存在");
    }
    if (order.getStatus() != 0) {
        return Result.error("该报修单已分配或已完成,无法重复分配");
    }
    
    // 查询维修员信息并验证
    Repairman repairman = repairmanMapper.selectById(repairmanId);
    if (repairman == null) {
        return Result.error("维修员不存在");
    }
    if (repairman.getStatus() != 1) {
        return Result.error("该维修员当前不可用");
    }
    
    // 检查维修员技能是否匹配设备分类
    String[] skills = repairman.getSkillCategories().split(",");
    boolean skillMatched = false;
    for (String skill : skills) {
        if (skill.equals(order.getDeviceCategory())) {
            skillMatched = true;
            break;
        }
    }
    if (!skillMatched) {
        return Result.error("维修员技能与设备分类不匹配");
    }
    
    // 查询维修员当前未完成工单数量
    QueryWrapper<RepairOrder> workloadWrapper = new QueryWrapper<>();
    workloadWrapper.eq("repairman_id", repairmanId)
                   .in("status", Arrays.asList(1, 2));
    Long currentWorkload = repairOrderMapper.selectCount(workloadWrapper);
    if (currentWorkload >= 5) {
        return Result.error("该维修员当前工单较多,建议分配给其他维修员");
    }
    
    // 更新报修单分配信息
    order.setRepairmanId(repairmanId);
    order.setRepairmanName(repairman.getName());
    order.setRepairmanPhone(repairman.getPhone());
    order.setStatus(1); // 已分配
    order.setAssignTime(new Date());
    order.setAssignBy(admin.getUsername());
    
    int updateResult = repairOrderMapper.updateById(order);
    if (updateResult > 0) {
        // 创建报修安排记录
        RepairAssignment assignment = new RepairAssignment();
        assignment.setOrderId(orderId);
        assignment.setOrderNo(order.getOrderNo());
        assignment.setRepairmanId(repairmanId);
        assignment.setAssignBy(admin.getId());
        assignment.setAssignTime(new Date());
        assignment.setExpectedTime(calculateExpectedTime(order.getPriority()));
        repairAssignmentMapper.insert(assignment);
        
        // 更新维修员工单统计
        repairman.setTotalOrders(repairman.getTotalOrders() + 1);
        repairmanMapper.updateById(repairman);
        
        return Result.success("分配成功");
    }
    return Result.error("分配失败");
}

/**
 * 远程控制管理 - 执行设备控制指令
 * 用户对已连接的智能家居设备发送控制命令,实现远程开关、调节等操作
 */
@PostMapping("/controlDevice")
public Result controlDevice(@RequestParam Long deviceId, @RequestParam String action, 
                           @RequestParam(required = false) String params, HttpSession session) {
    User currentUser = (User) session.getAttribute("user");
    if (currentUser == null) {
        return Result.error("用户未登录");
    }
    
    // 查询设备并验证权限
    HomeDevice device = homeDeviceMapper.selectById(deviceId);
    if (device == null) {
        return Result.error("设备不存在");
    }
    if (!device.getUserId().equals(currentUser.getId())) {
        return Result.error("无权控制该设备");
    }
    
    // 检查设备连接状态
    if (device.getConnectionStatus() != 1) {
        return Result.error("设备未连接,无法执行控制");
    }
    if (device.getRepairStatus() == 1) {
        return Result.error("设备报修中,暂时无法控制");
    }
    
    // 验证控制指令合法性
    List<String> allowedActions = Arrays.asList("power_on", "power_off", "adjust", "mode_switch", "timer_set");
    if (!allowedActions.contains(action)) {
        return Result.error("不支持的控制指令");
    }
    
    // 构建控制命令对象
    ControlCommand command = new ControlCommand();
    command.setDeviceId(deviceId);
    command.setDeviceType(device.getDeviceType());
    command.setAction(action);
    command.setParams(params);
    command.setCommandId("CMD" + System.currentTimeMillis());
    
    // 根据设备类型和动作执行特定逻辑
    String executeResult = "";
    if ("power_on".equals(action) || "power_off".equals(action)) {
        device.setPowerStatus("power_on".equals(action) ? 1 : 0);
        executeResult = deviceControlService.executePowerControl(command);
    } else if ("adjust".equals(action)) {
        // 解析调节参数(如温度、亮度等)
        if (params == null || params.isEmpty()) {
            return Result.error("调节操作需要提供参数");
        }
        JSONObject paramJson = JSONObject.parseObject(params);
        Integer value = paramJson.getInteger("value");
        if (value == null) {
            return Result.error("参数格式错误");
        }
        // 根据设备类型验证参数范围
        if ("空调".equals(device.getCategoryName()) && (value < 16 || value > 30)) {
            return Result.error("温度设置范围为16-30度");
        }
        executeResult = deviceControlService.executeAdjustment(command);
    } else if ("mode_switch".equals(action)) {
        executeResult = deviceControlService.executeModeSwitch(command);
    }
    
    // 更新设备状态
    device.setLastControlTime(new Date());
    homeDeviceMapper.updateById(device);
    
    // 记录控制历史
    ControlHistory history = new ControlHistory();
    history.setUserId(currentUser.getId());
    history.setDeviceId(deviceId);
    history.setAction(action);
    history.setParams(params);
    history.setExecuteResult(executeResult);
    history.setExecuteTime(new Date());
    controlHistoryMapper.insert(history);
    
    return Result.success("控制指令已发送", executeResult);
}

// 辅助方法:根据优先级计算预期完成时间
private Date calculateExpectedTime(Integer priority) {
    Calendar calendar = Calendar.getInstance();
    if (priority == 3) {
        calendar.add(Calendar.HOUR, 4); // 高优先级4小时
    } else if (priority == 2) {
        calendar.add(Calendar.HOUR, 24); // 中优先级1天
    } else {
        calendar.add(Calendar.HOUR, 48); // 普通优先级2天
    }
    return calendar.getTime();
}


六、部分文档展示

在这里插入图片描述

七、END

💕💕文末获取源码联系计算机编程果茶熊