package com.fdkankan.scene.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fdkankan.common.constant.ErrorCode;
import com.fdkankan.common.exception.BusinessException;
import com.fdkankan.common.user.SSOLoginHelper;
import com.fdkankan.common.user.SSOUser;
import com.fdkankan.common.util.BASE64DecodedMultipartFile;
import com.fdkankan.common.util.FileUtil;
import com.fdkankan.fyun.oss.UploadFilePath;
import com.fdkankan.fyun.oss.UploadToOssUtil;
import com.fdkankan.scene.entity.SceneUpload;
import com.fdkankan.scene.mapper.ISceneUploadMapper;
import com.fdkankan.scene.service.ISceneUploadService;
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;
import javax.annotation.Resource;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
/**
*
* 服务实现类
*
*
* @author
* @since 2022-01-19
*/
@Service
public class SceneUploadServiceImpl extends ServiceImpl implements ISceneUploadService {
@Resource
UploadToOssUtil uploadToOssUtil;
@Value("${oss.point:http://oss-cn-shenzhen-internal.aliyuncs.com}")
private String point;
@Value("${oss.key:LTAIUrvuHqj8pvry}")
private String key;
@Value("${oss.secrey:JLOVl0k8Ke0aaM8nLMMiUAZ3EiiqI4}")
private String secrey;
@Value("${oss.bucket:4dkankan}")
private String bucket;
@Autowired
private SSOLoginHelper ssoLoginHelper;
@Override
public String uploads(String imgData,String fileName,MultipartFile[] files,String sceneCode,Integer type,String token) throws Exception{
SSOUser ssoUser = ssoLoginHelper.loginCheck(token);
// if(ssoUser == null ){
// throw new BusinessException(ErrorCode.USER_NOT_LOGIN);
// }
Long userId = ssoUser == null ? null :ssoUser.getId();
List 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,multipartFiles,sceneCode,type,userId);
}
public String uploadFiles(String sendFileName,List files, String sceneCode, Integer type,Long userId) throws Exception{
if (StringUtils.isEmpty(sceneCode) || files == null || files.size() <= 0) {
throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
}
List urlList = new ArrayList<>();
String prefix ="";
for (MultipartFile file : files) {
String fileName = file.getOriginalFilename();
if(StringUtils.isNotBlank(prefix) && !prefix.equals(fileName.substring(fileName.lastIndexOf(".")))){
throw new BusinessException(-1,"文件类型不一致");
}
// 获取文件后缀
prefix = fileName.substring(fileName.lastIndexOf("."));
}
if(type != null && 1 == type){
this.updateFileByPreFix(sceneCode,prefix);
}
for (MultipartFile file : files) {
String fileName = file.getOriginalFilename();
// 获取文件后缀
prefix = fileName.substring(fileName.lastIndexOf("."));
File newFile = File.createTempFile(UUID.randomUUID().toString() ,prefix);
file.transferTo(newFile);
String realFileName = fileName;
if(files.size() ==1 && StringUtils.isNotBlank(sendFileName)){
realFileName = sendFileName ;
}
String ossPath = String.format(UploadFilePath.USER_EDIT_PATH ,sceneCode) + realFileName;
try {
uploadToOssUtil.upload2(newFile.getPath(),ossPath);
}catch (Exception e){
log.error(ossPath+"上传文件失败"+e);
throw new BusinessException(-1,"上传文件失败");
}
//String url =String.format("http://%s.%s/%s", bucket, point.replace("http://",""), ossPath);
urlList.add(realFileName);
FileUtil.delFile(newFile.getPath());
//添加记录
this.saveData(sceneCode,ossPath,prefix,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 prefix) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SceneUpload::getSceneCode,sceneCode)
.eq(SceneUpload::getFilePrefix,prefix)
.eq(SceneUpload::getTbStatus,0);
List list = this.list(queryWrapper);
if(list != null && list.size() >0){
for (SceneUpload sceneUpload : list) {
try {
uploadToOssUtil.delete(sceneUpload.getFileName());
this.removeEntity(sceneUpload);
}catch (Exception e){
log.error(sceneUpload.getFileName()+"删除oss文件失败",e);
}
}
}
}
private void removeEntity(SceneUpload sceneUpload) {
sceneUpload.setTbStatus(1);
this.updateById(sceneUpload);
}
private void saveData(String sceneCode, String ossPath, String prefix,Long userId) {
SceneUpload sceneUpload = new SceneUpload();
sceneUpload.setSceneCode(sceneCode);
sceneUpload.setFileName(ossPath);
sceneUpload.setFilePrefix(prefix);
sceneUpload.setUploadUser(userId.toString());
this.save(sceneUpload);
}
}