Commit f7d53dcb authored by liqin's avatar liqin 💬

bug fixed

parent 13a3dcb0
package cn.chnmuseum.party.model;
import cn.chnmuseum.party.common.validator.groups.Add;
import cn.chnmuseum.party.common.validator.groups.Update;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* <p>
* 文件资产临时
* </p>
*
* @author Danny Lee
* @since 2021-04-18
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("asset_tmp")
@ApiModel(value = "文件资产临时", description = "文件资产临时")
public class AssetTmp implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("文件资产ID")
@TableId(value = "id", type = IdType.ASSIGN_ID)
@NotNull(message = "文件资产ID不能为空", groups = {Add.class, Update.class})
private String id;
@ApiModelProperty("所属项ID")
@TableField("ref_item_id")
private String refItemId;
@ApiModelProperty("原始文件名")
@TableField("file_name")
private String fileName;
@ApiModelProperty("加密后文件名")
@TableField("file_name_crypto")
private String fileNameCrypto;
@ApiModelProperty("扩展名")
@TableField("file_ext_name")
private String fileExtName;
@ApiModelProperty("文件类型")
@TableField("file_type")
private String fileType;
@ApiModelProperty("文件分类")
@TableField("file_cat")
private String fileCat;
@ApiModelProperty("文件大小(B)")
@TableField("file_size")
private Long fileSize;
@ApiModelProperty("下载链接")
@TableField("file_url")
private String fileUrl;
@ApiModelProperty("加密链接")
@TableField("file_url_crypto")
private String fileUrlCrypto;
@ApiModelProperty("视频缩略图")
@TableField("thumbnail")
private String thumbnail;
@ApiModelProperty("语言")
@TableField("language")
private String language;
@ApiModelProperty("MD5")
@TableField("md5")
private String md5;
@TableField("crc32")
private Long crc32;
@TableField("video_content_name")
private String videoContentName;
@ApiModelProperty("创建日期")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
@ApiModelProperty("修改日期")
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}
......@@ -158,18 +158,10 @@ public class ExhibitionBoard implements Serializable {
@TableField(exist = false)
private List<Asset> audioList;
@ApiModelProperty("展板视频(审核详情使用)")
@TableField(exist = false)
private List<AssetTmp> audioTmpList;
@ApiModelProperty("参考资料列表")
@TableField(exist = false)
private List<Asset> datumList;
@ApiModelProperty("参考资料列表(审核详情使用)")
@TableField(exist = false)
private List<AssetTmp> datumTmpList;
@ApiModelProperty("审核意见记录")
@TableField(exist = false)
private List<Audit> auditHistoryList;
......
package cn.chnmuseum.party.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
* 展板临时
* </p>
*
* @author Danny Lee
* @since 2021-04-17
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("exhibition_board_tmp")
public class ExhibitionBoardTmp implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(hidden = true)
@TableId(value = "id", type = IdType.INPUT)
private String id;
@ApiModelProperty(hidden = true)
@TableField("data")
private String data;
}
package cn.chnmuseum.party.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
* 学习内容临时
* </p>
*
* @author Danny Lee
* @since 2021-04-17
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("learning_content_tmp")
public class LearningContentTmp implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(hidden = true)
@TableId(value = "id", type = IdType.INPUT)
private String id;
@ApiModelProperty(hidden = true)
@TableField("data")
private String data;
}
package cn.chnmuseum.party.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
* 视频内容临时
* </p>
*
* @author Danny Lee
* @since 2021-04-17
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@TableName("video_content_tmp")
public class VideoContentTmp implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(hidden = true)
@TableId(value = "id", type = IdType.INPUT)
private String id;
@ApiModelProperty(hidden = true)
@TableField("data")
private String data;
}
......@@ -10,6 +10,7 @@ import cn.chnmuseum.party.common.vo.GenericPageParam;
import cn.chnmuseum.party.model.*;
import cn.chnmuseum.party.service.*;
import cn.chnmuseum.party.web.controller.base.BaseController;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -120,66 +121,22 @@ public class ExhibitionBoardController extends BaseController {
@ApiOperation(value = "修改展板信息", notes = "修改展板信息")
@MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.UPDATE)
public Map<String, Object> updateExhibitionBoard(@Validated(value = {Update.class}) ExhibitionBoard exhibitionBoard) {
final LambdaQueryWrapper<ExhibitionBoard> lambdaQueryWrapper = Wrappers.<ExhibitionBoard>lambdaQuery().eq(ExhibitionBoard::getName, exhibitionBoard.getName().trim());
lambdaQueryWrapper.ne(ExhibitionBoard::getId, exhibitionBoard.getId());
final int count = this.exhibitionBoardService.count(lambdaQueryWrapper);
if (count > 0) {
return getFailResult("400", "名称已存在,请修改名称");
}
final ExhibitionBoard one = this.exhibitionBoardService.getById(exhibitionBoard.getId());
one.setAuditStatus(AuditStatusEnum.TBC.name());
this.exhibitionBoardService.updateById(one);
TUser user = getcurUser();
final VideoContent videoContent = this.videoContentService.getById(exhibitionBoard.getVideoContentId());
exhibitionBoard.setVideoContentName(videoContent.getName());
exhibitionBoard.setAuditStatus(AuditStatusEnum.TBC.name());
boolean flag = exhibitionBoardService.updateById(exhibitionBoard);
if (flag) {
final List<String> audioIdList = exhibitionBoard.getAudioIdList();
if (audioIdList != null && !audioIdList.isEmpty()) {
final LambdaQueryWrapper<Asset> assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId());
assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_AUDIO.name());
final List<Asset> assetList = this.assetService.list(assetQueryWrapper);
final Map<String, String> collect = assetList.stream().collect(Collectors.toMap(Asset::getId, Asset::getFileUrl));
for (String audioId : audioIdList) {
final Asset asset = this.assetService.getById(audioId);
asset.setFileType(FileTypeEnum.AUDIO.name());
asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_AUDIO.name());
asset.setRefItemId(exhibitionBoard.getId());
this.assetService.updateById(asset);
collect.remove(audioId);
}
collect.forEach((k, v) -> this.assetService.removeById(k));
}
final List<String> datumIdList = exhibitionBoard.getDatumIdList();
if (datumIdList != null && !datumIdList.isEmpty()) {
final LambdaQueryWrapper<Asset> assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId());
assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_DATUM.name());
final List<Asset> assetList = this.assetService.list(assetQueryWrapper);
final Map<String, String> collect = assetList.stream().collect(Collectors.toMap(Asset::getId, Asset::getFileUrl));
for (String datumId : datumIdList) {
final Asset asset = this.assetService.getById(datumId);
asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_DATUM.name());
asset.setRefItemId(exhibitionBoard.getId());
this.assetService.updateById(asset);
collect.remove(datumId);
}
collect.forEach((k, v) -> this.assetService.removeById(k));
}
final Audit audit = Audit.builder()
.content(exhibitionBoard.getName())
.name(exhibitionBoard.getName())
.refItemId(exhibitionBoard.getId())
.userId(user.getId())
.type(AuditTypeEnum.EXHIBITION_BOARD.name())
.operation(AuditOperationEnum.EDIT.name())
.status(AuditStatusEnum.TBC.name())
.level(AuditStatusEnum.TBC.name())
.build();
this.auditService.save(audit);
return getSuccessResult();
}
return getFailResult();
final Audit audit = Audit.builder()
.content(exhibitionBoard.getName())
.refItemId(exhibitionBoard.getId())
.userId(getcurUser().getId())
.type(AuditTypeEnum.EXHIBITION_BOARD.name())
.operation(AuditOperationEnum.EDIT.name())
.status(AuditStatusEnum.TBC.name())
.level(AuditStatusEnum.TBC.name())
.modelData(JSONObject.toJSONString(exhibitionBoard))
.build();
this.auditService.save(audit);
return getSuccessResult();
}
@PostMapping("/getList")
......@@ -362,7 +319,60 @@ public class ExhibitionBoardController extends BaseController {
exhibitionBoard.setDatumList(datumList);
exhibitionBoard.setDatumIdList(datumList.stream().map(Asset::getId).collect(Collectors.toList()));
final LambdaQueryWrapper<Audit> auditQueryWrapper = Wrappers.<Audit>lambdaQuery().eq(Audit::getRefItemId, id);
final String videoContentId = exhibitionBoard.getVideoContentId();
if (videoContentId != null) {
final VideoContent videoContent = this.videoContentService.getById(videoContentId);
exhibitionBoard.setVideoContentName(videoContent.getName());
assetQueryWrapper.clear();
assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId);
assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.VIDEO_CONTENT.name());
final List<Asset> videoList = this.assetService.list(assetQueryWrapper);
exhibitionBoard.setVideoList(videoList);
}
return getResult(exhibitionBoard);
}
@ApiOperation(value = "获取展板详情(审核详情使用)", notes = "获取展板详情(审核详情使用)")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "审核ID", dataType = "String", paramType = "path", required = true)
})
@GetMapping("/getAudit/{id}")
@RequiresAuthentication //@RequiresPermissions("video:content:get:id")
@MethodLog(operModule = OperModule.DISPLAYCONTENT, operType = OperType.SELECT)
public Map<String, Object> getAuditInfoById(@PathVariable("auditId") String auditId) {
final ExhibitionBoard exhibitionBoard = JSONObject.parseObject(this.auditService.getById(auditId).getModelData(), ExhibitionBoard.class);
String exhibitionBoardCatId = exhibitionBoard.getExhibitionBoardCatId();
if (exhibitionBoardCatId != null) {
exhibitionBoard.setExhibitionBoardCatName(this.exhibitionBoardCatService.getById(exhibitionBoardCatId).getName());
}
String boardCopyrightOwnerId = exhibitionBoard.getBoardCopyrightOwnerId();
if (boardCopyrightOwnerId != null) {
exhibitionBoard.setBoardCopyrightOwnerName(this.copyrightOwnerService.getById(boardCopyrightOwnerId).getName());
}
if (exhibitionBoard.getVideoContentCopyrightOwnerId() != null) {
String name = this.copyrightOwnerService.getById(exhibitionBoard.getVideoContentCopyrightOwnerId()).getName();
exhibitionBoard.setVideoContentCopyrightOwnerName(name);
}
LambdaQueryWrapper<Asset> assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId());
assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_AUDIO.name());
final List<Asset> audioList = this.assetService.list(assetQueryWrapper);
if (audioList != null && !audioList.isEmpty()) {
exhibitionBoard.setAudioList(audioList);
exhibitionBoard.setAudioIdList(audioList.stream().map(Asset::getId).collect(Collectors.toList()));
}
assetQueryWrapper.clear();
assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, exhibitionBoard.getId());
assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.EXHIBITION_BOARD_DATUM.name());
final List<Asset> datumList = this.assetService.list(assetQueryWrapper);
if (datumList != null && !datumList.isEmpty()) {
exhibitionBoard.setDatumList(datumList);
exhibitionBoard.setDatumIdList(datumList.stream().map(Asset::getId).collect(Collectors.toList()));
}
final LambdaQueryWrapper<Audit> auditQueryWrapper = Wrappers.<Audit>lambdaQuery().eq(Audit::getRefItemId, exhibitionBoard.getId());
auditQueryWrapper.select(Audit::getContent);
auditQueryWrapper.select(Audit::getType);
auditQueryWrapper.select(Audit::getOperation);
......@@ -378,12 +388,14 @@ public class ExhibitionBoardController extends BaseController {
final String videoContentId = exhibitionBoard.getVideoContentId();
if (videoContentId != null) {
final VideoContent videoContent = this.videoContentService.getById(videoContentId);
exhibitionBoard.setVideoContentName(videoContent.getName());
assetQueryWrapper.clear();
assetQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId);
assetQueryWrapper.eq(Asset::getFileCat, FileCatEnum.VIDEO_CONTENT.name());
final List<Asset> videoList = this.assetService.list(assetQueryWrapper);
if (videoContent != null) {
exhibitionBoard.setVideoContentName(videoContent.getName());
} else {
exhibitionBoard.setVideoContentName("相关视频内容已被删除");
}
final LambdaQueryWrapper<Asset> lambdaQueryWrapper = Wrappers.<Asset>lambdaQuery().eq(Asset::getRefItemId, videoContentId);
lambdaQueryWrapper.eq(Asset::getFileCat, FileCatEnum.VIDEO_CONTENT.name());
final List<Asset> videoList = this.assetService.list(lambdaQueryWrapper);
exhibitionBoard.setVideoList(videoList);
}
return getResult(exhibitionBoard);
......
......@@ -11,7 +11,6 @@ import cn.chnmuseum.party.common.video.VideoEncryptUtil;
import cn.chnmuseum.party.common.vo.BatchUploadResVO;
import cn.chnmuseum.party.common.vo.ImageUploadResult;
import cn.chnmuseum.party.model.Asset;
import cn.chnmuseum.party.model.AssetTmp;
import cn.chnmuseum.party.service.AssetService;
import cn.chnmuseum.party.service.AssetTmpService;
import cn.chnmuseum.party.web.controller.base.BaseController;
......@@ -250,149 +249,6 @@ public class FileUploadController extends BaseController {
return getResult(batchUploadResVO);
}
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "资料", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true)
})
@PostMapping(value = "/datum/edit/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ApiOperation(value = "展板资料上传(修改时使用)", notes = "展板资料上传(修改时使用)")
public Map<String, Object> uploadDatumByEdit(@RequestPart(value = "file", required = false) MultipartFile[] files) throws IOException {
if (files == null || files.length == 0) {
return getFailResult("没有文件可供上传");
}
int successCount = 0;
int failureCount = 0;
List<BatchUploadResVO.HandleResult> handleList = new ArrayList<>();
Set<AssetTmp> datumUrlList = new LinkedHashSet<>();
for (MultipartFile file : files) {
// 当前维度表下线结果
BatchUploadResVO.HandleResult handleResult = new BatchUploadResVO.HandleResult();
// 原始文件名
String originalFilename = file.getOriginalFilename();
if (StringUtils.isBlank(originalFilename)) {
handleResult.setFileName("");
handleResult.setFileUrl("");
handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
handleResult.setDescription("文件名为空");
failureCount++;
handleList.add(handleResult);
continue;
}
if (file.getSize() == 0L) {
handleResult.setFileName("");
handleResult.setFileUrl("");
handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
handleResult.setDescription("文件" + originalFilename + "大小为0");
failureCount++;
handleList.add(handleResult);
continue;
}
String extName = FilenameUtils.getExtension(originalFilename);
String finalExtName = extName;
boolean anyMatch = Arrays.stream(DATUM_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()));
if (anyMatch) {
if ("MPEG".equals(extName.toUpperCase()) || "MOV".equals(extName.toUpperCase())) {
extName = "mp4";
originalFilename = FilenameUtils.getBaseName(originalFilename) + "." + extName;
}
final AssetTmp asset = AssetTmp.builder()
.fileName(originalFilename)
.fileExtName(extName)
.fileCat(FileCatEnum.EXHIBITION_BOARD_DATUM.name())
.build();
String fileUrl = null;
final Set<MetaData> metaDataSet = new HashSet<>();
metaDataSet.add(new MetaData("fileName", originalFilename));
if (Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
metaDataSet.add(new MetaData("fileType", FileTypeEnum.VIDEO.name()));
handleResult.setFileType(FileTypeEnum.VIDEO.name());
asset.setFileType(FileTypeEnum.VIDEO.name());
fileUrl = FastDFSUtils.uploadVideo(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
final Set<MetaData> fileMetaData = FastDFSUtils.getFileMetaData(fileUrl);
String md5 = fileMetaData.stream().filter(x -> "MD5".equals(x.getName())).map(MetaData::getValue).findFirst().get();
asset.setMd5(md5);
} else if (Arrays.stream(AUDIO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
metaDataSet.add(new MetaData("fileType", FileTypeEnum.AUDIO.name()));
handleResult.setFileType(FileTypeEnum.AUDIO.name());
asset.setFileType(FileTypeEnum.AUDIO.name());
fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
} else if (Arrays.stream(IMAGE_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
metaDataSet.add(new MetaData("fileType", FileTypeEnum.IMAGE.name()));
handleResult.setFileType(FileTypeEnum.IMAGE.name());
asset.setFileType(FileTypeEnum.IMAGE.name());
fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
asset.setThumbnail(fileUrl);
} else if (Arrays.stream(DOC_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()))) {
metaDataSet.add(new MetaData("fileType", FileTypeEnum.DOCUMENT.name()));
handleResult.setFileType(FileTypeEnum.DOCUMENT.name());
asset.setFileType(FileTypeEnum.DOCUMENT.name());
fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
}
String language = null;
if (originalFilename.contains("汉语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.ZH.name()));
language = LanguageEnum.ZH.name();
} else if (originalFilename.contains("英语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.EN.name()));
language = LanguageEnum.EN.name();
} else if (originalFilename.contains("蒙语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.MN.name()));
language = LanguageEnum.MN.name();
} else if (originalFilename.contains("藏语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.BO.name()));
language = LanguageEnum.BO.name();
} else if (originalFilename.contains("维吾尔语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.UYG.name()));
language = LanguageEnum.UYG.name();
}
final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
final int crc32 = fileInfo.getCrc32();
final Asset one = this.assetService.getOne(Wrappers.<Asset>lambdaQuery().eq(Asset::getCrc32, (long) crc32).last(" limit 1"));
final LocalDateTime createTime = TimeUtils.getDateTimeOfTimestamp(fileInfo.getCreateTime() * 1000);
asset.setFileSize(fileInfo.getFileSize());
asset.setFileUrl(fileUrl);
asset.setFileCat(FileCatEnum.EXHIBITION_BOARD_DATUM.name());
asset.setLanguage(language);
asset.setCrc32((long) crc32);
asset.setCreateTime(createTime);
asset.setUpdateTime(createTime);
if (one != null) {
FastDFSUtils.deleteFile(fileUrl);
asset.setFileUrl(one.getFileUrl());
}
this.assetTmpService.save(asset);
datumUrlList.add(asset);
handleResult.setFileUrl(fileUrl);
handleResult.setFileName(originalFilename);
handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
handleResult.setDescription("");
successCount++;
} else {
handleResult.setFileUrl("");
handleResult.setDescription("文件" + originalFilename + "格式不支持");
failureCount++;
}
// 设置处理的业务表信息
handleList.add(handleResult);
}
BatchUploadResVO batchUploadResVO = new BatchUploadResVO();
batchUploadResVO.setFailureCount(failureCount);
batchUploadResVO.setSuccessCount(successCount);
batchUploadResVO.setTotal(files.length);
batchUploadResVO.setHandleList(handleList);
batchUploadResVO.setFileTmpList(datumUrlList);
if (failureCount > 0) {
return getFailResult(batchUploadResVO);
}
return getResult(batchUploadResVO);
}
@PostMapping(value = "/image/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@RequiresAuthentication //@RequiresPermissions("file:image:upload")
@ApiOperation(value = "单图片上传(封面/缩略图)", notes = "单图片上传(封面/缩略图)")
......@@ -567,128 +423,6 @@ public class FileUploadController extends BaseController {
return getResult(batchUploadResVO);
}
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "音频文件", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true)
})
@PostMapping(value = "/audio/edit/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@RequiresAuthentication //@RequiresPermissions("audio:upload")
@ApiOperation(value = "展板多音频上传(修改时使用)", notes = "展板多音频上传(修改时使用)")
public Map<String, Object> uploadAudioByEdit(@RequestPart(value = "file", required = false) MultipartFile[] files) throws IOException {
if (files == null || files.length == 0) {
return getFailResult("没有文件可供上传");
}
final boolean existChineseAudio = Arrays.stream(files).anyMatch(s -> Objects.requireNonNull(s.getOriginalFilename()).contains("汉语"));
if (!existChineseAudio) {
return getFailResult("必须包含汉语音频");
}
if (files.length > 5) {
return getFailResult("一种语言只能对应一个文件,只能上传包含5种语言的音频");
}
int successCount = 0;
int failureCount = 0;
List<BatchUploadResVO.HandleResult> handleList = new ArrayList<>();
Set<AssetTmp> fileList = new LinkedHashSet<>();
for (MultipartFile file : files) {
// 当前维度表下线结果
BatchUploadResVO.HandleResult handleResult = new BatchUploadResVO.HandleResult();
// 原始文件名
String originalFilename = file.getOriginalFilename();
if (StringUtils.isBlank(originalFilename)) {
handleResult.setFileName("");
handleResult.setFileType(FileTypeEnum.AUDIO.getName());
handleResult.setFileUrl("");
handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
handleResult.setDescription("文件名为空");
failureCount++;
handleList.add(handleResult);
continue;
}
if (file.getSize() == 0L) {
handleResult.setFileName("");
handleResult.setFileUrl("");
handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
handleResult.setDescription("文件" + originalFilename + "大小为0");
failureCount++;
handleList.add(handleResult);
continue;
}
String extName = FilenameUtils.getExtension(originalFilename);
boolean anyMatch = Arrays.stream(AUDIO_TYPE).anyMatch(s -> Objects.equals(s, extName.toUpperCase()));
if (anyMatch) {
String language = null;
final Set<MetaData> metaDataSet = new HashSet<>();
metaDataSet.add(new MetaData("fileName", originalFilename));
metaDataSet.add(new MetaData("fileType", FileTypeEnum.AUDIO.name()));
if (originalFilename.contains("汉语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.ZH.name()));
language = LanguageEnum.ZH.name();
} else if (originalFilename.contains("英语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.EN.name()));
language = LanguageEnum.EN.name();
} else if (originalFilename.contains("蒙语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.MN.name()));
language = LanguageEnum.MN.name();
} else if (originalFilename.contains("藏语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.BO.name()));
language = LanguageEnum.BO.name();
} else if (originalFilename.contains("维吾尔语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.UYG.name()));
language = LanguageEnum.UYG.name();
}
String fileUrl = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename, metaDataSet);
final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
final int crc32 = fileInfo.getCrc32();
final Asset one = this.assetService.getOne(Wrappers.<Asset>lambdaQuery().eq(Asset::getCrc32, (long) crc32).last(" limit 1"));
final LocalDateTime createTime = TimeUtils.getDateTimeOfTimestamp(fileInfo.getCreateTime() * 1000);
final long fileSize = fileInfo.getFileSize();
final AssetTmp asset = AssetTmp.builder()
.fileName(originalFilename)
.fileExtName(extName)
.fileType(FileTypeEnum.AUDIO.name())
.fileUrl(fileUrl)
.fileSize(fileSize)
.fileCat(FileCatEnum.EXHIBITION_BOARD_AUDIO.name())
.language(language)
.crc32((long) crc32)
.createTime(createTime)
.updateTime(createTime)
.build();
if (one != null) {
FastDFSUtils.deleteFile(fileUrl);
asset.setFileUrl(one.getFileUrl());
}
this.assetTmpService.save(asset);
fileList.add(asset);
handleResult.setFileUrl(fileUrl);
handleResult.setFileName(originalFilename);
handleResult.setFileType(FileTypeEnum.AUDIO.getName());
handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
handleResult.setDescription("");
successCount++;
} else {
handleResult.setFileUrl("");
handleResult.setFileType(FileTypeEnum.AUDIO.getName());
handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
handleResult.setDescription("文件" + originalFilename + "格式不支持");
failureCount++;
}
// 设置处理的业务表信息
handleList.add(handleResult);
}
BatchUploadResVO batchUploadResVO = new BatchUploadResVO();
batchUploadResVO.setFailureCount(failureCount);
batchUploadResVO.setSuccessCount(successCount);
batchUploadResVO.setTotal(files.length);
batchUploadResVO.setHandleList(handleList);
batchUploadResVO.setFileTmpList(fileList);
return getResult(batchUploadResVO);
}
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "视频文件", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true, required = true)
})
......@@ -873,193 +607,6 @@ public class FileUploadController extends BaseController {
return getResult(batchUploadResVO);
}
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "视频文件", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true, required = true)
})
@PostMapping(value = "/video/edit/upload", headers = "content-type=multipart/form-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@RequiresAuthentication //@RequiresPermissions("file:video:content:upload")
@ApiOperation(value = "展板视频上传(修改时使用)", notes = "展板视频上传(修改时使用)")
public Map<String, Object> uploadContentVideoByEdit(@RequestPart("file") MultipartFile[] files) throws Exception {
if (files == null || files.length == 0) {
return getFailResult("没有文件可供上传");
}
if (files.length == 1) {
String extName = FilenameUtils.getExtension(files[0].getOriginalFilename());
boolean anyMatch = Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, extName.toUpperCase()));
if (!anyMatch) {
return getFailResult("目前仅支持" + String.join("、", VIDEO_TYPE) + "格式");
}
}
final boolean matchChinese = Arrays.stream(files).anyMatch(s -> Objects.requireNonNull(s.getOriginalFilename()).contains("汉语"));
if (!matchChinese) {
return getFailResult("文件必须包含汉语视频");
}
String videoContentName = null;
String text;
LCSUtil strie = null;
final String[] fileBaseNameArray = Arrays.stream(files).map(x -> FilenameUtils.getBaseName(x.getOriginalFilename())).toArray(String[]::new);
switch (fileBaseNameArray.length) {
case 1:
videoContentName = fileBaseNameArray[0];
break;
case 2:
text = fileBaseNameArray[0] + SPLITTER_CHAR_2[0] + fileBaseNameArray[1] + SPLITTER_CHAR_2[1];
strie = new LCSUtil(text, SPLITTER_CHAR_2);
break;
case 3:
text = fileBaseNameArray[0] + SPLITTER_CHAR_3[0] + fileBaseNameArray[1] + SPLITTER_CHAR_3[1] + fileBaseNameArray[2] + SPLITTER_CHAR_3[2];
strie = new LCSUtil(text, SPLITTER_CHAR_3);
break;
case 4:
text = fileBaseNameArray[0] + SPLITTER_CHAR_4[0] + fileBaseNameArray[1] + SPLITTER_CHAR_4[1] + fileBaseNameArray[2] + SPLITTER_CHAR_4[2] + fileBaseNameArray[3] + SPLITTER_CHAR_4[3];
strie = new LCSUtil(text, SPLITTER_CHAR_4);
break;
case 5:
text = fileBaseNameArray[0] + SPLITTER_CHAR_5[0] + fileBaseNameArray[1] + SPLITTER_CHAR_5[1] + fileBaseNameArray[2] + SPLITTER_CHAR_5[2] + fileBaseNameArray[3] + SPLITTER_CHAR_5[3] + fileBaseNameArray[4] + SPLITTER_CHAR_5[4];
strie = new LCSUtil(text, SPLITTER_CHAR_5);
break;
default:
break;
}
if (strie != null) {
strie.buildSuffixTree();
videoContentName = strie.findLCS();
if (StringUtils.isBlank(videoContentName)) {
return getFailResult("请修改你的文件名并保持前缀一致后再上传");
} else {
videoContentName = StringUtils.removeEnd(videoContentName.trim(), "{");
videoContentName = StringUtils.removeEnd(videoContentName.trim(), "[");
videoContentName = StringUtils.removeEnd(videoContentName.trim(), "【");
videoContentName = StringUtils.removeEnd(videoContentName.trim(), "(");
videoContentName = StringUtils.removeEnd(videoContentName.trim(), "(");
videoContentName = StringUtils.removeEnd(videoContentName.trim(), "-");
videoContentName = StringUtils.removeEnd(videoContentName.trim(), "_");
videoContentName = StringUtils.removeEnd(videoContentName.trim(), "之");
}
}
int successCount = 0;
int failureCount = 0;
List<BatchUploadResVO.HandleResult> handleList = new ArrayList<>();
Set<AssetTmp> fileList = new LinkedHashSet<>();
for (MultipartFile file : files) {
// 当前维度表下线结果
BatchUploadResVO.HandleResult handleResult = new BatchUploadResVO.HandleResult();
// 原始文件名
String originalFilename = file.getOriginalFilename();
if (StringUtils.isBlank(originalFilename)) {
handleResult.setFileName("");
handleResult.setFileType(FileTypeEnum.VIDEO.getName());
handleResult.setFileUrl("");
handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
handleResult.setDescription("文件名为空");
failureCount++;
handleList.add(handleResult);
continue;
}
if (file.getSize() == 0L) {
handleResult.setFileName("");
handleResult.setFileUrl("");
handleResult.setHandleResult(HANDLE_STATUS_ENUM.FAILURE.getName());
handleResult.setDescription("文件" + originalFilename + "大小为0");
failureCount++;
handleList.add(handleResult);
continue;
}
final String baseName = FilenameUtils.getBaseName(originalFilename);
String extName = FilenameUtils.getExtension(originalFilename);
String finalExtName = extName;
boolean anyMatch = Arrays.stream(VIDEO_TYPE).anyMatch(s -> Objects.equals(s, finalExtName.toUpperCase()));
if (anyMatch) {
if ("MPEG".equals(extName.toUpperCase()) || "MOV".equals(extName.toUpperCase())) {
extName = "mp4";
originalFilename = baseName + "." + extName;
}
String language = null;
final Set<MetaData> metaDataSet = new HashSet<>();
metaDataSet.add(new MetaData("fileName", originalFilename));
metaDataSet.add(new MetaData("fileType", FileTypeEnum.VIDEO.name()));
if (originalFilename.contains("汉语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.ZH.name()));
language = LanguageEnum.ZH.name();
} else if (originalFilename.contains("英语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.EN.name()));
language = LanguageEnum.EN.name();
} else if (originalFilename.contains("蒙语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.MN.name()));
language = LanguageEnum.MN.name();
} else if (originalFilename.contains("藏语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.BO.name()));
language = LanguageEnum.BO.name();
} else if (originalFilename.contains("维吾尔语")) {
metaDataSet.add(new MetaData("language", LanguageEnum.UYG.name()));
language = LanguageEnum.UYG.name();
}
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
IOUtils.copy(file.getInputStream(), byteArrayOutputStream);
final String fileUrl = FastDFSUtils.uploadVideo(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), file.getSize(), originalFilename, metaDataSet);
metaDataSet.add(new MetaData("fileName", baseName + ".chnmuseum"));
final String fileUrlCrypto = FastDFSUtils.uploadVideo(VideoEncryptUtil.encrypt(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()), VideoEncryptUtil.cipher), file.getSize(), baseName + ".chnmuseum", metaDataSet);
final Set<MetaData> fileMetaData = FastDFSUtils.getFileMetaData(fileUrlCrypto);
String md5 = fileMetaData.stream().filter(x -> "MD5".equals(x.getName())).map(MetaData::getValue).findFirst().get();
final FileInfo fileInfo = FastDFSUtils.getFileInfo(fileUrl);
final int crc32 = fileInfo.getCrc32();
final Asset one = this.assetService.getOne(Wrappers.<Asset>lambdaQuery().eq(Asset::getCrc32, (long) crc32).last(" limit 1"));
final LocalDateTime createTime = TimeUtils.getDateTimeOfTimestamp(fileInfo.getCreateTime() * 1000);
final long fileSize = fileInfo.getFileSize();
final AssetTmp asset = AssetTmp.builder()
.fileName(originalFilename)
.fileNameCrypto(baseName + ".chnmuseum")
.fileExtName(extName)
.fileType(FileTypeEnum.VIDEO.name())
.fileSize(fileSize)
.fileUrl(fileUrl)
.fileUrlCrypto(fileUrlCrypto)
.fileCat(FileCatEnum.VIDEO_CONTENT.name())
.language(language)
.md5(md5)
.crc32((long) crc32)
.videoContentName(videoContentName)
.createTime(createTime)
.updateTime(createTime)
.build();
if (one != null) {
FastDFSUtils.deleteFile(fileUrl);
FastDFSUtils.deleteFile(fileUrlCrypto);
asset.setFileUrl(one.getFileUrl());
asset.setFileUrlCrypto(one.getFileUrl());
}
this.assetTmpService.save(asset);
fileList.add(asset);
handleResult.setFileUrl(fileUrl);
handleResult.setFileName(originalFilename);
handleResult.setFileType(FileTypeEnum.VIDEO.getName());
handleResult.setHandleResult(HANDLE_STATUS_ENUM.SUCCESS.getName());
handleResult.setDescription("");
successCount++;
} else {
handleResult.setFileUrl("");
handleResult.setHandleResult("上传失败");
handleResult.setDescription("文件" + originalFilename + "格式不支持");
failureCount++;
}
// 设置处理的业务表信息
handleList.add(handleResult);
}
BatchUploadResVO batchUploadResVO = new BatchUploadResVO();
batchUploadResVO.setFailureCount(failureCount);
batchUploadResVO.setSuccessCount(successCount);
batchUploadResVO.setTotal(files.length);
batchUploadResVO.setHandleList(handleList);
batchUploadResVO.setFileTmpList(fileList);
return getResult(batchUploadResVO);
}
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "视频文件", paramType = "form", dataType = "__file", collectionFormat = "array", allowMultiple = true, required = true)
})
......
......@@ -15,7 +15,6 @@ import cn.chnmuseum.party.service.*;
import cn.chnmuseum.party.web.controller.base.BaseController;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
......@@ -154,61 +153,14 @@ public class LearningContentController extends BaseController {
@ApiOperation(value = "修改学习内容信息", notes = "修改学习内容信息")
@MethodLog(operModule = OperModule.LEARNCONTENT, operType = OperType.UPDATE)
public Map<String, Object> updateLearningContent(@Validated(value = {Update.class}) LearningContent learningContent) {
final LambdaQueryWrapper<LearningContent> lambdaQueryWrapper = Wrappers.<LearningContent>lambdaQuery().eq(LearningContent::getName, learningContent.getName().trim());
lambdaQueryWrapper.ne(LearningContent::getId, learningContent.getId());
final int count = this.learningContentService.count(lambdaQueryWrapper);
if (count > 0) {
return getFailResult("400", "名称已存在,请修改名称");
}
TUser user = getcurUser();
learningContent.setAuditStatus(AuditStatusEnum.TBC.name());
// 保存业务节点信息
final String learningContentId = learningContent.getId();
final List<String> exhibitionBoardCatIdList = learningContent.getExhibitionBoardCatIdList();
if (exhibitionBoardCatIdList != null && !exhibitionBoardCatIdList.isEmpty()) {
LambdaUpdateWrapper<LearningContentBoardCat> lambdaUpdateWrapper = Wrappers.<LearningContentBoardCat>lambdaUpdate().eq(LearningContentBoardCat::getLearningContentId, learningContentId);
this.learningContentBoardCatService.remove(lambdaUpdateWrapper);
for (String exhibitionBoardCatId : exhibitionBoardCatIdList) {
LearningContentBoardCat learningContentBoardCat = LearningContentBoardCat.builder().exhibitionBoardCatId(exhibitionBoardCatId).learningContentId(learningContentId).build();
this.learningContentBoardCatService.save(learningContentBoardCat);
}
}
final List<String> copyrightOwnerIdList = learningContent.getCopyrightOwnerIdList();
if (copyrightOwnerIdList != null && !copyrightOwnerIdList.isEmpty()) {
LambdaUpdateWrapper<LearningContentCopyrightOwner> lambdaUpdateWrapper = Wrappers.<LearningContentCopyrightOwner>lambdaUpdate().eq(LearningContentCopyrightOwner::getLearningContentId, learningContentId);
this.learningContentCopyrightOwnerService.remove(lambdaUpdateWrapper);
for (String copyrightOwnerId : copyrightOwnerIdList) {
LearningContentCopyrightOwner contentCopyrightOwner = LearningContentCopyrightOwner.builder().copyrightOwnerId(copyrightOwnerId).learningContentId(learningContentId).build();
this.learningContentCopyrightOwnerService.save(contentCopyrightOwner);
}
}
final LearningContent one = this.learningContentService.getById(learningContent.getId());
one.setAuditStatus(AuditStatusEnum.TBC.name());
this.learningContentService.updateById(one);
final List<String> exhibitionBoardIdList = learningContent.getExhibitionBoardIdList();
if (exhibitionBoardIdList != null && !exhibitionBoardIdList.isEmpty()) {
LambdaUpdateWrapper<LearningContentBoard> lambdaUpdateWrapper = Wrappers.<LearningContentBoard>lambdaUpdate().eq(LearningContentBoard::getLearningContentId, learningContentId);
this.learningContentBoardService.remove(lambdaUpdateWrapper);
for (String exhibitionBoardId : exhibitionBoardIdList) {
LearningContentBoard learningContentBoard = LearningContentBoard.builder()
.learningContentId(learningContentId)
.exhibitionBoardCatId(this.exhibitionBoardService.getById(exhibitionBoardId).getExhibitionBoardCatId())
.exhibitionBoardId(exhibitionBoardId)
.build();
this.learningContentBoardService.save(learningContentBoard);
}
}
boolean flag = learningContentService.updateById(learningContent);
if (flag) {
final Audit audit = Audit.builder()
.content(learningContent.getName())
.name(learningContent.getName())
.userId(user.getId())
.userId(getcurUser().getId())
.refItemId(learningContent.getId())
.type(AuditTypeEnum.LEARNING_CONTENT.name())
.operation(AuditOperationEnum.EDIT.name())
......@@ -216,10 +168,7 @@ public class LearningContentController extends BaseController {
.level(AuditStatusEnum.TBC.name())
.build();
this.auditService.save(audit);
return getSuccessResult();
}
return getFailResult();
}
@GetMapping("/getList")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment