123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- package model
- import (
- "encoding/json"
- "sync"
- "git.jiaxianghudong.com/go/logs"
- "git.jiaxianghudong.com/go/utils"
- "git.jiaxianghudong.com/webs/pkg/dbx"
- )
- type AwardInfo struct {
- Awards map[int32]int64 // 普通奖励
- AwardsByNum map[int]map[int32]int64 //按次数发不同奖励
- LimitNum int
- AwardsType int
- Remark string
- DayLimit int
- LimitType int
- }
- var funcMap map[string]*AwardInfo
- var rwlock sync.RWMutex //读写锁
- var ShareAwardConf = &ShareAwardConfig{}
- type ShareAwardConfig struct {
- FhBasicBeans int64 `json:"fh_basic_beans" yaml:"fh_basic_beans"`
- FhBeansMax int64 `json:"fh_beans_max" yaml:"fh_beans_max"`
- BxpNewguideAward [][]int64 `json:"bxp_newguide_award" yaml:"bxp_newguide_award"`
- }
- type FuncAward struct {
- ID int `sql:"id" json:"id"`
- Func string `sql:"func" json:"func"`
- MchID string `sql:"mch_id" json:"mch_id"`
- Awards string `sql:"awards" json:"awards"`
- LimitNum int `sql:"limit_num" json:"limit_num"`
- AwardsType int `sql:"awards_type" json:"awards_type"`
- LimitType int `sql:"limit_type" json:"limit_type"`
- Remark string `sql:"remark" json:"remark"`
- DayLimit int `sql:"day_limit" json:"day_limit"`
- }
- func GetAllFuncAwards() []FuncAward {
- sql := `select func,mch_id,awards,limit_num,awards_type,remark,limit_type from func_award `
- var funcAwards []FuncAward
- rows, err := dbx.MySQL.Query(sql)
- defer rows.Close()
- if err != nil {
- return nil
- }
- for rows.Next() {
- tmp := FuncAward{}
- if err = rows.Scan(&tmp.Func, &tmp.MchID, &tmp.Awards, &tmp.LimitNum, &tmp.AwardsType, &tmp.Remark, &tmp.LimitType); err != nil {
- return nil
- }
- funcAwards = append(funcAwards, tmp)
- }
- return funcAwards
- }
- func InsertFuncAwards(funcAward *FuncAward) (int64, error) {
- sql := "INSERT INTO func_award (`func`, `mch_id`, `awards`, `limit_num`, `awards_type`, `remark`) VALUES (?, ?, ?, ?, ?, ?)"
- res, err := dbx.MySQL.Exec(sql,
- funcAward.Func,
- funcAward.MchID,
- funcAward.Awards,
- funcAward.LimitNum,
- funcAward.AwardsType,
- funcAward.Remark)
- if err != nil {
- return 0, err
- }
- lastId, _ := res.LastInsertId()
- return lastId, nil
- }
- func UpdateFuncAwards(funcAward *FuncAward) error {
- sql := "UPDATE func_award set func = ?,mch_id=?,awards=?,limit_num=?,awards_type=?,remark=?,utime=now() where func=? and mch_id=? "
- res, err := dbx.MySQL.Exec(sql,
- funcAward.Func,
- funcAward.MchID,
- funcAward.Awards,
- funcAward.LimitNum,
- funcAward.AwardsType,
- funcAward.Remark,
- funcAward.Func,
- funcAward.MchID)
- if err != nil {
- return err
- }
- affect, _ := res.RowsAffected()
- if affect == 0 {
- InsertFuncAwards(funcAward)
- return nil
- }
- return nil
- }
- func DeleteFuncAwards(funcName, mchID string) error {
- sql := "delete from func_award where func=? and mch_id=?"
- _, err := dbx.MySQL.Exec(sql, funcName, mchID)
- if err != nil {
- return err
- }
- return nil
- }
- func InitAwards() {
- logs.Info("开始加载配置...")
- rwlock.Lock()
- defer rwlock.Unlock()
- funcMap = make(map[string]*AwardInfo)
- awards := GetAllFuncAwards()
- for _, v := range awards {
- if v.AwardsType == 1 {
- jsonAwards := make(map[string]map[string]int64)
- awardsMap := make(map[int]map[int32]int64)
- _ = json.Unmarshal([]byte(v.Awards), &jsonAwards)
- for ka, va := range jsonAwards {
- tmp := make(map[int32]int64)
- for kb, vb := range va {
- tmp[int32(utils.Atoi(kb))] = vb
- }
- awardsMap[utils.Atoi(ka)] = tmp
- }
- funcMap[v.Func+"_"+v.MchID] = &AwardInfo{LimitNum: v.LimitNum,
- AwardsType: v.AwardsType,
- Remark: v.Remark,
- DayLimit: v.DayLimit,
- LimitType: v.LimitType,
- AwardsByNum: awardsMap}
- } else {
- jsonAwards := make(map[string]int64)
- awardsMap := make(map[int32]int64)
- err := json.Unmarshal([]byte(v.Awards), &jsonAwards)
- if err != nil {
- logs.Error(err, " param:", v.Awards)
- }
- for ka, va := range jsonAwards {
- awardsMap[int32(utils.Atoi(ka))] = va
- }
- funcMap[v.Func+"_"+v.MchID] = &AwardInfo{LimitNum: v.LimitNum,
- AwardsType: v.AwardsType,
- Remark: v.Remark,
- DayLimit: v.DayLimit,
- LimitType: v.LimitType,
- Awards: awardsMap}
- }
- }
- for k, v := range funcMap {
- logs.Infof("funcMap Init:%s, value:%+v", k, v)
- }
- logs.Info("funcMap init complete")
- }
- func GetFuncMap(key string) *AwardInfo {
- rwlock.RLock()
- defer rwlock.RUnlock()
- return funcMap[key]
- }
|