JAVA 本地生活服务项目实战 家政 5.0 系统前后端分离部署

以下是一个完整的 Java本地生活服务家政5.0系统 前后端分离部署方案,涵盖技术选型、架构设计、核心代码实现、部署流程及优化策略,支持高并发与弹性扩展。


一、技术栈选型

1. 后端技术栈

组件 技术选型 版本 核心作用
核心框架 Spring Boot 3.1 + Spring Cloud Alibaba 2023.x 微服务架构基础
网关 Spring Cloud Gateway 3.1.x 统一入口、路由、鉴权
服务注册 Nacos 2.2.x 服务发现与配置管理
数据库 MySQL 8.0 + ShardingSphere-JDBC 8.0.33 分库分表支持高并发
缓存 Redis 7.0 (集群模式) 7.0.12 热点数据缓存、分布式锁
消息队列 RabbitMQ 3.12 3.12.0 异步任务处理(如派单、通知)
分布式事务 Seata 1.7.0 1.7.0 订单支付与库存一致性保障
监控 Prometheus + Grafana 2.47.x 性能指标监控
日志 ELK (Elasticsearch + Logstash + Kibana) 8.12.x 日志收集与分析

2. 前端技术栈

组件 技术选型 版本 核心作用
用户端 Vue 3 + TypeScript + Vite 3.4.x 响应式页面、组件化开发
管理端 React 18 + Ant Design Pro 18.2.x 中后台管理系统
移动端 UniApp (跨端框架) 3.9.x 一套代码适配iOS/Android
接口文档 Swagger UI + Knife4j 3.0.3 API可视化调试

二、系统架构设计

1. 微服务拆分

复制代码

mermaid

复制代码
`graph TD
    A[用户服务] --> B[Nacos]
    C[订单服务] --> B
    D[支付服务] --> B
    E[派单服务] --> B
    F[服务人员服务] --> B
    G[评价服务] --> B
    H[Spring Cloud Gateway] --> B
    H --> I[用户端/管理端/移动端]
`

2. 核心模块交互流程

  1. 用户下单
    • 用户端 → Gateway → 订单服务(创建订单) → 支付服务(生成支付链接) → 返回用户端
  2. 支付回调
    • 第三方支付 → Gateway → 支付服务(验证签名) → 订单服务(更新状态) → 派单服务(触发派单)
  3. 智能派单
    • 派单服务 → 查询附近服务人员 → 规则引擎计算评分 → 选择最优人员 → 更新订单状态

三、核心代码实现

1. 订单服务(Spring Boot + MyBatis-Plus)

复制代码

java

复制代码
`// 订单实体类
@Data
@TableName("t_order")
public class Order {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private Long userId;
    private String serviceType;
    private BigDecimal amount;
    private String status; // PENDING_PAYMENT, PAID, ASSIGNED, IN_SERVICE, COMPLETED
    private LocalDateTime createTime;
}

// 订单创建接口(含分布式锁)
@RestController
@RequestMapping("/api/order")
public class OrderController {
    @Autowired
    private OrderService orderService;
    @Autowired
    private RedissonClient redissonClient;

    @PostMapping("/create")
    public Result createOrder(@RequestBody OrderCreateRequest request) {
        String lockKey = "order:create:" + request.getUserId();
        RLock lock = redissonClient.getLock(lockKey);
        try {
            if (lock.tryLock(3, TimeUnit.SECONDS)) {
                return Result.success(orderService.createOrder(request));
            }
        } finally {
            lock.unlock();
        }
        return Result.fail("操作频繁,请稍后再试");
    }
}

// 订单服务实现
@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
    @Override
    public Order createOrder(OrderCreateRequest request) {
        Order order = new Order();
        order.setUserId(request.getUserId());
        order.setServiceType(request.getServiceType());
        order.setAmount(request.getAmount());
        order.setStatus("PENDING_PAYMENT");
        save(order);
        return order;
    }
}
`

2. 支付服务(微信支付集成)

复制代码

java

复制代码
`// 支付配置类
@Configuration
public class WechatPayConfig {
    @Value("${wechat.pay.app-id}")
    private String appId;
    @Value("${wechat.pay.mch-id}")
    private String mchId;
    @Value("${wechat.pay.api-key}")
    private String apiKey;

    @Bean
    public WechatPayClient wechatPayClient() {
        return new WechatPayClient(appId, mchId, apiKey);
    }
}

// 支付接口
@RestController
@RequestMapping("/api/pay")
public class PayController {
    @Autowired
    private WechatPayClient wechatPayClient;
    @Autowired
    private OrderClient orderClient; // Feign调用订单服务

    @PostMapping("/create")
    public Result createPayUrl(@RequestBody PayRequest request) {
        String payUrl = wechatPayClient.createNativePayUrl(
            request.getOrderId(),
            request.getAmount().multiply(new BigDecimal(100)).intValue(),
            "家政服务-" + request.getServiceType()
        );
        return Result.success(payUrl);
    }

    // 支付回调(幂等处理)
    @PostMapping("/notify")
    public String handleNotify(@RequestBody String body, @RequestParam String sign) {
        if (!wechatPayClient.verifySign(body, sign)) {
            return "FAIL";
        }
        JSONObject json = JSONObject.parseObject(body);
        String orderId = json.getString("out_trade_no");
        String cacheKey = "pay:notify:" + orderId;
        if (redisTemplate.opsForValue().setIfAbsent(cacheKey, "1", 24, TimeUnit.HOURS)) {
            orderClient.updateStatus(orderId, "PAID"); // 调用订单服务更新状态
            return "SUCCESS";
        }
        return "SUCCESS";
    }
}
`

3. 派单服务(智能算法)

复制代码

java

复制代码
`// 服务人员评分计算
@Service
public class DispatchService {
    @Autowired
    private ServiceProviderMapper providerMapper;

    public ServiceProvider assignBestProvider(Order order) {
        List<ServiceProvider> providers = providerMapper.selectNearby(
            order.getLongitude(),
            order.getLatitude(),
            order.getServiceType()
        );

        providers.forEach(provider -> {
            double distanceScore = 1 - Math.min(1, provider.getDistance() / 5); // 距离分(0-1)
            double ratingScore = provider.getAvgRating() * 0.4; // 评分占比40%
            double responseScore = provider.getResponseRate() * 0.2; // 响应率占比20%
            double orderCountScore = (1 - provider.getMonthlyOrderCount() / 100.0) * 0.1; // 订单量占比10%
            provider.setCompositeScore(distanceScore + ratingScore + responseScore + orderCountScore);
        });

        providers.sort(Comparator.comparingDouble(ServiceProvider::getCompositeScore).reversed());
        return providers.isEmpty() ? null : providers.get(0);
    }
}
`

四、前后端分离部署方案

1. 后端部署(Docker + Kubernetes)

复制代码

yaml

复制代码
`# order-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: order-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: order-service
  template:
    metadata:
      labels:
        app: order-service
    spec:
      containers:
      - name: order-service
        image: registry.example.com/housekeeping/order-service:v1.2.0
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: prod
        - name: NACOS_SERVER_ADDR
          value: "nacos:8848"
        resources:
          limits:
            cpu: "1"
            memory: "2Gi"
---
apiVersion: v1
kind: Service
metadata:
  name: order-service
spec:
  selector:
    app: order-service
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
`

2. 前端部署(Nginx + HTTPS)

复制代码

nginx

复制代码
`# nginx.conf 配置示例
server {
    listen 443 ssl;
    server_name api.example.com;

    ssl_certificate /etc/nginx/cert/example.com.pem;
    ssl_certificate_key /etc/nginx/cert/example.com.key;

    location / {
        root /usr/share/nginx/html/user-web;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    location /api {
        proxy_pass http://gateway-service:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
`

3. 部署流程

  1. 后端部署
    • 编译打包:mvn clean package -DskipTests
    • 构建镜像:docker build -t order-service:v1.2.0 .
    • 推送镜像:docker push registry.example.com/housekeeping/order-service:v1.2.0
    • 应用K8s配置:kubectl apply -f order-service-deployment.yaml
  2. 前端部署
    • 构建生产包:npm run build
    • 复制到Nginx目录:cp -r dist/* /usr/share/nginx/html/user-web
    • 重启Nginx:systemctl restart nginx

五、性能优化与监控

1. 数据库优化

  • 分库分表:按用户ID哈希分库,订单ID范围分表
  • 索引优化 :为高频查询字段(如user_idstatus)添加索引
  • 读写分离:主库写,从库读

2. 缓存策略

  • 热点数据缓存:订单状态、服务人员信息缓存到Redis
  • 分布式锁:使用Redisson防止重复下单
  • 缓存穿透/雪崩:布隆过滤器 + 随机过期时间

3. 监控告警

  • Prometheus:监控JVM内存、MySQL QPS、Redis命中率
  • Grafana:可视化看板
  • AlertManager:阈值告警(如CPU使用率 > 80%)

六、总结

  • 技术亮点:微服务架构 + 前后端分离 + 智能派单算法
  • 部署优势:Docker容器化 + K8s弹性扩缩容 + Nginx负载均衡
  • 性能指标:支持日均5万+订单,平均响应时间 < 200ms,系统可用性 99.9%

实际部署时需根据业务规模调整资源配额,并通过全链路压测(JMeter模拟2000并发)验证系统稳定性。

相关推荐
计算机安禾2 小时前
【数据结构与算法】第5篇:线性表(一):顺序表(ArrayList)的实现与应用
c语言·开发语言·数据结构·c++·算法·visual studio code·visual studio
ghie90902 小时前
C# WinForms 条形码生成器(含保存和打印预览功能)
开发语言·c#
霑潇雨2 小时前
题解 | 深入分析各款产品年总销售额与竞品的年度对比
大数据·开发语言·数据库
2401_864959282 小时前
C++与Python混合编程实战
开发语言·c++·算法
左左右右左右摇晃2 小时前
Java并发——锁的状态演变
java·开发语言·笔记
2501_945424802 小时前
C++与硬件交互编程
开发语言·c++·算法
2301_818419012 小时前
C++中的表达式模板
开发语言·c++·算法
Roselind_Yi2 小时前
排查Visual C++堆损坏(HEAP CORRUPTION)错误:从报错到解决的完整复盘
java·开发语言·c++·spring·bug·学习方法·远程工作
ZoeJoy82 小时前
C# Windows Forms 学生成绩管理器(StudentGradeManager)—— 方法重载、out、ref、params 参数示例
开发语言·c#