123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397 |
- package models
- import (
- "fmt"
- "github.com/beego/beego/v2/client/orm"
- "hongze/hongze_mfyx/models/company"
- "hongze/hongze_mfyx/utils"
- "strconv"
- "time"
- )
- type CygxArticleHistoryRecordNewpv struct {
- Id int `orm:"column(id);pk"`
- ArticleId int
- UserId int
- CreateTime time.Time
- ModifyTime time.Time
- Mobile string `description:"手机号"`
- Email string `description:"邮箱"`
- CompanyId int `description:"公司id"`
- CompanyName string `description:"公司名称"`
- StopTime int `description:"停留时间"`
- OutType int `description:"退出方式,1正常退出,2强制关闭"`
- Source string `description:"来源,MOBILE:手机端,PC:电脑端"`
- RegisterPlatform int `description:"来源 1小程序,2:网页"`
- }
- // 添加阅读记录信息
- func AddCygxArticleViewRecordNewpv(item *CygxArticleHistoryRecordNewpv) (lastId int64, err error) {
- o, err := orm.NewOrm().Begin()
- if err != nil {
- return
- }
- defer func() {
- fmt.Println(err)
- if err == nil {
- o.Commit()
- } else {
- o.Rollback()
- }
- }()
- userSeller, err := company.GetCompanyProductListByUserId(item.UserId)
- if err != nil {
- return
- }
- lastId, err = o.Insert(item)
- if err != nil {
- return
- }
- //写入记录到总的统计表
- record := new(CygxArticleHistoryRecordAll)
- record.UserId = item.UserId
- record.ArticleId = item.ArticleId
- record.CreateTime = item.CreateTime.Format(utils.FormatDateTime)
- record.ModifyTime = item.ModifyTime
- record.Mobile = item.Mobile
- record.Email = item.Email
- record.CompanyId = item.CompanyId
- record.CompanyName = item.CompanyName
- record.StopTime = item.StopTime
- record.OutType = item.OutType
- record.Source = item.Source
- record.CompanyStatus = userSeller.Status
- record.SellerName = userSeller.SellerName
- record.RegisterPlatform = utils.REGISTER_PLATFORM
- record.Platfor = 1
- lastId, err = o.Insert(record)
- if err != nil {
- return
- }
- // 软删除当天策略平台的文章阅读记录
- if item.Mobile != "" {
- sql := `UPDATE cygx_article_history_record_all
- SET is_del = 1
- WHERE
- article_id = ?
- AND mobile = ?
- AND platfor = 2
- AND create_time >= date(NOW()) `
- _, err = o.Raw(sql, record.ArticleId, record.Mobile).Exec()
- }
- return
- }
- // 获取最新的一条阅读记录
- func GetNewArticleHistoryRecordNewpv(uid, articleId int, modifytime string) (item *AddStopTimeNewRep, err error) {
- o := orm.NewOrm()
- sql := `SELECT * FROM cygx_article_history_record_newpv WHERE user_id = ? AND article_id = ? AND modify_time <='` + modifytime + `' ORDER BY id DESC LIMIT 1;`
- err = o.Raw(sql, uid, articleId).QueryRow(&item)
- return
- }
- // 把十分钟之内的阅读记录进行累加
- func UpdateCygxArticleViewRecordNewpv(itemRep *CygxArticleHistoryRecordNewpv, stopTime int) (err error) {
- o, err := orm.NewOrm().Begin()
- if err != nil {
- return
- }
- defer func() {
- fmt.Println(err)
- if err == nil {
- o.Commit()
- } else {
- o.Rollback()
- }
- }()
- sql := `UPDATE cygx_article_history_record_newpv
- SET modify_time = NOW(), stop_time = stop_time + ` + strconv.Itoa(stopTime) + `
- WHERE
- article_id = ?
- AND user_id = ?
- AND out_type = 2
- AND timestampdiff(MINUTE,modify_time,NOW()) < 10`
- _, err = o.Raw(sql, itemRep.ArticleId, itemRep.UserId).Exec()
- // 修改总表的停留时间
- sql = `UPDATE cygx_article_history_record_all
- SET modify_time = NOW(), stop_time = stop_time + ` + strconv.Itoa(stopTime) + `
- WHERE
- article_id = ?
- AND user_id = ?
- AND out_type = 2
- AND timestampdiff(MINUTE,modify_time,NOW()) < 10`
- _, err = o.Raw(sql, itemRep.ArticleId, itemRep.UserId).Exec()
- return
- }
- // 把十分钟之内的阅读记录进行累加
- func UpdateCygxArticleViewRecordNewpvList(itemRep *CygxArticleHistoryRecordNewpv, stopTime int) (err error) {
- o := orm.NewOrm()
- sql := `UPDATE cygx_article_history_record_newpv
- SET stop_time = stop_time + ` + strconv.Itoa(stopTime) + `
- WHERE
- article_id = ?
- AND user_id = ?
- AND modify_time = ?
- AND id = ?`
- _, err = o.Raw(sql, itemRep.ArticleId, itemRep.UserId, itemRep.ModifyTime, itemRep.Id).Exec()
- return
- }
- // 获取当天总表的阅读记录
- func GetArticleHistoryRecordAllList() (items []*CygxArticleHistoryRecordNewpv, err error) {
- o := orm.NewOrm()
- sql := ` SELECT * FROM cygx_article_history_record_all WHERE create_time >= date(NOW())
- AND mobile <> ''
- AND platfor = 1
- GROUP BY mobile,article_id `
- _, err = o.Raw(sql).QueryRows(&items)
- return
- }
- // 获取列表信息根据手机号分组
- func GetArticleHistoryRecordAllByMobileList(condition string) (items []*CygxArticleHistoryRecordAll, err error) {
- o := orm.NewOrm()
- sql := `SELECT * FROM cygx_article_history_record_all WHERE 1 = 1 ` + condition + ` GROUP BY mobile `
- _, err = o.Raw(sql).QueryRows(&items)
- return
- }
- // 修改用户阅读的相关信息
- func UpdateCygxArticleHistoryRecordAll(wxUser *WxUserItem) (err error) {
- o := orm.NewOrm()
- var sql string
- if wxUser.Mobile != "" {
- sql = `UPDATE cygx_article_history_record_all SET email=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE mobile=? `
- _, err = o.Raw(sql, wxUser.Email, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Mobile).Exec()
- } else if wxUser.Email != "" {
- sql = `UPDATE cygx_article_history_record_all SET mobile=?,company_id=?,company_name=?,user_id=?,real_name=? WHERE email=? `
- _, err = o.Raw(sql, wxUser.Mobile, wxUser.CompanyId, wxUser.CompanyName, wxUser.UserId, wxUser.RealName, wxUser.Email).Exec()
- }
- return
- }
- type EsUserInteraction struct {
- Id int `description:"主键ID"`
- ArticleId int `description:"文章id"`
- ArticleType int `description:"文章类型 1:查研观向, 2:策略平台"`
- Title string `description:"标题"`
- PublishDate string `description:"发布时间"`
- CreateTime string `description:"创建时间"`
- StopTime string `description:"阅读停留时间"`
- RealName string `description:"姓名"`
- CompanyName string `description:"公司名称"`
- CompanyId int `description:"公司ID"`
- SellerName string `description:"所属销售"`
- SellerId int `description:"所属销售ID"`
- Mobile string `description:"手机号"`
- Email string `description:"邮箱"`
- UserId int `description:"用户ID"`
- UserArticleHistoryNum int `description:"用户阅读数量"`
- CompanyArticleHistoryNum int `description:"机构阅读数量"`
- }
- // 机构阅读记录列表
- func GetCygxArticleHistoryRecordByCompanyList(condition string, startSize, pageSize int) (items []*EsUserInteraction, err error) {
- o := orm.NewOrm()
- sql := ` SELECT
- r.id,
- art.title,
- art.article_id,
- art.article_id_md5,
- art.publish_date,
- art.category_name,
- r.create_time,
- r.mobile,
- r.user_id,
- r.company_name,
- cp.seller_name,
- cp.seller_id,
- cp.company_id,
- r.real_name,
- r.stop_time,
- ci.article_history_num AS company_article_history_num,
- ui.article_history_num AS user_article_history_num
- FROM
- cygx_article_history_record_all AS r
- INNER JOIN cygx_article AS art ON art.article_id = r.article_id
- INNER JOIN company_product AS cp ON cp.company_id = r.company_id
- AND cp.product_id = 2
- INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
- INNER JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
- WHERE
- 1 = 1
- AND r.is_del = 0 ` + condition + ` GROUP BY r.id `
- if startSize > 0 || pageSize > 0 {
- sql += ` LIMIT ` + strconv.Itoa(startSize) + "," + strconv.Itoa(pageSize)
- }
- _, err = o.Raw(sql).QueryRows(&items)
- return
- }
- // 机构阅读记录列表
- func GetCygxArticleHistoryRecordByCompanyListNew(condition string, pars interface{}, startSize, pageSize int) (items []*EsUserInteraction, err error) {
- o := orm.NewOrm()
- sql := ` SELECT
- r.id,
- art.title,
- art.article_id,
- art.article_id_md5,
- art.publish_date,
- art.category_name,
- r.create_time,
- r.mobile,
- r.user_id,
- r.company_name,
- r.company_id,
- r.real_name,
- r.stop_time,
- ci.article_history_num AS company_article_history_num,
- ui.article_history_num AS user_article_history_num
- FROM
- cygx_article_history_record_all AS r
- INNER JOIN cygx_article AS art ON art.article_id = r.article_id
- LEFT JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
- LEFT JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
- WHERE
- 1 = 1
- AND r.is_del = 0 ` + condition + ` GROUP BY r.id `
- if startSize > 0 || pageSize > 0 {
- sql += ` LIMIT ` + strconv.Itoa(startSize) + "," + strconv.Itoa(pageSize)
- }
- _, err = o.Raw(sql, pars).QueryRows(&items)
- return
- }
- // 获取阅读记录数量
- func GetCygxArticleHistoryCountByCompany(condition string) (count int, err error) {
- o := orm.NewOrm()
- sqlCount := `SELECT
- COUNT( 1 ) AS count
- FROM
- (
- SELECT
- COUNT( 1 )
- FROM
- cygx_article_history_record_all AS r
- INNER JOIN cygx_article AS art ON art.article_id = r.article_id
- INNER JOIN company_product AS cp ON cp.company_id = r.company_id
- AND cp.product_id = 2
- INNER JOIN cygx_company_interaction_num AS ci ON ci.company_id = r.company_id
- INNER JOIN cygx_user_interaction_num AS ui ON ui.user_id = r.user_id
- WHERE
- r.is_del = 0 ` + condition + `
- GROUP BY
- r.id
- ) AS count `
- err = o.Raw(sqlCount).QueryRow(&count)
- return
- }
- type CygxArticleHistoryAllTopResp struct {
- Pv int `description:"阅读PV"`
- ArticleId int `description:"文章id"`
- Num int `description:"数量"`
- }
- // 获取近15天之内的阅读数据最多的15报告
- func GetCygxArticleHistoryAllTop(pars []interface{}, condition string) (items []*CygxArticleHistoryAllTopResp, err error) {
- o := orm.NewOrm()
- sql := ` SELECT
- COUNT( 1 ) AS pv,
- a.article_id
- FROM
- cygx_article_history_record_all AS l
- INNER JOIN cygx_article AS a ON a.article_id = l.article_id
- INNER JOIN cygx_report_mapping AS m ON m.category_id = a.category_id
- WHERE
- 1 = 1
- AND l.platfor = 1` + condition + `
- GROUP BY
- l.article_id
- ORDER BY
- pv DESC ,a.publish_date DESC
- LIMIT 15 `
- _, err = o.Raw(sql, pars).QueryRows(&items)
- return
- }
- // 列表
- func GetCygxArticleHistoryRecordNewpvList(condition string, pars []interface{}) (items []*CygxArticleHistoryRecordNewpv, err error) {
- o := orm.NewOrm()
- sql := `SELECT * FROM cygx_article_history_record_newpv as art WHERE 1= 1 `
- if condition != "" {
- sql += condition
- }
- _, err = o.Raw(sql, pars).QueryRows(&items)
- return
- }
- type ListPvUvResp struct {
- ArticleId int `description:"文章ID"`
- Pv int `description:"pv"`
- Uv int `description:"pv"`
- }
- // 列表
- func GetCygxArticleHistoryRecordNewpvListPv(condition string, pars []interface{}) (items []*ListPvUvResp, err error) {
- o := orm.NewOrm()
- sql := `SELECT
- COUNT( 1 ) AS pv,
- article_id
- FROM
- cygx_article_history_record_newpv WHERE 1 = 1 `
- if condition != "" {
- sql += condition
- }
- sql += ` GROUP BY article_id `
- _, err = o.Raw(sql, pars).QueryRows(&items)
- return
- }
- // 查研PV列表
- func GetCygxArticleHistoryRecordNewpvListPvCy(condition string, pars []interface{}) (items []*ListPvUvResp, err error) {
- o := orm.NewOrm()
- sql := `SELECT
- COUNT( 1 ) AS pv,
- article_id
- FROM
- cygx_article_history_record_all WHERE 1 = 1 AND platfor = 1 `
- if condition != "" {
- sql += condition
- }
- sql += ` GROUP BY article_id `
- _, err = o.Raw(sql, pars).QueryRows(&items)
- return
- }
- // 策略PV列表
- func GetCygxArticleHistoryRecordNewpvListPvCl(condition string, pars []interface{}) (items []*ListPvUvResp, err error) {
- o := orm.NewOrm()
- sql := `SELECT
- COUNT( 1 ) AS pv,
- article_id
- FROM
- cygx_article_history_record_all WHERE 1 = 1 AND platfor = 2 AND is_del = 0 `
- if condition != "" {
- sql += condition
- }
- sql += ` GROUP BY article_id `
- _, err = o.Raw(sql, pars).QueryRows(&items)
- return
- }
- // 获取数量
- func GetCygxArticleHistoryRecordAllCount(condition string, pars []interface{}) (count int, err error) {
- sqlCount := ` SELECT COUNT(1) AS count FROM cygx_article_history_record_all WHERE 1= 1 `
- if condition != "" {
- sqlCount += condition
- }
- o := orm.NewOrm()
- err = o.Raw(sqlCount, pars).QueryRow(&count)
- return
- }
|