SceneUploadServiceImpl.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. package com.fdkankan.scene.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.thread.ThreadUtil;
  4. import cn.hutool.core.date.DateUtil;
  5. import cn.hutool.core.date.TimeInterval;
  6. import cn.hutool.core.io.FileUtil;
  7. import cn.hutool.core.util.StrUtil;
  8. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  9. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  10. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  11. import com.fdkankan.common.constant.ErrorCode;
  12. import com.fdkankan.common.constant.RecStatus;
  13. import com.fdkankan.common.constant.ServerCode;
  14. import com.fdkankan.common.util.FileUtils;
  15. import com.fdkankan.model.constants.ConstantFilePath;
  16. import com.fdkankan.model.constants.UploadFilePath;
  17. import com.fdkankan.common.exception.BusinessException;
  18. import com.fdkankan.scene.oss.OssUtil;
  19. import com.fdkankan.web.response.ResultData;
  20. import com.fdkankan.web.util.BASE64DecodedMultipartFile;
  21. import com.fdkankan.scene.entity.ScenePlus;
  22. import com.fdkankan.scene.entity.ScenePlusExt;
  23. import com.fdkankan.scene.entity.SceneUpload;
  24. import com.fdkankan.scene.mapper.ISceneUploadMapper;
  25. import com.fdkankan.scene.service.IScenePlusExtService;
  26. import com.fdkankan.scene.service.IScenePlusService;
  27. import com.fdkankan.scene.service.ISceneUploadService;
  28. import com.fdkankan.scene.vo.DeleteFileParamVO;
  29. import com.fdkankan.scene.vo.UploadContentParamVO;
  30. import com.fdkankan.web.user.SSOLoginHelper;
  31. import com.fdkankan.web.user.SSOUser;
  32. import java.io.File;
  33. import java.nio.charset.StandardCharsets;
  34. import java.util.ArrayList;
  35. import java.util.Arrays;
  36. import java.util.HashSet;
  37. import java.util.List;
  38. import java.util.Objects;
  39. import java.util.Set;
  40. import java.util.UUID;
  41. import javax.annotation.Resource;
  42. import lombok.extern.slf4j.Slf4j;
  43. import org.apache.commons.lang3.StringUtils;
  44. import org.springframework.beans.factory.annotation.Autowired;
  45. import org.springframework.beans.factory.annotation.Value;
  46. import org.springframework.stereotype.Service;
  47. import org.springframework.web.multipart.MultipartFile;
  48. /**
  49. * <p>
  50. * 服务实现类
  51. * </p>
  52. *
  53. * @author
  54. * @since 2022-01-19
  55. */
  56. @Slf4j
  57. @Service
  58. public class SceneUploadServiceImpl extends ServiceImpl<ISceneUploadMapper, SceneUpload> implements ISceneUploadService {
  59. @Resource
  60. @Autowired
  61. private SSOLoginHelper ssoLoginHelper;
  62. @Autowired
  63. private IScenePlusService scenePlusService;
  64. @Autowired
  65. private IScenePlusExtService scenePlusExtService;
  66. @Autowired
  67. private OssUtil ossUtil;
  68. @Override
  69. public String uploads(String imgData,String fileName,String blzType,MultipartFile[] files,
  70. String sceneCode,Integer type,String token, String uploadPath) throws Exception{
  71. SSOUser ssoUser = ssoLoginHelper.loginCheck(token);
  72. Long userId = ssoUser == null ? null :ssoUser.getId();
  73. List<MultipartFile> multipartFiles = new ArrayList<>();
  74. if(StringUtils.isNotBlank(imgData)){
  75. MultipartFile file = BASE64DecodedMultipartFile.base64ToMultipart(imgData);
  76. multipartFiles.add(file);
  77. }
  78. if(files !=null && files.length >0){
  79. multipartFiles.addAll(Arrays.asList(files));
  80. }
  81. return this.uploadFiles(fileName,blzType,multipartFiles,sceneCode,type,userId,uploadPath);
  82. }
  83. @Override
  84. public ResultData delete(DeleteFileParamVO param) throws Exception {
  85. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(param.getNum());
  86. if(Objects.isNull(scenePlus)){
  87. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  88. }
  89. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  90. String bucket = scenePlusExt.getYunFileBucket();
  91. String userEditPath = String.format(UploadFilePath.USER_EDIT_PATH, param.getNum());
  92. List<String> filePaths = new ArrayList<>();
  93. Set<String> hasDelete = new HashSet<>();
  94. for (String fileName : param.getFileNames()) {
  95. if(hasDelete.contains(fileName)){
  96. continue;
  97. }
  98. hasDelete.add(fileName);
  99. String key = userEditPath + fileName;
  100. filePaths.add(key);
  101. ossUtil.deleteObject(bucket, key);
  102. }
  103. this.update(new LambdaUpdateWrapper<SceneUpload>()
  104. .set(SceneUpload::getRecStatus, RecStatus.DISABLE.code())
  105. .eq(SceneUpload::getNum, param.getNum())
  106. .eq(SceneUpload::getBizType, param.getBizType())
  107. .in(SceneUpload::getFilePath, filePaths));
  108. return ResultData.ok();
  109. }
  110. public String uploadFiles(String sendFileName,String bizType,List<MultipartFile> files,
  111. String num, Integer type,Long userId, String uploadPath) throws Exception{
  112. if (StrUtil.isEmpty(num))
  113. throw new BusinessException(ServerCode.PARAM_REQUIRED, "num");
  114. if(CollUtil.isEmpty(files))
  115. throw new BusinessException(ServerCode.PARAM_REQUIRED, "files");
  116. if(StrUtil.isEmpty(bizType))
  117. throw new BusinessException(ServerCode.PARAM_REQUIRED, "bizType");
  118. ScenePlus scenePlus = scenePlusService.getScenePlusByNum(num);
  119. if(Objects.isNull(scenePlus))
  120. throw new BusinessException(ErrorCode.FAILURE_CODE_5005);
  121. ScenePlusExt scenePlusExt = scenePlusExtService.getScenePlusExtByPlusId(scenePlus.getId());
  122. String bucket = scenePlusExt.getYunFileBucket();
  123. List<String> urlList = new ArrayList<>();
  124. if(type != null && 1 == type){
  125. this.updateFileByPreFix(num,bizType,bucket);
  126. }
  127. for (MultipartFile file : files) {
  128. String fileName = file.getOriginalFilename();
  129. // 获取文件后缀
  130. String prefix = fileName.substring(fileName.lastIndexOf("."));
  131. // String path = String.format(ConstantFilePath.SCENE_TMP_PATH_V4, num).concat(UUID.randomUUID().toString()).concat(prefix);
  132. File newFile = File.createTempFile(UUID.randomUUID().toString() ,prefix);
  133. // FileUtil.mkParentDirs(path);
  134. file.transferTo(newFile);
  135. String realFileName = fileName;
  136. if(files.size() ==1 && StringUtils.isNotBlank(sendFileName)){
  137. realFileName = sendFileName ;
  138. }
  139. String oldExtName = cn.hutool.core.io.FileUtil.extName(realFileName);
  140. String newExtName = oldExtName.toLowerCase();
  141. realFileName = realFileName.substring(0, realFileName.lastIndexOf(oldExtName)) + newExtName;
  142. String ossPath = StrUtil.isNotBlank(uploadPath) ? uploadPath : (String.format(UploadFilePath.USER_EDIT_PATH ,num) + realFileName);
  143. try {
  144. ossUtil.uploadFile(bucket, ossPath, newFile.getPath(), false);
  145. }catch (Exception e){
  146. log.error(ossPath+"上传文件失败"+e);
  147. throw new BusinessException(ErrorCode.FAILURE_CODE_7013);
  148. }
  149. urlList.add(realFileName);
  150. try{
  151. newFile.delete();
  152. }catch (Exception e){
  153. log.warn("delete tempFile error ,===="+newFile.getAbsoluteFile());
  154. }
  155. //添加记录
  156. this.saveData(num,ossPath,bizType,userId);
  157. }
  158. StringBuilder returnString = new StringBuilder();
  159. for (String res : urlList) {
  160. if(StringUtils.isNotBlank(returnString)){
  161. returnString.append(",");
  162. }
  163. returnString.append(res);
  164. }
  165. return returnString.toString();
  166. }
  167. private void updateFileByPreFix(String sceneCode, String blzType, String bucket) {
  168. LambdaQueryWrapper<SceneUpload> queryWrapper = new LambdaQueryWrapper<>();
  169. queryWrapper.eq(SceneUpload::getNum,sceneCode)
  170. .eq(SceneUpload::getBizType,blzType);
  171. List<SceneUpload> list = this.list(queryWrapper);
  172. if(list != null && list.size() >0){
  173. for (SceneUpload sceneUpload : list) {
  174. try {
  175. ossUtil.deleteObject(bucket, sceneUpload.getFilePath());
  176. this.removeEntity(sceneUpload);
  177. }catch (Exception e){
  178. log.error(sceneUpload.getFilePath()+"删除oss文件失败",e);
  179. }
  180. }
  181. }
  182. }
  183. private void removeEntity(SceneUpload sceneUpload) {
  184. sceneUpload.setRecStatus(RecStatus.VALID.code());
  185. this.updateById(sceneUpload);
  186. }
  187. private void saveData(String sceneCode, String ossPath, String bizType,Long userId) {
  188. SceneUpload sceneUpload = new SceneUpload();
  189. sceneUpload.setNum(sceneCode);
  190. sceneUpload.setFilePath(ossPath);
  191. sceneUpload.setBizType(bizType);
  192. sceneUpload.setUploadUser(userId);
  193. this.save(sceneUpload);
  194. }
  195. // @Override
  196. // public String uploadContent(UploadContentParamVO param) throws Exception {
  197. //
  198. // String ossPath = param.getOssPath();
  199. // String fileName = ossPath.substring(ossPath.lastIndexOf("/") + 1);
  200. // if(StrUtil.isEmpty(fileName)){
  201. // throw new BusinessException(ErrorCode.FAILURE_CODE_7012);
  202. // }
  203. // String suffix = fileName.substring(fileName.lastIndexOf("."));
  204. // if(StrUtil.isEmpty(suffix)){
  205. // throw new BusinessException(ErrorCode.FAILURE_CODE_7012);
  206. // }
  207. //
  208. // File tempFile = File.createTempFile(UUID.randomUUID().toString(), suffix);
  209. // cn.hutool.core.io.FileUtil.writeString(param.getContent(), tempFile, StandardCharsets.UTF_8);
  210. // fYunFileService.uploadFile(param.getBucket(), tempFile.getPath(), param.getOssPath());
  211. // tempFile.deleteOnExit();
  212. //
  213. // return this.ossUrlPrefix + param.getOssPath();
  214. // }
  215. }