From bf028d503493d874bfcd09b4734ebe7c5de04d7d Mon Sep 17 00:00:00 2001 From: BrandWang Date: Wed, 29 Mar 2023 16:28:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=8F=AF=E5=9B=9E=E6=BA=AF):=20=E5=8F=AF?= =?UTF-8?q?=E5=9B=9E=E6=BA=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加文件上传 --- .../wabestway/recall/web/OrderController.java | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/wabestway/recall/web/OrderController.java b/src/main/java/com/wabestway/recall/web/OrderController.java index 46663db..4169c38 100644 --- a/src/main/java/com/wabestway/recall/web/OrderController.java +++ b/src/main/java/com/wabestway/recall/web/OrderController.java @@ -2,36 +2,41 @@ package com.wabestway.recall.web; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; +import com.wabestway.commons.http.ResObj; +import com.wabestway.engine.api.dfs.UploadFileDTO; +import com.wabestway.engine.api.dfs.UploadRespVO; +import com.wabestway.engine.api.feign.DfsStorageFeignClient; import com.wabestway.recall.model.Order; import com.wabestway.recall.model.OrderList; import com.wabestway.recall.model.Record; -import com.wabestway.recall.model.ResObj; import com.wabestway.recall.repository.OrderRepository; import com.wabestway.recall.repository.RecordRepository; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.*; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.io.*; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Comparator; import java.util.List; - +@Slf4j @RestController @RequestMapping("/order") public class OrderController { private final RecordRepository recordRepository; private final OrderRepository orderRepository; - public OrderController(RecordRepository recordRepository, OrderRepository orderRepository) { + private final DfsStorageFeignClient storageFeignClient; + + public OrderController(RecordRepository recordRepository, OrderRepository orderRepository, DfsStorageFeignClient storageFeignClient) { this.recordRepository = recordRepository; this.orderRepository = orderRepository; + this.storageFeignClient = storageFeignClient; } @GetMapping @@ -85,14 +90,14 @@ public class OrderController { Example ep = Example.of(order, matcher); Sort s = Sort.by("createAt"); Flux flux = orderRepository.findAll(ep, s); - flux.subscribe(fo -> { + flux.filter(fo -> fo.getFileId() == null).subscribe(fo -> { Flux rs = recordRepository.findAllByTraceIdOrderByCreateAtAsc(fo.getTraceId()); Mono>> es = rs.map(rr -> rr.getEvents()).collectList(); Mono> events = es.flatMapIterable(lists -> lists).flatMapIterable(list -> list).collectList(); events.subscribe(e -> { JSONArray array = JSONArray.parseArray(JSON.toJSONString(e)); try { - createVideo(fo.getOrderId(), array.toJSONString()); + createVideo(fo, array.toJSONString()); } catch (IOException ex) { ex.printStackTrace(); } @@ -101,7 +106,7 @@ public class OrderController { return Mono.just(ResObj.ok()); } - void createVideo(String orderId, String jsonData) throws IOException { + void createVideo(Order fo, String jsonData) throws IOException { // 创建临时目录 Path tempDir = null; @@ -135,7 +140,23 @@ public class OrderController { // 等待命令执行完成 int exitCode = process.waitFor(); + System.out.println("Command exited with code " + exitCode); + + File file = new File(tempDir.toFile(), "video.mp4"); + if (file.exists()) { + byte[] fileBytes = Files.readAllBytes(file.toPath()); + String titles = fo.getOrderId() + ".mp4"; + UploadFileDTO uploadFileDTO = new UploadFileDTO(fileBytes, "contractExcel", titles); + + ResObj uploadResObj = storageFeignClient.uploadBytes(uploadFileDTO); + log.info(JSON.toJSONString(uploadResObj)); + if (uploadResObj.isOk()) { + fo.setFileId(uploadResObj.getData().getFileId()); + fo.setFileUrl(uploadResObj.getData().getFileUrl()); + orderRepository.save(fo).subscribe(); + } + } } catch (IOException | InterruptedException e) { e.printStackTrace(); } finally {