SceneUploadServiceImpl.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package com.fdkankan.scene.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.fdkankan.common.constant.ErrorCode;
  5. import com.fdkankan.common.exception.BusinessException;
  6. import com.fdkankan.common.user.SSOLoginHelper;
  7. import com.fdkankan.common.user.SSOUser;
  8. import com.fdkankan.common.util.BASE64DecodedMultipartFile;
  9. import com.fdkankan.common.util.FileUtil;
  10. import com.fdkankan.fyun.oss.UploadFilePath;
  11. import com.fdkankan.fyun.oss.UploadToOssUtil;
  12. import com.fdkankan.scene.entity.SceneUpload;
  13. import com.fdkankan.scene.mapper.ISceneUploadMapper;
  14. import com.fdkankan.scene.service.ISceneUploadService;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.stereotype.Service;
  19. import org.springframework.web.multipart.MultipartFile;
  20. import javax.annotation.Resource;
  21. import java.io.File;
  22. import java.util.ArrayList;
  23. import java.util.Arrays;
  24. import java.util.List;
  25. import java.util.UUID;
  26. /**
  27. * <p>
  28. * 服务实现类
  29. * </p>
  30. *
  31. * @author
  32. * @since 2022-01-19
  33. */
  34. @Service
  35. public class SceneUploadServiceImpl extends ServiceImpl<ISceneUploadMapper, SceneUpload> implements ISceneUploadService {
  36. @Resource
  37. UploadToOssUtil uploadToOssUtil;
  38. @Value("${oss.point:http://oss-cn-shenzhen-internal.aliyuncs.com}")
  39. private String point;
  40. @Value("${oss.key:LTAIUrvuHqj8pvry}")
  41. private String key;
  42. @Value("${oss.secrey:JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4}")
  43. private String secrey;
  44. @Value("${oss.bucket:4dkankan}")
  45. private String bucket;
  46. @Autowired
  47. private SSOLoginHelper ssoLoginHelper;
  48. @Override
  49. public String uploads(String imgData,String fileName,MultipartFile[] files,String sceneCode,Integer type,String token) throws Exception{
  50. SSOUser ssoUser = ssoLoginHelper.loginCheck(token);
  51. // if(ssoUser == null ){
  52. // throw new BusinessException(ErrorCode.USER_NOT_LOGIN);
  53. // }
  54. Long userId = ssoUser == null ? null :ssoUser.getId();
  55. List<MultipartFile> multipartFiles = new ArrayList<>();
  56. if(StringUtils.isNotBlank(imgData)){
  57. MultipartFile file = BASE64DecodedMultipartFile.base64ToMultipart(imgData);
  58. multipartFiles.add(file);
  59. }
  60. if(files !=null && files.length >0){
  61. multipartFiles.addAll(Arrays.asList(files));
  62. }
  63. return this.uploadFiles(fileName,multipartFiles,sceneCode,type,userId);
  64. }
  65. public String uploadFiles(String sendFileName,List<MultipartFile> files, String sceneCode, Integer type,Long userId) throws Exception{
  66. if (StringUtils.isEmpty(sceneCode) || files == null || files.size() <= 0) {
  67. throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
  68. }
  69. List<String> urlList = new ArrayList<>();
  70. String prefix ="";
  71. for (MultipartFile file : files) {
  72. String fileName = file.getOriginalFilename();
  73. if(StringUtils.isNotBlank(prefix) && !prefix.equals(fileName.substring(fileName.lastIndexOf(".")))){
  74. throw new BusinessException(-1,"文件类型不一致");
  75. }
  76. // 获取文件后缀
  77. prefix = fileName.substring(fileName.lastIndexOf("."));
  78. }
  79. if(type != null && 1 == type){
  80. this.updateFileByPreFix(sceneCode,prefix);
  81. }
  82. for (MultipartFile file : files) {
  83. String fileName = file.getOriginalFilename();
  84. // 获取文件后缀
  85. prefix = fileName.substring(fileName.lastIndexOf("."));
  86. File newFile = File.createTempFile(UUID.randomUUID().toString() ,prefix);
  87. file.transferTo(newFile);
  88. String realFileName = fileName;
  89. if(files.size() ==1 && StringUtils.isNotBlank(sendFileName)){
  90. realFileName = sendFileName ;
  91. }
  92. String ossPath = String.format(UploadFilePath.USER_EDIT_PATH ,sceneCode) + realFileName;
  93. try {
  94. uploadToOssUtil.upload2(newFile.getPath(),ossPath);
  95. }catch (Exception e){
  96. log.error(ossPath+"上传文件失败"+e);
  97. throw new BusinessException(-1,"上传文件失败");
  98. }
  99. //String url =String.format("http://%s.%s/%s", bucket, point.replace("http://",""), ossPath);
  100. urlList.add(realFileName);
  101. FileUtil.delFile(newFile.getPath());
  102. //添加记录
  103. this.saveData(sceneCode,ossPath,prefix,userId);
  104. }
  105. StringBuilder returnString = new StringBuilder();
  106. for (String res : urlList) {
  107. if(StringUtils.isNotBlank(returnString)){
  108. returnString.append(",");
  109. }
  110. returnString.append(res);
  111. }
  112. return returnString.toString();
  113. }
  114. private void updateFileByPreFix(String sceneCode, String prefix) {
  115. LambdaQueryWrapper<SceneUpload> queryWrapper = new LambdaQueryWrapper<>();
  116. queryWrapper.eq(SceneUpload::getSceneCode,sceneCode)
  117. .eq(SceneUpload::getFilePrefix,prefix)
  118. .eq(SceneUpload::getTbStatus,0);
  119. List<SceneUpload> list = this.list(queryWrapper);
  120. if(list != null && list.size() >0){
  121. for (SceneUpload sceneUpload : list) {
  122. try {
  123. uploadToOssUtil.delete(sceneUpload.getFileName());
  124. this.removeEntity(sceneUpload);
  125. }catch (Exception e){
  126. log.error(sceneUpload.getFileName()+"删除oss文件失败",e);
  127. }
  128. }
  129. }
  130. }
  131. private void removeEntity(SceneUpload sceneUpload) {
  132. sceneUpload.setTbStatus(1);
  133. this.updateById(sceneUpload);
  134. }
  135. private void saveData(String sceneCode, String ossPath, String prefix,Long userId) {
  136. SceneUpload sceneUpload = new SceneUpload();
  137. sceneUpload.setSceneCode(sceneCode);
  138. sceneUpload.setFileName(ossPath);
  139. sceneUpload.setFilePrefix(prefix);
  140. sceneUpload.setUploadUser(userId.toString());
  141. this.save(sceneUpload);
  142. }
  143. }