123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- package service
- import (
- cm "app.yhyue.com/moapp/jybase/common"
- elastic "app.yhyue.com/moapp/jybase/esv1"
- . "bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/entity"
- "bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/knowledge"
- "bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/util"
- "github.com/zeromicro/go-zero/core/logx"
- "log"
- "strconv"
- "time"
- )
- type CommonPhrasesService struct{}
- var (
- INDEX = "common_phrases"
- TYPE = "common_phrases"
- )
- // CommonPhrasesAdd 客服话术添加
- func (c *CommonPhrasesService) CommonPhrasesAdd(param *knowledge.CommonPhrasesAddReq, segment string) (ok bool, msg string) {
- ok = true
- msg = "操作成功"
- //分词
- keywords := ""
- keywordsArr := util.HanlpGetNormalWords(param.Content, segment)
- if len(keywordsArr) != 0 {
- for _, val := range keywordsArr {
- keywords += val + " "
- }
- }
- if keywords == "" {
- keywords = param.Content
- }
- now := time.Now()
- if param.Id > 0 { //编辑
- updateData := map[string]interface{}{
- "classify": param.Classify,
- "content": param.Content,
- "createPerson": param.EntUserId,
- "updateTime": time.Now().Local().Format(util.DateFullLayout),
- "keywords": keywords,
- }
- ok1 := Mysql.Update(util.COMMONPHRASES, map[string]interface{}{"id": param.Id}, updateData)
- if ok1 {
- query := `{"query":{"bool":{"must":[{"term":{"phrasesId":"` + strconv.Itoa(int(param.Id)) + `"}}],"must_not":[],"should":[]}},"from":0,"size":1,"sort":[],"facets":{}}`
- //修改es数据
- insertData := map[string]interface{}{
- "entId": param.EntId,
- "appId": param.AppId,
- "classify": param.Classify,
- "content": param.Content,
- "createPerson": param.EntUserId,
- "status": 0,
- "createTime": now.Unix(),
- "keywords": keywords,
- "phrasesId": param.Id,
- }
- ok2 := elastic.Del(INDEX, TYPE, query)
- ok3 := elastic.Save(INDEX, TYPE, insertData)
- if !(ok2 && ok3) {
- ok = false
- msg = "操作失败"
- }
- } else {
- ok = false
- msg = "操作失败"
- }
- } else {
- insertData := map[string]interface{}{
- "entId": param.EntId,
- "appId": param.AppId,
- "classify": param.Classify,
- "content": param.Content,
- "createPerson": param.EntUserId,
- "status": 0,
- "createTime": now.Local().Format(util.DateFullLayout),
- "keywords": keywords,
- "updateTime": now.Format(util.DateFullLayout),
- }
- in := Mysql.Insert(util.COMMONPHRASES, insertData)
- if in > -1 {
- insertData["createTime"] = now.Unix()
- insertData["phrasesId"] = in
- delete(insertData, "updateTime")
- ok := elastic.Save(INDEX, TYPE, insertData)
- if !ok {
- ok = false
- msg = "操作失败"
- }
- } else {
- ok = false
- msg = "操作失败"
- }
- }
- return ok, msg
- }
- // CommonPhrasesInfo 客服话术详情
- func (c *CommonPhrasesService) CommonPhrasesInfo(id int64) (data *knowledge.CommonPhrases, ok bool) {
- info := Mysql.FindOne(util.COMMONPHRASES, map[string]interface{}{"id": id}, "", "")
- if info != nil && len(*info) > 0 {
- data = &knowledge.CommonPhrases{}
- data.Id = cm.Int64All((*info)["id"])
- data.Classify = cm.ObjToString((*info)["classify"])
- data.Content = cm.ObjToString((*info)["content"])
- return data, true
- }
- return nil, false
- }
- // CommonPhrasesDel 客服话术删除
- func (c *CommonPhrasesService) CommonPhrasesDel(id int64) bool {
- ok := Mysql.Update(util.COMMONPHRASES, map[string]interface{}{"id": id}, map[string]interface{}{"status": 1, "updateTime": time.Now().Local().Format(util.DateFullLayout)})
- if ok {
- //删除es数据
- query := `{"query":{"bool":{"must":[{"term":{"phrasesId":"` + strconv.Itoa(int(id)) + `"}}],"must_not":[],"should":[]}},"from":0,"size":1,"sort":[],"facets":{}}`
- ok = elastic.Del(INDEX, TYPE, query)
- log.Println(ok, "---------------")
- }
- return ok
- }
- // CommonPhrasesList 客服话术列表
- func (c *CommonPhrasesService) CommonPhrasesList(param *knowledge.CommonPhrasesListReq) *knowledge.CommonPhrasesList {
- var commonPhrasesList knowledge.CommonPhrasesList
- var data []*knowledge.CommonPhrases
- count := Mysql.Count(util.COMMONPHRASES, map[string]interface{}{"status": 0, "appId": param.AppId, "entId": param.EntId})
- if count > 0 {
- dataList := Mysql.Find(util.COMMONPHRASES, map[string]interface{}{"status": 0, "appId": param.AppId, "entId": param.EntId}, "", "updateTime desc", cm.IntAll((param.PageIndex-1)*param.PageSize), cm.IntAll(param.PageSize))
- if dataList != nil && len(*dataList) > 0 {
- for _, val := range *dataList {
- data = append(data, &knowledge.CommonPhrases{
- Id: cm.Int64All(val["id"]),
- Content: cm.ObjToString(val["content"]),
- Classify: cm.ObjToString(val["classify"]),
- })
- }
- }
- commonPhrasesList.Data = data
- commonPhrasesList.Total = count
- }
- return &commonPhrasesList
- }
- // CommonPhrasesClassList 客服话术分类
- func (c *CommonPhrasesService) CommonPhrasesClassList(param *knowledge.CommonPhrasesClassListReq) []*knowledge.CommonPhrasesClassListData {
- var classListArr []*knowledge.CommonPhrasesClassListData
- //先查询数据在分类、排序
- data := &[]map[string]interface{}{}
- if param.Query != "" {
- data = Mysql.SelectBySql("SELECT classify,content FROM `socialize_common_phrases` WHERE entId = ? AND appId = ? AND status = 0 AND (content like '%"+param.Query+"%' OR classify like '%"+param.Query+"%') ORDER BY CONVERT(classify USING GBK) ASC", param.EntId, param.AppId)
- } else {
- data = Mysql.SelectBySql("SELECT classify,content FROM `socialize_common_phrases` WHERE entId = ? AND appId = ? AND status = 0 ORDER BY CONVERT(classify USING GBK) ASC", param.EntId, param.AppId)
- }
- if data != nil && len(*data) > 0 {
- m := map[string][]string{}
- for _, val := range *data {
- classify := cm.ObjToString(val["classify"])
- m[classify] = append(m[classify], cm.ObjToString(val["content"]))
- }
- if m != nil && len(m) > 0 {
- for k, v := range m {
- classList := &knowledge.CommonPhrasesClassListData{}
- classList.Classify = k
- for _, i := range v {
- classList.ClassList = append(classList.ClassList, &knowledge.Content{
- Content: i,
- })
- }
- classListArr = append(classListArr, classList)
- }
- //sort.Sort(classListArr)
- }
- }
- return classListArr
- }
- func (c *CommonPhrasesService) CommonPhraseQuery(param *knowledge.CommonPhraseQueryReq, segment string, findCount int) []*knowledge.Content {
- var (
- keyWords = ""
- searchField = `"content"`
- contents []*knowledge.Content
- )
- //根据问题进行分词
- keywordsArr := util.HanlpGetNormalWords(param.Query, segment)
- logx.Info("keywordsArr", keywordsArr)
- if len(keywordsArr) != 0 {
- for _, val := range keywordsArr {
- keyWords += val + " "
- }
- }
- if keyWords == "" {
- keyWords = param.Query
- }
- //logx.Info("entId:", SE.Decode4Hex(param.RobotEntId))
- var query = util.DSL4SearchByKwsOrid(keyWords, strconv.Itoa(int(param.EntId)), 1)
- res := elastic.GetAllByNgram(INDEX, TYPE, query, "", "", searchField, 0, findCount, 0, false)
- if res != nil && len(*res) > 0 {
- for _, val := range *res {
- contents = append(contents, &knowledge.Content{
- Content: cm.ObjToString(val["content"]),
- })
- }
- log.Println("推荐答案:", contents)
- }
- return contents
- }
|