feat: 语音交互项目执行、可视化
This commit is contained in:
parent
43a3c416a7
commit
f60db6cd85
@ -67,9 +67,21 @@ public class ViProjectController extends BaseController {
|
|||||||
return toAjax(viProjectService.deleteViProjectByProjectIds(projectIds));
|
return toAjax(viProjectService.deleteViProjectByProjectIds(projectIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation("查询项目执行时运行参数")
|
||||||
|
@GetMapping("/queryExecuteRunParams")
|
||||||
|
public AjaxResult queryExecuteRunParams(@RequestParam("projectId") String projectId) {
|
||||||
|
return AjaxResult.ok(viProjectService.queryExecuteRunParams(projectId));
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation("执行项目")
|
@ApiOperation("执行项目")
|
||||||
@PostMapping("/execute")
|
@PostMapping("/execute")
|
||||||
public AjaxResult execute(@RequestBody TeTaskExecuteProjectVO taskExecuteProjectVO) {
|
public AjaxResult execute(@RequestBody TeTaskExecuteProjectVO taskExecuteProjectVO) {
|
||||||
return AjaxResult.ok(viProjectService.execute(taskExecuteProjectVO));
|
return AjaxResult.ok(viProjectService.executeProject(taskExecuteProjectVO));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation("查询最近一次项目执行实例id")
|
||||||
|
@GetMapping("/queryExecuteInstId/{projectId}")
|
||||||
|
public AjaxResult queryExecuteInstId(@PathVariable("projectId") String projectId) {
|
||||||
|
return AjaxResult.ok(viProjectService.queryExecuteInstId(projectId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,31 @@
|
|||||||
package com.cmvr.test.enums;
|
package com.cmvr.test.enums;
|
||||||
|
|
||||||
|
import com.cmvr.common.exception.GlobalException;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程场景类型
|
* 流程场景类型
|
||||||
*/
|
*/
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
public enum FlowSceneTypeEnum {
|
public enum FlowSceneTypeEnum {
|
||||||
NORMAL, // 普通
|
NORMAL(0, "普通流程场景", "NORMAL"),
|
||||||
VI_WAKEUP_CORPUS, // 语音交互-唤醒场景
|
VI_WAKEUP_CORPUS(1, "语音交互-唤醒场景", "VI_WAKEUP_CORPUS"),
|
||||||
VI_SINGLE_CORPUS, // 语音交互-单次对话场景
|
VI_SINGLE_CORPUS(2, "语音交互-单次对话场景", "VI_SINGLE_CORPUS"),
|
||||||
VI_CONTINUOUS_CORPUS // 语音交互-连续对话场景
|
VI_CONTINUOUS_CORPUS(3, "语音交互-连续对话场景", "VI_CONTINUOUS_CORPUS");
|
||||||
}
|
|
||||||
|
private final int code; // 数字类型
|
||||||
|
private final String desc; // 描述
|
||||||
|
private final String sceneCode; // 数据库里存的 sceneCode
|
||||||
|
|
||||||
|
// 根据 code 获取枚举
|
||||||
|
public static FlowSceneTypeEnum fromCode(int code) {
|
||||||
|
for (FlowSceneTypeEnum e : values()) {
|
||||||
|
if (e.code == code) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new GlobalException("场景类型参数错误: " + code);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,7 +5,6 @@ import cn.hutool.core.exceptions.ExceptionUtil;
|
|||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.alibaba.fastjson2.JSONArray;
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.cmvr.common.exception.GlobalException;
|
import com.cmvr.common.exception.GlobalException;
|
||||||
import com.cmvr.test.enums.ActionEnum;
|
import com.cmvr.test.enums.ActionEnum;
|
||||||
@ -45,47 +44,19 @@ public class FlowTaskRuntimeEntry implements FlowTaskRuntimeService {
|
|||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public String executeTask(TeTaskExecuteNormalVO taskExecuteNormalVO) {
|
public String executeTask(TeTaskExecuteNormalVO taskExecuteNormalVO) {
|
||||||
String terminalId = taskExecuteNormalVO.getTerminalId();
|
return executeTaskInternal(
|
||||||
String taskId = taskExecuteNormalVO.getTaskId();
|
taskExecuteNormalVO.getTerminalId(),
|
||||||
|
taskExecuteNormalVO.getTaskId(),
|
||||||
// 查询任务详情(检测项信息)
|
RunModeEnum.NORMAL,
|
||||||
List<TeQueryTaskDetailDTO> details = taskOrchestrationService.queryTaskDetail(taskId);
|
taskExecuteNormalVO.getRunParams(),
|
||||||
int count = (int) details.stream().filter(dto -> ObjUtil.equals(dto.getIsDeploy(), "1")).count();
|
taskExecuteNormalVO
|
||||||
if (count > 0) {
|
);
|
||||||
throw new GlobalException("当前任务存在未发布的检测项!");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查终端状态
|
|
||||||
if (taskInstHolder.isTerminalLocked(terminalId)) {
|
|
||||||
throw new GlobalException("当前终端正在执行其他任务,请稍后再试");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建任务实例
|
|
||||||
TeTaskInst instance = createAndSaveTaskInstance(taskId, terminalId, RunModeEnum.NORMAL);
|
|
||||||
String instId = instance.getId();
|
|
||||||
|
|
||||||
try {
|
|
||||||
// 注册上下文
|
|
||||||
registerTaskContext(instId, taskId, terminalId, null, RunModeEnum.NORMAL, taskExecuteNormalVO.getRunParams());
|
|
||||||
|
|
||||||
// 异步提交执行
|
|
||||||
flowTaskAsyncDispatcher.submit(instId, taskId, terminalId, RunModeEnum.NORMAL, details);
|
|
||||||
return instId;
|
|
||||||
} catch (Exception e) {
|
|
||||||
taskInstHolder.markFailed(
|
|
||||||
instId, taskId, null, null, null,
|
|
||||||
ActionEnum.NONE.getOperate(), ActionEnum.NONE.getAction(),
|
|
||||||
JSON.toJSONString(taskExecuteNormalVO),
|
|
||||||
"任务执行异常:" + StrUtil.sub(ExceptionUtil.getMessage(e), 0, 480)
|
|
||||||
);
|
|
||||||
throw new GlobalException("任务执行异常:" + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public String executeTrialTask(TeTaskExecuteTrailVO taskExecuteTrailVO) {
|
public String executeTrialTask(TeTaskExecuteTrailVO taskExecuteTrailVO) {
|
||||||
JSONObject runParams = taskExecuteTrailVO.getRunParams();
|
JSONObject runParams = taskExecuteTrailVO.getRunParams();
|
||||||
String terminalId = runParams.getString("terminalId");
|
String terminalId = taskExecuteTrailVO.getTerminalId();
|
||||||
if (StrUtil.isEmpty(terminalId)) {
|
if (StrUtil.isEmpty(terminalId)) {
|
||||||
throw new GlobalException("终端ID不能为空");
|
throw new GlobalException("终端ID不能为空");
|
||||||
}
|
}
|
||||||
@ -137,45 +108,50 @@ public class FlowTaskRuntimeEntry implements FlowTaskRuntimeService {
|
|||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public String executeProjectTask(TeTaskExecuteProjectVO taskExecuteProjectVO) {
|
public String executeProjectTask(TeTaskExecuteProjectVO taskExecuteProjectVO) {
|
||||||
JSONObject runParams = taskExecuteProjectVO.getRunParams();
|
return executeTaskInternal(
|
||||||
String terminalId = runParams.getString("terminalId");
|
taskExecuteProjectVO.getTerminalId(),
|
||||||
|
taskExecuteProjectVO.getProjectId(),
|
||||||
|
RunModeEnum.PROJECT,
|
||||||
|
taskExecuteProjectVO.getRunParams(),
|
||||||
|
taskExecuteProjectVO
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public String executeTaskInternal(String terminalId, String taskId,
|
||||||
|
RunModeEnum runMode, JSONObject runParams, Object originalVO) {
|
||||||
if (StrUtil.isEmpty(terminalId)) {
|
if (StrUtil.isEmpty(terminalId)) {
|
||||||
throw new GlobalException("终端ID不能为空");
|
throw new GlobalException("终端ID不能为空");
|
||||||
}
|
}
|
||||||
|
// 检查终端状态
|
||||||
if (taskInstHolder.isTerminalLocked(terminalId)) {
|
if (taskInstHolder.isTerminalLocked(terminalId)) {
|
||||||
throw new GlobalException("当前终端正在执行其他任务,请稍后再试");
|
throw new GlobalException("当前终端正在执行其他任务,请稍后再试");
|
||||||
}
|
}
|
||||||
|
// 查询任务详情(检测项信息)
|
||||||
String taskId = taskExecuteProjectVO.getProjectId();
|
|
||||||
|
|
||||||
// 查询任务详情(方案对应流程信息)
|
|
||||||
List<TeQueryTaskDetailDTO> details = taskOrchestrationService.queryTaskDetail(taskId);
|
List<TeQueryTaskDetailDTO> details = taskOrchestrationService.queryTaskDetail(taskId);
|
||||||
JSONArray prjInfo = taskExecuteProjectVO.getPrjInfo();
|
int count = (int) details.stream().filter(dto -> ObjUtil.equals(dto.getIsDeploy(), "1")).count();
|
||||||
for (int i = 0; i < details.size(); i++) {
|
if (count > 0) {
|
||||||
JSONObject jsonObject = prjInfo.getJSONObject(i);
|
throw new GlobalException("当前任务存在未发布的检测项!");
|
||||||
TeQueryTaskDetailDTO detail = details.get(i);
|
|
||||||
detail.setSchemeInfo(jsonObject);
|
|
||||||
}
|
}
|
||||||
|
// 创建任务实例
|
||||||
// 创建并保存任务实例
|
TeTaskInst instance = createAndSaveTaskInstance(taskId, terminalId, runMode);
|
||||||
TeTaskInst instance = createAndSaveTaskInstance(taskId, terminalId, RunModeEnum.PROJECT);
|
|
||||||
String instId = instance.getId();
|
String instId = instance.getId();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 注册上下文
|
// 注册上下文
|
||||||
registerTaskContext(instId, taskId, terminalId, null, RunModeEnum.PROJECT, taskExecuteProjectVO.getRunParams());
|
registerTaskContext(instId, taskId, terminalId, null, runMode, runParams);
|
||||||
|
|
||||||
// 异步提交执行
|
// 异步提交执行
|
||||||
flowTaskAsyncDispatcher.submit(instId, taskId, terminalId, RunModeEnum.PROJECT, details);
|
flowTaskAsyncDispatcher.submit(instId, taskId, terminalId, runMode, details);
|
||||||
return instId;
|
return instId;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
taskInstHolder.markFailed(
|
taskInstHolder.markFailed(
|
||||||
instId, taskId, null, null, null,
|
instId, taskId, null, null, null,
|
||||||
ActionEnum.NONE.getOperate(), ActionEnum.NONE.getAction(),
|
ActionEnum.NONE.getOperate(), ActionEnum.NONE.getAction(),
|
||||||
JSON.toJSONString(taskExecuteProjectVO),
|
JSON.toJSONString(originalVO),
|
||||||
"项目执行异常:" + StrUtil.sub(ExceptionUtil.getMessage(e), 0, 480)
|
"任务执行异常:" + StrUtil.sub(ExceptionUtil.getMessage(e), 0, 480)
|
||||||
);
|
);
|
||||||
throw new GlobalException("项目执行异常:" + e.getMessage());
|
throw new GlobalException("任务执行异常:" + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,7 +8,9 @@ import com.cmvr.common.core.domain.BaseEntity;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("任务配置信息")
|
@ApiModel("任务配置信息")
|
||||||
public class TeTaskConfigInfo extends BaseEntity {
|
public class TeTaskConfigInfo extends BaseEntity {
|
||||||
|
|||||||
@ -0,0 +1,17 @@
|
|||||||
|
package com.cmvr.test.model.vo;
|
||||||
|
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Data
|
||||||
|
public class TeQueryProjectOrchestraItemVO extends TeQueryTaskOrchestraItemVO{
|
||||||
|
@ApiModelProperty("检测项ID")
|
||||||
|
private String schemeId;
|
||||||
|
|
||||||
|
@ApiModelProperty("检测项名称")
|
||||||
|
private String schemeName;
|
||||||
|
}
|
||||||
@ -1,6 +1,5 @@
|
|||||||
package com.cmvr.test.model.vo;
|
package com.cmvr.test.model.vo;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSONArray;
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
@ -16,9 +15,10 @@ public class TeTaskExecuteProjectVO {
|
|||||||
@NotEmpty(message = "项目ID不能为空")
|
@NotEmpty(message = "项目ID不能为空")
|
||||||
private String projectId;
|
private String projectId;
|
||||||
|
|
||||||
|
@ApiModelProperty("终端ID")
|
||||||
|
@NotEmpty(message = "终端ID不能为空")
|
||||||
|
private String terminalId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "运行时参数")
|
@ApiModelProperty(value = "运行时参数")
|
||||||
private JSONObject runParams = new JSONObject();
|
private JSONObject runParams = new JSONObject();
|
||||||
|
|
||||||
@ApiModelProperty(value = "项目运行时方案及语料信息")
|
|
||||||
private JSONArray prjInfo;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,10 @@ public class TeTaskExecuteTrailVO {
|
|||||||
@NotEmpty(message = "流程JSON数据不可为空")
|
@NotEmpty(message = "流程JSON数据不可为空")
|
||||||
private String flowData;
|
private String flowData;
|
||||||
|
|
||||||
|
@ApiModelProperty("终端ID")
|
||||||
|
@NotEmpty(message = "终端ID不能为空")
|
||||||
|
private String terminalId;
|
||||||
|
|
||||||
@ApiModelProperty(value = "运行时参数")
|
@ApiModelProperty(value = "运行时参数")
|
||||||
private JSONObject runParams = new JSONObject();
|
private JSONObject runParams = new JSONObject();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -49,7 +49,7 @@ public class TeTaskConfigInfoServiceImpl extends ServiceImpl<TeTaskConfigInfoMap
|
|||||||
.select(SysGroup::getGroupId)
|
.select(SysGroup::getGroupId)
|
||||||
.select(SysGroup::getGroupName)
|
.select(SysGroup::getGroupName)
|
||||||
.leftJoin(SysGroup.class, SysGroup::getGroupId, TeTaskConfigInfo::getGroupId)
|
.leftJoin(SysGroup.class, SysGroup::getGroupId, TeTaskConfigInfo::getGroupId)
|
||||||
.eq(TeTaskConfigInfo::getRunMode, RunModeEnum.NORMAL)
|
.eq(TeTaskConfigInfo::getRunMode, RunModeEnum.NORMAL) // 只查询普通
|
||||||
.like(StringUtils.isNotBlank(teTaskConfigInfo.getTaskDesc()), TeTaskConfigInfo::getTaskDesc, teTaskConfigInfo.getTaskDesc())
|
.like(StringUtils.isNotBlank(teTaskConfigInfo.getTaskDesc()), TeTaskConfigInfo::getTaskDesc, teTaskConfigInfo.getTaskDesc())
|
||||||
.like(StringUtils.isNotBlank(teTaskConfigInfo.getTaskName()), TeTaskConfigInfo::getTaskName, teTaskConfigInfo.getTaskName())
|
.like(StringUtils.isNotBlank(teTaskConfigInfo.getTaskName()), TeTaskConfigInfo::getTaskName, teTaskConfigInfo.getTaskName())
|
||||||
.eq(StringUtils.isNotBlank(teTaskConfigInfo.getGroupId()), TeTaskConfigInfo::getGroupId, teTaskConfigInfo.getGroupId())
|
.eq(StringUtils.isNotBlank(teTaskConfigInfo.getGroupId()), TeTaskConfigInfo::getGroupId, teTaskConfigInfo.getGroupId())
|
||||||
|
|||||||
@ -7,9 +7,11 @@ import com.cmvr.common.core.domain.BaseEntity;
|
|||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
@Data
|
@Data
|
||||||
@ApiModel("语音交互--项目表")
|
@ApiModel("语音交互--项目表")
|
||||||
public class ViProject extends BaseEntity {
|
public class ViProject extends BaseEntity {
|
||||||
@ -72,7 +74,6 @@ public class ViProject extends BaseEntity {
|
|||||||
@ApiModelProperty("送样日期")
|
@ApiModelProperty("送样日期")
|
||||||
private Date sampleDate;
|
private Date sampleDate;
|
||||||
|
|
||||||
@Excel(name = "状态", readConverterExp = "0=正常,1=停用")
|
@ApiModelProperty(value = "状态", notes = "状态(0已执行 1未执行)")
|
||||||
@ApiModelProperty(value = "状态", notes = "0=正常,1=停用")
|
|
||||||
private String status;
|
private String status;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
package com.cmvr.vi.service;
|
package com.cmvr.vi.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.cmvr.test.model.vo.TeTaskExecuteNormalVO;
|
import com.cmvr.test.model.vo.TeQueryProjectOrchestraItemVO;
|
||||||
import com.cmvr.test.model.vo.TeTaskExecuteProjectVO;
|
import com.cmvr.test.model.vo.TeTaskExecuteProjectVO;
|
||||||
import com.cmvr.vi.model.domain.ViProject;
|
import com.cmvr.vi.model.domain.ViProject;
|
||||||
|
|
||||||
@ -53,8 +53,19 @@ public interface IViProjectService extends IService<ViProject> {
|
|||||||
*/
|
*/
|
||||||
public int deleteViProjectByProjectIds(String[] projectIds);
|
public int deleteViProjectByProjectIds(String[] projectIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目执行时运行参数
|
||||||
|
*/
|
||||||
|
public List<TeQueryProjectOrchestraItemVO> queryExecuteRunParams(String projectId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 执行项目
|
* 执行项目
|
||||||
*/
|
*/
|
||||||
public String execute(TeTaskExecuteProjectVO taskExecuteProjectVO);
|
public String executeProject(TeTaskExecuteProjectVO taskExecuteProjectVO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询最近一次项目执行记录
|
||||||
|
*/
|
||||||
|
public String queryExecuteInstId(String projectId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,30 +1,34 @@
|
|||||||
package com.cmvr.vi.service.impl;
|
package com.cmvr.vi.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.fastjson2.JSONArray;
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.cmvr.common.exception.GlobalException;
|
||||||
|
import com.cmvr.test.enums.FlowSceneTypeEnum;
|
||||||
import com.cmvr.test.enums.RunModeEnum;
|
import com.cmvr.test.enums.RunModeEnum;
|
||||||
import com.cmvr.test.flow.runtime.engine.FlowTaskRuntimeService;
|
import com.cmvr.test.flow.runtime.engine.FlowTaskRuntimeService;
|
||||||
|
import com.cmvr.test.model.domain.TeDetectionItem;
|
||||||
import com.cmvr.test.model.domain.TeTaskConfigInfo;
|
import com.cmvr.test.model.domain.TeTaskConfigInfo;
|
||||||
|
import com.cmvr.test.model.domain.TeTaskInst;
|
||||||
|
import com.cmvr.test.model.vo.TeQueryProjectOrchestraItemVO;
|
||||||
|
import com.cmvr.test.model.vo.TeTaskExecuteNormalVO;
|
||||||
import com.cmvr.test.model.vo.TeTaskExecuteProjectVO;
|
import com.cmvr.test.model.vo.TeTaskExecuteProjectVO;
|
||||||
|
import com.cmvr.test.service.ITeDetectionItemService;
|
||||||
import com.cmvr.test.service.ITeTaskConfigInfoService;
|
import com.cmvr.test.service.ITeTaskConfigInfoService;
|
||||||
|
import com.cmvr.test.service.ITeTaskInstService;
|
||||||
import com.cmvr.vi.mapper.ViProjectMapper;
|
import com.cmvr.vi.mapper.ViProjectMapper;
|
||||||
import com.cmvr.vi.model.domain.ViCorpus;
|
|
||||||
import com.cmvr.vi.model.domain.ViProject;
|
import com.cmvr.vi.model.domain.ViProject;
|
||||||
import com.cmvr.vi.model.domain.ViScheme;
|
import com.cmvr.vi.model.domain.ViScheme;
|
||||||
import com.cmvr.vi.service.IViCorpusService;
|
|
||||||
import com.cmvr.vi.service.IViProjectService;
|
import com.cmvr.vi.service.IViProjectService;
|
||||||
import com.cmvr.vi.service.IViSchemeService;
|
import com.cmvr.vi.service.IViSchemeService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -38,8 +42,9 @@ public class ViProjectServiceImpl extends ServiceImpl<ViProjectMapper, ViProject
|
|||||||
|
|
||||||
private final FlowTaskRuntimeService flowTaskRuntimeService;
|
private final FlowTaskRuntimeService flowTaskRuntimeService;
|
||||||
private final IViSchemeService viSchemeService;
|
private final IViSchemeService viSchemeService;
|
||||||
private final IViCorpusService viCorpusService;
|
private final ITeDetectionItemService detectionItemService;
|
||||||
private final ITeTaskConfigInfoService taskConfigInfoService;
|
private final ITeTaskConfigInfoService taskConfigInfoService;
|
||||||
|
private final ITeTaskInstService taskInstService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ViProject selectViProjectByProjectId(String projectId) {
|
public ViProject selectViProjectByProjectId(String projectId) {
|
||||||
@ -78,33 +83,68 @@ public class ViProjectServiceImpl extends ServiceImpl<ViProjectMapper, ViProject
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String execute(TeTaskExecuteProjectVO taskExecuteProjectVO) {
|
public List<TeQueryProjectOrchestraItemVO> queryExecuteRunParams(String projectId) {
|
||||||
String projectId = taskExecuteProjectVO.getProjectId();
|
// 方案信息
|
||||||
// 查询方案
|
|
||||||
List<ViScheme> viSchemes = viSchemeService.querySchemesByProjectId(projectId);
|
List<ViScheme> viSchemes = viSchemeService.querySchemesByProjectId(projectId);
|
||||||
|
|
||||||
JSONArray jsonArray = new JSONArray();
|
List<TeQueryProjectOrchestraItemVO> result = new ArrayList<>();
|
||||||
for (ViScheme scheme : viSchemes) {
|
|
||||||
// 唤醒语料
|
|
||||||
ViCorpus wakeCorpus = viCorpusService.queryCorpusByParentId(scheme.getWakeId());
|
|
||||||
|
|
||||||
// 测试语料
|
for (ViScheme scheme : viSchemes) {
|
||||||
List<ViCorpus> testCorpus = Collections.emptyList();
|
// 根据场景类型查找对应检测项流程
|
||||||
if (scheme.getSceneType() != 1) {
|
String sceneTypeKey = FlowSceneTypeEnum.fromCode(scheme.getSceneType()).getSceneCode();
|
||||||
List<String> corpusIds = StrUtil.split(scheme.getCorpusIds(), StrUtil.COMMA);
|
TeDetectionItem item = detectionItemService.selectTeDetectionItemBySceneType(sceneTypeKey);
|
||||||
if (CollUtil.isNotEmpty(corpusIds)) {
|
if (item == null) {
|
||||||
testCorpus = viCorpusService.queryCorpusInParentIds(corpusIds);
|
continue;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JSONObject object = new JSONObject()
|
TeQueryProjectOrchestraItemVO vo = new TeQueryProjectOrchestraItemVO();
|
||||||
.fluentPut("scheme", scheme)
|
vo.setSchemeId(scheme.getSchemeId());
|
||||||
.fluentPut("wake", wakeCorpus)
|
vo.setSchemeName(scheme.getSchemeName());
|
||||||
.fluentPut("test", testCorpus);
|
vo.setItemId(item.getId());
|
||||||
|
vo.setConfig(item.getConfig());
|
||||||
|
vo.setItemName(item.getDetectName());
|
||||||
|
vo.setOrderNum(scheme.getSort());
|
||||||
|
|
||||||
jsonArray.fluentAdd(object);
|
result.add(vo);
|
||||||
}
|
}
|
||||||
taskExecuteProjectVO.setPrjInfo(jsonArray);
|
|
||||||
return flowTaskRuntimeService.executeProjectTask(taskExecuteProjectVO);
|
// 重新归一化 1..N
|
||||||
|
for (int i = 0; i < result.size(); i++) {
|
||||||
|
result.get(i).setOrderNum(i + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String executeProject(TeTaskExecuteProjectVO taskExecuteProjectVO) {
|
||||||
|
TeTaskExecuteNormalVO normalVO = new TeTaskExecuteNormalVO();
|
||||||
|
normalVO.setTaskId(taskExecuteProjectVO.getProjectId());
|
||||||
|
normalVO.setRunParams(taskExecuteProjectVO.getRunParams());
|
||||||
|
normalVO.setTerminalId(taskExecuteProjectVO.getTerminalId());
|
||||||
|
String instId = flowTaskRuntimeService.executeTask(normalVO);
|
||||||
|
this.update(
|
||||||
|
new LambdaUpdateWrapper<ViProject>()
|
||||||
|
.eq(ViProject::getProjectId, taskExecuteProjectVO.getProjectId())
|
||||||
|
.set(ViProject::getStatus, "0")
|
||||||
|
);
|
||||||
|
return instId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String queryExecuteInstId(String projectId) {
|
||||||
|
LambdaQueryWrapper<ViProject> wrapperProject = Wrappers.lambdaQuery(ViProject.class);
|
||||||
|
wrapperProject.eq(ViProject::getProjectId, projectId)
|
||||||
|
.eq(ViProject::getStatus, "0");
|
||||||
|
ViProject project = this.getOne(wrapperProject);
|
||||||
|
if (ObjUtil.isEmpty(project)) {
|
||||||
|
throw new GlobalException(StrUtil.format("项目id为 [{}] 的任务不存在或未执行!", projectId));
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<TeTaskInst> wrapper = Wrappers.lambdaQuery(TeTaskInst.class);
|
||||||
|
wrapper.eq(TeTaskInst::getTaskId, projectId)
|
||||||
|
.orderByDesc(TeTaskInst::getCreateTime)
|
||||||
|
.last("LIMIT 1");
|
||||||
|
TeTaskInst latestTaskInst = taskInstService.getOne(wrapper);
|
||||||
|
return latestTaskInst.getId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import cn.hutool.core.util.ObjUtil;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.cmvr.common.exception.GlobalException;
|
|
||||||
import com.cmvr.test.enums.FlowSceneTypeEnum;
|
import com.cmvr.test.enums.FlowSceneTypeEnum;
|
||||||
import com.cmvr.test.model.domain.TeDetectionItem;
|
import com.cmvr.test.model.domain.TeDetectionItem;
|
||||||
import com.cmvr.test.model.vo.TeQueryTaskOrchestraItemVO;
|
import com.cmvr.test.model.vo.TeQueryTaskOrchestraItemVO;
|
||||||
@ -35,7 +34,7 @@ import java.util.stream.Collectors;
|
|||||||
public class ViSchemeServiceImpl extends ServiceImpl<ViSchemeMapper, ViScheme> implements IViSchemeService {
|
public class ViSchemeServiceImpl extends ServiceImpl<ViSchemeMapper, ViScheme> implements IViSchemeService {
|
||||||
|
|
||||||
private final ITeTaskOrchestrationService teTaskOrchestrationService;
|
private final ITeTaskOrchestrationService teTaskOrchestrationService;
|
||||||
private final ITeDetectionItemService detectionItemService;
|
private final ITeDetectionItemService detectionItemService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ViScheme selectViSchemeBySchemeId(String schemeId) {
|
public ViScheme selectViSchemeBySchemeId(String schemeId) {
|
||||||
@ -61,14 +60,7 @@ public class ViSchemeServiceImpl extends ServiceImpl<ViSchemeMapper, ViScheme> i
|
|||||||
Integer sort = viScheme.getSort();
|
Integer sort = viScheme.getSort();
|
||||||
|
|
||||||
// 获取对应场景流程id
|
// 获取对应场景流程id
|
||||||
Integer sceneType = viScheme.getSceneType(); // 1:唤醒 2:单次对话 3:连续对话
|
String key = FlowSceneTypeEnum.fromCode(viScheme.getSceneType()).getSceneCode();
|
||||||
String key;
|
|
||||||
switch (sceneType) {
|
|
||||||
case 1: key = FlowSceneTypeEnum.VI_WAKEUP_CORPUS.name(); break;
|
|
||||||
case 2: key = FlowSceneTypeEnum.VI_SINGLE_CORPUS.name(); break;
|
|
||||||
case 3: key = FlowSceneTypeEnum.VI_CONTINUOUS_CORPUS.name(); break;
|
|
||||||
default: throw new GlobalException("场景类型参数错误!");
|
|
||||||
}
|
|
||||||
TeDetectionItem item = detectionItemService.selectTeDetectionItemBySceneType(key);
|
TeDetectionItem item = detectionItemService.selectTeDetectionItemBySceneType(key);
|
||||||
String itemId = item.getId();
|
String itemId = item.getId();
|
||||||
|
|
||||||
@ -122,13 +114,7 @@ public class ViSchemeServiceImpl extends ServiceImpl<ViSchemeMapper, ViScheme> i
|
|||||||
// 找出要删的流程 itemId
|
// 找出要删的流程 itemId
|
||||||
List<String> deleteItemIds = taskSchemeMap.get(taskId).stream()
|
List<String> deleteItemIds = taskSchemeMap.get(taskId).stream()
|
||||||
.map(s -> {
|
.map(s -> {
|
||||||
String key;
|
String key = FlowSceneTypeEnum.fromCode(s.getSceneType()).getSceneCode();
|
||||||
switch (s.getSceneType()) {
|
|
||||||
case 1: key = FlowSceneTypeEnum.VI_WAKEUP_CORPUS.name(); break;
|
|
||||||
case 2: key = FlowSceneTypeEnum.VI_SINGLE_CORPUS.name(); break;
|
|
||||||
case 3: key = FlowSceneTypeEnum.VI_CONTINUOUS_CORPUS.name(); break;
|
|
||||||
default: throw new GlobalException("场景类型参数错误!");
|
|
||||||
}
|
|
||||||
return detectionItemService.selectTeDetectionItemBySceneType(key).getId();
|
return detectionItemService.selectTeDetectionItemBySceneType(key).getId();
|
||||||
})
|
})
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user