This commit is contained in:
zzy
2026-05-24 00:24:56 +08:00
commit 29eb268180
131 changed files with 25500 additions and 0 deletions

View File

@@ -0,0 +1,164 @@
package com.example.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.common.config.TokenUtils;
import com.example.common.enums.ResultCodeEnum;
import com.example.entity.Account;
import com.example.entity.Announcement;
import com.example.exception.CustomException;
import com.example.mapper.AnnouncementMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
/**
* 公告服务类
*/
@Service
public class AnnouncementService {
@Resource
private AnnouncementMapper announcementMapper;
/**
* 添加公告
* @param announcement 公告信息
*/
public void add(Announcement announcement) {
// 获取当前用户
Account currentUser = TokenUtils.getCurrentUser();
if (currentUser == null) {
throw new CustomException(ResultCodeEnum.TOKEN_CHECK_ERROR);
}
// 验证权限
if (!"admin".equals(currentUser.getRole())) {
throw new CustomException(ResultCodeEnum.PARAM_ERROR.code, "只有管理员可以发布公告");
}
// 设置默认值
if (announcement.getIsTop() == null) {
announcement.setIsTop(false);
}
if (announcement.getStatus() == null) {
announcement.setStatus(0); // 默认为草稿状态
}
announcement.setCreateTime(new Date());
announcement.setPublisherId(currentUser.getId());
announcement.setPublisherName(currentUser.getName());
announcementMapper.insert(announcement);
}
/**
* 更新公告
* @param announcement 公告信息
*/
public void update(Announcement announcement) {
// 获取当前用户
Account currentUser = TokenUtils.getCurrentUser();
if (currentUser == null) {
throw new CustomException(ResultCodeEnum.TOKEN_CHECK_ERROR);
}
// 验证权限
if (!"admin".equals(currentUser.getRole())) {
throw new CustomException(ResultCodeEnum.PARAM_ERROR.code, "只有管理员可以修改公告");
}
// 获取原公告
Announcement dbAnnouncement = announcementMapper.selectById(announcement.getId());
if (dbAnnouncement == null) {
throw new CustomException(ResultCodeEnum.PARAM_ERROR.code, "公告不存在");
}
// 只更新部分字段,保留创建时间等信息
dbAnnouncement.setTitle(announcement.getTitle());
dbAnnouncement.setContent(announcement.getContent());
dbAnnouncement.setIsTop(announcement.getIsTop());
dbAnnouncement.setStatus(announcement.getStatus());
announcementMapper.updateById(dbAnnouncement);
}
/**
* 删除公告
* @param id 公告ID
*/
public void delete(Integer id) {
// 获取当前用户
Account currentUser = TokenUtils.getCurrentUser();
if (currentUser == null) {
throw new CustomException(ResultCodeEnum.TOKEN_CHECK_ERROR);
}
// 验证权限
if (!"admin".equals(currentUser.getRole())) {
throw new CustomException(ResultCodeEnum.PARAM_ERROR.code, "只有管理员可以删除公告");
}
announcementMapper.deleteById(id);
}
/**
* 获取公告详情
* @param id 公告ID
* @return 公告信息
*/
public Announcement getById(Integer id) {
return announcementMapper.selectById(id);
}
/**
* 获取所有已发布的公告(分页,所有用户可访问)
* @param pageNum 页码
* @param pageSize 每页大小
* @param title 标题关键字
* @return 分页公告列表
*/
public PageInfo<Announcement> getPublishedPage(Integer pageNum, Integer pageSize, String title) {
PageHelper.startPage(pageNum, pageSize);
List<Announcement> list = announcementMapper.selectAllPublishedWithKeyword(title);
return new PageInfo<>(list);
}
/**
* 获取所有公告(分页,包括草稿,仅管理员可用)
* @param pageNum 页码
* @param pageSize 每页大小
* @param title 标题关键字
* @return 分页公告列表
*/
public PageInfo<Announcement> getAllForAdmin(Integer pageNum, Integer pageSize, String title) {
// 获取当前用户
Account currentUser = TokenUtils.getCurrentUser();
if (currentUser == null) {
throw new CustomException(ResultCodeEnum.TOKEN_CHECK_ERROR);
}
// 验证权限
if (!"admin".equals(currentUser.getRole())) {
throw new CustomException(ResultCodeEnum.PARAM_ERROR.code, "只有管理员可以查看所有公告");
}
PageHelper.startPage(pageNum, pageSize);
List<Announcement> list = announcementMapper.selectAllForAdmin(title);
return new PageInfo<>(list);
}
/**
* 获取最新的几条已发布公告(用于首页展示)
* @param limit 限制条数
* @return 公告列表
*/
public List<Announcement> getLatestPublished(Integer limit) {
PageHelper.startPage(1, limit);
return announcementMapper.selectAllPublished();
}
}