visitors.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package models
  2. type Visitor struct {
  3. Model
  4. Name string `gorm:"size:50 not null default:''" json:"name"`
  5. Avator string `gorm:"size:255 not null default:''" json:"avator"`
  6. SourceIp string `gorm:"size:32 not null default:''" json:"source_ip"`
  7. ToId string `gorm:"size:50 not null default:''" json:"to_id"`
  8. VisitorId string `gorm:"size:100 not null default:'' uniqueIndex:uidx_visitor_id" json:"visitor_id"`
  9. Status uint `gorm:"size:4 not null default:0" json:"status"`
  10. Refer string `gorm:"size:500 not null default:''" json:"refer"`
  11. City string `gorm:"size:100 not null default:''" json:"city"`
  12. ClientIp string `gorm:"size:32 not null default:''" json:"client_ip"`
  13. }
  14. func CreateVisitor(name string, avator string, sourceIp string, toId string, visitorId string, refer string, city string, clientIp string) {
  15. old := FindVisitorByVistorId(visitorId)
  16. if old.Name != "" {
  17. //更新状态上线
  18. UpdateVisitor(visitorId, 1, clientIp, sourceIp, refer)
  19. return
  20. }
  21. v := &Visitor{
  22. Name: name,
  23. Avator: avator,
  24. SourceIp: sourceIp,
  25. ToId: toId,
  26. VisitorId: visitorId,
  27. Status: 1,
  28. Refer: refer,
  29. City: city,
  30. ClientIp: clientIp,
  31. }
  32. DB.Create(v)
  33. }
  34. func FindVisitorByVistorId(visitorId string) Visitor {
  35. var v Visitor
  36. DB.Where("visitor_id = ?", visitorId).First(&v)
  37. return v
  38. }
  39. func FindVisitors(page int, pagesize int) []Visitor {
  40. offset := (page - 1) * pagesize
  41. if offset < 0 {
  42. offset = 0
  43. }
  44. var visitors []Visitor
  45. DB.Offset(offset).Limit(pagesize).Order("status desc, updated_at desc").Find(&visitors)
  46. return visitors
  47. }
  48. func FindVisitorsByKefuId(page int, pagesize int, kefuId string) []Visitor {
  49. offset := (page - 1) * pagesize
  50. if offset < 0 {
  51. offset = 0
  52. }
  53. var visitors []Visitor
  54. DB.Where("to_id=?", kefuId).Offset(offset).Limit(pagesize).Order("status desc, updated_at desc").Find(&visitors)
  55. return visitors
  56. }
  57. func FindVisitorsOnline() []Visitor {
  58. var visitors []Visitor
  59. DB.Where("status = ?", 1).Find(&visitors)
  60. return visitors
  61. }
  62. func UpdateVisitorStatus(visitorId string, status uint) {
  63. visitor := Visitor{}
  64. DB.Model(&visitor).Where("visitor_id = ?", visitorId).Update("status", status)
  65. }
  66. func UpdateVisitor(visitorId string, status uint, clientIp string, sourceIp string, refer string) {
  67. visitor := &Visitor{
  68. Status: status,
  69. ClientIp: clientIp,
  70. SourceIp: sourceIp,
  71. Refer: refer,
  72. }
  73. DB.Model(visitor).Where("visitor_id = ?", visitorId).Updates(visitor)
  74. }
  75. //查询条数
  76. func CountVisitors() int64 {
  77. var count int64
  78. DB.Model(&Visitor{}).Count(&count)
  79. return count
  80. }
  81. //查询条数
  82. func CountVisitorsByKefuId(kefuId string) int64 {
  83. var count int64
  84. DB.Model(&Visitor{}).Where("to_id=?", kefuId).Count(&count)
  85. return count
  86. }