package model import ( "active/constant" "database/sql" "encoding/json" "fmt" "time" "git.jiaxianghudong.com/go/logs" "git.jiaxianghudong.com/webs/pkg/dbx" ) //Precious 神秘宝藏 type Precious struct { ID int `json:"id" sql:"id"` // UserID int `json:"userid" sql:"userid"` //用户ID Goodstag string `json:"goodstag" sql:"goodstag"` //商品标识符 计费点 Multiple int `json:"multiple" sql:"multiple"` //倍数 10:1(20 则为2倍) Count int `json:"count" sql:"count"` //每日抽奖次数 Date sql.NullString `json:"date" sql:"date"` //抽奖时间 Locked int `json:"locked" sql:"locked"` //锁定 1 锁定计费点 2 锁定倍数 Lockeddate sql.NullString `json:"locked_date" sql:"locked_date"` //锁定时间 Usesurprised int `json:"use_surprised" sql:"use_surprised"` //1 抽中过 是抽中过必现奖励6,12 的10倍奖励 Updatetime string `json:"update_time" sql:"update_time"` //更新时间 } //PreciousData 神秘宝藏礼包存储数据 type PreciousData struct { PayTime string `yaml:"pay_time" json:"pay_time"` Count int `yaml:"count" json:"count"` } // GetPrecious 获取全部活动数据 func (m *Precious) GetPrecious() error { err := dbx.MySQLExt.QueryRow("SELECT goodstag,multiple,count,date,locked,locked_date,use_surprised from `log`.`pay_precious_log` where userid = ? ", m.UserID).Scan(&m.Goodstag, &m.Multiple, &m.Count, &m.Date, &m.Locked, &m.Lockeddate, &m.Usesurprised) if nil != err { if err == sql.ErrNoRows { return InitPreciousLog(m.UserID) } logs.Errorf("GetPrecious err:%v", err) return err } return nil } //UpdatePreciousCounts 更新抽奖使用数据 func (m *Precious) UpdatePreciousCounts() (int64, error) { m.Updatetime = time.Now().Format("2006-01-02 15:04:05") querySQL := `UPDATE log.pay_precious_log SET goodstag = ?, multiple = ?, count= ?, date=?, use_surprised=?, update_time=?, locked=? where userid = ? ` count, err := dbx.MySQLExt.Update(querySQL, m.Goodstag, m.Multiple, m.Count, time.Now().Format("2006-01-02"), m.Usesurprised, m.Updatetime, m.Locked, m.UserID) if nil != err && err != sql.ErrNoRows { logs.Errorf("UpdatePreciousCounts err:%v", err) return 0, err } return count, nil } //InitPreciousLog 初始化表记录 func InitPreciousLog(userID int) error { querySQL := "INSERT INTO log.pay_precious_log set userid = ?" _, err := dbx.MySQLExt.Insert(querySQL, userID) if err != nil { logs.Error(fmt.Sprintf("InitPreciousLog sqlStr: %s err: %v", querySQL, err)) return err } return nil } //UpdatePreciousLocked 更新锁定 func (m *Precious) UpdatePreciousLocked() (int64, error) { m.Updatetime = time.Now().Format("2006-01-02 15:04:05") querySQL := `UPDATE log.pay_precious_log SET goodstag = ?, multiple = ?, locked_date =?, update_time=?, locked=? where userid = ? ` count, err := dbx.MySQLExt.Update(querySQL, m.Goodstag, m.Multiple, time.Now().Format("2006-01-02"), m.Updatetime, m.Locked, m.UserID) if nil != err && err != sql.ErrNoRows { logs.Errorf("UpdatePreciousCounts err:%v", err) return 0, err } return count, nil } //GetPreciousPayCount 更新神秘活动 func GetPreciousPayCount(data string, ver int) int { count := constant.MaxPayPrecious if ver >= 1 { count = constant.MaxPayShakeBean } pd := PreciousData{} if len(data) > 0 { err := json.Unmarshal([]byte(data), &pd) if err != nil { logs.Errorf("GetPreciousPayCount: json data:%s err:%v", data, err) } } //购买每日重制 if time.Now().Format("2006-01-02") != pd.PayTime { return count } if pd.Count >= count { return 0 } return count - pd.Count } //GetRegressPayCount 获取付费老用户回归 func GetRegressPayCount(data string) int { pd := PreciousData{} if len(data) > 0 { err := json.Unmarshal([]byte(data), &pd) if err != nil { logs.Errorf("GetPreciousPayCount: json data:%s err:%v", data, err) } } //购买每日重制 if time.Now().Format("2006-01-02") != pd.PayTime { return constant.MaxPayRegress } if pd.Count >= constant.MaxPayRegress { return 0 } return constant.MaxPayRegress - pd.Count } //ChangeGoodsTag 更新最高计费点 func ChangeGoodsTag(goodstag string, userid int) (int64, error) { querySQL := `UPDATE log.pay_precious_log SET goodstag = ? where userid = ? ` count, err := dbx.MySQLExt.Update(querySQL, goodstag, userid) if nil != err && err != sql.ErrNoRows { logs.Errorf("ChangeGoodsTag err:%v", err) return 0, err } return count, nil }