AssetController.java 11.7 KB
Newer Older
liqin's avatar
liqin committed
1 2
package cn.wisenergy.chnmuseum.party.web.controller;

liqin's avatar
liqin committed
3
import cn.wisenergy.chnmuseum.party.common.dfs.FastDFSUtils;
liqin's avatar
liqin committed
4 5
import cn.wisenergy.chnmuseum.party.common.enums.AuditStatusEnum;
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
liqin's avatar
liqin committed
6
import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
liqin's avatar
liqin committed
7
import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam;
liqin's avatar
liqin committed
8
import cn.wisenergy.chnmuseum.party.common.vo.VideoVo;
liqin's avatar
liqin committed
9
import cn.wisenergy.chnmuseum.party.model.Asset;
liqin's avatar
liqin committed
10 11
import cn.wisenergy.chnmuseum.party.model.AssetType;
import cn.wisenergy.chnmuseum.party.model.CopyrightOwner;
liqin's avatar
liqin committed
12
import cn.wisenergy.chnmuseum.party.service.AssetService;
liqin's avatar
liqin committed
13 14
import cn.wisenergy.chnmuseum.party.service.AssetTypeService;
import cn.wisenergy.chnmuseum.party.service.CopyrightOwnerService;
liqin's avatar
liqin committed
15
import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController;
liqin's avatar
liqin committed
16
import com.alibaba.fastjson.JSONObject;
liqin's avatar
liqin committed
17 18 19 20
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
liqin's avatar
liqin committed
21
import com.github.tobato.fastdfs.domain.fdfs.MetaData;
liqin's avatar
liqin committed
22 23 24 25 26 27 28 29 30 31 32 33
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
liqin's avatar
liqin committed
34
import java.util.ArrayList;
liqin's avatar
liqin committed
35 36
import java.util.List;
import java.util.Map;
liqin's avatar
liqin committed
37
import java.util.Set;
liqin's avatar
liqin committed
38 39 40 41 42 43 44 45 46 47 48

/**
 * <pre>
 * 视频 前端控制器
 * </pre>
 *
 * @author Danny Lee
 * @since 2021-03-16
 */
@Slf4j
@RestController
liqin's avatar
liqin committed
49
@RequestMapping("/asset")
liqin's avatar
liqin committed
50
@Api(tags = {"视频接口"})
liqin's avatar
liqin committed
51 52 53 54 55
public class AssetController extends BaseController {

    @Resource
    private AssetService assetService;

liqin's avatar
liqin committed
56 57 58 59 60
    @Resource
    private CopyrightOwnerService copyrightOwnerService;

    @Resource
    private AssetTypeService assetTypeService;
liqin's avatar
liqin committed
61

liqin's avatar
liqin committed
62
    @PostMapping(value = "/save")
liqin's avatar
liqin committed
63 64
    @RequiresPermissions("asset:save")
    @ApiOperation(value = "添加视频", notes = "添加视频")
liqin's avatar
liqin committed
65 66 67 68 69
    public Map<String, Object> saveAsset(@Validated(value = {Add.class}) Asset asset) {
        final List<VideoVo> filesMetadata = new ArrayList<>(asset.getVideoUrlList().size());

        final List<String> videoUrlList = asset.getVideoUrlList();
        for (String videoUrl : videoUrlList) {
liqin's avatar
liqin committed
70
            // 原始文件名
liqin's avatar
liqin committed
71 72 73 74 75 76 77 78
            final Set<MetaData> metaData = FastDFSUtils.getFileMetaData(videoUrl);
            String fileName = metaData.stream().filter(x -> "fileName".equals(x.getName())).map(MetaData::getValue).findFirst().get();
            Long fileSize = metaData.stream().filter(x -> "fileSize".equals(x.getName())).map(MetaData::getValue).map(Long::parseLong).findFirst().get();
            String fileExtName = metaData.stream().filter(x -> "fileExtName".equals(x.getName())).map(MetaData::getValue).findFirst().get();
            String md5 = metaData.stream().filter(x -> "MD5".equals(x.getName())).map(MetaData::getValue).findFirst().get();
            filesMetadata.add(VideoVo.builder().fileName(fileName)
                    .fileExtName(fileExtName)
                    .fileSize(fileSize).fileUrl(videoUrl).md5(md5).build());
liqin's avatar
liqin committed
79
        }
liqin's avatar
liqin committed
80
        asset.setVideoUrl(JSONObject.toJSONString(filesMetadata));
liqin's avatar
liqin committed
81
        asset.setAuditStatusAdd(AuditStatusEnum.TBC.name());
liqin's avatar
liqin committed
82 83 84 85 86 87
        // 保存业务节点信息
        boolean result = assetService.save(asset);
        // 返回操作结果
        if (result) {
            return getSuccessResult();
        }
liqin's avatar
liqin committed
88
        return getFailResult();
liqin's avatar
liqin committed
89 90 91 92 93
    }

    @PutMapping("/update")
    @RequiresPermissions("asset:update")
    @ApiOperation(value = "修改视频信息", notes = "修改视频信息")
liqin's avatar
liqin committed
94 95 96 97 98 99 100 101 102 103 104 105 106
    public Map<String, Object> updateAsset(@Validated(value = {Update.class}) Asset asset) {
        final List<VideoVo> filesMetadata = new ArrayList<>(asset.getVideoUrlList().size());
        final List<String> videoUrlList = asset.getVideoUrlList();
        for (String videoUrl : videoUrlList) {
            // 原始文件名
            final Set<MetaData> metaData = FastDFSUtils.getFileMetaData(videoUrl);
            String fileName = metaData.stream().filter(x -> "fileName".equals(x.getName())).map(MetaData::getValue).findFirst().get();
            Long fileSize = metaData.stream().filter(x -> "fileSize".equals(x.getName())).map(MetaData::getValue).map(Long::parseLong).findFirst().get();
            String fileExtName = metaData.stream().filter(x -> "fileExtName".equals(x.getName())).map(MetaData::getValue).findFirst().get();
            String md5 = metaData.stream().filter(x -> "MD5".equals(x.getName())).map(MetaData::getValue).findFirst().get();
            filesMetadata.add(VideoVo.builder().fileName(fileName)
                    .fileExtName(fileExtName)
                    .fileSize(fileSize).fileUrl(videoUrl).md5(md5).build());
liqin's avatar
liqin committed
107
        }
liqin's avatar
liqin committed
108
        asset.setVideoUrl(JSONObject.toJSONString(filesMetadata));
liqin's avatar
liqin committed
109
        asset.setAuditStatusAdd(AuditStatusEnum.TBC.name());
liqin's avatar
liqin committed
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
        boolean flag = assetService.updateById(asset);
        if (flag) {
            return getSuccessResult();
        }
        return getFailResult();
    }

    @PutMapping("/updateAuditStatus/{id}")
    @RequiresPermissions("asset:update:audit:status")
    @ApiOperation(value = "更新视频审核状态", notes = "更新视频审核状态")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path"),
            @ApiImplicitParam(name = "status", value = "状态", paramType = "query", dataType = "String")
    })
    public Map<String, Object> updateStatus(@NotNull(message = "视频ID不能为空") @PathVariable("id") String id, @RequestParam("status") AuditStatusEnum status) {
        UpdateWrapper<Asset> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id", id);
        updateWrapper.eq("audit_status", status.name());
        boolean flag = assetService.update(updateWrapper);
        if (flag) {
            return getSuccessResult();
        }
        return getFailResult();
    }

    @DeleteMapping("/delete/{id}")
    @RequiresPermissions("asset:delete")
    @ApiOperation(value = "根据ID删除视频", notes = "根据ID删除视频")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "id", value = "标识ID", paramType = "path", dataType = "String")
    })
    public Map<String, Object> deleteAsset(@PathVariable("id") String id) {
        boolean result = assetService.removeById(id);
        if (result) {
            return getSuccessResult();
        }
        return getFailResult();
    }

    @GetMapping("/getList")
    @RequiresPermissions("asset:list")
    @ApiOperation(value = "获取视频全部列表(无分页)", notes = "获取视频全部列表(无分页)")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "auditStatus", value = "审核状态", paramType = "query", dataType = "String")
    })
liqin's avatar
liqin committed
155
    public Map<String, Object> getAssetList(@RequestParam(value = "auditStatus", defaultValue = "APPROVED_FINAL", required = false) AuditStatusEnum auditStatus) {
liqin's avatar
liqin committed
156
        List<Asset> assetList = assetService.list(Wrappers.<Asset>lambdaQuery().eq(Asset::getAuditStatusAdd, auditStatus.name()));
liqin's avatar
liqin committed
157 158 159 160 161 162 163
        return getResult(assetList);
    }

    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "_index", value = "分页起始偏移量", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "_size", value = "返回条数", paramType = "query", dataType = "Integer"),
            @ApiImplicitParam(name = "nameOrCode", value = "名称或编码", paramType = "query", dataType = "String"),
liqin's avatar
liqin committed
164 165
            @ApiImplicitParam(name = "assetTypeId", value = "视频分类ID", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "assetCopyrightOwnerId", value = "视频版权方ID", paramType = "query", dataType = "String"),
liqin's avatar
liqin committed
166 167 168 169 170 171 172 173 174 175 176 177 178
            @ApiImplicitParam(name = "startDate", value = "创建时间-开始", paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endDate", value = "创建时间-结束", paramType = "query", dataType = "String")
    })
    @PostMapping("/getPageList")
    @RequiresPermissions("asset:page")
    @ApiOperation(value = "获取视频分页列表", notes = "获取视频分页列表")
    public Map<String, Object> getAssetPageList(GenericPageParam genericPageParam) {
        LambdaQueryWrapper<Asset> queryWrapper = new LambdaQueryWrapper<>();
        // 对名称或编码模糊查询
        if (StringUtils.isNotBlank(genericPageParam.getNameOrCode())) {
            queryWrapper.like(Asset::getName, genericPageParam.getNameOrCode());
        }
        // 对版权方模糊查询
liqin's avatar
liqin committed
179 180 181 182 183 184
        if (StringUtils.isNotBlank(genericPageParam.getAssetCopyrightOwnerId())) {
            queryWrapper.like(Asset::getAssetCopyrightOwnerId, genericPageParam.getAssetCopyrightOwnerId());
        }
        // 对版权方模糊查询
        if (StringUtils.isNotBlank(genericPageParam.getAssetTypeId())) {
            queryWrapper.like(Asset::getAssetTypeId, genericPageParam.getAssetTypeId());
liqin's avatar
liqin committed
185 186 187 188 189 190 191 192 193 194 195 196
        }
        // 根据创建时间区间检索
        if (genericPageParam.getStartDate() != null && genericPageParam.getEndDate() != null) {
            queryWrapper.ge(Asset::getCreateTime, genericPageParam.getStartDate().atTime(0, 0, 0))
                    .le(Asset::getCreateTime, genericPageParam.getEndDate().atTime(23, 59, 59));
        }
        // 设置排序规则
        queryWrapper.orderByDesc(Asset::getCreateTime);
        // 设置查询内容
        queryWrapper.select(
                Asset::getId,
                Asset::getName,
liqin's avatar
liqin committed
197 198 199
                Asset::getAuditStatusAdd,
                Asset::getAuditStatusEdit,
                Asset::getAuditStatusDelete,
liqin's avatar
liqin committed
200 201
                Asset::getAssetTypeId,
                Asset::getAssetCopyrightOwnerId,
liqin's avatar
liqin committed
202 203 204 205
                Asset::getCreateTime,
                Asset::getUpdateTime);
        Page<Asset> page = this.assetService.page(getPage(), queryWrapper);
        for (Asset asset : page.getRecords()) {
liqin's avatar
liqin committed
206 207 208 209 210 211 212 213
            if (asset.getAssetTypeId() != null) {
                AssetType assetType = this.assetTypeService.getById(asset.getAssetTypeId());
                asset.setAssetTypeName(assetType.getName());
            }
            if (asset.getAssetCopyrightOwnerId() != null) {
                CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(asset.getAssetCopyrightOwnerId());
                asset.setAssetCopyrightOwnerName(copyrightOwner.getName());
            }
liqin's avatar
liqin committed
214 215 216 217 218 219 220 221 222
        }
        return getResult(page);
    }

    @ApiOperation(value = "获取视频详情", notes = "获取视频详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path")
    })
    @GetMapping("/get/{id}")
liqin's avatar
liqin committed
223
    @RequiresPermissions("asset:get:id")
liqin's avatar
liqin committed
224 225
    public Map<String, Object> getById(@PathVariable("id") String id) {
        Asset asset = assetService.getById(id);
liqin's avatar
liqin committed
226 227 228 229 230 231 232 233
        if (asset.getAssetTypeId() != null) {
            AssetType assetType = this.assetTypeService.getById(asset.getAssetTypeId());
            asset.setAssetTypeName(assetType.getName());
        }
        if (asset.getAssetCopyrightOwnerId() != null) {
            CopyrightOwner copyrightOwner = this.copyrightOwnerService.getById(asset.getAssetCopyrightOwnerId());
            asset.setAssetCopyrightOwnerName(copyrightOwner.getName());
        }
liqin's avatar
liqin committed
234 235 236 237 238
        return getResult(asset);
    }

}