package cc.mrbird.febs.common.listener;
|
|
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
|
import cc.mrbird.febs.common.utils.AppContants;
|
import cc.mrbird.febs.mall.entity.MallOrderInfo;
|
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
|
import cn.hutool.core.util.StrUtil;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.connection.Message;
|
import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
|
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
|
import org.springframework.stereotype.Component;
|
|
import java.util.List;
|
|
/**
|
* @author wzy
|
* @date 2021-04-16
|
**/
|
@Slf4j
|
@Component
|
public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
|
|
public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
|
super(listenerContainer);
|
}
|
|
@Autowired
|
private MallOrderInfoMapper mallOrderInfoMapper;
|
|
@Override
|
public void onMessage(Message message, byte[] pattern) {
|
String expireKey = message.toString();
|
if (expireKey.startsWith(AppContants.REDIS_ORDER_OVERTIME_PREFIX)) {
|
List<String> split = StrUtil.split(expireKey, '_');
|
if (split.size() < 4) {
|
log.error("自动取消订单失效:{}", expireKey);
|
return;
|
}
|
Long memberId = Long.valueOf(split.get(2));
|
Long orderId = Long.valueOf(split.get(3));
|
|
MallOrderInfo orderInfo = mallOrderInfoMapper.selectOrderByMemberIdAndId(memberId, orderId);
|
if (orderInfo == null) {
|
log.error("自动取消订单参数错误:{}", expireKey);
|
return;
|
}
|
if (orderInfo.getStatus() == OrderStatusEnum.WAIT_PAY.getValue()) {
|
log.info("自动取消订单:{},{}", memberId, orderId);
|
orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
|
orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY);
|
mallOrderInfoMapper.updateById(orderInfo);
|
}
|
}
|
}
|
}
|