package org.dromara.system.controller.system; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import jakarta.validation.constraints.NotEmpty; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.entity.SynchronousRequest; import org.dromara.common.oss.entity.SynchronousRequest2; import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.entity.VideoRequest; import org.dromara.common.oss.factory.OssFactory; import org.dromara.system.domain.SysOss; import org.dromara.system.domain.properties.Boundary; import org.dromara.system.domain.properties.FtpConfig; import org.dromara.system.domain.vo.SysOssUploadVo; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.mapper.SysOssMapper; import org.dromara.system.service.ISysOssService; import org.dromara.system.uitil.FtpApche; import org.dromara.system.uitil.HttpUtils; import org.dromara.system.uitil.PasswordUtil; import org.jetbrains.annotations.NotNull; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; @Slf4j @SaIgnore @Validated @RequiredArgsConstructor @RestController @RequestMapping("/resource/synchronization") public class SynchronizationController { private final FtpConfig ftpConfig; private final ISysOssService ossService; private final SysOssMapper baseMapper; /** * 上传同步 视频专网 * * @param * @return */ @PostMapping(value = "/upload") public R synchronization(SynchronousRequest request) throws IOException, ParseException { if (ObjectUtil.isNull(request.getFile())) { return R.fail("上传文件不能为空"); } ossService.upload2(request); return R.ok(); } @PostMapping(value = "/uploadTwo") public R uploadTwo(VideoRequest request1) throws IOException { if (ObjectUtil.isNull(request1.getFile())) { return R.fail("上传文件不能为空"); } SysOssVo oss = ossService.upload3(request1); //添加队列数据 // QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS); log.info("通道: {} , 发送数据: {}", "OSS", oss.getOssId()); SysOssUploadVo uploadVo = new SysOssUploadVo(); uploadVo.setUrl(oss.getUrl()); uploadVo.setFileName(oss.getOriginalName()); uploadVo.setOssId(oss.getOssId().toString()); uploadVo.setPassword(oss.getPassword()); return R.ok(uploadVo); } /** * 删除同步 * * @param ossId OSS对象ID串 */ @PostMapping(value = "/delete") public R remove(String ossId) throws Exception { return ossService.deleteWithValidByIds(List.of(convert(ossId)), true, "000000") ? R.ok() : R.fail("提取码错误!"); } /** * 上传同步 公安内网 * * @param request */ @PostMapping(value = "/uploadByFileName") public R uploadByFileName(VideoRequest request) throws Exception { if (ObjectUtil.isNull(request.getFile())) { return R.fail("上传文件不能为空"); } SysOssVo oss = ossService.upload3(request); InputStream input = request.getFile().getInputStream(); String fileName = request.getFileName(); OssClient storage = OssFactory.instance(); UploadResult uploadResult = storage.upload(input,getPath(fileName), fileName.substring(14,fileName.length())); buildResultEntity1(fileName, fileName.substring(14,fileName.length()), "minio", uploadResult); return R.ok(); } public String getPath(String suffix) { return DateUtils.datePath() + "/" + suffix; } @NotNull private void buildResultEntity1(String originalfileName, String suffix, String configKey, UploadResult uploadResult) { SysOss oss = new SysOss(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalfileName); oss.setService(configKey); oss.setPassword(PasswordUtil.randomPassword(6)); baseMapper.insert(oss); } @NotNull private void buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult ,MultipartFile file) { SysOss oss = new SysOss(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalfileName); oss.setService(configKey); oss.setPassword(PasswordUtil.randomPassword(6)); baseMapper.insert(oss); //拼接同步信息 // SynchronousRequest request = new SynchronousRequest(); // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // request.setFile(file); // request.setFileName(oss.getOriginalName()+"1"); // request.setPath(uploadResult.getFilename()); // request.setCreateTime(format.format(oss.getCreateTime())); // request.setPassword(oss.getPassword()); // request.setCreateBy("1731588854831022081"); // request.setOssId(String.valueOf(oss.getOssId())); // request.setOssId("123890"); // post(request); } public static Long[] convert(String input) { String[] stringArray = input.split(","); Long[] longArray = new Long[stringArray.length]; for (int i = 0; i < stringArray.length; i++) { longArray[i] = Long.parseLong(stringArray[i].trim()); } return longArray; } @NotNull private void buildResultEntity2(String originalfileName, String suffix, String configKey, UploadResult uploadResult , String password) throws IOException { SysOss oss = new SysOss(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalfileName); oss.setService(configKey); oss.setPassword(password); baseMapper.insert(oss); } }