188 lines
7.7 KiB
Go
188 lines
7.7 KiB
Go
package dao
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"go-common/app/admin/main/growup/model"
|
|
"go-common/library/database/sql"
|
|
"go-common/library/log"
|
|
"go-common/library/xstr"
|
|
)
|
|
|
|
const (
|
|
_activityByNameSQL = "SELECT id FROM creative_activity WHERE name = ?"
|
|
_activityCountSQL = "SELECT count(*) FROM creative_activity %s"
|
|
_activitisSQL = "SELECT id,name,signed_start,signed_end,sign_up,sign_up_start,sign_up_end,object,upload_start,upload_end,win_type,require_items,require_value,statistics_start,statistics_end,bonus_type,bonus_time,progress_frequency,update_page,progress_start,progress_end,progress_sync,bonus_query,bonus_query_start,bonus_query_end,background,win_desc,unwin_desc,details FROM creative_activity %s LIMIT ?,?"
|
|
_activityBonusSQL = "SELECT activity_id,ranking,bonus_money FROM activity_bonus WHERE activity_id IN (%s)"
|
|
_upActivityStateCountSQL = "SELECT count(*) FROM up_activity WHERE activity_id = ? AND state IN (%s)"
|
|
_upActivitySQL = "SELECT mid,nickname,sign_up_time,bonus,ranking,state FROM up_activity WHERE activity_id = ? AND state != 0 AND is_deleted = 0 LIMIT ?,?"
|
|
_upActivitySuccessSQL = "SELECT mid,nickname,aids,aid_num,bonus,success_time,state FROM up_activity WHERE activity_id = ? AND state IN (2,3) %s AND is_deleted = 0 LIMIT ?,?"
|
|
|
|
_txInsertActivitySQL = "INSERT INTO creative_activity(name,creator,signed_start,signed_end,sign_up,sign_up_start,sign_up_end,object,upload_start,upload_end,win_type,require_items,require_value,statistics_start,statistics_end,bonus_type,bonus_time,progress_frequency,update_page,progress_start,progress_end,progress_sync,bonus_query,bonus_query_start,bonus_query_end,background,win_desc,unwin_desc,details) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) %s"
|
|
_txInsertBonusRankSQL = "INSERT INTO activity_bonus(activity_id,ranking,bonus_money) VALUES %s ON DUPLICATE KEY UPDATE activity_id=VALUES(activity_id),ranking=VALUES(ranking),bonus_money=VALUES(bonus_money)"
|
|
|
|
_updateUpActivityStateSQL = "UPDATE up_activity SET state = ? WHERE activity_id = ? AND mid IN (%s) AND state = ?"
|
|
)
|
|
|
|
// GetActivityByName get activity by name
|
|
func (d *Dao) GetActivityByName(c context.Context, name string) (id int64, err error) {
|
|
err = d.rddb.QueryRow(c, _activityByNameSQL, name).Scan(&id)
|
|
return
|
|
}
|
|
|
|
// ActivityCount get activity count by query
|
|
func (d *Dao) ActivityCount(c context.Context, query string) (count int, err error) {
|
|
err = d.rddb.QueryRow(c, fmt.Sprintf(_activityCountSQL, query)).Scan(&count)
|
|
return
|
|
}
|
|
|
|
// GetActivities get activity by query
|
|
func (d *Dao) GetActivities(c context.Context, query string, from, limit int) (acs []*model.CActivity, err error) {
|
|
acs = make([]*model.CActivity, 0)
|
|
rows, err := d.rddb.Query(c, fmt.Sprintf(_activitisSQL, query), from, limit)
|
|
if err != nil {
|
|
log.Error("GetActivities d.db.Query error(%v)", err)
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
ac := &model.CActivity{}
|
|
err = rows.Scan(&ac.ID, &ac.Name, &ac.SignedStart, &ac.SignedEnd, &ac.SignUp, &ac.SignUpStart, &ac.SignUpEnd, &ac.Object, &ac.UploadStart, &ac.UploadEnd, &ac.WinType, &ac.RequireItems, &ac.RequireValue, &ac.StatisticsStart, &ac.StatisticsEnd, &ac.BonusType, &ac.BonusTime, &ac.ProgressFrequency, &ac.UpdatePage, &ac.ProgressStart, &ac.ProgressEnd, &ac.ProgressSync, &ac.BonusQuery, &ac.BonusQuerStart, &ac.BonusQueryEnd, &ac.Background, &ac.WinDesc, &ac.UnwinDesc, &ac.Details)
|
|
if err != nil {
|
|
log.Error("GetActivities row.Scan error(%v)", err)
|
|
return
|
|
}
|
|
acs = append(acs, ac)
|
|
}
|
|
err = rows.Err()
|
|
return
|
|
}
|
|
|
|
// TxGetActivityByName get activity by name
|
|
func (d *Dao) TxGetActivityByName(tx *sql.Tx, name string) (id int64, err error) {
|
|
err = tx.QueryRow(_activityByNameSQL, name).Scan(&id)
|
|
return
|
|
}
|
|
|
|
// TxInsertActivity tx insert into creative_activity
|
|
func (d *Dao) TxInsertActivity(tx *sql.Tx, ac *model.CActivity, update string) (rows int64, err error) {
|
|
res, err := tx.Exec(fmt.Sprintf(_txInsertActivitySQL, update), ac.Name, ac.Creator, ac.SignedStart, ac.SignedEnd, ac.SignUp, ac.SignUpStart, ac.SignUpEnd, ac.Object, ac.UploadStart, ac.UploadEnd, ac.WinType, ac.RequireItems, ac.RequireValue, ac.StatisticsStart, ac.StatisticsEnd, ac.BonusType, ac.BonusTime, ac.ProgressFrequency, ac.UpdatePage, ac.ProgressStart, ac.ProgressEnd, ac.ProgressSync, ac.BonusQuery, ac.BonusQuerStart, ac.BonusQueryEnd, ac.Background, ac.WinDesc, ac.UnwinDesc, ac.Details)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return res.RowsAffected()
|
|
}
|
|
|
|
// GetActivityBonus get activity_bonus by id
|
|
func (d *Dao) GetActivityBonus(c context.Context, ids []int64) (brs []*model.BonusRank, err error) {
|
|
brs = make([]*model.BonusRank, 0)
|
|
rows, err := d.rddb.Query(c, fmt.Sprintf(_activityBonusSQL, xstr.JoinInts(ids)))
|
|
if err != nil {
|
|
log.Error("GetActivityBonus d.db.Query error(%v)", err)
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
br := &model.BonusRank{}
|
|
err = rows.Scan(&br.ID, &br.Rank, &br.Money)
|
|
if err != nil {
|
|
log.Error("GetActivityBonus row.Scan error(%v)", err)
|
|
return
|
|
}
|
|
brs = append(brs, br)
|
|
}
|
|
err = rows.Err()
|
|
return
|
|
}
|
|
|
|
// TxInsertActivityBonusBatch tx insert into activity_bonus
|
|
func (d *Dao) TxInsertActivityBonusBatch(tx *sql.Tx, vals string) (rows int64, err error) {
|
|
if vals == "" {
|
|
return
|
|
}
|
|
res, err := tx.Exec(fmt.Sprintf(_txInsertBonusRankSQL, vals))
|
|
if err != nil {
|
|
return
|
|
}
|
|
return res.RowsAffected()
|
|
}
|
|
|
|
// UpActivityStateCount get up activity state count
|
|
func (d *Dao) UpActivityStateCount(c context.Context, id int64, states []int64) (count int, err error) {
|
|
err = d.rddb.QueryRow(c, fmt.Sprintf(_upActivityStateCountSQL, xstr.JoinInts(states)), id).Scan(&count)
|
|
return
|
|
}
|
|
|
|
// ListUpActivity list up_activity where state != 0
|
|
func (d *Dao) ListUpActivity(c context.Context, id int64, from, limit int) (ups []*model.UpActivity, err error) {
|
|
ups = make([]*model.UpActivity, 0)
|
|
rows, err := d.rddb.Query(c, _upActivitySQL, id, from, limit)
|
|
if err != nil {
|
|
log.Error("ListUpActivity d.db.Query error(%v)", err)
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
up := &model.UpActivity{}
|
|
err = rows.Scan(&up.MID, &up.Nickname, &up.SignUpTime, &up.Bonus, &up.Rank, &up.State)
|
|
if err != nil {
|
|
log.Error("ListUpActivity row.Scan error(%v)", err)
|
|
return
|
|
}
|
|
ups = append(ups, up)
|
|
}
|
|
err = rows.Err()
|
|
return
|
|
}
|
|
|
|
// ListUpActivitySuccess list up_activity where state != 0
|
|
func (d *Dao) ListUpActivitySuccess(c context.Context, id, mid int64, from, limit int) (ups []*model.UpActivity, err error) {
|
|
ups = make([]*model.UpActivity, 0)
|
|
query := ""
|
|
if mid != 0 {
|
|
query = fmt.Sprintf("AND mid = %d", mid)
|
|
}
|
|
rows, err := d.rddb.Query(c, fmt.Sprintf(_upActivitySuccessSQL, query), id, from, limit)
|
|
if err != nil {
|
|
log.Error("ListUpActivitySuccess d.db.Query error(%v)", err)
|
|
return
|
|
}
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
up := &model.UpActivity{}
|
|
err = rows.Scan(&up.MID, &up.Nickname, &up.AIDs, &up.AIDNum, &up.Bonus, &up.SuccessTime, &up.State)
|
|
if err != nil {
|
|
log.Error("ListUpActivitySuccess row.Scan error(%v)", err)
|
|
return
|
|
}
|
|
ups = append(ups, up)
|
|
}
|
|
err = rows.Err()
|
|
return
|
|
}
|
|
|
|
// UpdateUpActivityState update up state
|
|
func (d *Dao) UpdateUpActivityState(c context.Context, activityID int64, mids []int64, oldState, newState int) (rows int64, err error) {
|
|
if oldState == newState {
|
|
return
|
|
}
|
|
res, err := d.rddb.Exec(c, fmt.Sprintf(_updateUpActivityStateSQL, xstr.JoinInts(mids)), newState, activityID, oldState)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return res.RowsAffected()
|
|
}
|
|
|
|
// TxUpdateUpActivityState tx update up state
|
|
func (d *Dao) TxUpdateUpActivityState(tx *sql.Tx, activityID int64, mids []int64, oldState, newState int) (rows int64, err error) {
|
|
if oldState == newState {
|
|
return
|
|
}
|
|
res, err := tx.Exec(fmt.Sprintf(_updateUpActivityStateSQL, xstr.JoinInts(mids)), newState, activityID, oldState)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return res.RowsAffected()
|
|
}
|