package com.mzl.flower.service.film.impl; 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.film.FilmWorksDTO; import com.mzl.flower.dto.request.film.FilmWorksQueryDTO; import com.mzl.flower.dto.request.system.UserInfoDTO; import com.mzl.flower.dto.response.customer.CustomerDTO; import com.mzl.flower.dto.response.film.FilmWorksVO; import com.mzl.flower.entity.film.FilmWorks; import com.mzl.flower.mapper.customer.CustomerMapper; import com.mzl.flower.mapper.film.FilmWorksMapper; import com.mzl.flower.service.film.FilmWorksService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mzl.flower.utils.DateUtils; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import java.time.LocalDate; import java.util.List; /** *

* 影视作品信息表 服务实现类 *

* * @author generator@Fang * @since 2025-05-19 */ @Service @Transactional @RequiredArgsConstructor public class FilmWorksServiceImpl extends ServiceImpl implements FilmWorksService { private final FilmWorksMapper filmWorksMapper; private final CustomerMapper customerMapper; @Override public void saveFilmWorks(FilmWorksDTO filmWorksDTO) { // 转换 FilmWorks filmWorks = new FilmWorks(); BeanUtils.copyProperties(filmWorksDTO, filmWorks); filmWorks.create(); filmWorks.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name()); filmWorksMapper.insert(filmWorks); } @Override public void updateFilmWorks(FilmWorksDTO filmWorksDTO) { FilmWorks filmWork = filmWorksMapper.selectById(filmWorksDTO.getId()); FilmWorks filmWorks = new FilmWorks(); BeanUtils.copyProperties(filmWorksDTO,filmWorks); if (filmWork != null) { filmWorks.setClassify(filmWork.getClassify()); filmWorks.setCreateBy(filmWork.getCreateBy()); filmWorks.setCreateTime(filmWork.getCreateTime()); filmWorks.setStatus(filmWork.getStatus()); } filmWorks.update(SecurityUtils.getUserId()); filmWorksMapper.updateById(filmWorks); } @Override public void deleteFilmWorks(String id) { FilmWorks filmWork = filmWorksMapper.selectById(id); if(filmWork==null){ throw new ValidationException("找不到id为"+id+"的影视作品"); } filmWorksMapper.deleteById(id); } @Override public Page queryPage(FilmWorksQueryDTO 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)); } //todo 这里的用户ID可能为空,用户存在不登录的情况下访问,传null try { dto.setUserId(SecurityUtils.getUserId()); } catch (Exception e) { dto.setUserId(null); } List list = filmWorksMapper.queryPage(dto,page); page.setRecords(list); return page; } @Override public List getFilmWorksAll() { return filmWorksMapper.getFilmWorksAll(); } @Override public void changeStatus(Long id) { FilmWorks filmWork = filmWorksMapper.selectById(id); if (filmWork == null) { throw new ValidationException("找不到id为" + id + "的公告"); } if (Constants.COMMON_PUBLISH_STATUS.published.name().equals(filmWork.getStatus())) { filmWork.setStatus(Constants.COMMON_PUBLISH_STATUS.unpublished.name()); } else { filmWork.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); filmWork.setPublishDate(LocalDate.now()); } filmWorksMapper.updateById(filmWork); } @Override public void changeTopState(Long id) { FilmWorks filmWork = filmWorksMapper.selectById(id); if (filmWork == null) { throw new ValidationException("找不到id为" + id + "的公告"); } if (Constants.COMMON_PUBLISH_STATUS.unpublished.name().equals(filmWork.getStatus())) { throw new ValidationException("未发布作品不能置顶,请先发布"); } FilmWorks filmWorkTop = filmWorksMapper.getTopStickyWeight(); if (!ObjectUtils.isEmpty(filmWorkTop)) { filmWork.setStickyWeight(filmWorkTop.getStickyWeight() + 100); } else { filmWork.setStickyWeight(100); } filmWorksMapper.updateById(filmWork); } @Override public void changeDownState(Long id) { FilmWorks filmWork = filmWorksMapper.selectById(id); if (filmWork == null) { throw new ValidationException("找不到id为" + id + "的公告"); } if (Constants.COMMON_PUBLISH_STATUS.unpublished.name().equals(filmWork.getStatus())) { throw new ValidationException("未发布作品无需清除权重"); } filmWork.setStickyWeight(0); filmWorksMapper.updateById(filmWork); } @Override public void batchDelete(BatchDTO dto) { filmWorksMapper.deleteBatchIds(dto.getIds()); } @Override public void batchPublish(BatchDTO dto) { List list = filmWorksMapper.selectList(new LambdaQueryWrapper().in(FilmWorks::getId, dto.getIds())); for (FilmWorks filmWork : list) { filmWork.setStatus(Constants.COMMON_PUBLISH_STATUS.published.name()); filmWork.setPublishDate(LocalDate.now()); filmWorksMapper.updateById(filmWork); } } @Override public FilmWorksVO detail(Long id) { // userId 可以是空,因为用户可以登录 String userId = SecurityUtils.getUserId(); FilmWorksVO filmWorksVO = filmWorksMapper.selectInfoById(id,userId); if(filmWorksVO==null){ return null; } CustomerDTO currentCustomer = customerMapper.getCurrentCustomer(filmWorksVO.getCreateBy()); filmWorksVO.setNickname(currentCustomer.getNickName()); filmWorksVO.setAvatar(currentCustomer.getCover()); return filmWorksVO; } }