1. 项目概述:Python+Vue家政服务管理系统实战
去年接手了一个本地家政公司的数字化改造项目,他们原有的纸质派单系统已经严重制约了业务发展。经过技术选型,最终采用Python+Django+Vue.js的技术栈完成了这套前后端分离的家政服务管理系统。系统上线后,客户订单处理效率提升了60%,这里把核心开发经验做个完整复盘。
这个系统主要解决三个核心问题:
- 客户侧:实现服务在线预约、进度追踪和电子支付
- 员工侧:移动端接单、服务记录和路线规划
- 管理侧:订单统计、人员调度和财务对账
2. 技术架构设计
2.1 后端技术选型
选择Django而非Flask的主要考虑:
- 内置Admin后台能快速搭建管理界面(省去70%基础CRUD开发量)
- ORM对MySQL的完美支持(家政业务多为结构化数据)
- 完善的权限管理模块(适合多角色系统)
python复制# settings.py关键配置示例
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'housekeeping',
'USER': 'admin',
'PASSWORD': 'ComplexPwd@123',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'} # 支持emoji表情存储
}
}
# 使用django-rest-framework-jwt做认证
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
)
}
踩坑提醒:MySQL必须配置utf8mb4字符集,否则客户地址中的生僻字和手机端输入的emoji都会导致存储异常
2.2 前端架构设计
采用Vue3+TypeScript的组合带来三大优势:
- Composition API使业务逻辑更聚合(如将订单相关所有逻辑放在useOrder.ts)
- Element Plus的表格组件完美支持百万级数据渲染
- Vite的本地开发热更新速度比Webpack快3倍以上
javascript复制// 典型API请求封装示例
const fetchOrderList = async (params: OrderQueryParams) => {
try {
const res = await axios.get('/api/orders/', {
params,
timeout: 10000 // 重要:设置超时避免界面卡死
})
return res.data
} catch (err) {
showErrorToast('获取订单列表失败')
console.error('API Error:', err)
throw err
}
}
3. 核心功能实现
3.1 服务预约流程
关键技术点:
- 服务时间冲突检测算法
- 基于地理位置的员工智能分配
- 微信/支付宝支付沙箱对接
python复制# 时间冲突检测核心逻辑
def check_time_conflict(new_order):
existing_orders = Order.objects.filter(
worker=new_order.worker,
service_date=new_order.service_date,
status__in=['pending', 'confirmed']
)
for order in existing_orders:
if not (new_order.end_time <= order.start_time
or new_order.start_time >= order.end_time):
raise ValidationError("该时段已有预约订单")
经验之谈:时间比较一定要用<=和>=,否则边界情况会出现1分钟的间隙冲突
3.2 员工调度看板
实现效果:
- 实时显示员工位置(集成高德地图JS API)
- 拖拽方式调整服务路线
- 自动计算最优路径(使用Dijkstra算法)
python复制# 路径规划算法简化版
def calculate_route(current_location, orders):
locations = [current_location] + [o.address for o in orders]
graph = build_distance_graph(locations)
return dijkstra(graph, 0) # 从当前位置开始
4. 性能优化实践
4.1 数据库优化
-
为常用查询字段添加索引:
python复制class Order(models.Model): customer = models.ForeignKey(User, on_delete=models.CASCADE, db_index=True) service_date = models.DateField(db_index=True) -
使用select_related减少查询次数:
python复制orders = Order.objects.select_related('customer', 'worker').filter(...)
4.2 缓存策略
采用三级缓存体系:
- 热点数据用Redis缓存(如服务价格表)
- 复杂查询结果用Memcached
- 前端静态资源用CDN加速
python复制# Django缓存装饰器示例
@cache_page(60 * 15) # 缓存15分钟
@cache_control(private=True)
def service_price_list(request):
...
5. 部署方案
5.1 服务器配置
推荐配置:
- 2核4G云服务器(实测可支撑500+并发)
- Ubuntu 20.04 LTS
- MySQL 8.0 + Redis 6.x
5.2 部署流程
-
使用Gunicorn作为WSGI服务器:
bash复制gunicorn --workers=4 --bind=0.0.0.0:8000 core.wsgi:application -
Nginx关键配置:
nginx复制location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static/ { alias /var/www/static/; expires 30d; }
6. 典型问题排查
6.1 微信支付回调失败
症状:支付成功后订单状态未更新
排查步骤:
- 检查Nginx日志是否有POST请求
- 验证签名算法是否正确
- 测试服务器是否能访问微信API
最终发现是云服务器防火墙未开放443端口
6.2 移动端定位偏差
症状:iOS设备获取的坐标偏移500米+
解决方案:
- 接入高德地图SDK的坐标转换接口
- 增加手动确认地址环节
- 建立地址纠错机制
7. 项目演进方向
- 正在开发员工APP(React Native跨平台方案)
- 计划接入智能客服(基于NLP的工单分类)
- 考虑增加BI数据分析模块
这个项目让我深刻体会到:好的管理系统必须紧扣业务场景。比如我们最初设计的复杂评价体系,实际运营中发现90%客户只会打星不写评价,后来简化为五星评分+可选标签的方式,提交率立刻提升到65%。