|
@@ -4,14 +4,12 @@ import (
|
|
|
cm "app.yhyue.com/moapp/jybase/common"
|
|
|
. "app.yhyue.com/moapp/jybase/encrypt"
|
|
|
elastic "app.yhyue.com/moapp/jybase/esv1"
|
|
|
- "bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/usercenter"
|
|
|
. "bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/entity"
|
|
|
"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/knowledgeclient"
|
|
|
"bp.jydev.jianyu360.cn/SocialPlatform/knowledgeBase/rpc/knowledge/util"
|
|
|
- "context"
|
|
|
"database/sql"
|
|
|
+ "fmt"
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
|
- "log"
|
|
|
"strconv"
|
|
|
"time"
|
|
|
)
|
|
@@ -23,6 +21,7 @@ var (
|
|
|
Type = "smart"
|
|
|
)
|
|
|
|
|
|
+// KnowledgeAdd 添加问题
|
|
|
func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest, segment string) (bool, string) {
|
|
|
//先查找知识库Id
|
|
|
query := map[string]interface{}{"status": 1, "appid": param.AppId, "ent_id": param.EntId}
|
|
@@ -31,7 +30,6 @@ func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest, segme
|
|
|
//问题进行分词
|
|
|
keywords := ""
|
|
|
keywordsArr := util.HanlpGetNormalWords(param.Question, segment)
|
|
|
- log.Println("keywordsArr", keywordsArr)
|
|
|
if len(keywordsArr) != 0 {
|
|
|
for _, val := range keywordsArr {
|
|
|
keywords += val + " "
|
|
@@ -41,7 +39,7 @@ func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest, segme
|
|
|
keywords = param.Question
|
|
|
}
|
|
|
//通过entUserId获取创建人名称,调用用户中心
|
|
|
- req := &usercenter.EntUserReq{
|
|
|
+ /*req := &usercenter.EntUserReq{
|
|
|
EntId: param.EntId,
|
|
|
EntUserId: param.EntUserId,
|
|
|
AppId: param.AppId,
|
|
@@ -50,8 +48,8 @@ func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest, segme
|
|
|
if resp.ErrorCode != 0 {
|
|
|
logx.Info("查询用户中台创建人信息失败", param.EntId, param.EntUserId, "err:", err)
|
|
|
return false, "查询用户中台创建人信息失败"
|
|
|
- }
|
|
|
- createPerson := resp.Data.Name
|
|
|
+ }*/
|
|
|
+ createPerson := param.EntUserId
|
|
|
var answerId int64
|
|
|
nowTime := time.Now().Local().Format(util.Date_Full_Layout)
|
|
|
fool := Mysql.ExecTx("添加知识", func(tx *sql.Tx) bool {
|
|
@@ -95,12 +93,13 @@ func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest, segme
|
|
|
return false, "租户不存在"
|
|
|
}
|
|
|
|
|
|
+// KnowledgeEdit 编辑问题
|
|
|
func (k *KnowledgeService) KnowledgeEdit(param *knowledgeclient.KnowledgeEditReq, segment string) (ok bool) {
|
|
|
ok = false
|
|
|
//获取问题分词
|
|
|
keywords := ""
|
|
|
keywordsArr := util.HanlpGetNormalWords(param.Question, segment)
|
|
|
- log.Println("keywordsArr", keywordsArr)
|
|
|
+ logx.Info("keywordsArr", keywordsArr)
|
|
|
if len(keywordsArr) != 0 {
|
|
|
for _, val := range keywordsArr {
|
|
|
keywords += val + " "
|
|
@@ -110,7 +109,7 @@ func (k *KnowledgeService) KnowledgeEdit(param *knowledgeclient.KnowledgeEditReq
|
|
|
keywords = param.Question
|
|
|
}
|
|
|
//通过entUserId获取创建人名称
|
|
|
- req := &usercenter.EntUserReq{
|
|
|
+ /*req := &usercenter.EntUserReq{
|
|
|
EntId: param.EntId,
|
|
|
EntUserId: param.EntUserId,
|
|
|
AppId: param.AppId,
|
|
@@ -119,8 +118,8 @@ func (k *KnowledgeService) KnowledgeEdit(param *knowledgeclient.KnowledgeEditReq
|
|
|
if resp.ErrorCode != 0 {
|
|
|
logx.Info("查询用户中台创建人信息失败", param.EntId, param.EntUserId, "err:", err)
|
|
|
return ok
|
|
|
- }
|
|
|
- createPerson := resp.Data.Name
|
|
|
+ }*/
|
|
|
+ createPerson := param.EntUserId
|
|
|
fool := Mysql.ExecTx("编辑问题、答案", func(tx *sql.Tx) bool {
|
|
|
//修改答案
|
|
|
answerUpdate := map[string]interface{}{
|
|
@@ -158,20 +157,15 @@ func (k *KnowledgeService) KnowledgeEdit(param *knowledgeclient.KnowledgeEditReq
|
|
|
return ok
|
|
|
}
|
|
|
|
|
|
+// KnowledgeList 问题列表
|
|
|
func (k *KnowledgeService) KnowledgeList(param *knowledgeclient.ListRequest) *knowledgeclient.ListData {
|
|
|
var knowledgeList knowledgeclient.ListData
|
|
|
var data []*knowledgeclient.KnowledgeEntity
|
|
|
- countSql := "SELECT COUNT(b.id) FROM " + util.KNOWLEDGE +
|
|
|
- " a LEFT JOIN " + util.ANSWER + " b ON a.id = b.knowledge_id LEFT JOIN " + util.QUESTION +
|
|
|
- " c ON b.id = c.answer_id WHERE b.`status` =1 and a.ent_id=?"
|
|
|
- count := Mysql.CountBySql(countSql, param.EntId)
|
|
|
- log.Println("总数:", count)
|
|
|
+ countSql := fmt.Sprintf("SELECT COUNT(b.id) FROM %s a LEFT JOIN %s b ON a.id = b.knowledge_id LEFT JOIN %s c ON b.id = c.answer_id WHERE b.`status` =1 and a.ent_id=%d", util.KNOWLEDGE, util.ANSWER, util.QUESTION, param.EntId)
|
|
|
+ count := Mysql.CountBySql(countSql)
|
|
|
if count > 0 {
|
|
|
//列表数据
|
|
|
- sql1 := "SELECT b.content as answer,c.content as question,b.id,b.knowledge_id FROM " + util.KNOWLEDGE +
|
|
|
- " a LEFT JOIN " + util.ANSWER + " b ON a.id = b.knowledge_id LEFT JOIN " + util.QUESTION +
|
|
|
- " c ON b.id = c.answer_id WHERE b.`status` =1 and a.ent_id=? order by b.update_time desc limit ?,?"
|
|
|
- //log.Println(sql, param.EntId, (param.PageIndex-1)*param.PageSize, param.PageSize)
|
|
|
+ sql1 := fmt.Sprintf("SELECT b.content as answer,c.content as question,b.id,b.knowledge_id FROM %s a LEFT JOIN %s b ON a.id = b.knowledge_id LEFT JOIN %s c ON b.id = c.answer_id WHERE b.`status` =1 and a.ent_id=? order by b.update_time desc limit ?,?", util.KNOWLEDGE, util.ANSWER, util.QUESTION)
|
|
|
datalist := Mysql.SelectBySql(sql1, param.EntId, (param.PageIndex-1)*param.PageSize, param.PageSize)
|
|
|
if datalist != nil && *datalist != nil && len(*datalist) > 0 {
|
|
|
for _, value := range *datalist {
|
|
@@ -183,17 +177,17 @@ func (k *KnowledgeService) KnowledgeList(param *knowledgeclient.ListRequest) *kn
|
|
|
data = append(data, &knowledge)
|
|
|
}
|
|
|
}
|
|
|
- //log.Println("数据:", data)
|
|
|
knowledgeList.Total = count
|
|
|
knowledgeList.Data = data
|
|
|
}
|
|
|
return &knowledgeList
|
|
|
}
|
|
|
|
|
|
+// KnowledgeInfo 问题详情
|
|
|
func (k *KnowledgeService) KnowledgeInfo(answerId int64) (data *knowledgeclient.KnowledgeEntity, ok bool) {
|
|
|
- sql1 := "SELECT b.content as answer,c.content as question,b.id,b.knowledge_id FROM " + util.ANSWER +
|
|
|
- " b LEFT JOIN " + util.QUESTION + " c ON b.id = c.answer_id WHERE b.`status` =1 AND b.id = ? "
|
|
|
- datalist := Mysql.SelectBySql(sql1, answerId)
|
|
|
+ //util.ANSWER,util.QUESTION
|
|
|
+ sql1 := fmt.Sprintf("SELECT b.content as answer,c.content as question,b.id,b.knowledge_id FROM %s b LEFT JOIN %s c ON b.id = c.answer_id WHERE b.`status` =1 AND b.id = %d", util.ANSWER, util.QUESTION, answerId)
|
|
|
+ datalist := Mysql.SelectBySql(sql1)
|
|
|
if datalist != nil && *datalist != nil && len(*datalist) > 0 {
|
|
|
knowledge := knowledgeclient.KnowledgeEntity{}
|
|
|
knowledge.Answer = cm.ObjToString((*datalist)[0]["answer"])
|
|
@@ -205,6 +199,7 @@ func (k *KnowledgeService) KnowledgeInfo(answerId int64) (data *knowledgeclient.
|
|
|
return nil, false
|
|
|
}
|
|
|
|
|
|
+// KnowledgeDel 删除问题
|
|
|
func (k *KnowledgeService) KnowledgeDel(answerId int64) (ok bool) {
|
|
|
ok = false
|
|
|
//修改答案
|
|
@@ -216,12 +211,13 @@ func (k *KnowledgeService) KnowledgeDel(answerId int64) (ok bool) {
|
|
|
|
|
|
if fool {
|
|
|
//删除es数据
|
|
|
- query := `{"query":{"bool":{"must":[{"term":{"answerId":"` + strconv.Itoa(int(answerId)) + `"}}],"must_not":[],"should":[]}},"from":0,"size":10,"sort":[],"facets":{}}`
|
|
|
+ query := `{"query":{"bool":{"must":[{"term":{"answerId":"` + strconv.Itoa(int(answerId)) + `"}}],"must_not":[],"should":[]}},"from":0,"size":1,"sort":[],"facets":{}}`
|
|
|
ok = elastic.Del(Index, Type, query)
|
|
|
}
|
|
|
return ok
|
|
|
}
|
|
|
|
|
|
+// FindAnswer 根据问题推荐一个答案
|
|
|
func (k *KnowledgeService) FindAnswer(param *knowledgeclient.FindAnswerReq, addr, index, segment string) *knowledgeclient.Question {
|
|
|
var question knowledgeclient.Question
|
|
|
robotEntId := SE.Decode4Hex(param.RobotEntId)
|
|
@@ -239,6 +235,7 @@ func (k *KnowledgeService) FindAnswer(param *knowledgeclient.FindAnswerReq, addr
|
|
|
return &question
|
|
|
}
|
|
|
|
|
|
+// RecommendAnswer 根据问题推荐三个答案
|
|
|
func (k *KnowledgeService) RecommendAnswer(param *knowledgeclient.FindAnswerReq, segment string) []*knowledgeclient.Question {
|
|
|
var (
|
|
|
keyWords = ""
|
|
@@ -256,10 +253,9 @@ func (k *KnowledgeService) RecommendAnswer(param *knowledgeclient.FindAnswerReq,
|
|
|
if keyWords == "" {
|
|
|
keyWords = param.Question
|
|
|
}
|
|
|
- log.Println("entId:", SE.Decode4Hex(param.RobotEntId))
|
|
|
+ logx.Info("entId:", SE.Decode4Hex(param.RobotEntId))
|
|
|
var query = util.DSL4SearchByKwsOrid(keyWords, SE.Decode4Hex(param.RobotEntId))
|
|
|
res := elastic.GetAllByNgram(Index, Type, query, "", "", searchField, 0, 3, 0, false)
|
|
|
- log.Println("推荐3个答案:", res)
|
|
|
if res != nil && len(*res) > 0 {
|
|
|
for _, val := range *res {
|
|
|
answers = append(answers, &knowledgeclient.Question{
|