cloudroam
2025-07-01 d678db8fe85e51b65403f3edae4bff18aa23ee15
add:影视景点管理
已修改7个文件
已添加1个文件
151 ■■■■■ 文件已修改
src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/film/FilmLocationNameDTO.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/film/FilmLocationService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/film/FilmLocationController.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java
@@ -97,7 +97,7 @@
    /**
     * 状态(0禁用,1启用)
     */
    private Integer status;
    private Boolean isEnabled;
    /**
@@ -133,4 +133,14 @@
    private Integer operationWeight;
    /**
     * 创建者ID
     */
    private String createBy;
    /**
     * 最后修改者ID
     */
    private String updateBy;
}
src/main/java/com/mzl/flower/dto/response/film/FilmLocationNameDTO.java
对比新文件
@@ -0,0 +1,9 @@
package com.mzl.flower.dto.response.film;
import lombok.Data;
@Data
public class FilmLocationNameDTO {
    private Long id;
    private String name;
}
src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java
@@ -2,13 +2,17 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.entity.film.FilmLocation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -28,4 +32,14 @@
    @Select("select * from film_location where  location_name  = #{locationName} and deleted = '0'  limit 1")
    FilmLocation selectByLocationName(@Param("locationName") String locationName );
    @Select("<script>" +
            "SELECT id, location_name AS name FROM film_location " +
            "WHERE id IN " +
            "<foreach item='id' collection='list' open='(' separator=',' close=')'>" +
            "#{id}" +
            "</foreach>" +
            "</script>")
    @MapKey("id")
    Map<Long, FilmLocationNameDTO> getLocationNamesByIds(@Param("list") List<Long> ids);
}
src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java
@@ -6,6 +6,7 @@
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Set;
public interface FilmLocationWorkMapper extends BaseMapper<FilmLocationWork> {
@@ -15,4 +16,23 @@
    List<FilmLocationWork> getByLocaltionId(@Param("locationId") String locationId);
    List<FilmLocationWork> selectByLocationId(Long id);
    @Select("<script>" +
            "SELECT DISTINCT location_id FROM film_location_work " +
            "WHERE location_id IN " +
            "<foreach item='id' collection='list' open='(' separator=',' close=')'>" +
            "#{id}" +
            "</foreach>" +
            "</script>")
    Set<Long> findLocationIdsWithWorks(@Param("list") List<Long> locationIds);
    @Select("<script>" +
            "SELECT DISTINCT film_id FROM film_location_work " +
            "WHERE location_id IN " +
            "<foreach item='id' collection='list' open='(' separator=',' close=')'>" +
            "#{id}" +
            "</foreach>" +
            "</script>")
    Set<Long> findFilmIdsWithWorks(@Param("list") List<Long> locationIds);
}
src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java
@@ -2,13 +2,16 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.film.FilmWorksQueryDTO;
import com.mzl.flower.dto.response.film.FilmLocationNameDTO;
import com.mzl.flower.dto.response.film.FilmWorksVO;
import com.mzl.flower.entity.film.FilmWorks;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
/**
 * <p>
@@ -33,4 +36,15 @@
    @Select("select * from  film_works where deleted = '0' and status = 'pending_create'")
    List<FilmWorksVO> pendingCreate();
    @Select("<script>" +
            "select * from  film_works where deleted = '0' " +
            "and id IN " +
            "<foreach item='id' collection='list' open='(' separator=',' close=')'>" +
            "#{id}" +
            "</foreach>" +
            "</script>")
    @MapKey("id")
    List<FilmWorksVO> getFilmWorksByIds(@Param("list") List<Long> ids);
}
src/main/java/com/mzl/flower/service/film/FilmLocationService.java
@@ -5,8 +5,11 @@
import com.mzl.flower.dto.request.film.FilmLocationDTO;
import com.mzl.flower.dto.request.film.FilmLocationQueryDTO;
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.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
 * <p>
@@ -33,4 +36,8 @@
    void isEnable(Long id);
    void batchMerge(BatchDTO dto);
    void batchDelete(BatchDTO dto);
    List<FilmWorksVO> related(Long locationId);
}
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);
        }
    }
}
src/main/java/com/mzl/flower/web/film/FilmLocationController.java
@@ -9,6 +9,7 @@
import com.mzl.flower.dto.request.film.FilmLocationDTO;
import com.mzl.flower.dto.request.film.FilmLocationQueryDTO;
import com.mzl.flower.dto.response.film.FilmLocationVO;
import com.mzl.flower.dto.response.film.FilmWorksVO;
import com.mzl.flower.service.film.FilmLocationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -18,6 +19,7 @@
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
 * 影视拍摄场地信息表前端控制器
@@ -87,4 +89,18 @@
        filmLocationService.batchMerge(dto);
        return returnData(R.SUCCESS.getCode(), null);
    }
    @PostMapping("/filmLocation/delete/batch")
    @ApiOperation(value = "批量删除", notes = "批量删除")
    public ResponseEntity<ReturnDataDTO> batchDelete(@Validated @RequestBody BatchDTO dto) {
        filmLocationService.batchDelete(dto);
        return returnData(R.SUCCESS.getCode(),null);
    }
    @GetMapping("/filmLocation/related")
    @ApiOperation(value = "景点对应的影视作品", notes = "景点对应的影视作品")
    public ResponseEntity<ReturnDataDTO<List<FilmWorksVO>>> related(@NotNull(message = "id不能为空") Long locationId) {
        return returnData(R.SUCCESS.getCode(), filmLocationService.related(locationId));
    }
}