|
@@ -17,12 +17,15 @@ import com.ym.mec.thirdparty.adapay.Payment;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.joda.time.LocalDateTime;
|
|
|
+import org.redisson.api.RBucket;
|
|
|
+import org.redisson.api.RedissonClient;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* 机构付款记录表(TenantOrderRecord)表服务实现类
|
|
@@ -42,6 +45,8 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
private PlatformServeDetailService platformServeDetailService;
|
|
|
@Autowired
|
|
|
private TenantInfoService tenantInfoService;
|
|
|
+ @Autowired
|
|
|
+ private RedissonClient redissonClient;
|
|
|
|
|
|
//订单不存在
|
|
|
public static final String PAYMENT_ID_NOT_EXISTS = "payment_id_not_exists";
|
|
@@ -64,7 +69,15 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
public Map<String, Object> checkTenantOrder(String orderNo) {
|
|
|
TenantOrderRecord orderRecord = this.getOne(new WrapperUtil<TenantOrderRecord>()
|
|
|
.hasEq("order_no_", orderNo).queryWrapper());
|
|
|
+ return checkTenantOrder(orderRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> checkTenantOrder(TenantOrderRecord orderRecord) {
|
|
|
+ return getTenantOrderState(orderRecord);
|
|
|
+ }
|
|
|
|
|
|
+ private Map<String, Object> getTenantOrderState(TenantOrderRecord orderRecord) {
|
|
|
//主动去第三方查询订单状态
|
|
|
checkTransOrderState(orderRecord);
|
|
|
|
|
@@ -87,8 +100,13 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
public void checkTenantOrder() {
|
|
|
+ RBucket<Object> bucket = redissonClient.getBucket("tenant_check_order");
|
|
|
+ if (!bucket.trySet(1, 3L, TimeUnit.SECONDS)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
List<TenantOrderRecord> list = this.list(new WrapperUtil<TenantOrderRecord>().queryWrapper()
|
|
|
.isNotNull("trans_no_")
|
|
|
.eq("order_state_", 0));
|
|
@@ -115,13 +133,16 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
record.setPayDate(now.toLocalDate().toDate());
|
|
|
record.setPayTime(now.toDate());
|
|
|
- baseMapper.updateById(record);
|
|
|
}
|
|
|
+ baseMapper.updateById(record);
|
|
|
});
|
|
|
}
|
|
|
-
|
|
|
+ bucket.delete();
|
|
|
}
|
|
|
|
|
|
+ //丢弃5分钟之前的订单 300000 = 5 * 60秒 * 1000
|
|
|
+ long exTime = 300000L;
|
|
|
+
|
|
|
//主动去第三方查询订单状态
|
|
|
private void checkTransOrderState(TenantOrderRecord orderRecord) {
|
|
|
if (StringUtils.equals(orderRecord.getPaymentChannel(), PaymentChannelEnum.ADAPAY.getCode())) {
|
|
@@ -129,26 +150,25 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
|
|
|
try {
|
|
|
payment = Payment.queryPayment(orderRecord.getTransNo());
|
|
|
log.info("checkTenantOrder payment >>>>> {}", payment);
|
|
|
- boolean flag = false;
|
|
|
- if (Objects.nonNull(payment.get("error_code"))) {
|
|
|
+ String status = (String) payment.get("status");
|
|
|
+ //判断状态是成功还是失败
|
|
|
+ if (status.equals("succeeded")) {
|
|
|
+ orderRecord.setOrderState(1);
|
|
|
+ } else if (Objects.nonNull(payment.get("error_code"))) {
|
|
|
+ //若状态是失败则判断code
|
|
|
if (!PAYMENT_ID_NOT_EXISTS.equals(payment.get("error_code"))) {
|
|
|
- //确保订单已经创建
|
|
|
- flag = true;
|
|
|
- }
|
|
|
- } else {
|
|
|
- //没有异常
|
|
|
- flag = true;
|
|
|
- }
|
|
|
- log.info("checkTenantOrder payment >>>>> {} flag {}", payment, flag);
|
|
|
- //确保订单已经创建 再 判断状态是成功还是失败
|
|
|
- if (flag && Objects.nonNull(payment.get("status"))) {
|
|
|
- String status = (String) payment.get("status");
|
|
|
- if (status.equals("succeeded")) {
|
|
|
- orderRecord.setOrderState(1);
|
|
|
- } else if (status.equals("failed")) {
|
|
|
+ //不等于这个异常都是失败
|
|
|
orderRecord.setOrderState(2);
|
|
|
+ } else {
|
|
|
+ long orderTime = orderRecord.getCreatedTime().getTime();//订单创建时间
|
|
|
+ long nowTime = new Date().getTime();
|
|
|
+ //丢弃5分钟之前的订单
|
|
|
+ if (nowTime - orderTime > exTime) {
|
|
|
+ orderRecord.setOrderState(2);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+ log.info("checkTenantOrder payment >>>>> {}", payment);
|
|
|
log.info("checkTenantOrder orderRecord >>>>> {}", JSON.toJSONString(orderRecord));
|
|
|
} catch (Exception e) {
|
|
|
log.error("checkTenantOrder payment error>>>>> {}", JSON.toJSONString(orderRecord));
|