package controller import ( "github.com/gin-gonic/gin" "kefu/lib" "kefu/models" "kefu/tools" "kefu/types" "strconv" ) func GetLearnReplyContent(entId, content string) string { replyContent := "" replys := models.FindArticleRows("id,title,search_type", "ent_id = ? ", entId) //按分值计算 var exactReply []lib.MatchData var matchReply []lib.MatchData for _, row := range replys { //精准 if row.SearchType == 2 { exactReply = append(exactReply, lib.MatchData{ ID: row.Id, Text: row.Title, }) } //包含 if row.SearchType == 1 { matchReply = append(matchReply, lib.MatchData{ ID: row.Id, Text: row.Title, }) } //通配符 if row.Title == "*" { exactReply = append(exactReply, lib.MatchData{ ID: row.Id, Text: row.Title, }) } } matchRes, ok := lib.NewMatcher(exactReply).Match(content, true) if ok { r := models.FindArticleRow("id = ?", matchRes.ID) replyContent = r.Content article := models.Article{ Score: r.Score + 1, } go article.SaveArticle("ent_id = ? and id = ?", entId, r.Id) } if replyContent == "" { matchRes, ok = lib.NewMatcher(matchReply).Match(content, false) if ok { r := models.FindArticleRow("id = ?", matchRes.ID) replyContent = r.Content article := models.Article{ Score: r.Score + 1, } go article.SaveArticle("ent_id = ? and id = ?", entId, r.Id) } } config := models.GetEntConfigsMap(entId, "KeywordFinalReply") if replyContent == "" { replyContent = config["KeywordFinalReply"] } return replyContent //articles := models.FindArticleList(1, 10, "score desc", "ent_id= ? and title like ?", entId, "%"+content+"%") //articleLen := len(articles) //result := "" ////未匹配,进入学习库 //if articleLen == 0 { // if len([]rune(content)) > 1 { // go AddUpdateLearn(entId, content) // } //} else if articleLen == 1 { // result = tools.TrimHtml(articles[0].Content) // article := models.Article{ // Score: articles[0].Score + 1, // } // go article.SaveArticle("ent_id = ? and id = ?", entId, articles[0].Id) //} else if articleLen > 1 { // result = "您是不是想问:" // for _, article := range articles { // title := strings.Split(strings.ReplaceAll(article.Title, ",", ","), ",")[0] // result += fmt.Sprintf("%s\r\n", title) // } //} //return result } // 插入或更新学习库 func AddUpdateLearn(entId, content string) { learn := models.FindLearn("ent_id = ? and content = ?", entId, content) if learn.ID != 0 { learn.Score += 1 learn.SaveLearn("ent_id = ? and content = ?", entId, content) } else { m := &models.Learn{ EntId: entId, Content: content, CreatedAt: types.Time{}, Score: 1, Finshed: 1, } m.AddLearn() } } // 学习库列表 func GetLearnsList(c *gin.Context) { entId, _ := c.Get("ent_id") page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("pagesize", "10")) if pageSize > 50 { pageSize = 10 } var args = []interface{}{} search := "ent_id = ? " args = append(args, entId) count := models.CountLearn(search, args...) list := models.FindLearnList(page, pageSize, search, args...) c.JSON(200, gin.H{ "code": types.ApiCode.SUCCESS, "msg": types.ApiCode.GetMessage(types.ApiCode.SUCCESS), "result": gin.H{ "list": list, "count": count, "pagesize": pageSize, "page": page, }, }) } // 学习库状态 func PostLearnStatus(c *gin.Context) { status := c.PostForm("status") id := c.PostForm("id") entId, _ := c.Get("ent_id") kefuName, _ := c.Get("kefu_name") learn := models.Learn{ Finshed: uint(tools.Str2Int(status)), KefuName: kefuName.(string), } learn.SaveLearn("ent_id = ? and id = ?", entId, id) c.JSON(200, gin.H{ "code": types.ApiCode.SUCCESS, "msg": types.ApiCode.GetMessage(types.ApiCode.SUCCESS), }) }