Roc 2 weeks ago
parent
commit
dbd0364af9

+ 43 - 66
controllers/llm/abstract.go

@@ -9,11 +9,10 @@ import (
 	"eta/eta_api/models/rag/request"
 	"eta/eta_api/models/rag/response"
 	"eta/eta_api/services"
+	"eta/eta_api/services/elastic"
 	"eta/eta_api/utils"
 	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
-	"strings"
-	"time"
 )
 
 // AbstractController
@@ -57,28 +56,48 @@ func (c *AbstractController) List() {
 	}
 	startSize = utils.StartIndex(currentIndex, pageSize)
 
-	var condition string
-	var pars []interface{}
+	var total int
+	viewList := make([]rag.WechatArticleAbstractView, 0)
 
-	if keyWord != "" {
-		condition += fmt.Sprintf(` AND a.%s like ?`, rag.WechatArticleAbstractColumns.Content)
-		pars = append(pars, `%`+keyWord+`%`)
-	}
+	if keyWord == `` {
+		var condition string
+		var pars []interface{}
 
-	if tagId > 0 {
-		condition += fmt.Sprintf(` AND d.%s = ?`, rag.WechatPlatformTagMappingColumns.TagID)
-		pars = append(pars, tagId)
-	}
+		if keyWord != "" {
+			condition += fmt.Sprintf(` AND a.%s like ?`, rag.WechatArticleAbstractColumns.Content)
+			pars = append(pars, `%`+keyWord+`%`)
+		}
 
-	obj := new(rag.WechatArticleAbstract)
-	total, list, err := obj.GetPageListByTagAndPlatformCondition(condition, pars, startSize, pageSize)
-	if err != nil {
-		br.Msg = "获取失败"
-		br.ErrMsg = "获取失败,Err:" + err.Error()
-		return
-	}
+		if tagId > 0 {
+			condition += fmt.Sprintf(` AND d.%s = ?`, rag.WechatPlatformTagMappingColumns.TagID)
+			pars = append(pars, tagId)
+		}
 
-	viewList := obj.WechatArticleAbstractItem(list)
+		obj := new(rag.WechatArticleAbstract)
+		tmpTotal, list, err := obj.GetPageListByTagAndPlatformCondition(condition, pars, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		total = tmpTotal
+		viewList = obj.WechatArticleAbstractItem(list)
+	} else {
+		sortMap := map[string]string{
+			"ModifyTime":              "desc",
+			"WechatArticleAbstractId": "desc",
+		}
+		tmpTotal, list, err := elastic.WechatArticleAbstractEsSearch(keyWord, tagId, startSize, pageSize, sortMap)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		total = int(tmpTotal)
+		if list != nil && len(list) > 0 {
+			viewList = list[0].ToViewList(list)
+		}
+	}
 
 	page := paging.GetPaging(currentIndex, pageSize, total)
 	resp := response.AbstractListListResp{
@@ -96,52 +115,6 @@ func (c *AbstractController) List() {
 // 摘要库删除
 // 批量加入到向量库
 
-// vector_key
-
-// Add
-// @Title 新增问题
-// @Description 新增问题
-// @Param	request	body request.AddQuestionReq true "type json string"
-// @Success 200 Ret=200 新增成功
-// @router /abstract/add [post]
-func (c *AbstractController) Add() {
-	br := new(models.BaseResponse).Init()
-	defer func() {
-		c.Data["json"] = br
-		c.ServeJSON()
-	}()
-	var req request.AddQuestionReq
-	err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
-	if err != nil {
-		br.Msg = "参数解析异常!"
-		br.ErrMsg = "参数解析失败,Err:" + err.Error()
-		return
-	}
-	req.Content = strings.TrimSpace(req.Content)
-	if req.Content == "" {
-		br.Msg = "请输入问题"
-		br.IsSendEmail = false
-		return
-	}
-	item := &rag.Question{
-		QuestionId:      0,
-		QuestionContent: req.Content,
-		Sort:            0,
-		ModifyTime:      time.Now(),
-		CreateTime:      time.Now(),
-	}
-	err = item.Create()
-	if err != nil {
-		br.Msg = "添加失败"
-		br.ErrMsg = "添加失败,Err:" + err.Error()
-		return
-	}
-
-	br.Ret = 200
-	br.Success = true
-	br.Msg = `添加成功`
-}
-
 // Del
 // @Title 删除摘要
 // @Description 删除摘要
@@ -195,6 +168,10 @@ func (c *AbstractController) Del() {
 			br.ErrMsg = "删除失败,Err:" + err.Error()
 			return
 		}
+
+		for _, v := range list {
+			go services.AddOrEditEsWechatArticleAbstract(v.WechatArticleAbstractId)
+		}
 	}
 
 	br.Ret = 200

+ 20 - 6
controllers/llm/wechat_platform.go

@@ -541,8 +541,8 @@ func (c *WechatPlatformController) ArticleList() {
 			pars = append(pars, wechatPlatformId)
 		}
 
-		condition += fmt.Sprintf(` AND b.%s = ? `, rag.WechatPlatformColumns.Enabled)
-		pars = append(pars, 1)
+		//condition += fmt.Sprintf(` AND b.%s = ? `, rag.WechatPlatformColumns.Enabled)
+		//pars = append(pars, 1)
 
 		obj := new(rag.WechatArticle)
 		tmpTotal, list, err := obj.GetPageListByPlatformCondition(condition, pars, startSize, pageSize)
@@ -748,16 +748,30 @@ func (c *WechatPlatformController) ArticleDel() {
 //}
 
 //func init() {
-//	// 微信文章加到es
+//	//// 微信文章加到es
+//	//{
+//	//	obj := rag.WechatArticle{}
+//	//	list, _ := obj.GetListByCondition(` wechat_article_id `, ` `, []interface{}{}, 0, 10000)
+//	//	total := len(list)
+//	//	for k, item := range list {
+//	//		fmt.Println(k, "/", total)
+//	//		services.AddOrEditEsWechatArticle(item.WechatArticleId)
+//	//	}
+//	//
+//	//	fmt.Println("结束了")
+//	//}
+//
+//	//// 微信文章加到es
 //	{
-//		obj := rag.WechatArticle{}
-//		list, _ := obj.GetListByCondition(` wechat_article_id `, ` `, []interface{}{}, 0, 10000)
+//		obj := rag.WechatArticleAbstract{}
+//		list, _ := obj.GetListByCondition(` wechat_article_abstract_id `, ` `, []interface{}{}, 0, 10000)
 //		total := len(list)
 //		for k, item := range list {
 //			fmt.Println(k, "/", total)
-//			services.AddOrEditEsWechatArticle(item.WechatArticleId)
+//			services.AddOrEditEsWechatArticleAbstract(item.WechatArticleAbstractId)
 //		}
 //
 //		fmt.Println("结束了")
 //	}
+//
 //}

+ 0 - 9
routers/commentsRouter.go

@@ -8350,15 +8350,6 @@ func init() {
             Filters: nil,
             Params: nil})
 
-    beego.GlobalControllerRouter["eta/eta_api/controllers/llm:AbstractController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/llm:AbstractController"],
-        beego.ControllerComments{
-            Method: "Add",
-            Router: `/abstract/add`,
-            AllowHTTPMethods: []string{"post"},
-            MethodParams: param.Make(),
-            Filters: nil,
-            Params: nil})
-
     beego.GlobalControllerRouter["eta/eta_api/controllers/llm:AbstractController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/llm:AbstractController"],
         beego.ControllerComments{
             Method: "Del",

+ 2 - 2
services/elastic/wechat_article.go

@@ -251,8 +251,8 @@ func searchWechatArticleList(indexName string, query elastic.Query, sortList []*
 	highlight = highlight.Fields(elastic.NewHighlighterField("Title"))
 	highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
 
-	request := client.Search(indexName).Highlight(highlight).From(from).Size(size) // sets the JSON request
-	//request := client.Search(indexName).From(from).Size(size) // sets the JSON request
+	//request := client.Search(indexName).Highlight(highlight).From(from).Size(size) // sets the JSON request
+	request := client.Search(indexName).From(from).Size(size) // sets the JSON request
 
 	// 如果有指定排序,那么就按照排序来
 	if len(sortList) > 0 {

+ 287 - 0
services/elastic/wechat_article_abstract.go

@@ -0,0 +1,287 @@
+package elastic
+
+import (
+	"context"
+	"encoding/json"
+	"eta/eta_api/models/rag"
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/olivere/elastic/v7"
+	"time"
+)
+
+// 摘要索引
+var EsWechatArticleAbstractName = utils.EsWechatArticleAbstractName
+
+type WechatArticleAbstractItem struct {
+	WechatArticleAbstractId int       `gorm:"column:wechat_article_abstract_id;type:int(9) UNSIGNED;primaryKey;not null;" description:"wechat_article_abstract_id"`
+	WechatArticleId         int       `gorm:"column:wechat_article_id;type:int(9) UNSIGNED;comment:关联的微信报告id;default:0;" description:"关联的微信报告id"`
+	Abstract                string    `gorm:"column:abstract;type:longtext;comment:摘要内容;" description:"摘要内容"` //
+	Version                 int       `gorm:"column:version;type:int(10) UNSIGNED;comment:版本号;default:1;" description:"版本号"`
+	VectorKey               string    `gorm:"column:vector_key;type:varchar(255);comment:向量key标识;" description:"向量key标识"`
+	ModifyTime              time.Time `gorm:"column:modify_time;type:datetime;default:NULL;" description:"modify_time"`
+	CreateTime              time.Time `gorm:"column:create_time;type:datetime;default:NULL;" description:"create_time"`
+	Title                   string    `gorm:"column:title;type:varchar(255);comment:标题;" description:"标题"`
+	Link                    string    `gorm:"column:link;type:varchar(255);comment:链接;" description:"链接"`
+	TagIdList               []int     `description:"品种id列表"`
+}
+
+func (m *WechatArticleAbstractItem) ToView() rag.WechatArticleAbstractView {
+	var modifyTime, createTime string
+
+	if !m.CreateTime.IsZero() {
+		createTime = m.CreateTime.Format(utils.FormatDateTime)
+	}
+	if !m.ModifyTime.IsZero() {
+		modifyTime = m.ModifyTime.Format(utils.FormatDateTime)
+	}
+
+	tagId := 0
+	if len(m.TagIdList) > 0 {
+		tagId = m.TagIdList[0]
+	}
+	return rag.WechatArticleAbstractView{
+		WechatArticleAbstractId: m.WechatArticleAbstractId,
+		WechatArticleId:         m.WechatArticleId,
+		Abstract:                m.Abstract,
+		Version:                 m.Version,
+		VectorKey:               m.VectorKey,
+		ModifyTime:              modifyTime,
+		CreateTime:              createTime,
+		Title:                   m.Title,
+		Link:                    m.Link,
+		TagId:                   tagId,
+	}
+}
+
+func (m *WechatArticleAbstractItem) ToViewList(list []*WechatArticleAbstractItem) (wechatArticleViewList []rag.WechatArticleAbstractView) {
+	wechatArticleViewList = make([]rag.WechatArticleAbstractView, 0)
+
+	for _, v := range list {
+		wechatArticleViewList = append(wechatArticleViewList, v.ToView())
+	}
+	return
+}
+
+// WechatArticleEsAddOrEdit
+// @Description: 新增/编辑微信文章
+// @author: Roc
+// @datetime 2025-03-13 10:24:05
+// @param docId string
+// @param item WechatArticleAndPlatform
+// @return err error
+func WechatArticleAbstractEsAddOrEdit(docId string, item WechatArticleAbstractItem) (err error) {
+	if docId == "" {
+		return
+	}
+	if EsWechatArticleAbstractName == `` {
+		return
+	}
+	defer func() {
+		if err != nil {
+			fmt.Println("WechatArticleEsAddOrEdit Err:", err.Error())
+		}
+	}()
+	client := utils.EsClient
+
+	resp, err := client.Index().Index(EsWechatArticleAbstractName).Id(docId).BodyJson(item).Refresh("true").Do(context.Background())
+	if err != nil {
+		fmt.Println("新增失败:", err.Error())
+		return err
+	}
+	if resp.Status == 0 {
+		fmt.Println("新增成功", resp.Result)
+		err = nil
+	} else {
+		fmt.Println("WechatArticleEsAddOrEdit", resp.Status, resp.Result)
+	}
+
+	return
+}
+
+// WechatArticleEsDel
+// @Description: 删除微信文章
+// @author: Roc
+// @datetime 2025-03-13 10:23:55
+// @param docId string
+// @return err error
+func WechatArticleAbstractEsDel(docId string) (err error) {
+	if docId == "" {
+		return
+	}
+	if EsWechatArticleAbstractName == `` {
+		return
+	}
+	defer func() {
+		if err != nil {
+			fmt.Println("EsDeleteEdbInfoData Err:", err.Error())
+		}
+	}()
+	client := utils.EsClient
+
+	resp, err := client.Delete().Index(EsWechatArticleAbstractName).Id(docId).Refresh(`true`).Do(context.Background())
+	if err != nil {
+		return
+	}
+	if resp.Status == 0 {
+		fmt.Println("删除成功")
+	} else {
+		fmt.Println("WechatArticleEsDel", resp.Status, resp.Result)
+	}
+
+	return
+}
+
+func WechatArticleAbstractEsSearch(keywordStr string, tagId, from, size int, sortMap map[string]string) (total int64, list []*WechatArticleAbstractItem, err error) {
+	indexName := EsWechatArticleAbstractName
+	list = make([]*WechatArticleAbstractItem, 0)
+	defer func() {
+		if err != nil {
+			fmt.Println("SearchEdbInfoData Err:", err.Error())
+		}
+	}()
+
+	query := elastic.NewBoolQuery()
+
+	if tagId > 0 {
+		query = query.Must(elastic.NewTermsQuery("TagIdList", tagId))
+	}
+
+	// 名字匹配
+	if keywordStr != `` {
+		query = query.Must(elastic.NewMultiMatchQuery(keywordStr, "Abstract"))
+	}
+
+	// 排序
+	sortList := make([]*elastic.FieldSort, 0)
+	// 如果没有关键字,那么就走指标id倒序
+
+	for orderKey, orderType := range sortMap {
+		switch orderType {
+		case "asc":
+			sortList = append(sortList, elastic.NewFieldSort(orderKey).Asc())
+		case "desc":
+			sortList = append(sortList, elastic.NewFieldSort(orderKey).Desc())
+
+		}
+
+	}
+
+	return searchWechatArticleAbstract(indexName, query, sortList, from, size)
+}
+
+// searchEdbInfoDataV2 查询es中的数据
+func searchWechatArticleAbstract(indexName string, query elastic.Query, sortList []*elastic.FieldSort, from, size int) (total int64, list []*WechatArticleAbstractItem, err error) {
+	total, err = searchWechatArticleAbstractTotal(indexName, query)
+	if err != nil {
+		return
+	}
+
+	// 获取列表数据
+	list, err = searchWechatArticleAbstractList(indexName, query, sortList, from, size)
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+// searchEdbInfoDataTotal
+// @Description: 查询es中的数量
+// @author: Roc
+// @datetime 2024-12-23 11:19:04
+// @param indexName string
+// @param query elastic.Query
+// @return total int64
+// @return err error
+func searchWechatArticleAbstractTotal(indexName string, query elastic.Query) (total int64, err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("searchEdbInfoDataTotal Err:", err.Error())
+		}
+	}()
+	client := utils.EsClient
+
+	//根据条件数量统计
+	requestTotalHits := client.Count(indexName).Query(query)
+	total, err = requestTotalHits.Do(context.Background())
+	if err != nil {
+		return
+	}
+
+	return
+}
+
+// searchEdbInfoDataList
+// @Description: 查询es中的明细数据
+// @author: Roc
+// @datetime 2024-12-23 11:18:48
+// @param indexName string
+// @param query elastic.Query
+// @param sortList []*elastic.FieldSort
+// @param from int
+// @param size int
+// @return list []*data_manage.EdbInfoList
+// @return err error
+func searchWechatArticleAbstractList(indexName string, query elastic.Query, sortList []*elastic.FieldSort, from, size int) (list []*WechatArticleAbstractItem, err error) {
+	list = make([]*WechatArticleAbstractItem, 0)
+	defer func() {
+		if err != nil {
+			fmt.Println("searchEdbInfoDataList Err:", err.Error())
+		}
+	}()
+	client := utils.EsClient
+	// 高亮
+	highlight := elastic.NewHighlight()
+	highlight = highlight.Fields(elastic.NewHighlighterField("Content"))
+	highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
+
+	//request := client.Search(indexName).Highlight(highlight).From(from).Size(size) // sets the JSON request
+	request := client.Search(indexName).From(from).Size(size) // sets the JSON request
+
+	// 如果有指定排序,那么就按照排序来
+	if len(sortList) > 0 {
+		for _, v := range sortList {
+			request = request.SortBy(v)
+		}
+	}
+
+	searchMap := make(map[string]string)
+
+	searchResp, err := request.Query(query).Do(context.Background())
+	if err != nil {
+		return
+	}
+	//fmt.Println(searchResp)
+	//fmt.Println(searchResp.Status)
+	if searchResp.Status != 0 {
+		return
+	}
+	//total = searchResp.TotalHits()
+	if searchResp.Hits != nil {
+		for _, v := range searchResp.Hits.Hits {
+			if _, ok := searchMap[v.Id]; !ok {
+				itemJson, tmpErr := v.Source.MarshalJSON()
+				if tmpErr != nil {
+					err = tmpErr
+					fmt.Println("movieJson err:", err)
+					return
+				}
+				item := new(WechatArticleAbstractItem)
+				tmpErr = json.Unmarshal(itemJson, &item)
+				if tmpErr != nil {
+					fmt.Println("json.Unmarshal movieJson err:", tmpErr)
+					err = tmpErr
+					return
+				}
+				if len(v.Highlight["Content"]) > 0 {
+					item.Abstract = v.Highlight["Content"][0]
+				}
+				list = append(list, item)
+				searchMap[v.Id] = v.Id
+			}
+		}
+	}
+
+	return
+}

+ 84 - 1
services/wechat_platform.go

@@ -339,6 +339,9 @@ func GenerateArticleAbstract(item *rag.WechatArticle) {
 			return
 		}
 
+		// 数据入ES库
+		go AddOrEditEsWechatArticleAbstract(abstractItem.WechatArticleAbstractId)
+
 		AbstractToKnowledge(item, abstractItem, false)
 	}
 }
@@ -866,7 +869,7 @@ func AddOrEditEsWechatArticle(articleId int) {
 	platformObj := rag.WechatPlatform{}
 	platformInfo, err := platformObj.GetById(articleInfo.WechatPlatformId)
 	if err != nil {
-		err = fmt.Errorf("获取公众号文章信息失败,Err:" + err.Error())
+		err = fmt.Errorf("获取公众号平台信息失败,Err:" + err.Error())
 		return
 	}
 
@@ -895,3 +898,83 @@ func AddOrEditEsWechatArticle(articleId int) {
 
 	err = elastic.WechatArticleEsAddOrEdit(strconv.Itoa(articleInfo.WechatArticleId), esItem)
 }
+
+// AddOrEditEsWechatArticleAbstract
+// @Description: 新增/编辑微信文章摘要入ES
+// @author: Roc
+// @datetime 2025-03-13 14:13:47
+// @param articleAbstractId int
+func AddOrEditEsWechatArticleAbstract(articleAbstractId int) {
+	if utils.EsWechatArticleAbstractName == `` {
+		return
+	}
+
+	var err error
+	defer func() {
+		if err != nil {
+			utils.FileLog.Error("添加公众号微信信息到ES失败,err:%v", err)
+			fmt.Println("添加公众号微信信息到ES失败,err:", err)
+		}
+	}()
+	obj := rag.WechatArticleAbstract{}
+	abstractInfo, err := obj.GetById(articleAbstractId)
+	if err != nil {
+		err = fmt.Errorf("获取公众号文章信息失败,Err:" + err.Error())
+		return
+	}
+	articleObj := rag.WechatArticle{}
+	articleInfo, err := articleObj.GetById(abstractInfo.WechatArticleId)
+	if err != nil {
+		err = fmt.Errorf("获取公众号文章信息失败,Err:" + err.Error())
+		return
+	}
+
+	// 公众号平台关联的标签品种
+	tagObj := rag.WechatPlatformTagMapping{}
+	tagMappingList, err := tagObj.GetListByCondition(` AND wechat_platform_id = ? `, []interface{}{articleInfo.WechatPlatformId}, 0, 10000)
+	if err != nil {
+		err = fmt.Errorf("获取公众号平台关联的品种信息失败,Err:" + err.Error())
+		return
+	}
+
+	tagIdList := make([]int, 0)
+	for _, v := range tagMappingList {
+		tagIdList = append(tagIdList, v.TagId)
+	}
+
+	esItem := elastic.WechatArticleAbstractItem{
+		WechatArticleAbstractId: abstractInfo.WechatArticleAbstractId,
+		WechatArticleId:         abstractInfo.WechatArticleId,
+		Abstract:                abstractInfo.Content,
+		Version:                 abstractInfo.Version,
+		VectorKey:               abstractInfo.VectorKey,
+		ModifyTime:              articleInfo.ModifyTime,
+		CreateTime:              articleInfo.CreateTime,
+		Title:                   articleInfo.Title,
+		Link:                    articleInfo.Link,
+		TagIdList:               tagIdList,
+	}
+
+	err = elastic.WechatArticleAbstractEsAddOrEdit(strconv.Itoa(articleAbstractId), esItem)
+}
+
+// AddOrEditEsWechatArticleAbstract
+// @Description: 新增/编辑微信文章摘要入ES
+// @author: Roc
+// @datetime 2025-03-13 14:13:47
+// @param articleAbstractId int
+func DelEsWechatArticleAbstract(articleAbstractId int) {
+	if utils.EsWechatArticleAbstractName == `` {
+		return
+	}
+
+	var err error
+	defer func() {
+		if err != nil {
+			utils.FileLog.Error("添加公众号微信信息到ES失败,err:%v", err)
+			fmt.Println("添加公众号微信信息到ES失败,err:", err)
+		}
+	}()
+
+	err = elastic.WechatArticleAbstractEsDel(strconv.Itoa(articleAbstractId))
+}