|
@@ -158,6 +158,7 @@ import javax.annotation.Resource;
|
|
|
import java.io.*;
|
|
import java.io.*;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
import java.math.RoundingMode;
|
|
|
|
|
+import java.time.Duration;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneOffset;
|
|
import java.time.ZoneOffset;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.format.DateTimeFormatter;
|
|
@@ -2625,8 +2626,11 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
}
|
|
}
|
|
|
double hours = Double.parseDouble(autoClearTime);
|
|
double hours = Double.parseDouble(autoClearTime);
|
|
|
long delayMs = (long) (hours * 60 * 60 * 1000);
|
|
long delayMs = (long) (hours * 60 * 60 * 1000);
|
|
|
|
|
+ // 根据当前时间获取延迟队列到期时间
|
|
|
|
|
+ LocalDateTime expireDateTime = LocalDateTime.now().plus(Duration.ofMillis(delayMs));
|
|
|
tradePublishUtils.publishHoldOrderCancelDelayMsg(orderId.toString(), delayMs);
|
|
tradePublishUtils.publishHoldOrderCancelDelayMsg(orderId.toString(), delayMs);
|
|
|
log.info("留位订单创建成功,已发送{}小时自动取消延迟消息:orderId={}", autoClearTime,orderId);
|
|
log.info("留位订单创建成功,已发送{}小时自动取消延迟消息:orderId={}", autoClearTime,orderId);
|
|
|
|
|
+ tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("delay_expire_time", expireDateTime).eq("id", orderId));
|
|
|
}
|
|
}
|
|
|
OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
|
|
OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
|
|
|
TradeOrderLogUtils.setOrderInfo(orderId, null, orderStatus, append);
|
|
TradeOrderLogUtils.setOrderInfo(orderId, null, orderStatus, append);
|
|
@@ -3764,11 +3768,38 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
if (tradeOrderDO == null) {
|
|
if (tradeOrderDO == null) {
|
|
|
return CommonResult.error(ORDER_NOT_EXIST);
|
|
return CommonResult.error(ORDER_NOT_EXIST);
|
|
|
}
|
|
}
|
|
|
|
|
+ // 延迟过期时间
|
|
|
|
|
+ LocalDateTime delayExpireTime = tradeOrderDO.getDelayExpireTime();
|
|
|
|
|
+ // 判断延迟过期时间是否过期
|
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
+ Boolean delayExpireFlag = true;
|
|
|
|
|
+ if (ObjectUtil.isNotNull(delayExpireTime)) {
|
|
|
|
|
+ // 过期时间晚于当前时间 = 未过期
|
|
|
|
|
+ if (delayExpireTime.isAfter(now)) {
|
|
|
|
|
+ delayExpireFlag = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
|
|
tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
|
|
|
.set(TradeOrderDO::getOrderStatus, status)
|
|
.set(TradeOrderDO::getOrderStatus, status)
|
|
|
.set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
|
|
.set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
|
|
|
.eq(TradeOrderDO::getId, orderId)
|
|
.eq(TradeOrderDO::getId, orderId)
|
|
|
);
|
|
);
|
|
|
|
|
+ // 如果改为留位,并且时间已过期
|
|
|
|
|
+ if (status == TradeOrderStatusEnum.YD.getStatus() && delayExpireFlag) {
|
|
|
|
|
+ log.info("订单修改为留位,orderId={}", orderId);
|
|
|
|
|
+ // 查询配置信息,获取取消时间
|
|
|
|
|
+ String autoClearTime = configApi.getPlatformConfigValueByKey("autoClearTimeoutParam.four_hours");
|
|
|
|
|
+ if (StrUtil.isBlank(autoClearTime)) {
|
|
|
|
|
+ autoClearTime = "4";
|
|
|
|
|
+ }
|
|
|
|
|
+ double hours = Double.parseDouble(autoClearTime);
|
|
|
|
|
+ long delayMs = (long) (hours * 60 * 60 * 1000);
|
|
|
|
|
+ // 根据当前时间获取延迟队列到期时间
|
|
|
|
|
+ LocalDateTime expireDateTime = LocalDateTime.now().plus(Duration.ofMillis(delayMs));
|
|
|
|
|
+ tradePublishUtils.publishHoldOrderCancelDelayMsg(orderId.toString(), delayMs);
|
|
|
|
|
+ log.info("订单修改为留位状态成功,已发送{}小时自动取消延迟消息:orderId={}", autoClearTime,orderId);
|
|
|
|
|
+ tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("delay_expire_time", expireDateTime).eq("id", orderId));
|
|
|
|
|
+ }
|
|
|
return CommonResult.success("修改成功");
|
|
return CommonResult.success("修改成功");
|
|
|
}
|
|
}
|
|
|
|
|
|