abiao лет назад: 5
Родитель
Сommit
70eb5d6336

+ 85 - 0
go/gopath/src/fohow.com/apps/controllers/cent_controller/balance_controller.go

@@ -0,0 +1,85 @@
+package cent_controller
+
+import (
+	// "crypto/md5"
+	// "encoding/hex"
+	"strconv"
+	// "github.com/astaxie/beego"
+	// "github.com/astaxie/beego/context"
+
+	"fohow.com/apps"
+	// 	// "fohow.com/apps/controllers/user_controller"
+	// 	"fohow.com/apps/models/activity_model"
+	// 	"fohow.com/apps/models/address_model"
+	"fohow.com/apps/models/cent_model"
+	"fohow.com/apps/models/user_model"
+)
+
+const (
+	TAKE_CASH_AMOUNT_LIMIT_MIN    = 1000    //10元
+	TAKE_CASH_AMOUNT_LIMIT_MAX    = 2000000 //2w
+	WX_TAKE_CASH_AMOUNT_LIMIT_MAX = 500000  //5000元
+)
+
+//积分和积分余额
+func (self *CentController) GetCentInfo() {
+	type CentInfo struct {
+		Total int64 `orm:"-" json:"total"` //余额,单位分
+	}
+	//user := self.GetCurrentUser(true)
+	wxUId := self.GetCurrentWxUserId()
+	wxUser := user_model.GetWxUserById(wxUId, true)
+	if wxUser == nil {
+		self.ReturnError(403, apps.UserNeedLogin, "", nil)
+	}
+	info := new(CentInfo)
+	info.Total = cent_model.GetCentTotalBalance(wxUId)
+	self.Data["json"] = info
+	self.ServeJSON()
+}
+
+//积分变动列表
+func (self *CentController) GetCentList() {
+	page, _ := self.GetInt64("page", 1)
+	perPage, _ := self.GetInt64("per_page", 20)
+	if perPage <= 0 || perPage > 100 {
+		perPage = 20
+	}
+	cache, _ := self.GetBool("cache", false)
+
+	//user := self.GetCurrentUser(cache)
+	wxUId := self.GetCurrentWxUserId()
+
+	list := cent_model.GetCentBalanceListByWxUId(wxUId, page, perPage, cache)
+	count := cent_model.GetCentBalanceCountByWxUId(wxUId)
+	type CentInfo struct {
+		CentList  []*cent_model.CentBalance `orm:"-" json:"balance_list"`
+		CentCount int64                     `orm:"-" json:"balance_count"`
+	}
+	for _, item := range list {
+		item.SourceName = item.GetSourceName()
+		item.CTime = item.CreatedAt.Unix()
+	}
+
+	self.Data["json"] = &CentInfo{CentList: list, CentCount: count}
+	self.ServeJSON()
+}
+
+//资金详情
+func (self *CentController) GetCentDetail() {
+	_id := self.Ctx.Input.Param(":id")
+	id, _ := strconv.ParseInt(_id, 10, 64)
+	//uId := self.GetCurrentUserId()
+	wxUId := self.GetCurrentWxUserId()
+	item := cent_model.GetCentById(id)
+	if item == nil {
+		self.ReturnError(403, apps.NoExist, "", nil)
+	}
+	if item.WxUId != wxUId {
+		self.ReturnError(403, apps.NoExist, "", nil)
+	}
+	item.CTime = item.CreatedAt.Unix()
+	item.SourceName = item.GetSourceName()
+	self.Data["json"] = item
+	self.ServeJSON()
+}

+ 32 - 0
go/gopath/src/fohow.com/apps/controllers/cent_controller/init.go

@@ -0,0 +1,32 @@
+package cent_controller
+
+import (
+	// "fmt"
+	// "os"
+	// "net/url"
+	// "strings"
+
+	// "github.com/astaxie/beego"
+	"github.com/astaxie/beego/context"
+	// "github.com/go-wkhtmltoimage"
+	// "github.com/skip2/go-qrcode"
+
+	"fohow.com/apps"
+)
+
+var (
+	//需要校验用户登录的Action
+	exceptCheckUserLoginAction   = []string{"GetTakeCashLimit", "GetCashBalanceList", "GetCashBalanceInfo", "GetBalanceInfo", "GetBalanceDetail", "GetBalanceList", "GetTakeCashOrders"}
+	exceptCheckWxUserLoginAction = []string{""}
+)
+
+type CentController struct {
+	apps.BaseController
+}
+
+func (self *CentController) Init(ctx *context.Context, controllerName, actionName string, app interface{}) {
+	// beego.BeeLogger.Info("invote controller Init func")
+	self.BaseController.Init(ctx, controllerName, actionName, app)
+	self.ExceptCheckUserLoginAction = exceptCheckUserLoginAction
+	self.ExceptCheckWxUserLoginAction = exceptCheckWxUserLoginAction
+}

+ 83 - 0
go/gopath/src/fohow.com/apps/models/cent_model/cent_award.go

@@ -0,0 +1,83 @@
+package cent_model
+
+import (
+	"time"
+
+	"github.com/astaxie/beego"
+	"github.com/astaxie/beego/orm"
+	// "fohow.com/libs/wx_mp"
+)
+
+const (
+	cent_awards_tablename = "cent_awards"
+
+	ONE_DAY          = "one_day" //签到第一天
+	ONE_DAY_NAME     = "签到第一天"
+	TWO_DAY          = "two_day"
+	TWO_DAY_NAME     = "签到第二天"
+	THREE_DAY        = "three_day"
+	THREE_DAY_NAME   = "签到第三天"
+	FOUR_DAY         = "four_day"
+	FOUR_DAY_NAME    = "签到第四天"
+	FIVE_DAY         = "five_day"
+	FIVE_DAY_NAME    = "签到第五天"
+	SIX_DAY          = "six_day"
+	SIX_DAY_NAME     = "签到第六天"
+	SEVEN_DAY        = "seven_day"
+	SEVEN_DAY_NAME   = "签到第七天"
+	FIRST_LOGIN      = "first_login"
+	FIRST_LOGIN_NAME = "首次登录"
+	NEW_MAN          = "new_man"
+	NEW_MAN_NAME     = "新人注册"
+)
+
+type CentAward struct {
+	Id        int64     `orm:"column(id);pk"                                  json:"id"`     // int(11)
+	Count     int64     `orm:"column(count);null"                             json:"count"`  // int(11)
+	Type      string    `orm:"column(c_type);null"                            json:"c_type"` // varchar(20)
+	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 *CentAward) TableName() string {
+	return cent_awards_tablename
+}
+
+//返回source名称
+func (self *CentAward) GetSourceName() string {
+	typeName := ""
+	switch self.Type {
+	case ONE_DAY:
+		typeName = ONE_DAY_NAME
+	case TWO_DAY:
+		typeName = TWO_DAY_NAME
+	case THREE_DAY:
+		typeName = THREE_DAY_NAME
+	case FOUR_DAY:
+		typeName = FOUR_DAY_NAME
+	case FIVE_DAY:
+		typeName = FIVE_DAY_NAME
+	case SIX_DAY:
+		typeName = SIX_DAY_NAME
+	case SEVEN_DAY:
+		typeName = SEVEN_DAY_NAME
+	case FIRST_LOGIN:
+		typeName = FIRST_LOGIN_NAME
+	case NEW_MAN:
+		typeName = NEW_MAN_NAME
+	}
+	return typeName
+}
+
+func GetCentAwardByCtype(ctype string) *CentAward {
+	item := &CentAward{}
+	if err := orm.NewOrm().QueryTable(item).
+		Filter("c_type", ctype).Limit(1).
+		One(item); err != nil {
+		beego.BeeLogger.Debug("GetCentAwardByCtype(%s), err=%s",
+			ctype, err)
+		return nil
+	}
+	return item
+}

+ 229 - 0
go/gopath/src/fohow.com/apps/models/cent_model/cent_balance.go

@@ -0,0 +1,229 @@
+package cent_model
+
+import (
+	"fmt"
+	"time"
+
+	"github.com/astaxie/beego"
+	"github.com/astaxie/beego/orm"
+
+	"fohow.com/cache"
+)
+
+const (
+	cent_balances_tablename = "cent_balances"
+
+	CENT_ONE_DAY          = "one_day" //签到第一天
+	CENT_ONE_DAY_NAME     = "签到第一天"
+	CENT_TWO_DAY          = "two_day"
+	CENT_TWO_DAY_NAME     = "签到第二天"
+	CENT_THREE_DAY        = "three_day"
+	CENT_THREE_DAY_NAME   = "签到第三天"
+	CENT_FOUR_DAY         = "four_day"
+	CENT_FOUR_DAY_NAME    = "签到第四天"
+	CENT_FIVE_DAY         = "five_day"
+	CENT_FIVE_DAY_NAME    = "签到第五天"
+	CENT_SIX_DAY          = "six_day"
+	CENT_SIX_DAY_NAME     = "签到第六天"
+	CENT_SEVEN_DAY        = "seven_day"
+	CENT_SEVEN_DAY_NAME   = "签到第七天"
+	CENT_FIRST_LOGIN      = "first_login"
+	CENT_FIRST_LOGIN_NAME = "首次登录"
+	CENT_NEW_MAN          = "new_man"
+	CENT_NEW_MAN_NAME     = "新人注册"
+)
+
+//积分余额表
+type CentBalance struct {
+	Id         int64     `orm:"column(id);pk"                                       json:"id"`        // int(11)
+	WxUId      int64     `orm:"column(wx_uid)"                                      json:"wx_uid"`    // int(11)
+	Count      int64     `orm:"column(count)"                                       json:"count"`     // int(11)
+	Source     string    `orm:"column(source);null"                                 json:"source"`    // varchar(64)
+	SourceName string    `orm:"-"                                 json:"source_name"`                 // varchar(64)
+	RelateId   string    `orm:"column(relate_id);null"                              json:"relate_id"` // varchar(255)
+	Remark     string    `orm:"column(remark);null"                                 json:"remark"`    // varchar(255)
+	CTime      int64     `orm:"-"                                       json:"c_time"`                // int(11)
+	CreatedAt  time.Time `orm:"column(created_at);null;auto_now_add;type(datetime)" json:"-"`         // datetime
+	UpdatedAt  time.Time `orm:"column(updated_at);null;auto_now;type(datetime)"     json:"-"`         // datetime
+}
+
+func (self *CentBalance) TableName() string {
+	return cent_balances_tablename
+}
+
+func (self *CentBalance) Create(wxUId, c int64, s, rId, remark string) (item *CentBalance) {
+	item = &CentBalance{
+		Count:    c,
+		WxUId:    wxUId,
+		Source:   s,
+		RelateId: rId,
+		Remark:   remark,
+	}
+	id, err := orm.NewOrm().Insert(item)
+	if err != nil {
+		beego.BeeLogger.Error("Create CentBalance err=[%s]", err)
+		return nil
+	}
+	item.Id = id
+	return item
+}
+
+//返回source名称
+func (self *CentBalance) GetSourceName() string {
+	sourceName := ""
+	switch self.Source {
+	case CENT_ONE_DAY:
+		sourceName = CENT_ONE_DAY_NAME
+	case CENT_TWO_DAY:
+		sourceName = CENT_TWO_DAY_NAME
+	case CENT_THREE_DAY:
+		sourceName = CENT_THREE_DAY_NAME
+	case CENT_FOUR_DAY:
+		sourceName = CENT_FOUR_DAY_NAME
+	case CENT_FIVE_DAY:
+		sourceName = CENT_FIVE_DAY_NAME
+	case CENT_SIX_DAY:
+		sourceName = CENT_SIX_DAY_NAME
+	case CENT_SEVEN_DAY:
+		sourceName = CENT_SEVEN_DAY_NAME
+	case CENT_FIRST_LOGIN:
+		sourceName = CENT_FIRST_LOGIN_NAME
+	case CENT_NEW_MAN:
+		sourceName = CENT_NEW_MAN_NAME
+	}
+	return sourceName
+}
+
+//获取某人的积分流列表
+func GetCentBalanceListByWxUId(wxUId, page, perPage int64, useCache bool) (list []*CentBalance) {
+	k := fmt.Sprintf("cent_model.GetCentBalanceListByWxUId(%d).page(%d).perPage(%d)", wxUId, page, perPage)
+	if useCache {
+		if s, ok := cache.Cache.Get(k).([]*CentBalance); ok {
+			return s
+		}
+	}
+
+	balance := new(CentBalance)
+	qs := orm.NewOrm().QueryTable(balance)
+	qs = qs.Filter("wx_uid", wxUId)
+
+	if _, err := qs.OrderBy("-created_at", "-id").
+		Limit(perPage, (page-1)*perPage).All(&list); err != nil {
+		beego.BeeLogger.Debug("get cash balance with wxUId=%d, err=[%s]", wxUId, err)
+		return nil
+	}
+
+	for _, item := range list {
+		item.SourceName = item.GetSourceName()
+	}
+
+	cache.Cache.Put(k, list, 10*time.Minute)
+	return list
+}
+
+//获取某人的积分流列表总条数
+func GetCentBalanceCountByWxUId(wxUId int64) int64 {
+	item := new(CentBalance)
+	o := orm.NewOrm()
+	count, _ := o.QueryTable(item).Filter("wx_uid", wxUId).Count()
+	return count
+}
+
+//账户进账总额
+func GetCentEnterBalance(wxUId int64) int64 {
+	type Ret struct {
+		Count int64
+	}
+	ret := &Ret{}
+	o := orm.NewOrm()
+	tbn := new(CentBalance).TableName()
+	sql := fmt.Sprintf("SELECT sum(`count`) as count FROM `%s` WHERE wx_uid=? and count > 0;", tbn)
+	err := o.Raw(sql, wxUId).QueryRow(ret)
+	if err != nil {
+		beego.BeeLogger.Error("GetCentEnterBalance, wxUser:%d err=[%s]", wxUId, err)
+		return 0
+	}
+	if ret.Count < 0 {
+		return 0
+	}
+	return ret.Count
+}
+
+//账户出账总额
+func GetCentOutBalance(wxUId int64) int64 {
+	type Ret struct {
+		Count int64
+	}
+	ret := &Ret{}
+	o := orm.NewOrm()
+	tbn := new(CentBalance).TableName()
+	sql := fmt.Sprintf("SELECT sum(`count`) as count FROM `%s` WHERE wx_uid=? and count < 0;", tbn)
+	err := o.Raw(sql, wxUId).QueryRow(ret)
+	if err != nil {
+		beego.BeeLogger.Error("GetCentOuterBalance, wxUser:%d err=[%s]", wxUId, err)
+		return 0
+	}
+	if ret.Count < 0 {
+		return 0
+	}
+	return ret.Count
+}
+
+//账户余额
+func GetCentTotalBalance(wxUId int64) int64 {
+	type Ret struct {
+		Count int64
+	}
+	ret := &Ret{}
+	o := orm.NewOrm()
+	tbn := new(CentBalance).TableName()
+	sql := fmt.Sprintf("SELECT sum(`count`) as count FROM `%s` WHERE wx_uid=?;", tbn)
+	err := o.Raw(sql, wxUId).QueryRow(ret)
+	if err != nil {
+		beego.BeeLogger.Error("GetCentTotalBalance, wxUser:%d err=[%s]", wxUId, err)
+		return 0
+	}
+	if ret.Count < 0 {
+		return 0
+	}
+	return ret.Count
+}
+
+func GetCentBalanceByWxUIdAndRIdAndSource(wxUId int64, rId, source string) *CentBalance {
+	item := &CentBalance{}
+	if err := orm.NewOrm().QueryTable(item).
+		Filter("wx_uid", wxUId).
+		Filter("source", source).
+		Filter("relate_id", rId).OrderBy("-created_at").Limit(1).
+		One(item); err != nil {
+		beego.BeeLogger.Info("GetCentBalanceByWxUIdAndRIdAndSource(%d,%s,%s), err=%s",
+			wxUId, rId, source, err)
+		return nil
+	}
+	return item
+}
+
+func GetCentBalanceBySourceAndRId(source, rId string) *CentBalance {
+	item := &CentBalance{}
+	if err := orm.NewOrm().QueryTable(item).
+		Filter("source", source).
+		Filter("relate_id", rId).Limit(1).
+		One(item); err != nil {
+		beego.BeeLogger.Info("GetCentBalanceBySourceAndRId(%s,%s), err=%s",
+			source, rId, err)
+		return nil
+	}
+	return item
+}
+
+func GetCentById(id int64) *CentBalance {
+	item := &CentBalance{}
+	if err := orm.NewOrm().QueryTable(item).
+		Filter("id", id).Limit(1).
+		One(item); err != nil {
+		beego.BeeLogger.Debug("GetCentById(%s), err=%s",
+			id, err)
+		return nil
+	}
+	return item
+}

+ 9 - 0
go/gopath/src/fohow.com/apps/models/cent_model/init.go

@@ -0,0 +1,9 @@
+package cent_model
+
+import (
+	"github.com/astaxie/beego/orm"
+)
+
+func init() {
+	orm.RegisterModel(new(CentBalance), new(CentAward))
+}