123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- package com.fdkankan.scene.service.impl;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.date.TimeInterval;
- import cn.hutool.core.io.FileUtil;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.fdkankan.common.constant.ErrorCode;
- import com.fdkankan.common.constant.RecStatus;
- import com.fdkankan.common.constant.ServerCode;
- import com.fdkankan.common.util.FileUtils;
- import com.fdkankan.model.constants.ConstantFilePath;
- import com.fdkankan.model.constants.UploadFilePath;
- import com.fdkankan.common.exception.BusinessException;
- import com.fdkankan.web.response.ResultData;
- import com.fdkankan.web.util.BASE64DecodedMultipartFile;
- import com.fdkankan.fyun.face.FYunFileServiceInterface;
- import com.fdkankan.scene.entity.ScenePlus;
- import com.fdkankan.scene.entity.ScenePlusExt;
- import com.fdkankan.scene.entity.SceneUpload;
- import com.fdkankan.scene.mapper.ISceneUploadMapper;
- import com.fdkankan.scene.service.IScenePlusExtService;
- import com.fdkankan.scene.service.IScenePlusService;
- import com.fdkankan.scene.service.ISceneUploadService;
- import com.fdkankan.scene.vo.DeleteFileParamVO;
- import com.fdkankan.scene.vo.UploadContentParamVO;
- import com.fdkankan.web.user.SSOLoginHelper;
- import com.fdkankan.web.user.SSOUser;
- import java.io.File;
- import java.nio.charset.StandardCharsets;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Objects;
- import java.util.Set;
- import java.util.UUID;
- import javax.annotation.Resource;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.web.multipart.MultipartFile;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author
- * @since 2022-01-19
- */
- @Slf4j
- @Service
- public class SceneUploadServiceImpl extends ServiceImpl<ISceneUploadMapper, SceneUpload> implements ISceneUploadService {
- @Value("${fyun.host}")
- private String ossUrlPrefix;
- @Resource
- private FYunFileServiceInterface fYunFileService;
- @Autowired
- private SSOLoginHelper ssoLoginHelper;
- @Autowired
- private IScenePlusService scenePlusService;
- @Autowired
- private IScenePlusExtService scenePlusExtService;
- @Override
- public String uploads(String imgData,String fileName,String blzType,MultipartFile[] files,
- String sceneCode,Integer type,String token, String uploadPath) throws Exception{
- SSOUser ssoUser = ssoLoginHelper.loginCheck(token);
- Long userId = ssoUser == null ? null :ssoUser.getId();
- List<MultipartFile> multipartFiles = new ArrayList<>();
- if(StringUtils.isNotBlank(imgData)){
- MultipartFile file = BASE64DecodedMultipartFile.base64ToMultipart(imgData);
- multipartFiles.add(file);
- }
- if(files !=null && files.length >0){
- multipartFiles.addAll(Arrays.asList(files));
- }
- return this.uploadFiles(fileName,blzType,multipartFiles,sceneCode,type,userId,uploadPath);
- }
- @Override
- public ResultData delete(DeleteFileParamVO param) throws Exception {
- ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
- if(Objects.isNull(scenePlus)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- }
- ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
- String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
- List<String> filePaths = new ArrayList<>();
- Set<String> hasDelete = new HashSet<>();
- for (String fileName : param.getFileNames()) {
- if(hasDelete.contains(fileName)){
- continue;
- }
- hasDelete.add(fileName);
- String key = userEditPath + fileName;
- filePaths.add(key);
- fYunFileService.deleteFile(scenePlusExt.getYunFileBucket(), key);
- }
- this.update(new LambdaUpdateWrapper<SceneUpload>()
- .set(SceneUpload::getRecStatus, RecStatus.DISABLE.code())
- .eq(SceneUpload::getNum, param.getNum())
- .eq(SceneUpload::getBizType, param.getBizType())
- .in(SceneUpload::getFilePath, filePaths));
- return ResultData.ok();
- }
- public String uploadFiles(String sendFileName,String bizType,List<MultipartFile> files,
- String num, Integer type,Long userId, String uploadPath) throws Exception{
- if (StrUtil.isEmpty(num))
- throw new BusinessException(ServerCode.PARAM_REQUIRED, "num");
- if(CollUtil.isEmpty(files))
- throw new BusinessException(ServerCode.PARAM_REQUIRED, "files");
- if(StrUtil.isEmpty(bizType))
- throw new BusinessException(ServerCode.PARAM_REQUIRED, "bizType");
- ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
- if(Objects.isNull(scenePlus))
- throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
- ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
- String bucket = scenePlusExt.getYunFileBucket();
- List<String> urlList = new ArrayList<>();
- if(type != null && 1 == type){
- this.updateFileByPreFix(num,bizType,bucket);
- }
- for (MultipartFile file : files) {
- String fileName = file.getOriginalFilename();
- // 获取文件后缀
- String prefix = fileName.substring(fileName.lastIndexOf("."));
- String path = String.format(ConstantFilePath.SCENE_TMP_PATH_V4, num).concat(UUID.randomUUID().toString()).concat(prefix);
- // File newFile = File.createTempFile(UUID.randomUUID().toString() ,prefix);
- FileUtil.mkParentDirs(path);
- file.transferTo(new File(path));
- String realFileName = fileName;
- if(files.size() ==1 && StringUtils.isNotBlank(sendFileName)){
- realFileName = sendFileName ;
- }
- String oldExtName = cn.hutool.core.io.FileUtil.extName(realFileName);
- String newExtName = oldExtName.toLowerCase();
- realFileName = realFileName.substring(0, realFileName.lastIndexOf(oldExtName)) + newExtName;
- String ossPath = StrUtil.isNotBlank(uploadPath) ? uploadPath : (String.format(UploadFilePath.USER_EDIT_PATH ,num) + realFileName);
- try {
- TimeInterval timer = DateUtil.timer();
- fYunFileService.uploadFile(bucket, path, ossPath);
- System.out.println(timer.intervalRestart());
- }catch (Exception e){
- log.error(ossPath+"上传文件失败"+e);
- throw new BusinessException(ErrorCode.FAILURE_CODE_7013);
- }
- urlList.add(realFileName);
- FileUtils.delFile(path);
- //添加记录
- this.saveData(num,ossPath,bizType,userId);
- }
- StringBuilder returnString = new StringBuilder();
- for (String res : urlList) {
- if(StringUtils.isNotBlank(returnString)){
- returnString.append(",");
- }
- returnString.append(res);
- }
- return returnString.toString();
- }
- private void updateFileByPreFix(String sceneCode, String blzType, String bucket) {
- LambdaQueryWrapper<SceneUpload> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(SceneUpload::getNum,sceneCode)
- .eq(SceneUpload::getBizType,blzType);
- List<SceneUpload> list = this.list(queryWrapper);
- if(list != null && list.size() >0){
- for (SceneUpload sceneUpload : list) {
- try {
- fYunFileService.deleteFile(bucket, sceneUpload.getFilePath());
- this.removeEntity(sceneUpload);
- }catch (Exception e){
- log.error(sceneUpload.getFilePath()+"删除oss文件失败",e);
- }
- }
- }
- }
- private void removeEntity(SceneUpload sceneUpload) {
- sceneUpload.setRecStatus(RecStatus.VALID.code());
- this.updateById(sceneUpload);
- }
- private void saveData(String sceneCode, String ossPath, String bizType,Long userId) {
- SceneUpload sceneUpload = new SceneUpload();
- sceneUpload.setNum(sceneCode);
- sceneUpload.setFilePath(ossPath);
- sceneUpload.setBizType(bizType);
- sceneUpload.setUploadUser(userId);
- this.save(sceneUpload);
- }
- @Override
- public String uploadContent(UploadContentParamVO param) throws Exception {
- String ossPath = param.getOssPath();
- String fileName = ossPath.substring(ossPath.lastIndexOf("/") + 1);
- if(StrUtil.isEmpty(fileName)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_7012);
- }
- String suffix = fileName.substring(fileName.lastIndexOf("."));
- if(StrUtil.isEmpty(suffix)){
- throw new BusinessException(ErrorCode.FAILURE_CODE_7012);
- }
- File tempFile = File.createTempFile(UUID.randomUUID().toString(), suffix);
- cn.hutool.core.io.FileUtil.writeString(param.getContent(), tempFile, StandardCharsets.UTF_8);
- fYunFileService.uploadFile(param.getBucket(), tempFile.getPath(), param.getOssPath());
- tempFile.deleteOnExit();
- return this.ossUrlPrefix + param.getOssPath();
- }
- }
|