301 lines
7.1 KiB
Go
301 lines
7.1 KiB
Go
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.redpowerfuture.com/red-future/common/beans"
|
|
commonHttp "gitea.redpowerfuture.com/red-future/common/http"
|
|
"gitea.redpowerfuture.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
|
|
}
|