[fix]修改mq为rockectmq
This commit is contained in:
parent
983375f2c7
commit
1869dbb3a4
2
pom.xml
2
pom.xml
@ -406,7 +406,7 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-rabbitmq</artifactId>
|
||||
<artifactId>ruoyi-common-mq</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -35,7 +35,7 @@
|
||||
<module>ruoyi-common-websocket</module>
|
||||
<module>ruoyi-common-sse</module>
|
||||
<module>ruoyi-common-mongo</module>
|
||||
<module>ruoyi-common-rabbitmq</module>
|
||||
<module>ruoyi-common-mq</module>
|
||||
</modules>
|
||||
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.config;
|
||||
package org.dromara.common.mq.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@ -14,14 +14,14 @@ public class RocketMQConfig {
|
||||
* 系统消息主题
|
||||
*/
|
||||
public static final String TOPIC_SYS_MSG = "TOPIC_SYS_MSG";
|
||||
|
||||
|
||||
/**
|
||||
* 系统消息消费者组
|
||||
*/
|
||||
public static final String CONSUMER_GROUP_SYS_MSG = "CONSUMER_GROUP_SYS_MSG";
|
||||
|
||||
|
||||
/**
|
||||
* 系统消息标签
|
||||
*/
|
||||
public static final String TAG_SYS_MSG = "SYS_MSG";
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.config;
|
||||
package org.dromara.common.mq.config;
|
||||
|
||||
import org.apache.rocketmq.client.producer.DefaultMQProducer;
|
||||
import org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration;
|
@ -0,0 +1,43 @@
|
||||
package org.dromara.common.mq.domain;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Builder(toBuilder = true)
|
||||
@AllArgsConstructor
|
||||
public class MQMessage {
|
||||
/**
|
||||
* 消息ID
|
||||
*/
|
||||
private String messageId;
|
||||
/**
|
||||
* 消息主题
|
||||
*/
|
||||
private String topic;
|
||||
/**
|
||||
* 消息标签
|
||||
*/
|
||||
private String tag;
|
||||
/**
|
||||
* 消息类型
|
||||
*/
|
||||
private String messageType;
|
||||
/**
|
||||
* 消息内容
|
||||
*/
|
||||
private Object data;
|
||||
/**
|
||||
* 消息来源
|
||||
*/
|
||||
private String source;
|
||||
/**
|
||||
* 发送时间
|
||||
*/
|
||||
private LocalDateTime sendTime;
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package org.dromara.common.mq.enums;
|
||||
|
||||
public enum MessageActionEnum {
|
||||
|
||||
NEW_FOUCS(1,"新的关注"), //新的关注
|
||||
SYSTEM_NOTIFY(2, "系统->通知"), // 系统->通知
|
||||
SYSTEM_REPORT(3, "系统->举报下架(视频,视频评论) 视频评论"), // 系统->举报下架(视频,视频评论) 视频评论
|
||||
SYSTEM_CHECK(4, "系统->审核结果(复审,驳回 ,通过)"), // 系统->审核结果(复审,驳回 ,通过)
|
||||
SYSTEM_PUSH(5, "系统->推广类的"), //系统->推广类的
|
||||
INTERACTION_COMMENT(6, "互动->评论"), //互动->评论
|
||||
INTERACTION_AT(7, "互动->视频评论中的@"), //互动->视频评论中的@
|
||||
INTERACTION_LIKE(8, "互动->点赞"), //互动->点赞
|
||||
INTERACTION_REPLY(9, "互动->评论回复"), //互动->评论回复
|
||||
ORDER_RECHARGE(10, "订单->充值 online"), //订单->充值 online
|
||||
ORDER_PAY(11, "订单->订单交易成功通知 online"), //订单->订单交易成功通知 online
|
||||
ORDER_REFUND(12, "订单->退款结果通知"), //订单->退款结果通知
|
||||
GROUP_NOTIFY_CHECK(13, "群通知->进群申请 online"), //群通知->进群申请 online
|
||||
GROUP_NOTIFY_ACCEPT(14, "群通知->进群审核审核通过 online"), // 群通知->进群审核审核通过 online
|
||||
GROUP_NOTIFY_FAIL(15, "群通知->进群审核审核拒绝 online"), // 群通知->进群审核审核拒绝 online
|
||||
GROUP_NOTIFY_LEAVE_UP(16, "群通知->群升级为达人群通知"), // 群通知->群升级为达人群通知
|
||||
GROUP_NOTIFY_LEAVE_DOWN(17, "群通知->群降级为普通群通知"); // 群通知->群降级为普通群通知
|
||||
|
||||
private int code;
|
||||
private String account;
|
||||
private String desc;
|
||||
|
||||
MessageActionEnum(int code, String desc) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public static MessageActionEnum getByCode(int code) {
|
||||
for (MessageActionEnum actionEnum : values()) {
|
||||
if (actionEnum.getCode() == code) {
|
||||
return actionEnum;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.service;
|
||||
package org.dromara.common.mq.service;
|
||||
|
||||
/**
|
||||
* RocketMQ服务接口
|
||||
@ -23,7 +23,7 @@ public interface IRocketMQService {
|
||||
* @param message 消息内容
|
||||
*/
|
||||
void sendMessage(String topic, String tag, Object message);
|
||||
|
||||
|
||||
/**
|
||||
* 发送延迟消息
|
||||
*
|
||||
@ -33,4 +33,4 @@ public interface IRocketMQService {
|
||||
* @param delayTimeLevel 延迟级别 (1s/5s/10s/30s/1m/2m/3m/4m/5m/6m/7m/8m/9m/10m/20m/30m/1h/2h)
|
||||
*/
|
||||
void sendDelayMessage(String topic, String tag, Object message, int delayTimeLevel);
|
||||
}
|
||||
}
|
@ -1,12 +1,11 @@
|
||||
package org.dromara.system.service.impl;
|
||||
package org.dromara.common.mq.service.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.client.producer.SendCallback;
|
||||
import org.apache.rocketmq.client.producer.SendResult;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.system.service.IRocketMQService;
|
||||
import org.dromara.common.mq.service.IRocketMQService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.messaging.support.MessageBuilder;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -29,7 +28,7 @@ public class RocketMQServiceImpl implements IRocketMQService {
|
||||
log.error("RocketMQTemplate未初始化,无法发送消息");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
String jsonMessage = JsonUtils.toJsonString(message);
|
||||
rocketMQTemplate.convertAndSend(topic, jsonMessage);
|
||||
@ -45,7 +44,7 @@ public class RocketMQServiceImpl implements IRocketMQService {
|
||||
log.error("RocketMQTemplate未初始化,无法发送消息");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
String destination = topic + ":" + tag;
|
||||
String jsonMessage = JsonUtils.toJsonString(message);
|
||||
@ -62,21 +61,21 @@ public class RocketMQServiceImpl implements IRocketMQService {
|
||||
log.error("RocketMQTemplate未初始化,无法发送延迟消息");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
String destination = topic + ":" + tag;
|
||||
String jsonMessage = JsonUtils.toJsonString(message);
|
||||
rocketMQTemplate.asyncSend(destination, MessageBuilder.withPayload(jsonMessage).build(),
|
||||
rocketMQTemplate.asyncSend(destination, MessageBuilder.withPayload(jsonMessage).build(),
|
||||
new SendCallback() {
|
||||
@Override
|
||||
public void onSuccess(SendResult sendResult) {
|
||||
log.info("发送延迟消息到RocketMQ成功,destination: {}, message: {}, result: {}",
|
||||
log.info("发送延迟消息到RocketMQ成功,destination: {}, message: {}, result: {}",
|
||||
destination, jsonMessage, sendResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable throwable) {
|
||||
log.error("发送延迟消息到RocketMQ异常,destination: {}, message: {}",
|
||||
log.error("发送延迟消息到RocketMQ异常,destination: {}, message: {}",
|
||||
destination, jsonMessage, throwable);
|
||||
}
|
||||
}, 3000, delayTimeLevel);
|
||||
@ -85,4 +84,3 @@ public class RocketMQServiceImpl implements IRocketMQService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,85 @@
|
||||
package org.dromara.common.mq.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.client.producer.SendCallback;
|
||||
import org.apache.rocketmq.client.producer.SendResult;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.common.mq.domain.MQMessage;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.messaging.support.MessageBuilder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class MqUtil implements ApplicationContextAware {
|
||||
private static RocketMQTemplate template;
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
template = applicationContext.getBean(RocketMQTemplate.class);
|
||||
}
|
||||
|
||||
//
|
||||
public static void sendMessage(String topic, MQMessage message) {
|
||||
if (template == null) {
|
||||
log.error("RocketMQTemplate未初始化,无法发送消息");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String jsonMessage = JsonUtils.toJsonString(message);
|
||||
template.convertAndSend(topic, jsonMessage);
|
||||
log.info("发送消息到RocketMQ成功,topic: {}, message: {}", topic, jsonMessage);
|
||||
} catch (Exception e) {
|
||||
log.error("发送消息到RocketMQ失败,topic: {}, message: {}", topic, message, e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void sendMessage(String topic, String tag, MQMessage message) {
|
||||
if (template == null) {
|
||||
log.error("RocketMQTemplate未初始化,无法发送消息");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String destination = topic + ":" + tag;
|
||||
String jsonMessage = JsonUtils.toJsonString(message);
|
||||
template.convertAndSend(destination, jsonMessage);
|
||||
log.info("发送消息到RocketMQ成功,destination: {}, message: {}", destination, jsonMessage);
|
||||
} catch (Exception e) {
|
||||
log.error("发送消息到RocketMQ失败,topic: {}, tag: {}, message: {}", topic, tag, message, e);
|
||||
}
|
||||
}
|
||||
public static void sendDelayMessage(String topic, String tag, MQMessage message, int delayTimeLevel) {
|
||||
if (template == null) {
|
||||
log.error("RocketMQTemplate未初始化,无法发送延迟消息");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
String destination = topic + ":" + tag;
|
||||
String jsonMessage = JsonUtils.toJsonString(message);
|
||||
template.asyncSend(destination, MessageBuilder.withPayload(jsonMessage).build(),
|
||||
new SendCallback() {
|
||||
@Override
|
||||
public void onSuccess(SendResult sendResult) {
|
||||
log.info("发送延迟消息到RocketMQ成功,destination: {}, message: {}, result: {}",
|
||||
destination, jsonMessage, sendResult);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onException(Throwable throwable) {
|
||||
log.error("发送延迟消息到RocketMQ异常,destination: {}, message: {}",
|
||||
destination, jsonMessage, throwable);
|
||||
}
|
||||
}, 3000, delayTimeLevel);
|
||||
} catch (Exception e) {
|
||||
log.error("发送延迟消息到RocketMQ失败,topic: {}, tag: {}, message: {}", topic, tag, message, e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
<version>${revision}</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ruoyi-common-rabbitmq</artifactId>
|
||||
<description>
|
||||
ruoyi-common-rabbitmq
|
||||
</description>
|
||||
|
||||
<dependencies>
|
||||
<!-- RuoYi Common Core-->
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-log</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-amqp</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Jackson for JSON -->
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
</dependencies>
|
||||
</project>
|
@ -1,55 +0,0 @@
|
||||
package org.dromara.common.rabbitmq.config.properties;
|
||||
|
||||
|
||||
import org.springframework.amqp.core.*;
|
||||
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
|
||||
import org.springframework.amqp.support.converter.MessageConverter;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@Configuration
|
||||
public class RabbitMQConfig {
|
||||
|
||||
public static final String DIRECT_EXCHANGE_NAME = "ruoyi.direct.exchange";
|
||||
public static final String DIRECT_QUEUE_NAME = "ruoyi.direct.queue";
|
||||
public static final String DIRECT_ROUTING_KEY = "ruoyi.direct.routingkey";
|
||||
|
||||
public static final String TOPIC_EXCHANGE_NAME = "ruoyi.topic.exchange";
|
||||
public static final String TOPIC_QUEUE_NAME = "ruoyi.topic.queue";
|
||||
public static final String TOPIC_ROUTING_KEY = "ruoyi.topic.#";
|
||||
|
||||
@Bean
|
||||
public DirectExchange directExchange() {
|
||||
return new DirectExchange(DIRECT_EXCHANGE_NAME, true, false);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TopicExchange topicExchange() {
|
||||
return new TopicExchange(TOPIC_EXCHANGE_NAME, true, false);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Queue directQueue() {
|
||||
return new Queue(DIRECT_QUEUE_NAME, true);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Queue topicQueue() {
|
||||
return new Queue(TOPIC_QUEUE_NAME, true);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Binding directBinding(Queue directQueue, DirectExchange directExchange) {
|
||||
return BindingBuilder.bind(directQueue).to(directExchange).with(DIRECT_ROUTING_KEY);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Binding topicBinding(Queue topicQueue, TopicExchange topicExchange) {
|
||||
return BindingBuilder.bind(topicQueue).to(topicExchange).with(TOPIC_ROUTING_KEY);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MessageConverter jsonMessageConverter() {
|
||||
return new Jackson2JsonMessageConverter();
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
package org.dromara.common.rabbitmq.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class BaseMessage {
|
||||
private String messageId;
|
||||
private String messageType;
|
||||
private Object data;
|
||||
private LocalDateTime time;
|
||||
private String source;
|
||||
|
||||
public BaseMessage() {
|
||||
this.time = LocalDateTime.now();
|
||||
}
|
||||
|
||||
public BaseMessage(String messageType, Object data) {
|
||||
this();
|
||||
this.messageType = messageType;
|
||||
this.data = data;
|
||||
}
|
||||
}
|
@ -1,157 +0,0 @@
|
||||
package org.dromara.common.rabbitmq.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.common.rabbitmq.config.properties.RabbitMQConfig;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.amqp.AmqpException;
|
||||
import org.springframework.amqp.core.Message;
|
||||
import org.springframework.amqp.core.MessageBuilder;
|
||||
import org.springframework.amqp.core.MessageDeliveryMode;
|
||||
import org.springframework.amqp.core.MessageProperties;
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.amqp.support.converter.MessageConverter;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
@Slf4j
|
||||
@Component
|
||||
public class MqUtil implements ApplicationContextAware {
|
||||
private static RabbitTemplate rabbitTemplate;
|
||||
private static MessageConverter messageConverter;
|
||||
|
||||
@Override
|
||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||
rabbitTemplate = applicationContext.getBean(RabbitTemplate.class);
|
||||
messageConverter = applicationContext.getBean(MessageConverter.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送消息到指定交换机和路由键
|
||||
*/
|
||||
public static void sendMessage(String exchange, String routingKey, Object message) {
|
||||
try {
|
||||
rabbitTemplate.convertAndSend(exchange, routingKey, message);
|
||||
log.debug("消息发送成功 - exchange: {}, routingKey: {}, message: {}", exchange, routingKey, message);
|
||||
} catch (AmqpException e) {
|
||||
log.error("消息发送失败 - exchange: {}, routingKey: {}, message: {}", exchange, routingKey, message, e);
|
||||
throw new RuntimeException("消息发送失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送消息到指定队列(使用默认交换机)
|
||||
*/
|
||||
public static void sendToQueue(String queueName, Object message) {
|
||||
sendMessage("", queueName, message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送延迟消息
|
||||
*/
|
||||
public static void sendDelayedMessage(String exchange, String routingKey, Object message, long delayMillis) {
|
||||
try {
|
||||
Message amqpMessage = messageConverter.toMessage(message, new MessageProperties());
|
||||
amqpMessage.getMessageProperties().setDelayLong(delayMillis);
|
||||
amqpMessage.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
|
||||
|
||||
rabbitTemplate.convertAndSend(exchange, routingKey, amqpMessage);
|
||||
log.debug("延迟消息发送成功 - exchange: {}, routingKey: {}, delay: {}ms", exchange, routingKey, delayMillis);
|
||||
} catch (AmqpException e) {
|
||||
log.error("延迟消息发送失败", e);
|
||||
throw new RuntimeException("延迟消息发送失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 发送带有headers的消息
|
||||
// */
|
||||
// public static void sendMessageWithHeaders(String exchange, String routingKey, Object message, Map<String, Object> headers) {
|
||||
// try {
|
||||
// Message amqpMessage = messageConverter.toMessage(message, new MessageProperties());
|
||||
// if (headers != null) {
|
||||
// headers.forEach((key, value) -> amqpMessage.getMessageProperties().setHeader(key, value));
|
||||
// }
|
||||
//
|
||||
// rabbitTemplate.convertAndSend(exchange, routingKey, amqpMessage);
|
||||
// log.debug("带headers的消息发送成功 - exchange: {}, routingKey: {}", exchange, routingKey);
|
||||
// } catch (AmqpException e) {
|
||||
// log.error("带headers的消息发送失败", e);
|
||||
// throw new RuntimeException("消息发送失败", e);
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* 发送JSON格式的消息
|
||||
*/
|
||||
public static void sendJsonMessage(String exchange, String routingKey, Object message) {
|
||||
try {
|
||||
Message amqpMessage = MessageBuilder.withBody(JsonUtils.toJsonString(message).getBytes())
|
||||
.setContentType(MessageProperties.CONTENT_TYPE_JSON)
|
||||
.setDeliveryMode(MessageDeliveryMode.PERSISTENT)
|
||||
.build();
|
||||
|
||||
rabbitTemplate.convertAndSend(exchange, routingKey, amqpMessage);
|
||||
log.debug("JSON消息发送成功 - exchange: {}, routingKey: {}", exchange, routingKey);
|
||||
} catch (AmqpException e) {
|
||||
log.error("JSON消息发送失败", e);
|
||||
throw new RuntimeException("JSON消息发送失败", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送消息并等待确认(同步方式)
|
||||
*/
|
||||
public static boolean sendMessageWithConfirm(String exchange, String routingKey, Object message) {
|
||||
try {
|
||||
rabbitTemplate.invoke(operations -> {
|
||||
operations.convertAndSend(exchange, routingKey, message);
|
||||
// 等待确认
|
||||
return operations.waitForConfirms(5000);
|
||||
});
|
||||
log.debug("消息发送并确认成功 - exchange: {}, routingKey: {}", exchange, routingKey);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.error("消息发送确认失败", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送消息到预定义的直连交换机
|
||||
*/
|
||||
public static void sendToDirectExchange(Object message) {
|
||||
sendMessage("ruoyi.direct.exchange", "ruoyi.direct.routingkey", message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送消息到预定义的主题交换机
|
||||
*/
|
||||
public static void sendToTopicExchange(String routingKey, Object message) {
|
||||
sendMessage("ruoyi.topic.exchange", routingKey, message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查RabbitMQ连接状态
|
||||
*/
|
||||
public static boolean isConnected() {
|
||||
try {
|
||||
rabbitTemplate.execute(channel -> {
|
||||
// 简单的连接检查
|
||||
return channel.isOpen();
|
||||
});
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.warn("RabbitMQ连接检查失败", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.common.rabbitmq.config.properties;
|
||||
package org.dromara.common.mq.config.properties;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
@ -10,7 +10,7 @@ import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.utils.SpringUtils;
|
||||
import org.dromara.common.rabbitmq.config.properties.RedissonProperties;
|
||||
import org.dromara.common.mq.config.properties.RedissonProperties;
|
||||
import org.dromara.common.redis.handler.KeyPrefixHandler;
|
||||
import org.dromara.common.redis.handler.RedisExceptionHandler;
|
||||
import org.redisson.client.codec.StringCodec;
|
||||
|
@ -5,7 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
|
||||
import org.dromara.common.core.utils.reflect.ReflectUtils;
|
||||
import org.dromara.common.redis.config.RedisConfig;
|
||||
import org.dromara.common.rabbitmq.config.properties.RedissonProperties;
|
||||
import org.dromara.common.mq.config.properties.RedissonProperties;
|
||||
import org.dromara.common.tenant.core.TenantSaTokenDao;
|
||||
import org.dromara.common.tenant.handle.PlusTenantLineHandler;
|
||||
import org.dromara.common.tenant.handle.TenantKeyPrefixHandler;
|
||||
|
@ -1,18 +1,20 @@
|
||||
package com.wzj.soopin.content.domain.bo;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.wzj.soopin.content.domain.po.Comment;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import org.dromara.common.core.domain.BaseBO;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@ToString
|
||||
public class CommentBO {
|
||||
public class CommentBO extends BaseBO<Comment> {
|
||||
|
||||
private Long id;
|
||||
|
||||
@NotBlank(message = "留言信息不完整")
|
||||
private String vlogerId;
|
||||
@ -32,7 +34,14 @@ public class CommentBO {
|
||||
|
||||
private String mobile;
|
||||
|
||||
public String getMobile() { return mobile; }
|
||||
|
||||
public void setMobile(String mobile) { this.mobile = mobile; }
|
||||
@Override
|
||||
public LambdaQueryWrapper<Comment> toWrapper() {
|
||||
return super.toWrapper().eq(id!=null,Comment::getId,id)
|
||||
.eq(vlogerId!=null,Comment::getVlogerId,vlogerId)
|
||||
.eq(fatherCommentId!=null,Comment::getFatherCommentId,fatherCommentId)
|
||||
.eq(vlogId!=null,Comment::getVlogId,vlogId)
|
||||
.eq(commentUserId!=null,Comment::getCommentUserId,commentUserId)
|
||||
.eq(content!=null,Comment::getContent,content);
|
||||
}
|
||||
}
|
||||
|
@ -177,14 +177,11 @@ public class CommentServiceImpl extends BaseInfoProperties implements CommentSer
|
||||
@Override
|
||||
public Page<CommentVO> pageComment(Page<Comment> page, CommentBO bo) {
|
||||
// 如果是按点赞数排序,则调用新的Mapper方法进行聚合排序
|
||||
// if (bo != null && "likeCounts".equals(bo.getColumn())) {
|
||||
// Page<CommentVO> voPage = new Page<>(page.getCurrent(), page.getSize());
|
||||
// commentMapperCustom.selectCommentsWithAggregatedLikes(voPage, bo);
|
||||
// return voPage;
|
||||
// }
|
||||
|
||||
LambdaQueryWrapper<Comment> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Comment::getFatherCommentId, "0");
|
||||
LambdaQueryWrapper<Comment> wrapper = bo.toWrapper();
|
||||
if(bo.getFatherCommentId()==null){
|
||||
wrapper.eq(Comment::getFatherCommentId, "0");
|
||||
}
|
||||
|
||||
// 手机号查视频
|
||||
if (bo != null && org.springframework.util.StringUtils.hasText(bo.getMobile())) {
|
||||
|
@ -47,7 +47,7 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-rabbitmq</artifactId>
|
||||
<artifactId>ruoyi-common-mq</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- OSS功能模块 -->
|
||||
|
@ -1,16 +1,15 @@
|
||||
package org.dromara.soopin.im.consumer;
|
||||
package com.wzj.soopin.im.consumer;
|
||||
import com.rabbitmq.client.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.rabbitmq.config.properties.RabbitMQConfig;
|
||||
//import org.dromara.common.mq.config.properties.RabbitMQConfig;
|
||||
import org.springframework.amqp.core.Message;
|
||||
import org.springframework.amqp.rabbit.annotation.RabbitListener;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
@Slf4j
|
||||
@Component
|
||||
public class IMMessageConsumer {
|
||||
@RabbitListener(queues = RabbitMQConfig.TOPIC_QUEUE_NAME)
|
||||
// @RabbitListener(queues = RabbitMQConfig.TOPIC_QUEUE_NAME)
|
||||
public void handleDirectMessage(String message, Channel channel, Message amqpMessage) throws IOException {
|
||||
try {
|
||||
log.info("接收到直连队列消息: {}", message);
|
@ -1,14 +1,13 @@
|
||||
package org.dromara.system.consumer;
|
||||
package com.wzj.soopin.im.consumer;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
|
||||
import org.apache.rocketmq.spring.core.RocketMQListener;
|
||||
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.system.config.RocketMQConfig;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
//import org.dromara.system.config.RocketMQConfig;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
import org.dromara.system.websocket.MessageWebSocketServer;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -20,11 +19,11 @@ import org.springframework.stereotype.Component;
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@RocketMQMessageListener(
|
||||
topic = RocketMQConfig.TOPIC_SYS_MSG,
|
||||
consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG,
|
||||
selectorExpression = RocketMQConfig.TAG_SYS_MSG
|
||||
)
|
||||
//@RocketMQMessageListener(
|
||||
// topic = RocketMQConfig.TOPIC_SYS_MSG,
|
||||
// consumerGroup = RocketMQConfig.CONSUMER_GROUP_SYS_MSG,
|
||||
// selectorExpression = RocketMQConfig.TAG_SYS_MSG
|
||||
//)
|
||||
public class MessageRocketMQConsumer implements RocketMQListener<String> {
|
||||
|
||||
private final MessageWebSocketServer messageWebSocketServer;
|
@ -1,6 +1,8 @@
|
||||
package org.dromara.system.controller;
|
||||
package com.wzj.soopin.im.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.im.domain.SysMessage;
|
||||
import com.wzj.soopin.im.domain.bo.SysMessageBo;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -12,10 +14,8 @@ import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.bo.SysMessageBo;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import org.dromara.system.service.ISysMessageService;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.service.ISysMessageService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@ -28,7 +28,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/system/message")
|
||||
public class SysMessageController extends BaseController {
|
||||
public class IMMessageController extends BaseController {
|
||||
|
||||
private final ISysMessageService messageService;
|
||||
|
@ -1,8 +1,8 @@
|
||||
package org.dromara.system.controller;
|
||||
package com.wzj.soopin.im.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.im.domain.bo.SysMessageTemplateBo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
@ -10,18 +10,16 @@ import jakarta.validation.constraints.NotNull;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.system.converter.SysMessageTemplateConvert;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.bo.SysMessageTemplateBo;
|
||||
import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
||||
import org.dromara.system.service.ISysMessageTemplateService;
|
||||
import com.wzj.soopin.im.converter.SysMessageTemplateConvert;
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageTemplateVo;
|
||||
import com.wzj.soopin.im.service.ISysMessageTemplateService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@ -35,8 +33,8 @@ import java.util.List;
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/system/message/template")
|
||||
public class SysMessageTemplateController extends BaseController {
|
||||
@RequestMapping("/im/message/template")
|
||||
public class IMMessageTemplateController extends BaseController {
|
||||
|
||||
private final ISysMessageTemplateService templateService;
|
||||
|
||||
@ -47,12 +45,10 @@ public class SysMessageTemplateController extends BaseController {
|
||||
*/
|
||||
@SaCheckPermission("system:message:template:list")
|
||||
@Tag(name = "查询消息模板列表")
|
||||
@PostMapping("/list")
|
||||
@PostMapping("/page")
|
||||
public R<Page<SysMessageTemplateVo>> list(@RequestBody SysMessageTemplateBo bo, @RequestBody Page<SysMessageTemplate> page) {
|
||||
Page<SysMessageTemplate> templatePage = templateService.page(page, bo.toWrapper());
|
||||
Page<SysMessageTemplateVo> voPage = new Page<>(templatePage.getCurrent(), templatePage.getSize(), templatePage.getTotal());
|
||||
voPage.setRecords(MapstructUtils.convert(templatePage.getRecords(), SysMessageTemplateVo.class));
|
||||
return R.ok(voPage);
|
||||
return R.ok(convert.toVO(templatePage));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -64,7 +60,7 @@ public class SysMessageTemplateController extends BaseController {
|
||||
@GetMapping("/{id}")
|
||||
public R<SysMessageTemplateVo> getInfo(@NotNull(message = "消息模板ID不能为空") @PathVariable Long id) {
|
||||
SysMessageTemplate template = templateService.getById(id);
|
||||
return R.ok(MapstructUtils.convert(template, SysMessageTemplateVo.class));
|
||||
return R.ok(convert.toVO(template));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -89,9 +85,9 @@ public class SysMessageTemplateController extends BaseController {
|
||||
@SaCheckPermission("system:message:template:add")
|
||||
@Log(title = "消息模板管理", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody SysMessageTemplateBo bo) {
|
||||
return toAjax(templateService.save(convert.toPo(bo)));
|
||||
@PostMapping("/add")
|
||||
public R<Boolean> add(@Validated(AddGroup.class) @RequestBody SysMessageTemplateBo bo) {
|
||||
return R.ok(templateService.save(convert.toPo(bo)));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -99,21 +95,20 @@ public class SysMessageTemplateController extends BaseController {
|
||||
*/
|
||||
@SaCheckPermission("system:message:template:edit")
|
||||
@Log(title = "消息模板管理", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SysMessageTemplateBo bo) {
|
||||
return toAjax(templateService.updateById(convert.toPo(bo)));
|
||||
@PostMapping(("/update"))
|
||||
public R<Boolean> edit(@Validated(EditGroup.class) @RequestBody SysMessageTemplateBo bo) {
|
||||
return R.ok(templateService.updateById(convert.toPo(bo)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除消息模板
|
||||
*
|
||||
* @param ids 消息模板ID串
|
||||
* @param id 消息模板ID
|
||||
*/
|
||||
@SaCheckPermission("system:message:template:remove")
|
||||
@Log(title = "消息模板管理", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "消息模板ID不能为空") @PathVariable Long[] ids) {
|
||||
return toAjax(templateService.removeByIds(List.of(ids)));
|
||||
@DeleteMapping("/{id}")
|
||||
public R<Boolean> remove(@NotEmpty(message = "消息模板ID不能为空") @PathVariable Long id) {
|
||||
return R.ok(templateService.removeById(id));
|
||||
}
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
package org.dromara.system.controller;
|
||||
package com.wzj.soopin.im.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.wzj.soopin.im.domain.SysMessage;
|
||||
import com.wzj.soopin.im.service.ISysMessageService;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
@ -9,12 +11,10 @@ import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import org.dromara.system.service.ISysMessageService;
|
||||
import org.dromara.system.service.ISysMessageTemplateService;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.service.ISysMessageTemplateService;
|
||||
import org.dromara.system.service.ISysUserService;
|
||||
import org.dromara.system.service.impl.SystemMessageUserService;
|
||||
import com.wzj.soopin.im.service.impl.SystemMessageUserService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@ -28,8 +28,8 @@ import static org.dromara.common.satoken.utils.LoginHelper.getUserId;
|
||||
@Validated
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/system/message/task")
|
||||
public class SysMessageUserController extends BaseController {
|
||||
@RequestMapping("/im/message/task")
|
||||
public class IMMessageUserController extends BaseController {
|
||||
|
||||
private final ISysMessageService messageService;
|
||||
private final ISysUserService userService;
|
@ -1,9 +1,9 @@
|
||||
package org.dromara.system.converter;
|
||||
package com.wzj.soopin.im.converter;
|
||||
|
||||
import com.wzj.soopin.im.domain.SysMessage;
|
||||
import com.wzj.soopin.im.domain.bo.SysMessageBo;
|
||||
import org.dromara.common.web.core.BaseConverter;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.bo.SysMessageBo;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
@ -12,6 +12,6 @@ import org.mapstruct.Mapper;
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface SysMessageConvert extends BaseConverter<SysMessageVo, SysMessageBo,SysMessage> {
|
||||
public interface SysMessageConvert extends BaseConverter<SysMessageVo, SysMessageBo, SysMessage> {
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.wzj.soopin.im.converter;
|
||||
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.bo.SysMessageTemplateBo;
|
||||
import org.dromara.common.web.core.BaseConverter;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageTemplateVo;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* 消息对象转换器
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface SysMessageTemplateConvert extends BaseConverter<SysMessageTemplateVo, SysMessageTemplateBo, SysMessageTemplate> {
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.domain;
|
||||
package com.wzj.soopin.im.domain;
|
||||
|
||||
/**
|
||||
* 消息模板类型编号常量
|
||||
@ -13,4 +13,4 @@ public class MessageTemplateType {
|
||||
public static final String ORDER_NOTICE = "8"; // 订单通知
|
||||
public static final String VERIFY_SUCCESS = "9"; // 核销成功
|
||||
public static final String VERIFY_FAIL = "10"; // 核销失败
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.domain;
|
||||
package com.wzj.soopin.im.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.domain;
|
||||
package com.wzj.soopin.im.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.domain;
|
||||
package com.wzj.soopin.im.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
@ -1,6 +1,5 @@
|
||||
package org.dromara.system.domain.bo;
|
||||
package com.wzj.soopin.im.domain.bo;
|
||||
|
||||
import cn.hutool.core.map.MapWrapper;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
@ -9,11 +8,9 @@ import jakarta.validation.constraints.Size;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.common.core.domain.BaseBO;
|
||||
import org.dromara.common.core.domain.model.BaseAudit;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import com.wzj.soopin.im.domain.SysMessage;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
@ -24,8 +21,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
|
||||
/**
|
||||
* 消息业务对象
|
@ -1,17 +1,14 @@
|
||||
package org.dromara.system.domain.bo;
|
||||
package com.wzj.soopin.im.domain.bo;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.common.core.domain.BaseBO;
|
||||
import org.dromara.common.core.domain.model.BaseAudit;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
@ -1,7 +1,7 @@
|
||||
package org.dromara.system.domain.event;
|
||||
package com.wzj.soopin.im.domain.event;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
|
||||
/**
|
||||
@ -25,7 +25,7 @@ public class MessageEvent extends ApplicationEvent {
|
||||
this.userId = userId;
|
||||
this.userIdStr = userId != null ? String.valueOf(userId) : null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 使用 String 类型用户 ID 创建消息事件
|
||||
*/
|
||||
@ -33,7 +33,7 @@ public class MessageEvent extends ApplicationEvent {
|
||||
super(source);
|
||||
this.message = message;
|
||||
this.userIdStr = userIdStr;
|
||||
|
||||
|
||||
// 尝试转换为 Long 类型
|
||||
Long parsedUserId = null;
|
||||
try {
|
||||
@ -45,10 +45,10 @@ public class MessageEvent extends ApplicationEvent {
|
||||
}
|
||||
this.userId = parsedUserId;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 创建 MessageEvent 实例(支持 String 类型用户ID)
|
||||
*
|
||||
*
|
||||
* @param source 事件源
|
||||
* @param message 消息对象
|
||||
* @param userIdStr 用户ID (String类型)
|
||||
@ -57,4 +57,4 @@ public class MessageEvent extends ApplicationEvent {
|
||||
public static MessageEvent createWithStringUserId(Object source, SysMessageVo message, String userIdStr) {
|
||||
return new MessageEvent(source, message, userIdStr);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,12 +1,6 @@
|
||||
package org.dromara.system.domain.vo;
|
||||
package com.wzj.soopin.im.domain.vo;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.common.tenant.core.TenantEntity;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.domain.vo;
|
||||
package com.wzj.soopin.im.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
@ -1,17 +1,14 @@
|
||||
package org.dromara.system.domain.vo;
|
||||
package com.wzj.soopin.im.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.wzj.soopin.im.domain.SysMessage;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.system.domain
|
||||
.SysMessage;
|
||||
import org.dromara.system.domain.SysNotice;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.im.enums;
|
||||
package com.wzj.soopin.im.enums;
|
||||
|
||||
public enum MessageActionEnum {
|
||||
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.im.enums;
|
||||
package com.wzj.soopin.im.enums;
|
||||
|
||||
public enum MessageScopeEnum {
|
||||
/**
|
@ -1,17 +1,16 @@
|
||||
package org.dromara.system.event;
|
||||
package com.wzj.soopin.im.event;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.json.utils.JsonUtils;
|
||||
import org.dromara.system.consumer.MessageRocketMQConsumer;
|
||||
import org.dromara.system.domain.event.MessageEvent;
|
||||
import org.dromara.system.service.IRocketMQService;
|
||||
import org.dromara.system.service.ITencentIMService;
|
||||
import com.wzj.soopin.im.consumer.MessageRocketMQConsumer;
|
||||
import com.wzj.soopin.im.domain.event.MessageEvent;
|
||||
import org.dromara.common.mq.service.IRocketMQService;
|
||||
import com.wzj.soopin.im.service.ITencentIMService;
|
||||
import org.dromara.system.websocket.MessageWebSocketServer;
|
||||
import org.dromara.system.service.impl.TencentIMServiceImpl;
|
||||
import com.wzj.soopin.im.service.impl.TencentIMServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.event.EventListener;
|
@ -1,9 +1,9 @@
|
||||
package org.dromara.system.mapper;
|
||||
package com.wzj.soopin.im.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.domain.SysMessage;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
|
||||
/**
|
||||
* 消息Mapper接口
|
||||
@ -20,4 +20,4 @@ public interface SysMessageMapper extends BaseMapper<SysMessage> {
|
||||
* @return 消息分页列表
|
||||
*/
|
||||
Page<SysMessageVo> selectPageUnreadMessages(Page<SysMessageVo> page, Long userId);
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package org.dromara.system.mapper;
|
||||
package com.wzj.soopin.im.mapper;
|
||||
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageTemplateVo;
|
||||
|
||||
/**
|
||||
* 消息模板Mapper接口
|
||||
@ -15,4 +15,4 @@ public interface SysMessageTemplateMapper extends BaseMapperPlus<SysMessageTempl
|
||||
* 根据模板类型编号查找模板
|
||||
*/
|
||||
SysMessageTemplate selectByTemplateType(String templateType);
|
||||
}
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
package org.dromara.system.mapper;
|
||||
package com.wzj.soopin.im.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.system.domain.SysMessageUser;
|
||||
import org.dromara.system.domain.vo.SysMessageUserVo;
|
||||
import com.wzj.soopin.im.domain.SysMessageUser;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageUserVo;
|
||||
|
||||
/**
|
||||
* 消息用户关联Mapper接口
|
||||
@ -29,4 +29,4 @@ public interface SysMessageUserMapper extends BaseMapperPlus<SysMessageUser, Sys
|
||||
messageUser.setIsRead(isRead);
|
||||
return update(messageUser, lqw);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
package org.dromara.system.service;
|
||||
package com.wzj.soopin.im.service;
|
||||
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
|
||||
/**
|
||||
* WebSocket消息服务接口
|
||||
@ -23,4 +23,4 @@ public interface IMessageWebSocketService {
|
||||
* @param message 消息内容
|
||||
*/
|
||||
void broadcastMessage(SysMessageVo message);
|
||||
}
|
||||
}
|
@ -1,14 +1,14 @@
|
||||
package org.dromara.system.service;
|
||||
package com.wzj.soopin.im.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.wzj.soopin.im.domain.SysMessage;
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.bo.SysMessageBo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.bo.SysMessageBo;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -59,7 +59,7 @@ public interface ISysMessageService extends IService<SysMessage> {
|
||||
* @param userIds 用户ID列表 (String类型)
|
||||
* @return 结果
|
||||
*/
|
||||
int sendMessageToUsers(SysMessage message, SysMessageTemplate template,List<String> userIds);
|
||||
int sendMessageToUsers(SysMessage message, SysMessageTemplate template, List<String> userIds);
|
||||
|
||||
// /**
|
||||
// *
|
@ -1,11 +1,11 @@
|
||||
package org.dromara.system.service;
|
||||
package com.wzj.soopin.im.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.bo.SysMessageTemplateBo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.bo.SysMessageTemplateBo;
|
||||
import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageTemplateVo;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -0,0 +1,4 @@
|
||||
package com.wzj.soopin.im.service;
|
||||
|
||||
public interface ISystemMessageUserService {
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
package org.dromara.system.service;
|
||||
package com.wzj.soopin.im.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.dromara.system.service.impl.TencentIMServiceImpl;
|
||||
import com.wzj.soopin.im.service.impl.TencentIMServiceImpl;
|
||||
|
||||
/**
|
||||
* 腾讯IM服务接口
|
@ -1,9 +1,9 @@
|
||||
package org.dromara.system.service.impl;
|
||||
package com.wzj.soopin.im.service.impl;
|
||||
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.service.IMessageWebSocketService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import org.dromara.system.service.IMessageWebSocketService;
|
||||
import org.dromara.system.websocket.MessageWebSocketServer;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
@ -1,12 +1,22 @@
|
||||
package org.dromara.system.service.impl;
|
||||
package com.wzj.soopin.im.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
import com.wzj.soopin.content.domain.po.Vlog;
|
||||
import com.wzj.soopin.content.service.VlogService;
|
||||
import com.wzj.soopin.member.domain.po.Member;
|
||||
import com.wzj.soopin.im.converter.SysMessageConvert;
|
||||
import com.wzj.soopin.im.converter.SysMessageTemplateConvert;
|
||||
import com.wzj.soopin.im.domain.SysMessage;
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.SysMessageUser;
|
||||
import com.wzj.soopin.im.domain.bo.SysMessageBo;
|
||||
import com.wzj.soopin.im.domain.event.MessageEvent;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.mapper.SysMessageMapper;
|
||||
import com.wzj.soopin.im.mapper.SysMessageUserMapper;
|
||||
import com.wzj.soopin.im.service.ISysMessageService;
|
||||
import com.wzj.soopin.im.service.ISysMessageTemplateService;
|
||||
import com.wzj.soopin.member.service.IMemberService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -17,20 +27,8 @@ import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.im.enums.MessageActionEnum;
|
||||
import org.dromara.system.converter.SysMessageConvert;
|
||||
import org.dromara.system.converter.SysMessageTemplateConvert;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.SysMessageUser;
|
||||
import org.dromara.system.domain.bo.SysMessageBo;
|
||||
import org.dromara.system.domain.event.MessageEvent;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import com.wzj.soopin.im.enums.MessageActionEnum;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.mapper.SysMessageMapper;
|
||||
import org.dromara.system.mapper.SysMessageUserMapper;
|
||||
import org.dromara.system.service.ISysMessageService;
|
||||
import org.dromara.system.service.ISysMessageTemplateService;
|
||||
import org.dromara.system.service.ISysTenantService;
|
||||
import org.dromara.system.service.ISysUserService;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
@ -1,18 +1,18 @@
|
||||
package org.dromara.system.service.impl;
|
||||
package com.wzj.soopin.im.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.wzj.soopin.im.domain.SysMessageTemplate;
|
||||
import com.wzj.soopin.im.domain.bo.SysMessageTemplateBo;
|
||||
import com.wzj.soopin.im.mapper.SysMessageTemplateMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.bo.SysMessageTemplateBo;
|
||||
import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
||||
import org.dromara.system.mapper.SysMessageTemplateMapper;
|
||||
import org.dromara.system.service.ISysMessageTemplateService;
|
||||
import com.wzj.soopin.im.domain.vo.SysMessageTemplateVo;
|
||||
import com.wzj.soopin.im.service.ISysMessageTemplateService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
@ -0,0 +1,16 @@
|
||||
package com.wzj.soopin.im.service.impl;
|
||||
|
||||
import com.wzj.soopin.im.service.ISystemMessageUserService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class SystemMessageUserService implements ISystemMessageUserService {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
package org.dromara.system.service.impl;
|
||||
package com.wzj.soopin.im.service.impl;
|
||||
|
||||
import cn.hutool.json.JSONArray;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.wzj.soopin.im.service.ITencentIMService;
|
||||
import com.wzj.soopin.im.util.TLSSigAPIv2;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.system.service.ITencentIMService;
|
||||
import org.dromara.system.util.TLSSigAPIv2;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.stereotype.Service;
|
@ -1,4 +1,4 @@
|
||||
package org.dromara.system.util;
|
||||
package com.wzj.soopin.im.util;
|
||||
|
||||
|
||||
import cn.hutool.json.JSONException;
|
@ -1,20 +0,0 @@
|
||||
package org.dromara.system.converter;
|
||||
|
||||
import org.dromara.common.web.core.BaseConverter;
|
||||
import org.dromara.system.domain.SysMessage;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.bo.SysMessageBo;
|
||||
import org.dromara.system.domain.bo.SysMessageTemplateBo;
|
||||
import org.dromara.system.domain.vo.SysMessageTemplateVo;
|
||||
import org.dromara.system.domain.vo.SysMessageVo;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
/**
|
||||
* 消息对象转换器
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Mapper(componentModel = "spring")
|
||||
public interface SysMessageTemplateConvert extends BaseConverter<SysMessageTemplateVo, SysMessageTemplateBo, SysMessageTemplate> {
|
||||
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
package org.dromara.system.service;
|
||||
|
||||
import org.dromara.system.domain.bo.SysMessageBo;
|
||||
|
||||
public interface ISystemMessageUserService {
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package org.dromara.system.service.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.system.domain.SysMessageTemplate;
|
||||
import org.dromara.system.domain.bo.SysMessageBo;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.service.*;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class SystemMessageUserService implements ISystemMessageUserService {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -2,9 +2,9 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.system.mapper.SysMessageMapper">
|
||||
<mapper namespace="com.wzj.soopin.im.mapper.SysMessageMapper">
|
||||
|
||||
<resultMap type="org.dromara.system.domain.vo.SysMessageVo" id="SysMessageResult">
|
||||
<resultMap type="com.wzj.soopin.im.domain.vo.SysMessageVo" id="SysMessageResult">
|
||||
<id property="id" column="id" />
|
||||
<result property="title" column="title" />
|
||||
<result property="content" column="content" />
|
||||
|
@ -2,9 +2,9 @@
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.system.mapper.SysMessageUserMapper">
|
||||
<mapper namespace="com.wzj.soopin.im.mapper.SysMessageUserMapper">
|
||||
|
||||
<resultMap type="org.dromara.system.domain.vo.SysMessageUserVo" id="SysMessageUserResult">
|
||||
<resultMap type="com.wzj.soopin.im.domain.vo.SysMessageUserVo" id="SysMessageUserResult">
|
||||
<id property="id" column="id" />
|
||||
<result property="messageId" column="message_id" />
|
||||
<result property="userId" column="user_id" />
|
||||
|
@ -29,6 +29,10 @@
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-mybatis</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
<artifactId>ruoyi-common-mq</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.dromara</groupId>
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.wzj.soopin.member.service.impl;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@ -15,11 +16,15 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.common.core.constant.CacheConstants;
|
||||
import org.dromara.common.core.enums.YesOrNo;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mq.domain.MQMessage;
|
||||
import org.dromara.common.mq.enums.MessageActionEnum;
|
||||
import org.dromara.common.mq.utils.MqUtil;
|
||||
import org.dromara.common.redis.redis.RedisCache;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@ -38,6 +43,9 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
||||
@Override
|
||||
public void doFollow(Long myId, Long vloggerId) {
|
||||
// 幂等性校验:已存在则不再插入
|
||||
|
||||
|
||||
|
||||
Fans existing = queryFansRelationship(myId, vloggerId);
|
||||
if (existing != null) {
|
||||
return;
|
||||
@ -64,17 +72,17 @@ public class FansServiceImpl extends ServiceImpl<FansMapper, Fans> implements IF
|
||||
Member vlogger = memberService.getById(vloggerId);
|
||||
if (follower != null && vlogger != null && !myId.equals(vloggerId)) {
|
||||
// 新版:使用模板类型编号和参数
|
||||
// Map<String, Object> params = new HashMap<>();
|
||||
// params.put("followerNickname", follower.getNickname() == null ? "" : follower.getNickname());
|
||||
// params.put("vloggerNickname", vlogger.getNickname() == null ? "" : vlogger.getNickname());
|
||||
// SysMessageBo messageBo = new SysMessageBo();
|
||||
// // 关注类型编号
|
||||
// messageBo.setTemplateType(org.dromara.system.domain.MessageTemplateType.FOLLOW);
|
||||
// messageBo.setTemplateParams(params);
|
||||
// messageBo.setSenderId(myId);
|
||||
// // 补充:设置消息标题,防止title为null
|
||||
// messageBo.setTitle("关注通知");
|
||||
// sysMessageService.sendMessageToUser(messageBo, vloggerId);
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("followerNickname", follower.getNickname() == null ? "" : follower.getNickname());
|
||||
params.put("vloggerNickname", vlogger.getNickname() == null ? "" : vlogger.getNickname());
|
||||
MQMessage message = MQMessage.builder()
|
||||
.messageType("follow")
|
||||
.data(params)
|
||||
.source("member")
|
||||
.build();
|
||||
// 关注消息
|
||||
MqUtil.sendMessage(MessageActionEnum.NEW_FOUCS.name(), message);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -141,25 +141,7 @@
|
||||
<version>1.4.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- RocketMQ -->
|
||||
<dependency>
|
||||
<groupId>org.apache.rocketmq</groupId>
|
||||
<artifactId>rocketmq-spring-boot-starter</artifactId>
|
||||
<version>2.2.3</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Spring Messaging for RocketMQ -->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-messaging</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Jackson核心依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.15.2</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
@ -1,2 +1,2 @@
|
||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
org.dromara.system.config.RocketMQConfiguration
|
||||
org.dromara.common.mq.config.RocketMQConfiguration
|
||||
|
@ -1 +1 @@
|
||||
org.dromara.system.config.RocketMQConfig
|
||||
org.dromara.common.mq.config.RocketMQConfig
|
||||
|
Loading…
x
Reference in New Issue
Block a user