123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- package dao
- import (
- "context"
- "time"
- "go-common/app/job/openplatform/open-market/model"
- "go-common/library/database/sql"
- "go-common/library/log"
- )
- const (
- _fetchProjectList = "SELECT `id`,`name`,`start_time`,`type` FROM `project` WHERE `status` = 1 AND `type` IN (1,3,4,5,6,8)"
- //_fetchUserWishFirst = "SELECT `mtime` FROM `user_wish` WHERE `item_id` = ? ORDER BY `mtime` LIMIT 1"
- _fetchUserWishByDay = "SELECT DISTINCT `id` FROM `user_wish` WHERE `item_id` = ? AND `mtime` BETWEEN ? AND ?"
- //_fetchUserFavoriteFirst = "SELECT `mtime` FROM `user_favorite` WHERE `item_id` = ? AND `status` = 1 AND `type` = 1 ORDER BY `mtime` LIMIT 1"
- _fetchUserFavoriteByDay = "SELECT DISTINCT `id` FROM `user_favorite` WHERE `item_id` = ? AND `status` = 1 AND `type` = 1 AND `mtime` BETWEEN ? AND ? "
- _fetchStockIfSoldOut = "SELECT `sku_id` FROM `sku_stock` WHERE `item_id` = ? AND `stock` <> 0 LIMIT 1"
- //_fetchStockSoldOutDay = "SELECT `mtime` FROM `sku_stock` WHERE `item_id` = ? AND `stock` = 0 ORDER BY `mtime` DESC LIMIT 1"
- )
- //FetchProject query project list from mysql
- func (d *Dao) FetchProject(c context.Context) (projectList []*model.Project, err error) {
- var rows *sql.Rows
- if rows, err = d.ticketDB.Query(c, _fetchProjectList); err != nil {
- log.Error("d._fetchProjectListSQL.Query error(%v)", err)
- return
- }
- defer rows.Close()
- for rows.Next() {
- project := new(model.Project)
- if err = rows.Scan(&project.ID, &project.Name, &project.StartTime, &project.Type); err != nil {
- log.Error("row.Scan() error(%v)", err)
- projectList = nil
- return
- }
- //if project.ID == 11644 || project.ID == 11678 || project.ID == 11643 || project.ID == 11650 {
- // continue
- //}
- if soldOut := d.CheckStock(context.TODO(), project.ID); soldOut {
- continue
- }
- projectList = append(projectList, project)
- }
- err = rows.Err()
- return
- }
- //CheckStock if a project sold out,return date
- func (d *Dao) CheckStock(c context.Context, projectID int32) (soldOut bool) {
- row := d.ticketDB.QueryRow(c, _fetchStockIfSoldOut, projectID)
- var skuID int
- if err := row.Scan(&skuID); err != nil {
- if err == sql.ErrNoRows {
- return true
- }
- log.Error("row.Scan() error(%v)", err)
- }
- return
- }
- //WishData fetch wishcount by project and date
- func (d *Dao) WishData(c context.Context, projectID int32, startTimeUnix int64) (wishData map[int32]int64, err error) {
- var (
- startTime string
- firstTime string
- firstDay time.Time
- startDay time.Time
- daysBefore = -1
- )
- wishData = make(map[int32]int64)
- startTime = time.Unix(startTimeUnix, 0).Add(time.Hour * 24).Format(_dateFormat)
- firstTime = time.Unix(startTimeUnix, 0).Add(time.Hour * 24).Add(time.Hour * 24 * -30).Format(_dateFormat)
- startDay, _ = time.Parse(_dateFormat, startTime)
- firstDay, _ = time.Parse(_dateFormat, firstTime)
- for {
- daysBefore++
- startDay = startDay.Add(time.Hour * -24)
- if !(startDay.Before(firstDay)) {
- var rows *sql.Rows
- count := 0
- if rows, err = d.ticketDB.Query(c, _fetchUserWishByDay, projectID, startDay.Format(_dateFormat), startDay.Add(time.Hour*24).Format(_dateFormat)); err != nil {
- log.Error("wish count query error(%v)", err)
- return
- }
- for rows.Next() {
- count++
- }
- err = rows.Err()
- wishData[int32(daysBefore)] = int64(count)
- rows.Close()
- continue
- }
- break
- }
- return
- }
- //FavoriteData fetch favoritecount by project and date
- func (d *Dao) FavoriteData(c context.Context, projectID int32, startTimeUnix int64) (favoriteData map[int32]int64, err error) {
- var (
- startTime string
- firstTime string
- firstDay time.Time
- startDay time.Time
- daysBefore = -1
- )
- favoriteData = make(map[int32]int64)
- startTime = time.Unix(startTimeUnix, 0).Add(time.Hour * 24).Format(_dateFormat)
- firstTime = time.Unix(startTimeUnix, 0).Add(time.Hour * 24).Add(time.Hour * 24 * -30).Format(_dateFormat)
- startDay, _ = time.Parse(_dateFormat, startTime)
- firstDay, _ = time.Parse(_dateFormat, firstTime)
- for {
- daysBefore++
- startDay = startDay.Add(time.Hour * -24)
- if !(startDay.Before(firstDay)) {
- var rows *sql.Rows
- count := 0
- if rows, err = d.ticketDB.Query(c, _fetchUserFavoriteByDay, projectID, startDay.Format(_dateFormat), startDay.Add(time.Hour*24).Format(_dateFormat)); err != nil {
- log.Error("wish count query error(%v)", err)
- return
- }
- for rows.Next() {
- count++
- }
- err = rows.Err()
- favoriteData[int32(daysBefore)] = int64(count)
- rows.Close()
- continue
- }
- break
- }
- return
- }
|