package com.ruoyi.integration.rocket.listener;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.ruoyi.chargingPile.api.feignClient.ChargingPileClient;
|
import com.ruoyi.chargingPile.api.vo.UpdateChargingPileStatusVo;
|
import com.ruoyi.integration.api.model.Ping;
|
import com.ruoyi.integration.iotda.constant.SendTagConstant;
|
import com.ruoyi.integration.mongodb.service.PingService;
|
import com.ruoyi.integration.rocket.model.ChargingMessage;
|
import com.ruoyi.integration.rocket.model.GunStatusMessage;
|
import com.ruoyi.integration.rocket.model.OnlineMessage;
|
import com.ruoyi.integration.rocket.model.PingMessage;
|
import com.ruoyi.integration.rocket.produce.EnhanceProduce;
|
import com.ruoyi.integration.rocket.util.EnhanceMessageHandler;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.rocketmq.client.consumer.listener.MessageListener;
|
import org.apache.rocketmq.client.producer.SendResult;
|
import org.apache.rocketmq.spring.annotation.MessageModel;
|
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
import org.apache.rocketmq.spring.core.RocketMQListener;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
import java.util.concurrent.TimeUnit;
|
|
@Slf4j
|
@Component
|
@RocketMQMessageListener(
|
messageModel = MessageModel.CLUSTERING,
|
consumerGroup = "charge_ping",
|
topic = "charge_ping",
|
selectorExpression = "ping"
|
)
|
public class PingMessageListener implements RocketMQListener<PingMessage> {
|
|
@Autowired
|
private PingService pingService;
|
@Resource
|
private RedisTemplate redisTemplate;
|
@Autowired
|
private EnhanceProduce enhanceProduce;
|
|
@Resource
|
private ChargingPileClient chargingPileClient;
|
|
|
/**
|
* 监听消费消息,不需要执行业务处理,委派给父类做基础操作,父类做完基础操作后会调用子类的实际处理类型
|
*/
|
@Override
|
public void onMessage(PingMessage message) {
|
log.info("充电桩心跳包-业务消息处理:{}", JSON.toJSONString(message));
|
// 持久化消息
|
Ping ping = new Ping();
|
BeanUtils.copyProperties(message,ping);
|
pingService.save(ping);
|
//存储缓存中,5分钟有效
|
redisTemplate.opsForValue().set("ping:" + ping.getCharging_pile_code() + ping.getCharging_gun_code(), ping, 5, TimeUnit.MINUTES);
|
|
UpdateChargingPileStatusVo vo1 = new UpdateChargingPileStatusVo();
|
vo1.setGun_code(message.getCharging_gun_code());
|
vo1.setPile_code(message.getCharging_pile_code());
|
vo1.setStatus(message.getCharging_gun_status());
|
chargingPileClient.updateChargingPileStatus(vo1);
|
// 监管平台推送充电设备状态
|
SendResult sendResult;
|
String gunCode = message.getCharging_pile_code() + message.getCharging_gun_code();
|
ChargingMessage chargingMessage = new ChargingMessage();
|
chargingMessage.setServiceId(SendTagConstant.GUN_STATUS);
|
GunStatusMessage gunStatusMessage = new GunStatusMessage();
|
gunStatusMessage.setFullNumber(gunCode);
|
chargingMessage.setGunStatusMessage(gunStatusMessage);
|
sendResult = enhanceProduce.gunStatusMessage(chargingMessage);
|
}
|
}
|