fuliqi
2024-10-17 8546b3d285af4235a0ef615a0c6e89486ae2c806
src/main/java/com/ycl/jxkg/rabbitmq/consumer/Consumer.java
@@ -3,9 +3,12 @@
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.ycl.jxkg.domain.entity.Exam;
import com.ycl.jxkg.domain.entity.Meet;
import com.ycl.jxkg.enums.general.ExamStatusEnum;
import com.ycl.jxkg.mapper.ExamMapper;
import com.ycl.jxkg.mapper.MeetMapper;
import com.ycl.jxkg.rabbitmq.msg.ExamStatusMsg;
import com.ycl.jxkg.rabbitmq.msg.MeetStatusMsg;
import lombok.RequiredArgsConstructor;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.*;
@@ -22,7 +25,7 @@
public class Consumer {
    private final ExamMapper examMapper;
    private final MeetMapper meetMapper;
    /**
     * 考试状态更新的消费者
     *
@@ -37,6 +40,9 @@
            // 因为考试的状态修改一共需要发送两条消息。不能因为第一条消息改了之后,第二条消息因为乐观锁加一了而无法修改
            new LambdaUpdateChainWrapper<>(examMapper)
                    .eq(Exam::getId, exam.getId())
                    .eq(Exam::getStatus, ExamStatusEnum.ING.equals(examStatusMsg.getTargetStatus()) ?  // 要改为进行中那么原本应该是未开始。结束则需要是进行中
                            ExamStatusEnum.NOT_START :
                            ExamStatusEnum.FINISHED.equals(examStatusMsg.getTargetStatus()) ? ExamStatusEnum.ING : null)
                    .set(Exam::getStatus, examStatusMsg.getTargetStatus())
                    .update();
        }
@@ -50,6 +56,14 @@
     */
    @RabbitListener(queues = "meetDlxQueue")
    public void meetConsumer(Message message){
        System.out.println(message);
        MeetStatusMsg meetStatusMsg = JSON.parseObject(message.getBody(), MeetStatusMsg.class);
        Meet meet = meetMapper.selectById(meetStatusMsg.getMeetId());
        if (Objects.nonNull(meet) && meetStatusMsg.getVersion().equals(meet.getUpdateVersion())) {
            // 不使用updateById这种方式,避免乐观锁加一。
            new LambdaUpdateChainWrapper<>(meetMapper)
                    .eq(Meet::getId, meet.getId())
                    .set(Meet::getStatus, meetStatusMsg.getMeetStatus())
                    .update();
        }
    }
}