156 lines
3.9 KiB
Markdown
156 lines
3.9 KiB
Markdown
# 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. **日志记录**:详细记录处理过程,便于问题排查 |