From 6d16a783ef3e7af1ef030e244f861bf7433a2c38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Thu, 12 Mar 2026 07:51:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=9B=86=E6=88=90WebSocket=E5=88=B0Not?= =?UTF-8?q?iceService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/service/impl/SysNoticeService.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysNoticeService.java diff --git a/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysNoticeService.java b/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysNoticeService.java new file mode 100644 index 0000000..74a7dab --- /dev/null +++ b/novalon-manage-api/manage-sys/src/main/java/cn/novalon/manage/sys/core/service/impl/SysNoticeService.java @@ -0,0 +1,59 @@ +package cn.novalon.manage.sys.core.service.impl; + +import cn.novalon.manage.sys.core.domain.SysNotice; +import cn.novalon.manage.sys.core.service.ISysNoticeService; +import cn.novalon.manage.sys.core.service.IWebSocketService; +import cn.novalon.manage.sys.infrastructure.db.converter.SysNoticeConverter; +import cn.novalon.manage.sys.infrastructure.db.dao.SysNoticeDao; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + +@Service +public class SysNoticeService implements ISysNoticeService { + + private final SysNoticeDao dao; + private final SysNoticeConverter converter; + private final IWebSocketService webSocketService; + + public SysNoticeService(SysNoticeDao dao, SysNoticeConverter converter, IWebSocketService webSocketService) { + this.dao = dao; + this.converter = converter; + this.webSocketService = webSocketService; + } + + @Override + public Flux findAll() { + return dao.findByDeletedAtIsNull() + .map(converter::toDomain); + } + + @Override + public Flux findByStatus(String status) { + return dao.findByStatusAndDeletedAtIsNull(status) + .map(converter::toDomain); + } + + @Override + public Mono findById(Long id) { + return dao.findById(id) + .map(converter::toDomain); + } + + @Override + public Mono save(SysNotice notice) { + return dao.save(converter.toEntity(notice)) + .map(converter::toDomain) + .flatMap(savedNotice -> { + return webSocketService.notifyNewNotice( + savedNotice.getNoticeTitle(), + savedNotice.getNoticeContent() + ).thenReturn(savedNotice); + }); + } + + @Override + public Mono deleteById(Long id) { + return dao.deleteByIdAndDeletedAtIsNull(id); + } +}