一、个人简介
💖💖作者:计算机编程果茶熊
💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💕💕文末获取源码联系计算机编程果茶熊
二、前言
开发语言:Java+Python
数据库:MySQL
系统架构:B/S
后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django
前端:Vue+HTML+CSS+JavaScript+jQuery
《家政服务网站系统》是一套完整的家政服务管理解决方案,采用B/S架构,支持Java和Python双版本实现。Java版基于Spring Boot(Spring+SpringMVC+Mybatis)框架开发,Python版则使用Django框架,前端统一采用Vue+ElementUI+HTML技术栈,数据库选用MySQL。系统功能全面,包括会员管理、服务人员管理、会员等级管理、服务类型管理、家政信息管理、服务下单管理、服务接单管理、服务费用管理、服务评价管理、服务投诉管理、问卷调查管理及问卷调查题管理等十二大核心模块,实现了从用户注册、服务人员录入、服务发布到订单处理、评价反馈的完整业务流程。该系统通过前后端分离的开发模式,确保了界面美观与功能稳定性,同时为家政服务提供商提供了高效的业务管理平台,使家政服务供需双方能够便捷地进行信息交流、服务匹配和质量监督,有效提升了家政服务的数字化管理水平和用户体验。
三、家政服务网站系统-视频解说
毕设没思路?《家政服务网站设计与开发》手把手教学,从需求分析到代码实现|计算机毕业设计
四、家政服务网站系统-功能介绍
以下仅展示部分功能:
1.前台首页
2.前台家政信息列表
3.前台家政服务推荐
4.前台公告信息
5.前台个人信息
6.前台问卷调查
7.前台登录页
8.后台家政服务员系统页面
9.后台管理员首页
10.后台管理员问卷调查题管理
五、家政服务网站系统-代码展示
以下仅展示部分代码:
// 核心功能1: 服务下单管理
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private ServiceInfoMapper serviceInfoMapper;
@Autowired
private MemberMapper memberMapper;
@Transactional
public ResponseResult placeOrder(OrderDTO orderDTO) {
// 验证会员信息
Member member = memberMapper.selectById(orderDTO.getMemberId());
if (member == null) {
return ResponseResult.error("会员不存在");
}
// 验证服务信息
ServiceInfo serviceInfo = serviceInfoMapper.selectById(orderDTO.getServiceId());
if (serviceInfo == null) {
return ResponseResult.error("所选服务不存在");
}
// 检查服务是否可用
if (serviceInfo.getStatus() != 1) {
return ResponseResult.error("该服务暂不可用");
}
// 计算服务费用
BigDecimal totalFee = calculateOrderFee(serviceInfo, orderDTO.getServiceHours(), member.getMemberLevel());
// 创建订单
Order order = new Order();
order.setOrderNo(generateOrderNo());
order.setMemberId(orderDTO.getMemberId());
order.setServiceId(orderDTO.getServiceId());
order.setServiceAddress(orderDTO.getAddress());
order.setContactPhone(orderDTO.getContactPhone());
order.setServiceTime(orderDTO.getServiceTime());
order.setServiceHours(orderDTO.getServiceHours());
order.setRequirements(orderDTO.getRequirements());
order.setTotalFee(totalFee);
order.setStatus(OrderStatusEnum.WAITING.getCode());
order.setCreateTime(new Date());
// 保存订单
orderMapper.insert(order);
// 更新服务信息的预约次数
serviceInfoMapper.updateOrderCount(orderDTO.getServiceId());
// 发送订单通知
sendOrderNotification(order, serviceInfo);
return ResponseResult.success(order);
}
private BigDecimal calculateOrderFee(ServiceInfo serviceInfo, Integer hours, Integer memberLevel) {
// 基础费用计算
BigDecimal baseFee = serviceInfo.getHourlyRate().multiply(new BigDecimal(hours));
// 会员折扣计算
BigDecimal discount = getMemberDiscount(memberLevel);
// 应用折扣
BigDecimal discountedFee = baseFee.multiply(discount);
// 额外费用计算(如特殊时段、节假日等)
BigDecimal extraFee = calculateExtraFee(serviceInfo, hours);
return discountedFee.add(extraFee).setScale(2, RoundingMode.HALF_UP);
}
}
// 核心功能2: 服务接单管理
@Service
public class ServiceAssignmentImpl implements ServiceAssignmentService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private ServiceStaffMapper staffMapper;
@Autowired
private ServiceAssignmentMapper assignmentMapper;
@Transactional
public ResponseResult assignServiceStaff(Long orderId, Long staffId) {
// 获取订单信息
Order order = orderMapper.selectById(orderId);
if (order == null) {
return ResponseResult.error("订单不存在");
}
// 检查订单状态
if (order.getStatus() != OrderStatusEnum.WAITING.getCode()) {
return ResponseResult.error("该订单状态不允许分配服务人员");
}
// 获取服务人员信息
ServiceStaff staff = staffMapper.selectById(staffId);
if (staff == null) {
return ResponseResult.error("服务人员不存在");
}
// 检查服务人员状态
if (staff.getStatus() != StaffStatusEnum.AVAILABLE.getCode()) {
return ResponseResult.error("该服务人员当前不可用");
}
// 检查服务人员技能是否匹配订单要求
ServiceInfo serviceInfo = serviceInfoMapper.selectById(order.getServiceId());
if (!checkSkillMatch(staff, serviceInfo)) {
return ResponseResult.error("该服务人员技能不匹配订单要求");
}
// 检查服务人员时间是否冲突
if (checkTimeConflict(staffId, order.getServiceTime(), order.getServiceHours())) {
return ResponseResult.error("该服务人员在所选时间段已有其他订单");
}
// 创建服务分配记录
ServiceAssignment assignment = new ServiceAssignment();
assignment.setOrderId(orderId);
assignment.setStaffId(staffId);
assignment.setAssignTime(new Date());
assignment.setStatus(AssignmentStatusEnum.ASSIGNED.getCode());
// 保存分配记录
assignmentMapper.insert(assignment);
// 更新订单状态
order.setStatus(OrderStatusEnum.ASSIGNED.getCode());
orderMapper.updateById(order);
// 更新服务人员状态
staff.setCurrentOrderCount(staff.getCurrentOrderCount() + 1);
staffMapper.updateById(staff);
// 发送通知给服务人员和客户
notifyStaffAndCustomer(order, staff);
return ResponseResult.success("服务人员分配成功");
}
private boolean checkSkillMatch(ServiceStaff staff, ServiceInfo serviceInfo) {
List<StaffSkill> staffSkills = staffSkillMapper.selectByStaffId(staff.getId());
Set<Integer> skillIds = staffSkills.stream()
.map(StaffSkill::getSkillId)
.collect(Collectors.toSet());
// 检查服务所需技能是否都包含在服务人员技能中
List<ServiceSkill> requiredSkills = serviceSkillMapper.selectByServiceId(serviceInfo.getId());
for (ServiceSkill skill : requiredSkills) {
if (!skillIds.contains(skill.getSkillId())) {
return false;
}
}
return true;
}
}
// 核心功能3: 服务评价管理
@Service
public class ServiceEvaluationImpl implements ServiceEvaluationService {
@Autowired
private EvaluationMapper evaluationMapper;
@Autowired
private OrderMapper orderMapper;
@Autowired
private ServiceStaffMapper staffMapper;
@Autowired
private MemberMapper memberMapper;
@Transactional
public ResponseResult submitEvaluation(EvaluationDTO evaluationDTO) {
// 验证订单信息
Order order = orderMapper.selectById(evaluationDTO.getOrderId());
if (order == null) {
return ResponseResult.error("订单不存在");
}
// 检查订单状态是否已完成
if (order.getStatus() != OrderStatusEnum.COMPLETED.getCode()) {
return ResponseResult.error("只能评价已完成的订单");
}
// 检查是否已评价
Evaluation existingEval = evaluationMapper.selectByOrderId(evaluationDTO.getOrderId());
if (existingEval != null) {
return ResponseResult.error("该订单已评价,不能重复评价");
}
// 获取服务人员信息
ServiceAssignment assignment = assignmentMapper.selectByOrderId(order.getId());
if (assignment == null) {
return ResponseResult.error("订单未分配服务人员");
}
// 创建评价记录
Evaluation evaluation = new Evaluation();
evaluation.setOrderId(evaluationDTO.getOrderId());
evaluation.setMemberId(order.getMemberId());
evaluation.setStaffId(assignment.getStaffId());
evaluation.setServiceQualityScore(evaluationDTO.getServiceQualityScore());
evaluation.setAttitudeScore(evaluationDTO.getAttitudeScore());
evaluation.setPunctualityScore(evaluationDTO.getPunctualityScore());
evaluation.setOverallScore(calculateOverallScore(evaluationDTO));
evaluation.setComment(evaluationDTO.getComment());
evaluation.setEvaluationTime(new Date());
// 保存评价
evaluationMapper.insert(evaluation);
// 更新服务人员评分
updateStaffRating(assignment.getStaffId());
// 检查是否需要升级会员等级
checkAndUpdateMemberLevel(order.getMemberId());
// 如果评分较低,创建系统提醒给管理员
if (evaluation.getOverallScore() < 3.0) {
createLowScoreAlert(evaluation);
}
// 如果有差评,记录到服务人员的绩效记录中
if (evaluation.getOverallScore() < 2.0) {
recordStaffPerformanceIssue(assignment.getStaffId(), evaluation);
}
// 发送感谢评价的消息给用户
sendEvaluationThanksMessage(order.getMemberId());
return ResponseResult.success("评价提交成功");
}
private double calculateOverallScore(EvaluationDTO evaluationDTO) {
// 计算综合评分,可以设置不同维度的权重
double serviceQualityWeight = 0.4;
double attitudeWeight = 0.3;
double punctualityWeight = 0.3;
double overallScore = evaluationDTO.getServiceQualityScore() * serviceQualityWeight +
evaluationDTO.getAttitudeScore() * attitudeWeight +
evaluationDTO.getPunctualityScore() * punctualityWeight;
// 保留一位小数
return Math.round(overallScore * 10) / 10.0;
}
}
六、家政服务网站系统-文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊