cloudroam
2025-06-26 2e0e1c5cde0585669334ebc64ff50eae68770726
add:影视景点
已修改15个文件
已添加4个文件
703 ■■■■ 文件已修改
src/main/java/com/mzl/flower/constant/Constants.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/film/FilmLocationDTO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/request/film/FilmLocationQueryDTO.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/dto/response/film/FilmLocationVO.java 149 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/entity/film/FilmLocation.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/entity/film/FilmLocationWork.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/film/FilmLocationMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/mapper/film/FilmLocationWorkMapper.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/film/FilmLocationService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/film/FilmLocationWorkService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/film/FilmWorksService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/film/impl/FilmLocationServiceImpl.java 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/film/impl/FilmLocationWorkServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/film/impl/FilmWorksServiceImpl.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/service/partner/PartnerService.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/film/FilmLocationController.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/film/FilmWorksController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mzl/flower/web/upload/FileUploadOssResource.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/film/FilmLocationMapper.xml 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
        }
    }
}
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;
}
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;
}
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;
}
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;
}
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;
}
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 );
}
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);
}
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);
}
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> {
}
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);
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);
        }
    }
}
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;
}
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;
    }
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());
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);
    }
}
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) {
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());
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>