package logic import ( elastic "app.yhyue.com/moapp/jybase/esv1" "bp.jydev.jianyu360.cn/BaseService/userCenter/rpc/usercenter" "context" "database/sql" "github.com/zeromicro/go-zero/core/logx" "knowledgeBase/entity" . "knowledgeBase/rpc/knowledge/init" "knowledgeBase/rpc/knowledge/internal/svc" "knowledgeBase/rpc/knowledge/knowledgeclient" "knowledgeBase/rpc/knowledge/util" "log" "time" ) type KnowledgeAddLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewKnowledgeAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *KnowledgeAddLogic { return &KnowledgeAddLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } type Question struct { Question string `json:"question"` KeyWords string `json:"keyWords"` } // KnowledgeAdd 知识新增 func (l *KnowledgeAddLogic) KnowledgeAdd(in *knowledgeclient.AddRequest) (*knowledgeclient.AddResponse, error) { // todo: add your logic here and delete this line result := &knowledgeclient.AddResponse{} //先查找知识库Id query := map[string]interface{}{"status": 1, "appid": in.AppId, "ent_id": in.EntId} log.Println("查询知识库条件:", query) datalist := Mysql.Find(util.KNOWLEDGE, query, "id", "", -1, -1) if datalist != nil && *datalist != nil && len(*datalist) > 0 { //问题进行分词 keywords := util.HttpDo(in.Question) log.Println("分词", keywords) //通过entUserId获取创建人名称 req := &usercenter.EntUserReq{ EntId: in.EntId, EntUserId: in.EntUserId, AppId: in.AppId, } resp, err := entity.UserCenterLib.GetEntUserInfo(context.Background(), req) //0:失败 1:成功 -1:不在有效期内 -2:数量不足 -3:没有授权 if resp.ErrorCode == 0 || err != nil { logx.Infof("查询用户中台创建人信息失败", in.EntId, resp.ErrorCode, "err:", err) return nil, err } createPerson := resp.Data.Name nowTime := time.Now().Local().Format(util.Date_Full_Layout) var answerId int64 fool := Mysql.ExecTx("添加知识", func(tx *sql.Tx) bool { //插入答案 answerData := map[string]interface{}{ "knowledge_id": (*datalist)[0]["id"], "status": 1, "create_time": nowTime, "update_time": nowTime, "create_person": createPerson, "content": in.Answer, } answerId = Mysql.Insert(util.ANSWER, answerData) if answerId <= 0 { return false } //插入问题 questionData := map[string]interface{}{ "answer_id": answerId, "content": in.Question, "keywords": keywords, } questionId := Mysql.Insert(util.QUESTION, questionData) if questionId <= 0 { return false } return true }) if fool { //插入es knowledge := map[string]interface{}{ "knowledgeId": (*datalist)[0]["id"], "status": 1, "createTime": time.Now().Unix(), "createPerson": createPerson, "answer": in.Answer, "question": in.Question, "keywords": keywords, "answerId": answerId, "entId": in.EntId, } b := elastic.Save(C.Es.Index, C.Es.Type, knowledge) log.Println("存es", b) if b { result.ErrorCode = 0 result.ErrorMsg = "插入数据成功" } else { result.ErrorCode = -1 result.ErrorMsg = "插入es失败" } } else { result.ErrorCode = -1 result.ErrorMsg = "新建失败" } } else { result.ErrorCode = -1 result.ErrorMsg = "租户不存在" } log.Println(result) return result, nil }