src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/dto/response/film/FilmLocationNameDTO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/mapper/film/FilmWorksMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/service/film/FilmLocationService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/mzl/flower/web/film/FilmLocationController.java | ●●●●● 补丁 | 查看 | 原始文档 | 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)); } }