package models import ( "eta/eta_mini_crm/utils" "fmt" "github.com/beego/beego/v2/client/orm" "strings" "time" ) // UserReadRecord 用户阅读统计表 type UserReadRecord struct { Id int `orm:"column(id);pk"` UserId int `description:"用户ID"` ReportId int `description:"报告ID"` ReportTitle string `description:"报告标题"` ClassifyIdFirst int `description:"一级分类ID"` ClassifyNameFirst string `description:"一级分类名称"` ClassifyIdSecond int `description:"二级分类ID"` ClassifyNameSecond string `description:"二级分类名称"` ClassifyIdThird int `description:"三级分类ID"` ClassifyNameThird string `description:"三级分类名称"` StartTimestamp int `description:"阅读开始时间戳"` EndTimestamp int `description:"阅读结束时间戳"` ReportSource int `description:"报告来源:1-研报中心;2-文档管理库"` CreateTime time.Time `description:"创建时间"` } func (m *UserReadRecord) TableName() string { return "user_read_record" } type UserReadRecordCols struct { PrimaryId string UserId string ReportId string ReportTitle string ClassifyIdFirst string ClassifyNameFirst string ClassifyIdSecond string ClassifyNameSecond string ClassifyIdThird string ClassifyNameThird string StartTimestamp string EndTimestamp string ReportSource string CreateTime string } func (m *UserReadRecord) Cols() UserReadRecordCols { return UserReadRecordCols{ PrimaryId: "id", UserId: "user_id", ReportId: "report_id", ReportTitle: "report_title", ClassifyIdFirst: "classify_id_first", ClassifyNameFirst: "classify_name_first", ClassifyIdSecond: "classify_id_second", ClassifyNameSecond: "classify_name_second", ClassifyIdThird: "classify_id_third", ClassifyNameThird: "classify_name_third", StartTimestamp: "start_timestamp", EndTimestamp: "end_timestamp", ReportSource: "report_source", CreateTime: "create_time", } } func (m *UserReadRecord) GetCountByCondition(condition string, pars []interface{}) (count int, err error) { o := orm.NewOrm() sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition) err = o.Raw(sql, pars).QueryRow(&count) return } func (m *UserReadRecord) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*UserReadRecord, 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 1=1 %s %s`, fields, m.TableName(), condition, order) _, err = o.Raw(sql, pars).QueryRows(&items) return } func (m *UserReadRecord) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*UserReadRecord, 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 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order) _, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items) return } type UserReadRecordItem struct { UserId int `description:"用户ID"` ReportId int `description:"报告ID"` ReportTitle string `description:"报告标题"` ClassifyNameFirst string `description:"一级分类名称"` ClassifyNameSecond string `description:"二级分类名称"` ClassifyNameThird string `description:"三级分类名称"` ReadDuration string `description:"阅读时长"` ReportSource int `description:"报告来源:1-研报中心;2-文档管理库"` CreateTime string `description:"创建时间"` } func (m *UserReadRecord) Format2Item() (item *UserReadRecordItem) { item = new(UserReadRecordItem) item.UserId = m.UserId item.ReportId = m.ReportId item.ReportTitle = m.ReportTitle item.ClassifyNameFirst = m.ClassifyNameFirst item.ClassifyNameSecond = m.ClassifyNameSecond item.ClassifyNameThird = m.ClassifyNameThird if m.StartTimestamp > 0 && m.EndTimestamp > 0 { item.ReadDuration = utils.SecondsToHMS(int64(m.EndTimestamp - m.StartTimestamp)) } item.ReportSource = m.ReportSource item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, m.CreateTime) return }