From f5977783ff6816600c36749efae1634efbb38992 Mon Sep 17 00:00:00 2001 From: Theo <971366405@qq.com> Date: Sun, 8 Sep 2024 02:22:32 +0800 Subject: [PATCH] =?UTF-8?q?wip:=20=E9=80=9A=E7=9F=A5=E5=85=AC=E5=91=8A?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 通知公告开发临时提交 --- .../boot/common/enums/NoticeWayEnum.java | 4 +- .../system/controller/NoticeController.java | 27 ++++++++++-- .../system/converter/NoticeConverter.java | 1 - .../boot/system/mapper/NoticeMapper.java | 7 ++++ .../system/mapper/NoticeStatusMapper.java | 10 +++++ .../boot/system/model/vo/NoticeDetailVO.java | 42 +++++++++++++++++++ .../boot/system/model/vo/NoticeStatusVO.java | 7 +++- .../youlai/boot/system/model/vo/NoticeVO.java | 1 + .../boot/system/service/NoticeService.java | 16 +++++++ .../system/service/NoticeStatusService.java | 13 +++++- .../service/impl/NoticeServiceImpl.java | 38 +++++++++++++++++ .../service/impl/NoticeStatusServiceImpl.java | 35 ++++++++++++---- src/main/resources/mapper/NoticeMapper.xml | 21 ++++++++++ .../resources/mapper/NoticeStatusMapper.xml | 18 ++++++++ 14 files changed, 221 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVO.java diff --git a/src/main/java/com/youlai/boot/common/enums/NoticeWayEnum.java b/src/main/java/com/youlai/boot/common/enums/NoticeWayEnum.java index 3a42a207..bf11e68c 100644 --- a/src/main/java/com/youlai/boot/common/enums/NoticeWayEnum.java +++ b/src/main/java/com/youlai/boot/common/enums/NoticeWayEnum.java @@ -11,14 +11,16 @@ import lombok.RequiredArgsConstructor; */ @Getter @RequiredArgsConstructor -public enum NoticeWayEnum implements IBaseEnum { +public enum NoticeWayEnum implements IBaseEnum { /** * 通知方式 */ WEBSOCKET("webSocket", "发送websocket消息"); + @Getter private String value; + @Getter private String label; NoticeWayEnum(String value, String label) { diff --git a/src/main/java/com/youlai/boot/system/controller/NoticeController.java b/src/main/java/com/youlai/boot/system/controller/NoticeController.java index dc1eb691..263ac43f 100644 --- a/src/main/java/com/youlai/boot/system/controller/NoticeController.java +++ b/src/main/java/com/youlai/boot/system/controller/NoticeController.java @@ -58,6 +58,12 @@ public class NoticeController { NoticeForm formData = noticeService.getNoticeFormData(id); return Result.success(formData); } + @Operation(summary = "管理页面查看通知公告") + @GetMapping("/detail/{id}") + public Result getReadNoticeDetail( + @Parameter(description = "通知公告ID")@PathVariable Long id) { + return Result.success(noticeService.getReadNoticeDetail(id)); + } @Operation(summary = "修改通知公告") @PutMapping(value = "/{id}") @@ -96,9 +102,22 @@ public class NoticeController { return Result.judge(result); } - @Operation(summary = "获取我的通知公告") - @GetMapping("/notice/{count}") - public Result listNotices(@PathVariable Integer count) { - return Result.success(noticeStatusService.listNotices(count)); + @Operation(summary = "获取未读的通知公告") + @GetMapping("/unread") + public Result listUnreadNotices() { + return Result.success(noticeStatusService.listUnreadNotices()); + } + + @Operation(summary = "阅读通知公告") + @PatchMapping("/read/{id}") + public Result readNotice(@PathVariable Long id) { + return Result.success(noticeService.readNotice(id)); + } + + @Operation(summary = "全部已读") + @PatchMapping("/readAll") + public Result readAll() { + noticeStatusService.readAll(); + return Result.success(); } } diff --git a/src/main/java/com/youlai/boot/system/converter/NoticeConverter.java b/src/main/java/com/youlai/boot/system/converter/NoticeConverter.java index c7b1c4e5..3ba79b45 100644 --- a/src/main/java/com/youlai/boot/system/converter/NoticeConverter.java +++ b/src/main/java/com/youlai/boot/system/converter/NoticeConverter.java @@ -33,7 +33,6 @@ public interface NoticeConverter{ Page toPageVo(Page noticePage); @Mappings({ - @Mapping(target = "noticeTypeLabel", expression = "java(com.youlai.boot.common.base.IBaseEnum.getLabelByValue(bo.getNoticeType(), com.youlai.boot.common.enums.NoticeWayEnum.class))") }) NoticeVO toPageVo(NoticeBO bo); diff --git a/src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java b/src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java index db146013..5a11f119 100644 --- a/src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java +++ b/src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java @@ -6,6 +6,7 @@ import com.youlai.boot.system.model.bo.NoticeBO; import com.youlai.boot.system.model.entity.Notice; import com.youlai.boot.system.model.query.NoticeQuery; import com.youlai.boot.system.model.vo.NoticeVO; +import com.youlai.boot.system.model.vo.NoticeDetailVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -27,4 +28,10 @@ public interface NoticeMapper extends BaseMapper { */ Page getNoticePage(Page page, @Param("queryParams") NoticeQuery queryParams); + /** + * 获取阅读时通知公告详情 + * @param id 通知公告ID + * @return 通知公告详情 + */ + NoticeDetailVO getReadNoticeVO(@Param("id") Long id); } diff --git a/src/main/java/com/youlai/boot/system/mapper/NoticeStatusMapper.java b/src/main/java/com/youlai/boot/system/mapper/NoticeStatusMapper.java index b0b6e6bb..4858c8e9 100644 --- a/src/main/java/com/youlai/boot/system/mapper/NoticeStatusMapper.java +++ b/src/main/java/com/youlai/boot/system/mapper/NoticeStatusMapper.java @@ -2,7 +2,11 @@ package com.youlai.boot.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.youlai.boot.system.model.entity.NoticeStatus; +import com.youlai.boot.system.model.vo.NoticeStatusVO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 用户公告状态Mapper接口 @@ -13,4 +17,10 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface NoticeStatusMapper extends BaseMapper { + /** + * 获取未读的通知公告 + * @param userId 用户ID + * @return 公告列表 + */ + List listUnreadNotices(@Param("userId")Long userId); } diff --git a/src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVO.java b/src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVO.java new file mode 100644 index 00000000..27bb9f26 --- /dev/null +++ b/src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVO.java @@ -0,0 +1,42 @@ +package com.youlai.boot.system.model.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 阅读通知公告VO + * + * @author Theo + * @since 2024-9-8 01:25:06 + */ +@Data +public class NoticeDetailVO { + + @Schema(description = "通知ID") + private Long id; + + @Schema(description = "通知标题") + private String title; + + @Schema(description = "通知内容") + private String content; + + @Schema(description = "通知类型") + private String noticeTypeLabel; + + @Schema(description = "发布人") + private String releaseBy; + + @Schema(description = "优先级(0-低 1-中 2-高)") + private Integer priority; + + @Schema(description = "发布状态(0-未发布 1已发布 2已撤回) 冗余字段,方便判断是否已经发布") + private Integer releaseStatus; + + @Schema(description = "发布时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime releaseTime; +} diff --git a/src/main/java/com/youlai/boot/system/model/vo/NoticeStatusVO.java b/src/main/java/com/youlai/boot/system/model/vo/NoticeStatusVO.java index a1d0c6e9..320e99fc 100644 --- a/src/main/java/com/youlai/boot/system/model/vo/NoticeStatusVO.java +++ b/src/main/java/com/youlai/boot/system/model/vo/NoticeStatusVO.java @@ -14,9 +14,12 @@ import lombok.Data; public class NoticeStatusVO { @Schema(description = "公告ID") - private Long noticeId; + private Long id; + + @Schema(description = "公告标题") + private String title; @Schema(description = "是否已读") - private Boolean read; + private Integer readStatus; } diff --git a/src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java b/src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java index 12269e3e..f0d86ffb 100644 --- a/src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java +++ b/src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java @@ -24,6 +24,7 @@ public class NoticeVO implements Serializable { private static final long serialVersionUID = 1L; private Long id; + @Schema(description = "通知标题") private String title; diff --git a/src/main/java/com/youlai/boot/system/service/NoticeService.java b/src/main/java/com/youlai/boot/system/service/NoticeService.java index 4d7c6381..1613796b 100644 --- a/src/main/java/com/youlai/boot/system/service/NoticeService.java +++ b/src/main/java/com/youlai/boot/system/service/NoticeService.java @@ -6,6 +6,7 @@ import com.youlai.boot.system.model.entity.Notice; import com.youlai.boot.system.model.form.NoticeForm; import com.youlai.boot.system.model.query.NoticeQuery; import com.youlai.boot.system.model.vo.NoticeVO; +import com.youlai.boot.system.model.vo.NoticeDetailVO; /** * 通知公告服务类 @@ -70,4 +71,19 @@ public interface NoticeService extends IService { * @return 是否撤回成功 */ boolean recallNotice(Long id); + + /** + * 阅读通知公告 + * + * @param id 通知公告ID + * @return 通知公告对象 + */ + NoticeDetailVO readNotice(Long id); + + /** + * 获取阅读时通知公告详情 + * @param id 通知公告ID + * @return 通知公告详情 + */ + NoticeDetailVO getReadNoticeDetail(Long id); } diff --git a/src/main/java/com/youlai/boot/system/service/NoticeStatusService.java b/src/main/java/com/youlai/boot/system/service/NoticeStatusService.java index 332a1818..e767712b 100644 --- a/src/main/java/com/youlai/boot/system/service/NoticeStatusService.java +++ b/src/main/java/com/youlai/boot/system/service/NoticeStatusService.java @@ -1,7 +1,6 @@ package com.youlai.boot.system.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.youlai.boot.common.result.Result; import com.youlai.boot.system.model.entity.NoticeStatus; import com.youlai.boot.system.model.vo.NoticeStatusVO; @@ -15,5 +14,15 @@ import java.util.List; */ public interface NoticeStatusService extends IService { - List listNotices(Integer count); + /** + * 获取未读的通知公告 + * @return 公告列表 + */ + List listUnreadNotices(); + + /** + * 全部标记为已读 + * @return 是否成功 + */ + boolean readAll(); } diff --git a/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java index 471d13b7..7cd6ad48 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java @@ -21,6 +21,7 @@ import com.youlai.boot.system.model.entity.User; import com.youlai.boot.system.model.form.NoticeForm; import com.youlai.boot.system.model.query.NoticeQuery; import com.youlai.boot.system.model.vo.NoticeVO; +import com.youlai.boot.system.model.vo.NoticeDetailVO; import com.youlai.boot.system.service.NoticeService; import com.youlai.boot.system.service.NoticeStatusService; import com.youlai.boot.system.service.UserService; @@ -225,4 +226,41 @@ public class NoticeServiceImpl extends ServiceImpl impleme return true; } + /** + * 阅读通知公告 + * @param id 通知公告ID + * @return 通知公告表单对象 + */ + @Override + public NoticeDetailVO readNotice(Long id) { + NoticeDetailVO noticeDetailVO = this.getReadNoticeDetail(id); + Assert.isTrue(noticeDetailVO != null && noticeDetailVO.getReleaseStatus() == 1, "公告不存在或未发布"); + //获取当前登录用户 + Long userId = SecurityUtils.getUserId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(NoticeStatus::getUserId, userId) + .eq(NoticeStatus::getNoticeId, id) + .eq(NoticeStatus::getReadStatus, 0); + NoticeStatus noticeStatus = noticeStatusService.getOne(queryWrapper); + if (noticeStatus != null) { + noticeStatus.setReadStatus(1); + noticeStatusService.updateById(noticeStatus); + } + return noticeDetailVO; + } + + /** + * 获取阅读时通知公告详情 + * @param id 通知公告ID + * @return + */ + @Override + public NoticeDetailVO getReadNoticeDetail(Long id) { + Assert.notNull(id, "公告ID不能为空"); + NoticeDetailVO noticeDetailVO = this.baseMapper.getReadNoticeVO(id); + Assert.isTrue(noticeDetailVO != null, "公告不存在"); + return noticeDetailVO; + } + + } diff --git a/src/main/java/com/youlai/boot/system/service/impl/NoticeStatusServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/NoticeStatusServiceImpl.java index 0fc725e5..6e220c01 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/NoticeStatusServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/NoticeStatusServiceImpl.java @@ -1,12 +1,11 @@ package com.youlai.boot.system.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.youlai.boot.common.result.Result; +import com.youlai.boot.core.security.util.SecurityUtils; import com.youlai.boot.system.mapper.NoticeStatusMapper; import com.youlai.boot.system.model.entity.NoticeStatus; import com.youlai.boot.system.model.vo.NoticeStatusVO; -import com.youlai.boot.system.service.NoticeService; import com.youlai.boot.system.service.NoticeStatusService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -23,13 +22,31 @@ import java.util.List; @RequiredArgsConstructor public class NoticeStatusServiceImpl extends ServiceImpl implements NoticeStatusService { - private final NoticeService noticeService; + private final NoticeStatusMapper noticeStatusMapper; + /** + * 获取未读的通知公告 + * @return 公告列表 + */ @Override - public List listNotices(Integer count) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - //获取当前用户 - queryWrapper.eq(NoticeStatus::getUserId, 1L); - return null; + public List listUnreadNotices() { + //获取当前登录用户 + Long userId = SecurityUtils.getUserId(); + return noticeStatusMapper.listUnreadNotices(userId); } + + /** + * 全部标记为已读 + * @return 是否成功 + */ + @Override + public boolean readAll() { + Long userId = SecurityUtils.getUserId(); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(NoticeStatus::getUserId, userId); + updateWrapper.set(NoticeStatus::getReadStatus, 1); + return this.update(updateWrapper); + } + + } diff --git a/src/main/resources/mapper/NoticeMapper.xml b/src/main/resources/mapper/NoticeMapper.xml index 08fec56f..74969f36 100644 --- a/src/main/resources/mapper/NoticeMapper.xml +++ b/src/main/resources/mapper/NoticeMapper.xml @@ -41,4 +41,25 @@ DESC + + diff --git a/src/main/resources/mapper/NoticeStatusMapper.xml b/src/main/resources/mapper/NoticeStatusMapper.xml index 506c53d7..0704802d 100644 --- a/src/main/resources/mapper/NoticeStatusMapper.xml +++ b/src/main/resources/mapper/NoticeStatusMapper.xml @@ -2,4 +2,22 @@ + +