JAVA家政自营O2O同城服务源码微信小程序源码开源家政服务源码的java代码示例
·
以下为基于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();
}
}
技术架构特点:
- 微服务架构:采用Spring Cloud实现服务拆分,支持弹性扩展
- 多端适配:Uniapp实现微信小程序/H5/APP三端统一开发
- 实时定位匹配:基于Haversine算法实现5公里内服务人员快速匹配
- 支付集成:微信支付JSAPI接口实现安全支付
- 评价系统:动态评分计算与实时更新
- 数据安全:敏感信息加密存储,支付数据符合PCI DSS标准
- 通知系统:集成微信模板消息实现订单状态实时推送
该源码示例展示了家政O2O系统的核心功能实现,实际项目需结合具体业务需求进行扩展和完善,如增加服务人员资质审核、智能排班、服务过程追踪等高级功能。
更多推荐


所有评论(0)