|
|
|
@ -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<NoticeMapper, Notice> implements NoticeService {
|
|
|
|
|
|
|
|
|
|
private final NoticeMapper noticeMapper; // 使用构造器注入 DAO 层组件
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* listNotice 方法用于获取有效的、置顶的公告列表,并按照发布时间降序排列。
|
|
|
|
|
* 使用了 @Cacheable 注解来启用缓存,以提高性能。
|
|
|
|
|
*
|
|
|
|
|
* @return 返回一个包含符合条件的公告对象列表。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Cacheable(cacheNames = "notices", key = "'notices'")
|
|
|
|
|
public List<Notice> listNotice() {
|
|
|
|
|
return noticeMapper.selectList(new LambdaQueryWrapper<Notice>()
|
|
|
|
|
.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<NoticeDto> 对象,其中包含分页后的公告信息列表,
|
|
|
|
|
* 以及与分页相关的元数据(如总记录数、总页数等)。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Page<NoticeDto> pageNotice(Page<NoticeDto> 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 注解完成。
|
|
|
|
|
}
|
|
|
|
|
}
|