package com.kaying.marketing.platform.common.redis;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.kaying.marketing.platform.common.api.util.date.DateUtils;
import com.kaying.marketing.platform.common.constant.MyConstant;
import com.kaying.marketing.platform.common.dao.order.setting.OrderDao;
import com.kaying.marketing.platform.common.dao.prize.PrizeDao;
import com.kaying.marketing.platform.common.pojo.exchangeOrder.ExchangeOrderDO;
import com.kaying.marketing.platform.common.pojo.order.setting.dos.OrderDO;
import com.kaying.marketing.platform.common.pojo.pay.PayDO;
import com.kaying.marketing.platform.common.pojo.storeActivityPrize.StoreActivityPrizeDO;
import com.kaying.marketing.platform.common.service.abc.impl.HbAbcServiceImpl;
import com.kaying.marketing.platform.common.service.exchangeOrder.ExchangeOrderService;
import com.kaying.marketing.platform.common.service.pay.PayService;
import com.kaying.marketing.platform.common.service.storeActivityPrize.StoreActivityPrizeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.redisson.Redisson;
import org.redisson.api.RBlockingQueue;
import org.redisson.api.RDelayedQueue;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.config.SingleServerConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@Component
@Slf4j
public class RedissonNqyylQueue {
@Value("${spring.redis.database}")
private Integer database;
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private String port;
@Value("${spring.redis.password}")
private String password;
private RedissonClient redissonClient;
private RDelayedQueue<String> delayQueue;
private RBlockingQueue<String> blockingQueue;
@Bean
private void initNqyylDelayQueue() {
Config config = new Config();
SingleServerConfig serverConfig = config.useSingleServer();
if (StringUtils.isNotBlank(password)) {
serverConfig.setAddress("redis://" + host + ":" + port).setPassword(password).setDatabase(database);
} else {
serverConfig.setAddress("redis://" + host + ":" + port).setDatabase(database);
}
redissonClient = Redisson.create(config);
blockingQueue = redissonClient.getBlockingQueue("TestQueue");
delayQueue = redissonClient.getDelayedQueue(blockingQueue);
}
@Bean
private void startNqyylDelayQueueConsumer() {
new Thread(() -> {
while (true) {
try {
String orderNo = blockingQueue.take();
//延时订单
String format = DateUtils.format(new Date());
} catch (Exception e) {
e.printStackTrace();
}
}
}, "TestQueue-Consumer").start();
}
//发送延时消息
public void offerTask(String task, long seconds) {
delayQueue.offer(task, seconds, TimeUnit.SECONDS);
}
}