|
|
@@ -2,19 +2,18 @@ package com.sqx.scheduler.order;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
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.goods.entity.GoodsShop;
|
|
|
import com.sqx.modules.goods.service.GoodsShopService;
|
|
|
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.modules.pay.entity.PayDetails;
|
|
|
import com.sqx.modules.pay.enums.PayStateEnums;
|
|
|
@@ -213,22 +212,14 @@ public class OrderScheduler {
|
|
|
lock.lock();
|
|
|
try {
|
|
|
log.info("超时订单自动取消任务开始运行");
|
|
|
- //加5分钟在前端强制取消前执行
|
|
|
- long time = new Date().getTime()+5*60*1000;
|
|
|
+ // 加5分钟在前端强制取消前执行 ??
|
|
|
+ long time = new Date().getTime() + 5*60*1000;
|
|
|
List<TbOrder> orderList = orderService.changeTimeOutOrder(time);
|
|
|
|
|
|
if (orderList.size() == 0) {
|
|
|
log.info("没有符合条件的超时订单,超时订单自动取消任务运行....");
|
|
|
return;
|
|
|
}
|
|
|
- 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())
|
|
|
@@ -238,66 +229,48 @@ public class OrderScheduler {
|
|
|
.build();
|
|
|
|
|
|
RhtQrcodePayApi qrcodePay = new RhtQrcodePayApi(wechatMchConfig.getMchId(), wechatMchConfig.getMchKey(), RHT_PAY_BASE_URL);
|
|
|
-
|
|
|
-
|
|
|
ArrayList<TbOrder> orders = new ArrayList<>();
|
|
|
for (TbOrder tbOrder : orderList) {
|
|
|
-// 将订单状态作为判断条件
|
|
|
- Integer state = tbOrder.getStatus();
|
|
|
- if (0 == state) {
|
|
|
-// 状态为待支付需要调用支付系统订单查询接口判断支付系统对应的订单状态
|
|
|
+ String orderNumber = tbOrder.getOrderNumber();
|
|
|
+ try {
|
|
|
+ // 状态为待支付需要调用支付系统订单查询接口判断支付系统对应的订单状态
|
|
|
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 if ("SUCCESS".equals(trade_state)){
|
|
|
- tbOrder.setPayType(1);
|
|
|
- orderService.updateOrderAfterPaySuccess(tbOrder);
|
|
|
+ QrcodeQueryRequestBean qqrb = new QrcodeQueryRequestBean();
|
|
|
+ qqrb.setTraceno(orderNumber);// 商户流水号
|
|
|
+ QrcodeQueryResponseBean response2 = qrcodePay.query(qqrb);
|
|
|
+ String respCode = response2.getRespCode();
|
|
|
+ log.info("超时任务处理订单【{}】查询支付结果,支付通知信息:{}", orderNumber, response2);
|
|
|
+ // 0未支付,1支付成功,2支付失败,4退款中,5退款成功,6退款失败
|
|
|
+ if (StrUtil.equals("1", respCode)){
|
|
|
+ String payTime = response2.getTransDate()+ " " + response2.getTransTime();
|
|
|
+ PayDetails payDetails = payDetailsService.getByOrderNo(orderNumber);
|
|
|
+ if (!ObjectUtil.isNull(payDetails)) {
|
|
|
+ payDetails.setState(PayStateEnums.PAY_SUCCESS.getStateCode());
|
|
|
+ payDetails.setPayTime(payTime);
|
|
|
+ payDetails.setTradeNo(response2.getChannelOrderno());
|
|
|
+ payDetails.setRemark("Scheduled RHT PAY SUCCESS");
|
|
|
+ payDetailsService.updateDetail(payDetails);
|
|
|
+ }else {
|
|
|
+ log.error("超时任务处理订单【{}】支付成功,但未获取到支付订单!支付通知信息:{}", orderNumber, response2);
|
|
|
}
|
|
|
- }else {
|
|
|
- QrcodeQueryRequestBean qqrb = new QrcodeQueryRequestBean();
|
|
|
- qqrb.setTraceno(orderNumber);// 商户流水号
|
|
|
- QrcodeQueryResponseBean response2 = qrcodePay.query(qqrb);
|
|
|
- String respCode = response2.getRespCode();
|
|
|
- log.info("超时任务处理订单【{}】查询支付结果,支付通知信息:{}", orderNumber, response2);
|
|
|
-// 0未支付,1支付成功,2支付失败,4退款中,5退款成功,6退款失败
|
|
|
- if ("0".equals(respCode)) {
|
|
|
- tbOrder.setStatus(5);
|
|
|
- orders.add(tbOrder);
|
|
|
- }else if ("1".equals(respCode)){
|
|
|
- PayDetails payDetails = payDetailsService.getByOrderNo(orderNumber);
|
|
|
- if (!ObjectUtil.isNull(payDetails)) {
|
|
|
- payDetails.setState(PayStateEnums.PAY_SUCCESS.getStateCode());
|
|
|
- payDetails.setPayTime(response2.getTransDate()+ " " + response2.getTransTime());
|
|
|
- payDetails.setTradeNo(response2.getChannelOrderno());
|
|
|
- payDetails.setRemark("Scheduled RHT PAY SUCCESS");
|
|
|
- payDetailsService.updateDetail(payDetails);
|
|
|
- }else {
|
|
|
- log.error("超时任务处理订单【{}】支付成功,但未获取到支付订单!支付通知信息:{}", orderNumber, response2);
|
|
|
- }
|
|
|
- tbOrder.setPayType(1);
|
|
|
- orderService.updateOrderAfterPaySuccess(tbOrder);
|
|
|
- }
|
|
|
-
|
|
|
+ tbOrder.setPayTime(payTime);
|
|
|
+ tbOrder.setPayType(1);
|
|
|
+ orderService.updateOrderAfterPaySuccess(tbOrder);
|
|
|
+ } else {
|
|
|
+ tbOrder.setStatus(5);
|
|
|
+ orders.add(tbOrder);
|
|
|
}
|
|
|
- } else {
|
|
|
- tbOrder.setStatus(5);
|
|
|
- orders.add(tbOrder);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("超时任务处理订单【{}】查询支付结果失败,失败原因:{}", orderNumber, e.getMessage());
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
- //list为空不要执行
|
|
|
+ // list为空不要执行
|
|
|
if(!orders.isEmpty()){
|
|
|
orderService.updateBatchById(orders);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
log.info("超时订单自动取消运行成功");
|
|
|
} catch (Exception e) {
|
|
|
log.error("超时订单自动取消任务运行失败失败原因:{}", e.getMessage());
|