OrderAutoCancelDelayTask.java
2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.infoloop.tianting.logic.delay;
import com.infoloop.tianting.clientcustomerorderservice.CloseTimeType;
import com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum;
import com.infoloop.tianting.logic.delay.param.AutoCancelParam;
import com.infoloop.tianting.model.bo.AddSkusSellQuantityBO;
import com.infoloop.tianting.service.client.OrderServiceRpcClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.stream.Collectors;
@Slf4j
@Component
@RequiredArgsConstructor
public class OrderAutoCancelDelayTask {
private final DelayedQueue<AutoCancelParam> delayedQueue;
private final OrderServiceRpcClient orderServiceRpcClient;
public static final String AUTO_CANCEL_ORDER_DELAY_QUEUE = "AUTO_CANCEL_ORDER_QUEUE";
@PostConstruct
public void init() {
delayedQueue.initQueue(AUTO_CANCEL_ORDER_DELAY_QUEUE, this::execute);
}
private void execute(AutoCancelParam param) {
try {
final var orderById = orderServiceRpcClient.getOrderById(param.getOrderId());
if (orderById == null) {
log.error("Order not found, orderId: {}", param.getOrderId());
return;
}
if (orderById.getPayStatus() == PayStatusEnum.PAY_CANCELED) {
log.info("Order {} already canceled, skipping.", param.getOrderId());
return;
}
if (orderById.getPayStatus() != PayStatusEnum.TO_PAY) {
log.info("Order {} not to pay, skipping.", param.getOrderId());
return;
}
final var isUpdated = orderServiceRpcClient.updateClientCustomerOrderCancel(orderById.getEnterpriseId(), orderById.getId());
if (isUpdated && orderById.getCloseTimeType() == CloseTimeType.IMMEDIATELY) {
// 立即点餐需回滚库存
final var orderDetails = orderServiceRpcClient.getOrderDetailsByOrderId(orderById.getId());
final var isSuccess = orderServiceRpcClient.addSkusSellQuantities(orderById.getEnterpriseId(), orderById.getStallId(), orderDetails.stream().map(e -> AddSkusSellQuantityBO.builder()
.skuId(e.getSkuId())
.quantity(-e.getCount())
.build()).collect(Collectors.toList()));
log.info("Order {} returnSkusSellQuantities result: {}", param.getOrderId(), isSuccess);
}
} catch (Exception e) {
log.error("OrderAutoCancelDelayTask execute error", e);
}
}
}