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 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(); } } }