SceneUploadServiceImpl.java 6.8 KB

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