message.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package model
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/os/gctx"
  6. "github.com/gogf/gf/v2/os/glog"
  7. "github.com/gogf/gf/v2/util/gconv"
  8. "time"
  9. )
  10. var (
  11. Message = &cMessage{
  12. Arr: make([]*SaveMessage, 0, 100),
  13. }
  14. )
  15. type cMessage struct {
  16. Arr []*SaveMessage
  17. }
  18. type ResHistory struct {
  19. Id string `json:"id" dc:"信息加密id"`
  20. Content string `json:"content" dc:"内容"`
  21. Type int `json:"type" dc:"1:用户提问 2:智能助手回复"`
  22. Useful int `json:"useful" dc:"1:有用 -1:无用 0:暂无评价"`
  23. CreateTime time.Time `json:"create_time" dc:"聊天时间"`
  24. }
  25. type SaveMessage struct {
  26. Content string `json:"content" dc:"内容"`
  27. Type int `json:"type" dc:"1:用户提问 2:智能助手回复"`
  28. Useful int `json:"useful" dc:"1:有用 -1:无用 0:暂无评价"`
  29. Item int `json:"item" dc:"1:常见问题 2:业务意图 3:chatGpt"`
  30. Refer string `json:"refer" dc:"会话来源地址"`
  31. PersonId int64 `json:"person_id" dc:"自然人id"`
  32. CreateTime string `json:"create_time" dc:"时间"`
  33. }
  34. // SaveMessage 保存聊天信息
  35. func (m *cMessage) SaveMessage(msg *SaveMessage) {
  36. m.Arr = append(m.Arr, msg)
  37. if len(m.Arr) > 0 {
  38. tmp, ctx := m.Arr, gctx.New()
  39. m.Arr = make([]*SaveMessage, 0, 5)
  40. val := gconv.Maps(tmp)
  41. r, err := g.Model("ai_message").Data(val).Insert()
  42. if err != nil {
  43. glog.Error(ctx, "插入聊天记录异常,error:%s\ndata:%v", err, val)
  44. g.Dump(val)
  45. }
  46. affect, _ := r.RowsAffected()
  47. if len(tmp) == gconv.Int(affect) {
  48. glog.Error(ctx, "插入聊天记录异常 共%d条 插入%d条,error:%s\ndata:%v", len(tmp), affect, err, val)
  49. g.Dump(val)
  50. } else {
  51. glog.Info(ctx, "插入%d条聊天记录成功", affect)
  52. }
  53. }
  54. }
  55. // GetMessage 查询聊天信息
  56. func (m *cMessage) GetMessage(userId int64, pageNum, pageSize int) (h []ResHistory, err error) {
  57. err = g.Model("ai_message").Where("person_id = ?", userId).OrderDesc("create_time").OrderDesc("id").Limit(pageNum, (pageNum+1)*pageSize).Scan(&h)
  58. if err != nil {
  59. return
  60. }
  61. return
  62. }
  63. // Evaluate 评价
  64. func (m *cMessage) Evaluate(userId int64, megId string, value int) error {
  65. res, err := g.Model("ai_message").One("id =? and person_id =? and type=2", megId, userId)
  66. if err != nil {
  67. return err
  68. }
  69. if res == nil {
  70. return fmt.Errorf("未找到记录")
  71. }
  72. if gconv.Int(res.Map()["useful"]) != 0 {
  73. return fmt.Errorf("已评价")
  74. }
  75. r, _ := g.Model("ai_message").Data(g.Map{"useful": value}).Where("id =? and person_id =? and type=2", megId, userId).Update()
  76. affect, _ := r.RowsAffected()
  77. if affect != 1 {
  78. return fmt.Errorf("评价异常")
  79. }
  80. return nil
  81. }