以下为基于Spring Boot的JAVA家政自营O2O同城服务系统核心模块Java代码示例,涵盖微信小程序交互、服务匹配、订单管理、支付集成等关键功能:

1. 用户端微信小程序交互示例(Uniapp)


vue

<!-- 首页服务浏览页面 pages/index/index.vue -->
<template>
  <view class="container">
    <!-- 服务类型筛选 -->
    <scroll-view class="category-scroll" scroll-x>
      <view 
        v-for="(cat,index) in categories" 
        :key="index"
        :class="['category-item', currentCat==index?'active':'']"
        @click="selectCategory(index)"
      >
        {{cat.name}}
      </view>
    </scroll-view>

    <!-- 服务人员卡片列表 -->
    <view class="worker-list">
      <view 
        v-for="worker in filteredWorkers" 
        :key="worker.id"
        class="worker-card"
        @click="selectWorker(worker)"
      >
        <image :src="worker.avatar" class="avatar" />
        <view class="worker-info">
          <text class="name">{{worker.name}} ({{worker.rating}}分)</text>
          <view class="skills">
            <text v-for="skill in worker.skills" class="tag">{{skill}}</text>
          </view>
          <view class="price-row">
            <text class="price">¥{{worker.price}}/小时</text>
            <text class="distance">{{worker.distance}}km</text>
          </view>
        </view>
      </view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      categories: [
        { id: 1, name: '全部服务' },
        { id: 2, name: '保洁服务' },
        { id: 3, name: '维修服务' }
      ],
      currentCat: 0,
      workers: [
        { 
          id: 'W1001', 
          name: '李阿姨', 
          avatar: '/static/worker1.jpg', 
          price: 50, 
          rating: 4.9,
          skills: ['日常保洁', '深度清洁'],
          distance: 2.3
        },
        // 其他服务人员数据...
      ],
      filteredWorkers: []
    }
  },
  methods: {
    selectCategory(index) {
      this.currentCat = index;
      // 根据类型筛选服务人员
      if(index === 0) {
        this.filteredWorkers = this.workers;
      } else {
        const catId = this.categories[index].id;
        this.filteredWorkers = this.workers.filter(worker => 
          worker.category === catId
        );
      }
    },
    selectWorker(worker) {
      uni.navigateTo({
        url: `/pages/booking/booking?workerId=${worker.id}`
      });
    }
  }
}
</script>

2. 后端服务匹配算法示例


java

// 服务匹配服务类
@Service
public class WorkerMatchingService {
    @Autowired
    private WorkerRepository workerRepository;

    public List<Worker> matchWorkers(MatchRequest request) {
        Specification<Worker> spec = (root, query, cb) -> {
            List<Predicate> predicates = new ArrayList<>();
            
            // 位置匹配
            if(request.getLatitude() != null && request.getLongitude() != null) {
                double distance = DistanceCalculator.calculate(
                    request.getLatitude(), 
                    request.getLongitude(),
                    root.get("latitude"),
                    root.get("longitude")
                );
                predicates.add(cb.lessThanOrEqualTo(root.get("serviceRadius"), distance));
            }
            
            // 技能匹配
            if(!CollectionUtils.isEmpty(request.getSkills())) {
                predicates.add(root.get("skills").in(request.getSkills()));
            }
            
            // 评分排序
            query.orderBy(cb.desc(root.get("rating")));
            
            return cb.and(predicates.toArray(new Predicate[0]));
        };
        
        return workerRepository.findAll(spec);
    }
}

// 距离计算工具类
public class DistanceCalculator {
    public static double calculate(double lat1, double lon1, double lat2, double lon2) {
        // 简化版Haversine公式实现
        double R = 6371; // 地球半径千米
        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lon2 - lon1);
        lat1 = Math.toRadians(lat1);
        lat2 = Math.toRadians(lat2);

        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
                   Math.sin(dLon / 2) * Math.sin(dLon / 2) * 
                   Math.cos(lat1) * Math.cos(lat2);
        double c = 2 * Math.asin(Math.sqrt(a));
        return R * c;
    }
}

3. 订单管理控制器示例


java

@RestController
@RequestMapping("/api/order")
public class OrderController {
    
    @Autowired
    private OrderService orderService;
    
    @PostMapping("/create")
    public ResponseEntity<OrderResponse> createOrder(@RequestBody CreateOrderRequest request) {
        // 创建订单逻辑
        Order order = new Order();
        order.setUserId(request.getUserId());
        order.setWorkerId(request.getWorkerId());
        order.setServiceType(request.getServiceType());
        order.setAppointmentTime(request.getAppointmentTime());
        order.setPrice(request.getPrice());
        order.setStatus(OrderStatus.PENDING);
        
        // 保存订单
        Order savedOrder = orderService.createOrder(order);
        
        // 推送通知给服务人员
        notificationService.sendPush(savedOrder.getWorkerId(), "您有新的订单");
        
        return ResponseEntity.ok(new OrderResponse(savedOrder));
    }
    
    @PutMapping("/{orderId}/complete")
    public ResponseEntity<Void> completeOrder(@PathVariable String orderId) {
        // 完成订单逻辑
        orderService.completeOrder(orderId);
        return ResponseEntity.ok().build();
    }
}

// 订单状态枚举
public enum OrderStatus {
    PENDING, // 待接单
    ACCEPTED, // 已接单
    IN_SERVICE, // 服务中
    COMPLETED, // 已完成
    CANCELLED  // 已取消
}

4. 支付集成示例


java

@Service
public class WechatPaymentService {
    
    @Value("${wechat.pay.appid}")
    private String appId;
    
    @Value("${wechat.pay.mch_id}")
    private String mchId;
    
    @Value("${wechat.pay.key}")
    private String apiKey;
    
    public Map<String, String> createPayParams(Order order) throws Exception {
        // 生成预支付订单
        UnifiedOrderRequest request = new UnifiedOrderRequest();
        request.setAppid(appId);
        request.setMch_id(mchId);
        request.setNonce_str(RandomStringUtils.randomAlphanumeric(32));
        request.setBody("家政服务费");
        request.setOut_trade_no(order.getId());
        request.setTotal_fee(order.getPrice().multiply(new BigDecimal(100)).intValue());
        request.setSpbill_create_ip("123.12.12.12");
        request.setTrade_type("JSAPI");
        request.setOpenid(order.getUserId());
        
        // 签名
        request.setSign(generateSignature(request));
        
        // 调用微信支付API
        UnifiedOrderResponse response = wechatPayClient.unifiedOrder(request);
        
        // 生成前端支付参数
        Map<String, String> payParams = new HashMap<>();
        payParams.put("appId", appId);
        payParams.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
        payParams.put("nonceStr", RandomStringUtils.randomAlphanumeric(32));
        payParams.put("package", "prepay_id=" + response.getPrepay_id());
        payParams.put("signType", "MD5");
        payParams.put("paySign", generatePaySignature(payParams));
        
        return payParams;
    }
    
    private String generateSignature(UnifiedOrderRequest request) {
        // 微信支付签名生成逻辑
        // ...
    }
}

5. 评价系统示例


java

@Entity
public class Review {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @ManyToOne
    private User user;
    
    @ManyToOne
    private Worker worker;
    
    @Enumerated(EnumType.ORDINAL)
    private Rating rating; // 1-5星
    
    private String comment;
    
    @Column(updatable = false)
    private Date createTime;
    
    // 计算平均评分
    public static double calculateAverageRating(List<Review> reviews) {
        return reviews.stream()
                      .mapToInt(Review::getRatingValue)
                      .average()
                      .orElse(0);
    }
    
    private int getRatingValue() {
        return rating.ordinal() + 1;
    }
}

// 评价提交控制器
@RestController
@RequestMapping("/api/review")
public class ReviewController {
    
    @PostMapping
    public ResponseEntity<Void> submitReview(@RequestBody ReviewRequest request) {
        Review review = new Review();
        review.setUserId(request.getUserId());
        review.setWorkerId(request.getWorkerId());
        review.setRating(Rating.values()[request.getRating() - 1]);
        review.setComment(request.getComment());
        review.setCreateTime(new Date());
        
        reviewRepository.save(review);
        
        // 更新服务人员评分
        workerService.updateRating(request.getWorkerId());
        
        return ResponseEntity.ok().build();
    }
}

技术架构特点:

  1. 微服务架构:采用Spring Cloud实现服务拆分,支持弹性扩展
  2. 多端适配:Uniapp实现微信小程序/H5/APP三端统一开发
  3. 实时定位匹配:基于Haversine算法实现5公里内服务人员快速匹配
  4. 支付集成:微信支付JSAPI接口实现安全支付
  5. 评价系统:动态评分计算与实时更新
  6. 数据安全:敏感信息加密存储,支付数据符合PCI DSS标准
  7. 通知系统:集成微信模板消息实现订单状态实时推送

该源码示例展示了家政O2O系统的核心功能实现,实际项目需结合具体业务需求进行扩展和完善,如增加服务人员资质审核、智能排班、服务过程追踪等高级功能。

更多推荐