package com.mzl.flower.service.content; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.config.security.SecurityUtils; import com.mzl.flower.constant.Constants; import com.mzl.flower.dto.BatchDTO; import com.mzl.flower.dto.request.content.QueryAnnouncementDTO; import com.mzl.flower.dto.response.content.AnnouncementDTO; import com.mzl.flower.entity.content.Announcement; import com.mzl.flower.mapper.content.AnnouncementMapper; import com.mzl.flower.utils.DateUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @Service @Transactional public class AnnouncementService { private final AnnouncementMapper announcementMapper; public AnnouncementService(AnnouncementMapper announcementMapper) { this.announcementMapper = announcementMapper; } public void add(Announcement dto) { if(dto.getId()!=null){ throw new ValidationException("id必须为空"); } dto.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name()); dto.create(SecurityUtils.getUserId()); announcementMapper.insert(dto); } public void update(Announcement dto) { if(dto.getId()==null || dto.getId()==0){ throw new ValidationException("id不能为空"); } Announcement announcement = announcementMapper.selectById(dto.getId()); if(announcement==null){ throw new ValidationException("找不到id为"+dto.getId()+"的公告"); } BeanUtils.copyProperties(dto, announcement, "id", "createTime", "createBy","deleted","status","publishDate"); announcement.update(SecurityUtils.getUserId()); announcementMapper.updateById(announcement); } public void delete(Long id) { Announcement announcement = announcementMapper.selectById(id); if(announcement==null){ throw new ValidationException("找不到id为"+id+"的公告"); } announcementMapper.deleteById(id); } public AnnouncementDTO detail(Long id) { Announcement announcement = announcementMapper.selectById(id); if(announcement==null){ return null; } AnnouncementDTO dto = new AnnouncementDTO(); BeanUtils.copyProperties(announcement,dto); return dto; } public Page queryPage(QueryAnnouncementDTO dto, Page page) { if(StringUtils.isNotBlank(dto.getCreateDateBeginStr())){ dto.setCreateDateBegin(DateUtils.dateToLocalDateTime(dto.getCreateDateBeginStr(),true)); } if(StringUtils.isNotBlank(dto.getCreateDateEndStr())){ dto.setCreateDateEnd(DateUtils.dateToLocalDateTime(dto.getCreateDateEndStr(),false)); } List list = announcementMapper.queryPage(dto,page); page.setRecords(list); return page; } public void changeStatus(Long id) { Announcement announcement = announcementMapper.selectById(id); if(announcement==null){ throw new ValidationException("找不到id为"+id+"的公告"); } if(Constants.COMMON_PUBLISH_STATUS.published.name().equals(announcement.getStatus())){ announcement.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name()); }else{ announcement.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); announcement.setPublishDate(LocalDate.now()); } announcementMapper.updateById(announcement); } public void batchDelete(BatchDTO dto) { announcementMapper.deleteBatchIds(dto.getIds()); } public void batchPublish(BatchDTO dto) { List list = announcementMapper.selectList(new LambdaQueryWrapper().in(Announcement::getId, dto.getIds())); for (Announcement announcement : list) { announcement.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); announcement.setPublishDate(LocalDate.now()); announcementMapper.updateById(announcement); } } public List queryList(String type) { QueryAnnouncementDTO dto = new QueryAnnouncementDTO(); dto.setType(type); dto.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); List list = announcementMapper.queryList(dto); return list; } }