153 lines
3.8 KiB
Go
153 lines
3.8 KiB
Go
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("<a href='#'>%s</a>\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),
|
||
})
|
||
}
|