feat: 集成WebSocket到UserMessageService

This commit is contained in:
张翔
2026-03-12 07:51:59 +08:00
parent 6d16a783ef
commit 95438f3334
@@ -0,0 +1,64 @@
package cn.novalon.manage.sys.core.service.impl;
import cn.novalon.manage.sys.core.domain.SysUserMessage;
import cn.novalon.manage.sys.core.service.ISysUserMessageService;
import cn.novalon.manage.sys.core.service.IWebSocketService;
import cn.novalon.manage.sys.infrastructure.db.converter.SysUserMessageConverter;
import cn.novalon.manage.sys.infrastructure.db.dao.SysUserMessageDao;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
@Service
public class SysUserMessageService implements ISysUserMessageService {
private final SysUserMessageDao dao;
private final SysUserMessageConverter converter;
private final IWebSocketService webSocketService;
public SysUserMessageService(SysUserMessageDao dao, SysUserMessageConverter converter,
IWebSocketService webSocketService) {
this.dao = dao;
this.converter = converter;
this.webSocketService = webSocketService;
}
@Override
public Flux<SysUserMessage> findByUserId(Long userId) {
return dao.findByUserIdOrderByCreateTimeDesc(userId)
.map(converter::toDomain);
}
@Override
public Flux<SysUserMessage> findByUserIdAndIsRead(Long userId, String isRead) {
return dao.findByUserIdAndIsReadOrderByCreateTimeDesc(userId, isRead)
.map(converter::toDomain);
}
@Override
public Mono<Long> countUnread(Long userId) {
return dao.countByUserIdAndIsRead(userId, "0");
}
@Override
public Mono<SysUserMessage> save(SysUserMessage message) {
return dao.save(converter.toEntity(message))
.map(converter::toDomain)
.flatMap(savedMessage -> {
return webSocketService.notifyNewMessage(
savedMessage.getUserId(),
savedMessage.getTitle(),
savedMessage.getContent()).thenReturn(savedMessage);
});
}
@Override
public Mono<Void> markAsRead(Long id) {
return dao.findById(id)
.flatMap(entity -> {
entity.setIsRead("1");
return dao.save(entity);
})
.then();
}
}