feat(可回溯): 视频生成

调整视频生成逻辑
This commit is contained in:
BrandWang
2023-05-09 16:53:49 +08:00
parent 4ca021bf2a
commit bf19ecdea6
6 changed files with 123 additions and 64 deletions
@@ -14,7 +14,6 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
@MappedTypes(value = {List.class}) @MappedTypes(value = {List.class})
@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.wabestway.recall.trace.entity.RecallOrderEntity; import com.wabestway.recall.trace.entity.RecallOrderEntity;
import com.wabestway.recall.trace.dto.RecallOrderDTO; import com.wabestway.recall.trace.dto.RecallOrderDTO;
import com.wabestway.recall.trace.vo.RecallOrderVO; import com.wabestway.recall.trace.vo.RecallOrderVO;
import java.util.List;
/** /**
* *
@@ -13,8 +13,6 @@ import com.wabestway.recall.trace.dto.RecallOrderDTO;
import com.wabestway.recall.trace.vo.RecallOrderVO; import com.wabestway.recall.trace.vo.RecallOrderVO;
import com.wabestway.recall.trace.service.RecallOrderService; import com.wabestway.recall.trace.service.RecallOrderService;
import java.util.List;
/** /**
* @author wangH * @author wangH
* @company 北京华焱坤泰科技有限公司 * @company 北京华焱坤泰科技有限公司
@@ -2,16 +2,12 @@ package com.wabestway.recall.trace.vo;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
/** /**
*
*
* @author wangH * @author wangH
* @company 北京华焱坤泰科技有限公司 * @company 北京华焱坤泰科技有限公司
* @Time 2023-05-06 17:37:03 * @Time 2023-05-06 17:37:03
@@ -21,71 +17,115 @@ import io.swagger.annotations.ApiModelProperty;
public class RecallOrderVO implements Serializable { public class RecallOrderVO implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/** 主键 */ /**
* 主键
*/
@ApiModelProperty(value = "主键") @ApiModelProperty(value = "主键")
private String id; private String id;
/** 产品编码 */ /**
* 产品编码
*/
@ApiModelProperty(value = "产品编码") @ApiModelProperty(value = "产品编码")
private String productCode; private String productCode;
/** 产品名称 */ /**
* 产品名称
*/
@ApiModelProperty(value = "产品名称") @ApiModelProperty(value = "产品名称")
private String productName; private String productName;
/** 保单号 */ /**
* 保单号
*/
@ApiModelProperty(value = "保单号") @ApiModelProperty(value = "保单号")
private String policyNo; private String policyNo;
/** 投保人名称 */ /**
* 投保人名称
*/
@ApiModelProperty(value = "投保人名称") @ApiModelProperty(value = "投保人名称")
private String holderName; private String holderName;
/** 投保人手机号 */ /**
* 投保人手机号
*/
@ApiModelProperty(value = "投保人手机号") @ApiModelProperty(value = "投保人手机号")
private String holderPhone; private String holderPhone;
/** 保险公司名称 */ /**
* 保险公司名称
*/
@ApiModelProperty(value = "保险公司名称") @ApiModelProperty(value = "保险公司名称")
private String supplierName; private String supplierName;
/** 是否记录完整0-否1-是 */ /**
* 是否记录完整0-否1-是
*/
@ApiModelProperty(value = "是否记录完整0-否1-是") @ApiModelProperty(value = "是否记录完整0-否1-是")
private String complete; private String complete;
/** 是否已归档 0-否1-是 */ /**
* 是否已归档 0-否1-是
*/
@ApiModelProperty(value = "是否已归档 0-否1-是 ") @ApiModelProperty(value = "是否已归档 0-否1-是 ")
private String archived; private String archived;
/** 完成日期 */ /**
* 完成日期
*/
@ApiModelProperty(value = "完成日期") @ApiModelProperty(value = "完成日期")
private Long completeDate; private Long completeDate;
/** 归档日期 */ /**
* 归档日期
*/
@ApiModelProperty(value = "归档日期") @ApiModelProperty(value = "归档日期")
private Long archivedDate; private Long archivedDate;
/** 保单起始日期 */ /**
* 保单起始日期
*/
@ApiModelProperty(value = "保单起始日期") @ApiModelProperty(value = "保单起始日期")
private String startDate; private String startDate;
/** 保单结束日期 */ /**
* 保单结束日期
*/
@ApiModelProperty(value = "保单结束日期") @ApiModelProperty(value = "保单结束日期")
private String endDate; private String endDate;
/** 生成视频文件ID */ /**
* 生成视频文件ID
*/
@ApiModelProperty(value = "生成视频文件ID") @ApiModelProperty(value = "生成视频文件ID")
private String fileId; private String fileId;
/** 生成视频文件地址 */ /**
* 生成视频文件地址
*/
@ApiModelProperty(value = "生成视频文件地址") @ApiModelProperty(value = "生成视频文件地址")
private String fileUrl; private String fileUrl;
/** 业务订单ID */ /**
* 业务订单ID
*/
@ApiModelProperty(value = "业务订单ID") @ApiModelProperty(value = "业务订单ID")
private String orderId; private String orderId;
/** 回溯记录跟踪ID */ /**
* 回溯记录跟踪ID
*/
@ApiModelProperty(value = "回溯记录跟踪ID") @ApiModelProperty(value = "回溯记录跟踪ID")
private String traceId; private String traceId;
/** 可回溯记录appKey */ /**
* 可回溯记录appKey
*/
@ApiModelProperty(value = "可回溯记录appKey") @ApiModelProperty(value = "可回溯记录appKey")
private String appKey; private String appKey;
/** 创建人 */ /**
* 创建人
*/
@ApiModelProperty(value = "创建人") @ApiModelProperty(value = "创建人")
private String createBy; private String createBy;
/** 创建时间 */ /**
* 创建时间
*/
@ApiModelProperty(value = "创建时间") @ApiModelProperty(value = "创建时间")
@JsonProperty(value = "createAt") @JsonProperty(value = "createAt")
private Long createTime; private Long createTime;
/** 更新人 */ /**
* 更新人
*/
@ApiModelProperty(value = "更新人") @ApiModelProperty(value = "更新人")
private String updateBy; private String updateBy;
/** 更新时间 */ /**
* 更新时间
*/
@ApiModelProperty(value = "更新时间") @ApiModelProperty(value = "更新时间")
private Long updateTime; private Long updateTime;
@@ -80,11 +80,8 @@ public class RecallOrderApiServiceImpl implements RecallOrderApiService {
orderQuery.orderByDesc(RecallOrderEntity::getCompleteDate); orderQuery.orderByDesc(RecallOrderEntity::getCompleteDate);
List<RecallOrderEntity> orderList = recallOrderService.getBaseMapper().selectList(orderQuery); List<RecallOrderEntity> orderList = recallOrderService.getBaseMapper().selectList(orderQuery);
orderList.forEach(order -> { orderList.forEach(order -> {
LambdaQueryWrapper<RecallRecordEntity> recordQuery = Wrappers.lambdaQuery();
recordQuery.eq(RecallRecordEntity::getTraceId, order.getTraceId());
recordQuery.orderByAsc(RecallRecordEntity::getCreateTime);
List<RecallRecordEntity> recordList = recallRecordService.getBaseMapper().selectList(recordQuery);
List<RecallRecordVO> recordList = recallRecordService.queryTraceRecords(order.getTraceId());
List<String> events = recordList.stream() List<String> events = recordList.stream()
.flatMap(entity -> entity.getEvents().stream()) .flatMap(entity -> entity.getEvents().stream())
.collect(Collectors.toList()); .collect(Collectors.toList());
@@ -117,23 +114,23 @@ public class RecallOrderApiServiceImpl implements RecallOrderApiService {
bw.flush(); bw.flush();
bw.close(); bw.close();
fw.close(); fw.close();
String[] command = {"ts-node", "/opt/trace-transform/src/index.ts"}; String[] command = {"ts-node", "/opt/review/index.ts"};
ProcessBuilder processBuilder = new ProcessBuilder(command); ProcessBuilder processBuilder = new ProcessBuilder(command);
processBuilder.directory(tempDir.toFile()); processBuilder.directory(tempDir.toFile());
// 在临时目录下执行命令 // 在临时目录下执行命令
Process process = processBuilder.start(); Process p1 = processBuilder.start();
Thread processThread = new Thread(() -> { Thread processThread = new Thread(() -> {
try { try {
// 读取命令输出 // 读取命令输出
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); BufferedReader reader = new BufferedReader(new InputStreamReader(p1.getInputStream()));
String line; String line;
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
System.out.println(line); System.out.println(line);
} }
reader.close(); reader.close();
// 等待命令执行完成 // 等待命令执行完成
int exitCode = process.waitFor(); int exitCode = p1.waitFor();
System.out.println("Command exited with code " + exitCode); System.out.println("Command exited with code " + exitCode);
} catch (InterruptedException | IOException e) { } catch (InterruptedException | IOException e) {
@@ -144,12 +141,38 @@ public class RecallOrderApiServiceImpl implements RecallOrderApiService {
// Continue with other tasks here... // Continue with other tasks here...
try { try {
processThread.join(); processThread.join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
String[] video = {"rrvideo", "--input", "unpack.json", "--config", "/opt/review/config.json", "--output", "video.mp4"};
ProcessBuilder videoBuilder = new ProcessBuilder(video);
videoBuilder.directory(tempDir.toFile());
Process p2 = videoBuilder.start();
Thread processThread2 = new Thread(() -> {
try {
// 读取命令输出
BufferedReader reader = new BufferedReader(new InputStreamReader(p2.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
// 等待命令执行完成
int exitCode = p2.waitFor();
System.out.println("Command exited with code " + exitCode);
} catch (InterruptedException | IOException e) {
e.printStackTrace();
}
});
processThread2.start();
File file = new File(tempDir.toFile(), "video.mp4"); File file = new File(tempDir.toFile(), "video.mp4");
if (file.exists()) { if (file.exists()) {
log.info(String.valueOf(file.length())); log.info(String.valueOf(file.length()));
@@ -17,9 +17,9 @@ spring:
datasource: datasource:
type: com.alibaba.druid.pool.DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://123.56.82.16:3306/afis-agency?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai url: jdbc:mysql://203.189.0.250:13049/afis-agency?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: rocar username: yxb-dev
password: rocar password: yxbDev!902
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
platform: mysql platform: mysql
druid: druid: