From d678db8fe85e51b65403f3edae4bff18aa23ee15 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期二, 01 七月 2025 10:28:07 +0800
Subject: [PATCH] add:影视景点管理

---
 src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java |   59 +++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 49 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java
index 9c27933..4528c16 100644
--- a/src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java
+++ b/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);
         }
     }
+
 }

--
Gitblit v1.9.3