From 5e2327cce28670f3085ce4743eaf8c28037169d9 Mon Sep 17 00:00:00 2001 From: CR7 <1965214192@qq.com> Date: Wed, 18 Dec 2024 21:46:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shop/service/impl/NoticeServiceImpl.java | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 yami-shop-service/src/main/java/com/yami/shop/service/impl/NoticeServiceImpl.java diff --git a/yami-shop-service/src/main/java/com/yami/shop/service/impl/NoticeServiceImpl.java b/yami-shop-service/src/main/java/com/yami/shop/service/impl/NoticeServiceImpl.java new file mode 100644 index 0000000..6fd4e8d --- /dev/null +++ b/yami-shop-service/src/main/java/com/yami/shop/service/impl/NoticeServiceImpl.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.yami.shop.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.yami.shop.bean.app.dto.NoticeDto; +import com.yami.shop.bean.model.Notice; +import com.yami.shop.dao.NoticeMapper; +import com.yami.shop.service.NoticeService; +import lombok.AllArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * NoticeServiceImpl 是 NoticeService 接口的具体实现类。 + * 它继承自 MyBatis-Plus 提供的 ServiceImpl,并实现了 NoticeService 中定义的方法。 + * 该服务负责处理与公告(Notice)相关的业务逻辑。 + * + * @author hzm + * @date 2019-04-18 21:21:40 + */ +@Service +@AllArgsConstructor // Lombok 注解,自动生成所有构造函数,简化依赖注入 +public class NoticeServiceImpl extends ServiceImpl implements NoticeService { + + private final NoticeMapper noticeMapper; // 使用构造器注入 DAO 层组件 + + /** + * listNotice 方法用于获取有效的、置顶的公告列表,并按照发布时间降序排列。 + * 使用了 @Cacheable 注解来启用缓存,以提高性能。 + * + * @return 返回一个包含符合条件的公告对象列表。 + */ + @Override + @Cacheable(cacheNames = "notices", key = "'notices'") + public List listNotice() { + return noticeMapper.selectList(new LambdaQueryWrapper() + .eq(Notice::getStatus, 1) // 状态为1表示有效 + .eq(Notice::getIsTop, 1) // 是否置顶为1表示置顶 + .orderByDesc(Notice::getPublishTime)); // 按发布时间降序排序 + } + + /** + * removeNoticeList 方法用于清除公告列表的缓存。 + * 使用了 @CacheEvict 注解,在调用此方法时会清除指定名称的缓存。 + */ + @Override + @CacheEvict(cacheNames = "notices", key = "'notices'") + public void removeNoticeList() { + // 方法体为空,因为实际的缓存清除工作由 @CacheEvict 注解完成。 + } + + /** + * pageNotice 方法用于分页查询公告信息。 + * + * @param page 分页参数,包含了当前页码、每页显示记录数等信息。 + * 该参数也作为返回结果的一部分,用来封装分页后的数据。 + * @return 返回一个 IPage 对象,其中包含分页后的公告信息列表, + * 以及与分页相关的元数据(如总记录数、总页数等)。 + */ + @Override + public Page pageNotice(Page page) { + return noticeMapper.pageNotice(page); + } + + /** + * getNoticeById 方法根据给定的公告ID获取公告详情。 + * 使用了 @Cacheable 注解来启用缓存,以提高性能。 + * + * @param noticeId 公告唯一标识符,用于确定要查询的公告。 + * @return 返回一个 Notice 对象,代表指定ID的公告详情。 + */ + @Override + @Cacheable(cacheNames = "notice", key = "#noticeId") + public Notice getNoticeById(Long noticeId) { + return noticeMapper.selectById(noticeId); + } + + /** + * removeNoticeById 方法用于根据给定的公告ID清除公告详情的缓存。 + * 使用了 @CacheEvict 注解,在调用此方法时会清除指定名称和键值的缓存。 + * + * @param noticeId 公告唯一标识符,用于确定要清除缓存的公告。 + */ + @Override + @CacheEvict(cacheNames = "notice", key = "#noticeId") + public void removeNoticeById(Long noticeId) { + // 方法体为空,因为实际的缓存清除工作由 @CacheEvict 注解完成。 + } +}