1. 项目背景与核心价值
家政服务预约系统是近年来"互联网+生活服务"领域的典型应用。随着城市生活节奏加快,双职工家庭占比提升,专业化的保洁、育儿、养老等家政服务需求呈现爆发式增长。传统电话预约方式存在服务不透明、响应不及时、管理混乱等问题,而基于SpringBoot的在线预约系统能有效解决这些痛点。
这个毕业设计项目实现了一个完整的B/S架构家政服务平台,包含用户端微信小程序、服务人员APP和管理后台三个子系统。系统采用SpringBoot+MyBatis主流技术栈,整合了微信支付、地图API等第三方服务,具有较高的商业落地价值。对于计算机专业学生而言,该项目涵盖了企业级应用开发的完整技术链条,是检验综合能力的优质选题。
2. 系统架构设计
2.1 技术选型分析
后端技术栈:
- SpringBoot 2.7.x:简化配置,快速构建微服务
- MyBatis-Plus 3.5.x:增强型ORM框架,减少SQL编写
- Redis 6.x:缓存热点数据,提升并发性能
- RabbitMQ 3.9.x:异步处理订单状态变更
- Swagger 3.0:API文档自动化生成
前端技术栈:
- 微信小程序:Uniapp框架,跨平台开发
- 管理后台:Vue3+Element Plus
- 服务端APP:Android原生开发
数据库设计:
sql复制CREATE TABLE `service_order` (
`id` bigint NOT NULL AUTO_INCREMENT,
`order_no` varchar(32) NOT NULL COMMENT '订单编号',
`user_id` bigint NOT NULL,
`worker_id` bigint DEFAULT NULL,
`service_type` tinyint NOT NULL COMMENT '1保洁 2育儿 3养老',
`appointment_time` datetime NOT NULL,
`address` varchar(255) NOT NULL,
`status` tinyint DEFAULT '0' COMMENT '0待支付 1已预约 2服务中 3已完成',
`price` decimal(10,2) NOT NULL,
`create_time` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_order_no` (`order_no`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.2 微服务拆分方案
系统采用领域驱动设计(DDD)思想,将核心业务拆分为三个微服务:
- 用户中心服务:处理注册登录、个人信息管理
- 订单服务:负责预约流程、状态管理
- 调度服务:智能匹配服务人员
每个服务独立数据库,通过Spring Cloud OpenFeign实现服务间通信。这种架构既保证了业务独立性,又便于后期扩展。
3. 核心功能实现
3.1 智能预约调度算法
系统核心难点在于服务人员的智能调度,我们实现了基于地理位置和评价体系的匹配算法:
java复制public List<Worker> matchWorkers(Order order) {
// 1. 半径5公里内的可用人员
List<Worker> areaWorkers = workerMapper.selectAvailableWorkers(
order.getLatitude(),
order.getLongitude(),
5,
order.getServiceType(),
order.getAppointmentTime()
);
// 2. 按评分排序
return areaWorkers.stream()
.sorted(Comparator.comparing(Worker::getRating).reversed())
.limit(10)
.collect(Collectors.toList());
}
3.2 微信支付集成
支付模块采用微信支付V3接口,关键流程包括:
- 前端调起支付参数生成
- 支付结果异步通知处理
- 订单状态同步更新
支付成功后的状态变更通过RabbitMQ异步处理,避免长事务:
java复制@Transactional
public void handlePaySuccess(String orderNo) {
orderMapper.updateStatus(orderNo, OrderStatus.PAID);
rabbitTemplate.convertAndSend(
"order.event.exchange",
"order.paid",
orderNo
);
}
3.3 实时消息推送
采用WebSocket实现三类实时通知:
- 用户端:服务确认、进度提醒
- 服务端:新订单提醒、日程变更
- 管理端:异常订单预警
java复制@ServerEndpoint("/ws/{userId}")
@Component
public class WebSocketServer {
@OnOpen
public void onOpen(Session session, @PathParam("userId") Long userId) {
sessions.put(userId, session);
}
public static void sendMessage(Long userId, String message) {
Session session = sessions.get(userId);
if(session != null) {
session.getAsyncRemote().sendText(message);
}
}
}
4. 系统安全设计
4.1 认证与授权
采用JWT+Spring Security实现安全控制:
java复制@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/auth/**").permitAll()
.antMatchers("/api/user/**").hasRole("USER")
.antMatchers("/api/worker/**").hasRole("WORKER")
.anyRequest().authenticated()
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager()));
}
}
4.2 数据安全措施
- 敏感字段加密:手机号、地址等采用AES加密存储
- SQL注入防护:MyBatis使用预编译语句
- XSS防护:Jackson配置HTML转义
- 定期备份:RDS自动备份+OSS归档
5. 性能优化实践
5.1 缓存策略设计
采用多级缓存架构:
- 本地缓存(Caffeine):高频访问的配置数据
- Redis缓存:热点业务数据
- 数据库缓存:常用查询结果缓存
java复制@Cacheable(value = "serviceTypes", key = "#root.methodName")
public List<ServiceType> getAllServiceTypes() {
return serviceTypeMapper.selectAll();
}
5.2 数据库优化
- 索引优化:为所有查询条件建立合适索引
- 读写分离:主库写,从库读
- 分表策略:订单表按月分表
- 慢SQL监控:通过Druid监控并优化
6. 部署方案
6.1 容器化部署
使用Docker Compose编排服务:
yaml复制version: '3'
services:
user-service:
image: registry.example.com/housekeeping/user:v1.0
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- redis
- mysql
redis:
image: redis:6-alpine
ports:
- "6379:6379"
6.2 监控方案
- Prometheus + Grafana监控系统指标
- SkyWalking实现分布式追踪
- ELK日志收集分析
- 企业微信机器人告警
7. 开发经验总结
7.1 典型问题解决
问题1:微信支付签名失败
- 原因:V3接口要求使用商户API证书
- 解决:正确配置证书路径,注意证书序列号获取方式
问题2:高并发下订单状态不一致
- 现象:多个支付回调导致订单重复处理
- 方案:使用数据库乐观锁+分布式锁双重保障
java复制@Transactional
public boolean updateOrderStatus(Long orderId, Integer expectStatus, Integer newStatus) {
int rows = orderMapper.updateStatusWithVersion(
orderId,
expectStatus,
newStatus,
getCurrentVersion()
);
return rows > 0;
}
7.2 项目扩展建议
- 增加智能客服:集成NLP引擎处理常见咨询
- 实现动态定价:基于供需关系的价格浮动
- 开发评价系统:自然语言情感分析
- 加入会员体系:积分兑换和等级特权
提示:毕业设计答辩时应重点展示技术难点解决方案,建议准备系统架构图、ER图和核心算法流程图等可视化材料。