package session import ( "ai-agent/workflow/consts/public" sessionDto "ai-agent/workflow/model/dto/session" "ai-agent/workflow/model/entity" "context" "gitea.redpowerfuture.com/red-future/common/beans" "gitea.redpowerfuture.com/red-future/common/db/gfdb" "github.com/gogf/gf/v2/util/gconv" ) var ExecWorkflowResultDao = &execWorkflowResultDao{} type execWorkflowResultDao struct{} func (d *execWorkflowResultDao) Insert(ctx context.Context, req *sessionDto.CreateWorkflowResultReq) (id int64, err error) { var s = new(entity.ExecWorkflowResult) if err = gconv.Struct(req, &s); err != nil { return } r, err := gfdb.DB(ctx, public.DbNameBlackDeacon).Model(ctx, public.TableNameExecWorkflowResult).Insert(s) if err != nil { return } return r.LastInsertId() } func (d *execWorkflowResultDao) BatchInsert(ctx context.Context, req []*sessionDto.CreateWorkflowResultReq) (rows int64, err error) { var res []*entity.ExecWorkflowResult if err = gconv.Structs(req, &res); err != nil { return } r, err := gfdb.DB(ctx, public.DbNameBlackDeacon).Model(ctx, public.TableNameExecWorkflowResult).Data(res).Save() if err != nil { return } return r.RowsAffected() } func (d *execWorkflowResultDao) Delete(ctx context.Context, req *sessionDto.DeleteWorkflowResultReq) (rows int64, err error) { r, err := gfdb.DB(ctx, public.DbNameBlackDeacon).Model(ctx, public.TableNameExecWorkflowResult).Where(entity.ExecWorkflowResultCol.Id, req.Id).Delete() if err != nil { return } return r.RowsAffected() } func (d *execWorkflowResultDao) List(ctx context.Context, creator string, page *beans.Page) (res []*entity.ExecWorkflowResult, total int, err error) { m := gfdb.DB(ctx, public.DbNameBlackDeacon).Model(ctx, public.TableNameExecWorkflowResult). Where(entity.ExecWorkflowResultCol.Creator, creator) m.OrderDesc(entity.ExecWorkflowResultCol.CreatedAt) if page != nil { m.Page(int(page.PageNum), int(page.PageSize)) } r, total, err := m.AllAndCount(false) if err != nil { return } err = r.Structs(&res) return } // ListBySession 查询会话下工作流结果(按创建时间倒序) func (d *execWorkflowResultDao) ListBySession(ctx context.Context, sessionId string) (res []*entity.ExecWorkflowResult, err error) { r, err := gfdb.DB(ctx, public.DbNameBlackDeacon).Model(ctx, public.TableNameExecWorkflowResult). Where(entity.ExecWorkflowResultCol.SessionId, sessionId). OrderDesc(entity.ExecWorkflowResultCol.CreatedAt). All() if err != nil { return } err = r.Structs(&res) return } // ListByExecId 查询指定工作流执行记录下的结果文件路径 func (d *execWorkflowResultDao) ListByExecId(ctx context.Context, execId int64) (res []*entity.ExecWorkflowResult, err error) { r, err := gfdb.DB(ctx, public.DbNameBlackDeacon).Model(ctx, public.TableNameExecWorkflowResult). Where(entity.ExecWorkflowResultCol.ExecId, execId). All() if err != nil { return } err = r.Structs(&res) return } // ListDates 按创建人查询去重后的创建日期(倒序,支持分页;page 为 nil 返回全部日期) func (d *execWorkflowResultDao) ListDates(ctx context.Context, creator string, page *beans.Page) (dates []string, err error) { fieldAlias := "create_date" m := gfdb.DB(ctx, public.DbNameBlackDeacon).Model(ctx, public.TableNameExecWorkflowResult). Fields("DATE("+entity.ExecWorkflowResultCol.CreatedAt+") AS "+fieldAlias). Where(entity.ExecWorkflowResultCol.Creator, creator). Group("DATE(" + entity.ExecWorkflowResultCol.CreatedAt + ")"). OrderDesc(fieldAlias) if page != nil { m.Page(int(page.PageNum), int(page.PageSize)) } r, err := m.All() if err != nil { return nil, err } for _, rec := range r { dates = append(dates, rec[fieldAlias].String()) } return dates, nil } // ListByDates 按创建人查询指定创建日期(DATE(created_at) 命中)内的结果记录,按创建时间倒序 func (d *execWorkflowResultDao) ListByDates(ctx context.Context, creator string, dates []string) (res []*entity.ExecWorkflowResult, err error) { if len(dates) == 0 { return } r, err := gfdb.DB(ctx, public.DbNameBlackDeacon).Model(ctx, public.TableNameExecWorkflowResult). Where(entity.ExecWorkflowResultCol.Creator, creator). WhereIn("DATE(created_at)", dates). OrderDesc(entity.ExecWorkflowResultCol.CreatedAt). All() if err != nil { return } err = r.Structs(&res) return }