knowledgeService.go 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package service
  2. import (
  3. elastic "app.yhyue.com/moapp/jybase/esv1"
  4. "bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/usercenter"
  5. "context"
  6. "database/sql"
  7. "errors"
  8. "github.com/zeromicro/go-zero/core/logx"
  9. "knowledgeBase/entity"
  10. . "knowledgeBase/rpc/knowledge/init"
  11. "knowledgeBase/rpc/knowledge/knowledgeclient"
  12. "knowledgeBase/rpc/knowledge/util"
  13. "time"
  14. )
  15. type KnowledgeService struct{}
  16. func (k *KnowledgeService) KnowledgeAdd(param *knowledgeclient.AddRequest) (bool, string, error) {
  17. //先查找知识库Id
  18. query := map[string]interface{}{"status": 1, "appid": param.AppId, "ent_id": param.EntId}
  19. datalist := Mysql.Find(util.KNOWLEDGE, query, "id", "", -1, -1)
  20. if datalist != nil && *datalist != nil && len(*datalist) > 0 {
  21. //问题进行分词
  22. keywords := util.HttpDo(param.Question)
  23. //通过entUserId获取创建人名称,调用用户中心
  24. req := &usercenter.EntUserReq{
  25. EntId: param.EntId,
  26. EntUserId: param.EntUserId,
  27. AppId: param.AppId,
  28. }
  29. resp, err := entity.UserCenterLib.GetEntUserInfo(context.Background(), req)
  30. if err != nil {
  31. logx.Infof("查询用户中台创建人信息失败", param.EntId, param.EntUserId, "err:", err)
  32. return false, "查询用户中台创建人信息失败", err
  33. }
  34. createPerson := resp.Data.Name
  35. var answerId int64
  36. nowTime := time.Now().Local().Format(util.Date_Full_Layout)
  37. fool := Mysql.ExecTx("添加知识", func(tx *sql.Tx) bool {
  38. //插入答案
  39. answerData := map[string]interface{}{
  40. "knowledge_id": (*datalist)[0]["id"],
  41. "status": 1,
  42. "create_time": nowTime,
  43. "update_time": nowTime,
  44. "create_person": createPerson,
  45. "content": param.Answer,
  46. }
  47. answerId = Mysql.Insert(util.ANSWER, answerData)
  48. //插入问题
  49. questionData := map[string]interface{}{
  50. "answer_id": answerId,
  51. "content": param.Question,
  52. "keywords": keywords,
  53. }
  54. questionId := Mysql.Insert(util.QUESTION, questionData)
  55. return answerId > 0 && questionId > 0
  56. })
  57. if fool {
  58. //插入es
  59. knowledge := map[string]interface{}{
  60. "knowledgeId": (*datalist)[0]["id"],
  61. "status": 1,
  62. "createTime": time.Now().Unix(),
  63. "createPerson": createPerson,
  64. "answer": param.Answer,
  65. "question": param.Question,
  66. "keywords": keywords,
  67. "answerId": answerId,
  68. "entId": param.EntId,
  69. }
  70. b := elastic.Save(C.Es.Index, C.Es.Type, knowledge)
  71. if b {
  72. return true, "插入es成功", nil
  73. } else {
  74. return false, "插入es出错", errors.New("插入es出错")
  75. }
  76. } else {
  77. return false, "插入mysql出错", errors.New("插入mysql出错")
  78. }
  79. } else {
  80. return false, "租户不存在", errors.New("租户不存在")
  81. }
  82. }