package models type Message struct { Model KefuId string `gorm:"size:50 not null default:'' index:'idx_kefu_id'" json:"kefu_id"` VisitorId string `gorm:"size:50 not null default:'' index:'idx_visitor_id'" json:"visitor_id"` Content string `gorm:"size:2048 not null default:''" json:"content"` MesType string `gorm:"default:'visitor'" json:"mes_type"` Status string `gorm:"not null default:'unread'" json:"status"` } func CreateMessage(kefu_id string, visitor_id string, content string, mes_type string) { v := &Message{ KefuId: kefu_id, VisitorId: visitor_id, Content: content, MesType: mes_type, Status: "unread", } DB.Create(v) } //func FindMessageByVisitorId(visitor_id string) []Message { // var messages []Message // DB.Where("visitor_id=?", visitor_id).Order("id asc").Find(&messages) // return messages //} func FindMessagesByVisitorAndKefuId(visitorId, kefuId string) []Message { var messages []Message DB.Where("visitor_id=? AND kefu_id=?", visitorId, kefuId).Order("id asc").Find(&messages) return messages } //修改消息状态 func ReadMessageByVisitorId(visitor_id string) { message := &Message{ Status: "read", } DB.Model(&message).Where("visitor_id=?", visitor_id).Updates(message) } //获取未读数 func FindUnreadMessageNumByVisitorId(visitor_id string) int64 { var count int64 DB.Where("visitor_id=? and status=?", visitor_id, "unread").Count(&count) return count } //查询最后一条消息 func FindLastMessage(visitorIds []string) []Message { var messages []Message //subQuery := DB. // Table("message"). // Where(" visitor_id in (? )", visitorIds). // Order("id desc"). // Limit(1024). // SubQuery() //DB.Raw("SELECT ANY_VALUE(visitor_id) visitor_id,ANY_VALUE(id) id,ANY_VALUE(content) content FROM ? message_alia GROUP BY visitor_id", subQuery).Scan(&messages) //DB.Select("ANY_VALUE(visitor_id) visitor_id,MAX(ANY_VALUE(id)) id,ANY_VALUE(content) content").Group("visitor_id").Find(&messages) return messages } //查询条数 func CountMessage() int64 { var count int64 DB.Model(&Message{}).Count(&count) return count }