# ISTOPAYSIZE方法修改说明 ## 方法概述 `ISTOPAYSIZE`方法是用户付款后回调中修改订单状态的辅助方法,用于判断订单是否可以标记为已完成状态。 ## 修改后的核心逻辑 ### 1. 查询剩余可付款数量 ```java int paynum = usersPayBeforService.countByLastOrderIdAndStatus(orderid); ``` - 查询该订单还有多少可付款的数据 - `paynum = 0` 表示没有剩余可付款的数据 ### 2. 查询订单最新日志状态 ```java OrderLog orderLog = orderLogService.selectDataTheFirstNew(order.getId()); BigDecimal latestLogType = orderLog.getType(); boolean isWorkerCompleted = latestLogType != null && latestLogType.compareTo(new BigDecimal("6")) >= 0; ``` - 获取订单最新的日志记录 - 判断师傅是否已完成工作(日志类型 >= 6) ### 3. 完成条件判断 ```java if (paynum <= 0 && isWorkerCompleted) { // 修改订单为已完成状态 } ``` **完成条件**: - `paynum <= 0`:没有剩余可付款的数据 - `isWorkerCompleted`:师傅已完成工作(日志类型 >= 6) ## 订单状态更新 ### 满足完成条件时 ```java order.setStatus(4L); // 4:已完成 order.setReceiveType(3L); // 3:完成类型 order.setJsonStatus(9); // 9:已完成 order.setLogJson("{\"type\":8}"); // 8:完成状态 ``` ### 不满足完成条件时 ```java if (paynum > 0 && isWorkerCompleted) { order.setStatus(6L); // 6:待付款 order.setJsonStatus(9); // 9:已完成 } ``` ## 业务处理 ### 1. 师傅佣金处理 ```java if (order.getWorkerId() != null) { Users worker = usersService.selectUsersById(order.getWorkerId()); if (worker != null) { WorkerCommissionUtil.processWorkerCommission(order, worker); } } ``` ### 2. 用户通知处理(可选) ```java 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. 订单状态更新为待付款 ## 异常处理 ```java try { // 业务逻辑 } catch (Exception e) { System.err.println("ISTOPAYSIZE方法执行异常,orderid: " + orderid + ", 错误: " + e.getMessage()); e.printStackTrace(); return 0; } ``` ## 返回值 - **返回值**:剩余可付款数量(int) - **异常情况**:返回0 ## 调用示例 ```java // 在用户付款回调中使用 public void handlePaymentCallback(String orderId) { int remainingPayments = OrderUtil.ISTOPAYSIZE(orderId); System.out.println("订单 " + orderId + " 剩余付款数量: " + remainingPayments); } ``` ## 注意事项 1. **数据完整性**:确保订单和日志数据存在 2. **状态一致性**:确保订单状态和日志状态的一致性 3. **并发处理**:考虑多线程环境下的数据一致性 4. **异常恢复**:提供完善的异常处理机制 5. **日志记录**:详细记录处理过程,便于问题排查