Roc 2 days ago
parent
commit
f2be093593

+ 0 - 28
cache/wechat_platform.go

@@ -1,28 +0,0 @@
-package cache
-
-import (
-	"eta/eta_api/services/llm"
-	"eta/eta_api/utils"
-	"fmt"
-)
-
-// AddWechatArticleOpToCache
-// @Description: 将公众号文章操作加入缓存
-// @param wechatPlatformId
-// @param source
-// @return bool
-func AddWechatArticleOpToCache(wechatPlatformId int, source string) bool {
-	record := new(llm.WechatArticleOp)
-	record.Source = source
-	record.WechatPlatformId = wechatPlatformId
-	if utils.Re == nil {
-		err := utils.Rc.LPush(utils.CACHE_WECHAT_PLATFORM_ARTICLE, record)
-
-		utils.FileLog.Info(fmt.Sprintf("将公众号文章操作 加入缓存 AddWechatArticleOpToCache LPush: 操作类型:%s,公众号id:%d", source, wechatPlatformId))
-		if err != nil {
-			fmt.Println("AddWechatArticleOpToCache LPush Err:" + err.Error())
-		}
-		return true
-	}
-	return false
-}

+ 2 - 2
controllers/rag/abstract.go

@@ -59,12 +59,12 @@ func (c *AbstractController) List() {
 	var pars []interface{}
 
 	if keyWord != "" {
-		condition = fmt.Sprintf(` AND a.%s like ?`, rag.WechatArticleAbstractColumns.Content)
+		condition += fmt.Sprintf(` AND a.%s like ?`, rag.WechatArticleAbstractColumns.Content)
 		pars = append(pars, `%`+keyWord+`%`)
 	}
 
 	if tagId > 0 {
-		condition = fmt.Sprintf(` AND d.%s = ?`, rag.WechatPlatformTagMappingColumns.TagID)
+		condition += fmt.Sprintf(` AND d.%s = ?`, rag.WechatPlatformTagMappingColumns.TagID)
 		pars = append(pars, tagId)
 	}
 

+ 1 - 1
controllers/rag/question.go

@@ -58,7 +58,7 @@ func (c *QuestionController) List() {
 	var pars []interface{}
 
 	if keyWord != "" {
-		condition = fmt.Sprintf(` AND %s = ?`, rag.QuestionColumns.QuestionContent)
+		condition += fmt.Sprintf(` AND %s = ?`, rag.QuestionColumns.QuestionContent)
 		pars = append(pars, `%`+keyWord+`%`)
 	}
 

+ 28 - 12
controllers/rag/wechat_platform.go

@@ -2,13 +2,13 @@ package rag
 
 import (
 	"encoding/json"
-	"eta/eta_api/cache"
 	"eta/eta_api/controllers"
 	"eta/eta_api/models"
 	"eta/eta_api/models/rag"
 	"eta/eta_api/models/rag/request"
 	"eta/eta_api/models/rag/response"
 	"eta/eta_api/models/system"
+	"eta/eta_api/services/llm"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
@@ -61,7 +61,7 @@ func (c *WechatPlatformController) TagList() {
 	var pars []interface{}
 
 	if keyWord != "" {
-		condition = fmt.Sprintf(` AND %s like ?`, rag.WechatPlatformColumns.Nickname)
+		condition += fmt.Sprintf(` AND %s like ?`, rag.WechatPlatformColumns.Nickname)
 		pars = append(pars, `%`+keyWord+`%`)
 	}
 
@@ -117,7 +117,7 @@ func (c *WechatPlatformController) Add() {
 
 	var condition string
 	var pars []interface{}
-	condition = fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname)
+	condition += fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname)
 	pars = append(pars, req.Name)
 	obj := new(rag.WechatPlatform)
 	item, err := obj.GetByCondition(condition, pars)
@@ -158,7 +158,7 @@ func (c *WechatPlatformController) Add() {
 	// 异步新增公众号
 	//go llm.AddWechatPlatform(item)
 
-	go cache.AddWechatArticleOpToCache(item.WechatPlatformId, `add`)
+	go llm.AddWechatArticleOpToCache(item.WechatPlatformId, `add`)
 
 	br.Ret = 200
 	br.Success = true
@@ -203,11 +203,11 @@ func (c *WechatPlatformController) FollowList() {
 	var pars []interface{}
 
 	if keyWord != "" {
-		condition = fmt.Sprintf(` AND %s like ?`, rag.WechatPlatformColumns.Nickname)
+		condition += fmt.Sprintf(` AND %s like ?`, rag.WechatPlatformColumns.Nickname)
 		pars = append(pars, `%`+keyWord+`%`)
 	}
 
-	condition = fmt.Sprintf(` AND b.%s = ?`, rag.WechatPlatformUserMappingColumns.SysUserID)
+	condition += fmt.Sprintf(` AND b.%s = ?`, rag.WechatPlatformUserMappingColumns.SysUserID)
 	pars = append(pars, c.SysUser.AdminId)
 
 	obj := new(rag.WechatPlatformUserMapping)
@@ -262,7 +262,7 @@ func (c *WechatPlatformController) PublicList() {
 	var pars []interface{}
 
 	if keyWord != "" {
-		condition = fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname)
+		condition += fmt.Sprintf(` AND %s = ?`, rag.WechatPlatformColumns.Nickname)
 		pars = append(pars, `%`+keyWord+`%`)
 	}
 
@@ -438,7 +438,7 @@ func (c *WechatPlatformController) Refresh() {
 		return
 	}
 
-	go cache.AddWechatArticleOpToCache(wechatPlatform.WechatPlatformId, `add`)
+	go llm.AddWechatArticleOpToCache(wechatPlatform.WechatPlatformId, `add`)
 
 	br.Ret = 200
 	br.Success = true
@@ -485,16 +485,16 @@ func (c *WechatPlatformController) ArticleList() {
 	var pars []interface{}
 
 	if keyWord != "" {
-		condition = fmt.Sprintf(` AND a.%s like ?`, rag.WechatPlatformColumns.Nickname)
-		pars = append(pars, `%`+keyWord+`%`)
+		condition += fmt.Sprintf(` AND (b.%s like ? or a.%s like ? ) `, rag.WechatPlatformColumns.Nickname, rag.WechatArticleColumns.Title)
+		pars = append(pars, `%`+keyWord+`%`, `%`+keyWord+`%`)
 	}
 
 	if wechatPlatformId > 0 {
-		condition = fmt.Sprintf(` AND a.%s = ?`, rag.WechatArticleColumns.WechatPlatformID)
+		condition += fmt.Sprintf(` AND a.%s = ?`, rag.WechatArticleColumns.WechatPlatformID)
 		pars = append(pars, wechatPlatformId)
 	}
 
-	condition = fmt.Sprintf(` AND b.%s = ?`, rag.WechatPlatformColumns.Enabled)
+	condition += fmt.Sprintf(` AND b.%s = ? `, rag.WechatPlatformColumns.Enabled)
 	pars = append(pars, 1)
 
 	obj := new(rag.WechatArticle)
@@ -645,3 +645,19 @@ func (c *WechatPlatformController) ArticleDel() {
 //		llm.GenerateArticleAbstract(item)
 //	}
 //}
+
+//func init() {
+//	//obj := rag.WechatPlatform{}
+//	//item, _ := obj.GetByID(2)
+//	//fmt.Println(llm.BeachAddWechatPlatform(item))
+//
+//	obj := rag.WechatArticle{}
+//	list, _ := obj.GetListByCondition(`wechat_article_id,cover_url`, ` `, []interface{}{}, 0, 1000)
+//	//obj := rag.WechatPlatform{}
+//	//list, _ := obj.GetListByCondition(` AND wechat_platform_id !=1 `, []interface{}{}, 0, 100)
+//	//llm.ArticleToTmpFile(item.TextContent)
+//	for _, item := range list {
+//		//llm.ArticleToKnowledge(item)
+//		services.ReplaceWechatArticlePic(item)
+//	}
+//}

+ 3 - 1
models/rag/wechat_platform_user_mapping.go

@@ -54,7 +54,9 @@ type UserFollowWechatPlatform struct {
 }
 
 func (m *WechatPlatformUserMapping) GetListByCondition(condition string, pars []interface{}, startSize, pageSize int) (items []*UserFollowWechatPlatform, err error) {
-	sqlStr := fmt.Sprintf(`SELECT a.wechat_platform_id,a.fake_id,a.nickname,a.alias,a.round_head_img,a.service_type,a.signature,a.verified,a.article_link,a.enabled,a.sys_user_id,a.modify_time,a.create_time,b.sys_user_id as follow_user_id FROM wechat_platform a JOIN wechat_platform_user_mapping b on a.wechat_platform_id=b.wechat_platform_id WHERE 1=1 %s LIMIT ?,?`, condition)
+	sqlStr := fmt.Sprintf(`SELECT a.wechat_platform_id,a.fake_id,a.nickname,a.alias,a.round_head_img,a.service_type,a.signature,a.verified,a.article_link,a.enabled,a.sys_user_id,a.modify_time,a.create_time,b.sys_user_id as follow_user_id FROM wechat_platform a 
+    JOIN wechat_platform_user_mapping b on a.wechat_platform_id=b.wechat_platform_id 
+                                                                                                                                                                                                                   WHERE 1=1 %s LIMIT ?,?`, condition)
 	pars = append(pars, startSize, pageSize)
 	err = global.DbMap[utils.DbNameAI].Raw(sqlStr, pars...).Find(&items).Error
 

+ 77 - 0
services/llm.go

@@ -0,0 +1,77 @@
+package services
+
+import (
+	"eta/eta_api/models/rag"
+	"eta/eta_api/utils"
+	"fmt"
+	"os"
+	"path"
+	"time"
+)
+
+func ReplaceWechatPlatformPic(item *rag.WechatPlatform) {
+	var err error
+	defer func() {
+		if err != nil {
+			utils.FileLog.Error("替换公众号头像失败,err:%v", err)
+			fmt.Println("替换公众号头像失败,err:", err)
+		}
+	}()
+	if item.RoundHeadImg == `` {
+		return
+	}
+	resourceUrl, err := downloadWxPicAndUploadToOss(item.RoundHeadImg)
+	if err != nil {
+		return
+	}
+	item.RoundHeadImg = resourceUrl
+	err = item.Update([]string{"round_head_img"})
+
+}
+
+func ReplaceWechatArticlePic(item *rag.WechatArticle) {
+	var err error
+	defer func() {
+		if err != nil {
+			utils.FileLog.Error("替换公众号头像失败,err:%v", err)
+			fmt.Println("替换公众号头像失败,err:", err)
+		}
+	}()
+	if item.CoverUrl == `` {
+		return
+	}
+	resourceUrl, err := downloadWxPicAndUploadToOss(item.CoverUrl)
+	if err != nil {
+		return
+	}
+	item.CoverUrl = resourceUrl
+	err = item.Update([]string{"cover_url"})
+
+}
+
+func downloadWxPicAndUploadToOss(wxPicUrl string) (resourceUrl string, err error) {
+	localFilePath, err := utils.DownloadWxImage(wxPicUrl)
+	if err != nil {
+		return
+	}
+	defer func() {
+		os.Remove(localFilePath)
+	}()
+	ossClient := NewOssClient()
+	if ossClient == nil {
+		err = fmt.Errorf(`初始化OSS服务失败`)
+		return
+	}
+	ext := path.Ext(localFilePath)
+	randStr := utils.GetRandStringNoSpecialChar(28)
+	fileName := randStr + ext
+	savePath := utils.UploadDir + `wx/wx_article/` + time.Now().Format("200601/20060102/") + fileName
+	resourceUrl, err = ossClient.UploadFile(fileName, localFilePath, savePath)
+	if err != nil {
+		err = fmt.Errorf("文件上传失败,Err:" + err.Error())
+		return
+	}
+
+	return
+
+}

+ 48 - 0
services/llm/cache.go

@@ -0,0 +1,48 @@
+package llm
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+)
+
+// AddWechatArticleOpToCache
+// @Description: 将公众号文章操作加入缓存
+// @param wechatPlatformId
+// @param source
+// @return bool
+func AddWechatArticleOpToCache(wechatPlatformId int, source string) bool {
+	record := new(WechatArticleOp)
+	record.Source = source
+	record.WechatPlatformId = wechatPlatformId
+	if utils.Re == nil {
+		err := utils.Rc.LPush(utils.CACHE_WECHAT_PLATFORM_ARTICLE, record)
+
+		utils.FileLog.Info(fmt.Sprintf("将公众号文章操作 加入缓存 AddWechatArticleOpToCache LPush: 操作类型:%s,公众号id:%d", source, wechatPlatformId))
+		if err != nil {
+			fmt.Println("AddWechatArticleOpToCache LPush Err:" + err.Error())
+		}
+		return true
+	}
+	return false
+}
+
+// AddWechatArticleLlmOpToCache
+// @Description: 将公众号文章llm操作加入缓存
+// @param wechatPlatformId
+// @param source
+// @return bool
+func AddWechatArticleLlmOpToCache(wechatPlatformId int, source string) bool {
+	record := new(WechatArticleOp)
+	record.Source = source
+	record.WechatPlatformId = wechatPlatformId
+	if utils.Re == nil {
+		err := utils.Rc.LPush(utils.CACHE_WECHAT_PLATFORM_ARTICLE_KNOWLEDGE, record)
+
+		utils.FileLog.Info(fmt.Sprintf("将公众号文章llm操作加入缓存 加入缓存 AddWechatArticleLlmOpToCache LPush: 操作类型:%s,公众号id:%d", source, wechatPlatformId))
+		if err != nil {
+			fmt.Println("AddWechatArticleOpToCache LPush Err:" + err.Error())
+		}
+		return true
+	}
+	return false
+}

+ 0 - 21
services/llm/wechat_platform.go

@@ -167,27 +167,6 @@ func AddWechatArticle(item *rag.WechatPlatform, articleLink string, articleDetai
 
 }
 
-// AddWechatArticleLlmOpToCache
-// @Description: 将公众号文章llm操作加入缓存
-// @param wechatPlatformId
-// @param source
-// @return bool
-func AddWechatArticleLlmOpToCache(wechatPlatformId int, source string) bool {
-	record := new(WechatArticleOp)
-	record.Source = source
-	record.WechatPlatformId = wechatPlatformId
-	if utils.Re == nil {
-		err := utils.Rc.LPush(utils.CACHE_WECHAT_PLATFORM_ARTICLE_KNOWLEDGE, record)
-
-		utils.FileLog.Info(fmt.Sprintf("将公众号文章llm操作加入缓存 加入缓存 AddWechatArticleLlmOpToCache LPush: 操作类型:%s,公众号id:%d", source, wechatPlatformId))
-		if err != nil {
-			fmt.Println("AddWechatArticleOpToCache LPush Err:" + err.Error())
-		}
-		return true
-	}
-	return false
-}
-
 // BeachAddWechatArticle
 // @Description: 批量添加公众号文章
 // @param item

+ 1 - 0
services/task.go

@@ -64,6 +64,7 @@ func Task() {
 		go binlog.HandleDataSourceChange2Es()
 	}
 	go StartSessionManager()
+
 	go llm.SaveAllChatRecordsToDB()
 
 	// 定时任务进行微信文章操作

+ 55 - 0
utils/common.go

@@ -329,6 +329,61 @@ func DownloadImage(imgUrl string) (filePath string, err error) {
 	return
 }
 
+// 下载图片
+func DownloadWxImage(imgUrl string) (filePath string, err error) {
+	imgPath := "./static/imgs/"
+	ext, err := GetFileExtensionFromURL(imgUrl)
+	if err != nil {
+		return
+	}
+	randStr := GetRandStringNoSpecialChar(28)
+	fileName := randStr + `.` + ext
+
+	res, err := http.Get(imgUrl)
+	if err != nil {
+		fmt.Println("A error occurred!")
+		return
+	}
+	defer res.Body.Close()
+	// 获得get请求响应的reader对象
+	reader := bufio.NewReaderSize(res.Body, 32*1024)
+
+	filePath = imgPath + fileName
+	file, err := os.Create(filePath)
+	if err != nil {
+		return
+	}
+	defer func() {
+		file.Close()
+	}()
+	// 获得文件的writer对象
+	writer := bufio.NewWriter(file)
+
+	written, _ := io.Copy(writer, reader)
+	fmt.Printf("Total length: %d \n", written)
+	return
+}
+
+// GetFileExtensionFromURL extracts the file extension from a URL query parameter wx_fmt
+func GetFileExtensionFromURL(rawURL string) (string, error) {
+	parsedURL, err := url.Parse(rawURL)
+	if err != nil {
+		return "", err
+	}
+
+	queryParams, err := url.ParseQuery(parsedURL.RawQuery)
+	if err != nil {
+		return "", err
+	}
+
+	wx_fmtValues, exists := queryParams["wx_fmt"]
+	if !exists || len(wx_fmtValues) == 0 {
+		return "", fmt.Errorf("wx_fmt parameter not found in URL")
+	}
+
+	return wx_fmtValues[0], nil
+}
+
 // DownloadFile 下载文件
 func DownloadFile(fileUrl, fileDir string) (filePath string, err error) {
 	filePathDir := "./static/imgs/"