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.dto.response.system.MenuTreeDTO; import com.mzl.flower.entity.film.FilmWorks; import com.mzl.flower.entity.system.Role; 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.service.system.RoleService; 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.ArrayList; 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; private final RoleService roleService; @Override public void saveFilmWorks(FilmWorksDTO filmWorksDTO) { //获取当前人员角色,判断是不是编辑角色 List roleIds = new ArrayList<>(); List roleList = roleService.getUserRoleList(SecurityUtils.getUserId()); for (Role role : roleList) { roleIds.add(role.getId()); } if (!roleIds.contains("8f9ef89f6b2d4d8e9ea1fc8d2f25ce69")) { throw new ValidationException("非编辑角色不能新增"); } // 转换 FilmWorks filmWorks = new FilmWorks(); BeanUtils.copyProperties(filmWorksDTO, filmWorks); filmWorks.create(); filmWorks.setStatus(Constants.COMMON_PUBLISH_STATUS.pending_review.name()); filmWorksMapper.insert(filmWorks); } @Override public void updateFilmWorks(FilmWorksDTO filmWorksDTO) { FilmWorks filmWorks = new FilmWorks(); //系统生成的内容无需管理 if ("sys".equals(filmWorksDTO.getType())) { filmWorks = filmWorksMapper.selectById(filmWorksDTO.getId()); filmWorks.setFilmContent(filmWorksDTO.getFilmContent()); //生成之后变成待审核 if(StringUtils.isNotBlank(filmWorks.getFilmContent())){ filmWorks.setStatus(Constants.COMMON_PUBLISH_STATUS.pending_review.name()); }else{ filmWorks.setStatus(Constants.COMMON_PUBLISH_STATUS.create_failed.name()); } } else { List roleIds = new ArrayList<>(); List roleList = roleService.getUserRoleList(SecurityUtils.getUserId()); for (Role role : roleList) { roleIds.add(role.getId()); } if (!roleIds.contains("8f9ef89f6b2d4d8e9ea1fc8d2f25ce69")) { throw new ValidationException("非编辑角色不能修改"); } filmWorks = filmWorksMapper.selectById(filmWorksDTO.getId()); //判断影视作品状态 if(Constants.COMMON_PUBLISH_STATUS.published.name().equals(filmWorks.getStatus()) ){ throw new ValidationException("发布作品不能编辑"); } if(Constants.COMMON_PUBLISH_STATUS.approved.name().equals(filmWorks.getStatus()) ){ throw new ValidationException("审核作品不能编辑"); } BeanUtils.copyProperties(filmWorksDTO, filmWorks); filmWorks.update(SecurityUtils.getUserId()); filmWorks.setStatus(Constants.COMMON_PUBLISH_STATUS.pending_review.name()); } 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)); } if (!StringUtils.isEmpty(dto.getCategory()) && Constants.FILM_CATEGORY.all.getDesc().equals(dto.getCategory())) { //当时全部的时时候值设置为空,表示查询全部 dto.setCategory(null); } //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 List pendingCreate() { return filmWorksMapper.pendingCreate(); } @Override public void changeStatus(Long id) { //获取当前人员角色,判断是不是审核角色 List roleIds = new ArrayList<>(); List roleList = roleService.getUserRoleList(SecurityUtils.getUserId()); for (Role role : roleList) { roleIds.add(role.getId()); } if (!roleIds.contains("77462b362bad4c88a7a5c64cbdd25d91")) { throw new ValidationException("非运营角色不能发布"); } FilmWorks filmWork = filmWorksMapper.selectById(id); if (filmWork == null) { throw new ValidationException("找不到id为" + id + "的公告"); } if (Constants.COMMON_PUBLISH_STATUS.approved.name().equals(filmWork.getStatus()) || Constants.COMMON_PUBLISH_STATUS.published.name().equals(filmWork.getStatus()) || Constants.COMMON_PUBLISH_STATUS.unpublished.name().equals(filmWork.getStatus())) { 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); }else{ throw new ValidationException("非审核通过或者发布状态,不能操作"); } } @Override public void changeTopState(Long id) { //获取当前人员角色,判断是不是审核角色 List roleIds = new ArrayList<>(); List roleList = roleService.getUserRoleList(SecurityUtils.getUserId()); for (Role role : roleList) { roleIds.add(role.getId()); } if (!roleIds.contains("77462b362bad4c88a7a5c64cbdd25d91")) { throw new ValidationException("非运营角色不能置顶"); } 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) { //获取当前人员角色,判断是不是审核角色 List roleIds = new ArrayList<>(); List roleList = roleService.getUserRoleList(SecurityUtils.getUserId()); for (Role role : roleList) { roleIds.add(role.getId()); } if (!roleIds.contains("77462b362bad4c88a7a5c64cbdd25d91")) { throw new ValidationException("非运营角色不能清除权重"); } 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 roleIds = new ArrayList<>(); List roleList = roleService.getUserRoleList(SecurityUtils.getUserId()); for (Role role : roleList) { roleIds.add(role.getId()); } if (!roleIds.contains("77462b362bad4c88a7a5c64cbdd25d91")) { throw new ValidationException("非运营角色不能发布"); } 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; } @Override public void batchApproved(BatchDTO dto) { //获取当前人员角色,判断是不是审核角色 List roleIds = new ArrayList<>(); List roleList = roleService.getUserRoleList(SecurityUtils.getUserId()); for (Role role : roleList) { roleIds.add(role.getId()); } if (!roleIds.contains("86a36a0b789c4d0e840f7b807c09459b")) { throw new ValidationException("非审核角色不能审批"); } List list = filmWorksMapper.selectList(new LambdaQueryWrapper().in(FilmWorks::getId, dto.getIds())); //判断所有的状态都是待审核 if (!list.stream().allMatch(filmWork -> Constants.COMMON_PUBLISH_STATUS.pending_review.name().equals(filmWork.getStatus()) || Constants.COMMON_PUBLISH_STATUS.rejected.name().equals(filmWork.getStatus()))) { throw new ValidationException("只有待审核或者审核拒绝的才能批量审核"); } for (FilmWorks filmWork : list) { filmWork.setStatus(Constants.COMMON_PUBLISH_STATUS.approved.name()); filmWork.setAuditDate(LocalDate.now()); filmWorksMapper.updateById(filmWork); } } @Override public void batchRejected(BatchDTO dto) { //获取当前人员角色,判断是不是审核角色 List roleIds = new ArrayList<>(); List roleList = roleService.getUserRoleList(SecurityUtils.getUserId()); for (Role role : roleList) { roleIds.add(role.getId()); } if (!roleIds.contains("86a36a0b789c4d0e840f7b807c09459b")) { throw new ValidationException("非审核角色不能审批"); } List list = filmWorksMapper.selectList(new LambdaQueryWrapper().in(FilmWorks::getId, dto.getIds())); //判断所有的状态都是待审核或者审核通过 if (!list.stream().allMatch(filmWork -> Constants.COMMON_PUBLISH_STATUS.pending_review.name().equals(filmWork.getStatus()) || Constants.COMMON_PUBLISH_STATUS.approved.name().equals(filmWork.getStatus()))) { throw new ValidationException("只有待审核或者审核通过的状态才能批量审核"); } for (FilmWorks filmWork : list) { filmWork.setStatus(Constants.COMMON_PUBLISH_STATUS.rejected.name()); filmWork.setAuditDate(LocalDate.now()); filmWorksMapper.updateById(filmWork); } } }