Explorar o código

add cash to balance function

abiao %!s(int64=5) %!d(string=hai) anos
pai
achega
d43c7546fd

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

@@ -1,6 +1,7 @@
 package balance_controller
 package balance_controller
 
 
 import (
 import (
+	"fmt"
 	"github.com/astaxie/beego"
 	"github.com/astaxie/beego"
 
 
 	// "crypto/md5"
 	// "crypto/md5"
@@ -278,3 +279,84 @@ func (self *BalanceController) GetTakeCashOrders() {
 	self.Data["json"] = &Ret{ListCount: listCount, List: retList}
 	self.Data["json"] = &Ret{ListCount: listCount, List: retList}
 	self.ServeJSON()
 	self.ServeJSON()
 }
 }
+
+//佣金转代金券
+func (self *BalanceController) TransferToBalance() {
+	//单位:分
+	amount, _ := self.GetInt64("amount")
+	useCache, _ := self.GetBool("cache", false)
+	wxUser := user_model.GetWxUserByUserId(27139, useCache)
+
+	//wxUser := self.GetCurrentWxUser(useCache)
+	//beego.BeeLogger.Warn("wxUser: %s", wxUser)
+
+	if wxUser == nil {
+		self.ReturnError(403, apps.NoExist, "", nil)
+	}
+
+	if amount <= 0 {
+		self.ReturnError(403, apps.TakeCashAmountInvalid, "", nil)
+	}
+
+	canExtract := balance_model.GetCashTotalBalance(wxUser.Id)
+
+	//余额不足
+	if canExtract < amount {
+		self.ReturnError(403, apps.BalanceNotEnough, "", nil)
+	}
+	result := true
+	//remark:= fmt.Sprintf("%s%d", "佣金转余额", amount)
+	remark := "佣金转代金券"
+	source := balance_model.CASH_TO_BALANCE
+
+	//先扣余额
+	order := new(balance_model.CashBalance).Create(wxUser.Id, -amount, source,
+		"cash_balance", remark)
+
+	//增加代金券金额
+	if order != nil {
+		total := amount * int64(2)
+		oId := fmt.Sprintf("%d", order.Id)
+		new(balance_model.Balance).Create(wxUser.Id, wxUser.UserId, total, source, oId, remark)
+	} else {
+		self.ReturnError(403, apps.BalanceToCashErr, "", nil)
+
+	}
+
+	type Ret struct {
+		State bool `json:"state"`
+	}
+	self.Data["json"] = &Ret{State: result}
+	self.ServeJSON()
+}
+
+//现金账户变动列表
+func (self *BalanceController) GetCashToBalanceList() {
+	page, _ := self.GetInt64("page", 1)
+	perPage, _ := self.GetInt64("per_page", 20)
+	if perPage <= 0 || perPage > 100 {
+		perPage = 20
+	}
+	cache, _ := self.GetBool("cache", false)
+
+	//wxUser := self.GetCurrentWxUser(cache)
+	wxUser := user_model.GetWxUserById(27139, true)
+	if wxUser == nil {
+		self.ReturnError(403, apps.UserNeedLogin, "", nil)
+	}
+	source := balance_model.CASH_TO_BALANCE
+
+	list := balance_model.GetCasTohBalanceListByWxUId(wxUser.Id, page, perPage, source, cache)
+	count := balance_model.GetCashToBalanceCountByWxUId(wxUser.Id, source)
+	type BalanceInfo struct {
+		BalanceList  []*balance_model.CashBalance `orm:"-" json:"balance_list"`
+		BalanceCount int64                        `orm:"-" json:"balance_count"`
+	}
+	for _, item := range list {
+		// item.SourceName = item.GetSourceName()
+		item.CTime = item.CreatedAt.Unix()
+	}
+
+	self.Data["json"] = &BalanceInfo{BalanceList: list, BalanceCount: count}
+	self.ServeJSON()
+}

+ 2 - 2
go/gopath/src/fohow.com/apps/controllers/balance_controller/init.go

@@ -16,8 +16,8 @@ import (
 
 
 var (
 var (
 	//需要校验用户登录的Action
 	//需要校验用户登录的Action
-	exceptCheckUserLoginAction   = []string{"GetTakeCashLimit", "GetCashBalanceList", "GetCashBalanceInfo", "GetBalanceInfo", "GetBalanceDetail", "GetBalanceList", "GetTakeCashOrders"}
-	exceptCheckWxUserLoginAction = []string{""}
+	exceptCheckUserLoginAction   = []string{"TransferToBalance", "GetCashToBalanceList", "GetTakeCashLimit", "GetCashBalanceList", "GetCashBalanceInfo", "GetBalanceInfo", "GetBalanceDetail", "GetBalanceList", "GetTakeCashOrders"}
+	exceptCheckWxUserLoginAction = []string{"TransferToBalance", "GetCashToBalanceList"}
 )
 )
 
 
 type BalanceController struct {
 type BalanceController struct {

+ 1 - 0
go/gopath/src/fohow.com/apps/init.go

@@ -167,6 +167,7 @@ var (
 	BankCardCountLimit               = []string{"bankCardCountLimit", "银行卡绑定数量限制"}
 	BankCardCountLimit               = []string{"bankCardCountLimit", "银行卡绑定数量限制"}
 	CanNotDeleteDefaultBankCard      = []string{"canNotDeleteDefaultBankCard", "不能删除默认银行卡"}
 	CanNotDeleteDefaultBankCard      = []string{"canNotDeleteDefaultBankCard", "不能删除默认银行卡"}
 	BankCardHasBound                 = []string{"bankCardHasBound", "该银行卡已有绑定记录"}
 	BankCardHasBound                 = []string{"bankCardHasBound", "该银行卡已有绑定记录"}
+	BalanceToCashErr                 = []string{"balanceToCashErr", "余额转代金券失败"}
 
 
 	//春节红包
 	//春节红包
 	ActivityNotStart = []string{"activityNotStart", "活动尚未开始"}
 	ActivityNotStart = []string{"activityNotStart", "活动尚未开始"}

+ 40 - 0
go/gopath/src/fohow.com/apps/models/balance_model/cash_balance.go

@@ -23,6 +23,9 @@ const (
 	CASH_SOURCE_TAKE_CASH      = "take_cash" //提现
 	CASH_SOURCE_TAKE_CASH      = "take_cash" //提现
 	CASH_SOURCE_TAKE_CASH_NAME = "提现"
 	CASH_SOURCE_TAKE_CASH_NAME = "提现"
 
 
+	CASH_TO_BALANCE      = "cash_to_balance" //佣金转代金券
+	CASH_TO_BALANCE_NAME = "佣金转代金券"
+
 	CASH_SOURCE_CORRECT           = "correct" //冲正
 	CASH_SOURCE_CORRECT           = "correct" //冲正
 	CASH_SOURCE_CORRECT_NAME      = "冲正"
 	CASH_SOURCE_CORRECT_NAME      = "冲正"
 	CASH_SOURCE_PROJECT_LOAN      = "project_loan"
 	CASH_SOURCE_PROJECT_LOAN      = "project_loan"
@@ -151,6 +154,8 @@ func (self *CashBalance) GetSourceName() string {
 		sourceName = CASH_SOURCE_PROJECT_BENEFIT_NAME
 		sourceName = CASH_SOURCE_PROJECT_BENEFIT_NAME
 	case CASH_SOURCE_TAKE_CASH:
 	case CASH_SOURCE_TAKE_CASH:
 		sourceName = CASH_SOURCE_TAKE_CASH_NAME
 		sourceName = CASH_SOURCE_TAKE_CASH_NAME
+	case CASH_TO_BALANCE:
+		sourceName = CASH_TO_BALANCE_NAME
 	case CASH_SOURCE_PRODUCT_SALE:
 	case CASH_SOURCE_PRODUCT_SALE:
 		sourceName = CASH_SOURCE_PRODUCT_SALE_NAME
 		sourceName = CASH_SOURCE_PRODUCT_SALE_NAME
 	case CASH_SOURCE_SALE_REWARD:
 	case CASH_SOURCE_SALE_REWARD:
@@ -360,3 +365,38 @@ func GetCashBalanceBySourceAndRId(source, rId string) *CashBalance {
 	}
 	}
 	return item
 	return item
 }
 }
+
+//获取某人的现金流列表
+func GetCasTohBalanceListByWxUId(wxUId, page, perPage int64, s string, useCache bool) (list []*CashBalance) {
+	k := fmt.Sprintf("balance_model.GetCashBalanceListByWxUId(%d).page(%d).perPage(%d)", wxUId, page, perPage)
+	if useCache {
+		if s, ok := cache.Cache.Get(k).([]*CashBalance); ok {
+			return s
+		}
+	}
+
+	balance := new(CashBalance)
+	qs := orm.NewOrm().QueryTable(balance)
+	qs = qs.Filter("wx_uid", wxUId).Filter("source", s)
+
+	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 GetCashToBalanceCountByWxUId(wxUId int64, s string) int64 {
+	item := new(CashBalance)
+	o := orm.NewOrm()
+	count, _ := o.QueryTable(item).Filter("wx_uid", wxUId).Filter("source", s).Count()
+	return count
+}

+ 4 - 0
go/gopath/src/fohow.com/routers/routes.go

@@ -186,6 +186,10 @@ func init() {
 	beego.Router("/v1/user/takecash/flow", &balance_controller.BalanceController{}, "get:GetTakeCashOrders")
 	beego.Router("/v1/user/takecash/flow", &balance_controller.BalanceController{}, "get:GetTakeCashOrders")
 	//提现限额
 	//提现限额
 	beego.Router("/v1/user/takecash/limit", &balance_controller.BalanceController{}, "get:GetTakeCashLimit")
 	beego.Router("/v1/user/takecash/limit", &balance_controller.BalanceController{}, "get:GetTakeCashLimit")
+	//转代金券
+	beego.Router("/v1/user/cash_transfer", &balance_controller.BalanceController{}, "post:TransferToBalance")
+	//转代金券流
+	beego.Router("/v1/user/takecash/flow", &balance_controller.BalanceController{}, "get:GetTakeCashOrders")
 
 
 	// //充值订单创建
 	// //充值订单创建
 	// beego.Router("/v1/balance/order", &balance_controller.BalanceController{}, "post:CreateBalanceOrder")
 	// beego.Router("/v1/balance/order", &balance_controller.BalanceController{}, "post:CreateBalanceOrder")