feat(可回溯): 可回溯
增加文件上传
This commit is contained in:
@@ -2,36 +2,41 @@ package com.wabestway.recall.web;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
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.Order;
|
||||||
import com.wabestway.recall.model.OrderList;
|
import com.wabestway.recall.model.OrderList;
|
||||||
import com.wabestway.recall.model.Record;
|
import com.wabestway.recall.model.Record;
|
||||||
import com.wabestway.recall.model.ResObj;
|
|
||||||
import com.wabestway.recall.repository.OrderRepository;
|
import com.wabestway.recall.repository.OrderRepository;
|
||||||
import com.wabestway.recall.repository.RecordRepository;
|
import com.wabestway.recall.repository.RecordRepository;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.data.domain.*;
|
import org.springframework.data.domain.*;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/order")
|
@RequestMapping("/order")
|
||||||
public class OrderController {
|
public class OrderController {
|
||||||
private final RecordRepository recordRepository;
|
private final RecordRepository recordRepository;
|
||||||
private final OrderRepository orderRepository;
|
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.recordRepository = recordRepository;
|
||||||
this.orderRepository = orderRepository;
|
this.orderRepository = orderRepository;
|
||||||
|
this.storageFeignClient = storageFeignClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
@@ -85,14 +90,14 @@ public class OrderController {
|
|||||||
Example<Order> ep = Example.of(order, matcher);
|
Example<Order> ep = Example.of(order, matcher);
|
||||||
Sort s = Sort.by("createAt");
|
Sort s = Sort.by("createAt");
|
||||||
Flux<Order> flux = orderRepository.findAll(ep, s);
|
Flux<Order> flux = orderRepository.findAll(ep, s);
|
||||||
flux.subscribe(fo -> {
|
flux.filter(fo -> fo.getFileId() == null).subscribe(fo -> {
|
||||||
Flux<Record> rs = recordRepository.findAllByTraceIdOrderByCreateAtAsc(fo.getTraceId());
|
Flux<Record> rs = recordRepository.findAllByTraceIdOrderByCreateAtAsc(fo.getTraceId());
|
||||||
Mono<List<List<String>>> es = rs.map(rr -> rr.getEvents()).collectList();
|
Mono<List<List<String>>> es = rs.map(rr -> rr.getEvents()).collectList();
|
||||||
Mono<List<String>> events = es.flatMapIterable(lists -> lists).flatMapIterable(list -> list).collectList();
|
Mono<List<String>> events = es.flatMapIterable(lists -> lists).flatMapIterable(list -> list).collectList();
|
||||||
events.subscribe(e -> {
|
events.subscribe(e -> {
|
||||||
JSONArray array = JSONArray.parseArray(JSON.toJSONString(e));
|
JSONArray array = JSONArray.parseArray(JSON.toJSONString(e));
|
||||||
try {
|
try {
|
||||||
createVideo(fo.getOrderId(), array.toJSONString());
|
createVideo(fo, array.toJSONString());
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -101,7 +106,7 @@ public class OrderController {
|
|||||||
return Mono.just(ResObj.ok());
|
return Mono.just(ResObj.ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
void createVideo(String orderId, String jsonData) throws IOException {
|
void createVideo(Order fo, String jsonData) throws IOException {
|
||||||
|
|
||||||
// 创建临时目录
|
// 创建临时目录
|
||||||
Path tempDir = null;
|
Path tempDir = null;
|
||||||
@@ -135,7 +140,23 @@ public class OrderController {
|
|||||||
|
|
||||||
// 等待命令执行完成
|
// 等待命令执行完成
|
||||||
int exitCode = process.waitFor();
|
int exitCode = process.waitFor();
|
||||||
|
|
||||||
System.out.println("Command exited with code " + exitCode);
|
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<UploadRespVO> 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) {
|
} catch (IOException | InterruptedException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
Reference in New Issue
Block a user