feat: 自动识别帖子的标签,并把标签插入到数据库

This commit is contained in:
cjy 2026-01-06 10:30:54 +08:00
parent 0b7cd36b26
commit 4069fe50c3

View File

@ -137,6 +137,11 @@ func UpdateWorkImage(ctx *gin.Context) {
// service.Error(ctx, err) // service.Error(ctx, err)
// return // return
//} //}
// 处理内容中的标签:提取、验证并批量导入
if err = processContentTags(ctx, req.Content); err != nil {
service.Error(ctx, err)
return
}
newCtx := NewCtxWithUserInfo(ctx) newCtx := NewCtxWithUserInfo(ctx)
req.Source = 1 req.Source = 1
resp, err := service.CastProvider.UpdateWorkImage(newCtx, req) resp, err := service.CastProvider.UpdateWorkImage(newCtx, req)
@ -171,6 +176,72 @@ func UpdateWorkImage(ctx *gin.Context) {
return return
} }
func processContentTags(ctx *gin.Context, content string) error {
// 如果内容为空,直接返回
if content == "" {
return nil
}
// 提取标签
tags := utils.ExtractTags(content)
if len(tags) == 0 {
return nil
}
// 第一步:检查标签格式(验证标签不为空且有效)
validTags := make([]string, 0, len(tags))
for _, tag := range tags {
// 去除空白字符后检查
cleanTag := strings.TrimSpace(tag)
if cleanTag != "" {
validTags = append(validTags, cleanTag)
}
}
// 如果没有有效标签,直接返回
if len(validTags) == 0 {
return nil
}
// 第二步检查标签数量是否超过5个
if len(validTags) > 5 {
return errors.New("帖子标签数量不能超过5个")
}
fmt.Println("validTags", validTags)
// 第三步:调用 UpdateCastTagBatch 接口批量导入标签
userInfo := login.GetUserInfoFromC(ctx)
newCtx := NewCtxWithUserInfo(ctx)
// 构建批量导入请求
req := cast.UpdateCastTagBatchReq{
Data: make([]*cast.CastTagInfo, 0, len(validTags)),
}
for _, tag := range validTags {
tagInfo := &cast.CastTagInfo{
HashTag: tag,
CreatorUuid: fmt.Sprint(userInfo.ID),
CreatorName: userInfo.Name,
Source: 4, // 4: 自动标签(从内容中自动提取)
Status: 1, // 1: 有效
}
req.Data = append(req.Data, tagInfo)
}
// 调用批量导入接口
_, err := service.CastProvider.UpdateCastTagBatch(newCtx, &req)
if err != nil {
err = errors.New("批量导入标签失败")
zap.L().Error("processContentTags UpdateCastTagBatch failed", zap.Error(err))
return err
}
zap.L().Info("processContentTags success", zap.Int("tagCount", len(validTags)), zap.Strings("tags", validTags))
return nil
}
func UpdateWorkVideo(ctx *gin.Context) { func UpdateWorkVideo(ctx *gin.Context) {
var req *cast.UpdateWorkVideoReq var req *cast.UpdateWorkVideoReq
var infoResp *accountFiee.UserInfoResponse var infoResp *accountFiee.UserInfoResponse
@ -266,6 +337,11 @@ func UpdateWorkVideo(ctx *gin.Context) {
req.ArtistPhone = infoResp.TelNum req.ArtistPhone = infoResp.TelNum
req.ArtistPhoneAreaCode = infoResp.TelAreaCode req.ArtistPhoneAreaCode = infoResp.TelAreaCode
req.ArtistSubNum = infoResp.SubNum req.ArtistSubNum = infoResp.SubNum
// 处理内容中的标签:提取、验证并批量导入
if err = processContentTags(ctx, req.Content); err != nil {
service.Error(ctx, err)
return
}
newCtx := NewCtxWithUserInfo(ctx) newCtx := NewCtxWithUserInfo(ctx)
req.Source = 1 req.Source = 1
resp, err := service.CastProvider.UpdateWorkVideo(newCtx, req) resp, err := service.CastProvider.UpdateWorkVideo(newCtx, req)