3.9 KiB
3.9 KiB
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:正常完成流程
- 用户下单
- 师傅接单
- 师傅上门服务
- 师傅完成服务(日志类型 >= 6)
- 用户付款完成(paynum = 0)
- 订单状态自动更新为已完成
场景2:分阶段付款
- 用户支付定金
- 师傅完成服务(日志类型 >= 6)
- 用户支付尾款(paynum = 0)
- 订单状态更新为已完成
场景3:师傅完成但用户未付款
- 师傅完成服务(日志类型 >= 6)
- 用户还有未付款项(paynum > 0)
- 订单状态更新为待付款
异常处理
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);
}
注意事项
- 数据完整性:确保订单和日志数据存在
- 状态一致性:确保订单状态和日志状态的一致性
- 并发处理:考虑多线程环境下的数据一致性
- 异常恢复:提供完善的异常处理机制
- 日志记录:详细记录处理过程,便于问题排查