Files
ai-agent/workflow/service/node/node_prompt_service.go
qhd 03c95c3601 feat: 新增主动拉取与多类型回调功能
- 新增 ActivePull 实体、DAO、DTO 及 Service,支持主动拉取任务管理
- 新增 ComposeCallback、VideoCallback、HttpNodeCallback 多类型回调接口
- FlowExecution 增加 NodeGroupId 和 TotalTokens 字段,支持节点组追踪与 Token 统计
- ExecutedNodes 结构由字符串列表改为包含执行状态的节点对象列表
- 重构回调通知机制,统一 Notify 函数调用
- 优化输出项类型判断逻辑,新增文件类型标识
2026-06-10 14:23:55 +08:00

124 lines
3.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package node
import (
"ai-agent/workflow/consts/node"
nodeDao "ai-agent/workflow/dao/node"
nodeDto "ai-agent/workflow/model/dto/node"
"ai-agent/workflow/service"
"context"
"gitea.com/red-future/common/utils"
"github.com/gogf/gf/v2/frame/g"
)
var NodePromptService = &nodePromptService{}
type nodePromptService struct{}
// Create 创建节点提示词
func (s *nodePromptService) Create(ctx context.Context, req *nodeDto.CreateNodePromptReq) (res *nodeDto.CreateNodePromptRes, err error) {
user, err := utils.GetUserInfo(ctx)
if err != nil {
return nil, err
}
get, err := nodeDao.NodePromptDao.Get(ctx, &nodeDto.GetNodePromptReq{Prompt: req.Prompt, Creator: user.UserName})
if err != nil {
return
}
if g.IsEmpty(get) {
var isAdmin bool
isAdmin, err = service.UtilService.IsAdmin(ctx)
if err != nil {
return
}
if isAdmin {
req.SourceType = node.SourceTypeSystem.Code()
} else {
req.SourceType = node.SourceTypeUser.Code()
}
var id int64
id, err = nodeDao.NodePromptDao.Insert(ctx, req)
if err != nil {
return
}
return &nodeDto.CreateNodePromptRes{Id: id}, err
}
return
}
// Update 更新节点提示词
func (s *nodePromptService) Update(ctx context.Context, req *nodeDto.UpdateNodePromptReq) (err error) {
get, err := nodeDao.NodePromptDao.Get(ctx, &nodeDto.GetNodePromptReq{Id: req.Id})
if err != nil {
return
}
isAdmin, err := service.UtilService.IsAdmin(ctx)
if err != nil {
return
}
if !isAdmin && get.SourceType == node.SourceTypeSystem.Code() {
_, err = s.Create(ctx, &nodeDto.CreateNodePromptReq{
NodeType: req.NodeType,
Prompt: req.Prompt,
})
} else {
_, err = nodeDao.NodePromptDao.Update(ctx, req)
}
return
}
// Delete 删除节点提示词
func (s *nodePromptService) Delete(ctx context.Context, req *nodeDto.DeleteNodePromptReq) (err error) {
_, err = nodeDao.NodePromptDao.Delete(ctx, req)
return
}
// GetById 根据ID查询节点提示词
func (s *nodePromptService) GetById(ctx context.Context, req *nodeDto.GetNodePromptReq) (res *nodeDto.NodePromptResp, err error) {
r, err := nodeDao.NodePromptDao.Get(ctx, req)
if err != nil {
return nil, err
}
res = &nodeDto.NodePromptResp{
NodePrompt: r,
}
return
}
// ListMy 查询当前创建人自己创建的提示词列表
func (s *nodePromptService) ListMy(ctx context.Context, req *nodeDto.ListMyNodePromptReq) (*nodeDto.ListNodePromptResp, error) {
user, err := utils.GetUserInfo(ctx)
if err != nil {
return nil, err
}
req.Creator = user.UserName
list, total, err := nodeDao.NodePromptDao.ListByOnlyCreator(ctx, req)
if err != nil {
return nil, err
}
return &nodeDto.ListNodePromptResp{
List: list,
Total: total,
}, nil
}
// ListWithSystem 查询当前创建人+系统的提示词列表
func (s *nodePromptService) ListWithSystem(ctx context.Context, req *nodeDto.ListNodePromptReq) (*nodeDto.ListNodePromptResp, error) {
user, err := utils.GetUserInfo(ctx)
if err != nil {
return nil, err
}
// 如果请求中没有传creator使用当前用户
if g.IsEmpty(req.Creator) {
req.Creator = user.UserName
}
list, total, err := nodeDao.NodePromptDao.ListByCreator(ctx, req)
if err != nil {
return nil, err
}
return &nodeDto.ListNodePromptResp{
List: list,
Total: total,
}, nil
}