From 2e0e1c5cde0585669334ebc64ff50eae68770726 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期四, 26 六月 2025 14:58:11 +0800
Subject: [PATCH] add:影视景点
---
src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java | 34 ++
src/main/java/com/mzl/flower/entity/film/FilmLocation.java | 36 ++
src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java | 173 ++++++++++++++
src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java | 53 ++++
src/main/java/com/mzl/flower/service/film/FilmLocationWorkService.java | 10
src/main/java/com/mzl/flower/web/film/FilmWorksController.java | 7
src/main/java/com/mzl/flower/service/partner/PartnerService.java | 7
src/main/java/com/mzl/flower/constant/Constants.java | 17 +
src/main/resources/mapper/film/FilmLocationMapper.xml | 54 ++--
src/main/java/com/mzl/flower/web/upload/FileUploadOssResource.java | 10
src/main/java/com/mzl/flower/web/film/FilmLocationController.java | 36 ++
src/main/java/com/mzl/flower/service/film/impl/FilmLocationWorkServiceImpl.java | 20 +
src/main/java/com/mzl/flower/dto/response/film/FilmLocationVO.java | 149 +++++++++--
src/main/java/com/mzl/flower/dto/request/film/FilmLocationQueryDTO.java | 17 +
src/main/java/com/mzl/flower/entity/film/FilmLocationWork.java | 37 +++
src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java | 15 +
src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java | 18 +
src/main/java/com/mzl/flower/service/film/FilmWorksService.java | 1
src/main/java/com/mzl/flower/service/film/FilmLocationService.java | 9
19 files changed, 622 insertions(+), 81 deletions(-)
diff --git a/src/main/java/com/mzl/flower/constant/Constants.java b/src/main/java/com/mzl/flower/constant/Constants.java
index 0a0114e..ffd4f47 100644
--- a/src/main/java/com/mzl/flower/constant/Constants.java
+++ b/src/main/java/com/mzl/flower/constant/Constants.java
@@ -79,6 +79,8 @@
approved("审核通过"),
rejected("审核驳回"),
+ create_cancel("取消生成"),
+ create_afresh("重新生成"),
;
COMMON_PUBLISH_STATUS(String desc) {
@@ -779,6 +781,21 @@
}
+ public enum IS_VISITOR {
+ yes("是"), no("否");
+
+ IS_VISITOR(String desc) {
+ this.desc = desc;
+ }
+
+ private String desc;
+
+ public String getDesc() {
+ return desc;
+ }
+ }
+
+
}
diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java
index 69fc585..b5240d9 100644
--- a/src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java
@@ -7,15 +7,22 @@
@Data
public class FilmLocationDTO {
+
+ private Long id;
/**
* 关联的影视作品ID
*/
- private Integer filmId;
+ private Long filmId;
/**
* 拍摄地点名称
*/
private String locationName;
+
+ /**
+ * 拍摄地点图片
+ */
+ private String locationUrl;
/**
* 详细地址
@@ -55,7 +62,7 @@
/**
* 是否开放参观(0否,1是)
*/
- private Boolean isOpenVisit;
+ private String isOpenVisit;
/**
* 参观提示(JSON格式存储)
@@ -103,4 +110,27 @@
*/
private String visitorPhotos;
+ /**
+ * 省
+ */
+ private String province;
+
+ /**
+ * 市
+ */
+ private String city;
+
+ /**
+ * 区
+ */
+ private String region;
+
+ /**
+ * 景点热度
+ */
+ private Double locationWeight;
+
+
+ private Integer operationWeight;
+
}
diff --git a/src/main/java/com/mzl/flower/dto/request/film/FilmLocationQueryDTO.java b/src/main/java/com/mzl/flower/dto/request/film/FilmLocationQueryDTO.java
index 6000f70..2638daa 100644
--- a/src/main/java/com/mzl/flower/dto/request/film/FilmLocationQueryDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/film/FilmLocationQueryDTO.java
@@ -5,6 +5,19 @@
@Data
public class FilmLocationQueryDTO {
- @ApiModelProperty(value = "会员等级名称")
- private String name;
+
+ @ApiModelProperty(value = "拍摄地点名称")
+ private String locationName;
+
+ @ApiModelProperty(value = "所在省")
+ private String province;
+
+ @ApiModelProperty(value = "所在市")
+ private String city;
+
+ @ApiModelProperty(value = "所在区")
+ private String region;
+
+ @ApiModelProperty("启用/禁用(USER_ENABLED_OR_DISABLED)")
+ private Integer isEnabled;
}
diff --git a/src/main/java/com/mzl/flower/dto/response/film/FilmLocationVO.java b/src/main/java/com/mzl/flower/dto/response/film/FilmLocationVO.java
index 390eaf7..3834ad0 100644
--- a/src/main/java/com/mzl/flower/dto/response/film/FilmLocationVO.java
+++ b/src/main/java/com/mzl/flower/dto/response/film/FilmLocationVO.java
@@ -6,60 +6,141 @@
import lombok.Data;
import java.math.BigDecimal;
+import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
public class FilmLocationVO extends AbstractTransDTO {
+
+
private Long id;
+ /**
+ * 关联的影视作品ID
+ */
+ private Integer filmId;
- @ApiModelProperty("会员等级名称")
- private String name;
+ /**
+ * 拍摄地点名称
+ */
+ private String locationName;
- @ApiModelProperty("成长点-区间-开始")
- private int startPoint;
+ /**
+ * 拍摄地点图片
+ */
+ private String locationUrl;
- @ApiModelProperty("成长点-区间-结束")
- private int endPoint;
+ /**
+ * 详细地址
+ */
+ private String address;
- @ApiModelProperty("会员折扣类型(百分比、固定金额)")
- @DictTrans(target = "discountTypeStr", codeType = "DISCOUNT_TYPE")
- private String discountType;
+ /**
+ * 纬度坐标(精确到小数点后6位)
+ */
+ private BigDecimal gpsLat;
- private String discountTypeStr;
+ /**
+ * 经度坐标(精确到小数点后6位)
+ */
+ private BigDecimal gpsLng;
- @ApiModelProperty("会员折扣百分比")
- private BigDecimal discountRatio;
+ /**
+ * 拍摄开始日期
+ */
+ private LocalDate startDate;
- @ApiModelProperty("会员折扣固定金额")
- private BigDecimal discountAmount;
+ /**
+ * 拍摄结束日期
+ */
+ private LocalDate endDate;
- @ApiModelProperty("消费金额(元)")
- private int consumptionAmount;
+ /**
+ * 场景类型
+ */
+ private String sceneType;
- @ApiModelProperty("已消费产生的成长值")
- private int growthValue;
+ /**
+ * 经典画面描述
+ */
+ private String classicScene;
- @ApiModelProperty("未消费产生的下降值")
- private int downgradeValue;
+ /**
+ * 是否开放参观(0否,1是)
+ */
+ @DictTrans(target = "isOpenVisitStr", codeType = "IS_VISITOR")
+ private String isOpenVisit;
- @ApiModelProperty("创建日期")
- private LocalDateTime createTime;
+ private String isOpenVisitStr;
- @ApiModelProperty("修改日期")
- private LocalDateTime updateTime;
+ /**
+ * 参观提示(JSON格式存储)
+ */
+ private String visitInfo;
- @ApiModelProperty("操作人")
- private String createName;
+ /**
+ * 地标性建筑描述
+ */
+ private String landmarkDesc;
- @ApiModelProperty("背景")
- private String background;
+ /**
+ * 交通指引说明
+ */
+ private String transportGuide;
- @ApiModelProperty("图片")
- private String pictures;
+ /**
+ * 停车场信息
+ */
+ private String parkingInfo;
- @ApiModelProperty(value = "会员成长值获取规则")
- private String growthValueDesc;
+ /**
+ * 周边设施描述
+ */
+ private String surroundingFacilities;
- @ApiModelProperty("更新人")
- private String updateBy;
+ /**
+ * AR实景对比功能入口URL
+ */
+ private String arEntry;
+
+ /**
+ * 状态(0禁用,1启用)
+ */
+ private Boolean isEnabled;
+
+
+ /**
+ * 打卡记录量
+ */
+ private Integer checkinCount;
+
+ /**
+ * 游客实拍图(存储JSON数组)
+ */
+ private String visitorPhotos;
+
+ /**
+ * 省
+ */
+ private String province;
+
+ /**
+ * 市
+ */
+ private String city;
+
+ /**
+ * 区
+ */
+ private String region;
+
+ /**
+ * 景点热度
+ */
+ private Double locationWeight;
+
+ /**
+ * 运营权重
+ */
+ private Integer operationWeight;
+
}
diff --git a/src/main/java/com/mzl/flower/entity/film/FilmLocation.java b/src/main/java/com/mzl/flower/entity/film/FilmLocation.java
index 8a4545b..1b7c8a6 100644
--- a/src/main/java/com/mzl/flower/entity/film/FilmLocation.java
+++ b/src/main/java/com/mzl/flower/entity/film/FilmLocation.java
@@ -6,6 +6,7 @@
import com.mzl.flower.base.BaseAutoEntity;
import com.mzl.flower.base.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -26,12 +27,17 @@
/**
* 关联的影视作品ID
*/
- private Integer filmId;
+ private Long filmId;
/**
* 拍摄地点名称
*/
private String locationName;
+
+ /**
+ * 拍摄地点图片
+ */
+ private String locationUrl;
/**
* 详细地址
@@ -71,7 +77,7 @@
/**
* 是否开放参观(0否,1是)
*/
- private Boolean isOpenVisit;
+ private String isOpenVisit;
/**
* 参观提示(JSON格式存储)
@@ -106,7 +112,7 @@
/**
* 状态(0禁用,1启用)
*/
- private Integer status;
+ private Boolean isEnabled;
/**
* 打卡记录量
@@ -118,5 +124,29 @@
*/
private String visitorPhotos;
+ /**
+ * 省
+ */
+ private String province;
+
+ /**
+ * 市
+ */
+ private String city;
+
+ /**
+ * 区
+ */
+ private String region;
+
+ /**
+ * 景点热度
+ */
+ private Double locationWeight;
+
+ /**
+ * 运营权重
+ */
+ private Integer operationWeight;
}
diff --git a/src/main/java/com/mzl/flower/entity/film/FilmLocationWork.java b/src/main/java/com/mzl/flower/entity/film/FilmLocationWork.java
new file mode 100644
index 0000000..a959478
--- /dev/null
+++ b/src/main/java/com/mzl/flower/entity/film/FilmLocationWork.java
@@ -0,0 +1,37 @@
+package com.mzl.flower.entity.film;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mzl.flower.base.BaseAutoEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * 影视拍摄场地信息表
+ *
+ * @author generator@Fang
+ * @since 2025-05-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("film_location_work")
+public class FilmLocationWork extends BaseAutoEntity {
+
+
+ /**
+ * 关联的景点ID
+ */
+ private Long locationId;
+
+ /**
+ * 关联的影视作品ID
+ */
+ private Long filmId;
+
+
+
+}
diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java
index 9195636..ecc7844 100644
--- a/src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java
@@ -1,7 +1,14 @@
package com.mzl.flower.mapper.film;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.dto.request.film.FilmLocationQueryDTO;
+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.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
/**
* <p>
@@ -13,4 +20,12 @@
*/
public interface FilmLocationMapper extends BaseMapper<FilmLocation> {
+ List<FilmLocationVO> queryPage(@Param("dto") FilmLocationQueryDTO dto, Page page);
+
+
+ @Select("select * from film_location where id = #{id} ")
+ FilmLocationVO selectByIdInfo(Long id);
+
+ @Select("select * from film_location where location_name = #{locationName} and deleted = '0' limit 1")
+ FilmLocation selectByLocationName(@Param("locationName") String locationName );
}
diff --git a/src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java b/src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java
new file mode 100644
index 0000000..1b18e3b
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java
@@ -0,0 +1,18 @@
+package com.mzl.flower.mapper.film;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mzl.flower.entity.film.FilmLocationWork;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+
+public interface FilmLocationWorkMapper extends BaseMapper<FilmLocationWork> {
+
+
+ @Select("select * from film_location_work where location_id = #{locationId} and deleted = '0' ")
+ List<FilmLocationWork> getByLocaltionId(@Param("locationId") String locationId);
+
+ List<FilmLocationWork> selectByLocationId(Long id);
+}
diff --git a/src/main/java/com/mzl/flower/service/film/FilmLocationService.java b/src/main/java/com/mzl/flower/service/film/FilmLocationService.java
index a5cb2b2..a431bb5 100644
--- a/src/main/java/com/mzl/flower/service/film/FilmLocationService.java
+++ b/src/main/java/com/mzl/flower/service/film/FilmLocationService.java
@@ -1,6 +1,7 @@
package com.mzl.flower.service.film;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.FilmLocationVO;
@@ -24,4 +25,12 @@
void deleteFilmLocation(String id);
Page<FilmLocationVO> queryPage(FilmLocationQueryDTO filmLocationQueryDTO, Page page);
+
+ FilmLocationVO detail(Long id);
+
+ void changeDownState(Long id);
+
+ void isEnable(Long id);
+
+ void batchMerge(BatchDTO dto);
}
diff --git a/src/main/java/com/mzl/flower/service/film/FilmLocationWorkService.java b/src/main/java/com/mzl/flower/service/film/FilmLocationWorkService.java
new file mode 100644
index 0000000..2a3a9ab
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/film/FilmLocationWorkService.java
@@ -0,0 +1,10 @@
+package com.mzl.flower.service.film;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.mzl.flower.entity.film.FilmLocationWork;
+
+
+public interface FilmLocationWorkService extends IService<FilmLocationWork> {
+
+
+}
diff --git a/src/main/java/com/mzl/flower/service/film/FilmWorksService.java b/src/main/java/com/mzl/flower/service/film/FilmWorksService.java
index 99ab182..5a159b1 100644
--- a/src/main/java/com/mzl/flower/service/film/FilmWorksService.java
+++ b/src/main/java/com/mzl/flower/service/film/FilmWorksService.java
@@ -32,6 +32,7 @@
List<FilmWorksVO> pendingCreate();
void changeStatus(Long id);
+ void changeCreateStatus(Long id);
void changeTopState(Long id);
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 66d6ada..9c27933 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
@@ -1,17 +1,37 @@
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.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.FilmLocationVO;
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.service.film.FilmLocationService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mzl.flower.service.film.FilmLocationWorkService;
+import com.mzl.flower.service.system.RoleService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+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.stream.Collectors;
/**
* <p>
@@ -27,9 +47,24 @@
public class FilmLocationServiceImpl extends ServiceImpl<FilmLocationMapper, FilmLocation> implements FilmLocationService {
private final FilmLocationMapper filmLocationMapper;
+
+
+ private final RoleService roleService;
+
+ private final FilmLocationWorkMapper filmLocationWorkMapper;
+ private final FilmLocationWorkService filmLocationWorkService;
+
@Override
public void saveFilmLocation(FilmLocationDTO filmLocationDTO) {
// 转换
+ //增加保存时判断是否有景点名称
+ if (StringUtils.isEmpty(filmLocationDTO.getLocationName())) {
+ throw new ValidationException("景点名称不能为空");
+ }
+ FilmLocation filmLocation1 = filmLocationMapper.selectByLocationName(filmLocationDTO.getLocationName());
+ if (!ObjectUtils.isEmpty(filmLocation1)) {
+ throw new ValidationException("景点名称重复");
+ }
FilmLocation filmLocation = new FilmLocation();
BeanUtils.copyProperties(filmLocationDTO, filmLocation);
filmLocation.create();
@@ -38,16 +73,150 @@
@Override
public void updateFilmLocation(FilmLocationDTO filmLocationDTO) {
+ if (StringUtils.isEmpty(filmLocationDTO.getLocationName())) {
+ throw new ValidationException("景点名称不能为空");
+ }
+ //增加修改时保存得景点名称是否有重复,排除当前这条
+ FilmLocation filmLocation1 = filmLocationMapper.selectByLocationName(filmLocationDTO.getLocationName());
+
+ FilmLocation filmLocation = filmLocationMapper.selectById(filmLocationDTO.getId());
+ if (!filmLocation1.getId().equals(filmLocation.getId())) {
+ throw new ValidationException("景点名称重复");
+ }
+ BeanUtils.copyProperties(filmLocationDTO, filmLocation);
+ filmLocation.update(SecurityUtils.getUserId());
+ filmLocationMapper.updateById(filmLocation);
}
@Override
public void deleteFilmLocation(String id) {
+ FilmLocation filmLocation = filmLocationMapper.selectById(id);
+ if (filmLocation == null) {
+ throw new ValidationException("找不到id为" + id + "的景点");
+ }
+ //判断景点id是否有对应得影视作品,如果有则不能删除。如果没有则可以删除
+ //可能需要增加判断,如果是取消生成应该也可以删除,重新生成需要重新生成新的位置信息(取消生成的话,其实也没有对应的景点信息,这点其实暂时不用考虑)
+ List<FilmLocationWork> filmLocationWorks = filmLocationWorkMapper.getByLocaltionId(id);
+ if(!CollectionUtils.isEmpty(filmLocationWorks)){
+ throw new ValidationException("景点有对应得影视作品,无法删除");
+ }
+ filmLocationMapper.deleteById(id);
+ }
+
+ @Override
+ public Page<FilmLocationVO> queryPage(FilmLocationQueryDTO dto, Page page) {
+
+ List<FilmLocationVO> list = filmLocationMapper.queryPage(dto, page);
+ page.setRecords(list);
+ return page;
+ }
+
+ @Override
+ public FilmLocationVO detail(Long id) {
+ FilmLocationVO filmLocationVO = filmLocationMapper.selectByIdInfo(id);
+ if (filmLocationVO == null) {
+ return null;
+ }
+ return filmLocationVO;
+ }
+
+ @Override
+ public void changeDownState(Long id) {
+
+ //获取当前人员角色,判断是不是审核角色
+ List<String> roleIds = new ArrayList<>();
+ List<Role> roleList = roleService.getUserRoleList(SecurityUtils.getUserId());
+ for (Role role : roleList) {
+ roleIds.add(role.getId());
+ }
+
+ if (!roleIds.contains("77462b362bad4c88a7a5c64cbdd25d91")) {
+ throw new ValidationException("非运营角色不能清除权重");
+ }
+
+ FilmLocation filmLocation = filmLocationMapper.selectById(id);
+ if (filmLocation == null) {
+ throw new ValidationException("找不到id为" + id + "的景点");
+ }
+
+ filmLocation.setLocationWeight((double) 0);
+
+ filmLocationMapper.updateById(filmLocation);
}
@Override
- public Page<FilmLocationVO> queryPage(FilmLocationQueryDTO filmLocationQueryDTO, Page page) {
- return null;
+ public void isEnable(Long id) {
+ FilmLocation filmLocation = filmLocationMapper.selectById(id);
+ if (filmLocation == null) {
+ throw new ValidationException("找不到id为" + id + "的景点");
+ }
+ if (filmLocation.getIsEnabled()) {
+ filmLocation.setIsEnabled(false);
+ } else {
+ filmLocation.setIsEnabled(true);
+ }
+ filmLocation.update(SecurityUtils.getUserId());
+ filmLocationMapper.updateById(filmLocation);
+ }
+
+ @Override
+ @Transactional
+ public void batchMerge(BatchDTO dto) {
+ //获取当前人员角色,判断是不是审核角色
+// List<String> roleIds = new ArrayList<>();
+// List<Role> roleList = roleService.getUserRoleList(SecurityUtils.getUserId());
+// for (Role role : roleList) {
+// roleIds.add(role.getId());
+// }
+ // 权限校验:仅允许运营角色操作
+ List<String> roleIds = roleService.getUserRoleList(SecurityUtils.getUserId()).stream().map(Role::getId).collect(Collectors.toList());
+ if (!roleIds.contains("77462b362bad4c88a7a5c64cbdd25d91")) {
+ throw new ValidationException("非运营角色不能合并");
+ }
+ if (dto.getIds() == null || dto.getIds().size() < 2) {
+ throw new ValidationException("至少选中两条数据");
+ }
+
+ List<Long> idList = dto.getIds();
+ List<FilmLocation> sortedList = idList.stream().map(id -> filmLocationMapper.selectById(id)).filter(Objects::nonNull).collect(Collectors.toList());
+
+ // 检查有效记录数
+ if (sortedList.size() < 2) {
+ throw new ValidationException("有效数据不足两条");
+ }
+ // 获取目标记录(第一条)和待合并记录
+ FilmLocation target = sortedList.get(0);
+ List<FilmLocation> toMergeList = sortedList.subList(1, sortedList.size());
+ List<Long> mergeIds = toMergeList.stream().map(FilmLocation::getId).collect(Collectors.toList());
+
+ // 更新关联表的外键引用
+ updateLocationRelations(target.getId(), mergeIds);
+
+ // 删除待合并记录
+ filmLocationMapper.deleteBatchIds(mergeIds);
+
+ }
+
+
+ private void updateLocationRelations(Long targetId, List<Long> mergeIds) {
+ // 查询所有待更新的工作记录
+ LambdaQueryWrapper<FilmLocationWork> query = new LambdaQueryWrapper<>();
+ query.in(FilmLocationWork::getLocationId, mergeIds);
+ List<FilmLocationWork> records = filmLocationWorkService.list(query);
+
+ // 准备更新
+ List<FilmLocationWork> toUpdate = records.stream().map(work -> {
+ FilmLocationWork update = new FilmLocationWork();
+ update.setId(work.getId());
+ update.setLocationId(targetId);
+ return update;
+ }).collect(Collectors.toList());
+
+ // 批量更新(MP的批量更新方法)
+ if (!toUpdate.isEmpty()) {
+ filmLocationWorkService.updateBatchById(toUpdate);
+ }
}
}
diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmLocationWorkServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmLocationWorkServiceImpl.java
new file mode 100644
index 0000000..01ad1e2
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/film/impl/FilmLocationWorkServiceImpl.java
@@ -0,0 +1,20 @@
+package com.mzl.flower.service.film.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.mzl.flower.entity.film.FilmLocationWork;
+import com.mzl.flower.mapper.film.FilmLocationMapper;
+import com.mzl.flower.mapper.film.FilmLocationWorkMapper;
+import com.mzl.flower.service.film.FilmLocationWorkService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+
+@Service
+@Transactional
+@RequiredArgsConstructor
+public class FilmLocationWorkServiceImpl extends ServiceImpl<FilmLocationWorkMapper, FilmLocationWork> implements FilmLocationWorkService {
+
+ private final FilmLocationMapper filmLocationMapper;
+
+}
diff --git a/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java b/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java
index 397ee89..e6e0575 100644
--- a/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java
@@ -27,6 +27,9 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@@ -135,6 +138,18 @@
dto.setUserId(null);
}
List<FilmWorksVO> list = filmWorksMapper.queryPage(dto,page);
+ // 测试前端展示用代码,部署发布不适用
+// list.forEach(l->{
+// if (l.getCoverUrl().contains("doubanio")) {
+// String encodedUrl = null;
+// try {
+// encodedUrl = URLEncoder.encode(l.getCoverUrl(), String.valueOf(StandardCharsets.UTF_8));
+// } catch (UnsupportedEncodingException e) {
+// throw new RuntimeException(e);
+// }
+// l.setCoverUrl("https://images.weserv.nl/?url=" + encodedUrl);
+// }
+// });
page.setRecords(list);
@@ -176,6 +191,37 @@
filmWorksMapper.updateById(filmWork);
}else{
throw new ValidationException("非审核通过或者发布状态,不能操作");
+ }
+ }
+
+
+ @Override
+ public void changeCreateStatus(Long id) {
+ //获取当前人员角色,判断是不是审核角色
+ List<String> roleIds = new ArrayList<>();
+ List<Role> roleList = roleService.getUserRoleList(SecurityUtils.getUserId());
+ for (Role role : roleList) {
+ roleIds.add(role.getId());
+ }
+ if (!roleIds.contains("8f9ef89f6b2d4d8e9ea1fc8d2f25ce69")) {
+ throw new ValidationException("非编辑角色不能操作");
+ }
+ FilmWorks filmWork = filmWorksMapper.selectById(id);
+ if (filmWork == null) {
+ throw new ValidationException("找不到id为" + id + "的作品");
+ }
+ if (Constants.COMMON_PUBLISH_STATUS.pending_create.name().equals(filmWork.getStatus()) || Constants.COMMON_PUBLISH_STATUS.create_cancel.name().equals(filmWork.getStatus()) || Constants.COMMON_PUBLISH_STATUS.create_failed.name().equals(filmWork.getStatus())) {
+ if (Constants.COMMON_PUBLISH_STATUS.create_cancel.name().equals(filmWork.getStatus())) {
+ filmWork.setStatus(Constants.COMMON_PUBLISH_STATUS.pending_create.name());
+ } else if (Constants.COMMON_PUBLISH_STATUS.create_failed.name().equals(filmWork.getStatus())) {
+ filmWork.setStatus(Constants.COMMON_PUBLISH_STATUS.pending_create.name());
+ } else {
+ filmWork.setStatus(Constants.COMMON_PUBLISH_STATUS.create_cancel.name());
+ filmWork.setPublishDate(LocalDate.now());
+ }
+ filmWorksMapper.updateById(filmWork);
+ }else{
+ throw new ValidationException("当前状态,不能操作");
}
}
@@ -266,8 +312,11 @@
return null;
}
CustomerDTO currentCustomer = customerMapper.getCurrentCustomer(filmWorksVO.getCreateBy());
- filmWorksVO.setNickname(currentCustomer.getNickName());
- filmWorksVO.setAvatar(currentCustomer.getCover());
+ if(!ObjectUtils.isEmpty(currentCustomer)){
+ filmWorksVO.setNickname(currentCustomer.getNickName());
+ filmWorksVO.setAvatar(currentCustomer.getCover());
+ }
+
return filmWorksVO;
}
diff --git a/src/main/java/com/mzl/flower/service/partner/PartnerService.java b/src/main/java/com/mzl/flower/service/partner/PartnerService.java
index 3be43a8..d7c1fb5 100644
--- a/src/main/java/com/mzl/flower/service/partner/PartnerService.java
+++ b/src/main/java/com/mzl/flower/service/partner/PartnerService.java
@@ -15,6 +15,7 @@
import com.mzl.flower.mapper.system.UserMapper;
import com.mzl.flower.service.BaseService;
import com.mzl.flower.service.UploadService;
+import com.mzl.flower.service.oss.TosOssService;
import com.mzl.flower.service.system.UserService;
import com.mzl.flower.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
@@ -58,6 +59,9 @@
@Autowired
private UserService userService;
+
+ @Autowired
+ private TosOssService tosOssService;
public PartnerService(PartnerMapper partnerMapper, UserMapper userMapper, WxMaService maService, UploadService uploadService) {
this.partnerMapper = partnerMapper;
@@ -219,7 +223,8 @@
File file = maService.getQrcodeService()
.createWxaCodeUnlimit("partnerUserId="+partner.getId(),"pages/login/supplier-login","/opt/wx-code");
InputStream in = new FileInputStream(file);
- String url = uploadService.upload(in, file.getName());
+// String url = uploadService.upload(in, file.getName());
+ String url = tosOssService.uploadFile( in,file.getName());
partner.setWechatUrl("https://" + url);
partner.update(SecurityUtils.getUserId());
diff --git a/src/main/java/com/mzl/flower/web/film/FilmLocationController.java b/src/main/java/com/mzl/flower/web/film/FilmLocationController.java
index df54f22..5c7623b 100644
--- a/src/main/java/com/mzl/flower/web/film/FilmLocationController.java
+++ b/src/main/java/com/mzl/flower/web/film/FilmLocationController.java
@@ -5,6 +5,7 @@
import com.mzl.flower.base.BaseController;
import com.mzl.flower.base.R;
import com.mzl.flower.base.ReturnDataDTO;
+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.FilmLocationVO;
@@ -13,6 +14,7 @@
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotNull;
@@ -33,30 +35,56 @@
private final FilmLocationService filmLocationService;
@GetMapping("/filmLocation/list")
- @ApiOperation(value = "影视作品列表", httpMethod = "GET")
+ @ApiOperation(value = "影视拍摄场地列表", httpMethod = "GET")
public ResponseEntity<ReturnDataDTO<Page<FilmLocationVO>>> getFilmLocationList(Page page, FilmLocationQueryDTO dto) {
return returnData(R.SUCCESS.getCode(), filmLocationService.queryPage(dto, page));
}
@GetMapping(value = "/filmLocation/delete")
- @ApiOperation(value = "删除影视作品 ", httpMethod = "GET", notes = "ID")
+ @ApiOperation(value = "删除影视拍摄场地 ", httpMethod = "GET", notes = "ID")
public ResponseEntity delete(@NotNull(message = "id不能为空") Long id) {
filmLocationService.deleteFilmLocation(String.valueOf(id));
return returnData(R.SUCCESS.getCode(), null);
}
@PostMapping(value = "/filmLocation/new")
- @ApiOperation(value = "保存影视作品", httpMethod = "POST")
+ @ApiOperation(value = "保存影视拍摄场地", httpMethod = "POST")
public ResponseEntity insert(@RequestBody FilmLocationDTO filmLocationDTO) {
filmLocationService.saveFilmLocation(filmLocationDTO);
return returnData(R.SUCCESS.getCode(), null);
}
@PostMapping(value = "/filmLocation/edit")
- @ApiOperation(value = "更新影视作品", httpMethod = "POST")
+ @ApiOperation(value = "更新影视拍摄场地", httpMethod = "POST")
public ResponseEntity update(@RequestBody FilmLocationDTO filmLocationDTO) {
filmLocationService.updateFilmLocation(filmLocationDTO);
return returnData(R.SUCCESS.getCode(), null);
}
+ @GetMapping("/filmLocation/list/view")
+ @ApiOperation(value = "详情", notes = "详情")
+ public ResponseEntity<ReturnDataDTO<FilmLocationVO>> detail(@NotNull(message = "id不能为空") Long id) {
+ return returnData(R.SUCCESS.getCode(),filmLocationService.detail(id));
+ }
+
+ @GetMapping("/filmLocation/setDown")
+ @ApiOperation(value = "清除权重", notes = "清除权重")
+ public ResponseEntity<ReturnDataDTO> setDown(@NotNull(message = "id不能为空") Long id) {
+ filmLocationService.changeDownState(id);
+ return returnData(R.SUCCESS.getCode(), null);
+ }
+
+ @GetMapping("/filmLocation/isEnable")
+ @ApiOperation(value = "启用/禁用", notes = "启用/禁用景点")
+ public ResponseEntity<ReturnDataDTO<String>> isEnable(@NotNull(message = "id不能为空") Long id) {
+ filmLocationService.isEnable(id);
+ return returnData(R.SUCCESS.getCode(),null);
+ }
+
+ @PostMapping("/filmLocation/merge/batch")
+ @ApiOperation(value = "批量发布", notes = "批量发布")
+ public ResponseEntity<ReturnDataDTO> batchMerge(@Validated @RequestBody BatchDTO dto) {
+ filmLocationService.batchMerge(dto);
+ return returnData(R.SUCCESS.getCode(), null);
+ }
}
diff --git a/src/main/java/com/mzl/flower/web/film/FilmWorksController.java b/src/main/java/com/mzl/flower/web/film/FilmWorksController.java
index c0faba5..39235b4 100644
--- a/src/main/java/com/mzl/flower/web/film/FilmWorksController.java
+++ b/src/main/java/com/mzl/flower/web/film/FilmWorksController.java
@@ -81,6 +81,13 @@
return returnData(R.SUCCESS.getCode(), null);
}
+ @GetMapping("/filmWorks/changeCreateStatus")
+ @ApiOperation(value = "修改创建状态", notes = "修改创建状态")
+ public ResponseEntity<ReturnDataDTO> changeCreateStatus(@NotNull(message = "id不能为空") Long id) {
+ filmWorksService.changeCreateStatus(id);
+ return returnData(R.SUCCESS.getCode(), null);
+ }
+
@GetMapping("/filmWorks/setTop")
@ApiOperation(value = "文章置顶", notes = "文章置顶")
public ResponseEntity<ReturnDataDTO> setTop(@NotNull(message = "id不能为空") Long id) {
diff --git a/src/main/java/com/mzl/flower/web/upload/FileUploadOssResource.java b/src/main/java/com/mzl/flower/web/upload/FileUploadOssResource.java
index ac0d1d9..5bf7e38 100644
--- a/src/main/java/com/mzl/flower/web/upload/FileUploadOssResource.java
+++ b/src/main/java/com/mzl/flower/web/upload/FileUploadOssResource.java
@@ -9,6 +9,7 @@
import com.mzl.flower.config.exception.ValidationException;
import com.mzl.flower.dto.response.upload.UploadResultDTO;
import com.mzl.flower.service.UploadService;
+import com.mzl.flower.service.oss.TosOssService;
import com.mzl.flower.utils.FileUtil;
import com.mzl.flower.utils.UUIDGenerator;
import io.swagger.annotations.Api;
@@ -38,6 +39,9 @@
@Autowired
private UploadService uploadService;
+
+ @Autowired
+ private TosOssService tosOssService;
private static List<String> fileType = Arrays.asList("zip", "jpg", "png", "gif", "jpeg", "pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "mp4", "wmv", "rmvb", "mpg", "mpeg", "3gp", "mov", "m4v", "avi", "flv");
@@ -86,8 +90,10 @@
String url = FileUtil.saveFile(path, bytes, fileName, uploadProperties.getFileGroup());
uploadResult.setUrl(uploadProperties.getFileServerPath() + url);*/
- String url = uploadService.upload(file.getInputStream(), fileName);
- uploadResult.setUrl("https://" + url);
+// String url = uploadService.upload(file.getInputStream(), fileName);
+ String url = tosOssService.uploadFile( file.getInputStream(),fileName);
+// uploadResult.setUrl("https://" + url);
+ uploadResult.setUrl(url);
uploadResult.setType(extName);
uploadResult.setSize(file.getSize());
diff --git a/src/main/resources/mapper/film/FilmLocationMapper.xml b/src/main/resources/mapper/film/FilmLocationMapper.xml
index b4e3033..011a66a 100644
--- a/src/main/resources/mapper/film/FilmLocationMapper.xml
+++ b/src/main/resources/mapper/film/FilmLocationMapper.xml
@@ -2,33 +2,29 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mzl.flower.mapper.film.FilmLocationMapper">
- <!-- 通用查询映射结果 -->
- <resultMap id="BaseResultMap" type="com.mzl.flower.entity.film.FilmLocation">
- <id column="id" property="id" />
- <result column="create_time" property="createTime" />
- <result column="update_time" property="updateTime" />
- <result column="film_id" property="filmId" />
- <result column="location_name" property="locationName" />
- <result column="address" property="address" />
- <result column="gps_lat" property="gpsLat" />
- <result column="gps_lng" property="gpsLng" />
- <result column="start_date" property="startDate" />
- <result column="end_date" property="endDate" />
- <result column="scene_type" property="sceneType" />
- <result column="classic_scene" property="classicScene" />
- <result column="is_open_visit" property="isOpenVisit" />
- <result column="visit_info" property="visitInfo" />
- <result column="landmark_desc" property="landmarkDesc" />
- <result column="transport_guide" property="transportGuide" />
- <result column="parking_info" property="parkingInfo" />
- <result column="surrounding_facilities" property="surroundingFacilities" />
- <result column="ar_entry" property="arEntry" />
- <result column="status" property="status" />
- <result column="deleted" property="deleted" />
- <result column="create_by" property="createBy" />
- <result column="update_by" property="updateBy" />
- <result column="checkin_count" property="checkinCount" />
- <result column="visitor_photos" property="visitorPhotos" />
- </resultMap>
-
+ <select id="queryPage" resultType="com.mzl.flower.dto.response.film.FilmLocationVO">
+ SELECT
+ t.*
+ FROM
+ film_location t
+ WHERE
+ t.deleted = 0
+ <if test="dto.locationName != null and dto.locationName != ''">
+ AND t.location_name LIKE concat('%', #{dto.locationName},'%')
+ </if>
+ <if test="dto.province != null and dto.province != ''">
+ AND t.province LIKE concat('%', #{dto.province},'%')
+ </if>
+ <if test="dto.city != null and dto.city != ''">
+ AND t.city LIKE concat('%', #{dto.city},'%')
+ </if>
+ <if test="dto.region != null and dto.region != ''">
+ AND t.region LIKE concat('%', #{dto.region},'%')
+ </if>
+ <if test="dto.isEnabled!=null">
+ AND t.is_enabled = #{dto.isEnabled}
+ </if>
+ ORDER BY
+ t.location_weight DESC
+ </select>
</mapper>
--
Gitblit v1.9.3