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