javacodeadmin/ISTOPAYSIZE方法修改说明.md

156 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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