|
@@ -0,0 +1,314 @@
|
|
|
+package ai
|
|
|
+
|
|
|
+import (
|
|
|
+ "encoding/json"
|
|
|
+ "eta/eta_api/controllers"
|
|
|
+ "eta/eta_api/models"
|
|
|
+ "eta/eta_api/models/aimod"
|
|
|
+ "eta/eta_api/services/aiser"
|
|
|
+ "eta/eta_api/utils"
|
|
|
+ "fmt"
|
|
|
+ "strconv"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+type AiController struct {
|
|
|
+ controllers.BaseAuthController
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *AiController) List() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ var req aimod.ChatReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.Ask == "" {
|
|
|
+ br.Msg = "请输入提问内容!"
|
|
|
+ br.ErrMsg = "请输入提问内容"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if utils.Re == nil {
|
|
|
+ key := "CACHE_CHAT_" + strconv.Itoa(this.SysUser.AdminId)
|
|
|
+ cacheVal, err := utils.Rc.RedisInt(key)
|
|
|
+ fmt.Println("RedisString:", cacheVal, "err:", err)
|
|
|
+ if err != nil && err.Error() != "redigo: nil returned" {
|
|
|
+ br.Msg = "获取数据失败!"
|
|
|
+ br.ErrMsg = "获取数据失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ putVal := 0
|
|
|
+ if cacheVal <= 0 {
|
|
|
+ putVal = utils.AiChatLimit
|
|
|
+ } else {
|
|
|
+ putVal = cacheVal - 1
|
|
|
+ }
|
|
|
+
|
|
|
+ if putVal <= 0 {
|
|
|
+ br.Msg = "您今日50次问答已达上限,请明天再来!"
|
|
|
+ br.ErrMsg = "您今日50次问答已达上限,请明天再来!"
|
|
|
+ return
|
|
|
+ }
|
|
|
+ lastSecond := utils.GetTodayLastSecond()
|
|
|
+ utils.Rc.Put(key, putVal, lastSecond)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ askUuid := utils.MD5(req.Ask)
|
|
|
+ chatMode, err := aimod.GetAiChatByAsk(askUuid)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "获取数据失败!"
|
|
|
+ br.ErrMsg = "获取数据失败,GetAiChatByAsk,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(aimod.ChatResp)
|
|
|
+ var answer string
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if chatMode != nil && chatMode.Answer != "" {
|
|
|
+ answer = chatMode.Answer
|
|
|
+ } else {
|
|
|
+ answer, _ = aiser.ChatAutoMsg(req.Ask)
|
|
|
+ }
|
|
|
+ resp.Ask = req.Ask
|
|
|
+ resp.Answer = answer
|
|
|
+
|
|
|
+ if req.AiChatTopicId <= 0 {
|
|
|
+ topic := new(aimod.AiChatTopic)
|
|
|
+ topic.TopicName = req.Ask
|
|
|
+ topic.SysUserId = this.SysUser.AdminId
|
|
|
+ topic.SysUserRealName = this.SysUser.RealName
|
|
|
+ topic.CreateTime = time.Now()
|
|
|
+ topic.ModifyTime = time.Now()
|
|
|
+ topicId, err := aimod.AddAiChatTopic(topic)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取数据失败!"
|
|
|
+ br.ErrMsg = "生成话题失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp.AiChatTopicId = int(topicId)
|
|
|
+ chatItem := new(aimod.AiChat)
|
|
|
+ chatItem.AiChatTopicId = resp.AiChatTopicId
|
|
|
+ chatItem.Ask = req.Ask
|
|
|
+ chatItem.AskUuid = utils.MD5(req.Ask)
|
|
|
+ chatItem.Answer = answer
|
|
|
+ chatItem.Model = "gpt-4-1106-preview"
|
|
|
+ chatItem.SysUserId = this.SysUser.AdminId
|
|
|
+ chatItem.SysUserRealName = this.SysUser.RealName
|
|
|
+ chatItem.CreateTime = time.Now()
|
|
|
+ chatItem.ModifyTime = time.Now()
|
|
|
+ _, err = aimod.AddAiChat(chatItem)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取数据失败!"
|
|
|
+ br.ErrMsg = "生成话题记录失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ resp.AiChatTopicId = req.AiChatTopicId
|
|
|
+ chatItem := new(aimod.AiChat)
|
|
|
+ chatItem.AiChatTopicId = resp.AiChatTopicId
|
|
|
+ chatItem.Ask = req.Ask
|
|
|
+ chatItem.AskUuid = utils.MD5(req.Ask)
|
|
|
+ chatItem.Answer = answer
|
|
|
+ chatItem.Model = "gpt-4-1106-preview"
|
|
|
+ chatItem.SysUserId = this.SysUser.AdminId
|
|
|
+ chatItem.SysUserRealName = this.SysUser.RealName
|
|
|
+ chatItem.CreateTime = time.Now()
|
|
|
+ chatItem.ModifyTime = time.Now()
|
|
|
+ _, err = aimod.AddAiChat(chatItem)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取数据失败!"
|
|
|
+ br.ErrMsg = "生成话题记录失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *AiController) TopicList() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+ list, err := aimod.GetAiChatTopicList(sysUser.AdminId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取数据失败!"
|
|
|
+ br.ErrMsg = "获取主题记录信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(aimod.AiChatTopicListResp)
|
|
|
+ resp.List = list
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *AiController) TopicDetail() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ aiChatTopicId, _ := this.GetInt("AiChatTopicId")
|
|
|
+ list, err := aimod.GetAiChatList(aiChatTopicId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "获取数据失败!"
|
|
|
+ br.ErrMsg = "获取主题记录信息失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ resp := new(aimod.AiChatDetailResp)
|
|
|
+ resp.List = list
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "获取成功"
|
|
|
+ br.Data = resp
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *AiController) TopicDelete() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var req aimod.TopicDeleteReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.AiChatTopicId <= 0 {
|
|
|
+ br.Msg = "参数错误!"
|
|
|
+ br.ErrMsg = "参数错误!AiChatTopicId:" + strconv.Itoa(req.AiChatTopicId)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ err = aimod.DeleteTopic(req.AiChatTopicId)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "删除失败!"
|
|
|
+ br.ErrMsg = "删除失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "删除成功"
|
|
|
+ br.IsAddLog = true
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func (this *AiController) TopicEdit() {
|
|
|
+ br := new(models.BaseResponse).Init()
|
|
|
+ defer func() {
|
|
|
+ this.Data["json"] = br
|
|
|
+ this.ServeJSON()
|
|
|
+ }()
|
|
|
+
|
|
|
+ sysUser := this.SysUser
|
|
|
+ if sysUser == nil {
|
|
|
+ br.Msg = "请登录"
|
|
|
+ br.ErrMsg = "请登录,SysUser Is Empty"
|
|
|
+ br.Ret = 408
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var req aimod.TopicEditReq
|
|
|
+ err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "参数解析异常!"
|
|
|
+ br.ErrMsg = "参数解析失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if req.AiChatTopicId <= 0 {
|
|
|
+ br.Msg = "参数错误!"
|
|
|
+ br.ErrMsg = "参数错误!AiChatTopicId:" + strconv.Itoa(req.AiChatTopicId)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ topic, err := aimod.GetAiChatTopicByTopicName(req.TopicName)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ br.Msg = "编辑失败!"
|
|
|
+ br.ErrMsg = "获取数据失败!Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if topic != nil && topic.AiChatTopicId != req.AiChatTopicId {
|
|
|
+ br.Msg = "话题名称已存在,请重新修改!"
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ err = aimod.EditTopic(req.AiChatTopicId, req.TopicName)
|
|
|
+ if err != nil {
|
|
|
+ br.Msg = "编辑失败!"
|
|
|
+ br.ErrMsg = "编辑失败,Err:" + err.Error()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ br.Ret = 200
|
|
|
+ br.Success = true
|
|
|
+ br.Msg = "编辑成功"
|
|
|
+ br.IsAddLog = true
|
|
|
+}
|