| 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<AnnouncementDTO> 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<AnnouncementDTO> 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<Announcement> list = announcementMapper.selectList(new LambdaQueryWrapper<Announcement>().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<AnnouncementDTO> queryList(String type) { | 
|         QueryAnnouncementDTO dto = new QueryAnnouncementDTO(); | 
|         dto.setType(type); | 
|         dto.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); | 
|         List<AnnouncementDTO> list =  announcementMapper.queryList(dto); | 
|         return list; | 
|     } | 
| } |