AssetController.java 10.9 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
import cn.wisenergy.chnmuseum.party.common.enums.AuditStatusEnum;
liqin's avatar
liqin committed
5 6
import cn.wisenergy.chnmuseum.party.common.enums.RESPONSE_CODE_ENUM;
import cn.wisenergy.chnmuseum.party.common.mvc.InterfaceException;
liqin's avatar
liqin committed
7
import cn.wisenergy.chnmuseum.party.common.validator.groups.Add;
liqin's avatar
liqin committed
8
import cn.wisenergy.chnmuseum.party.common.validator.groups.Update;
liqin's avatar
liqin committed
9
import cn.wisenergy.chnmuseum.party.common.vo.AssetVo;
liqin's avatar
liqin committed
10 11
import cn.wisenergy.chnmuseum.party.common.vo.GenericPageParam;
import cn.wisenergy.chnmuseum.party.model.Asset;
liqin's avatar
liqin committed
12 13
import cn.wisenergy.chnmuseum.party.model.AssetType;
import cn.wisenergy.chnmuseum.party.model.CopyrightOwner;
liqin's avatar
liqin committed
14
import cn.wisenergy.chnmuseum.party.service.AssetService;
liqin's avatar
liqin committed
15 16
import cn.wisenergy.chnmuseum.party.service.AssetTypeService;
import cn.wisenergy.chnmuseum.party.service.CopyrightOwnerService;
liqin's avatar
liqin committed
17
import cn.wisenergy.chnmuseum.party.web.controller.base.BaseController;
liqin's avatar
liqin committed
18
import com.alibaba.fastjson.JSONObject;
liqin's avatar
liqin committed
19 20 21 22 23 24 25 26 27
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;
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;
liqin's avatar
liqin committed
28
import org.apache.commons.io.FilenameUtils;
liqin's avatar
liqin committed
29 30
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
liqin's avatar
liqin committed
31
import org.springframework.http.MediaType;
liqin's avatar
liqin committed
32 33
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
liqin's avatar
liqin committed
34
import org.springframework.web.multipart.MultipartFile;
liqin's avatar
liqin committed
35 36 37

import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
liqin's avatar
liqin committed
38
import java.io.IOException;
liqin's avatar
liqin committed
39
import java.util.ArrayList;
liqin's avatar
liqin committed
40
import java.util.LinkedHashMap;
liqin's avatar
liqin committed
41 42 43 44 45 46 47 48 49 50 51 52 53
import java.util.List;
import java.util.Map;

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

    @Resource
    private AssetService assetService;

liqin's avatar
liqin committed
61 62 63 64 65
    @Resource
    private CopyrightOwnerService copyrightOwnerService;

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

liqin's avatar
liqin committed
67 68 69 70 71 72
    @ApiImplicitParams({
            //@ApiImplicitParam(name = "files", value = "视频文件", paramType = "form", dataType = "__file", collectionFormat="array", allowMultiple = true)
    })
    @PostMapping(value = "/save",
            headers = "content-type=multipart/form-data",
            consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
liqin's avatar
liqin committed
73 74
    @RequiresPermissions("asset:save")
    @ApiOperation(value = "添加视频", notes = "添加视频")
liqin's avatar
liqin committed
75
    public Map<String, Object> saveAsset(@Validated(value = {Add.class}) Asset asset, @RequestPart(value = "files", required = false) MultipartFile[] files) throws IOException {
liqin's avatar
liqin committed
76 77 78
        if (files.length == 0) {
            throw new InterfaceException(RESPONSE_CODE_ENUM.REQUEST_PARAMS_ERROR.getCode(), "视频必须上传");
        }
liqin's avatar
liqin committed
79
        final List<AssetVo> filesMetadata = new ArrayList<>(2);
liqin's avatar
liqin committed
80 81 82 83
        for (MultipartFile file : files) {
            // 原始文件名
            String originalFilename = file.getOriginalFilename();
            String url = FastDFSUtils.uploadInputStream(file.getInputStream(), originalFilename, file.getSize());
liqin's avatar
liqin committed
84 85
            filesMetadata.add(AssetVo.builder().fileName(originalFilename).fileExt(FilenameUtils.getExtension(originalFilename))
                    .fileSize(file.getSize()).fileUrl(url).build());
liqin's avatar
liqin committed
86
        }
liqin's avatar
liqin committed
87
        asset.setVideoUrl(JSONObject.toJSONString(filesMetadata));
liqin's avatar
liqin committed
88
        asset.setAuditStatus(AuditStatusEnum.TBC.name());
liqin's avatar
liqin committed
89 90 91 92 93 94 95 96 97 98 99 100 101 102
        // 保存业务节点信息
        boolean result = assetService.save(asset);
        // 返回操作结果
        if (result) {
            return getSuccessResult();
        } else {
            // 保存失败
            return getFailResult();
        }
    }

    @PutMapping("/update")
    @RequiresPermissions("asset:update")
    @ApiOperation(value = "修改视频信息", notes = "修改视频信息")
liqin's avatar
liqin committed
103 104 105 106 107 108 109 110 111 112 113 114
    public Map<String, Object> updateAsset(@Validated(value = {Update.class}) Asset asset, @RequestParam(value = "files") MultipartFile[] files) throws IOException {
        if (files.length > 0) {
            final Map<String, String> filesMetadata = new LinkedHashMap<>(2);
            for (MultipartFile file : files) {
                // 上传简单文件名
                String originalFilename = file.getOriginalFilename();
                String url = FastDFSUtils.uploadInputStream(file.getInputStream(), originalFilename, file.getSize());
                filesMetadata.put(originalFilename.trim(), url);
            }
            asset.setAuditStatus(AuditStatusEnum.TBC.name());
        }
        asset.setAuditStatus(AuditStatusEnum.TBC.name());
liqin's avatar
liqin committed
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 155 156 157 158 159
        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
160
    public Map<String, Object> getAssetList(@RequestParam(value = "auditStatus", defaultValue = "APPROVED_FIRST", required = false) AuditStatusEnum auditStatus) {
liqin's avatar
liqin committed
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201
        List<Asset> assetList = assetService.list(Wrappers.<Asset>lambdaQuery().eq(Asset::getAuditStatus, auditStatus.name()));
        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"),
            @ApiImplicitParam(name = "copyrightOwner", value = "版权方", paramType = "query", dataType = "String"),
            @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());
        }
        // 对版权方模糊查询
        if (StringUtils.isNotBlank(genericPageParam.getCopyrightOwnerId())) {
            queryWrapper.like(Asset::getAssetCopyrightOwnerId, genericPageParam.getCopyrightOwnerId());
        }
        // 根据创建时间区间检索
        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,
                Asset::getAuditStatus,
                Asset::getCreateTime,
                Asset::getUpdateTime);
        Page<Asset> page = this.assetService.page(getPage(), queryWrapper);
        for (Asset asset : page.getRecords()) {
liqin's avatar
liqin committed
202 203 204 205 206 207 208 209
            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
210 211 212 213 214 215 216 217 218
        }
        return getResult(page);
    }

    @ApiOperation(value = "获取视频详情", notes = "获取视频详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "标识ID", dataType = "String", paramType = "path")
    })
    @GetMapping("/get/{id}")
liqin's avatar
liqin committed
219
    @RequiresPermissions("asset:get:id")
liqin's avatar
liqin committed
220 221
    public Map<String, Object> getById(@PathVariable("id") String id) {
        Asset asset = assetService.getById(id);
liqin's avatar
liqin committed
222 223 224 225 226 227 228 229
        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
230 231 232 233 234
        return getResult(asset);
    }

}