| package com.mzl.flower.service.content; | 
|   | 
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
| import com.baomidou.mybatisplus.core.metadata.IPage; | 
| 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.AddAdvertisementDTO; | 
| import com.mzl.flower.dto.request.content.UpdateAdvertisementDTO; | 
| import com.mzl.flower.dto.response.content.AdvertisementDTO; | 
| import com.mzl.flower.entity.content.Advertisement; | 
| import com.mzl.flower.mapper.content.AdvertisementMapper; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.BeanUtils; | 
| import org.springframework.stereotype.Service; | 
| import org.springframework.transaction.annotation.Transactional; | 
|   | 
| import java.util.List; | 
| import java.util.stream.Collectors; | 
|   | 
| @Service | 
| @Transactional | 
| public class AdvertisementService { | 
|   | 
|     private final AdvertisementMapper advertisementMapper; | 
|   | 
|     public AdvertisementService(AdvertisementMapper advertisementMapper) { | 
|         this.advertisementMapper = advertisementMapper; | 
|     } | 
|   | 
|     public void add(AddAdvertisementDTO dto) { | 
|         Advertisement advertisement = new Advertisement(); | 
|         advertisement.setContent(dto.getContent()); | 
|         advertisement.setTitle(dto.getTitle()); | 
|         advertisement.setCover(dto.getCover()); | 
|         advertisement.create(SecurityUtils.getUserId()); | 
|         advertisement.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name()); | 
|   | 
|         advertisementMapper.insert(advertisement); | 
|     } | 
|   | 
|     public void update(UpdateAdvertisementDTO dto) { | 
|         Advertisement advertisement = advertisementMapper.selectById(dto.getId()); | 
|         if (advertisement == null) { | 
|             throw new ValidationException("广告不存在"); | 
|         } | 
|         advertisement.setContent(dto.getContent()); | 
|         advertisement.setTitle(dto.getTitle()); | 
|         advertisement.setCover(dto.getCover()); | 
|         advertisement.update(SecurityUtils.getUserId()); | 
|   | 
|         advertisementMapper.updateById(advertisement); | 
|     } | 
|   | 
|     public void delete(Long id) { | 
|         advertisementMapper.deleteById(id); | 
|     } | 
|   | 
|     public AdvertisementDTO detail(Long id) { | 
|         Advertisement advertisement = advertisementMapper.selectById(id); | 
|         if (advertisement == null) { | 
|              return null; | 
|         } | 
|         AdvertisementDTO advertisementDTO = new AdvertisementDTO(); | 
|         BeanUtils.copyProperties(advertisement, advertisementDTO); | 
|         return advertisementDTO; | 
|     } | 
|   | 
|     public IPage<AdvertisementDTO> queryPage(String title, String status, Page page) { | 
|         LambdaQueryWrapper<Advertisement> wrapper = new LambdaQueryWrapper<>(); | 
|         wrapper.orderByDesc(Advertisement::getCreateTime); | 
|         if (StringUtils.isNotBlank(title)) { | 
|              wrapper.like(Advertisement::getTitle, title); | 
|         } | 
|         if (StringUtils.isNotBlank(status)) { | 
|               wrapper.eq(Advertisement::getStatus, status); | 
|         } | 
|         return advertisementMapper.selectPage(page, wrapper).convert(item -> { | 
|                AdvertisementDTO advertisementDTO = new AdvertisementDTO(); | 
|                BeanUtils.copyProperties(item, advertisementDTO); | 
|                advertisementDTO.setContent(null); | 
|                return advertisementDTO; | 
|         }); | 
|     } | 
|   | 
|     public void changeStatus(Long id) { | 
|         Advertisement advertisement = advertisementMapper.selectById(id); | 
|         if (advertisement == null) { | 
|              throw new ValidationException("广告不存在"); | 
|         } | 
|         if(Constants.COMMON_PUBLISH_STATUS.published.name().equals(advertisement.getStatus())){ | 
|             advertisement.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name()); | 
|         }else{ | 
|             advertisement.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); | 
|         } | 
|         advertisementMapper.updateById(advertisement); | 
|     } | 
|   | 
|     public List<AdvertisementDTO> queryList(String title, String status) { | 
|         LambdaQueryWrapper<Advertisement> wrapper = new LambdaQueryWrapper<>(); | 
|         wrapper.orderByDesc(Advertisement::getCreateTime); | 
|         if (StringUtils.isNotBlank(title)) { | 
|             wrapper.like(Advertisement::getTitle, title); | 
|         } | 
|         if (StringUtils.isNotBlank(status)) { | 
|             wrapper.eq(Advertisement::getStatus, status); | 
|         } | 
|         return advertisementMapper.selectList(wrapper).stream().map(item -> { | 
|             AdvertisementDTO advertisementDTO = new AdvertisementDTO(); | 
|             BeanUtils.copyProperties(item, advertisementDTO); | 
|             return advertisementDTO; | 
|         }).collect(Collectors.toList()); | 
|     } | 
|   | 
|     public void batchDelete(BatchDTO dto) { | 
|         advertisementMapper.deleteBatchIds(dto.getIds()); | 
|     } | 
|   | 
|     public void batchPublish(BatchDTO dto) { | 
|         List<Advertisement> list = advertisementMapper.selectList(new LambdaQueryWrapper<Advertisement>().in(Advertisement::getId, dto.getIds())); | 
|         for (Advertisement advertisement : list) { | 
|             advertisement.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); | 
|             advertisementMapper.updateById(advertisement); | 
|         } | 
|     } | 
| } |