cloudroam
2025-07-01 d678db8fe85e51b65403f3edae4bff18aa23ee15
src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java
@@ -7,13 +7,15 @@
import com.mzl.flower.dto.BatchDTO;
import com.mzl.flower.dto.request.film.FilmLocationDTO;
import com.mzl.flower.dto.request.film.FilmLocationQueryDTO;
import com.mzl.flower.dto.response.film.FilmLocationNameDTO;
import com.mzl.flower.dto.response.film.FilmLocationVO;
import com.mzl.flower.dto.response.film.FilmWorksVO;
import com.mzl.flower.entity.film.FilmLocation;
import com.mzl.flower.entity.film.FilmLocationWork;
import com.mzl.flower.entity.film.FilmWorks;
import com.mzl.flower.entity.system.Role;
import com.mzl.flower.mapper.film.FilmLocationMapper;
import com.mzl.flower.mapper.film.FilmLocationWorkMapper;
import com.mzl.flower.mapper.film.FilmWorksMapper;
import com.mzl.flower.service.film.FilmLocationService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mzl.flower.service.film.FilmLocationWorkService;
@@ -26,11 +28,7 @@
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -47,11 +45,10 @@
public class FilmLocationServiceImpl extends ServiceImpl<FilmLocationMapper, FilmLocation> implements FilmLocationService {
    private final FilmLocationMapper filmLocationMapper;
    private final RoleService roleService;
    private final FilmLocationWorkMapper filmLocationWorkMapper;
    private final FilmWorksMapper filmWorksMapper;
    private final FilmLocationWorkService filmLocationWorkService;
    @Override
@@ -84,7 +81,7 @@
        if (!filmLocation1.getId().equals(filmLocation.getId())) {
            throw new ValidationException("景点名称重复");
        }
        BeanUtils.copyProperties(filmLocationDTO, filmLocation);
        BeanUtils.copyProperties(filmLocationDTO, filmLocation,"filmId","startDate","endDate","visitorPhotos","isEnabled","transportGuide");
        filmLocation.update(SecurityUtils.getUserId());
        filmLocationMapper.updateById(filmLocation);
    }
@@ -199,6 +196,47 @@
    }
    @Override
    @Transactional
    public void batchDelete(BatchDTO dto) {
        if (CollectionUtils.isEmpty(dto.getIds())) {
            throw new ValidationException("删除ID列表不能为空");
        }
        Set<Long> protectedIds = filmLocationWorkMapper.findLocationIdsWithWorks(dto.getIds());
        if (!protectedIds.isEmpty()) {
            Map<Long, FilmLocationNameDTO> locationDTOs = filmLocationMapper.getLocationNamesByIds(
                    new ArrayList<>(protectedIds)
            );
            String errorMsg = protectedIds.stream()
                    .map(id -> {
                        FilmLocationNameDTO locationNameDTO = locationDTOs.get(id);
                        String name = (locationNameDTO != null && locationNameDTO.getName() != null) ?
                                locationNameDTO.getName() : "未知景点";
                        return String.format("%s(ID:%d)", name, id);
                    })
                    .collect(Collectors.joining("、"));
            throw new ValidationException("以下景点有对应的影视作品,无法删除: " + errorMsg);
        }
        filmLocationMapper.deleteBatchIds(dto.getIds());
    }
    @Override
    public List<FilmWorksVO> related(Long locationId) {
        List<Long> ids = new ArrayList<>();
        ids.add(locationId);
        Set<Long> filmIds = filmLocationWorkMapper.findFilmIdsWithWorks(ids);
        if (!filmIds.isEmpty()) {
            List<FilmWorksVO> filmWorksVOS = filmWorksMapper.getFilmWorksByIds(new ArrayList<>(filmIds));
            return filmWorksVOS;
        } else {
            return null;
        }
    }
    private void updateLocationRelations(Long targetId, List<Long> mergeIds) {
        // 查询所有待更新的工作记录
@@ -219,4 +257,5 @@
            filmLocationWorkService.updateBatchById(toUpdate);
        }
    }
}