package com.fdkankan.manage.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.fdkankan.fyun.face.FYunFileServiceInterface; import com.fdkankan.manage.common.ResultCode; import com.fdkankan.manage.exception.BusinessException; import com.fdkankan.manage.common.PageInfo; import com.fdkankan.common.util.FileMd5Util; import com.fdkankan.common.util.FileUtils; import com.fdkankan.manage.common.FilePath; import com.fdkankan.manage.entity.AppFile; import com.fdkankan.manage.mapper.IAppFileMapper; import com.fdkankan.manage.service.IAppFileService; import com.fdkankan.manage.vo.request.AppFileParam; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.File; import java.util.*; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author * @since 2022-06-14 */ @Service @Slf4j public class AppFileServiceImpl extends ServiceImpl implements IAppFileService { @Autowired private FYunFileServiceInterface fYunFileServiceInterface; @Value("${fyun.type}") private String ossType; @Value("${fyun.host}") private String prefixAli; @Override public Map upload(MultipartFile file) { if (ObjectUtils.isEmpty(file) || file.isEmpty() || file.getSize() <= 0) { throw new BusinessException(ResultCode.UPLOAD_FILE_ERROR); } try { Map result = new HashMap<>(2); String filePath = FilePath.appLocalPath; FileUtils.createDir(filePath); filePath = filePath.concat(file.getOriginalFilename()); // 删除旧文件 FileUtils.deleteFile(filePath); File file1 = new File(filePath); file.transferTo(file1); // 写文件到本地 String md5 = FileMd5Util.getFileMD5(filePath); result.put("md5",md5); result.put("fileName",file.getOriginalFilename()); return result; }catch (Exception e){ log.error("上传App出错{}",e); throw new BusinessException(ResultCode.UPLOAD_ERROR); } } @Override public PageInfo pageList(AppFileParam param) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if(StringUtils.isNotBlank(param.getAgentName())){ queryWrapper.like(AppFile::getAgent,param.getAgentName()); } queryWrapper.orderByDesc(AppFile::getCreateTime); Page page = this.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper); return PageInfo.PageInfo(page); } @Override public Set agentList(String agentName) { List strings = fYunFileServiceInterface.listRemoteFiles(FilePath.appOssPath); Set keys = new HashSet<>(); for (String key : strings) { String agent = key.replace(FilePath.appOssPath,""); String[] split = agent.split("/"); String res = split[0]; if(StringUtils.isNotBlank(res)){ keys.add(res); } } return keys; } @Override public void saveByParam(AppFile param) { if(ObjectUtils.isEmpty(param.getName())){ throw new BusinessException(ResultCode.FILE_NAME_EMPTY); } if(!param.getFileServerType().equals(ossType)){ throw new BusinessException(ResultCode.UPLOAD_YUN_TYPE_ERROR); } AppFile managerAPPEntity = new AppFile(); BeanUtils.copyProperties(param, managerAPPEntity); String basePath = FilePath.appLocalPath ; String filePath = basePath.concat(param.getName()); File file = new File(filePath); if (!file.exists()) { throw new BusinessException(ResultCode.APP_FILE_EMPTY); } String versionFilePath = basePath.concat("version.json"); if (!new File(versionFilePath).exists()) { throw new BusinessException(ResultCode.VERSION_EMPTY); } String fileType = param.getName().substring(param.getName().lastIndexOf(".")+1); String ossPathPrefix = FilePath.appOssPath + param.getAgent() + "/"+param.getAppType()+"/"; fYunFileServiceInterface.uploadFile(param.getFileServerType(),filePath, ossPathPrefix+"4dkankan."+fileType); // 上传到 历史记录文件夹目录 fYunFileServiceInterface.uploadFile(param.getFileServerType(),filePath, ossPathPrefix+"oldapps/" + file.getName()); // 上传到 version.json 文件 fYunFileServiceInterface.uploadFile(param.getFileServerType(),versionFilePath, ossPathPrefix+"version/version.json"); // 删除旧文件 FileUtils.deleteFile(filePath); FileUtils.deleteFile(versionFilePath); managerAPPEntity.setUrl(prefixAli.concat(ossPathPrefix+"4dkankan."+fileType)); managerAPPEntity.setVersion(prefixAli.concat(ossPathPrefix+"version/version.json")); managerAPPEntity.setFileServerType(ossType); this.save(managerAPPEntity); } }