refactor(modules): 拆分多模块工程并收口common基础模块
This commit is contained in:
75
common-agent-workflow/pom.xml
Normal file
75
common-agent-workflow/pom.xml
Normal file
@@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>com.bruce</groupId>
|
||||
<artifactId>common-agent-parent</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>common-agent-workflow</artifactId>
|
||||
<name>common-agent-workflow</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.bruce</groupId>
|
||||
<artifactId>common-agent-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.bruce</groupId>
|
||||
<artifactId>common-agent-agent</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.bruce</groupId>
|
||||
<artifactId>common-agent-rag</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.bruce</groupId>
|
||||
<artifactId>common-agent-modelprovider</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.bruce</groupId>
|
||||
<artifactId>common-agent-mcp</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.bruce</groupId>
|
||||
<artifactId>common-agent-skill</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-spring-boot4-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.bruce.workflow.controller;
|
||||
|
||||
import com.bruce.common.domain.model.RequestResult;
|
||||
import com.bruce.workflow.dto.WorkflowDefinitionSaveDTO;
|
||||
import com.bruce.workflow.service.IWorkflowDefinitionService;
|
||||
import com.bruce.workflow.vo.WorkflowDefinitionVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/workflows")
|
||||
@RequiredArgsConstructor
|
||||
public class WorkflowDefinitionController {
|
||||
|
||||
private final IWorkflowDefinitionService workflowDefinitionService;
|
||||
|
||||
@GetMapping("/definitions")
|
||||
public RequestResult<List<WorkflowDefinitionVO>> list() {
|
||||
return RequestResult.success(workflowDefinitionService.listDefinitions());
|
||||
}
|
||||
|
||||
@GetMapping("/definition/detail")
|
||||
public RequestResult<WorkflowDefinitionVO> detail(@RequestParam("id") Long id) {
|
||||
return RequestResult.success(workflowDefinitionService.getDefinition(id));
|
||||
}
|
||||
|
||||
@PostMapping("/definition/save")
|
||||
public RequestResult<Boolean> save(@RequestBody WorkflowDefinitionSaveDTO request) {
|
||||
return RequestResult.success(workflowDefinitionService.saveDefinition(request));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.bruce.workflow.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Workflow 定义保存请求。
|
||||
*/
|
||||
@Data
|
||||
public class WorkflowDefinitionSaveDTO {
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long projectId;
|
||||
|
||||
private String workflowCode;
|
||||
|
||||
private String workflowName;
|
||||
|
||||
private String description;
|
||||
|
||||
private Long boundAgentId;
|
||||
|
||||
private String status;
|
||||
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.bruce.workflow.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.bruce.common.domain.model.BaseEntity;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* Studio 项目空间实体,严格映射 studio_project 表。
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("studio_project")
|
||||
@Schema(description = "Studio项目空间")
|
||||
public class StudioProject extends BaseEntity {
|
||||
|
||||
private String projectCode;
|
||||
|
||||
private String projectName;
|
||||
|
||||
private String environment;
|
||||
|
||||
private String publishStatus;
|
||||
|
||||
private String currentVersion;
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.bruce.workflow.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.bruce.common.domain.model.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* Workflow 定义实体,对应 workflow_definition 表。
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("workflow_definition")
|
||||
public class WorkflowDefinition extends BaseEntity {
|
||||
|
||||
private Long projectId;
|
||||
|
||||
private String workflowCode;
|
||||
|
||||
private String workflowName;
|
||||
|
||||
private String description;
|
||||
|
||||
private Long boundAgentId;
|
||||
|
||||
private String status;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.bruce.workflow.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.bruce.common.domain.model.BaseEntity;
|
||||
import com.bruce.common.typehandler.PgJsonbStringTypeHandler;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* Workflow 运行记录实体,对应 workflow_run 表。
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("workflow_run")
|
||||
public class WorkflowRun extends BaseEntity {
|
||||
|
||||
private String requestId;
|
||||
|
||||
private Long workflowId;
|
||||
|
||||
private Long workflowVersionId;
|
||||
|
||||
private Long agentId;
|
||||
|
||||
private String runSource;
|
||||
|
||||
private String status;
|
||||
|
||||
@TableField(typeHandler = PgJsonbStringTypeHandler.class)
|
||||
private String inputJson;
|
||||
|
||||
@TableField(typeHandler = PgJsonbStringTypeHandler.class)
|
||||
private String outputJson;
|
||||
|
||||
private Integer durationMs;
|
||||
|
||||
private BigDecimal estimatedCost;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.bruce.workflow.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.bruce.common.domain.model.BaseEntity;
|
||||
import com.bruce.common.typehandler.PgJsonbStringTypeHandler;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* Workflow 步骤日志实体,用于观测与调试。
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("workflow_run_step")
|
||||
public class WorkflowRunStep extends BaseEntity {
|
||||
|
||||
private Long runId;
|
||||
|
||||
private String nodeId;
|
||||
|
||||
private String nodeType;
|
||||
|
||||
private String nodeName;
|
||||
|
||||
private String status;
|
||||
|
||||
@TableField(typeHandler = PgJsonbStringTypeHandler.class)
|
||||
private String inputJson;
|
||||
|
||||
@TableField(typeHandler = PgJsonbStringTypeHandler.class)
|
||||
private String outputJson;
|
||||
|
||||
private Integer durationMs;
|
||||
|
||||
private String errorMessage;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.bruce.workflow.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.bruce.common.domain.model.BaseEntity;
|
||||
import com.bruce.common.typehandler.PgJsonbStringTypeHandler;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* Workflow 版本快照实体,用于持久化画布结构。
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("workflow_version")
|
||||
public class WorkflowVersion extends BaseEntity {
|
||||
|
||||
private Long workflowId;
|
||||
|
||||
private Integer versionNo;
|
||||
|
||||
private String snapshotName;
|
||||
|
||||
@TableField(typeHandler = PgJsonbStringTypeHandler.class)
|
||||
private String graphJson;
|
||||
|
||||
private String publishStatus;
|
||||
|
||||
private java.time.LocalDateTime publishedTime;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.bruce.workflow.factory;
|
||||
|
||||
import com.bruce.workflow.dto.WorkflowDefinitionSaveDTO;
|
||||
import com.bruce.workflow.entity.WorkflowDefinition;
|
||||
import com.bruce.workflow.vo.WorkflowDefinitionVO;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* WorkflowDefinitionFactory 统一处理 DTO、Entity、VO 转换,
|
||||
* 避免控制层和服务层分散手写字段映射。
|
||||
*/
|
||||
@Component
|
||||
public class WorkflowDefinitionFactory {
|
||||
|
||||
public WorkflowDefinition toEntity(WorkflowDefinitionSaveDTO dto) {
|
||||
if (dto == null) {
|
||||
return null;
|
||||
}
|
||||
WorkflowDefinition entity = new WorkflowDefinition();
|
||||
entity.setId(dto.getId());
|
||||
entity.setProjectId(dto.getProjectId());
|
||||
entity.setWorkflowCode(dto.getWorkflowCode());
|
||||
entity.setWorkflowName(dto.getWorkflowName());
|
||||
entity.setDescription(dto.getDescription());
|
||||
entity.setBoundAgentId(dto.getBoundAgentId());
|
||||
entity.setStatus(dto.getStatus());
|
||||
return entity;
|
||||
}
|
||||
|
||||
public WorkflowDefinitionVO toVO(WorkflowDefinition entity) {
|
||||
if (entity == null) {
|
||||
return null;
|
||||
}
|
||||
WorkflowDefinitionVO vo = new WorkflowDefinitionVO();
|
||||
vo.setId(entity.getId());
|
||||
vo.setWorkflowCode(entity.getWorkflowCode());
|
||||
vo.setWorkflowName(entity.getWorkflowName());
|
||||
vo.setProjectId(entity.getProjectId());
|
||||
vo.setBoundAgentId(entity.getBoundAgentId());
|
||||
vo.setStatus(entity.getStatus());
|
||||
vo.setDescription(entity.getDescription());
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.bruce.workflow.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.bruce.workflow.entity.StudioProject;
|
||||
|
||||
public interface StudioProjectMapper extends BaseMapper<StudioProject> {
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.bruce.workflow.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.bruce.workflow.entity.WorkflowDefinition;
|
||||
|
||||
public interface WorkflowDefinitionMapper extends BaseMapper<WorkflowDefinition> {
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.bruce.workflow.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.bruce.workflow.entity.WorkflowRun;
|
||||
|
||||
public interface WorkflowRunMapper extends BaseMapper<WorkflowRun> {
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.bruce.workflow.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.bruce.workflow.entity.WorkflowRunStep;
|
||||
|
||||
public interface WorkflowRunStepMapper extends BaseMapper<WorkflowRunStep> {
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.bruce.workflow.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.bruce.workflow.entity.WorkflowVersion;
|
||||
|
||||
public interface WorkflowVersionMapper extends BaseMapper<WorkflowVersion> {
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.bruce.workflow.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.bruce.workflow.dto.WorkflowDefinitionSaveDTO;
|
||||
import com.bruce.workflow.entity.WorkflowDefinition;
|
||||
import com.bruce.workflow.vo.WorkflowDefinitionVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IWorkflowDefinitionService extends IService<WorkflowDefinition> {
|
||||
|
||||
List<WorkflowDefinitionVO> listDefinitions();
|
||||
|
||||
WorkflowDefinitionVO getDefinition(Long id);
|
||||
|
||||
boolean saveDefinition(WorkflowDefinitionSaveDTO request);
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.bruce.workflow.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.bruce.workflow.dto.WorkflowDefinitionSaveDTO;
|
||||
import com.bruce.workflow.entity.WorkflowDefinition;
|
||||
import com.bruce.workflow.factory.WorkflowDefinitionFactory;
|
||||
import com.bruce.workflow.mapper.WorkflowDefinitionMapper;
|
||||
import com.bruce.workflow.service.IWorkflowDefinitionService;
|
||||
import com.bruce.workflow.vo.WorkflowDefinitionVO;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Workflow 定义服务当前先提供主数据能力,
|
||||
* 后续运行器与版本发布能力会在此基础上继续扩展。
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class WorkflowDefinitionServiceImpl extends ServiceImpl<WorkflowDefinitionMapper, WorkflowDefinition>
|
||||
implements IWorkflowDefinitionService {
|
||||
|
||||
private final WorkflowDefinitionFactory workflowDefinitionFactory;
|
||||
|
||||
@Override
|
||||
public List<WorkflowDefinitionVO> listDefinitions() {
|
||||
log.info("查询Workflow定义列表开始");
|
||||
List<WorkflowDefinitionVO> result = list().stream().map(workflowDefinitionFactory::toVO).toList();
|
||||
log.info("查询Workflow定义列表结束,count={}", result.size());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WorkflowDefinitionVO getDefinition(Long id) {
|
||||
log.info("查询Workflow定义详情开始,workflowId={}", id);
|
||||
WorkflowDefinitionVO result = workflowDefinitionFactory.toVO(getById(id));
|
||||
log.info("查询Workflow定义详情结束,workflowId={}, found={}", id, result != null);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean saveDefinition(WorkflowDefinitionSaveDTO request) {
|
||||
log.info("保存Workflow定义开始,workflowId={}, workflowCode={}", request == null ? null : request.getId(),
|
||||
request == null ? null : request.getWorkflowCode());
|
||||
boolean result = saveOrUpdate(workflowDefinitionFactory.toEntity(request));
|
||||
log.info("保存Workflow定义结束,workflowId={}, workflowCode={}, result={}",
|
||||
request == null ? null : request.getId(),
|
||||
request == null ? null : request.getWorkflowCode(),
|
||||
result);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.bruce.workflow.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* Workflow 定义详情返回对象。
|
||||
*/
|
||||
@Data
|
||||
public class WorkflowDefinitionVO {
|
||||
|
||||
private Long id;
|
||||
|
||||
private String workflowCode;
|
||||
|
||||
private String workflowName;
|
||||
|
||||
private Long projectId;
|
||||
|
||||
private Long boundAgentId;
|
||||
|
||||
private String status;
|
||||
|
||||
private String description;
|
||||
}
|
||||
Reference in New Issue
Block a user