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 queryPage(String title, String status, Page page) { LambdaQueryWrapper 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); 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 queryList(String title, String status) { LambdaQueryWrapper 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 list = advertisementMapper.selectList(new LambdaQueryWrapper().in(Advertisement::getId, dto.getIds())); for (Advertisement advertisement : list) { advertisement.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); advertisementMapper.updateById(advertisement); } } }