package skill import ( skillDao "ai-agent/workflow/dao/skill" skillDto "ai-agent/workflow/model/dto/skill" "ai-agent/workflow/model/entity" "context" "fmt" "path/filepath" "strings" "gitea.com/red-future/common/beans" commonHttp "gitea.com/red-future/common/http" "gitea.com/red-future/common/utils" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/util/gconv" ) var SkillUserService = &skillUserService{} type skillUserService struct{} // IsAdmin 调用admin-go服务检查是否是管理员 func IsAdmin(ctx context.Context) (res bool, err error) { headers := make(map[string]string) if r := g.RequestFromCtx(ctx); r != nil { for k, v := range r.Request.Header { if len(v) > 0 { headers[k] = v[0] } } } var r = make(map[string]bool) if err = commonHttp.Get(ctx, "admin-go/api/v1/system/user/checkIsSuperAdmin", headers, &r); err != nil { return false, err } return r["isSuperAdmin"], err } func (s *skillUserService) Create(ctx context.Context, req *skillDto.CreateSkillUserReq) (res *skillDto.CreateSkillUserRes, err error) { ext := strings.TrimPrefix(filepath.Ext(req.FileUrl), ".") if ext != "zip" { return nil, fmt.Errorf("文件格式不支持,请上传zip格式文件") } admin, err := IsAdmin(ctx) if err != nil { return } var id int64 if admin { var count int count, err = skillDao.SkillTemplateDao.Count(ctx, &skillDto.GetSkillTemplateReq{ Name: req.Name, }) if err != nil { return nil, err } if count > 0 { return nil, fmt.Errorf("技能名称 %s 已存在", req.Name) } id, err = skillDao.SkillTemplateDao.Insert(ctx, &skillDto.CreateSkillTemplateReq{ Name: req.Name, Description: req.Description, FileName: req.FileName, FileUrl: req.FileUrl, }) } else { var user *beans.User user, err = utils.GetUserInfo(ctx) if err != nil { return nil, err } var count int count, err = skillDao.SkillUserDao.Count(ctx, &skillDto.GetSkillUserReq{ Name: req.Name, Creator: user.UserName, }) if err != nil { return nil, err } if count > 0 { return nil, fmt.Errorf("技能名称 %s 已存在", req.Name) } id, err = skillDao.SkillUserDao.Insert(ctx, req) } return &skillDto.CreateSkillUserRes{Id: id}, err } func (s *skillUserService) Update(ctx context.Context, req *skillDto.UpdateSkillUserReq) (err error) { ext := strings.TrimPrefix(filepath.Ext(req.FileUrl), ".") if ext != "zip" { return fmt.Errorf("文件格式不支持,请上传zip格式文件") } admin, err := IsAdmin(ctx) if err != nil { return } if admin { var count int count, err = skillDao.SkillTemplateDao.Count(ctx, &skillDto.GetSkillTemplateReq{ NotInId: req.Id, Name: req.Name, }) if err != nil { return err } if count > 0 { return fmt.Errorf("技能名称 %s 已存在", req.Name) } _, err = skillDao.SkillTemplateDao.Update(ctx, &skillDto.UpdateSkillTemplateReq{ Id: req.Id, Name: req.Name, Description: req.Description, FileName: req.FileName, FileUrl: req.FileUrl, }) } else { var user *beans.User user, err = utils.GetUserInfo(ctx) if err != nil { return err } var count int count, err = skillDao.SkillUserDao.Count(ctx, &skillDto.GetSkillUserReq{ NotInId: req.Id, Name: req.Name, Creator: user.UserName, }) if err != nil { return err } if count > 0 { return fmt.Errorf("技能名称 %s 已存在", req.Name) } _, err = skillDao.SkillUserDao.Update(ctx, req) } return err } func (s *skillUserService) Delete(ctx context.Context, req *skillDto.DeleteSkillUserReq) (err error) { admin, err := IsAdmin(ctx) if err != nil { return } if admin { _, err = skillDao.SkillTemplateDao.Delete(ctx, &skillDto.DeleteSkillTemplateReq{ Id: req.Id, }) } else { _, err = skillDao.SkillUserDao.Delete(ctx, req) } return } func (s *skillUserService) Get(ctx context.Context, req *skillDto.GetSkillUserReq) (res *skillDto.SkillUserVO, err error) { admin, err := IsAdmin(ctx) if err != nil { return } if admin { var list *entity.SkillTemplate list, err = skillDao.SkillTemplateDao.Get(ctx, &skillDto.GetSkillTemplateReq{ Id: req.Id, }) if err != nil { return nil, err } res = &skillDto.SkillUserVO{} res.ImgAddressPrefix, err = utils.GetFileAddressPrefix(ctx) if err != nil { return nil, err } err = gconv.Struct(list, &res) return } user, err := utils.GetUserInfo(ctx) if err != nil { return } req.Creator = user.UserName list, err := skillDao.SkillUserDao.Get(ctx, &skillDto.GetSkillUserReq{ Id: req.Id, }) if err != nil { return nil, err } res = &skillDto.SkillUserVO{} res.ImgAddressPrefix, err = utils.GetFileAddressPrefix(ctx) if err != nil { return nil, err } err = gconv.Struct(list, &res) return } func (s *skillUserService) List(ctx context.Context, req *skillDto.ListSkillReq) (res *skillDto.ListSkillUserRes, err error) { admin, err := IsAdmin(ctx) if err != nil { return } if admin { var total int var list []*entity.SkillTemplate list, total, err = skillDao.SkillTemplateDao.List(ctx, &skillDto.ListSkillTemplateReq{ Keyword: req.Keyword, Page: req.Page, }) if err != nil { return nil, err } res = &skillDto.ListSkillUserRes{ Total: total, } err = gconv.Struct(list, &res.List) return } user, err := utils.GetUserInfo(ctx) if err != nil { return } req.Creator = user.UserName list, total, err := skillDao.SkillUserDao.List(ctx, &skillDto.ListSkillUserReq{ Keyword: req.Keyword, Creator: req.Creator, Page: req.Page, }) if err != nil { return nil, err } res = &skillDto.ListSkillUserRes{ Total: total, } err = gconv.Struct(list, &res.List) return } func (s *skillUserService) ListUser(ctx context.Context, req *skillDto.ListSkillUserReq) (res *skillDto.ListSkillUserRes, err error) { user, err := utils.GetUserInfo(ctx) if err != nil { return } req.Creator = user.UserName list, total, err := skillDao.SkillUserDao.List(ctx, req) if err != nil { return nil, err } res = &skillDto.ListSkillUserRes{ Total: total, } err = gconv.Struct(list, &res.List) return } func (s *skillUserService) GetUserOrTemplate(ctx context.Context, req *skillDto.GetSkillReq) (res *skillDto.SkillUserVO, err error) { var list *entity.SkillTemplate list, err = skillDao.SkillTemplateDao.Get(ctx, &skillDto.GetSkillTemplateReq{ Id: req.Id, Name: req.Name, }) if err != nil { return nil, err } if !g.IsEmpty(list) { res = &skillDto.SkillUserVO{} res.ImgAddressPrefix, err = utils.GetFileAddressPrefix(ctx) if err != nil { return nil, err } err = gconv.Struct(list, &res) return } user, err := utils.GetUserInfo(ctx) if err != nil { return } req.Creator = user.UserName var userList *entity.SkillUser userList, err = skillDao.SkillUserDao.Get(ctx, &skillDto.GetSkillUserReq{ Id: req.Id, Creator: user.UserName, Name: req.Name, }) if err != nil { return nil, err } res = &skillDto.SkillUserVO{} res.ImgAddressPrefix, err = utils.GetFileAddressPrefix(ctx) if err != nil { return nil, err } err = gconv.Struct(userList, &res) return }