|
|
@@ -3,10 +3,17 @@ package com.sqx.scheduler.order;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.ekyong.www.pay.pay.qrcode.api.RhtQrcodePayApi;
|
|
|
+import com.ekyong.www.pay.pay.qrcode.bean.QrcodeQueryRequestBean;
|
|
|
+import com.ekyong.www.pay.pay.qrcode.bean.QrcodeQueryResponseBean;
|
|
|
+import com.github.wxpay.sdk.WXPay;
|
|
|
import com.sqx.modules.common.entity.CommonInfo;
|
|
|
import com.sqx.modules.common.service.CommonInfoService;
|
|
|
import com.sqx.modules.order.entity.TbOrder;
|
|
|
import com.sqx.modules.order.service.AppOrderService;
|
|
|
+import com.sqx.modules.pay.config.WXConfig;
|
|
|
+import com.sqx.modules.pay.config.WechatPayConfig;
|
|
|
import com.sqx.scheduler.config.SchedulerLock;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -18,10 +25,7 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -39,6 +43,8 @@ public class OrderScheduler {
|
|
|
private final AppOrderService orderService;
|
|
|
private final CommonInfoService commonInfoService;
|
|
|
|
|
|
+ private final static String RHT_PAY_BASE_URL = "https://api.ekbuyclub.com";
|
|
|
+
|
|
|
/**
|
|
|
* 预约订单自动接单
|
|
|
* 5分钟运行一次
|
|
|
@@ -175,31 +181,69 @@ public class OrderScheduler {
|
|
|
lock.lock();
|
|
|
try {
|
|
|
log.info("超时订单自动取消任务开始运行");
|
|
|
- LambdaQueryWrapper<TbOrder> wrapper=new LambdaQueryWrapper<>();
|
|
|
- wrapper.eq(TbOrder::getStatus,0);
|
|
|
- wrapper.isNotNull(TbOrder::getTimeOut);
|
|
|
+ long time = new Date().getTime();
|
|
|
+ List<TbOrder> orderList = orderService.changeTimeOutOrder(time);
|
|
|
|
|
|
- List<TbOrder> orderList = orderService.list(wrapper);
|
|
|
- if (CollUtil.isEmpty(orderList)) {
|
|
|
+ if (orderList.size() == 0) {
|
|
|
log.info("没有符合条件的超时订单,超时订单自动取消任务运行....");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- long time = new Date().getTime();
|
|
|
+ WXConfig config = new WXConfig();
|
|
|
+// 当前都是小程序支付
|
|
|
+ config.setAppId(commonInfoService.findOne(74).getValue());
|
|
|
+ //微信商户key
|
|
|
+ config.setKey(commonInfoService.findOne(250).getValue());
|
|
|
+ //微信商户号mchId
|
|
|
+ config.setMchId(commonInfoService.findOne(251).getValue());
|
|
|
+ WXPay wxpay = new WXPay(config);
|
|
|
+
|
|
|
+ WechatPayConfig wechatMchConfig = WechatPayConfig.builder()
|
|
|
+ .appId(commonInfoService.findOne(45).getValue())
|
|
|
+ .mchId(commonInfoService.findOne(434).getValue())
|
|
|
+ .mchKey(commonInfoService.findOne(435).getValue())
|
|
|
+ .h5Url(commonInfoService.findOne(19).getValue())
|
|
|
+ .build();
|
|
|
+
|
|
|
+ RhtQrcodePayApi qrcodePay = new RhtQrcodePayApi(wechatMchConfig.getMchId(), wechatMchConfig.getMchKey(), RHT_PAY_BASE_URL);
|
|
|
+
|
|
|
+
|
|
|
ArrayList<TbOrder> orders = new ArrayList<>();
|
|
|
for (TbOrder tbOrder : orderList) {
|
|
|
- Long timeOut = tbOrder.getTimeOut();
|
|
|
- if (time > timeOut) {
|
|
|
+ Integer state = tbOrder.getState();
|
|
|
+ if (0 == state) {
|
|
|
+// 状态为待支付需要调用支付系统订单查询接口判断支付系统对应的订单状态
|
|
|
+ Map<String, String> data = new HashMap<>();
|
|
|
+ String orderNumber = tbOrder.getOrderNumber();
|
|
|
+ //商户订单号
|
|
|
+ data.put("out_trade_no", orderNumber);
|
|
|
+ Map<String, String> response = wxpay.orderQuery(data);
|
|
|
+ String trade_state = response.get("trade_state");
|
|
|
+ //SUCCESS—支付成功,REFUND—转入退款,NOTPAY—未支付,CLOSED—已关闭,REVOKED—已撤销(刷卡支付),USERPAYING--用户支付中,PAYERROR--支付失败(其他原因,如银行返回失败)
|
|
|
+ if (ObjectUtils.isNotEmpty(trade_state)) {
|
|
|
+ if ("NOTPAY".equals(trade_state)) {
|
|
|
+ tbOrder.setStatus(5);
|
|
|
+ orders.add(tbOrder);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ QrcodeQueryRequestBean qqrb = new QrcodeQueryRequestBean();
|
|
|
+ qqrb.setTraceno(orderNumber);// 商户流水号
|
|
|
+ QrcodeQueryResponseBean response2 = qrcodePay.query(qqrb);
|
|
|
+ String respCode = response2.getRespCode();
|
|
|
+// 0未支付,1支付成功,2支付失败,4退款中,5退款成功,6退款失败
|
|
|
+ if ("0".equals(respCode)) {
|
|
|
+ tbOrder.setStatus(5);
|
|
|
+ orders.add(tbOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
tbOrder.setStatus(5);
|
|
|
orders.add(tbOrder);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (CollUtil.isEmpty(orders)) {
|
|
|
- log.info("没有符合条件的超时订单,超时订单自动取消任务运行....");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
orderService.updateBatchById(orders);
|
|
|
|
|
|
log.info("超时订单自动取消运行成功");
|