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

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

@@ -1,85 +0,0 @@
-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()
-}

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

@@ -0,0 +1,218 @@
+package cent_controller
+
+import (
+	"fmt"
+	"fohow.com/libs/lib_redis"
+	"github.com/astaxie/beego"
+
+	// "crypto/md5"
+	// "encoding/hex"
+	"strconv"
+	"time"
+
+	// "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元
+)
+
+type CountDownSignDaily struct {
+	TodaySignNum int64 `json:"today_sign_num"`
+	LastTime     int64 `json:"last_time"`
+}
+
+//积分和积分余额
+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()
+}
+
+//获得七日签到任务状态
+func (self *CentController) GetSignStatus() {
+	user := self.GetCurrentUser(false)
+	//user := user_model.GetUserById(1, false)
+	if user == nil {
+		self.ReturnError(403, apps.UserNotExist, "", nil)
+	}
+	now := time.Now()
+	yesterday := time.Now().Add(-24 * time.Hour)
+	result := &CountDownSignDaily{}
+	//每日签到任务
+	var everydayOk = true
+	var everydayNo int64 = 1
+	preKey := cent_model.PRE_KEY_DAILY
+	key := fmt.Sprintf("%s_%d_%d%02d%02d", preKey, user.Id, now.Year(), now.Month(), now.Day())
+	errToday := lib_redis.GetFromJSON(result, key) //判断今天签了没签
+	if errToday != nil {
+		beego.BeeLogger.Warn("GetSignStatus() TodayEveryday in redisClient  err, err:%s", errToday)
+		self.ReturnError(403, apps.RedisGetError, "", nil)
+	}
+	if result != nil {
+		everydayOk = false
+	}
+	yesterdayResult := &CountDownSignDaily{}
+	keyYesterday := fmt.Sprintf("%s_%d_%d%02d%02d", preKey, user.Id, yesterday.Year(), yesterday.Month(), yesterday.Day())
+
+	errYesterday := lib_redis.GetFromJSON(yesterdayResult, keyYesterday) //判断今天签了没签
+	if errYesterday != nil {
+		beego.BeeLogger.Warn("GetSignStatus() Yesterday in redisClient err, err:%s", errYesterday)
+		self.ReturnError(403, apps.RedisGetError, "", nil)
+	}
+	if yesterdayResult != nil {
+		if yesterdayResult.TodaySignNum >= 7 { //昨天是第	七天,则今天计为第1天
+			everydayNo = 1
+		} else {
+			everydayNo = result.TodaySignNum + 1
+		}
+	}
+	type Ret struct {
+		TodayEveryday   bool  `json:"today_everyday_ok"`
+		TodayEverydayNo int64 `json:"today_everyday_no"`
+	}
+	dataRet := &Ret{
+		TodayEveryday:   everydayOk,
+		TodayEverydayNo: everydayNo,
+	}
+
+	self.Data["json"] = dataRet
+	self.ServeJSON()
+}
+
+// 每日签到,领取积分
+func (self *CentController) SignEveryday() {
+
+	wxUId := self.GetCurrentWxUserId()
+	wxUser := user_model.GetWxUserById(wxUId, true)
+	if wxUser == nil {
+		self.ReturnError(403, apps.UserNeedLogin, "", nil)
+	}
+	now := time.Now()
+	lastTimeUnix := now.Unix() //记录最后一次领取时间
+	yesterday := time.Now().Add(-24 * time.Hour)
+
+	result := &CountDownSignDaily{}
+
+	preKey := cent_model.PRE_KEY_DAILY
+	key := fmt.Sprintf("%s_%d_%d%02d%02d", preKey, wxUser.Id, now.Year(), now.Month(), now.Day())
+	errToday := lib_redis.GetFromJSON(result, key) //判断今天签了没签
+	if errToday != nil {
+		beego.BeeLogger.Warn("SignEveryday() in redisClient.Get(key).Result() err, err:%s", errToday)
+		self.ReturnError(403, apps.RedisGetError, "", nil)
+	}
+
+	if result != nil {
+		self.ReturnError(403, apps.DailySignRepeat, "", nil)
+	}
+	yesterdayResult := &CountDownSignDaily{}
+
+	num := int64(1)
+	keyYesterday := fmt.Sprintf("%s_%d_%d%02d%02d", preKey, wxUser.Id, yesterday.Year(), yesterday.Month(), yesterday.Day())
+	errYesterday := lib_redis.GetFromJSON(yesterdayResult, keyYesterday) //判断今天签了没签
+	if errYesterday != nil {
+		beego.BeeLogger.Warn("SignEveryday() in redisClient.Get(key).Result() err, err:%s", errYesterday)
+		self.ReturnError(403, apps.RedisGetError, "", nil)
+	}
+	if yesterdayResult != nil {
+		if result.TodaySignNum >= 7 { //昨天是第五天,则今天计为第1天
+			num = 1
+		} else {
+			num = result.TodaySignNum + 1
+		}
+	}
+	type Ret struct {
+		TodaySignNum int64 `json:"today_sign_num"`
+		LastTime     int64 `json:"last_time"`
+	}
+
+	var dataRet *Ret
+	//领取积分
+	s := cent_model.GetDailySource(num) //积分类型
+	centAward := cent_model.GetCentAwardByCtype(s)
+	if centAward == nil {
+		self.ReturnError(403, apps.NoExist, "", nil)
+	}
+	count := centAward.Count
+	remark := fmt.Sprintf("每日签到(连续第%d天 领取:%d)", num, count)
+
+	//发放积分
+	c := new(cent_model.CentBalance).Create(wxUser.Id, count, s, s, remark)
+	if c != nil {
+		//标志进账
+		dataRet = &Ret{TodaySignNum: num, LastTime: lastTimeUnix}
+		err := lib_redis.SetJsonEx(key, dataRet, 7*24*60*60)
+		if err != nil {
+			beego.BeeLogger.Warn("SignEveryday() in redisClient.Set() err, err:%s", err)
+		}
+	}
+	self.Data["json"] = dataRet
+	self.ServeJSON()
+
+}

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

@@ -27,6 +27,10 @@ const (
 
 var (
 	// 共用
+	DailySignRepeat       = []string{"dailySignRepeat", "已经领取过啦"}
+	RedisError            = []string{"redisError", "redis初始化错误"}
+	RedisGetError         = []string{"redisGetError", "redisGet错误"}
+	RedisJsonError        = []string{"redisJsonError", "json转换错误"}
 	OrderRefundError      = []string{"orderRefundError", "退款失败"}
 	OtherSNotAllow        = []string{"othersNotAllow", "非店长无法在专区下单!"}
 	AlreadyShop           = []string{"alreadyShop", "您已经是店主,请勿重复申请"}

+ 37 - 19
go/gopath/src/fohow.com/apps/models/cent_model/cent_award.go

@@ -10,25 +10,24 @@ import (
 
 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     = "新人注册"
+	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 {
@@ -81,3 +80,22 @@ func GetCentAwardByCtype(ctype string) *CentAward {
 	}
 	return item
 }
+
+// 连续第几天的积分对应数
+func GetDailySource(day int64) string {
+	source := ONE_DAY
+	if day == 2 {
+		source = TWO_DAY
+	} else if day == 3 {
+		source = THREE_DAY
+	} else if day == 4 {
+		source = FOUR_DAY
+	} else if day == 5 {
+		source = FIVE_DAY
+	} else if day == 6 {
+		source = SIX_DAY
+	} else if day >= 7 {
+		source = SEVEN_DAY
+	}
+	return source
+}

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

@@ -31,6 +31,7 @@ const (
 	CENT_FIRST_LOGIN_NAME = "首次登录"
 	CENT_NEW_MAN          = "new_man"
 	CENT_NEW_MAN_NAME     = "新人注册"
+	PRE_KEY_DAILY         = "day_sign"
 )
 
 //积分余额表

+ 0 - 2
go/gopath/src/fohow.com/libs/lib_redis/redis.go

@@ -99,10 +99,8 @@ func GetFromJSON(data interface{}, key string) error {
 	if err != nil {
 		return err
 	}
-
 	if err := json.Unmarshal(jsonData, data); err != nil {
 		beego.Warn("lib_redis.GetFromJSON: %s %s", string(jsonData), err)
-
 		return err
 	}
 	//beego.BeeLogger.Info("result 返回字符:%s", jsonData)

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

@@ -1,6 +1,7 @@
 package routers
 
 import (
+	"fohow.com/apps/controllers/cent_controller"
 	"fohow.com/apps/controllers/test_controller"
 	// "fohow.com/apps"
 	"github.com/astaxie/beego"
@@ -282,4 +283,8 @@ func init() {
 	//店铺专区下单
 	beego.Router("/v1/shop/order_mul", &order_controller.OrderController{}, "post:MultShopCreate")
 
+	//----------------积分活动-------------------
+	beego.Router("/v1/task_sign/daily/day", &cent_controller.CentController{}, "post:SignEveryday")
+	beego.Router("/v1/task_sign/daily/check", &cent_controller.CentController{}, "get:GetSignStatus")
+
 }