|
@@ -0,0 +1,265 @@
|
|
|
|
|
+package cent_controller
|
|
|
|
|
+
|
|
|
|
|
+import (
|
|
|
|
|
+ "fmt"
|
|
|
|
|
+ "fohow.com/libs/lib_redis"
|
|
|
|
|
+ "github.com/astaxie/beego"
|
|
|
|
|
+ "github.com/go-redis/redis"
|
|
|
|
|
+
|
|
|
|
|
+ // "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"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+type CountDownSignDaily struct {
|
|
|
|
|
+ TodaySignNum int64 `json:"today_sign_num"`
|
|
|
|
|
+ LastTime int64 `json:"last_time"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+type CountDownCentAward struct {
|
|
|
|
|
+ Oneday int64 `json:"one_day"`
|
|
|
|
|
+ Twoday int64 `json:"two_day"`
|
|
|
|
|
+ Threeday int64 `json:"three_day"`
|
|
|
|
|
+ Fourday int64 `json:"four_day"`
|
|
|
|
|
+ Fiveday int64 `json:"five_day"`
|
|
|
|
|
+ Sixday int64 `json:"six_day"`
|
|
|
|
|
+ Sevenday int64 `json:"seven_day"`
|
|
|
|
|
+ Firstlogin int64 `json:"first_login"`
|
|
|
|
|
+ Newman int64 `json:"new_man"`
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+//积分和积分余额
|
|
|
|
|
+func (self *CentController) GetCentInfo() {
|
|
|
|
|
+ type CentInfo struct {
|
|
|
|
|
+ Total int64 `orm:"-" json:"total"` //余额,单位分
|
|
|
|
|
+ }
|
|
|
|
|
+ //user := self.GetCurrentUser(true)
|
|
|
|
|
+ wxUId := self.GetCurrentWxUserId()
|
|
|
|
|
+ //wxUId := int64(1781)
|
|
|
|
|
+ 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()
|
|
|
|
|
+ //wxUId := int64(1781)
|
|
|
|
|
+ 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()
|
|
|
|
|
+ //wxUId := int64(1781)
|
|
|
|
|
+ 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() {
|
|
|
|
|
+ wxUId := self.GetCurrentWxUserId()
|
|
|
|
|
+ wxUser := user_model.GetWxUserById(wxUId, true)
|
|
|
|
|
+ if wxUser == nil {
|
|
|
|
|
+ self.ReturnError(403, apps.UserNeedLogin, "", 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, wxUser.Id, now.Year(), now.Month(), now.Day())
|
|
|
|
|
+ errToday := lib_redis.GetFromJSON(result, key) //判断今天签了没签
|
|
|
|
|
+ if errToday != redis.Nil && errToday != nil {
|
|
|
|
|
+ beego.BeeLogger.Warn("GetSignStatus() TodayEveryday in redisClient err, err:%s", errToday)
|
|
|
|
|
+ self.ReturnError(403, apps.RedisGetError, "", nil)
|
|
|
|
|
+ }
|
|
|
|
|
+ if result.TodaySignNum > int64(0) {
|
|
|
|
|
+ everydayOk = false
|
|
|
|
|
+ }
|
|
|
|
|
+ yesterdayResult := &CountDownSignDaily{}
|
|
|
|
|
+ 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 != redis.Nil && errYesterday != nil {
|
|
|
|
|
+ beego.BeeLogger.Warn("GetSignStatus() Yesterday in redisClient err, err:%s", errYesterday)
|
|
|
|
|
+ self.ReturnError(403, apps.RedisGetError, "", nil)
|
|
|
|
|
+ }
|
|
|
|
|
+ if yesterdayResult.TodaySignNum > int64(0) {
|
|
|
|
|
+ if yesterdayResult.TodaySignNum >= 7 { //昨天是第 七天,则今天计为第1天
|
|
|
|
|
+ everydayNo = 1
|
|
|
|
|
+ } else {
|
|
|
|
|
+ everydayNo = yesterdayResult.TodaySignNum + 1
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ type Ret struct {
|
|
|
|
|
+ TodayEveryday bool `json:"today_everyday_ok"`
|
|
|
|
|
+ TodayEverydayNo int64 `json:"today_everyday_no"`
|
|
|
|
|
+ CountDownCentAward CountDownCentAward `json:"cent_award_conf"`
|
|
|
|
|
+ }
|
|
|
|
|
+ dataRet := &Ret{
|
|
|
|
|
+ TodayEveryday: everydayOk,
|
|
|
|
|
+ TodayEverydayNo: everydayNo,
|
|
|
|
|
+ }
|
|
|
|
|
+ //获取赠送积分配置
|
|
|
|
|
+ oneDay := cent_model.GetCentAwardByCtype(cent_model.ONE_DAY, true)
|
|
|
|
|
+ if oneDay != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Oneday = oneDay.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ twoDay := cent_model.GetCentAwardByCtype(cent_model.TWO_DAY, true)
|
|
|
|
|
+ if twoDay != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Twoday = twoDay.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ threeDay := cent_model.GetCentAwardByCtype(cent_model.THREE_DAY, true)
|
|
|
|
|
+ if threeDay != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Threeday = threeDay.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ fourDay := cent_model.GetCentAwardByCtype(cent_model.FOUR_DAY, true)
|
|
|
|
|
+ if fourDay != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Fourday = fourDay.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ fiveDay := cent_model.GetCentAwardByCtype(cent_model.FIVE_DAY, true)
|
|
|
|
|
+ if fiveDay != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Fiveday = fiveDay.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ sixDay := cent_model.GetCentAwardByCtype(cent_model.SIX_DAY, true)
|
|
|
|
|
+ if sixDay != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Sixday = sixDay.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ sevenDay := cent_model.GetCentAwardByCtype(cent_model.SEVEN_DAY, true)
|
|
|
|
|
+ if sevenDay != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Sevenday = sevenDay.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ firstL := cent_model.GetCentAwardByCtype(cent_model.FIRST_LOGIN, true)
|
|
|
|
|
+ if firstL != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Firstlogin = firstL.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ newMan := cent_model.GetCentAwardByCtype(cent_model.NEW_MAN, true)
|
|
|
|
|
+ if newMan != nil {
|
|
|
|
|
+ dataRet.CountDownCentAward.Newman = newMan.Count
|
|
|
|
|
+ }
|
|
|
|
|
+ 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 != redis.Nil && errToday != nil {
|
|
|
|
|
+ beego.BeeLogger.Warn("SignEveryday() in redisClient.Get(key).Result() err, err:%s", errToday)
|
|
|
|
|
+ self.ReturnError(403, apps.RedisGetError, "", nil)
|
|
|
|
|
+ }
|
|
|
|
|
+ beego.BeeLogger.Warn("Result()%v", result)
|
|
|
|
|
+ if result.TodaySignNum > 0 {
|
|
|
|
|
+ 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 != redis.Nil && errYesterday != nil {
|
|
|
|
|
+ beego.BeeLogger.Warn("SignEveryday() in redisClient.Get(key).Result() err, errYesterday:%s", errYesterday)
|
|
|
|
|
+ self.ReturnError(403, apps.RedisGetError, "", nil)
|
|
|
|
|
+ }
|
|
|
|
|
+ if yesterdayResult != nil {
|
|
|
|
|
+ if yesterdayResult.TodaySignNum >= 7 { //昨天是第五天,则今天计为第1天
|
|
|
|
|
+ num = 1
|
|
|
|
|
+ } else {
|
|
|
|
|
+ num = yesterdayResult.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, true)
|
|
|
|
|
+ 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()
|
|
|
|
|
+
|
|
|
|
|
+}
|