| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- package balance_model
- import (
- "fmt"
- "fohow.com/cache"
- "github.com/astaxie/beego"
- "github.com/astaxie/beego/orm"
- "time"
- )
- const (
- silvers_tablename = "silvers"
- )
- type Silver struct {
- Id int64 `orm:"column(id);pk" json:"id"` // int(11)
- UserId int64 `orm:"column(user_id);null" json:"user_id"` // int(11)
- WxUserId int64 `orm:"column(wx_user_id);null" json:"wx_user_id"` // int(11)
- Count int64 `orm:"column(count);null" json:"count"` // int(11)
- Source string `orm:"column(source);null" json:"source"` // varchar(20)
- SourceName string `orm:"-" json:"source_name"` // varchar(20)
- RelateId string `orm:"column(relate_id);null" json:"relate_id"` // varchar(255)
- Remark string `orm:"column(remark);null" json:"remark"` // varchar(255)
- CreatedAt time.Time `orm:"column(created_at);auto_now_add;type(datetime)" json:"-"` // datetime
- CTime int64 `orm:"-" json:"ctime"` // datetime
- UpdatedAt time.Time `orm:"column(updated_at);auto_now;type(datetime)" json:"-"` // datetime
- }
- func (self *Silver) TableName() string {
- return silvers_tablename
- }
- func (self *Silver) Create(wxUId, uId, c int64, s, rId, remark string) (item *Silver) {
- item = &Silver{
- Count: c,
- WxUserId: wxUId,
- UserId: uId,
- Source: s,
- RelateId: rId,
- Remark: remark,
- }
- id, err := orm.NewOrm().Insert(item)
- if err != nil {
- beego.BeeLogger.Error("Create Silver err=[%s]", err)
- return nil
- }
- item.Id = id
- return item
- }
- func GetSilverById(id int64) *Silver {
- item := &Silver{}
- if err := orm.NewOrm().QueryTable(item).
- Filter("id", id).Limit(1).
- One(item); err != nil {
- beego.BeeLogger.Debug("GetSilverById(%s), err=%s",
- id, err)
- return nil
- }
- return item
- }
- //获取某人的银豆流列表
- func GetSilverListByWxUId(wxUId, page, perPage int64, useCache bool) (list []*Silver) {
- k := fmt.Sprintf("silver_model.GetSilverList.wxUId(%d).page(%d).perPage(%d)", wxUId, page, perPage)
- if useCache {
- if s, ok := cache.Cache.Get(k).([]*Silver); ok {
- return s
- }
- }
- silver := new(Silver)
- qs := orm.NewOrm().QueryTable(silver)
- qs = qs.Filter("wx_user_id", wxUId)
- if _, err := qs.OrderBy("-created_at", "-id").
- Limit(perPage, (page-1)*perPage).All(&list); err != nil {
- beego.BeeLogger.Debug("get silver with wxUId=%d, err=[%s]", wxUId, err)
- return nil
- }
- cache.Cache.Put(k, list, 10*time.Minute)
- return list
- }
- //获取某人的银豆流列表总条数
- func GetSilverCountByWxUId(wxUId int64) int64 {
- item := new(Silver)
- o := orm.NewOrm()
- count, _ := o.QueryTable(item).Filter("wx_user_id", wxUId).Count()
- return count
- }
- //获取某个用户的余额
- func GetUserTotalSilver(wxUId int64) int64 {
- type Ret struct {
- Count int64
- }
- ret := &Ret{}
- o := orm.NewOrm()
- tbn := new(Silver).TableName()
- sql := fmt.Sprintf("SELECT sum(`count`) as count FROM `%s` WHERE wx_user_id=?;", tbn)
- err := o.Raw(sql, wxUId).QueryRow(ret)
- if err != nil {
- beego.BeeLogger.Error("get user=[%d] total silver err=[%s]", wxUId, err)
- return 0
- }
- if ret.Count < 0 {
- return 0
- }
- return ret.Count
- }
- //获取某个source累计余额
- func GetSilverCountBySource(wxUId int64, source string) int64 {
- type Ret struct {
- Count int64
- }
- ret := &Ret{}
- o := orm.NewOrm()
- tbn := new(Silver).TableName()
- sql := fmt.Sprintf("SELECT sum(`count`) as count FROM `%s` WHERE wx_user_id=? and source=?", tbn)
- err := o.Raw(sql, wxUId, source).QueryRow(ret)
- if err != nil {
- beego.BeeLogger.Error("get user=[%d] total silver err=[%s]", wxUId, err)
- return 0
- }
- if ret.Count < 0 {
- return 0
- }
- return ret.Count
- }
- func GetSilverBySourceAndRId(source, rId string) *Silver {
- item := &Silver{}
- if err := orm.NewOrm().QueryTable(item).
- Filter("source", source).
- Filter("relate_id", rId).Limit(1).
- One(item); err != nil {
- beego.BeeLogger.Info("GetSilverBySourceAndRId(%s,%s), err=%s",
- source, rId, err)
- return nil
- }
- return item
- }
- func GetSilverByUIdAndRIdAndSource(uId int64, rId, source string) *Silver {
- item := &Silver{}
- if err := orm.NewOrm().QueryTable(item).
- Filter("user_id", uId).
- Filter("source", source).
- Filter("relate_id", rId).OrderBy("-created_at").Limit(1).
- One(item); err != nil {
- beego.BeeLogger.Info("GetSilverByUIdAndRIdAndSource(%d,%s,%s), err=%s",
- uId, rId, source, err)
- return nil
- }
- return item
- }
- func GetBuySilverByRelateId(rId string, useCache bool) *Silver {
- k := fmt.Sprintf("silver_model.GetBuySilverByRelateId[%s]", rId)
- if useCache {
- if order, ok := cache.Cache.Get(k).(*Silver); ok {
- return order
- }
- }
- //lt < 0
- item := &Silver{}
- if err := orm.NewOrm().QueryTable(item).Filter("relate_id", rId).Filter("count__lt", 0).Limit(1).
- One(item); err != nil {
- beego.BeeLogger.Info("GetBuySilverByRelateId(%s), err=%s", rId, err)
- return nil
- }
- cache.Cache.Put(k, item, 5*time.Minute)
- return item
- }
- func GetRefundSilverByRelateId(rId string, useCache bool) *Silver {
- k := fmt.Sprintf("silver_model.GetRefundSilverByRelateId[%s]", rId)
- if useCache {
- if order, ok := cache.Cache.Get(k).(*Silver); ok {
- return order
- }
- }
- //gt > 0
- item := &Silver{}
- if err := orm.NewOrm().QueryTable(item).Filter("relate_id", rId).Filter("count__gt", 0).Limit(1).
- One(item); err != nil {
- beego.BeeLogger.Info("GetRefundSilverByRelateId(%s), err=%s", rId, err)
- return nil
- }
- cache.Cache.Put(k, item, 5*time.Minute)
- return item
- }
- //返回source名称
- func (self *Silver) GetSourceName() string {
- sourceName := ""
- switch self.Source {
- case CASH_SOURCE_SHOP_BENEFIT:
- sourceName = CASH_SOURCE_SHOP_BENEFIT_NAME
- case CASH_SOURCE_PRODUCT_BENEFIT:
- sourceName = CASH_SOURCE_PRODUCT_BENEFIT_NAME
- case CASH_SOURCE_PROJECT_BENEFIT:
- sourceName = CASH_SOURCE_PROJECT_BENEFIT_NAME
- case CASH_SOURCE_TAKE_CASH:
- sourceName = CASH_SOURCE_TAKE_CASH_NAME
- case CASH_TO_BALANCE:
- sourceName = CASH_TO_BALANCE_NAME
- case CASH_SOURCE_PRODUCT_SALE:
- sourceName = CASH_SOURCE_PRODUCT_SALE_NAME
- case CASH_SOURCE_SALE_REWARD:
- sourceName = CASH_SOURCE_SALE_REWARD_NAME
- case CASH_SOURCE_PROJECT_INVEST:
- sourceName = CASH_SOURCE_PROJECT_INVEST_NAME
- case CASH_SOURCE_RESERVE_ACT_RETURN:
- sourceName = CASH_SOURCE_RESERVE_ACT_RETURN_NAME
- case CASH_SOURCE_EXTRACT_REJECT:
- sourceName = CASH_SOURCE_EXTRACT_REJECT_NAME
- case CASH_SOURCE_RECHARGE_CASH:
- sourceName = CASH_SOURCE_RECHARGE_CASH_NAME
- case CASH_SOURCE_RECEIVE_BUYBACK:
- sourceName = CASH_SOURCE_RECEIVE_BUYBACK_NAME
- case CASH_SOURCE_DEDUCT:
- sourceName = CASH_SOURCE_DEDUCT_NAME
- case CASH_SOURCE_LOAN:
- sourceName = CASH_SOURCE_LOAN_NAME
- case CASH_SOURCE_PROJECT_REFUND:
- sourceName = CASH_SOURCE_PROJECT_REFUND
- case CASH_SOURCE_PRODUCT_REFUND:
- sourceName = CASH_SOURCE_PRODUCT_REFUND_NAME
- case CASH_SOURCE_PRODUCT_PART_REFUND:
- sourceName = CASH_SOURCE_PRODUCT_PART_REFUND_NAME
- case CASH_SOURCE_CORRECT:
- sourceName = CASH_SOURCE_CORRECT_NAME
- case CASH_SOURCE_PROJECT_LOAN:
- sourceName = CASH_SOURCE_PROJECT_LOAN_NAME
- case CASH_SOURCE_GOOD_PAYMENT:
- sourceName = CASH_SOURCE_GOOD_PAYMENT_NAME
- case CASH_SOURCE_DOLLAR_WIN:
- sourceName = CASH_SOURCE_DOLLAR_WIN_NAME
- case CASH_SOURCE_DOLLAR_WIN_RETURN:
- sourceName = CASH_SOURCE_DOLLAR_WIN_RETURN_NAME
- case FX_CASH_SOURCE_PRODUCT_BENEFIT:
- sourceName = FX_CASH_SOURCE_PRODUCT_BENEFIT_NAME
- // case BALANCE_SOURCE_PART_REFUNDED:
- // sourceName = BALANCE_SOURCE_PART_REFUNDED_NAME
- }
- return sourceName
- }
|