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;
}
}