RabbbitmqConsumer.java 4.5 KB
package com.objecteye.utils;

import com.alibaba.fastjson.JSON;
import com.objecteye.config.RabbitmqConfig;
import com.objecteye.dao.MongoTemplates;
import com.objecteye.entity.PersonMsg;
import com.objecteye.pojo.RabbitMQVehicle;
import com.objecteye.service.DeployService;
import com.objecteye.service.IVehicleViolationsService;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class RabbbitmqConsumer {

    @Autowired
    private RabbitMQVehicleTools rabbitMQVehicleTools;
    @Autowired
    private MongoTemplate mongoTemplate;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private MongoTemplates mongoTemplates;
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Autowired
    private DeployService deployService;
    @Autowired
    private IVehicleViolationsService vehicleViolationsService;

    @RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_STORE})
    public void receive_store(String msg, Message message, Channel channel) {
        try {
            List<RabbitMQVehicle> rabbitMQVehicles = rabbitMQVehicleTools.encapsulationRabbitVehicle(msg);
            if (rabbitMQVehicles != null && rabbitMQVehicles.size() > 0) {
                for (RabbitMQVehicle rabbitMQVehicle : rabbitMQVehicles) {
                    if (rabbitMQVehicle == null) {
                        continue;
                    }
                    double vehicleWinScore = rabbitMQVehicle.getVehicle_win_score();
                    if (vehicleWinScore < 0.7) {
                        continue;
                    }
                    RabbitMQVehicle rabbitMQVehicle1 = mongoTemplates.insertData(rabbitMQVehicle);

                    String s = JSON.toJSONString(rabbitMQVehicle1);
                    redisTemplate.opsForList().leftPush("deviceId", s);
                    // 车辆的特征值归一化距离保存到Redis
                    double dbFea = new CompareDistance().getDistance(rabbitMQVehicle1.getVehicle_fea_feature());
                    redisTemplate.opsForHash().put(GlobalUtil.VEHICLE_FEATURE_DISTANCE, rabbitMQVehicle1.getId(), dbFea);
                    redisTemplate.opsForHash().put(GlobalUtil.VEHICLE_FEATURE, rabbitMQVehicle1.getId(), rabbitMQVehicle1.getVehicle_fea_feature());
                    String vehicle_plate_hphm = rabbitMQVehicle1.getVehicle_plate_hphm();
                    double vehicle_plate_numScore = rabbitMQVehicle1.getVehicle_plate_numScore();
                    if (vehicle_plate_numScore > 0.9) {
                        redisTemplate.opsForHash().put("vehicleFilePlateNumber", vehicle_plate_hphm, s);
                    }
                    rabbitTemplate.convertAndSend(RabbitmqConfig.EXCHANGE_TOPICS_INFORM, "inform.alarm", s);
                    rabbitTemplate.convertAndSend(RabbitmqConfig.EXCHANGE_TOPICS_INFORM, "inform.forbidden", s);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_PERSON})
    public void receive_person(String msg, Message message, Channel channel) {
        try {
            PersonMsg personMsg = JSON.parseObject(msg, PersonMsg.class);
            deployService.rabbitMqMsgListener(personMsg);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_ALARM})
    public void receive_alarm(String msg, Message message, Channel channel) {
        try {
            RabbitMQVehicle rabbitMqVehicle = JSON.parseObject(msg, RabbitMQVehicle.class);
            deployService.rabbitMqMsgListener(rabbitMqVehicle);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_FORBIDDEN_TASK})
    public void receive_forbidden(String msg, Message message, Channel channel) {
        try {
            RabbitMQVehicle rabbitMqVehicle = JSON.parseObject(msg, RabbitMQVehicle.class);
            // 车辆违规监听
            vehicleViolationsService.taskListener(rabbitMqVehicle);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}