package com.ynart.rabbitmq;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.rabbitmq.client.Channel;
import com.ynart.Dto.ArtDataEntity;
import com.ynart.exedata.domain.ArtData;
import com.ynart.exedata.service.IArtDataService;
import com.ynart.utils.AesUtils;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
@Component
public class RabbitmqService {
private final RabbitTemplate rabbitTemplate;
@Autowired
private IArtDataService artDataService;
@Autowired
private AesUtils aesUtils;
@Autowired
public RabbitmqService(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
public void sendSportsOrder(String message) {
rabbitTemplate.convertAndSend("productExchange", "sports.new", message);
}
public void sendElectronicsOrder(String message) {
rabbitTemplate.convertAndSend("productExchange", "electronics.new", message);
}
@RabbitListener(queues = "sportsQueue")
public void receiveSportsOrder(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) throws IOException {
try {
//TODO 数据梳理入库
message = aesUtils.decryptAES(message);
ObjectMapper objectMapper = new ObjectMapper();
List<ArtDataEntity> list = objectMapper.readValue(message, new TypeReference<List<ArtDataEntity>>() {
});
String pattern = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
//mq数据入库
for (ArtDataEntity artDataEntity : list) {
ArtData artData = new ArtData();
artData.setId(null);
artData.setJsonContent(artDataEntity.getJson_content());
artData.setUrl(artDataEntity.getUrl());
artData.setDataVersion(artDataEntity.getData_version());
artData.setSign(artDataEntity.getSign());
artData.setStatus(artDataEntity.getStatus().toString());
artData.setCreatedBy(artDataEntity.getCreated_by());
artData.setCreatedTime(dateFormat.parse(artDataEntity.getCreated_time()));
artData.setUpdatedBy(artDataEntity.getUpdated_by());
artData.setUpdatedTime(dateFormat.parse(artDataEntity.getUpdated_time()));
artDataService.insertArtData(artData);
}
// 手动确认消息
channel.basicAck(deliveryTag, false);
//TODO 逻辑修改,不进行回调
// sendElectronicsOrder(list.get(0).getCreated_by() + ":-art-:" + stringBuilder.toString());
} catch (Exception e) {
// 消费消息失败,不进行确认,消息重新回到队列中进行重试
System.out.println("Failed to process sports order: " + message);
//TODO 逻辑修改,不进行回调
channel.basicNack(deliveryTag, false, true);
}
}
// @RabbitListener(queues = "electronicsQueue")
// public void receiveElectronicsOrder(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) throws IOException {
// try {
// // 消费消息的业务逻辑
// System.out.println("Received electronics order: " + message);
//
// // 手动确认消息
// channel.basicAck(deliveryTag, false);
// } catch (Exception e) {
// // 消费消息失败,不进行确认,消息重新回到队列中进行重试
// System.out.println("Failed to process electronics order: " + message);
// channel.basicNack(deliveryTag, false, true);
// }
// }
}