package model import ( "SciencesServer/app/common/model" "SciencesServer/serve/orm" "fmt" "time" ) type ServiceMessage struct { *model.ServiceMessage } type ServiceMessageInfo struct { *model.ServiceMessage model.Area HandleContent string `json:"handle_content"` HandleCreatedAt time.Time `json:"handle_created_at"` } func (m *ServiceMessage) Message(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ServiceMessageInfo, error) { db := orm.GetDB().Table(m.TableName()+" AS m"). Select("m.*", "l.content AS handle_content", "l.created_at AS handle_created_at", "t.province", "t.city"). Joins(fmt.Sprintf("LEFT JOIN (SELECT MAX(id) AS id, message_id, MAX(created_at) AS created_at, MAX(content) AS content "+ "FROM %s WHERE is_deleted = %d GROUP BY message_id) AS l ON m.id = l.message_id", model.NewServiceMessageLog().TableName(), model.DeleteStatusForNot)). Joins(fmt.Sprintf("LEFT JOIN %s AS t ON m.tenant_id = t.id", model.NewSysTenant().TableName())) if len(where) > 0 { for _, v := range where { db = db.Where(v.Condition, v.Value) } } out := make([]*ServiceMessageInfo, 0) if err := db.Count(count).Error; err != nil { return nil, err } if err := db.Order("m.id " + model.OrderModeToDesc).Offset((page - 1) * pageSize).Limit(pageSize).Scan(&out).Error; err != nil { return nil, err } return out, nil } func NewServiceMessage() *ServiceMessage { return &ServiceMessage{model.NewServiceMessage()} }