package models import ( "eta/eta_mini_api/utils" "fmt" "github.com/beego/beego/v2/client/orm" "strings" "time" ) // Users 用户表 type Users struct { UserId int `orm:"column(user_id);pk"` RealName string `description:"用户姓名"` Mobile string `description:"手机号"` AreaCode string `description:"区号"` SellerId int `description:"销售ID"` SellerName string `description:"销售名称"` SysUserId int `description:"操作人ID"` SysUserRealName string `description:"操作人姓名"` CompanyId int `description:"所属机构ID"` CompanyName string `description:"所属机构名称"` Status int `description:"用户类型:1-试用用户;2-正式用户"` AuthStatus int `description:"权限状态:0-关闭;1-开启"` IsRegistered int `description:"注册状态:0-未注册;1-已注册"` RegisterTime time.Time `description:"注册时间"` Subscribe int `description:"是否关注公众号:0-未关注;1-已关注"` LastReadTime time.Time `description:"最后一次阅读时间"` ReadTimes int `description:"阅读次数"` OpenId string `description:"open_id"` UnionId string `description:"用户统一标识"` IsDeleted int `description:"删除状态:0-正常;1-已删除"` CreateTime time.Time `description:"创建时间"` ModifyTime time.Time `description:"修改时间"` } func (m *Users) TableName() string { return "users" } type UsersCols struct { PrimaryId string RealName string Mobile string AreaCode string SellerId string SellerName string SysUserId string SysUserRealName string CompanyId string CompanyName string Status string AuthStatus string IsRegistered string RegisterTime string Subscribe string LastReadTime string ReadTimes string OpenId string UnionId string IsDeleted string CreateTime string ModifyTime string } func (m *Users) Cols() UsersCols { return UsersCols{ PrimaryId: "user_id", RealName: "real_name", Mobile: "mobile", AreaCode: "area_code", SellerId: "seller_id", SellerName: "seller_name", SysUserId: "sys_user_id", SysUserRealName: "sys_user_real_name", CompanyId: "company_id", CompanyName: "company_name", Status: "status", AuthStatus: "auth_status", IsRegistered: "is_registered", RegisterTime: "register_time", Subscribe: "subscribe", LastReadTime: "last_read_time", ReadTimes: "read_times", OpenId: "open_id", UnionId: "union_id", IsDeleted: "is_deleted", CreateTime: "create_time", ModifyTime: "modify_time", } } func (m *Users) Create() (err error) { o := orm.NewOrm() id, err := o.Insert(m) if err != nil { return } m.UserId = int(id) return } func (m *Users) Update(cols []string) (err error) { o := orm.NewOrm() _, err = o.Update(m, cols...) return } func (m *Users) GetItemById(id int) (item *Users, err error) { o := orm.NewOrm() sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = %d AND %s = ? LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, m.Cols().PrimaryId) err = o.Raw(sql, id).QueryRow(&item) return } func (m *Users) GetItemByCondition(condition string, pars []interface{}, orderRule string) (item *Users, err error) { o := orm.NewOrm() order := `` if orderRule != "" { order = ` ORDER BY ` + orderRule } sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = %d %s %s LIMIT 1`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order) err = o.Raw(sql, pars).QueryRow(&item) return } func (m *Users) GetCountByCondition(condition string, pars []interface{}) (count int, err error) { o := orm.NewOrm() sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE %s = %d %s`, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition) err = o.Raw(sql, pars).QueryRow(&count) return } func (m *Users) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*Users, err error) { o := orm.NewOrm() fields := strings.Join(fieldArr, ",") if len(fieldArr) == 0 { fields = `*` } order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime) if orderRule != "" { order = ` ORDER BY ` + orderRule } sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = %d %s %s`, fields, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order) _, err = o.Raw(sql, pars).QueryRows(&items) return } func (m *Users) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*Users, err error) { o := orm.NewOrm() fields := strings.Join(fieldArr, ",") if len(fieldArr) == 0 { fields = `*` } order := fmt.Sprintf(`ORDER BY %s DESC`, m.Cols().CreateTime) if orderRule != "" { order = ` ORDER BY ` + orderRule } sql := fmt.Sprintf(`SELECT %s FROM %s WHERE %s = %d %s %s LIMIT ?,?`, fields, m.TableName(), m.Cols().IsDeleted, RowDeletedDefault, condition, order) _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items) return } // UsersItem 用户信息 type UsersItem struct { UserId int `description:"用户ID"` RealName string `description:"用户姓名"` Mobile string `description:"手机号"` MobileHidden string `description:"手机号(隐藏中间四位)"` AreaCode string `description:"区号"` SellerName string `description:"销售名称"` CompanyName string `description:"所属机构名称"` Status int `description:"用户类型:1-试用用户;2-正式用户"` AuthStatus int `description:"权限状态:0-关闭;1-开启"` IsRegistered int `description:"注册状态:0-未注册;1-已注册"` RegisterTime string `description:"注册时间"` Subscribe int `description:"是否关注公众号:0-未关注;1-已关注"` LastReadTime string `description:"最后一次阅读时间"` ReadTimes int `description:"阅读次数"` TrialExpired bool `description:"试用到期:true-已到期"` CreateTime string `description:"创建时间"` ModifyTime string `description:"修改时间"` } func (m *Users) Format2Item() (item *UsersItem) { item = new(UsersItem) item.UserId = m.UserId item.RealName = m.RealName item.Mobile = m.Mobile item.MobileHidden = utils.HideMobileMiddle(m.Mobile) item.AreaCode = m.AreaCode item.SellerName = m.SellerName item.CompanyName = m.CompanyName item.Status = m.Status item.AuthStatus = m.AuthStatus item.IsRegistered = m.IsRegistered item.RegisterTime = utils.TimeTransferString(utils.FormatDateTime, m.RegisterTime) item.Subscribe = m.Subscribe item.LastReadTime = utils.TimeTransferString(utils.FormatDateTime, m.LastReadTime) item.ReadTimes = m.ReadTimes // 试用到期 if m.Status == UserStatusTrial && !m.RegisterTime.IsZero() { expiredTime := m.RegisterTime.Add(3 * 24 * time.Hour) if expiredTime.Before(time.Now().Local()) { item.TrialExpired = true } } item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime) item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, m.ModifyTime) return } func (m *Users) UpdateUserReadTimes(userId int) (err error) { o := orm.NewOrm() sql := fmt.Sprintf(`UPDATE %s SET %s = %s + 1, %s = NOW() WHERE %s = ? LIMIT 1`, m.TableName(), m.Cols().ReadTimes, m.Cols().ReadTimes, m.Cols().LastReadTime, m.Cols().PrimaryId) _, err = o.Raw(sql, userId).Exec() return }