javacodeadmin/ISTOPAYSIZE方法修改说明.md

3.9 KiB
Raw Permalink Blame History

ISTOPAYSIZE方法修改说明

方法概述

ISTOPAYSIZE方法是用户付款后回调中修改订单状态的辅助方法,用于判断订单是否可以标记为已完成状态。

修改后的核心逻辑

1. 查询剩余可付款数量

int paynum = usersPayBeforService.countByLastOrderIdAndStatus(orderid);
  • 查询该订单还有多少可付款的数据
  • paynum = 0 表示没有剩余可付款的数据

2. 查询订单最新日志状态

OrderLog orderLog = orderLogService.selectDataTheFirstNew(order.getId());
BigDecimal latestLogType = orderLog.getType();
boolean isWorkerCompleted = latestLogType != null && latestLogType.compareTo(new BigDecimal("6")) >= 0;
  • 获取订单最新的日志记录
  • 判断师傅是否已完成工作(日志类型 >= 6

3. 完成条件判断

if (paynum <= 0 && isWorkerCompleted) {
    // 修改订单为已完成状态
}

完成条件

  • paynum <= 0:没有剩余可付款的数据
  • isWorkerCompleted:师傅已完成工作(日志类型 >= 6

订单状态更新

满足完成条件时

order.setStatus(4L);        // 4已完成
order.setReceiveType(3L);   // 3完成类型
order.setJsonStatus(9);     // 9已完成
order.setLogJson("{\"type\":8}"); // 8完成状态

不满足完成条件时

if (paynum > 0 && isWorkerCompleted) {
    order.setStatus(6L);    // 6待付款
    order.setJsonStatus(9); // 9已完成
}

业务处理

1. 师傅佣金处理

if (order.getWorkerId() != null) {
    Users worker = usersService.selectUsersById(order.getWorkerId());
    if (worker != null) {
        WorkerCommissionUtil.processWorkerCommission(order, worker);
    }
}

2. 用户通知处理(可选)

if (order.getUid() != null) {
    Users user = usersService.selectUsersById(order.getUid());
    if (user != null) {
        // 可以添加微信通知等逻辑
        // WXsendMsgUtil.sendWorkerFinishOrder(user.getOpenid(), order, serviceGoods);
    }
}

日志类型说明

日志类型 说明
1 生成订单
2 接单
3 上门
4 到达
5 评估报价
6 服务(开始服务)
7 服务完成
8 评价
9 取消

订单状态说明

状态值 说明
1 待接单
2 待服务
3 服务中
4 已完成
5 已取消
6 待付款
7 未服务提前结束

使用场景

场景1正常完成流程

  1. 用户下单
  2. 师傅接单
  3. 师傅上门服务
  4. 师傅完成服务(日志类型 >= 6
  5. 用户付款完成paynum = 0
  6. 订单状态自动更新为已完成

场景2分阶段付款

  1. 用户支付定金
  2. 师傅完成服务(日志类型 >= 6
  3. 用户支付尾款paynum = 0
  4. 订单状态更新为已完成

场景3师傅完成但用户未付款

  1. 师傅完成服务(日志类型 >= 6
  2. 用户还有未付款项paynum > 0
  3. 订单状态更新为待付款

异常处理

try {
    // 业务逻辑
} catch (Exception e) {
    System.err.println("ISTOPAYSIZE方法执行异常orderid: " + orderid + ", 错误: " + e.getMessage());
    e.printStackTrace();
    return 0;
}

返回值

  • 返回值剩余可付款数量int
  • 异常情况返回0

调用示例

// 在用户付款回调中使用
public void handlePaymentCallback(String orderId) {
    int remainingPayments = OrderUtil.ISTOPAYSIZE(orderId);
    System.out.println("订单 " + orderId + " 剩余付款数量: " + remainingPayments);
}

注意事项

  1. 数据完整性:确保订单和日志数据存在
  2. 状态一致性:确保订单状态和日志状态的一致性
  3. 并发处理:考虑多线程环境下的数据一致性
  4. 异常恢复:提供完善的异常处理机制
  5. 日志记录:详细记录处理过程,便于问题排查