package com.gxwebsoft.common.system.service.impl; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.OSSException; import com.aliyun.oss.common.auth.CredentialsProvider; import com.aliyun.oss.common.auth.DefaultCredentialProvider; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.common.core.utils.CommonUtil; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.system.entity.Company; import com.gxwebsoft.common.system.entity.FileRecord; import com.gxwebsoft.common.system.mapper.FileRecordMapper; import com.gxwebsoft.common.system.param.FileRecordParam; import com.gxwebsoft.common.system.service.CompanyService; import com.gxwebsoft.common.system.service.FileRecordService; import com.gxwebsoft.common.system.service.SettingService; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.util.Arrays; import java.util.List; /** * 文件上传记录Service实现 * * @author WebSoft * @since 2021-08-30 11:21:01 */ @Service public class FileRecordServiceImpl extends ServiceImpl implements FileRecordService { @Resource private CompanyService companyService; @Resource private SettingService settingService; @Override public PageResult pageRel(FileRecordParam param) { PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); return new PageResult<>(baseMapper.selectPageRel(page, param), page.getTotal()); } @Override public List listRel(FileRecordParam param) { PageParam page = new PageParam<>(param); page.setDefaultOrder("create_time desc"); return page.sortRecords(baseMapper.selectListRel(param)); } @Override public FileRecord getByIdRel(Integer id) { FileRecordParam param = new FileRecordParam(); param.setId(id); return param.getOne(baseMapper.selectListRel(param)); } @Override public FileRecord getByIdPath(String path) { return CommonUtil.listGetOne(baseMapper.getByIdPath(path)); } @Async @Override public void deleteFileAsync(List files) { for (File file : files) { try { file.delete(); } catch (Exception e) { e.printStackTrace(); } } } @Override public void deleteOssFileAsync(List fileRecords) { // 读取云存储配置信息 final FileRecord record = fileRecords.get(0); System.out.println("record = " + record); final JSONObject uploadConfig = settingService.getUploadConfig(record.getTenantId()); String endpoint = uploadConfig.getString("bucketEndpoint"); String bucketDomain = uploadConfig.getString("bucketDomain"); String bucketName = uploadConfig.getString("bucketName"); String accessKeyId = uploadConfig.getString("accessKeyId"); String accessKeySecret = uploadConfig.getString("accessKeySecret"); CredentialsProvider credentialsProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); for (FileRecord fileRecord : fileRecords) { fileRecord.setPath(StrUtil.replace(fileRecord.getPath(), bucketDomain.concat("/"), "")); try { // 删除远程文件 ossClient.deleteObject(bucketName, fileRecord.getPath()); // 释放空间大小 if (fileRecord.getCompanyId() > 0) { Company company = companyService.getById(fileRecord.getCompanyId()); company.setStorage(company.getStorage() - fileRecord.getLength()); companyService.updateById(company); } } catch (Exception e) { e.printStackTrace(); } } } }