|
@@ -11,34 +11,54 @@ import org.jebot.handler.dto.BotMessage;
|
|
|
import org.jebot.models.jebot.BotGroup;
|
|
|
import org.jebot.models.xxpay.PayOrder;
|
|
|
|
|
|
+import java.util.concurrent.*;
|
|
|
+
|
|
|
+// 定时任务工具类
|
|
|
+class OrderStatusScheduler {
|
|
|
+ private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(5);
|
|
|
+ private static final ConcurrentHashMap<String, Boolean> scheduledOrders = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
+ public static void scheduleCheck(String orderId, Runnable task) {
|
|
|
+ // 避免重复任务
|
|
|
+ if (scheduledOrders.putIfAbsent(orderId, true) != null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ scheduler.schedule(() -> {
|
|
|
+ try {
|
|
|
+ task.run();
|
|
|
+ } finally {
|
|
|
+ scheduledOrders.remove(orderId);
|
|
|
+ }
|
|
|
+ }, 20, TimeUnit.SECONDS); // 延时 20 秒执行
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
@Slf4j
|
|
|
public class MerchantDropOrderHandler extends AbstractHandler {
|
|
|
+
|
|
|
@Override
|
|
|
public boolean msgHandler(BotMessage botMessage) {
|
|
|
- //判断是否类似掉单待处理
|
|
|
-// if (!botMessage.getMessage().toString().contains("掉单")){
|
|
|
-// return false;
|
|
|
-// }
|
|
|
if (botMessage.isContainsTextAndPhoto()) {
|
|
|
- //查询当前群组是否绑定商户号
|
|
|
+ // 查询当前群组是否绑定商户号
|
|
|
if (!botMessage.isGroupMch()) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- //如果商户号存在,查询订单所属上游
|
|
|
- PayOrder payOrder = handlerManager.getPayOrderRepository().findByPayOrderIdOrMchOrderNo(botMessage.getMessage().caption().trim(), botMessage.getBotGroup().getDataId());
|
|
|
+ // 查询订单
|
|
|
+ PayOrder payOrder = handlerManager.getPayOrderRepository()
|
|
|
+ .findByPayOrderIdOrMchOrderNo(botMessage.getMessage().caption().trim(),
|
|
|
+ botMessage.getBotGroup().getDataId());
|
|
|
if (payOrder == null) {
|
|
|
-// SendMessage sendMessage = new SendMessage(botMessage.getMessage().chat().id(), "订单不存在");
|
|
|
-// sendMessage.replyParameters(new ReplyParameters(botMessage.getMessage().messageId()));
|
|
|
-// botMessage.getTelegramBot().execute(sendMessage);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- //获取通道id
|
|
|
+ // 获取通道id
|
|
|
Long channelId = payOrder.getPassageId();
|
|
|
|
|
|
- //根据通道id获取绑定的群组
|
|
|
- BotGroup botChannel = this.handlerManager.getGroupRepository().findBotGroupByDataIdAndDataType(channelId, Constant.DATA_TYPE_CHANNEL);
|
|
|
+ // 根据通道id获取绑定的群组
|
|
|
+ BotGroup botChannel = this.handlerManager.getGroupRepository()
|
|
|
+ .findBotGroupByDataIdAndDataType(channelId, Constant.DATA_TYPE_CHANNEL);
|
|
|
if (botChannel == null) {
|
|
|
SendMessage sendMessage = new SendMessage(botMessage.getMessage().chat().id(), "订单通道未绑定群组");
|
|
|
sendMessage.replyParameters(new ReplyParameters(botMessage.getMessage().messageId()));
|
|
@@ -46,19 +66,35 @@ public class MerchantDropOrderHandler extends AbstractHandler {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- //复制需要转发的掉单信息到通道群组
|
|
|
- CopyMessage message = new CopyMessage(botChannel.getGroupId(), botMessage.getMessage().chat().id(), botMessage.getMessage().messageId());
|
|
|
+ // 转发掉单信息到通道群组
|
|
|
+ CopyMessage message = new CopyMessage(botChannel.getGroupId(),
|
|
|
+ botMessage.getMessage().chat().id(),
|
|
|
+ botMessage.getMessage().messageId());
|
|
|
message.caption(payOrder.getPayOrderId());
|
|
|
MessageIdResponse execute = botMessage.getTelegramBot().execute(message);
|
|
|
if (!execute.isOk()) {
|
|
|
log.error("转发消息失败: {}", execute);
|
|
|
}
|
|
|
- SendMessage sendMessage = new SendMessage(botMessage.getMessage().chat().id(), "处理成功");
|
|
|
- sendMessage.replyParameters(new ReplyParameters(botMessage.getMessage().messageId()));
|
|
|
- botMessage.getTelegramBot().execute(sendMessage);
|
|
|
+
|
|
|
+ // 延时 30 秒后查询订单状态(只查一次)
|
|
|
+ OrderStatusScheduler.scheduleCheck(payOrder.getPayOrderId().toString(), () -> {
|
|
|
+ PayOrder updatedOrder = handlerManager.getPayOrderRepository()
|
|
|
+ .findById(payOrder.getPayOrderId())
|
|
|
+ .orElse(null);
|
|
|
+
|
|
|
+ if (updatedOrder != null && updatedOrder.getStatus() == 2) {
|
|
|
+ SendMessage okMsg = new SendMessage(botMessage.getMessage().chat().id(),
|
|
|
+ "订单【" + updatedOrder.getPayOrderId() + "】已完成支付 ✅");
|
|
|
+ botMessage.getTelegramBot().execute(okMsg);
|
|
|
+ } else {
|
|
|
+ SendMessage failMsg = new SendMessage(botMessage.getMessage().chat().id(),
|
|
|
+ "补单信息已提交,暂未收到款,成功后会自动回调~");
|
|
|
+ botMessage.getTelegramBot().execute(failMsg);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
return false;
|
|
|
}
|
|
|
}
|