feat(ai-web): 将任务模板信息固化到任务对象中
保证每个任务对象都有对应的模板信息可以追溯,不会随着模板被修改而失效
This commit is contained in:
@@ -35,14 +35,18 @@ create table hudi_collect_build_b12.service_ai_file
|
|||||||
|
|
||||||
create table hudi_collect_build_b12.service_ai_flow_task
|
create table hudi_collect_build_b12.service_ai_flow_task
|
||||||
(
|
(
|
||||||
id bigint not null comment '记录唯一标记',
|
id bigint not null comment '记录唯一标记',
|
||||||
created_time datetime(6) comment '记录创建时间',
|
created_time datetime(6) comment '记录创建时间',
|
||||||
modified_time datetime(6) comment '记录更新时间',
|
modified_time datetime(6) comment '记录更新时间',
|
||||||
error longtext comment '任务运行产生的报错',
|
comment text comment '任务注释,用于额外说明',
|
||||||
input longtext comment '任务输入',
|
error longtext comment '任务运行产生的报错',
|
||||||
result longtext comment '任务运行结果',
|
input longtext comment '任务输入',
|
||||||
status enum ('ERROR','FINISHED','RUNNING') not null comment '任务运行状态',
|
result longtext comment '任务运行结果',
|
||||||
template_id bigint not null comment '流程任务对应的模板',
|
status enum ('ERROR','FINISHED','RUNNING') not null comment '任务运行状态',
|
||||||
|
template_description varchar(255) comment '任务对应的模板功能、内容说明',
|
||||||
|
template_flow_graph longtext not null comment '任务对应的模板前端流程图数据',
|
||||||
|
template_input_schema longtext not null comment '任务对应的模板入参Schema',
|
||||||
|
template_name varchar(255) not null comment '任务对应的模板名称',
|
||||||
primary key (id)
|
primary key (id)
|
||||||
) comment ='流程任务记录' charset = utf8mb4;
|
) comment ='流程任务记录' charset = utf8mb4;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import java.util.Map;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.mapstruct.Mapping;
|
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -37,17 +36,26 @@ public class TaskController extends SimpleControllerSupport<FlowTask, TaskContro
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("input_data/{id}")
|
@GetMapping("input_data/{id}")
|
||||||
public AmisResponse<?> getInputSchema(@PathVariable("id") Long id) throws JsonProcessingException {
|
public AmisResponse<?> getInputData(@PathVariable("id") Long id) throws JsonProcessingException {
|
||||||
var task = flowTaskService.detailOrThrow(id);
|
var task = flowTaskService.detailOrThrow(id);
|
||||||
return AmisResponse.responseSuccess(mapper.readValue(task.getInput(), Map.class));
|
return AmisResponse.responseSuccess(mapper.readValue(task.getInput(), Map.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("input_schema/{id}")
|
||||||
|
public AmisResponse<?> getInputSchema(@PathVariable("id") Long id) throws JsonProcessingException {
|
||||||
|
var task = flowTaskService.detailOrThrow(id);
|
||||||
|
return AmisResponse.responseSuccess(mapper.readValue(task.getTemplateInputSchema(), Map.class));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected SaveItemMapper<FlowTask, SaveItem> saveItemMapper() {
|
protected SaveItemMapper<FlowTask, SaveItem> saveItemMapper() {
|
||||||
return item -> {
|
return item -> {
|
||||||
FlowTask task = new FlowTask();
|
FlowTask task = new FlowTask();
|
||||||
FlowTaskTemplate template = flowTaskTemplateService.detailOrThrow(item.getTemplateId());
|
FlowTaskTemplate template = flowTaskTemplateService.detailOrThrow(item.getTemplateId());
|
||||||
task.setTemplate(template);
|
task.setTemplateName(template.getName());
|
||||||
|
task.setTemplateDescription(template.getDescription());
|
||||||
|
task.setTemplateInputSchema(template.getInputSchema());
|
||||||
|
task.setTemplateFlowGraph(template.getFlowGraph());
|
||||||
task.setInput(mapper.writeValueAsString(item.getInput()));
|
task.setInput(mapper.writeValueAsString(item.getInput()));
|
||||||
return task;
|
return task;
|
||||||
};
|
};
|
||||||
@@ -74,14 +82,11 @@ public class TaskController extends SimpleControllerSupport<FlowTask, TaskContro
|
|||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
public static class ListItem extends SimpleItem {
|
public static class ListItem extends SimpleItem {
|
||||||
private Long templateId;
|
|
||||||
private String templateName;
|
private String templateName;
|
||||||
private FlowTask.Status status;
|
private FlowTask.Status status;
|
||||||
|
|
||||||
@org.mapstruct.Mapper
|
@org.mapstruct.Mapper
|
||||||
public static abstract class Mapper {
|
public static abstract class Mapper {
|
||||||
@Mapping(target = "templateId", source = "task.template.id")
|
|
||||||
@Mapping(target = "templateName", source = "task.template.name")
|
|
||||||
public abstract ListItem from(FlowTask task);
|
public abstract ListItem from(FlowTask task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -94,8 +99,6 @@ public class TaskController extends SimpleControllerSupport<FlowTask, TaskContro
|
|||||||
|
|
||||||
@org.mapstruct.Mapper
|
@org.mapstruct.Mapper
|
||||||
public static abstract class Mapper extends ListItem.Mapper {
|
public static abstract class Mapper extends ListItem.Mapper {
|
||||||
@Mapping(target = "templateId", source = "task.template.id")
|
|
||||||
@Mapping(target = "templateName", source = "task.template.name")
|
|
||||||
public abstract DetailItem from(FlowTask task);
|
public abstract DetailItem from(FlowTask task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,14 +3,10 @@ package com.lanyuanxiaoyao.service.ai.web.entity;
|
|||||||
import com.lanyuanxiaoyao.service.ai.web.base.entity.SimpleEntity;
|
import com.lanyuanxiaoyao.service.ai.web.base.entity.SimpleEntity;
|
||||||
import com.lanyuanxiaoyao.service.common.Constants;
|
import com.lanyuanxiaoyao.service.common.Constants;
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.ConstraintMode;
|
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import jakarta.persistence.EntityListeners;
|
import jakarta.persistence.EntityListeners;
|
||||||
import jakarta.persistence.EnumType;
|
import jakarta.persistence.EnumType;
|
||||||
import jakarta.persistence.Enumerated;
|
import jakarta.persistence.Enumerated;
|
||||||
import jakarta.persistence.ForeignKey;
|
|
||||||
import jakarta.persistence.JoinColumn;
|
|
||||||
import jakarta.persistence.ManyToOne;
|
|
||||||
import jakarta.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
@@ -28,10 +24,23 @@ import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
|||||||
@Table(catalog = Constants.DATABASE_NAME, name = "service_ai_flow_task")
|
@Table(catalog = Constants.DATABASE_NAME, name = "service_ai_flow_task")
|
||||||
@Comment("流程任务记录")
|
@Comment("流程任务记录")
|
||||||
public class FlowTask extends SimpleEntity {
|
public class FlowTask extends SimpleEntity {
|
||||||
@Comment("流程任务对应的模板")
|
// 每个任务对应的模板都是唯一,避免模板修改之后任务的状态、运行等状态都无法展示
|
||||||
@ManyToOne
|
// 不管允许不允许任务重跑,这些都要保存下来
|
||||||
@JoinColumn(nullable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
|
@Comment("任务对应的模板名称")
|
||||||
private FlowTaskTemplate template;
|
@Column(nullable = false)
|
||||||
|
private String templateName;
|
||||||
|
@Comment("任务对应的模板功能、内容说明")
|
||||||
|
private String templateDescription;
|
||||||
|
@Comment("任务对应的模板入参Schema")
|
||||||
|
@Column(nullable = false, columnDefinition = "longtext")
|
||||||
|
private String templateInputSchema;
|
||||||
|
@Comment("任务对应的模板前端流程图数据")
|
||||||
|
@Column(nullable = false, columnDefinition = "longtext")
|
||||||
|
private String templateFlowGraph = "{}";
|
||||||
|
|
||||||
|
@Comment("任务注释,用于额外说明")
|
||||||
|
@Column(columnDefinition = "text")
|
||||||
|
private String comment;
|
||||||
@Comment("任务输入")
|
@Comment("任务输入")
|
||||||
@Column(columnDefinition = "longtext")
|
@Column(columnDefinition = "longtext")
|
||||||
private String input;
|
private String input;
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ const FlowTask: React.FC = () => {
|
|||||||
type: 'service',
|
type: 'service',
|
||||||
schemaApi: {
|
schemaApi: {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
url: `${commonInfo.baseAiUrl}/flow_task/template/input_schema/\${templateId}`,
|
url: `${commonInfo.baseAiUrl}/flow_task/input_schema/\${id}`,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
adaptor: (payload, response, api, context) => {
|
adaptor: (payload, response, api, context) => {
|
||||||
return {
|
return {
|
||||||
@@ -131,12 +131,6 @@ const FlowTask: React.FC = () => {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: 'action',
|
|
||||||
label: '重新执行',
|
|
||||||
level: 'link',
|
|
||||||
size: 'sm',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
type: 'action',
|
type: 'action',
|
||||||
label: '删除',
|
label: '删除',
|
||||||
|
|||||||
Reference in New Issue
Block a user