yanghui
2022-11-28 42521c9b51c1bd9a40036f18fd610cd46601222d
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/message/RaffleMessage.java
@@ -1,30 +1,97 @@
package com.panzhihua.service_community.message;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.panzhihua.common.model.vos.community.raffle.ComActRaffleVO;
import com.panzhihua.common.utlis.StringUtils;
import com.panzhihua.service_community.dao.ComActRaffleDao;
import com.panzhihua.service_community.dao.ComActRafflePrizeDao;
import com.panzhihua.service_community.dao.ComActRaffleRecordDao;
import com.panzhihua.service_community.entity.ComActRaffle;
import com.panzhihua.service_community.entity.ComActRafflePrize;
import com.panzhihua.service_community.entity.ComActRaffleRecord;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
 * @author zzj
 */
@Component
public class RaffleMessage {
    public static final String DELAYED_QUEUE="raffle.queue";
    public static final String DELAYED_QUEUE="huacheng.raffle.queue";
    @Resource
    private ComActRaffleDao comActRaffleDao;
    @Resource
    private ComActRaffleRecordDao comActRaffleRecordDao;
    @Resource
    private ComActRafflePrizeDao comActRafflePrizeDao;
    @Resource
    private RabbitTemplate rabbitTemplate;
    @RabbitListener(queues=DELAYED_QUEUE)
    public void doRaffle(ComActRaffleVO comActRaffleVO){
    public void doRaffle(ComActRaffle comActRaffleVO){
        ComActRaffle comActRaffle=comActRaffleDao.selectOne(new QueryWrapper<ComActRaffle>().lambda().eq(ComActRaffle::getId,comActRaffleVO.getId()));
        if(comActRaffle!=null&&comActRaffle.getStatus()==0&&comActRaffle.getLotteryTime().before(new Date())){
        if(comActRaffle!=null&&comActRaffle.getStatus()==2&&comActRaffle.getLotteryTime().before(new Date())){
            List<ComActRafflePrize> comActRafflePrizeList=comActRafflePrizeDao.selectList(new QueryWrapper<ComActRafflePrize>().lambda().eq(ComActRafflePrize::getRaffleId,comActRaffleVO.getId()));
            if(StringUtils.isNotEmpty(comActRafflePrizeList)){
                List<ComActRaffleRecord> comActRaffleRecords=comActRaffleRecordDao.selectList(new QueryWrapper<ComActRaffleRecord>().lambda().eq(ComActRaffleRecord::getRaffleId,comActRaffleVO.getId()));
                if(StringUtils.isNotEmpty(comActRaffleRecords)){
                    Random random=new Random();
                    comActRafflePrizeList.forEach(comActRafflePrize -> {
                        int a=0;
                        for(int i=1;i<=comActRafflePrize.getSurplus();i++){
                            if(comActRaffleRecords.size()>0){
                                ComActRaffleRecord comActRaffleRecord=comActRaffleRecords.get(random.nextInt(comActRaffleRecords.size()));
                                comActRaffleRecord.setPrizeId(comActRafflePrize.getId());
                                comActRaffleRecord.setStatus(1);
                                comActRaffleRecordDao.updateById(comActRaffleRecord);
                                comActRaffleRecords.remove(comActRaffleRecord);
                                a++;
                            }
                        }
                        comActRafflePrize.setSurplus(comActRafflePrize.getSurplus()-a);
                        comActRafflePrizeDao.updateById(comActRafflePrize);
                    });
                }
            }
            comActRaffle.setStatus(3);
            comActRaffleDao.updateById(comActRaffle);
            rabbitTemplate.convertAndSend("huacheng.raffle.exchange", "huacheng.raffle.key", comActRaffleVO, message -> {
                message.getMessageProperties().setHeader("x-delay", dateToSecond(comActRaffle.getRaffleStopTime()));
                return message;
            });
        }
        if(comActRaffle!=null&&comActRaffle.getStatus()==0&&comActRaffle.getStartTime().before(new Date())){
            comActRaffle.setStatus(1);
            comActRaffleDao.updateById(comActRaffle);
            rabbitTemplate.convertAndSend("huacheng.raffle.exchange", "huacheng.raffle.key", comActRaffleVO, message -> {
                message.getMessageProperties().setHeader("x-delay", dateToSecond(comActRaffle.getStopTime()));
                return message;
            });
        }
        if(comActRaffle!=null&&comActRaffle.getStatus()==1&&comActRaffle.getStopTime().before(new Date())){
            comActRaffle.setStatus(2);
            comActRaffleDao.updateById(comActRaffle);
            rabbitTemplate.convertAndSend("huacheng.raffle.exchange", "huacheng.raffle.key", comActRaffleVO, message -> {
                message.getMessageProperties().setHeader("x-delay", dateToSecond(comActRaffle.getLotteryTime()));
                return message;
            });
        }
        if(comActRaffle!=null&&comActRaffle.getStatus()==3&&comActRaffle.getRaffleStopTime().before(new Date())){
            comActRaffleRecordDao.updateStatusByRaffleId(comActRaffle.getId());
        }
    }
    private Long dateToSecond(Date expireTime){
        return DateUtil.between(new Date(),expireTime, DateUnit.MS);
    }
}